]> Dogcows Code - chaz/openbox/commitdiff
pango is now mandatory..
authorDana Jansens <danakj@orodu.net>
Sat, 3 Mar 2007 02:53:41 +0000 (02:53 +0000)
committerDana Jansens <danakj@orodu.net>
Sat, 3 Mar 2007 02:53:41 +0000 (02:53 +0000)
lots of cleanups to the pango code, which was a very nice base to start from. thanks to whomever wrote that for us.. put some of the pango variables into the various render structs so that they don't need to be created all the time. put the pango context inside our RrInstance so that it can be properly freed at shutdown. removed xft dependencies all through the code and the build system also. who knows if this will break compiling for some poor souls. i guess we'll find out, won't we!

Makefile.am
configure.ac
render/font.c
render/font.h
render/instance.c
render/instance.h
render/render.h

index 2c2ba0207a7f7c32c46b7ba2e3c69854510a3b4d..fc415ba4986911e91998597fb5e1192e47365238 100644 (file)
@@ -34,13 +34,12 @@ bin_PROGRAMS = \
 ## render ##
 
 render_rendertest_CPPFLAGS = \
-       $(XFT_CFLAGS) \
+       $(PANGO_CFLAGS) \
        $(GLIB_CFLAGS) \
        -DG_LOG_DOMAIN=\"RenderTest\"
 render_rendertest_LDADD = \
        parser/libobparser.la \
        render/libobrender.la \
-       $(XFT_LIBS) \
        $(GLIB_LIBS) \
        $(PANGO_LIBS) \
        $(XML_LIBS) \
@@ -49,7 +48,6 @@ render_rendertest_SOURCES = render/test.c
 
 render_libobrender_la_CPPFLAGS = \
        $(X_CFLAGS) \
-       $(XFT_CFLAGS) \
        $(GLIB_CFLAGS) \
        $(XML_CFLAGS) \
        $(PANGO_CFLAGS) \
@@ -60,7 +58,6 @@ render_libobrender_la_LDFLAGS = \
 render_libobrender_la_LIBADD = \
        parser/libobparser.la \
        $(X_LIBS) \
-       $(XFT_LIBS) \
        $(PANGO_LIBS) \
        $(GLIB_LIBS) \
        $(XML_LIBS)
@@ -108,7 +105,7 @@ parser_libobparser_la_SOURCES = \
 openbox_openbox_CPPFLAGS = \
        $(X_CFLAGS) \
        $(SM_CFLAGS) \
-       $(XFT_CFLAGS) \
+       $(PANGO_CFLAGS) \
        $(GLIB_CFLAGS) \
        $(LIBSN_CFLAGS) \
        $(XML_CFLAGS) \
index f55eb0b094848e34d12bd50a1a9c92418212f1d0..09159bb18640837320aa049b0f459cb1a0254b3e 100644 (file)
@@ -74,32 +74,9 @@ PKG_CHECK_MODULES([GLIB], [glib-2.0])
 AC_SUBST(GLIB_CFLAGS)
 AC_SUBST(GLIB_LIBS)
 
-AC_ARG_ENABLE(pango,
-  AC_HELP_STRING(
-    [--disable-pango],
-    [disable the pango library [[default=enabled]]]
-  ),
-  [enable_pango=$enableval],
-  [enable_pango=yes]
-)
-
-if test "$enable_pango" = yes; then
-PKG_CHECK_MODULES([PANGO], [pango pangoxft],
-  [
-    AC_DEFINE(USE_PANGO, [1], [Use Pango])
-    AC_SUBST(PANGO_CFLAGS)
-    AC_SUBST(PANGO_LIBS)
-    pango_found=yes
-  ],
-    pango_found=no
-)
-else
-  pango_found=no
-fi
-
-PKG_CHECK_MODULES(XFT, [xft])
-AC_SUBST(XFT_CFLAGS)
-AC_SUBST(XFT_LIBS)
+PKG_CHECK_MODULES(PANGO, [pango pangoxft])
+AC_SUBST(PANGO_CFLAGS)
+AC_SUBST(PANGO_LIBS)
 
 PKG_CHECK_MODULES(XML, [libxml-2.0])
 AC_SUBST(XML_CFLAGS)
