changeset 92185:1e28008a13e5

(xfont_draw): Pay attention to s->padding_p.
author Kenichi Handa <handa@m17n.org>
date Mon, 25 Feb 2008 01:44:26 +0000
parents 6218afb021ac
children 919240e47747
files src/xfont.c
diffstat 1 files changed, 37 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/xfont.c	Mon Feb 25 01:43:55 2008 +0000
+++ b/src/xfont.c	Mon Feb 25 01:44:26 2008 +0000
@@ -775,6 +775,7 @@
   XFontStruct *xfont = s->face->font;
   int len = to - from;
   GC gc = s->gc;
+  int i;
 
   if (gc != s->face->gc)
     {
@@ -791,7 +792,6 @@
   if (xfont->min_byte1 == 0 && xfont->max_byte1 == 0)
     {
       char *str;
-      int i;
       USE_SAFE_ALLOCA;
 
       SAFE_ALLOCA (str, char *, len);
@@ -799,11 +799,25 @@
 	str[i] = XCHAR2B_BYTE2 (s->char2b + from + i);
       BLOCK_INPUT;
       if (with_background > 0)
-	XDrawImageString (FRAME_X_DISPLAY (s->f), FRAME_X_WINDOW (s->f),
-			  gc, x, y, str, len);
+	{
+	  if (s->padding_p)
+	    for (i = 0; i < len; i++)
+	      XDrawImageString (FRAME_X_DISPLAY (s->f), FRAME_X_WINDOW (s->f),
+				gc, x + i, y, str + i, 1);
+	  else
+	    XDrawImageString (FRAME_X_DISPLAY (s->f), FRAME_X_WINDOW (s->f),
+			      gc, x, y, str, len);
+	}
       else
-	XDrawString (FRAME_X_DISPLAY (s->f), FRAME_X_WINDOW (s->f),
-		     gc, x, y, str, len);
+	{
+	  if (s->padding_p)
+	    for (i = 0; i < len; i++)
+	      XDrawString (FRAME_X_DISPLAY (s->f), FRAME_X_WINDOW (s->f),
+			   gc, x + i, y, str + i, 1);
+	  else
+	    XDrawString (FRAME_X_DISPLAY (s->f), FRAME_X_WINDOW (s->f),
+			 gc, x, y, str, len);
+	}
       UNBLOCK_INPUT;
       SAFE_FREE ();
       return s->nchars;
@@ -811,11 +825,25 @@
 
   BLOCK_INPUT;
   if (with_background > 0)
-    XDrawImageString16 (FRAME_X_DISPLAY (s->f), FRAME_X_WINDOW (s->f),
-			gc, x, y, s->char2b + from, len);
+    {
+      if (s->padding_p)
+	for (i = 0; i < len; i++)
+	  XDrawImageString16 (FRAME_X_DISPLAY (s->f), FRAME_X_WINDOW (s->f),
+			      gc, x + i, y, s->char2b + from + i, 1);
+      else
+	XDrawImageString16 (FRAME_X_DISPLAY (s->f), FRAME_X_WINDOW (s->f),
+			    gc, x, y, s->char2b + from, len);
+    }
   else
-    XDrawString16 (FRAME_X_DISPLAY (s->f), FRAME_X_WINDOW (s->f),
-		   gc, x, y, s->char2b + from, len);
+    {
+      if (s->padding_p)
+	for (i = 0; i < len; i++)
+	  XDrawString16 (FRAME_X_DISPLAY (s->f), FRAME_X_WINDOW (s->f),
+			 gc, x + i, y, s->char2b + from + i, 1);
+      else
+	XDrawString16 (FRAME_X_DISPLAY (s->f), FRAME_X_WINDOW (s->f),
+		       gc, x, y, s->char2b + from, len);
+    }
   UNBLOCK_INPUT;
 
   return len;