ratpoison-devel
[Top][All Lists]
Advanced

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

[RP] Xft patch


From: Midare Kiyura
Subject: [RP] Xft patch
Date: Fri, 23 May 2008 05:59:16 -0500

[PATCH] Added Xft font support, enabled at configure time using 
--with-xft[="Default Font"]. Large changes to the code were made, most notably 
that all XmbTextEscapement and XmbDrawString calls were replaced with wrapper 
functions, and the FONT_HEIGHT macro was redone. I used the patch found here as 
a reference: 
http://osdir.com/ml/window-managers.ratpoison.devel/2003-04/msg00111.html

---
 configure.in  |   19 +++++++++++
 src/actions.c |   94 ++++++++++++++++++++++++++++++++++-----------------------
 src/bar.c     |   84 ++++++++++++++++++++++++++++++++++++++++-----------
 src/bar.h     |    3 ++
 src/data.h    |    9 +++++
 src/globals.h |   12 +++++++
 src/input.c   |   34 ++++++++++----------
 src/main.c    |    9 +++++
 src/screen.c  |   22 +++++++++++++
 src/split.c   |   12 ++++----
 10 files changed, 219 insertions(+), 79 deletions(-)

diff --git a/configure.in b/configure.in
index 0af99b7..ed50d83 100644
--- a/configure.in
+++ b/configure.in
@@ -42,6 +42,25 @@ AC_ARG_WITH(xterm, [ --with-xterm=PROG        set the x 
terminal emulator used b
 term_prog=$withval, term_prog="xterm")
 AC_DEFINE_UNQUOTED(TERM_PROG, "$term_prog", X terminal emulator to use)
 
+
+dnl Use the Xft library if desired.  Also, set the type of font to use
+AC_MSG_CHECKING(whether to use Xft)
+AC_ARG_WITH(xft,
+       AC_HELP_STRING([--with-xft=FONT], [use FONT via the Xft library]),
+       [if test "x$withval" != "xno"; then
+                dnl Set a default font
+               if test "x$withval" == "xyes"; then
+                       withval="Mono-11"
+               fi
+               AC_DEFINE_UNQUOTED(USE_XFT_FONT, "$withval", [If defined: the 
desired font])
+               CFLAGS="$CFLAGS `pkg-config --cflags xft`"
+               LDFLAGS="$LDFLAGS `pkg-config --libs xft`"
+               AC_MSG_RESULT(yes)
+       else
+               AC_MSG_RESULT(no)
+       fi],
+       [AC_MSG_RESULT(no)])
+
 dnl Checks for programs.
 AC_CHECK_TOOL(CC, gcc)
 AC_PROG_CC
diff --git a/src/actions.c b/src/actions.c
index 84fdd49..fa38142 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -1718,8 +1718,8 @@ read_frame (struct argspec *spec, struct sbuf *s,  struct 
cmdarg **arg)
                  determine the height and width of the window. */
               /*              num = xsprintf (" %d ", cur->number); */
               num = frame_selector (cur->number);
-              width = defaults.bar_x_padding * 2 + XmbTextEscapement 
(defaults.font, num, strlen (num));
-              height = (FONT_HEIGHT (defaults.font) + defaults.bar_y_padding * 
2);
+              width = defaults.bar_x_padding * 2 + RPTextWidth (s, 
defaults.font, num, -1);
+              height = (FONT_HEIGHT (s) + defaults.bar_y_padding * 2);
 
               /* Create and map the window. */
               wins[i] = XCreateWindow (dpy, s->root, s->left + cur->x, s->top 
+ cur->y, width, height, 1,
@@ -1730,10 +1730,10 @@ read_frame (struct argspec *spec, struct sbuf *s,  
struct cmdarg **arg)
               XClearWindow (dpy, wins[i]);
 
               /* Display the frame's number inside the window. */
-              XmbDrawString (dpy, wins[i], defaults.font, s->normal_gc,
-                            defaults.bar_x_padding,
-                            defaults.bar_y_padding + rp_font_ascent,
-                            num, strlen (num));
+             RPDrawString (s, wins[i], s->normal_gc, 
+                           defaults.bar_x_padding, 
+                           defaults.bar_y_padding + FONT_ASCENT(s),
+                           num, -1);
 
               free (num);
               i++;
@@ -3199,25 +3199,25 @@ cmd_license (int interactive, struct cmdarg **args)
     {
       int tmp;
 
-      tmp = XmbTextEscapement (defaults.font, license_text[i], strlen 
(license_text[i]));
+      tmp = RPTextWidth (s, defaults.font, license_text[i], -1);
       if (tmp > max_width)
         max_width = tmp;
     }
 
   /* Offset the text so its in the center. */
   x = s->left + (s->width - max_width) / 2;
-  y = s->top + (s->height - i * FONT_HEIGHT (defaults.font)) / 2;
+  y = s->top + (s->height - i * FONT_HEIGHT (s)) / 2;
   if (x < 0) x = 0;
   if (y < 0) y = 0;
 
   /* Print the text. */
   for(i=0; license_text[i]; i++)
   {
-    XmbDrawString (dpy, s->help_window, defaults.font, s->normal_gc,
-                  x, y + rp_font_ascent,
-                  license_text[i], strlen (license_text[i]));
+    RPDrawString (s, s->help_window, s->normal_gc,
+                   x, y + FONT_ASCENT(s),
+                   license_text[i], -1);
 
-    y += FONT_HEIGHT (defaults.font);
+    y += FONT_HEIGHT (s);
   }
 
   /* Wait for a key press. */
@@ -3265,24 +3265,25 @@ cmd_help (int interactive, struct cmdarg **args)
 
       XMapRaised (dpy, s->help_window);
 
-      XmbDrawString (dpy, s->help_window, defaults.font, s->normal_gc,
-                    10, y + rp_font_ascent,
-                    "ratpoison key bindings", strlen ("ratpoison key 
bindings"));
+      RPDrawString (s, s->help_window, s->normal_gc,
+                    10, y + FONT_ASCENT(s),
+                    "ratpoison key bindings", -1);
 
-      y += FONT_HEIGHT (defaults.font) * 2;
+      y += FONT_HEIGHT (s) * 2;
+
+      RPDrawString (s, s->help_window, s->normal_gc,
+                    10, y + FONT_ASCENT(s),
+                    "Command key: ", -1);
 
-      XmbDrawString (dpy, s->help_window, defaults.font, s->normal_gc,
-                    10, y + rp_font_ascent,
-                    "Command key: ", strlen ("Command key: "));
 
       keysym_name = keysym_to_string (prefix_key.sym, prefix_key.state);
-      XmbDrawString (dpy, s->help_window, defaults.font, s->normal_gc,
-                    10 + XmbTextEscapement (defaults.font, "Command key: ", 
strlen ("Command key: ")),
-                    y + rp_font_ascent,
-                    keysym_name, strlen (keysym_name));
+      RPDrawString (s, s->help_window, s->normal_gc,
+                    10 + RPTextWidth (s, defaults.font, "Command key: ", -1),
+                    y + FONT_ASCENT(s),
+                    keysym_name, -1);
       free (keysym_name);
 
-      y += FONT_HEIGHT (defaults.font) * 2;
+      y += FONT_HEIGHT (s) * 2;
 
       i = 0;
       old_i = 0;
@@ -3292,30 +3293,30 @@ cmd_help (int interactive, struct cmdarg **args)
             {
               keysym_name = keysym_to_string (map->actions[i].key, 
map->actions[i].state);
 
-              XmbDrawString (dpy, s->help_window, defaults.font, s->normal_gc,
-                            x, y + rp_font_ascent,
-                            keysym_name, strlen (keysym_name));
+              RPDrawString (s, s->help_window, s->normal_gc,
+                           x, y + FONT_ASCENT(s),
+                           keysym_name, -1);
 
-              if (XmbTextEscapement (defaults.font, keysym_name, strlen 
(keysym_name)) > max_width)
-                max_width = XmbTextEscapement (defaults.font, keysym_name, 
strlen (keysym_name));
+              if (RPTextWidth (s, defaults.font, keysym_name, -1) > max_width)
+                max_width = RPTextWidth (s, defaults.font, keysym_name, -1);
 
               free (keysym_name);
             }
           else
             {
-              XmbDrawString (dpy, s->help_window, defaults.font, s->normal_gc,
-                            x, y + rp_font_ascent,
-                            map->actions[i].data, strlen 
(map->actions[i].data));
+              RPDrawString (s, s->help_window, s->normal_gc,
+                           x, y + FONT_ASCENT(s),
+                           map->actions[i].data, -1);
 
-              if (XmbTextEscapement (defaults.font, map->actions[i].data, 
strlen (map->actions[i].data)) > max_width)
+              if (RPTextWidth (s, defaults.font, map->actions[i].data, -1) > 
max_width)
                 {
-                  max_width = XmbTextEscapement (defaults.font, 
map->actions[i].data, strlen (map->actions[i].data));
+                  max_width = RPTextWidth (s, defaults.font, 
map->actions[i].data, -1);
                 }
             }
 
-          y += FONT_HEIGHT (defaults.font);
+          y += FONT_HEIGHT (s);
           /* Make sure the next line fits entirely within the window. */
-          if (y + FONT_HEIGHT (defaults.font) >= (s->top + s->height))
+          if (y + FONT_HEIGHT (s) >= (s->top + s->height))
             {
               if (drawing_keys)
                 {
@@ -3332,7 +3333,7 @@ cmd_help (int interactive, struct cmdarg **args)
                 }
 
               max_width = 0;
-              y = FONT_HEIGHT (defaults.font) * 4;
+              y = FONT_HEIGHT (s) * 4;
             }
           else
             {
@@ -3341,7 +3342,7 @@ cmd_help (int interactive, struct cmdarg **args)
                 {
                   x += max_width + 10;
                   drawing_keys = 0;
-                  y = FONT_HEIGHT (defaults.font) * 4;
+                  y = FONT_HEIGHT (s) * 4;
                   i = old_i;
                   max_width = 0;
                 }
@@ -3545,6 +3546,7 @@ update_gc (rp_screen *s)
                            | GCSubwindowMode, &gv);
 }
 
+#ifndef USE_XFT_FONT
 static void
 update_all_gcs (void)
 {
@@ -3555,24 +3557,40 @@ update_all_gcs (void)
       update_gc (&screens[i]);
     }
 }
+#endif
 
 static cmdret *
 set_font (struct cmdarg **args)
 {
+#ifdef USE_XFT_FONT
+  XftFont *font;
+  rp_screen *s = current_screen ();
+#else
   XFontSet font;
+#endif
 
   if (args[0] == NULL)
     return cmdret_new (RET_SUCCESS, "%s", defaults.font_string);
 
+#ifdef USE_XFT_FONT
+  font = XftFontOpenName (dpy, s->screen_num, ARG_STRING (0));
+#else
   font = load_query_font_set (dpy, ARG_STRING(0));
+#endif
+
   if (font == NULL)
     return cmdret_new (RET_FAILURE, "deffont: unknown font");
 
+#ifdef USE_XFT_FONT
+  XftFontClose (dpy, s->ft_font);
+  s->ft_font = font;
+#else
   /* Save the font as the default. */
   XFreeFontSet (dpy, defaults.font);
   defaults.font = font;
   set_extents_of_fontset(font);
   update_all_gcs();
+#endif
 
   free (defaults.font_string);
   defaults.font_string = xstrdup (ARG_STRING(0));
diff --git a/src/bar.c b/src/bar.c
index e87f4e5..2951098 100644
--- a/src/bar.c
+++ b/src/bar.c
@@ -25,6 +25,10 @@
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
 
+#ifdef USE_XFT_FONT
+#include <X11/Xft/Xft.h>
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -245,6 +249,7 @@ count_lines (char* msg, int len)
 static int
 max_line_length (char* msg)
 {
+  rp_screen *s = current_screen ();
   size_t i;
   size_t start;
   int ret = 0;
@@ -257,7 +262,7 @@ max_line_length (char* msg)
           int current_width;
 
           /* Check if this line is the longest so far. */
-          current_width = XmbTextEscapement (defaults.font, msg + start, i - 
start);
+          current_width = RPTextWidth (s, defaults.font, msg + start, -1);
           if(current_width > ret)
             {
               ret = current_width;
@@ -321,7 +326,7 @@ draw_string (rp_screen *s, char *msg)
   size_t i;
   int line_no;
   int start;
-  int line_height = FONT_HEIGHT (defaults.font);
+  int line_height = FONT_HEIGHT (s);
 
   /* Walk through the string, print each line. */
   start = 0;
@@ -332,22 +337,20 @@ draw_string (rp_screen *s, char *msg)
          line, and move down one line. */
       if (msg[i] == '\n')
         {
-          XmbDrawString (dpy, s->bar_window, defaults.font, s->normal_gc,
-                        defaults.bar_x_padding,
-                        defaults.bar_y_padding + rp_font_ascent
-                        +  line_no * line_height,
-                        msg + start, i - start);
+          RPDrawString (s, s->bar_window, s->normal_gc,
+                        defaults.bar_x_padding,
+                        defaults.bar_y_padding + FONT_ASCENT(s),
+                        msg + start, -1);
           line_no++;
           start = i + 1;
         }
     }
 
   /* Print the last line. */
-  XmbDrawString (dpy, s->bar_window, defaults.font, s->normal_gc,
-                defaults.bar_x_padding,
-                defaults.bar_y_padding + rp_font_ascent
-                +  line_no * line_height,
-                msg + start, strlen (msg) - start);
+  RPDrawString (s, s->bar_window, s->normal_gc,
+               defaults.bar_x_padding,
+               defaults.bar_y_padding + FONT_ASCENT(s),
+               msg + start, -1);
 
   XSync (dpy, False);
 }
@@ -412,6 +415,7 @@ static void
 get_mark_box (char *msg, size_t mark_start, size_t mark_end,
               int *x, int *y, int *width, int *height)
 {
+  rp_screen *s = current_screen ();
   int start, end;
   int mark_end_is_new_line = 0;
   int start_line;
@@ -445,11 +449,11 @@ get_mark_box (char *msg, size_t mark_start, size_t 
mark_end,
   if (mark_start == 0 || start_pos_in_line == 0)
     start = 0;
   else
-    start = XmbTextEscapement (defaults.font,
+    start = RPTextWidth (s, defaults.font,
                         &msg[start_line_beginning],
                         start_pos_in_line) + defaults.bar_x_padding;
-
-  end = XmbTextEscapement (defaults.font,
+   
+  end = RPTextWidth (s, defaults.font,
                     &msg[end_line_beginning],
                     end_pos_in_line) + defaults.bar_x_padding * 2;
 
@@ -468,8 +472,8 @@ get_mark_box (char *msg, size_t mark_start, size_t mark_end,
     }
 
   *x = start;
-  *y = (start_line - 1) * FONT_HEIGHT (defaults.font) + defaults.bar_y_padding;
-  *height = (end_line - start_line + 1) * FONT_HEIGHT (defaults.font);
+  *y = (start_line - 1) * FONT_HEIGHT (s) + defaults.bar_y_padding;
+  *height = (end_line - start_line + 1) * FONT_HEIGHT (s);
 }
 
 static void
@@ -542,7 +546,7 @@ marked_message_internal (char *msg, int mark_start, int 
mark_end)
   /* Calculate the width and height of the window. */
   num_lines = count_lines (msg, strlen(msg));
   width = defaults.bar_x_padding * 2 + max_line_length(msg);
-  height = FONT_HEIGHT (defaults.font) * num_lines + defaults.bar_y_padding * 
2;
+  height = FONT_HEIGHT (s) * num_lines + defaults.bar_y_padding * 2;
 
   /* Display the string. */
   prepare_bar (s, width, height);
@@ -588,3 +592,47 @@ free_bar (void)
   if (last_msg)
     free (last_msg);
 }
+
+void
+RPDrawString (rp_screen *s, Drawable d, GC gc, int x, int y, char *string, int 
length)
+{
+  if (length < 0)
+    length = strlen (string);
+
+#ifdef USE_XFT_FONT
+  if (s->ft_font)
+    {
+      XftDraw *draw;
+      draw = XftDrawCreate (dpy, d, DefaultVisual (dpy, s->screen_num),
+                            DefaultColormap (dpy, s->screen_num));
+      if (draw)
+        {
+          XftDrawString8 (draw, &s->color, s->ft_font, x, y, (FcChar8*) 
string, length);
+          XftDrawDestroy (draw);
+        }
+      else
+        PRINT_ERROR(("Failed to allocate XftDraw object\n"));
+    }
+  else
+#endif
+    XmbDrawString (dpy, d, defaults.font, gc, x, y, string, length);
+}
+
+int
+RPTextWidth (rp_screen *s, XFontSet font, char *string, int count)
+{
+  if (count < 0)
+    count = strlen (string);
+
+#ifdef USE_XFT_FONT
+  if (s->ft_font)
+    {
+      XGlyphInfo extents;
+      XftTextExtents8 (dpy, s->ft_font, (FcChar8*) string, count, &extents);
+      return extents.xOff;
+    }
+  else
+#endif
+    return XmbTextEscapement (font, string, count);
+}
+
diff --git a/src/bar.h b/src/bar.h
index 2156802..b668c98 100644
--- a/src/bar.h
+++ b/src/bar.h
@@ -36,4 +36,7 @@ void redraw_last_message (void);
 void show_last_message (void);
 void free_bar (void);
 
+void RPDrawString (rp_screen *s, Drawable d, GC gc, int x, int y, char 
*string, int length);
+int RPTextWidth (rp_screen *s, XFontSet font, char *string, int count);
+
 #endif /* ! _RATPOISON_BAR_H */
diff --git a/src/data.h b/src/data.h
index 090c083..1d5a1a8 100644
--- a/src/data.h
+++ b/src/data.h
@@ -29,6 +29,10 @@
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
 
+#ifdef USE_XFT_FONT
+#include <X11/Xft/Xft.h>
+#endif
+
 typedef struct rp_window rp_window;
 typedef struct rp_screen rp_screen;
 typedef struct rp_action rp_action;
@@ -168,6 +172,11 @@ struct rp_screen
   /* The number of the currently focused frame. One for each screen so
      when you switch screens the focus doesn't get frobbed. */
   int current_frame;
+
+#ifdef USE_XFT_FONT
+  XftFont *ft_font;
+  XftColor color;
+#endif
 };
 
 struct rp_action
diff --git a/src/globals.h b/src/globals.h
index f4215d3..92bb8c9 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -27,7 +27,19 @@
 #define RET_SUCCESS 1
 #define RET_FAILURE 0
 
+#ifdef USE_XFT_FONT
+#include <X11/Xft/Xft.h>
+
+#define FONT_HEIGHT(s) ((s)->ft_font->ascent + (s)->ft_font->descent)
+#define FONT_ASCENT(s) ((s)->ft_font->ascent)
+
+#else
+
 #define FONT_HEIGHT(f) (rp_font_ascent + rp_font_descent)
+#define FONT_ASCENT(f) (rp_font_ascent)
+
+#endif
+
 #define MAX_FONT_WIDTH(f) (rp_font_width)
 
 #define WIN_EVENTS (StructureNotifyMask | PropertyChangeMask | 
ColormapChangeMask | FocusChangeMask)
diff --git a/src/input.c b/src/input.c
index d1ae47c..393333f 100644
--- a/src/input.c
+++ b/src/input.c
@@ -424,15 +424,15 @@ read_key (KeySym *keysym, unsigned int *modifiers, char 
*keysym_name, int len)
 static void
 update_input_window (rp_screen *s, rp_input_line *line)
 {
-  int   prompt_width = XmbTextEscapement (defaults.font, line->prompt, strlen 
(line->prompt));
-  int   input_width  = XmbTextEscapement (defaults.font, line->buffer, 
line->length);
+  int   prompt_width = RPTextWidth (s, defaults.font, line->prompt, -1);
+  int   input_width  = RPTextWidth (s, defaults.font, line->buffer, 
line->length);
   int   total_width;
   GC lgc;
   XGCValues gv;
   int height;
 
   total_width = defaults.bar_x_padding * 2 + prompt_width + input_width + 
MAX_FONT_WIDTH (defaults.font);
-  height = (FONT_HEIGHT (defaults.font) + defaults.bar_y_padding * 2);
+  height = (FONT_HEIGHT (s) + defaults.bar_y_padding * 2);
 
   if (total_width < defaults.input_window_size + prompt_width)
     {
@@ -441,22 +441,22 @@ update_input_window (rp_screen *s, rp_input_line *line)
 
   XMoveResizeWindow (dpy, s->input_window,
                      bar_x (s, total_width), bar_y (s, height), total_width,
-                     (FONT_HEIGHT (defaults.font) + defaults.bar_y_padding * 
2));
+                     (FONT_HEIGHT (s) + defaults.bar_y_padding * 2));
 
   XClearWindow (dpy, s->input_window);
   XSync (dpy, False);
 
-  XmbDrawString (dpy, s->input_window, defaults.font, s->normal_gc,
-                defaults.bar_x_padding,
-                defaults.bar_y_padding + rp_font_ascent,
-                line->prompt,
-                strlen (line->prompt));
+  RPDrawString (s, s->input_window, s->normal_gc, 
+                       defaults.bar_x_padding, 
+                defaults.bar_y_padding + FONT_ASCENT(s),
+               line->prompt, 
+                -1);
 
-  XmbDrawString (dpy, s->input_window, defaults.font, s->normal_gc,
-                defaults.bar_x_padding + prompt_width,
-                defaults.bar_y_padding + rp_font_ascent,
-                line->buffer,
-                line->length);
+  RPDrawString (s, s->input_window, s->normal_gc, 
+                defaults.bar_x_padding + prompt_width,
+                defaults.bar_y_padding + FONT_ASCENT(s),
+               line->buffer, 
+                line->length);
 
   gv.function = GXxor;
   gv.foreground = s->fg_color ^ s->bg_color;
@@ -464,10 +464,10 @@ update_input_window (rp_screen *s, rp_input_line *line)
 
   /* Draw a cheap-o cursor - MkII */
   XFillRectangle (dpy, s->input_window, lgc,
-                  defaults.bar_x_padding + prompt_width + XmbTextEscapement 
(defaults.font, line->buffer, line->position),
+                 defaults.bar_x_padding + prompt_width + RPTextWidth (s, 
defaults.font, line->buffer, line->position),
                   defaults.bar_y_padding,
-                  XmbTextEscapement (defaults.font, 
&line->buffer[line->position], 1),
-                  FONT_HEIGHT (defaults.font));
+                 RPTextWidth (s, defaults.font, &line->buffer[line->position], 
1),
+                  FONT_HEIGHT (s));
 
   XFlush (dpy);
   XFreeGC (dpy, lgc);
diff --git a/src/main.c b/src/main.c
index 933decb..7a84aef 100644
--- a/src/main.c
+++ b/src/main.c
@@ -761,6 +761,15 @@ free_screen (rp_screen *s)
   XDestroyWindow (dpy, s->frame_window);
   XDestroyWindow (dpy, s->help_window);
 
+#ifdef USE_XFT_FONT
+  if (s->ft_font)
+    {
+      XftColorFree (dpy, DefaultVisual (dpy, s->screen_num),
+                    DefaultColormap (dpy, s->screen_num), &s->color);
+      XftFontClose (dpy, s->ft_font);
+    }
+#endif
+
   XFreeCursor (dpy, s->rat);
   XFreeColormap (dpy, s->def_cmap);
   XFreeGC (dpy, s->normal_gc);
diff --git a/src/screen.c b/src/screen.c
index 7d2fc6e..599dcb5 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -239,6 +239,9 @@ init_screen (rp_screen *s, int screen_num)
 {
   XGCValues gv;
   int xine_screen_num;
+#ifdef USE_XFT_FONT
+  XRenderColor rc = {0, 0, 0, 0xFFFF};
+#endif
 
   /* We use screen_num below to refer to the real X screen number, but
    * if we're using Xinerama, it will only be the Xinerama logical screen
@@ -343,6 +346,25 @@ init_screen (rp_screen *s, int screen_num)
   XSelectInput (dpy, s->help_window, KeyPressMask);
 
   XSync (dpy, 0);
+
+#ifdef USE_XFT_FONT
+  if (!XftColorAllocValue (dpy, DefaultVisual (dpy, screen_num),
+                           DefaultColormap (dpy, screen_num), &rc, &s->color))
+    {
+      PRINT_ERROR(("Failed to allocate font color\n"));
+      s->ft_font = NULL;
+    }
+  else
+    {
+      s->ft_font = XftFontOpenName (dpy, screen_num, USE_XFT_FONT);
+      if (!s->ft_font)
+        {
+          PRINT_ERROR(("Failed to open font\n"));
+          XftColorFree (dpy, DefaultVisual (dpy, screen_num),
+                        DefaultColormap (dpy, screen_num), &s->color);
+        }
+    }
+#endif
 }
 
 static int
diff --git a/src/split.c b/src/split.c
index f5012d8..5208633 100644
--- a/src/split.c
+++ b/src/split.c
@@ -1000,9 +1000,9 @@ show_frame_message (char *msg)
       sbuf_concat (msgbuf, EMPTY_FRAME_MESSAGE);
     }
 
-  width = defaults.bar_x_padding * 2 + XmbTextEscapement (defaults.font, 
msgbuf->data,
+  width = defaults.bar_x_padding * 2 + RPTextWidth (s, defaults.font, 
msgbuf->data,
                                                          msgbuf->len);
-  height = (FONT_HEIGHT (defaults.font) + defaults.bar_y_padding * 2);
+  height = (FONT_HEIGHT (s) + defaults.bar_y_padding * 2);
 
   /* We don't want another frame indicator to be displayed on another
    * screen at the same time, so we hide it before bringing it back again.
@@ -1018,10 +1018,10 @@ show_frame_message (char *msg)
   XClearWindow (dpy, s->frame_window);
   XSync (dpy, False);
 
-  XmbDrawString (dpy, s->frame_window, defaults.font, s->normal_gc,
-                defaults.bar_x_padding,
-                defaults.bar_y_padding + rp_font_ascent,
-                msgbuf->data, msgbuf->len);
+  RPDrawString (s, s->frame_window, s->normal_gc,
+               defaults.bar_x_padding,
+               defaults.bar_y_padding + FONT_ASCENT(s),
+               msgbuf->data, -1);
 
   sbuf_free (msgbuf);
 }
-- 
1.5.5.1





reply via email to

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