@@ -155,7 +132,6 @@ AC_OUTPUT
 
 AC_MSG_RESULT
 AC_MSG_RESULT([Compiling with these options:
-               Pango... $pango_found
                Startup Notification... $sn_found
                Session Management... $SM
                ])
index 14b9ea14ae8636d3fcde20b286b13e4d5492d5ac..a88df51f8ae96027000547be8bd08af6a38fb0ef 100644 (file)
 #include "mask.h"
 #include "theme.h"
 #include "geom.h"
+#include "instance.h"
 #include "gettext.h"
 
-#include <X11/Xft/Xft.h>
 #include <glib.h>
 #include <string.h>
 #include <stdlib.h>
-#ifdef USE_PANGO
 #include <locale.h>
-#endif
-
-#define ELIPSES "..."
-#define ELIPSES_LENGTH(font) \
-    (font->elipses_length + (font->shadow ? font->offset : 0))
 
 #define OB_SHADOW "shadow"
 #define OB_SHADOW_OFFSET "shadowoffset"
@@ -47,9 +41,6 @@ FcObjectType objs[] = {
     { OB_SHADOW_ALPHA,  FcTypeInteger  }
 };
 
-#ifdef USE_PANGO
-static PangoContext *context;
-#endif
 static gboolean started = FALSE;
 
 static void font_startup(void)
@@ -59,25 +50,29 @@ static void font_startup(void)
         exit(EXIT_FAILURE);
     }
 
-#ifdef USE_PANGO
-    g_type_init();
-    /* these will never be freed, but we will need
-     * them until we shut down anyway */
-    context = pango_xft_get_context(RrDisplay(NULL), RrScreen(NULL));
-#endif /* USE_PANGO */
     /* Here we are teaching xft about the shadow, shadowoffset & shadowtint */
     FcNameRegisterObjectTypes(objs, (sizeof(objs) / sizeof(objs[0])));
 }
 
-static void measure_font(RrFont *f)
+static void measure_font(const RrInstance *inst, RrFont *f)
 {
-    /* xOff, yOff is the normal spacing to the next glyph. */
-    XGlyphInfo info;
-
-    /* measure an elipses */
-    XftTextExtentsUtf8(RrDisplay(f->inst), f->xftfont,
-                       (FcChar8*)ELIPSES, strlen(ELIPSES), &info);
-    f->elipses_length = (signed) info.xOff;
+    PangoFontMetrics *metrics;
+    gchar *locale, *p;
+
+    /* get the default language from the locale
+       (based on gtk_get_default_language in gtkmain.c) */
+    locale = g_strdup(setlocale(LC_CTYPE, NULL));
+    if ((p = strchr(locale, '.'))) *p = '\0'; /* strip off the . */
+    if ((p = strchr(locale, '@'))) *p = '\0'; /* strip off the @ */
+
+    /* measure the ascent and descent */
+    metrics = pango_context_get_metrics(inst->pango, f->font_desc,
+                                        pango_language_from_string(locale));
+    f->ascent = pango_font_metrics_get_ascent(metrics);
+    f->descent = pango_font_metrics_get_descent(metrics);
+    pango_font_metrics_unref(metrics);
+
+    g_free(locale);
 }
 
 static RrFont *openfont(const RrInstance *inst, gchar *fontstring)
@@ -85,100 +80,78 @@ static RrFont *openfont(const RrInstance *inst, gchar *fontstring)
     /* This function is called for each font in the theme file. */
     /* It returns a pointer to a RrFont struct after filling it. */
     RrFont *out;
