[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r117149: Simplify NS font driver draw, merge from Ma
From: |
Jan D. |
Subject: |
[Emacs-diffs] trunk r117149: Simplify NS font driver draw, merge from Macport. |
Date: |
Sun, 25 May 2014 10:28:58 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 117149
revision-id: address@hidden
parent: address@hidden
committer: Jan D. <address@hidden>
branch nick: trunk
timestamp: Sun 2014-05-25 12:28:52 +0200
message:
Simplify NS font driver draw, merge from Macport.
* macfont.m (macfont_draw): Merge changes from Macport.
* nsterm.m (ns_draw_glyph_string): Move isComposite and end from
macfont.m, call draw with adjusted arguments so font drivers
don't need to do that.
* nsfont.m (nsfont_draw): Simplify as arguments are adjusted in
nsterm.m now.
modified:
src/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1438
src/macfont.m macfont.m-20130915173740-04lgloz0557bz98l-2
src/nsfont.m nsfont.m-20091113204419-o5vbwnq5f7feedwu-8748
src/nsterm.m nsterm.m-20091113204419-o5vbwnq5f7feedwu-8747
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2014-05-24 12:02:25 +0000
+++ b/src/ChangeLog 2014-05-25 10:28:52 +0000
@@ -1,3 +1,14 @@
+2014-05-25 Jan Djärv <address@hidden>
+
+ * nsfont.m (nsfont_draw): Simplify as arguments are adjusted in
+ nsterm.m now.
+
+ * nsterm.m (ns_draw_glyph_string): Move isComposite and end from
+ macfont.m, call draw with adjusted arguments so font drivers
+ don't need to do that.
+
+ * macfont.m (macfont_draw): Merge changes from Macport.
+
2014-05-24 Eli Zaretskii <address@hidden>
* alloc.c (garbage_collect_1): New function, with all of the guts
=== modified file 'src/macfont.m'
--- a/src/macfont.m 2014-04-03 20:46:04 +0000
+++ b/src/macfont.m 2014-05-25 10:28:52 +0000
@@ -776,7 +776,7 @@
SInt64 sint64_value;
/* Getting symbolic traits with kCFNumberSInt32Type is lossy on Mac
- OS 10.6 when the value is greater than or equal to 1 << 31. */
+ OS X 10.6 when the value is greater than or equal to 1 << 31. */
if (CFNumberGetValue (number, kCFNumberSInt64Type, &sint64_value))
{
*sym_traits = (FontSymbolicTraits) sint64_value;
@@ -1251,8 +1251,7 @@
CTFontCopyCharacterSet nor -[NSFont coveredCharacterSet]
for this font is correct for non-BMP characters on Mac OS
X 10.5, anyway. */
- if (CFStringCompare (key, CFSTR ("LastResort"), 0)
- == kCFCompareEqualTo)
+ if (CFEqual (key, CFSTR ("LastResort")))
{
CFRange range = CFRangeMake (0, MAX_UNICODE_CHAR + 1);
@@ -2210,27 +2209,26 @@
10.7 returns NULL if pat_desc represents the LastResort font.
So we use CTFontDescriptorCreateMatchingFontDescriptor (no
trailing "s") for such a font. */
- if (CFStringCompare (family_name, CFSTR ("LastResort"), 0)
- != kCFCompareEqualTo)
- descs = mac_font_descriptor_create_matching_font_descriptors (pat_desc,
- NULL);
+ if (!CFEqual (family_name, CFSTR ("LastResort")))
+ descs = mac_font_descriptor_create_matching_font_descriptors (pat_desc,
+ NULL);
else
- {
- FontDescriptorRef lr_desc =
- mac_font_descriptor_create_matching_font_descriptor (pat_desc,
- NULL);
- if (lr_desc)
- {
- descs = CFArrayCreate (NULL, (const void **) &lr_desc, 1,
- &kCFTypeArrayCallBacks);
- CFRelease (lr_desc);
- }
- else
- descs = NULL;
- }
+ {
+ FontDescriptorRef lr_desc =
+ mac_font_descriptor_create_matching_font_descriptor (pat_desc,
+ NULL);
+ if (lr_desc)
+ {
+ descs = CFArrayCreate (NULL, (const void **) &lr_desc, 1,
+ &kCFTypeArrayCallBacks);
+ CFRelease (lr_desc);
+ }
+ else
+ descs = NULL;
+ }
CFRelease (pat_desc);
if (! descs)
- goto err;
+ goto err;
descs_count = CFArrayGetCount (descs);
if (descs_count == 0
@@ -2571,12 +2569,9 @@
family_name = mac_font_copy_family_name (macfont);
if (family_name)
{
- if ((CFStringCompare (family_name, CFSTR ("Courier"), 0)
- == kCFCompareEqualTo)
- || (CFStringCompare (family_name, CFSTR ("Helvetica"), 0)
- == kCFCompareEqualTo)
- || (CFStringCompare (family_name, CFSTR ("Times"), 0)
- == kCFCompareEqualTo))
+ if (CFEqual (family_name, CFSTR ("Courier"))
+ || CFEqual (family_name, CFSTR ("Helvetica"))
+ || CFEqual (family_name, CFSTR ("Times")))
ascent += (ascent + descent) * .15f;
else if (CFStringHasPrefix (family_name, CFSTR ("Hiragino")))
{
@@ -2711,33 +2706,54 @@
{
struct frame * f = s->f;
struct macfont_info *macfont_info = (struct macfont_info *) s->font;
- FontRef macfont = macfont_info->macfont;
+ CGRect background_rect;
+ CGPoint text_position;
+ CGGlyph *glyphs;
+ CGPoint *positions;
+ CGFloat font_size = mac_font_get_size (macfont_info->macfont);
+ bool no_antialias_p =
+ (macfont_info->antialias == MACFONT_ANTIALIAS_OFF
+ || (macfont_info->antialias == MACFONT_ANTIALIAS_DEFAULT
+ && font_size <= macfont_antialias_threshold));
+ int len = to - from;
+ struct face *face = s->face;
CGContextRef context;
- BOOL isComposite = s->first_glyph->type == COMPOSITE_GLYPH;
- int end = isComposite ? s->cmp_to : s->nchars;
- int len = end - s->cmp_from;
- struct face *face = s->face;
- int i;
block_input ();
+ if (with_background)
+ background_rect = CGRectMake (x, y - FONT_BASE (s->font),
+ s->width, FONT_HEIGHT (s->font));
+ else
+ background_rect = CGRectNull;
+
+ text_position = CGPointMake (x, -y);
+ glyphs = xmalloc (sizeof (CGGlyph) * len);
+ {
+ CGFloat advance_delta;
+ int i;
+ CGFloat total_width = 0;
+
+ positions = xmalloc (sizeof (CGPoint) * len);
+ for (i = 0; i < len; i++)
+ {
+ int width;
+
+ glyphs[i] = s->char2b[from + i];
+ width = (s->padding_p ? 1
+ : macfont_glyph_extents (s->font, glyphs[i],
+ NULL, &advance_delta,
+ no_antialias_p));
+ positions[i].x = total_width + advance_delta;
+ positions[i].y = 0;
+ total_width += width;
+ }
+ }
+
context = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSaveGState (context);
-#if 0
- if (s->num_clips > 0)
- {
- CGRect clips[2];
-
- for (i = 0; i < s->num_clips; i++)
- clips[i] = mac_rect_make (f, s->clip[i].left, s->clip[i].top,
- s->clip[i].right - s->clip[i].left,
- s->clip[i].bottom - s->clip[i].top);
- CGContextClipToRects (context, clips, s->num_clips);
- }
-#endif
-
- if (with_background)
+ if (!CGRectIsNull (background_rect))
{
if (s->hl == DRAW_MOUSE_FACE)
{
@@ -2745,41 +2761,13 @@
if (!face)
face = FACE_FROM_ID (s->f, MOUSE_FACE_ID);
}
-
CG_SET_FILL_COLOR_WITH_FACE_BACKGROUND (context, face, f);
- CGContextFillRect (context,
- CGRectMake (x, y,
- s->width, FONT_HEIGHT (s->font)));
+ CGContextFillRects (context, &background_rect, 1);
}
if (macfont_info->cgfont)
{
- CGGlyph *glyphs = alloca (sizeof (CGGlyph) * len);
- CGPoint *positions = alloca (sizeof (CGPoint) * len);
- CGFloat total_width = 0;
- CGFloat font_size = mac_font_get_size (macfont);
CGAffineTransform atfm;
- CGFloat advance_delta = 0;
- int y_draw = -s->ybase;
- int no_antialias_p =
- (macfont_info->antialias == MACFONT_ANTIALIAS_OFF
- || (macfont_info->antialias == MACFONT_ANTIALIAS_DEFAULT
- && font_size <= macfont_antialias_threshold));
-
- for (i = 0; i < len; i++)
- {
- int width;
-
- glyphs[i] = *(s->char2b + s->cmp_from + i);
- width = (s->padding_p ? 1
- : macfont_glyph_extents (s->font, glyphs[i],
- NULL, &advance_delta,
- no_antialias_p));
- positions[i].x = total_width + advance_delta;
- positions[i].y = 0;
- total_width += width;
- }
-
CGContextScaleCTM (context, 1, -1);
CG_SET_FILL_COLOR_WITH_FACE_FOREGROUND (context, face, s->f);
if (macfont_info->synthetic_italic_p)
@@ -2796,7 +2784,7 @@
CGContextSetShouldAntialias (context, false);
CGContextSetTextMatrix (context, atfm);
- CGContextSetTextPosition (context, x, y_draw);
+ CGContextSetTextPosition (context, text_position.x, text_position.y);
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
if (macfont_info->color_bitmap_p
@@ -2807,7 +2795,8 @@
{
if (len > 0)
{
- CTFontDrawGlyphs (macfont, glyphs, positions, len, context);
+ CTFontDrawGlyphs (macfont_info->macfont, glyphs, positions, len,
+ context);
}
}
else
@@ -2819,6 +2808,8 @@
}
}
+
+ xfree (glyphs);
CGContextRestoreGState (context);
unblock_input ();
@@ -3557,7 +3548,7 @@
name2 = CTFontCopyPostScriptName (font2);
if (name2)
{
- result = (CFStringCompare (name1, name2, 0) == kCFCompareEqualTo);
+ result = CFEqual (name1, name2);
CFRelease (name2);
}
CFRelease (name1);
@@ -3930,8 +3921,8 @@
for (i = 0; macfont_language_default_font_names[i].language; i++)
{
- if (CFStringCompare (macfont_language_default_font_names[i].language,
- language, 0) == kCFCompareEqualTo)
+ if (CFEqual (macfont_language_default_font_names[i].language,
+ language))
{
CFMutableArrayRef descriptors =
CFArrayCreateMutable (NULL, 0, &kCFTypeArrayCallBacks);
@@ -4011,9 +4002,8 @@
if (family)
{
if (!CFStringHasPrefix (family, CFSTR ("."))
- && (CFStringCompare (family, CFSTR ("LastResort"), 0)
- != kCFCompareEqualTo))
- {
+ && !CFEqual (family, CFSTR ("LastResort")))
+ {
result = family;
break;
}
=== modified file 'src/nsfont.m'
--- a/src/nsfont.m 2014-01-01 07:43:34 +0000
+++ b/src/nsfont.m 2014-05-25 10:28:52 +0000
@@ -1037,8 +1037,7 @@
static int
nsfont_draw (struct glyph_string *s, int from, int to, int x, int y,
bool with_background)
-/* NOTE: focus and clip must be set
- also, currently assumed (true in nsterm.m call) from ==0, to ==nchars */
+/* NOTE: focus and clip must be set */
{
static unsigned char cbuf[1024];
unsigned char *c = cbuf;
@@ -1056,7 +1055,6 @@
unsigned short *t = s->char2b;
int i, len, flags;
char isComposite = s->first_glyph->type == COMPOSITE_GLYPH;
- int end = isComposite ? s->cmp_to : s->nchars;
block_input ();
@@ -1098,8 +1096,8 @@
int cwidth, twidth = 0;
int hi, lo;
/* FIXME: composition: no vertical displacement is considered. */
- t += s->cmp_from; /* advance into composition */
- for (i = s->cmp_from; i < end; i++, t++)
+ t += from; /* advance into composition */
+ for (i = from; i < to; i++, t++)
{
hi = (*t & 0xFF00) >> 8;
lo = *t & 0x00FF;
@@ -1193,7 +1191,7 @@
/* set up for character rendering */
- r.origin.y = s->ybase;
+ r.origin.y = y;
col = (NS_FACE_FOREGROUND (face) != 0
? ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f)
@@ -1275,13 +1273,13 @@
[col set];
CGContextSetTextPosition (gcontext, r.origin.x, r.origin.y);
- CGContextShowGlyphsWithAdvances (gcontext, s->char2b + s->cmp_from,
+ CGContextShowGlyphsWithAdvances (gcontext, s->char2b + from,
advances, len);
if (face->overstrike)
{
CGContextSetTextPosition (gcontext, r.origin.x+0.5, r.origin.y);
- CGContextShowGlyphsWithAdvances (gcontext, s->char2b + s->cmp_from,
+ CGContextShowGlyphsWithAdvances (gcontext, s->char2b + from,
advances, len);
}
=== modified file 'src/nsterm.m'
--- a/src/nsterm.m 2014-05-14 13:55:37 +0000
+++ b/src/nsterm.m 2014-05-25 10:28:52 +0000
@@ -3355,10 +3355,16 @@
NS_FACE_FOREGROUND (s->face) = tmp;
}
- font->driver->draw
- (s, 0, s->nchars, s->x, s->y,
- (flags == NS_DUMPGLYPH_NORMAL && !s->background_filled_p)
- || flags == NS_DUMPGLYPH_MOUSEFACE);
+ {
+ BOOL isComposite = s->first_glyph->type == COMPOSITE_GLYPH;
+ int end = isComposite ? s->cmp_to : s->nchars;
+
+ font->driver->draw
+ (s, s->cmp_from, end, s->x, s->ybase,
+ (flags == NS_DUMPGLYPH_NORMAL && !s->background_filled_p)
+ || flags == NS_DUMPGLYPH_MOUSEFACE);
+
+ }
{
NSColor *col = (NS_FACE_FOREGROUND (s->face) != 0
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r117149: Simplify NS font driver draw, merge from Macport.,
Jan D. <=