From: Stefan Kangas <stefan@marxist.se>
To: Glenn Morris <rgm@gnu.org>
Cc: 34663@debbugs.gnu.org
Subject: bug#34663: remove ftx font backend
Date: Sun, 6 Oct 2019 14:58:39 +0200 [thread overview]
Message-ID: <CADwFkmmq5K2J2w_+tUz5KcJjcirK9si7E69bnq0bmDyi_7WoYg@mail.gmail.com> (raw)
In-Reply-To: <hfef7vf6ri.fsf@fencepost.gnu.org>
[-- Attachment #1: Type: text/plain, Size: 216 bytes --]
Glenn Morris <rgm@gnu.org> writes:
> Package: emacs
> Severity: wishlist
> Version: 26.2
>
> Ref: http://lists.gnu.org/r/emacs-devel/2019-02/msg00340.html
How about the attached patch?
Best regards,
Stefan Kangas
[-- Attachment #2: 0001-Remove-unused-ftx-font-backend-driver.patch --]
[-- Type: text/x-patch, Size: 16560 bytes --]
From 0929fcc3ca0847beb3c5fabc58991c1d4f83045b Mon Sep 17 00:00:00 2001
From: Stefan Kangas <stefankangas@gmail.com>
Date: Sun, 6 Oct 2019 14:45:57 +0200
Subject: [PATCH] Remove unused ftx font backend driver
* src/ftxfont.c: Remove file.
* admin/notes/font-backend:
* configure.ac:
* src/Makefile.in:
* src/deps.mk (ftxfont.o):
* src/font.c (syms_of_font):
* src/font.h (top-level, font_property_index):
* src/xfns.c (Fx_create_frame, x_create_tip_frame): Remove unused ftx
font backend driver. (Bug#34663)
---
admin/notes/font-backend | 2 -
configure.ac | 6 +-
src/Makefile.in | 6 +-
src/deps.mk | 3 -
src/font.c | 1 -
src/font.h | 6 +-
src/ftxfont.c | 371 ---------------------------------------
src/xfns.c | 4 -
8 files changed, 7 insertions(+), 392 deletions(-)
delete mode 100644 src/ftxfont.c
diff --git a/admin/notes/font-backend b/admin/notes/font-backend
index eef7439bcc..f34d641320 100644
--- a/admin/notes/font-backend
+++ b/admin/notes/font-backend
@@ -15,8 +15,6 @@ The new files are:
device-independent methods of struct font_driver.
xftfont.c -- font-driver on X using Xft for FreeType fonts
utilizing methods provided by ftfont.c.
- ftxfont.c -- font-driver on X directly using FreeType fonts
- utilizing methods provided by ftfont.c.
w32font.c -- font driver on w32 using Windows native fonts,
corresponding to xfont.c
w32uniscribe.c -- font driver on w32, using the uniscribe API
diff --git a/configure.ac b/configure.ac
index 7435f2e8da..cd368bb8dc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3381,8 +3381,6 @@ AC_DEFUN
fi # "$HAVE_XFT" != no
fi # "x${with_xft}" != "xno"
- ## We used to allow building with FreeType and without Xft.
- ## However, the ftx font backend driver is not in good shape.
if test "$HAVE_XFT" != "yes"; then
dnl For the "Does Emacs use" message at the end.
HAVE_XFT=no
@@ -5254,9 +5252,9 @@ AC_DEFUN
if test "$HAVE_CAIRO" = "yes"; then
FONT_OBJ="$FONT_OBJ ftfont.o ftcrfont.o"
elif test "$HAVE_XFT" = "yes"; then
- FONT_OBJ="$FONT_OBJ ftfont.o xftfont.o ftxfont.o"
+ FONT_OBJ="$FONT_OBJ ftfont.o xftfont.o"
elif test "$HAVE_FREETYPE" = "yes"; then
- FONT_OBJ="$FONT_OBJ ftfont.o ftxfont.o"
+ FONT_OBJ="$FONT_OBJ ftfont.o"
fi
fi
if test "${HAVE_HARFBUZZ}" = "yes" ; then
diff --git a/src/Makefile.in b/src/Makefile.in
index 76aa6a1ec5..f0c13d5d91 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -295,8 +295,8 @@ EMACSRES =
W32_RES_LINK=@W32_RES_LINK@
## Empty if !HAVE_X_WINDOWS
-## xfont.o ftfont.o xftfont.o ftxfont.o if HAVE_XFT
-## xfont.o ftfont.o ftxfont.o if HAVE_FREETYPE
+## xfont.o ftfont.o xftfont.o if HAVE_XFT
+## xfont.o ftfont.o if HAVE_FREETYPE
## xfont.o ftfont.o ftcrfont.o if USE_CAIRO
## else xfont.o
## if HAVE_HARFBUZZ, hbfont.o is added regardless of the rest
@@ -436,7 +436,7 @@ SOME_MACHINE_OBJECTS =
nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o macfont.o \
w32.o w32console.o w32cygwinx.o w32fns.o w32heap.o w32inevt.o w32notify.o \
w32menu.o w32proc.o w32reg.o w32select.o w32term.o w32xfns.o \
- w16select.o widget.o xfont.o ftfont.o xftfont.o ftxfont.o gtkutil.o \
+ w16select.o widget.o xfont.o ftfont.o xftfont.o gtkutil.o \
xsettings.o xgselect.o termcap.o hbfont.o
## gmalloc.o if !SYSTEM_MALLOC && !DOUG_LEA_MALLOC, else empty.
diff --git a/src/deps.mk b/src/deps.mk
index 2cdeba8d4a..2fd4c31514 100644
--- a/src/deps.mk
+++ b/src/deps.mk
@@ -239,9 +239,6 @@ xfont.o:
xftfont.o: xftfont.c dispextern.h xterm.h frame.h blockinput.h character.h \
charset.h font.h lisp.h globals.h $(config_h) atimer.h systime.h \
fontset.h ccl.h ftfont.h composite.h
-ftxfont.o: ftxfont.c dispextern.h xterm.h frame.h blockinput.h character.h \
- charset.h font.h lisp.h globals.h $(config_h) atimer.h systime.h \
- fontset.h ccl.h
menu.o: menu.c lisp.h keyboard.h keymap.h frame.h termhooks.h blockinput.h \
dispextern.h $(srcdir)/../lwlib/lwlib.h xterm.h gtkutil.h menu.h \
lisp.h globals.h $(config_h) systime.h coding.h composite.h window.h \
diff --git a/src/font.c b/src/font.c
index 935dd64e64..50305a30bb 100644
--- a/src/font.c
+++ b/src/font.c
@@ -5533,7 +5533,6 @@ syms_of_font (void)
#ifdef USE_CAIRO
syms_of_ftcrfont ();
#else
- syms_of_ftxfont ();
#ifdef HAVE_XFT
syms_of_xftfont ();
#endif /* HAVE_XFT */
diff --git a/src/font.h b/src/font.h
index 9d4b2d81c6..81b0f4a3d3 100644
--- a/src/font.h
+++ b/src/font.h
@@ -69,8 +69,8 @@ #define EMACS_FONT_H
enum font_property_index
{
- /* FONT-TYPE is a symbol indicating a font backend; currently `x',
- `xft', and `ftx' are available on X, `uniscribe' and `gdi' on
+ /* FONT-TYPE is a symbol indicating a font backend; currently `x'
+ and `xft' are available on X, `uniscribe' and `gdi' on
Windows, and `ns' under Cocoa / GNUstep. */
FONT_TYPE_INDEX,
@@ -937,7 +937,6 @@ valid_font_driver (struct font_driver const *d)
extern struct font_driver const xfont_driver;
extern Lisp_Object xfont_get_cache (struct frame *);
extern void syms_of_xfont (void);
-extern void syms_of_ftxfont (void);
#ifdef HAVE_XFT
extern struct font_driver const xftfont_driver;
#ifdef HAVE_HARFBUZZ
@@ -945,7 +944,6 @@ valid_font_driver (struct font_driver const *d)
#endif /* HAVE_HARFBUZZ */
#endif
#if defined HAVE_FREETYPE || defined HAVE_XFT
-extern struct font_driver const ftxfont_driver;
extern void syms_of_xftfont (void);
#endif
#ifdef HAVE_BDFFONT
diff --git a/src/ftxfont.c b/src/ftxfont.c
deleted file mode 100644
index 1d1bd2c458..0000000000
--- a/src/ftxfont.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/* ftxfont.c -- FreeType font driver on X (without using XFT).
- Copyright (C) 2006-2019 Free Software Foundation, Inc.
- Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
- National Institute of Advanced Industrial Science and Technology (AIST)
- Registration Number H13PRO009
-
-This file is part of GNU Emacs.
-
-GNU Emacs is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at
-your option) any later version.
-
-GNU Emacs is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
-
-#include <config.h>
-#include <X11/Xlib.h>
-
-#include "lisp.h"
-#include "xterm.h"
-#include "frame.h"
-#include "blockinput.h"
-#include "font.h"
-#include "pdumper.h"
-
-/* FTX font driver. */
-
-struct ftxfont_frame_data
-{
- /* Background and foreground colors. */
- XColor colors[2];
- /* GCs interpolating the above colors. gcs[0] is for a color
- closest to BACKGROUND, and gcs[5] is for a color closest to
- FOREGROUND. */
- GC gcs[6];
- struct ftxfont_frame_data *next;
-};
-
-
-/* Return an array of 6 GCs for antialiasing. */
-
-static GC *
-ftxfont_get_gcs (struct frame *f, unsigned long foreground, unsigned long background)
-{
- XColor color;
- XGCValues xgcv;
- int i;
- struct ftxfont_frame_data *data = font_get_frame_data (f, Qftx);
- struct ftxfont_frame_data *prev = NULL, *this = NULL, *new;
-
- if (data)
- {
- for (this = data; this; prev = this, this = this->next)
- {
- if (this->colors[0].pixel < background)
- continue;
- if (this->colors[0].pixel > background)
- break;
- if (this->colors[1].pixel < foreground)
- continue;
- if (this->colors[1].pixel > foreground)
- break;
- return this->gcs;
- }
- }
-
- new = xmalloc (sizeof *new);
- new->next = this;
- if (prev)
- prev->next = new;
- font_put_frame_data (f, Qftx, new);
-
- new->colors[0].pixel = background;
- new->colors[1].pixel = foreground;
-
- block_input ();
- XQueryColors (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), new->colors, 2);
- for (i = 1; i < 7; i++)
- {
- /* Interpolate colors linearly. Any better algorithm? */
- color.red
- = (new->colors[1].red * i + new->colors[0].red * (8 - i)) / 8;
- color.green
- = (new->colors[1].green * i + new->colors[0].green * (8 - i)) / 8;
- color.blue
- = (new->colors[1].blue * i + new->colors[0].blue * (8 - i)) / 8;
- if (! x_alloc_nearest_color (f, FRAME_X_COLORMAP (f), &color))
- break;
- xgcv.foreground = color.pixel;
- new->gcs[i - 1] = XCreateGC (FRAME_X_DISPLAY (f), FRAME_X_DRAWABLE (f),
- GCForeground, &xgcv);
- }
- unblock_input ();
-
- if (i < 7)
- {
- block_input ();
- for (i--; i >= 0; i--)
- XFreeGC (FRAME_X_DISPLAY (f), new->gcs[i]);
- unblock_input ();
- if (prev)
- prev->next = new->next;
- else if (data)
- font_put_frame_data (f, Qftx, new->next);
- xfree (new);
- return NULL;
- }
- return new->gcs;
-}
-
-static int
-ftxfont_draw_bitmap (struct frame *f, GC gc_fore, GC *gcs, struct font *font,
- unsigned int code, int x, int y, XPoint *p, int size,
- int *n, bool flush)
-{
- struct font_bitmap bitmap;
- unsigned char *b;
- int i, j;
-
- if (ftfont_get_bitmap (font, code, &bitmap, size > 0x100 ? 1 : 8) < 0)
- return 0;
- if (size > 0x100)
- {
- for (i = 0, b = bitmap.buffer; i < bitmap.rows;
- i++, b += bitmap.pitch)
- {
- for (j = 0; j < bitmap.width; j++)
- if (b[j / 8] & (1 << (7 - (j % 8))))
- {
- p[n[0]].x = x + bitmap.left + j;
- p[n[0]].y = y - bitmap.top + i;
- if (++n[0] == size)
- {
- XDrawPoints (FRAME_X_DISPLAY (f), FRAME_X_DRAWABLE (f),
- gc_fore, p, size, CoordModeOrigin);
- n[0] = 0;
- }
- }
- }
- if (flush && n[0] > 0)
- XDrawPoints (FRAME_X_DISPLAY (f), FRAME_X_DRAWABLE (f),
- gc_fore, p, n[0], CoordModeOrigin);
- }
- else
- {
- for (i = 0, b = bitmap.buffer; i < bitmap.rows;
- i++, b += bitmap.pitch)
- {
- for (j = 0; j < bitmap.width; j++)
- {
- int idx = (bitmap.bits_per_pixel == 1
- ? ((b[j / 8] & (1 << (7 - (j % 8)))) ? 6 : -1)
- : (b[j] >> 5) - 1);
-
- if (idx >= 0)
- {
- XPoint *pp = p + size * idx;
-
- pp[n[idx]].x = x + bitmap.left + j;
- pp[n[idx]].y = y - bitmap.top + i;
- if (++(n[idx]) == size)
- {
- XDrawPoints (FRAME_X_DISPLAY (f), FRAME_X_DRAWABLE (f),
- idx == 6 ? gc_fore : gcs[idx], pp, size,
- CoordModeOrigin);
- n[idx] = 0;
- }
- }
- }
- }
- if (flush)
- {
- for (i = 0; i < 6; i++)
- if (n[i] > 0)
- XDrawPoints (FRAME_X_DISPLAY (f), FRAME_X_DRAWABLE (f),
- gcs[i], p + 0x100 * i, n[i], CoordModeOrigin);
- if (n[6] > 0)
- XDrawPoints (FRAME_X_DISPLAY (f), FRAME_X_DRAWABLE (f),
- gc_fore, p + 0x600, n[6], CoordModeOrigin);
- }
- }
-
- /* There is no ftfont_free_bitmap, so do not try to free BITMAP. */
-
- return bitmap.advance;
-}
-
-static void
-ftxfont_draw_background (struct frame *f, struct font *font, GC gc, int x, int y,
- int width)
-{
- XGCValues xgcv;
-
- XGetGCValues (FRAME_X_DISPLAY (f), gc,
- GCForeground | GCBackground, &xgcv);
- XSetForeground (FRAME_X_DISPLAY (f), gc, xgcv.background);
- XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_DRAWABLE (f), gc,
- x, y - FONT_BASE (font), width, FONT_HEIGHT (font));
- XSetForeground (FRAME_X_DISPLAY (f), gc, xgcv.foreground);
-}
-
-static Lisp_Object
-ftxfont_list (struct frame *f, Lisp_Object spec)
-{
- return ftfont_list2 (f, spec, Qftx);
-}
-
-static Lisp_Object
-ftxfont_match (struct frame *f, Lisp_Object spec)
-{
- return ftfont_match2 (f, spec, Qftx);
-}
-
-static Lisp_Object
-ftxfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
-{
- Lisp_Object font_object = ftfont_open (f, entity, pixel_size);
- if (NILP (font_object))
- return Qnil;
- struct font *font = XFONT_OBJECT (font_object);
- font->driver = &ftxfont_driver;
- return font_object;
-}
-
-static void
-ftxfont_close (struct font *font)
-{
- ftfont_close (font);
-}
-
-static int
-ftxfont_draw (struct glyph_string *s, int from, int to, int x, int y,
- bool with_background)
-{
- struct frame *f = s->f;
- struct face *face = s->face;
- struct font *font = s->font;
- XPoint p[0x700];
- int n[7];
- unsigned *code = s->char2b + from;
- int len = to - from;
- int i;
- GC *gcs;
- int xadvance;
-
- n[0] = n[1] = n[2] = n[3] = n[4] = n[5] = n[6] = 0;
-
- block_input ();
- if (with_background)
- ftxfont_draw_background (f, font, s->gc, x, y, s->width);
-
- if (face->gc == s->gc)
- {
- gcs = ftxfont_get_gcs (f, face->foreground, face->background);
- }
- else
- {
- XGCValues xgcv;
- unsigned long mask = GCForeground | GCBackground;
-
- XGetGCValues (FRAME_X_DISPLAY (f), s->gc, mask, &xgcv);
- gcs = ftxfont_get_gcs (f, xgcv.foreground, xgcv.background);
- }
-
- if (gcs)
- {
- if (s->num_clips)
- for (i = 0; i < 6; i++)
- XSetClipRectangles (FRAME_X_DISPLAY (f), gcs[i], 0, 0,
- s->clip, s->num_clips, Unsorted);
-
- for (i = 0; i < len; i++)
- {
- xadvance = ftxfont_draw_bitmap (f, s->gc, gcs, font, code[i], x, y,
- p, 0x100, n, i + 1 == len);
- x += (s->padding_p ? 1 : xadvance);
- }
- if (s->num_clips)
- for (i = 0; i < 6; i++)
- XSetClipMask (FRAME_X_DISPLAY (f), gcs[i], None);
- }
- else
- {
- /* We can't draw with antialiasing.
- s->gc should already have a proper clipping setting. */
- for (i = 0; i < len; i++)
- {
- xadvance = ftxfont_draw_bitmap (f, s->gc, NULL, font, code[i], x, y,
- p, 0x700, n, i + 1 == len);
- x += (s->padding_p ? 1 : xadvance);
- }
- }
-
- unblock_input ();
-
- return len;
-}
-
-static int
-ftxfont_end_for_frame (struct frame *f)
-{
- struct ftxfont_frame_data *data = font_get_frame_data (f, Qftx);
-
- block_input ();
- while (data)
- {
- struct ftxfont_frame_data *next = data->next;
- int i;
-
- for (i = 0; i < 6; i++)
- XFreeGC (FRAME_X_DISPLAY (f), data->gcs[i]);
- xfree (data);
- data = next;
- }
- unblock_input ();
- font_put_frame_data (f, Qftx, NULL);
- return 0;
-}
-
-\f
-
-static void syms_of_ftxfont_for_pdumper (void);
-
-struct font_driver const ftxfont_driver =
- {
- /* We can't draw a text without device dependent functions. */
- .type = LISPSYM_INITIALLY (Qftx),
- .get_cache = ftfont_get_cache,
- .list = ftxfont_list,
- .match = ftxfont_match,
- .list_family = ftfont_list_family,
- .open_font = ftxfont_open,
- .close_font = ftxfont_close,
- .has_char = ftfont_has_char,
- .encode_char = ftfont_encode_char,
- .text_extents = ftfont_text_extents,
- .draw = ftxfont_draw,
- .get_bitmap = ftfont_get_bitmap,
- .anchor_point = ftfont_anchor_point,
-#ifdef HAVE_LIBOTF
- .otf_capability = ftfont_otf_capability,
-#endif
- .end_for_frame = ftxfont_end_for_frame,
-#if defined HAVE_M17N_FLT && defined HAVE_LIBOTF
- .shape = ftfont_shape,
-#endif
-#if defined HAVE_OTF_GET_VARIATION_GLYPHS || defined HAVE_FT_FACE_GETCHARVARIANTINDEX
- .get_variation_glyphs = ftfont_variation_glyphs,
-#endif
- .filter_properties = ftfont_filter_properties,
- .combining_capability = ftfont_combining_capability,
- };
-
-void
-syms_of_ftxfont (void)
-{
- DEFSYM (Qftx, "ftx");
- pdumper_do_now_and_after_load (syms_of_ftxfont_for_pdumper);
-}
-
-static void
-syms_of_ftxfont_for_pdumper (void)
-{
- register_font_driver (&ftxfont_driver, NULL);
-}
diff --git a/src/xfns.c b/src/xfns.c
index 20e63a2650..7210bbf2dc 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -3878,8 +3878,6 @@ DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
#ifdef HAVE_HARFBUZZ
register_font_driver (&xfthbfont_driver, f);
#endif
-#else /* not HAVE_XFT */
- register_font_driver (&ftxfont_driver, f);
#endif /* not HAVE_XFT */
#endif /* HAVE_FREETYPE */
#endif /* not USE_CAIRO */
@@ -6362,8 +6360,6 @@ x_create_tip_frame (struct x_display_info *dpyinfo, Lisp_Object parms)
#ifdef HAVE_HARFBUZZ
register_font_driver (&xfthbfont_driver, f);
#endif
-#else /* not HAVE_XFT */
- register_font_driver (&ftxfont_driver, f);
#endif /* not HAVE_XFT */
#endif /* HAVE_FREETYPE */
#endif /* not USE_CAIRO */
--
2.20.1
next parent reply other threads:[~2019-10-06 12:58 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <hfef7vf6ri.fsf@fencepost.gnu.org>
2019-10-06 12:58 ` Stefan Kangas [this message]
2019-10-06 13:01 ` bug#34663: remove ftx font backend Stefan Kangas
2019-10-06 17:58 ` Eli Zaretskii
2019-10-06 20:04 ` Stefan Kangas
2020-01-02 20:44 ` Stefan Kangas
2020-01-03 7:35 ` Eli Zaretskii
2020-01-06 23:05 ` Robert Pluim
2020-01-07 3:34 ` Eli Zaretskii
2020-01-07 7:14 ` Robert Pluim
2020-01-07 15:55 ` Eli Zaretskii
2020-01-07 15:59 ` Robert Pluim
2020-01-07 16:14 ` Eli Zaretskii
2020-01-08 10:09 ` Stefan Kangas
2020-01-15 0:57 ` Stefan Kangas
2020-01-15 16:16 ` Eli Zaretskii
2020-01-15 17:24 ` Eli Zaretskii
2020-01-15 19:06 ` Stefan Kangas
2020-01-15 19:23 ` Eli Zaretskii
2020-01-15 19:57 ` Stefan Kangas
2020-01-15 18:59 ` Stefan Kangas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CADwFkmmq5K2J2w_+tUz5KcJjcirK9si7E69bnq0bmDyi_7WoYg@mail.gmail.com \
--to=stefan@marxist.se \
--cc=34663@debbugs.gnu.org \
--cc=rgm@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).