bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#34663: remove ftx font backend


From: Stefan Kangas
Subject: bug#34663: remove ftx font backend
Date: Wed, 15 Jan 2020 01:57:30 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Eli Zaretskii <eliz@gnu.org> writes:

>> Now that the emacs-27 branch is cut, perhaps it is time to consider
>> applying this to master?  I have attached a rebased patch.
>
> Yes, but:
>
>   . please add a NEWS entry about ftx's removal (in the "Installation
>     Changes" section)
>   . please add a NEWS entry on the emacs-27 branch saying that this
>     font backend is deprecated and will be removed

Please find below one patch for the emacs-27 and one for the master
branch with the requested NEWS entries.  WDYT?

Best regards,
Stefan Kangas

>From 3ef971cb0e21e51cb9353d52ba93ef0a920aaee6 Mon Sep 17 00:00:00 2001
From: Stefan Kangas <stefankangas@gmail.com>
Date: Wed, 15 Jan 2020 01:38:44 +0100
Subject: [PATCH] Declare the ftx font backend driver obsolete

* etc/NEWS: Document that the ftx font driver is now
obsolete and will be removed in Emacs 28.  (Bug#34663)
---
 etc/NEWS | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/etc/NEWS b/etc/NEWS
index cea5d500c7..9c3070083b 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -150,6 +150,10 @@ builds respectively.
 Pass '--without-modules' to 'configure' to disable dynamic module
 support.
 
+---
+** The ftx font backend driver is obsolete and will be removed in
+Emacs 28.
+
 
 * Startup Changes in Emacs 27.1
 
-- 
2.20.1

>From c23802d4f26c4cca6fba383cfd5c0668785bea37 Mon Sep 17 00:00:00 2001
From: Stefan Kangas <stefankangas@gmail.com>
Date: Thu, 2 Jan 2020 08:35:19 +0100
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.  Thanks to Glenn Morris for pointing out that it
can be removed.  (Bug#34663)
---
 admin/notes/font-backend |   2 -
 configure.ac             |   6 +-
 etc/NEWS                 |   4 +
 src/Makefile.in          |   6 +-
 src/deps.mk              |   3 -
 src/font.c               |   1 -
 src/font.h               |   6 +-
 src/ftxfont.c            | 371 ---------------------------------------
 src/xfns.c               |   4 -
 9 files changed, 11 insertions(+), 392 deletions(-)
 delete mode 100644 src/ftxfont.c

diff --git a/admin/notes/font-backend b/admin/notes/font-backend
index 7572182a84..644bacfbef 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 592d745797..3fa031d807 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3372,8 +3372,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
@@ -5280,9 +5278,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/etc/NEWS b/etc/NEWS
index d5a1d27267..0e43c321d8 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -28,6 +28,10 @@ applies, and please also update docstrings as needed.
 '--with-cairo' is now the default, if the appropriate development files
 are found by 'configure'
 
+---
+** The ftx font backend driver has been removed.
+It was declared obsolete in Emacs 27.1.
+
 
 * Startup Changes in Emacs 28.1
 
diff --git a/src/Makefile.in b/src/Makefile.in
index ab63b92627..552dd2e50a 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 a7e1b55917..4d162eeb0f 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 2b90903c90..bb39aef92d 100644
--- a/src/font.c
+++ b/src/font.c
@@ -5545,7 +5545,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 633d92709c..0561e3c83f 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,
 
@@ -938,7 +938,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
@@ -946,7 +945,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 9bbb2c064c..0000000000
--- a/src/ftxfont.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/* ftxfont.c -- FreeType font driver on X (without using XFT).
-   Copyright (C) 2006-2020 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;
-}
-
-
-
-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 276ea1c393..5758bb7a18 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 */
@@ -6364,8 +6362,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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]