Mercurial > emacs
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 } |