comparison src/w32font.c @ 93675:7fb9a5b86fa8

(w32font_text_extents): Use font's ascent and descent. (recompute_cached_metrics): Don't set ascent and descent per char.
author Jason Rumney <jasonr@gnu.org>
date Fri, 04 Apr 2008 23:05:43 +0000
parents 6b92cdd67bfb
children 833bbf13f09d
comparison
equal deleted inserted replaced
93674:44fab469d68d 93675:7fb9a5b86fa8
376 /* Set transform to the identity matrix. */ 376 /* Set transform to the identity matrix. */
377 bzero (&transform, sizeof (transform)); 377 bzero (&transform, sizeof (transform));
378 transform.eM11.value = 1; 378 transform.eM11.value = 1;
379 transform.eM22.value = 1; 379 transform.eM22.value = 1;
380 metrics->width = 0; 380 metrics->width = 0;
381 metrics->ascent = 0; 381 metrics->ascent = font->ascent;
382 metrics->descent = 0; 382 metrics->descent = font->descent;
383 metrics->lbearing = 0; 383 metrics->lbearing = 0;
384 384
385 for (i = 0; i < nglyphs; i++) 385 for (i = 0; i < nglyphs; i++)
386 { 386 {
387 if (*(code + i) < 128) 387 if (*(code + i) < 128)
397 metrics->lbearing = min (metrics->lbearing, 397 metrics->lbearing = min (metrics->lbearing,
398 metrics->width + char_metric->lbearing); 398 metrics->width + char_metric->lbearing);
399 metrics->rbearing = max (metrics->rbearing, 399 metrics->rbearing = max (metrics->rbearing,
400 metrics->width + char_metric->rbearing); 400 metrics->width + char_metric->rbearing);
401 metrics->width += char_metric->width; 401 metrics->width += char_metric->width;
402 metrics->ascent = max (metrics->ascent, char_metric->ascent);
403 metrics->descent = max (metrics->descent, char_metric->descent);
404 } 402 }
405 else 403 else
406 { 404 {
407 if (dc == NULL) 405 if (dc == NULL)
408 { 406 {
420 + gm.gmptGlyphOrigin.x; 418 + gm.gmptGlyphOrigin.x;
421 metrics->rbearing = max (metrics->rbearing, new_val); 419 metrics->rbearing = max (metrics->rbearing, new_val);
422 new_val = metrics->width + gm.gmptGlyphOrigin.x; 420 new_val = metrics->width + gm.gmptGlyphOrigin.x;
423 metrics->lbearing = min (metrics->lbearing, new_val); 421 metrics->lbearing = min (metrics->lbearing, new_val);
424 metrics->width += gm.gmCellIncX; 422 metrics->width += gm.gmCellIncX;
425 new_val = gm.gmBlackBoxY;
426 metrics->ascent = max (metrics->ascent, new_val);
427 new_val = (gm.gmCellIncY - gm.gmptGlyphOrigin.y
428 - gm.gmBlackBoxY);
429 metrics->descent = max (metrics->descent, new_val);
430 } 423 }
431 else 424 else
432 { 425 {
433 if (w32_font->glyph_idx) 426 if (w32_font->glyph_idx)
434 { 427 {
503 496
504 /* Give our best estimate of the metrics, based on what we know. */ 497 /* Give our best estimate of the metrics, based on what we know. */
505 if (metrics) 498 if (metrics)
506 { 499 {
507 metrics->width = total_width; 500 metrics->width = total_width;
508 metrics->ascent = font->ascent;
509 metrics->descent = font->descent;
510 metrics->lbearing = 0; 501 metrics->lbearing = 0;
511 metrics->rbearing = total_width 502 metrics->rbearing = total_width
512 + ((struct w32font_info *) font)->metrics.tmOverhang; 503 + ((struct w32font_info *) font)->metrics.tmOverhang;
513 } 504 }
514 505
1840 != GDI_ERROR) 1831 != GDI_ERROR)
1841 { 1832 {
1842 char_metric->lbearing = gm.gmptGlyphOrigin.x; 1833 char_metric->lbearing = gm.gmptGlyphOrigin.x;
1843 char_metric->rbearing = gm.gmBlackBoxX + gm.gmptGlyphOrigin.x; 1834 char_metric->rbearing = gm.gmBlackBoxX + gm.gmptGlyphOrigin.x;
1844 char_metric->width = gm.gmCellIncX; 1835 char_metric->width = gm.gmCellIncX;
1845 char_metric->ascent = gm.gmBlackBoxY;
1846 char_metric->descent = (gm.gmCellIncY - gm.gmptGlyphOrigin.y
1847 - gm.gmBlackBoxY);
1848 } 1836 }
1849 else 1837 else
1850 char_metric->width = 0; 1838 char_metric->width = 0;
1851 } 1839 }
1852 } 1840 }