[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r115489: * font.h (struct font_entity) [HAVE_NS]: Ne
From: |
Dmitry Antipov |
Subject: |
[Emacs-diffs] trunk r115489: * font.h (struct font_entity) [HAVE_NS]: New field to record |
Date: |
Thu, 12 Dec 2013 14:26:43 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 115489
revision-id: address@hidden
parent: address@hidden
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Thu 2013-12-12 18:26:06 +0400
message:
* font.h (struct font_entity) [HAVE_NS]: New field to record
font driver which was used to create this entity.
(struct font) [HAVE_WINDOW_SYSTEM]: New field to record
frame where the font was opened.
(font_close_object): Add prototype.
* font.c (font_make_entity) [HAVE_NS]: Zero out driver field.
(font_close_object): Not static any more. Lost frame arg.
Adjust comment and users.
* alloc.c (cleanup_vector): Call font_close_object to adjust
per-frame font counters correctly. If HAVE_NS, also call
driver-specific cleanup for font-entity objects.
* ftfont.c (ftfont_open):
* nsfont.m (nsfont_open):
* w32font.c (w32font_open_internal):
* xfont.c (xfont_open):
* xftfont.c (xftfont_open): Save frame pointer in font object.
* macfont.m (macfont_open): Likewise.
(macfont_descriptor_entity): Save driver pointer to be able
to call its free_entity routine when font-entity is swept.
* ftxfont.c (ftxfont_open): Add eassert because frame
pointer should be saved by ftfont_driver.open.
modified:
src/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1438
src/alloc.c alloc.c-20091113204419-o5vbwnq5f7feedwu-252
src/font.c font.c-20091113204419-o5vbwnq5f7feedwu-8540
src/font.h font.h-20091113204419-o5vbwnq5f7feedwu-8541
src/ftfont.c ftfont.c-20091113204419-o5vbwnq5f7feedwu-8542
src/ftxfont.c ftxfont.c-20091113204419-o5vbwnq5f7feedwu-8544
src/macfont.m macfont.m-20130915173740-04lgloz0557bz98l-2
src/nsfont.m nsfont.m-20091113204419-o5vbwnq5f7feedwu-8748
src/w32font.c w32font.c-20091113204419-o5vbwnq5f7feedwu-8545
src/xfont.c xfont.c-20091113204419-o5vbwnq5f7feedwu-8547
src/xftfont.c xftfont.c-20091113204419-o5vbwnq5f7feedwu-8548
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2013-12-12 08:39:41 +0000
+++ b/src/ChangeLog 2013-12-12 14:26:06 +0000
@@ -1,5 +1,29 @@
2013-12-12 Dmitry Antipov <address@hidden>
+ * font.h (struct font_entity) [HAVE_NS]: New field to record
+ font driver which was used to create this entity.
+ (struct font) [HAVE_WINDOW_SYSTEM]: New field to record
+ frame where the font was opened.
+ (font_close_object): Add prototype.
+ * font.c (font_make_entity) [HAVE_NS]: Zero out driver field.
+ (font_close_object): Not static any more. Lost frame arg.
+ Adjust comment and users.
+ * alloc.c (cleanup_vector): Call font_close_object to adjust
+ per-frame font counters correctly. If HAVE_NS, also call
+ driver-specific cleanup for font-entity objects.
+ * ftfont.c (ftfont_open):
+ * nsfont.m (nsfont_open):
+ * w32font.c (w32font_open_internal):
+ * xfont.c (xfont_open):
+ * xftfont.c (xftfont_open): Save frame pointer in font object.
+ * macfont.m (macfont_open): Likewise.
+ (macfont_descriptor_entity): Save driver pointer to be able
+ to call its free_entity routine when font-entity is swept.
+ * ftxfont.c (ftxfont_open): Add eassert because frame
+ pointer should be saved by ftfont_driver.open.
+
+2013-12-12 Dmitry Antipov <address@hidden>
+
* xterm.c (x_make_frame_visible): Restore hack which is needed when
input polling is used. This is still meaningful for Cygwin, see
http://lists.gnu.org/archive/html/emacs-devel/2013-12/msg00351.html.
=== modified file 'src/alloc.c'
--- a/src/alloc.c 2013-12-09 08:23:01 +0000
+++ b/src/alloc.c 2013-12-12 14:26:06 +0000
@@ -2874,10 +2874,22 @@
static void
cleanup_vector (struct Lisp_Vector *vector)
{
- if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FONT)
- && ((vector->header.size & PSEUDOVECTOR_SIZE_MASK)
- == FONT_OBJECT_MAX))
- ((struct font *) vector)->driver->close ((struct font *) vector);
+ if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FONT))
+ {
+ ptrdiff_t size = vector->header.size & PSEUDOVECTOR_SIZE_MASK;
+ Lisp_Object obj = make_lisp_ptr (vector, Lisp_Vectorlike);
+
+ if (size == FONT_OBJECT_MAX)
+ font_close_object (obj);
+#ifdef HAVE_NS
+ else if (size == FONT_ENTITY_MAX)
+ {
+ struct font_entity *entity = (struct font_entity *) vector;
+ if (entity->driver && entity->driver->free_entity)
+ entity->driver->free_entity (obj);
+ }
+#endif /* HAVE_NS */
+ }
}
/* Reclaim space used by unmarked vectors. */
=== modified file 'src/font.c'
--- a/src/font.c 2013-12-10 03:36:36 +0000
+++ b/src/font.c 2013-12-12 14:26:06 +0000
@@ -173,6 +173,9 @@
allocate_pseudovector (VECSIZE (struct font_entity),
FONT_ENTITY_MAX, PVEC_FONT));
XSETFONT (font_entity, entity);
+#ifdef HAVE_NS
+ entity->driver = NULL;
+#endif
return font_entity;
}
@@ -2881,10 +2884,10 @@
}
-/* Close FONT_OBJECT that is opened on frame F. */
+/* Close FONT_OBJECT. */
-static void
-font_close_object (struct frame *f, Lisp_Object font_object)
+void
+font_close_object (Lisp_Object font_object)
{
struct font *font = XFONT_OBJECT (font_object);
@@ -2894,8 +2897,9 @@
FONT_ADD_LOG ("close", font_object, Qnil);
font->driver->close (font);
#ifdef HAVE_WINDOW_SYSTEM
- eassert (FRAME_DISPLAY_INFO (f)->n_fonts);
- FRAME_DISPLAY_INFO (f)->n_fonts--;
+ eassert (font->frame);
+ eassert (FRAME_DISPLAY_INFO (font->frame)->n_fonts);
+ FRAME_DISPLAY_INFO (font->frame)->n_fonts--;
#endif
}
@@ -4548,11 +4552,11 @@
}
DEFUN ("close-font", Fclose_font, Sclose_font, 1, 2, 0,
- doc: /* Close FONT-OBJECT. */)
+ doc: /* Close FONT-OBJECT. Optional FRAME is unused. */)
(Lisp_Object font_object, Lisp_Object frame)
{
CHECK_FONT_OBJECT (font_object);
- font_close_object (decode_live_frame (frame), font_object);
+ font_close_object (font_object);
return Qnil;
}
@@ -4887,7 +4891,7 @@
/* As font_object is still in FONT_OBJLIST of the entity, we can't
close it now. Perhaps, we should manage font-objects
by `reference-count'. */
- font_close_object (f, font_object);
+ font_close_object (font_object);
#endif
return info;
}
=== modified file 'src/font.h'
--- a/src/font.h 2013-12-04 13:35:41 +0000
+++ b/src/font.h 2013-12-12 14:26:06 +0000
@@ -265,6 +265,9 @@
{
struct vectorlike_header header;
Lisp_Object props[FONT_ENTITY_MAX];
+#ifdef HAVE_NS
+ struct font_driver *driver;
+#endif
};
/* A value which may appear in the member `encoding' of struct font
@@ -316,6 +319,9 @@
#if defined (HAVE_WINDOW_SYSTEM)
+ /* The frame where the font was opened. */
+ struct frame *frame;
+
/* Vertical pixel width of the underline. If is zero if that
information is not in the font. */
int underline_thickness;
@@ -735,6 +741,7 @@
extern Lisp_Object font_make_entity (void);
extern Lisp_Object font_make_object (int, Lisp_Object, int);
+extern void font_close_object (Lisp_Object);
extern Lisp_Object find_font_encoding (Lisp_Object);
extern int font_registry_charsets (Lisp_Object, struct charset **,
=== modified file 'src/ftfont.c'
--- a/src/ftfont.c 2013-12-04 13:35:41 +0000
+++ b/src/ftfont.c 2013-12-12 14:26:06 +0000
@@ -1236,6 +1236,7 @@
ASET (font_object, FONT_FILE_INDEX, filename);
ASET (font_object, FONT_FORMAT_INDEX, ftfont_font_format (NULL, filename));
font = XFONT_OBJECT (font_object);
+ font->frame = f;
ftfont_info = (struct ftfont_info *) font;
ftfont_info->ft_size = ft_face->size;
ftfont_info->index = XINT (idx);
=== modified file 'src/ftxfont.c'
--- a/src/ftxfont.c 2013-10-29 16:08:08 +0000
+++ b/src/ftxfont.c 2013-12-12 14:26:06 +0000
@@ -255,6 +255,7 @@
if (NILP (font_object))
return Qnil;
font = XFONT_OBJECT (font_object);
+ eassert (font->frame == f);
font->driver = &ftxfont_driver;
return font_object;
}
=== modified file 'src/macfont.m'
--- a/src/macfont.m 2013-11-07 22:21:08 +0000
+++ b/src/macfont.m 2013-12-12 14:26:06 +0000
@@ -882,6 +882,7 @@
CFStringRef name;
entity = font_make_entity ();
+ XFONT_ENTITY (entity)->driver = &macfont_driver;
ASET (entity, FONT_TYPE_INDEX, macfont_driver.type);
ASET (entity, FONT_REGISTRY_INDEX, Qiso10646_1);
@@ -2491,6 +2492,7 @@
ASET (font_object, FONT_FULLNAME_INDEX,
AREF (font_object, FONT_NAME_INDEX));
font = XFONT_OBJECT (font_object);
+ font->frame = f;
font->pixel_size = size;
font->driver = &macfont_driver;
font->encoding_charset = font->repertory_charset = -1;
=== modified file 'src/nsfont.m'
--- a/src/nsfont.m 2013-12-04 13:08:30 +0000
+++ b/src/nsfont.m 2013-12-12 14:26:06 +0000
@@ -805,6 +805,7 @@
return Qnil; /* FIXME: other terms do, but return Qnil causes segfault */
}
+ font->frame = f;
font_info->glyphs = xzalloc (0x100 * sizeof *font_info->glyphs);
font_info->metrics = xzalloc (0x100 * sizeof *font_info->metrics);
=== modified file 'src/w32font.c'
--- a/src/w32font.c 2013-12-04 13:08:30 +0000
+++ b/src/w32font.c 2013-12-12 14:26:06 +0000
@@ -999,6 +999,7 @@
= DECODE_SYSTEM (build_string (logfont.lfFaceName));
}
+ font->frame = f;
font->max_width = w32_font->metrics.tmMaxCharWidth;
/* Parts of Emacs display assume that height = ascent + descent...
so height is defined later, after ascent and descent.
=== modified file 'src/xfont.c'
--- a/src/xfont.c 2013-11-04 06:09:03 +0000
+++ b/src/xfont.c 2013-12-12 14:26:06 +0000
@@ -806,6 +806,7 @@
ASET (font_object, FONT_FILE_INDEX, Qnil);
ASET (font_object, FONT_FORMAT_INDEX, Qx);
font = XFONT_OBJECT (font_object);
+ font->frame = f;
((struct xfont_info *) font)->xfont = xfont;
((struct xfont_info *) font)->display = FRAME_X_DISPLAY (f);
font->pixel_size = pixel_size;
=== modified file 'src/xftfont.c'
--- a/src/xftfont.c 2013-10-27 05:30:34 +0000
+++ b/src/xftfont.c 2013-12-12 14:26:06 +0000
@@ -365,6 +365,7 @@
ASET (font_object, FONT_FORMAT_INDEX,
ftfont_font_format (xftfont->pattern, filename));
font = XFONT_OBJECT (font_object);
+ font->frame = f;
font->pixel_size = size;
font->driver = &xftfont_driver;
font->encoding_charset = font->repertory_charset = -1;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r115489: * font.h (struct font_entity) [HAVE_NS]: New field to record,
Dmitry Antipov <=