[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r117471: Use convenient alists to manage per-frame f
From: |
Dmitry Antipov |
Subject: |
[Emacs-diffs] trunk r117471: Use convenient alists to manage per-frame font driver-specific data. |
Date: |
Thu, 03 Jul 2014 12:20:30 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 117471
revision-id: address@hidden
parent: address@hidden
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Thu 2014-07-03 16:20:00 +0400
message:
Use convenient alists to manage per-frame font driver-specific data.
* frame.h (struct frame): Rename font_data_list to...
[HAVE_XFT || HAVE_FREETYPE]: ... font_data, which is a Lisp_Object now.
* font.h (struct font_data_list): Remove; no longer need a special
data type.
(font_put_frame_data, font_get_frame_data) [HAVE_XFT || HAVE_FREETYPE]:
Adjust prototypes.
* font.c (font_put_frame_data, font_get_frame_data)
[HAVE_XFT || HAVE_FREETYPE]: Prefer alist functions to ad-hoc list
management.
* xftfont.c (xftfont_get_xft_draw, xftfont_end_for_frame):
Related users changed.
* ftxfont.c (ftxfont_get_gcs, ftxfont_end_for_frame): Likewise.
Prefer convenient xmalloc and xfree.
modified:
src/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1438
src/font.c font.c-20091113204419-o5vbwnq5f7feedwu-8540
src/font.h font.h-20091113204419-o5vbwnq5f7feedwu-8541
src/frame.h frame.h-20091113204419-o5vbwnq5f7feedwu-229
src/ftxfont.c ftxfont.c-20091113204419-o5vbwnq5f7feedwu-8544
src/xftfont.c xftfont.c-20091113204419-o5vbwnq5f7feedwu-8548
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2014-07-03 06:00:53 +0000
+++ b/src/ChangeLog 2014-07-03 12:20:00 +0000
@@ -1,3 +1,20 @@
+2014-07-03 Dmitry Antipov <address@hidden>
+
+ Use convenient alists to manage per-frame font driver-specific data.
+ * frame.h (struct frame): Rename font_data_list to...
+ [HAVE_XFT || HAVE_FREETYPE]: ... font_data, which is a Lisp_Object now.
+ * font.h (struct font_data_list): Remove; no longer need a special
+ data type.
+ (font_put_frame_data, font_get_frame_data) [HAVE_XFT || HAVE_FREETYPE]:
+ Adjust prototypes.
+ * font.c (font_put_frame_data, font_get_frame_data)
+ [HAVE_XFT || HAVE_FREETYPE]: Prefer alist functions to ad-hoc list
+ management.
+ * xftfont.c (xftfont_get_xft_draw, xftfont_end_for_frame):
+ Related users changed.
+ * ftxfont.c (ftxfont_get_gcs, ftxfont_end_for_frame): Likewise.
+ Prefer convenient xmalloc and xfree.
+
2014-07-03 Eli Zaretskii <address@hidden>
* dispnew.c (prepare_desired_row): Accept 2 additional arguments:
=== modified file 'src/font.c'
--- a/src/font.c 2014-06-21 19:45:59 +0000
+++ b/src/font.c 2014-07-03 12:20:00 +0000
@@ -3539,53 +3539,34 @@
return active_drivers;
}
-int
-font_put_frame_data (struct frame *f, struct font_driver *driver, void *data)
+#if defined (HAVE_XFT) || defined (HAVE_FREETYPE)
+
+void
+font_put_frame_data (struct frame *f, Lisp_Object driver, void *data)
{
- struct font_data_list *list, *prev;
-
- for (prev = NULL, list = f->font_data_list; list;
- prev = list, list = list->next)
- if (list->driver == driver)
- break;
- if (! data)
- {
- if (list)
- {
- if (prev)
- prev->next = list->next;
- else
- f->font_data_list = list->next;
- xfree (list);
- }
- return 0;
- }
-
- if (! list)
- {
- list = xmalloc (sizeof *list);
- list->driver = driver;
- list->next = f->font_data_list;
- f->font_data_list = list;
- }
- list->data = data;
- return 0;
+ Lisp_Object val = assq_no_quit (driver, f->font_data);
+
+ if (!data)
+ f->font_data = Fdelq (val, f->font_data);
+ else
+ {
+ if (NILP (val))
+ f->font_data = Fcons (Fcons (driver, make_save_ptr (data)),
+ f->font_data);
+ else
+ XSETCDR (val, make_save_ptr (data));
+ }
}
-
void *
-font_get_frame_data (struct frame *f, struct font_driver *driver)
+font_get_frame_data (struct frame *f, Lisp_Object driver)
{
- struct font_data_list *list;
+ Lisp_Object val = assq_no_quit (driver, f->font_data);
- for (list = f->font_data_list; list; list = list->next)
- if (list->driver == driver)
- break;
- if (! list)
- return NULL;
- return list->data;
+ return NILP (val) ? NULL : XSAVE_POINTER (XCDR (val), 0);
}
+#endif /* HAVE_XFT || HAVE_FREETYPE */
/* Sets attributes on a font. Any properties that appear in ALIST and
BOOLEAN_PROPERTIES or NON_BOOLEAN_PROPERTIES are set on the font.
=== modified file 'src/font.h'
--- a/src/font.h 2014-06-10 03:32:36 +0000
+++ b/src/font.h 2014-07-03 12:20:00 +0000
@@ -723,20 +723,6 @@
struct font_driver_list *next;
};
-
-/* Chain of arbitrary data specific to each font driver.
- Each frame has its own font data list at F->font_data_list. */
-
-struct font_data_list
-{
- /* Pointer to the font driver. */
- struct font_driver *driver;
- /* Data specific to the font driver. */
- void *data;
- /* Pointer to the next element of the chain. */
- struct font_data_list *next;
-};
-
extern Lisp_Object copy_font_spec (Lisp_Object);
extern Lisp_Object merge_font_spec (Lisp_Object, Lisp_Object);
@@ -809,11 +795,10 @@
extern Lisp_Object font_put_extra (Lisp_Object font, Lisp_Object prop,
Lisp_Object val);
-extern int font_put_frame_data (struct frame *f,
- struct font_driver *driver,
- void *data);
-extern void *font_get_frame_data (struct frame *f,
- struct font_driver *driver);
+#if defined (HAVE_XFT) || defined (HAVE_FREETYPE)
+extern void font_put_frame_data (struct frame *, Lisp_Object, void *);
+extern void *font_get_frame_data (struct frame *f, Lisp_Object);
+#endif /* HAVE_XFT || HAVE_FREETYPE */
extern void font_filter_properties (Lisp_Object font,
Lisp_Object alist,
=== modified file 'src/frame.h'
--- a/src/frame.h 2014-06-17 16:09:19 +0000
+++ b/src/frame.h 2014-07-03 12:20:00 +0000
@@ -159,6 +159,11 @@
tool bar only supports top. */
Lisp_Object tool_bar_position;
+#if defined (HAVE_XFT) || defined (HAVE_FREETYPE)
+ /* List of data specific to font-driver and frame, but common to faces. */
+ Lisp_Object font_data;
+#endif
+
/* Beyond here, there should be no more Lisp_Object components. */
/* Cache of realized faces. */
@@ -328,9 +333,6 @@
/* List of font-drivers available on the frame. */
struct font_driver_list *font_driver_list;
- /* List of data specific to font-driver and frame, but common to
- faces. */
- struct font_data_list *font_data_list;
/* Total width of fringes reserved for drawing truncation bitmaps,
continuation bitmaps and alike. The width is in canonical char
=== modified file 'src/ftxfont.c'
--- a/src/ftxfont.c 2014-06-08 18:27:22 +0000
+++ b/src/ftxfont.c 2014-07-03 12:20:00 +0000
@@ -59,7 +59,7 @@
XColor color;
XGCValues xgcv;
int i;
- struct ftxfont_frame_data *data = font_get_frame_data (f, &ftxfont_driver);
+ struct ftxfont_frame_data *data = font_get_frame_data (f, Qftx);
struct ftxfont_frame_data *prev = NULL, *this = NULL, *new;
if (data)
@@ -78,19 +78,11 @@
}
}
- new = malloc (sizeof *new);
- if (! new)
- return NULL;
+ new = xmalloc (sizeof *new);
new->next = this;
if (prev)
- {
prev->next = new;
- }
- else if (font_put_frame_data (f, &ftxfont_driver, new) < 0)
- {
- free (new);
- return NULL;
- }
+ font_put_frame_data (f, Qftx, new);
new->colors[0].pixel = background;
new->colors[1].pixel = foreground;
@@ -123,8 +115,8 @@
if (prev)
prev->next = new->next;
else if (data)
- font_put_frame_data (f, &ftxfont_driver, new->next);
- free (new);
+ font_put_frame_data (f, Qftx, new->next);
+ xfree (new);
return NULL;
}
return new->gcs;
@@ -337,7 +329,7 @@
static int
ftxfont_end_for_frame (struct frame *f)
{
- struct ftxfont_frame_data *data = font_get_frame_data (f, &ftxfont_driver);
+ struct ftxfont_frame_data *data = font_get_frame_data (f, Qftx);
block_input ();
while (data)
@@ -347,11 +339,11 @@
for (i = 0; i < 6; i++)
XFreeGC (FRAME_X_DISPLAY (f), data->gcs[i]);
- free (data);
+ xfree (data);
data = next;
}
unblock_input ();
- font_put_frame_data (f, &ftxfont_driver, NULL);
+ font_put_frame_data (f, Qftx, NULL);
return 0;
}
=== modified file 'src/xftfont.c'
--- a/src/xftfont.c 2014-06-16 08:49:09 +0000
+++ b/src/xftfont.c 2014-07-03 12:20:00 +0000
@@ -593,7 +593,7 @@
static XftDraw *
xftfont_get_xft_draw (struct frame *f)
{
- XftDraw *xft_draw = font_get_frame_data (f, &xftfont_driver);
+ XftDraw *xft_draw = font_get_frame_data (f, Qxft);
if (! xft_draw)
{
@@ -604,7 +604,7 @@
FRAME_X_COLORMAP (f));
unblock_input ();
eassert (xft_draw != NULL);
- font_put_frame_data (f, &xftfont_driver, xft_draw);
+ font_put_frame_data (f, Qxft, xft_draw);
}
return xft_draw;
}
@@ -680,14 +680,14 @@
/* Don't do anything if display is dead */
if (FRAME_X_DISPLAY (f) == NULL) return 0;
- xft_draw = font_get_frame_data (f, &xftfont_driver);
+ xft_draw = font_get_frame_data (f, Qxft);
if (xft_draw)
{
block_input ();
XftDrawDestroy (xft_draw);
unblock_input ();
- font_put_frame_data (f, &xftfont_driver, NULL);
+ font_put_frame_data (f, Qxft, NULL);
}
return 0;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r117471: Use convenient alists to manage per-frame font driver-specific data.,
Dmitry Antipov <=