kwo pushed a commit to branch master.

http://git.enlightenment.org/e16/e16.git/commit/?id=dcfb5efba18e96745587fc262a8d49b77e65e652

commit dcfb5efba18e96745587fc262a8d49b77e65e652
Author: Kim Woelders <k...@woelders.dk>
Date:   Thu Feb 17 15:38:48 2022 +0100

    Move XFontSet based text rendering module to separate file
    
    Like the other font handlers.
---
 src/Makefile.am |   1 +
 src/text.c      | 150 ++-----------------------------------------------
 src/text_xfs.c  | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 177 insertions(+), 144 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index 3137918e..30e38910 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -92,6 +92,7 @@ e16_SOURCES = \
        x.c                     xwin.h                  \
        xtypes.h
 
+e16_SOURCES += text_xfs.c
 if ENABLE_SOUND
 e16_SOURCES += sound.c sound.h
 endif
diff --git a/src/text.c b/src/text.c
index e9d7cf76..a913ebcc 100644
--- a/src/text.c
+++ b/src/text.c
@@ -23,35 +23,11 @@
  */
 #include "config.h"
 
-#include <X11/Xlib.h>
-
 #include "E.h"
 #include "eimage.h"
 #include "tclass.h"
 #include "xwin.h"
 
-static              GC
-_get_gc(Win win)
-{
-   static GC           gc = NULL;
-   static Visual      *last_vis = NULL;
-   Visual             *vis;
-
-   vis = WinGetVisual(win);
-   if (vis != last_vis)
-     {
-       if (gc)
-          EXFreeGC(gc);
-       gc = NULL;
-       last_vis = vis;
-     }
-
-   if (!gc)
-      gc = EXCreateGC(WinGetXwin(win), 0, NULL);
-
-   return gc;
-}
-
 static void
 TextDrawRotTo(Win win, EX_Drawable src, EX_Drawable dst, int x, int y,
              int w, int h, TextState * ts)
@@ -362,124 +338,6 @@ TextstateTextFitMB(TextState * ts, char **ptext, int *pw, 
int textwidth_limit)
    EwcClose();
 }
 
