Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/dox


Modified Files:
        dox.h ttfont.c 


Log Message:
Use Imlib2 font functions for TT font rendering.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/dox/dox.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -3 -r1.21 -r1.22
--- dox.h       12 Dec 2003 18:42:15 -0000      1.21
+++ dox.h       14 Dec 2003 17:37:46 -0000      1.22
@@ -360,3 +360,5 @@
 
 #define Emalloc malloc
 #define Efree   free
+
+#define Esnprintf snprintf
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/dox/ttfont.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- ttfont.c    12 Dec 2003 18:42:15 -0000      1.8
+++ ttfont.c    14 Dec 2003 17:37:46 -0000      1.9
@@ -22,6 +22,103 @@
  */
 #include "dox.h"
 
+#if USE_IMLIB2
+
+struct _efont
+{
+   Imlib_Font         *face;
+};
+
+static void
+ImlibSetFgColorFromGC(Display * disp, 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);
+}
+
+void
+EFont_draw_string(Display * disp, Drawable win, GC gc, int x, int y, char *text,
+                 Efont * f, Visual * vis, Colormap cm)
+{
+   Imlib_Image         im;
+   int                 w, h, ascent, descent;
+
+   Efont_extents(f, text, &ascent, &descent, &w, NULL, NULL, NULL, NULL);
+   h = ascent + descent;
+
+   imlib_context_set_drawable(win);
+   im = imlib_create_image_from_drawable(0, x, y - ascent, w, h, 0);
+   imlib_context_set_image(im);
+
+   imlib_context_set_font(f->face);
+   ImlibSetFgColorFromGC(disp, gc, cm);
+   imlib_text_draw(0, 0, text);
+   imlib_render_image_on_drawable(x, y - ascent);
+   imlib_free_image();
+}
+
+void
+Efont_free(Efont * f)
+{
+   if (!f)
+      return;
+
+   imlib_context_set_font(f->face);
+   imlib_free_font();
+
+   Efree(f);
+}
+
+Efont              *
+Efont_load(char *file, int size)
+{
+   char                s[4096];
+   Efont              *f;
+   Imlib_Font         *ff;
+
+   Esnprintf(s, sizeof(s), "%s/%d", file, size);
+   ff = imlib_load_font(s);
+   if (ff == NULL)
+      return NULL;
+
+   f = Emalloc(sizeof(Efont));
+   f->face = ff;
+
+   return f;
+}
+
+void
+Efont_extents(Efont * f, char *text, int *font_ascent_return,
+             int *font_descent_return, int *width_return,
+             int *max_ascent_return, int *max_descent_return,
+             int *lbearing_return, int *rbearing_return)
+{
+   int                 height;
+
+   if (!f)
+      return;
+
+   imlib_context_set_font(f->face);
+   imlib_get_text_size(text, width_return, &height);
+   if (font_ascent_return)
+      *font_ascent_return = imlib_get_font_ascent();
+   if (font_descent_return)
+      *font_descent_return = imlib_get_font_descent();
+   if (max_ascent_return)
+      *max_ascent_return = imlib_get_maximum_font_ascent();
+   if (max_descent_return)
+      *max_descent_return = imlib_get_maximum_font_descent();
+}
+
+#else /* USE_IMLIB1 */
+
 #if TEST_TTFONT
 #undef XSync
 #undef IC_RenderDepth
@@ -641,7 +738,7 @@
 
 void
 EFont_draw_string(Display * disp, Drawable win, GC gc, int x, int y, char *text,
-                 Efont * font, Visual * vis, Colormap cm)
+                 Efont * f, Visual * vis, Colormap cm)
 {
    XImage             *xim;
    XShmSegmentInfo     shminfo;
@@ -657,10 +754,10 @@
 
    inx = 0;
    iny = 0;
-   rtmp = calc_size(font, &w, &h, text);
+   rtmp = calc_size(f, &w, &h, text);
    rmap = create_font_raster(w, h);
 
-   render_text(rmap, rtmp, font, text, &inx, &iny);
+   render_text(rmap, rtmp, f, text, &inx, &iny);
 
    XGrabServer(disp);
    erh = XSetErrorHandler((XErrorHandler) handle_x_error);
@@ -1073,8 +1170,12 @@
    if (max_descent_return)
       *max_descent_return = f->max_descent;
 }
+#endif /* USE_IMLIB1 */
 
 #if TEST_TTFONT
+
+#undef XSync
+
 Display            *disp;
 
 int
@@ -1087,7 +1188,13 @@
    int                 i, j;
 
    disp = XOpenDisplay(NULL);
-   XSync(disp, False);
+
+#if USE_IMLIB2
+   imlib_context_set_display(disp);
+   imlib_context_set_visual(DefaultVisual(disp, DefaultScreen(disp)));
+   imlib_context_set_colormap(DefaultColormap(disp, DefaultScreen(disp)));
+#endif
+
    srand(time(NULL));
    win = XCreateSimpleWindow(disp, DefaultRootWindow(disp), 0, 0, 640, 480, 0,
                             0, 0);




-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills.  Sign up for IBM's
Free Linux Tutorials.  Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to