[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r103019: Handle floating point errors
From: |
Jan D. |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r103019: Handle floating point errors in ns-fonts (Bug#7887). |
Date: |
Sat, 29 Jan 2011 11:36:16 +0100 |
User-agent: |
Bazaar (2.0.3) |
------------------------------------------------------------
revno: 103019
committer: Jan D. <address@hidden>
branch nick: trunk
timestamp: Sat 2011-01-29 11:36:16 +0100
message:
Handle floating point errors in ns-fonts (Bug#7887).
* nsfont.m (nsfont_open): Ensure that fonts with inexact
descenders would not become one pixel too tall (Bug#7887).
modified:
src/ChangeLog
src/nsfont.m
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2011-01-28 20:30:38 +0000
+++ b/src/ChangeLog 2011-01-29 10:36:16 +0000
@@ -1,3 +1,8 @@
+2011-01-29 Anders Lindgren <address@hidden> (tiny change)
+
+ * nsfont.m (nsfont_open): Ensure that fonts with inexact
+ descenders would not become one pixel too tall (Bug#7887).
+
2011-01-28 Chong Yidong <address@hidden>
* keyboard.c (make_lispy_position): For clicks on right fringe or
=== modified file 'src/nsfont.m'
--- a/src/nsfont.m 2011-01-25 04:08:28 +0000
+++ b/src/nsfont.m 2011-01-29 10:36:16 +0000
@@ -809,6 +809,14 @@
const char *fontName = [[nsfont fontName] UTF8String];
int len = strlen (fontName);
+ /* The values specified by fonts are not always exact. For
+ * example, a 6x8 font could specify that the descender is
+ * -2.00000405... (represented by 0xc000000220000000). Without
+ * adjustment, the code below would round the descender to -3,
+ * resulting in a font that would be one pixel higher than
+ * intended. */
+ CGFloat adjusted_descender = [sfont descender] + 0.0001;
+
#ifdef NS_IMPL_GNUSTEP
font_info->nsfont = sfont;
#else
@@ -830,7 +838,7 @@
brect = [sfont boundingRectForFont];
full_height = brect.size.height;
- min_height = [sfont ascender] - [sfont descender];
+ min_height = [sfont ascender] - adjusted_descender;
hd = full_height - min_height;
/* standard height, similar to Carbon. Emacs.app: was 0.5 by default. */
@@ -845,10 +853,10 @@
/* max bounds */
font_info->max_bounds.ascent =
lrint (hshrink * [sfont ascender] + expand * hd/2);
- /* [sfont descender] is usually negative. Use floor to avoid
+ /* Descender is usually negative. Use floor to avoid
clipping descenders. */
font_info->max_bounds.descent =
- -lrint (floor(hshrink* [sfont descender] - expand*hd/2));
+ -lrint (floor(hshrink* adjusted_descender - expand*hd/2));
font_info->height =
font_info->max_bounds.ascent + font_info->max_bounds.descent;
font_info->max_bounds.width = lrint (font_info->width);
@@ -884,7 +892,7 @@
/* set up metrics portion of font struct */
font->ascent = lrint([sfont ascender]);
- font->descent = -lrint(floor([sfont descender]));
+ font->descent = -lrint(floor(adjusted_descender));
font->min_width = ns_char_width(sfont, '|');
font->space_width = lrint (ns_char_width (sfont, ' '));
font->average_width = lrint (font_info->width);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r103019: Handle floating point errors in ns-fonts (Bug#7887).,
Jan D. <=