-#if FONT_TYPE_XFS
-/*
- * XFontSet - XCreateFontSet
- */
-extern const FontOps FontOpsXfs;
-
-typedef struct {
-   XFontSet            font;
-   int                 ascent;
-   Win                 win;
-   EX_Drawable         draw;
-   GC                  gc;
-} FontCtxXfs;
-
-static int
-_xfs_Load(TextState * ts, const char *name)
-{
-   XFontSet            font;
-   FontCtxXfs         *fdc;
-   int                 i, missing_cnt, font_cnt;
-   char              **missing_list, *def_str, **fnlr;
-   XFontStruct       **fs;
-
-   font = XCreateFontSet(disp, name, &missing_list, &missing_cnt, &def_str);
-   if (missing_cnt)
-      XFreeStringList(missing_list);
-   if (!font)
-      return -1;
-
-   if (EDebug(EDBUG_TYPE_FONTS) >= 2)
-     {
-       Eprintf("- XBaseFontNameListOfFontSet %s\n",
-               XBaseFontNameListOfFontSet(font));
-       font_cnt = XFontsOfFontSet(font, &fs, &fnlr);
-       for (i = 0; i < font_cnt; i++)
-          Eprintf("- XFontsOfFontSet %d: %s\n", i, fnlr[i]);
-     }
-
-   fdc = EMALLOC(FontCtxXfs, 1);
-   if (!fdc)
-      return -1;
-   fdc->font = font;
-   ts->fdc = fdc;
-   fdc->ascent = 0;
-   font_cnt = XFontsOfFontSet(font, &fs, &fnlr);
-   for (i = 0; i < font_cnt; i++)
-      fdc->ascent = MAX(fs[i]->ascent, fdc->ascent);
-   ts->type = FONT_TYPE_XFS;
-   ts->ops = &FontOpsXfs;
-   return 0;
-}
-
-static void
-_xfs_Unload(TextState * ts)
-{
-   FontCtxXfs         *fdc = (FontCtxXfs *) ts->fdc;
-
-   XFreeFontSet(disp, fdc->font);
-}
-
-static void
-_xfs_TextSize(TextState * ts, const char *text, int len,
-             int *width, int *height, int *ascent)
-{
-   FontCtxXfs         *fdc = (FontCtxXfs *) ts->fdc;
-   XRectangle          ret2;
-
-   if (len == 0)
-      len = strlen(text);
-   XmbTextExtents(fdc->font, text, len, NULL, &ret2);
-   *height = ret2.height;
-   *width = ret2.width;
-   *ascent = fdc->ascent;
-}
-
-static void
-_xfs_TextDraw(TextState * ts, int x, int y, const char *text, int len)
-{
-   FontCtxXfs         *fdc = (FontCtxXfs *) ts->fdc;
-
-   XmbDrawString(disp, fdc->draw, fdc->font, fdc->gc, x, y, text, len);
-}
-
-static int
-_xfs_FdcInit(TextState * ts, Win win, EX_Drawable draw)
-{
-   FontCtxXfs         *fdc = (FontCtxXfs *) ts->fdc;
-
-   fdc->win = win;
-   fdc->draw = draw;
-   fdc->gc = _get_gc(win);
-   return 0;
-}
-
-static void
-_xfs_FdcSetDrawable(TextState * ts, unsigned long draw)
-{
-   FontCtxXfs         *fdc = (FontCtxXfs *) ts->fdc;
-
-   fdc->draw = draw;
-}
-
-static void
-_xfs_FdcSetColor(TextState * ts, unsigned int color)
-{
-   FontCtxXfs         *fdc = (FontCtxXfs *) ts->fdc;
-   unsigned int        pixel;
-
-   pixel = EAllocColor(WinGetCmap(fdc->win), color);
-   XSetForeground(disp, fdc->gc, pixel);
-}
-
-const FontOps       FontOpsXfs = {
-   _xfs_Load, _xfs_Unload, _xfs_TextSize, TextstateTextFit, _xfs_TextDraw,
-   _xfs_FdcInit, NULL, _xfs_FdcSetDrawable, _xfs_FdcSetColor
-};
-#endif /* FONT_TYPE_XFS */
-
 static void
 TsTextDraw(TextState * ts, int x, int y, const char *text, int len)
 {
@@ -508,6 +366,10 @@ typedef struct {
 #endif
 } FontHandler;
 
+#if FONT_TYPE_XFS
+extern const FontOps FontOps_xfs;
+#endif
+
 #if USE_MODULES
 
 #define FONT(type, ops, opsm) { type, opsm, 0 }
@@ -530,7 +392,7 @@ extern const FontOps FontOps_pango;
 
 static FontHandler  fhs[] = {
 #if FONT_TYPE_XFS
-   FONT("xfs", &FontOpsXfs, &FontOpsXfs),      /* XFontSet - XCreateFontSet */
+   FONT("xfs", &FontOps_xfs, &FontOps_xfs),    /* XFontSet - XCreateFontSet */
 #endif
 #if FONT_TYPE_IFT
    FONT("ift", &FontOps_ift, NULL),    /* Imlib2/FreeType */
@@ -607,7 +469,7 @@ TextStateLoadFont(TextState * ts)
      }
  fallback:
 #if FONT_TYPE_XFS
-   if (!FontOpsXfs.Load(ts, "fixed"))  /* XFontSet - XCreateFontSet */
+   if (!FontOps_xfs.Load(ts, "fixed")) /* XFontSet - XCreateFontSet */
       goto done;
 #endif
 
diff --git a/src/text_xfs.c b/src/text_xfs.c
new file mode 100644
index 00000000..90c1efde
--- /dev/null
+++ b/src/text_xfs.c
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various 
contributors
+ * Copyright (C) 2004-2022 Kim Woelders
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies of the Software, its documentation and marketing & publicity
+ * materials, and acknowledgment shall be given in the documentation, materials
+ * and software packages that this Software was used.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+#include "config.h"
+#include "tclass.h"
+
+#if FONT_TYPE_XFS
+#include <X11/Xlib.h>
+
+#include "E.h"
+
+static              GC
+_get_gc(Win win)
+{
+   static GC           gc = NULL;
+   static Visual      *last_vis = NULL;
+   Visual             *vis;
+
+   vis = WinGetVisual(win);
+   if (vis != last_vis)
+     {
+       if (gc)
+          EXFreeGC(gc);
+       gc = NULL;
+       last_vis = vis;
+     }
+
+   if (!gc)
+      gc = EXCreateGC(WinGetXwin(win), 0, NULL);
+
+   return gc;
+}
+
+/*
+ * XFontSet - XCreateFontSet
+ */
+__EXPORT__ extern const FontOps FontOps_xfs;
+
+typedef struct {
+   XFontSet            font;
+   int                 ascent;
+   Win                 win;
+   EX_Drawable         draw;
+   GC                  gc;
+} FontCtxXfs;
+
+static int
+_xfs_Load(TextState * ts, const char *name)
+{
+   XFontSet            font;
+   FontCtxXfs         *fdc;
+   int                 i, missing_cnt, font_cnt;
+   char              **missing_list, *def_str, **fnlr;
+   XFontStruct       **fs;
+
+   font = XCreateFontSet(disp, name, &missing_list, &missing_cnt, &def_str);
+   if (missing_cnt)
+      XFreeStringList(missing_list);
+   if (!font)
+      return -1;
+
+   if (EDebug(EDBUG_TYPE_FONTS) >= 2)
+     {
+       Eprintf("- XBaseFontNameListOfFontSet %s\n",
+               XBaseFontNameListOfFontSet(font));
+       font_cnt = XFontsOfFontSet(font, &fs, &fnlr);
+       for (i = 0; i < font_cnt; i++)
+          Eprintf("- XFontsOfFontSet %d: %s\n", i, fnlr[i]);
+     }
+
+   fdc = EMALLOC(FontCtxXfs, 1);
+   if (!fdc)
+      return -1;
+   fdc->font = font;
+   ts->fdc = fdc;
+   fdc->ascent = 0;
+   font_cnt = XFontsOfFontSet(font, &fs, &fnlr);
+   for (i = 0; i < font_cnt; i++)
+      fdc->ascent = MAX(fs[i]->ascent, fdc->ascent);
+   ts->type = FONT_TYPE_XFS;
+   ts->ops = &FontOps_xfs;
+   return 0;
+}
+
+static void
+_xfs_Unload(TextState * ts)
+{
+   FontCtxXfs         *fdc = (FontCtxXfs *) ts->fdc;
+
+   XFreeFontSet(disp, fdc->font);
+}
+
+static void
+_xfs_TextSize(TextState * ts, const char *text, int len,
+             int *width, int *height, int *ascent)
+{
+   FontCtxXfs         *fdc = (FontCtxXfs *) ts->fdc;
+   XRectangle          ret2;
+
+   if (len == 0)
+      len = strlen(text);
+   XmbTextExtents(fdc->font, text, len, NULL, &ret2);
+   *height = ret2.height;
+   *width = ret2.width;
+   *ascent = fdc->ascent;
+}
+
+static void
+_xfs_TextDraw(TextState * ts, int x, int y, const char *text, int len)
+{
+   FontCtxXfs         *fdc = (FontCtxXfs *) ts->fdc;
+
+   XmbDrawString(disp, fdc->draw, fdc->font, fdc->gc, x, y, text, len);
+}
+
+static int
+_xfs_FdcInit(TextState * ts, Win win, EX_Drawable draw)
+{
+   FontCtxXfs         *fdc = (FontCtxXfs *) ts->fdc;
+
+   fdc->win = win;
+   fdc->draw = draw;
+   fdc->gc = _get_gc(win);
+   return 0;
+}
+
+static void
+_xfs_FdcSetDrawable(TextState * ts, unsigned long draw)
+{
+   FontCtxXfs         *fdc = (FontCtxXfs *) ts->fdc;
+
+   fdc->draw = draw;
+}
+
+static void
+_xfs_FdcSetColor(TextState * ts, unsigned int color)
+{
+   FontCtxXfs         *fdc = (FontCtxXfs *) ts->fdc;
+   unsigned int        pixel;
+
+   pixel = EAllocColor(WinGetCmap(fdc->win), color);
+   XSetForeground(disp, fdc->gc, pixel);
+}
+
+const FontOps       FontOps_xfs = {
+   _xfs_Load, _xfs_Unload, _xfs_TextSize, TextstateTextFit, _xfs_TextDraw,
+   _xfs_FdcInit, NULL, _xfs_FdcSetDrawable, _xfs_FdcSetColor
+};
+
+#endif /* FONT_TYPE_XFS */

-- 


Reply via email to