-    FcPattern *pat, *match;
-    XftFont *font;
-    FcResult res;
+    FcPattern *pat;
     gint tint;
-#ifdef USE_PANGO
-    guchar *tmp_string = NULL;
-    gint tmp_int;
-#endif /* USE_PANGO */
+    gchar *sval;
+    gint ival;
 
     if (!(pat = XftNameParse(fontstring)))
         return NULL;
 
-    match = XftFontMatch(RrDisplay(inst), RrScreen(inst), pat, &res);
-    FcPatternDestroy(pat);
-    if (!match)
-        return NULL;
-
     out = g_new(RrFont, 1);
     out->inst = inst;
-#ifdef USE_PANGO
-    out->pango_font_description = pango_font_description_new();
-
-    if (FcPatternGetString(match, "family", 0, &tmp_string) !=
-            FcResultTypeMismatch) {
-        pango_font_description_set_family(out->pango_font_description,
-                                          (gchar *)tmp_string);
-        tmp_string = NULL;
-    }
-    if (FcPatternGetString(match, "style", 0, &tmp_string) !=
-            FcResultTypeMismatch) {
-        /* Bold ? */
-        if (!g_ascii_strcasecmp("bold", (gchar *)tmp_string)) {
-            pango_font_description_set_weight(out->pango_font_description,
+    out->font_desc = pango_font_description_new();
+    out->layout = pango_layout_new(inst->pango);
+
+    /* get the data from the parsed xft string */
+
+    /* get the family */
+    if (FcPatternGetString(pat, "family", 0,
+                           (FcChar8**)&sval) == FcResultMatch)
+        pango_font_description_set_family(out->font_desc, sval);
+    
+    /* get the weight */
+    if (FcPatternGetInteger(pat, "weight", 0, &ival) == FcResultMatch) {
+        if (ival == FC_WEIGHT_LIGHT)
+            pango_font_description_set_weight(out->font_desc,
+                                              PANGO_WEIGHT_LIGHT);
+        else if (ival == FC_WEIGHT_DEMIBOLD)
+            pango_font_description_set_weight(out->font_desc,
+                                              PANGO_WEIGHT_SEMIBOLD);
+        else if (ival == FC_WEIGHT_BOLD)
+            pango_font_description_set_weight(out->font_desc,
                                               PANGO_WEIGHT_BOLD);
-        }
-        /* Italic ? */
-        else if (!g_ascii_strcasecmp("italic", (gchar *)tmp_string)) {
-            pango_font_description_set_style(out->pango_font_description,
-                                             PANGO_STYLE_ITALIC);
-        }
-        tmp_string = NULL;
+        else if (ival == FC_WEIGHT_BLACK)
+            pango_font_description_set_weight(out->font_desc,
+                                              PANGO_WEIGHT_ULTRABOLD);
     }
 
-    if (FcPatternGetInteger(match, "pixelsize", 0, &tmp_int) !=
-            FcResultTypeMismatch) {
-        pango_font_description_set_absolute_size(out->pango_font_description,
-                                        tmp_int*PANGO_SCALE);
+    if (FcPatternGetInteger(pat, "slant", 0, &ival) == FcResultMatch) {
+        if (ival == FC_SLANT_ITALIC)
+            pango_font_description_set_style(out->font_desc,
+                                             PANGO_STYLE_ITALIC);
+        else if (ival == FC_SLANT_OBLIQUE)
+            pango_font_description_set_style(out->font_desc,
+                                             PANGO_STYLE_OBLIQUE);
     }
 
-    /* based on gtkmain.c gtk_get_default_language() */
-    {
-        gchar *locale, *p;
-        PangoFontMetrics *metrics;
-
-        locale = g_strdup(setlocale(LC_CTYPE, NULL));
-        if ((p = strchr(locale, '.')))
-            *p = '\0';
-        if ((p = strchr(locale, '@')))
-            *p = '\0';
-        metrics = 
-            pango_context_get_metrics(context, out->pango_font_description,
-                                      pango_language_from_string(locale));
-        out->pango_ascent = pango_font_metrics_get_ascent(metrics);
-        out->pango_descent = pango_font_metrics_get_descent(metrics);
-        g_free(locale);
-        pango_font_metrics_unref(metrics);
-    }
-#endif /* USE_PANGO */
+    /* get the size */
+    if (FcPatternGetInteger(pat, "size", 0, &ival) == FcResultMatch)
+        pango_font_description_set_size(out->font_desc, ival * PANGO_SCALE);
+    else if (FcPatternGetInteger(pat, "pixelsize", 0, &ival) == FcResultMatch)
+        pango_font_description_set_absolute_size(out->font_desc,
+                                                 ival * PANGO_SCALE);
 
-    if (FcPatternGetBool(match, OB_SHADOW, 0, &out->shadow) != FcResultMatch)
+    if (FcPatternGetBool(pat, OB_SHADOW, 0, &out->shadow) != FcResultMatch)
         out->shadow = FALSE;
 
-    if (FcPatternGetInteger(match, OB_SHADOW_OFFSET, 0, &out->offset) !=
+    if (FcPatternGetInteger(pat, OB_SHADOW_OFFSET, 0, &out->offset) !=
         FcResultMatch)
         out->offset = 1;
 
-    if (FcPatternGetInteger(match, OB_SHADOW_ALPHA, 0, &tint) != FcResultMatch)
+    if (FcPatternGetInteger(pat, OB_SHADOW_ALPHA, 0, &tint) != FcResultMatch)
         tint = 25;
     if (tint > 100) tint = 100;
     else if (tint < -100) tint = -100;
     out->tint = tint;
 
-    font = XftFontOpenPattern(RrDisplay(inst), match);
-    if (!font) {
-        FcPatternDestroy(match);
-        g_free(out);
-        return NULL;
-    } else
-        out->xftfont = font;
+    /* setup the layout */
+    pango_layout_set_font_description(out->layout, out->font_desc);
+    pango_layout_set_single_paragraph_mode(out->layout, TRUE);
+    pango_layout_set_ellipsize(out->layout, PANGO_ELLIPSIZE_MIDDLE);
 
-#ifdef USE_PANGO
-    /*        FcPatternDestroy(match); */
-#endif /* USE_PANGO */
-    measure_font(out);
+    /* get the ascent and descent */
+    measure_font(inst, out);
 
     return out;
 }
@@ -207,10 +180,8 @@ RrFont *RrFontOpen(const RrInstance *inst, gchar *fontstring)
 void RrFontClose(RrFont *f)
 {
     if (f) {
-#ifdef USE_PANGO
-        pango_font_description_free(f->pango_font_description);
-#endif
-        XftFontClose(RrDisplay(f->inst), f->xftfont);
+        g_object_unref(f->layout);
+        pango_font_description_free(f->font_desc);
         g_free(f);
     }
 }
@@ -218,56 +189,29 @@ void RrFontClose(RrFont *f)
 static void font_measure_full(const RrFont *f, const gchar *str,
                               gint *x, gint *y)
 {
-#ifdef USE_PANGO
-    PangoLayout *pl;
     PangoRectangle rect;
-    pl = pango_layout_new (context);
-    pango_layout_set_text(pl, str, -1);
-    pango_layout_set_font_description(pl, f->pango_font_description);
-    pango_layout_set_single_paragraph_mode(pl, TRUE);
-    pango_layout_get_pixel_extents(pl, NULL, &rect);
+
+    pango_layout_set_text(f->layout, str, -1);
+    pango_layout_set_width(f->layout, -1);
+    pango_layout_get_pixel_extents(f->layout, NULL, &rect);
     *x = rect.width + (f->shadow ? ABS(f->offset) : 0);
     *y = rect.height + (f->shadow ? ABS(f->offset) : 0);
-    g_object_unref(pl);
-
-#else
-    XGlyphInfo info;
-
-    XftTextExtentsUtf8(RrDisplay(f->inst), f->xftfont,
-                       (const FcChar8*)str, strlen(str), &info);
-
-    *x = (signed) info.xOff + (f->shadow ? ABS(f->offset) : 0);
-    *y = info.height + (f->shadow ? ABS(f->offset) : 0);
-#endif /* USE_PANGO */
 }
 
 RrSize *RrFontMeasureString(const RrFont *f, const gchar *str)
 {
     RrSize *size;
     size = g_new(RrSize, 1);
-    font_measure_full (f, str, &size->width, &size->height);
+    font_measure_full(f, str, &size->width, &size->height);
     return size;
 }
 
 gint RrFontHeight(const RrFont *f)
 {
-#ifdef USE_PANGO
-    return (f->pango_ascent
-            + f->pango_descent
-           ) / PANGO_SCALE +
-           (f->shadow ? f->offset : 0);
-#else
-    return f->xftfont->ascent + f->xftfont->descent +
-           (f->shadow ? f->offset : 0);
-#endif
+    return (f->ascent + f->descent) / PANGO_SCALE +
+        (f->shadow ? f->offset : 0);
 }
 
-gint RrFontMaxCharWidth(const RrFont *f)
-{
-    return (signed) f->xftfont->max_advance_width;
-}
-
-#ifdef USE_PANGO
 static inline int font_calculate_baseline(RrFont *f, gint height)
 {
 /* For my own reference:
@@ -283,84 +227,41 @@ static inline int font_calculate_baseline(RrFont *f, gint height)
  *  ^space/2  |
  *  V_________v
  */
-    int asc = f->pango_ascent;
-    int ascdesc = asc + f->pango_descent;
-    int space = height * PANGO_SCALE - ascdesc;
-    int baseline = space / 2 + asc;
-    return baseline / PANGO_SCALE;
+    return (((height * PANGO_SCALE) /* height of the space in pango units */
+             - (f->ascent + f->descent)) /* minus space taken up by text */
+            / 2 /* divided by two -> half of the empty space (this is the top
+                   of the text) */
+            + f->ascent) /* now move down to the baseline */
+        / PANGO_SCALE; /* back to pixels */
 }
-#endif
 
 void RrFontDraw(XftDraw *d, RrTextureText *t, RrRect *area)
 {
     gint x,y,w,h;
     XftColor c;
-    GString *text;
     gint mw;
-#ifndef USE_PANGO
-    gint mh;
-    size_t l;
-    gboolean shortened = FALSE;
-#else
-    PangoLayout *pl;
     PangoRectangle rect;
 
-    pl = pango_layout_new (context);
-#endif /* USE_PANGO */
-
-    /* center vertically
-     * for xft we pass the top edge of the text for positioning... */
-#ifndef USE_PANGO
-    y = area->y +
-        (area->height - RrFontHeight(t->font)) / 2;
-#else
-    /* but for pango we pass the baseline, since different fonts have
-     * different top edges. It looks stupid when the baseline of "normal"
-     * text jumps up and down when a "strange" character is just added
-     * to the end of the text */
+    /* center the text vertically
+       We do this centering based on the 'baseline' since different fonts have
+       different top edges. It looks bad when the whole string is moved when 1
+       character from a non-default language is included in the string */
     y = area->y +
         font_calculate_baseline(t->font, area->height);
-#endif
+
     /* the +2 and -4 leave a small blank edge on the sides */
     x = area->x + 2;
     w = area->width - 4;
     h = area->height;
 
-    text = g_string_new(t->string);
-#ifndef USE_PANGO
-    l = g_utf8_strlen(text->str, -1);
-    font_measure_full(t->font, text->str, &mw, &mh);
-    while (l && mw > area->width) {
-        shortened = TRUE;
-        /* remove a character from the middle */
-        text = g_string_erase(text, l-- / 2, 1);
-        /* if the elipses are too large, don't show them at all */
-        if (ELIPSES_LENGTH(t->font) > area->width)
-            shortened = FALSE;
-        font_measure_full(t->font, text->str, &mw, &mh);
-        mw += ELIPSES_LENGTH(t->font);
-    }
-    if (shortened) {
-        text = g_string_insert(text, (l + 1) / 2, ELIPSES);
-        l += 3;
-    }
-    if (!l) return;
-
-    l = strlen(text->str); /* number of bytes */
-
-#else
-    pango_layout_set_text(pl, text->str, -1);
-    pango_layout_set_font_description(pl, t->font->pango_font_description);
-    pango_layout_set_single_paragraph_mode(pl, TRUE);
-    pango_layout_set_width(pl, w * PANGO_SCALE);
-    pango_layout_set_ellipsize(pl, PANGO_ELLIPSIZE_MIDDLE);
-    /* This doesn't work with layout_line() of course */
-/*    pango_layout_set_alignment(pl, (PangoAlignment)(t->justify)); */
-    pango_layout_get_pixel_extents(pl, NULL, &rect);
-    mw = rect.width;
+    pango_layout_set_text(t->font->layout, t->string, -1);
+    pango_layout_set_width(t->font->layout, w * PANGO_SCALE);
 
-#endif /* USE_PANGO */
+    pango_layout_get_pixel_extents(t->font->layout, NULL, &rect);
+    mw = rect.width;
 
+    /* pango_layout_set_alignment doesn't work with 
+       pango_xft_render_layout_line */
     switch (t->justify) {
     case RR_JUSTIFY_LEFT:
         break;
@@ -388,37 +289,22 @@ void RrFontDraw(XftDraw *d, RrTextureText *t, RrRect *area)
             c.pixel = WhitePixel(RrDisplay(t->font->inst),
                                  RrScreen(t->font->inst));
         }
-#ifndef USE_PANGO
-        XftDrawStringUtf8(d, &c, t->font->xftfont, x + t->font->offset,
-                          t->font->xftfont->ascent + y + t->font->offset,
-                          (FcChar8*)text->str, l);
-#else /* USE_PANGO */
         /* see below... */
-        pango_xft_render_layout_line(d, &c, pango_layout_get_line(pl, 0),
-                                     (x + t->font->offset) * PANGO_SCALE,
-                                     (y + t->font->offset) * PANGO_SCALE);
-#endif /* USE_PANGO */
+        pango_xft_render_layout_line
+            (d, &c, pango_layout_get_line(t->font->layout, 0),
+             (x + t->font->offset) * PANGO_SCALE,
+             (y + t->font->offset) * PANGO_SCALE);
     }
+
     c.color.red = t->color->r | t->color->r << 8;
     c.color.green = t->color->g | t->color->g << 8;
     c.color.blue = t->color->b | t->color->b << 8;
     c.color.alpha = 0xff | 0xff << 8; /* fully opaque text */
     c.pixel = t->color->pixel;
 
-#ifndef USE_PANGO
-    XftDrawStringUtf8(d, &c, t->font->xftfont, x,
-                      t->font->xftfont->ascent + y,
-                      (FcChar8*)text->str, l);
-#else /* USE_PANGO */
-    /* layout_line() bases y on the baseline, while layout() bases y on the
-     * top of the ink layout. We want the baseline to always be in the same
-     * place, thusly, we use layout_line()
-     * The actual line doesn't need to be freed (per the pango docs) */
-    pango_xft_render_layout_line(d, &c, pango_layout_get_line(pl, 0),
-                                 x * PANGO_SCALE, y * PANGO_SCALE);
-    g_object_unref(pl);
-#endif
-
-    g_string_free(text, TRUE);
-    return;
+    /* layout_line() uses y to specify the baseline
+       The line doesn't need to be freed, it's a part of the layout */
+    pango_xft_render_layout_line
+        (d, &c, pango_layout_get_line(t->font->layout, 0),
+         x * PANGO_SCALE, y * PANGO_SCALE);
 }
index 19417db2c1118e92c14da9a5229f715330b99537..a068660597e0151d2b223b28e81820f5e502ef6a 100644 (file)
 #define __font_h
 #include "render.h"
 #include "geom.h"
-#ifdef USE_PANGO
 #include <pango/pango.h>
-#include <pango/pangoxft.h>
-#endif /* USE_PANGO */
 
 struct _RrFont {
     const RrInstance *inst;
-    XftFont *xftfont;
-    gint elipses_length;
+    PangoFontDescription *font_desc; 
+    PangoLayout *layout; /*!< Used for measuring and rendering strings */
+    gint ascent; /*!< The font's ascent in pango-units */
+    gint descent; /*!< The font's descent in pango-units */
+    gint elipses_length; /*!< This one is in pixels, yay */
     gint shadow;
     gchar tint;
     gint offset;
-#ifdef USE_PANGO
-    PangoFontDescription *pango_font_description;
-    gint pango_ascent;
-    gint pango_descent;
-#endif /* USE_PANGO */
 };
 
 RrFont *RrFontOpen(const RrInstance *inst, gchar *fontstring);
 void RrFontClose(RrFont *f);
 void RrFontDraw(XftDraw *d, RrTextureText *t, RrRect *position);
+
 #endif /* __font_h */
index 386c87a3e5d7477356607c0b1524d659960cacd6..02e680404b7ca7b425f43e915cf082d3fbb77298 100644 (file)
@@ -57,6 +57,8 @@ void print_refs(gint id)
 
 RrInstance* RrInstanceNew (Display *display, gint screen)
 {
+    g_type_init(); /* supposedly needed for pango but seems to work without */
+
     definst = g_new (RrInstance, 1);
     definst->display = display;
     definst->screen = screen;
@@ -64,6 +66,7 @@ RrInstance* RrInstanceNew (Display *display, gint screen)
     definst->depth = DefaultDepth(display, screen);
     definst->visual = DefaultVisual(display, screen);
     definst->colormap = DefaultColormap(display, screen);
+    definst->pango = pango_xft_get_context(display, screen);
 
     definst->pseudo_colors = NULL;
 
@@ -210,6 +213,7 @@ void RrInstanceFree (RrInstance *inst)
         if (inst == definst) definst = NULL;
         g_free(inst->pseudo_colors);
         g_hash_table_destroy(inst->color_hash);
+        g_object_unref(inst->pango);
     }
 }
 
index 21bd535f94baa6c3bfc86181d7c893bc50ea12b1..8a15f423ab0894bd5ea5c90faf5a28ea509f3616 100644 (file)
@@ -21,6 +21,7 @@
 
 #include <X11/Xlib.h>
 #include <glib.h>
+#include <pango/pangoxft.h>
 
 struct _RrInstance {
     Display *display;
@@ -29,6 +30,7 @@ struct _RrInstance {
     Visual *visual;
     gint depth;
     Colormap colormap;
+    PangoContext *pango;
 
     gint red_offset;
     gint green_offset;
index ac1394cf797c0f794d3dc658b17c6b8163fc3192..da34a6a894817c61984ddbcd2bed45ccc13e3b41 100644 (file)
@@ -25,8 +25,7 @@
 #include "version.h"
 
 #include <X11/Xlib.h> /* some platforms dont include this as needed for Xft */
-#define _XFT_NO_COMPAT_ /* no Xft 1 API */
-#include <X11/Xft/Xft.h>
+#include <pango/pangoxft.h>
 #include <glib.h>
 
 G_BEGIN_DECLS
This page took 0.038128 seconds and 4 git commands to generate.