Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        tclass.h text.c ttfont.c 


Log Message:
Simplify TT font drawing. Invalidate GC when visual changes.

===================================================================
RCS file: /cvs/e/e16/e/src/tclass.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- tclass.h    8 May 2006 16:26:22 -0000       1.9
+++ tclass.h    13 May 2006 17:03:22 -0000      1.10
@@ -102,8 +102,8 @@
                                  int *rbearing_return);
 Efont              *Efont_load(const char *file, int size);
 void                Efont_free(Efont * f);
-void                EFont_draw_string(Drawable win, GC gc, int x, int y,
-                                     const char *text, Efont * f,
-                                     Visual * vis, Colormap cm);
+void                EFont_draw_string(Win win, Drawable draw, Efont * f, int x,
+                                     int y, int r, int g, int b,
+                                     const char *text);
 
 #endif /* _TCLASS_H */
===================================================================
RCS file: /cvs/e/e16/e/src/text.c,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -3 -r1.68 -r1.69
--- text.c      13 May 2006 13:25:30 -0000      1.68
+++ text.c      13 May 2006 17:03:22 -0000      1.69
@@ -268,6 +268,28 @@
    StrlistFree(lines, num_lines);
 }
 
+static              GC
+_get_gc(Win win)
+{
+   static GC           gc = None;
+   static Visual      *last_vis = NULL;
+   Visual             *vis;
+
+   vis = WinGetVisual(win);
+   if (vis != last_vis)
+     {
+       if (gc)
+          EXFreeGC(gc);
+       gc = None;
+       last_vis = vis;
+     }
+
+   if (!gc)
+      gc = EXCreateGC(WinGetXwin(win), 0, NULL);
+
+   return gc;
+}
+
 void
 TextstateDrawText(TextState * ts, Win win, Drawable draw, const char *text,
                  int x, int y, int w, int h, int fsize __UNUSED__,
@@ -277,8 +299,8 @@
    char              **lines;
    int                 i, num_lines;
    int                 xx, yy;
-   static GC           gc = 0;
    int                 textwidth_limit, offset_x, offset_y;
+   GC                  gc;
    Pixmap              drawable;
 
    if (w <= 0 || h <= 0)
@@ -296,9 +318,6 @@
    if (draw == None)
       draw = WinGetXwin(win);
 
-   if (!gc)
-      gc = EXCreateGC(draw, 0, NULL);
-
    if (ts->style.orientation == FONT_TO_RIGHT ||
        ts->style.orientation == FONT_TO_LEFT)
       textwidth_limit = w;
@@ -310,6 +329,8 @@
 
    if (ts->efont)
      {
+       int                 r, g, b;
+
        for (i = 0; i < num_lines; i++)
          {
             int                 ascent, descent, wid;
@@ -370,28 +391,26 @@
 
             if (ts->effect == 1)
               {
-                 EAllocColor(&ts->bg_col);
-                 XSetForeground(disp, gc, ts->bg_col.pixel);
-                 EFont_draw_string(drawable, gc, offset_x + 1, offset_y + 1,
-                                   lines[i], ts->efont, VRoot.vis, VRoot.cmap);
+                 EGetColor(&(ts->bg_col), &r, &g, &b);
+                 EFont_draw_string(win, drawable, ts->efont,
+                                   offset_x + 1, offset_y + 1,
+                                   r, g, b, lines[i]);
               }
             else if (ts->effect == 2)
               {
-                 EAllocColor(&ts->bg_col);
-                 XSetForeground(disp, gc, ts->bg_col.pixel);
-                 EFont_draw_string(drawable, gc, offset_x - 1, offset_y,
-                                   lines[i], ts->efont, VRoot.vis, VRoot.cmap);
-                 EFont_draw_string(drawable, gc, offset_x + 1, offset_y,
-                                   lines[i], ts->efont, VRoot.vis, VRoot.cmap);
-                 EFont_draw_string(drawable, gc, offset_x, offset_y - 1,
-                                   lines[i], ts->efont, VRoot.vis, VRoot.cmap);
-                 EFont_draw_string(drawable, gc, offset_x, offset_y + 1,
-                                   lines[i], ts->efont, VRoot.vis, VRoot.cmap);
-              }
-            EAllocColor(&ts->fg_col);
-            XSetForeground(disp, gc, ts->fg_col.pixel);
-            EFont_draw_string(drawable, gc, offset_x, offset_y, lines[i],
-                              ts->efont, VRoot.vis, VRoot.cmap);
+                 EGetColor(&(ts->bg_col), &r, &g, &b);
+                 EFont_draw_string(win, drawable, ts->efont, offset_x - 1,
+                                   offset_y, r, g, b, lines[i]);
+                 EFont_draw_string(win, drawable, ts->efont, offset_x + 1,
+                                   offset_y, r, g, b, lines[i]);
+                 EFont_draw_string(win, drawable, ts->efont, offset_x,
+                                   offset_y - 1, r, g, b, lines[i]);
+                 EFont_draw_string(win, drawable, ts->efont, offset_x,
+                                   offset_y + 1, r, g, b, lines[i]);
+              }
+            EGetColor(&(ts->fg_col), &r, &g, &b);
+            EFont_draw_string(win, drawable, ts->efont, offset_x, offset_y,
+                              r, g, b, lines[i]);
 
             TextDrawRotBack(win, draw, drawable, xx - 1, yy - 1 - ascent,
                             wid + 2, ascent + descent + 2, ts);
@@ -402,6 +421,8 @@
      }
    else if (ts->xfontset)
      {
+       gc = _get_gc(win);
+
        for (i = 0; i < num_lines; i++)
          {
             XRectangle          ret1, ret2;
@@ -547,6 +568,8 @@
    else if ((ts->xfont) && (ts->xfont->min_byte1 == 0)
            && (ts->xfont->max_byte1 == 0))
      {
+       gc = _get_gc(win);
+
        XSetFont(disp, gc, ts->xfont->fid);
        for (i = 0; i < num_lines; i++)
          {
@@ -640,6 +663,8 @@
      }
    else if ((ts->xfont))
      {
+       gc = _get_gc(win);
+
        XSetFont(disp, gc, ts->xfont->fid);
        for (i = 0; i < num_lines; i++)
          {
===================================================================
RCS file: /cvs/e/e16/e/src/ttfont.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -3 -r1.49 -r1.50
--- ttfont.c    13 May 2006 13:25:30 -0000      1.49
+++ ttfont.c    13 May 2006 17:03:22 -0000      1.50
@@ -33,20 +33,6 @@
 };
 
 static void
-ImlibSetFgColorFromGC(GC gc, Colormap cm)
-{
-   XGCValues           xgcv;
-   XColor              xclr;
-   int                 r, g, b;
-
-   XGetGCValues(disp, gc, GCForeground, &xgcv);
-   xclr.pixel = xgcv.foreground;
-   XQueryColor(disp, cm, &xclr);
-   EGetColor(&xclr, &r, &g, &b);
-   imlib_context_set_color(r, g, b, 255);
-}
-
-static void
 EFonts_Init(void)
 {
 #if !TEST_TTFONT
@@ -64,8 +50,8 @@
 }
 
 void
-EFont_draw_string(Drawable win, GC gc, int x, int y, const char *text,
-                 Efont * f, Visual * vis __UNUSED__, Colormap cm)
+EFont_draw_string(Win win, Drawable draw, Efont * f, int x, int y,
+                 int r, int g, int b, const char *text)
 {
    EImage             *im;
    int                 w, h, ascent, descent;
@@ -73,12 +59,12 @@
    Efont_extents(f, text, &ascent, &descent, &w, NULL, NULL, NULL, NULL);
    h = ascent + descent;
 
-   im = EImageGrabDrawable(win, None, x, y - ascent, w, h, 0);
+   im = EImageGrabDrawable(draw, None, x, y - ascent, w, h, 0);
    imlib_context_set_image(im);
+   imlib_context_set_color(r, g, b, 255);
    imlib_context_set_font(f->face);
-   ImlibSetFgColorFromGC(gc, cm);
    imlib_text_draw(0, 0, text);
-   EImageRenderOnDrawable(im, NULL, win, x, y - ascent, w, h, 0);
+   EImageRenderOnDrawable(im, win, draw, x, y - ascent, w, h, 0);
    EImageFree(im);
 }
 




-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to