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)
This commit is contained in:
parent
d672ad60e3
commit
576dfc8aa2
9 changed files with 11 additions and 392 deletions
|
@ -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
|
||||
|
|
|
@ -3372,8 +3372,6 @@ if test "${HAVE_X11}" = "yes"; then
|
|||
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 @@ if test "${HAVE_X_WINDOWS}" = "yes" ; then
|
|||
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
|
||||
|
|
4
etc/NEWS
4
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
|
||||
|
||||
|
|
|
@ -295,8 +295,8 @@ EMACSRES = @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 = dosfns.o msdos.o \
|
|||
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.
|
||||
|
|
|
@ -239,9 +239,6 @@ xfont.o: dispextern.h xterm.h frame.h blockinput.h character.h charset.h \
|
|||
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 \
|
||||
|
|
|
@ -5545,7 +5545,6 @@ cause Xft crashes. Only has an effect in Xft builds. */);
|
|||
#ifdef USE_CAIRO
|
||||
syms_of_ftcrfont ();
|
||||
#else
|
||||
syms_of_ftxfont ();
|
||||
#ifdef HAVE_XFT
|
||||
syms_of_xftfont ();
|
||||
#endif /* HAVE_XFT */
|
||||
|
|
|
@ -69,8 +69,8 @@ INLINE_HEADER_BEGIN
|
|||
|
||||
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 @@ extern void syms_of_ftfont (void);
|
|||
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 @@ extern struct font_driver xfthbfont_driver;
|
|||
#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
|
||||
|
|
371
src/ftxfont.c
371
src/ftxfont.c
|
@ -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);
|
||||
}
|
|
@ -3878,8 +3878,6 @@ This function is an internal primitive--use `make-frame' instead. */)
|
|||
#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 */
|
||||
|
|
Loading…
Add table
Reference in a new issue