Added truetype support. Patch from Clemens Fruhwirth.
authorTom William Payne <twp@gentoo.org>
Tue, 14 Mar 2006 19:33:21 +0000 (19:33 +0000)
committerTom William Payne <twp@gentoo.org>
Tue, 14 Mar 2006 19:33:21 +0000 (19:33 +0000)
Package-Manager: portage-2.1_pre6-r2

x11-wm/ion3/ChangeLog
x11-wm/ion3/Manifest
x11-wm/ion3/files/digest-ion3-20060305-r1 [new file with mode: 0644]
x11-wm/ion3/files/ion3-20060305-truetype.patch [new file with mode: 0644]
x11-wm/ion3/ion3-20060305-r1.ebuild [new file with mode: 0644]

index b1fd96c8a923e3302c5257df18d4b2416860b24e..651d348d9242e7f2baadf92c11f8032e78f8d68f 100644 (file)
@@ -1,6 +1,12 @@
 # ChangeLog for x11-wm/ion3
 # Copyright 2000-2006 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/x11-wm/ion3/ChangeLog,v 1.33 2006/03/05 18:32:33 twp Exp $
+# $Header: /var/cvsroot/gentoo-x86/x11-wm/ion3/ChangeLog,v 1.34 2006/03/14 19:33:21 twp Exp $
+
+*ion3-20060305-r1 (14 Mar 2006)
+
+  14 Mar 2006; Tom Payne <twp@gentoo.org>
+  +files/ion3-20060305-truetype.patch, +ion3-20060305-r1.ebuild:
+  Added truetype support. Patch from Clemens Fruhwirth.
 
 *ion3-20060305 (05 Mar 2006)
 
index 193c12d0a6e670701aaf39548d33da53eb620486..187a008511600bde1949c623aa9b50476b11a663 100644 (file)
@@ -1,12 +1,18 @@
-MD5 09bffc71e42856517ffaf8d9c0554db5 ChangeLog 4811
-RMD160 a8cf5ff18a57b11b904c91c9e781de52ee338ecb ChangeLog 4811
-SHA256 6a9426f3e28398e45cff35f78172093e2c7e38034e723852c2907c588beb5660 ChangeLog 4811
+MD5 6c9dca5eb7f172342a1998bd3037b07e ChangeLog 5008
+RMD160 f4f269baef5af504f0eccdc48a894cc646e82cbc ChangeLog 5008
+SHA256 98e842e85bf3a01062cf6aa2746df467f8d7e013fbcd1ed8b36052a64cf1ea02 ChangeLog 5008
 MD5 5145eaa7f679d9475e8a54bb546ceaad files/digest-ion3-20060107 68
 RMD160 e44ca91ac009c39cbd0e925e64a0649777a9ce46 files/digest-ion3-20060107 68
 SHA256 5ad3ec799bb6983c4ee969db4d9bd74fe0a3a9775e07125b471272a0f405483a files/digest-ion3-20060107 68
 MD5 764299c135999d5a350831c69d4520d4 files/digest-ion3-20060305 250
 RMD160 3389ce92742818a91a3164fc2ee60fcf1fddd4b6 files/digest-ion3-20060305 250
 SHA256 8caabcf6d2560d47a391585597ef1ff7bf8518cdb458be2e88d4caf20d6d9021 files/digest-ion3-20060305 250
+MD5 764299c135999d5a350831c69d4520d4 files/digest-ion3-20060305-r1 250
+RMD160 3389ce92742818a91a3164fc2ee60fcf1fddd4b6 files/digest-ion3-20060305-r1 250
+SHA256 8caabcf6d2560d47a391585597ef1ff7bf8518cdb458be2e88d4caf20d6d9021 files/digest-ion3-20060305-r1 250
+MD5 3fc017993b48b77412323822dc684cf0 files/ion3-20060305-truetype.patch 20388
+RMD160 ad321417fa5c21ae8afd3687ef862759f52d75e9 files/ion3-20060305-truetype.patch 20388
+SHA256 f1b338f7e4522f534247adeac1215f368dd94d97bcec7d70a35bbcf3b66706bc files/ion3-20060305-truetype.patch 20388
 MD5 00450ed1292b72e2be71b9860c4db6ee files/ion3.desktop 217
 RMD160 438917d6c0370e7a368598ea611ec7658312627d files/ion3.desktop 217
 SHA256 4742797e200b956abf3d0b94d860aa7430c9f67a97f3640ef2c28168fa773bb9 files/ion3.desktop 217
@@ -16,6 +22,9 @@ SHA256 e068670634d31e58db4f54e703707f7908d30ced7f765e30ab590615b3d5dccd files/pw
 MD5 07338da2e4a5cfa405fde336fc19af4c ion3-20060107.ebuild 1701
 RMD160 0060a8b265a6d322613b477312816e143c809018 ion3-20060107.ebuild 1701
 SHA256 b2d19c67680d67e05547eb50b15543f8abb7914c2942b8e9557283e83cf072d6 ion3-20060107.ebuild 1701
+MD5 a019d9148ee9b9663c12078a458318bc ion3-20060305-r1.ebuild 1859
+RMD160 a7c7ba8e188d6c8eb4a33eb263a9a037382095b0 ion3-20060305-r1.ebuild 1859
+SHA256 bfc8c02195e02b4fcfb37a8b5cf9be0201d99074ee9f1839eff36f62c19892cd ion3-20060305-r1.ebuild 1859
 MD5 f1c24872e569d962f09eb1d704555e3a ion3-20060305.ebuild 1697
 RMD160 6a497732b75b5dee02e801816605cfecdf41645a ion3-20060305.ebuild 1697
 SHA256 a9d3c2f1ca87b782c61d140d418cc5163e6f493014e52002f1b63c5b83c9e8b0 ion3-20060305.ebuild 1697
diff --git a/x11-wm/ion3/files/digest-ion3-20060305-r1 b/x11-wm/ion3/files/digest-ion3-20060305-r1
new file mode 100644 (file)
index 0000000..a73e528
--- /dev/null
@@ -0,0 +1,3 @@
+MD5 b2ab5225460a106dbe17a170219e594c ion-3ds-20060305.tar.gz 612653
+RMD160 f88b6777b4432850c65540ba896d36ef44a186d2 ion-3ds-20060305.tar.gz 612653
+SHA256 c06fe30f268d3c22dc82c3b06c0512c87e8b93b2dd7332f4d8f2fcbdac4378d7 ion-3ds-20060305.tar.gz 612653
diff --git a/x11-wm/ion3/files/ion3-20060305-truetype.patch b/x11-wm/ion3/files/ion3-20060305-truetype.patch
new file mode 100644 (file)
index 0000000..55d30aa
--- /dev/null
@@ -0,0 +1,750 @@
+diff -Naur ion-3ds-20060305/configure.ac ion-3ds-therp-20060305/configure.ac
+--- ion-3ds-20060305/configure.ac      2006-03-05 14:45:45.000000000 +0100
++++ ion-3ds-therp-20060305/configure.ac        2006-03-12 10:45:51.000000000 +0100
+@@ -3,7 +3,7 @@
+ dnl $Header: /var/cvsroot/gentoo-x86/x11-wm/ion3/files/ion3-20060305-truetype.patch,v 1.1 2006/03/14 19:33:21 twp Exp $
+ AC_INIT([Ion Window Manager],
+-        [3ds-20060305],
++        [3ds-20060305-therp],
+         [tuomov@iki.fi],
+         [ion3])
+ AC_PREREQ([2.58])
+@@ -420,6 +420,18 @@
+ dnl }}}
++AC_ARG_ENABLE([xft],
++              [AS_HELP_STRING([--disable-xft],
++                              [Disable XFT Support])])
++
++if test "x$enable_xft" != xno; then
++      XFT_CFLAGS=`xft-config --cflags`
++        XFT_CFLAGS="${XFT_CFLAGS} -DXFT" 
++      XFT_LIBS=`xft-config --libs`
++fi
++
++AC_SUBST([XFT_CFLAGS])
++AC_SUBST([XFT_LIBS])
+ AC_OUTPUT([system-ac.mk])
+diff -Naur ion-3ds-20060305/de/brush.c ion-3ds-therp-20060305/de/brush.c
+--- ion-3ds-20060305/de/brush.c        2006-03-05 14:45:13.000000000 +0100
++++ ion-3ds-therp-20060305/de/brush.c  2006-03-11 18:47:19.000000000 +0100
+@@ -37,7 +37,9 @@
+     brush->indicator_w=0;
+     brush->win=win;
+     brush->clip_set=FALSE;
+-    
++#ifdef XFT
++    brush->draw=NULL;
++#endif /* XFT */
+     style->usecount++;
+     if(!grbrush_init(&(brush->grbrush))){
+@@ -65,7 +67,6 @@
+     CREATEOBJ_IMPL(DEBrush, debrush, (p, win, stylename, style));
+ }
+-
+ static DEBrush *do_get_brush(Window win, WRootWin *rootwin, 
+                              const char *stylename, bool slave)
+ {
+@@ -104,6 +105,10 @@
+ {
+     destyle_unref(brush->d);
+     brush->d=NULL;
++#ifdef XFT
++    if(brush->draw!=NULL)
++          XftDrawDestroy(brush->draw);
++#endif /* XFT */
+     grbrush_deinit(&(brush->grbrush));
+ }
+@@ -114,6 +119,21 @@
+ }
++#ifdef XFT
++XftDraw *debrush_get_draw(DEBrush *brush, Drawable d)
++{
++      if(brush->draw==NULL)
++              brush->draw=XftDrawCreate(ioncore_g.dpy, d,
++                                        XftDEDefaultVisual(),
++                                        DefaultColormap(ioncore_g.dpy,
++                                                        0));
++      else
++              XftDrawChange(brush->draw, d);
++
++      return brush->draw;
++}
++#endif
++
+ /*}}}*/
+diff -Naur ion-3ds-20060305/de/brush.h ion-3ds-therp-20060305/de/brush.h
+--- ion-3ds-20060305/de/brush.h        2006-03-05 14:45:13.000000000 +0100
++++ ion-3ds-therp-20060305/de/brush.h  2006-03-11 18:18:06.000000000 +0100
+@@ -17,6 +17,9 @@
+ #include <ioncore/common.h>
+ #include <ioncore/gr.h>
+ #include <ioncore/rectangle.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+ INTRCLASS(DEBrush);
+@@ -34,6 +37,9 @@
+ DECLCLASS(DEBrush){
+     GrBrush grbrush;
+     DEStyle *d;
++#ifdef XFT
++    XftDraw *draw;
++#endif
+     DEBrushExtrasFn *extras_fn;
+     int indicator_w;
+     Window win;
+@@ -104,5 +110,8 @@
+                               const char *attr);
+ extern void debrush_clear_area(DEBrush *brush, const WRectangle *geom);
++#ifdef XFT
++XftDraw *debrush_get_draw(DEBrush *brush, Drawable d);
++#endif
+ #endif /* ION_DE_BRUSH_H */
+diff -Naur ion-3ds-20060305/de/colour.c ion-3ds-therp-20060305/de/colour.c
+--- ion-3ds-20060305/de/colour.c       2006-03-05 14:45:13.000000000 +0100
++++ ion-3ds-therp-20060305/de/colour.c 2006-03-11 18:46:06.000000000 +0100
+@@ -12,12 +12,23 @@
+ #include <ioncore/common.h>
+ #include "colour.h"
+-
+ bool de_alloc_colour(WRootWin *rootwin, DEColour *ret, const char *name)
+ {
++#ifndef XFT
+     XColor c;
+     bool ok=FALSE;
++#else /* XFT */
++    if(name==NULL)
++          return FALSE;
++    return XftColorAllocName(
++          ioncore_g.dpy,
++          XftDEDefaultVisual(),
++          rootwin->default_cmap,
++          name,
++          ret);
++#endif /* XFT */
++#ifndef XFT
+     if(name==NULL)
+         return FALSE;
+@@ -28,11 +39,13 @@
+     }
+     
+     return ok;
++#endif /* ! XFT */
+ }
+ bool de_duplicate_colour(WRootWin *rootwin, DEColour in, DEColour *out)
+ {
++#ifndef XFT
+     XColor c;
+     c.pixel=in;
+     XQueryColor(ioncore_g.dpy, rootwin->default_cmap, &c);
+@@ -41,11 +54,20 @@
+         return TRUE;
+     }
+     return FALSE;
++#else /* XFT */
++    return XftColorAllocName(
++          ioncore_g.dpy,
++          XftDEDefaultVisual(),
++          rootwin->default_cmap,
++          &(in.color),
++          out);
++#endif /* XFT */
+ }
+ void de_free_colour_group(WRootWin *rootwin, DEColourGroup *cg)
+ {
++#ifndef XFT
+     DEColour pixels[5];
+     
+     pixels[0]=cg->bg;
+@@ -60,15 +82,26 @@
+         free(cg->spec);
+         cg->spec=NULL;
+     }
++#else /* XFT */
++    de_free_colour(rootwin, cg->bg);
++    de_free_colour(rootwin, cg->fg);
++    de_free_colour(rootwin, cg->hl);
++    de_free_colour(rootwin, cg->sh);
++    de_free_colour(rootwin, cg->pad);
++#endif /* XFT */
+ }
+ void de_free_colour(WRootWin *rootwin, DEColour col)
+ {
++#ifndef XFT
+     DEColour pixels[1];
+     
+     pixels[0]=col;
+     
+     XFreeColors(ioncore_g.dpy, rootwin->default_cmap, pixels, 1, 0);
++#else /* XFT */
++    XftColorFree(ioncore_g.dpy, XftDEDefaultVisual(), rootwin->default_cmap, &col);
++#endif /* XFT */
+ }
+diff -Naur ion-3ds-20060305/de/colour.h ion-3ds-therp-20060305/de/colour.h
+--- ion-3ds-20060305/de/colour.h       2006-03-05 14:45:13.000000000 +0100
++++ ion-3ds-therp-20060305/de/colour.h 2006-03-11 18:43:23.000000000 +0100
+@@ -15,12 +15,19 @@
+ #include <ioncore/common.h>
+ #include <ioncore/global.h>
+ #include <ioncore/rootwin.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+ INTRSTRUCT(DEColourGroup);
++#ifndef XFT
+ typedef unsigned long DEColour;
++#else /* XFT */
++typedef XftColor DEColour;
++#endif /* XFT */
+ DECLSTRUCT(DEColourGroup){
+@@ -37,5 +44,6 @@
+ bool de_duplicate_colour(WRootWin *rootwin, DEColour in, DEColour *out);
+ void de_free_colour_group(WRootWin *rootwin, DEColourGroup *cg);
+ void de_free_colour(WRootWin *rootwin, DEColour col);
++#define XftDEDefaultVisual()    DefaultVisual(ioncore_g.dpy, 0)
+ #endif /* ION_DE_COLOUR_H */
+diff -Naur ion-3ds-20060305/de/draw.c ion-3ds-therp-20060305/de/draw.c
+--- ion-3ds-20060305/de/draw.c 2006-03-05 14:45:13.000000000 +0100
++++ ion-3ds-therp-20060305/de/draw.c   2006-03-11 12:57:33.000000000 +0100
+@@ -79,7 +79,11 @@
+     w--;
+     h--;
++#ifndef XFT
+     XSetForeground(ioncore_g.dpy, gc, tlc);
++#else /* XFT */
++    XSetForeground(ioncore_g.dpy, gc, tlc.pixel);
++#endif /* XFT */
+     
+     a=(br!=0);
+@@ -99,7 +103,11 @@
+     }
+     
++#ifndef XFT
+     XSetForeground(ioncore_g.dpy, gc, brc);
++#else /* XFT */
++    XSetForeground(ioncore_g.dpy, gc, brc.pixel);
++#endif /* XFT */
+     a=(tl!=0);
+     b=0;
+@@ -174,19 +182,35 @@
+                             GrBorderLine line)
+ {
+     if(line==GR_BORDERLINE_LEFT && geom->h>0){
++#ifndef XFT
+         XSetForeground(ioncore_g.dpy, gc, tlc);
++#else /* XFT */
++        XSetForeground(ioncore_g.dpy, gc, tlc.pixel);
++#endif /* XFT */
+         XDrawRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y, tl, geom->h);
+         geom->x+=tl;
+     }else if(line==GR_BORDERLINE_TOP && geom->w>0){
++#ifndef XFT
+         XSetForeground(ioncore_g.dpy, gc, tlc);
++#else /* XFT */
++        XSetForeground(ioncore_g.dpy, gc, tlc.pixel);
++#endif /* XFT */
+         XDrawRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y, geom->w, tl);
+         geom->y+=tl;
+     }else if(line==GR_BORDERLINE_RIGHT && geom->h>0){
++#ifndef XFT
+         XSetForeground(ioncore_g.dpy, gc, brc);
++#else /* XFT */
++        XSetForeground(ioncore_g.dpy, gc, brc.pixel);
++#endif /* XFT */
+         XDrawRectangle(ioncore_g.dpy, win, gc, geom->x+geom->w-1-br, geom->y, br, geom->h);
+         geom->w-=br;
+     }else if(line==GR_BORDERLINE_BOTTOM && geom->w>0){
++#ifndef XFT
+         XSetForeground(ioncore_g.dpy, gc, brc);
++#else /* XFT */
++        XSetForeground(ioncore_g.dpy, gc, brc.pixel);
++#endif /* XFT */
+         XDrawRectangle(ioncore_g.dpy, win, gc, geom->x, geom->y+geom->h-1-br, geom->w, br);
+         geom->h-=br;
+     }
+@@ -276,7 +300,11 @@
+     }
+     
+     if(MATCHES2("*-*-tagged", a1, a2)){
++#ifndef XFT
+         XSetForeground(ioncore_g.dpy, d->copy_gc, cg->fg);
++#else /* XFT */
++        XSetForeground(ioncore_g.dpy, d->copy_gc, cg->fg.pixel);
++#endif /* XFT */
+             
+         copy_masked(brush, d->tag_pixmap, brush->win, 0, 0,
+                     d->tag_pixmap_w, d->tag_pixmap_h,
+@@ -326,7 +354,11 @@
+     GC gc=brush->d->normal_gc;
+     
+     if(TRUE/*needfill*/){
++#ifndef XFT
+         XSetForeground(ioncore_g.dpy, gc, cg->bg);
++#else /* XFT */
++        XSetForeground(ioncore_g.dpy, gc, cg->bg.pixel);
++#endif /* XFT */
+         XFillRectangle(ioncore_g.dpy, brush->win, gc, geom->x, geom->y, 
+                        geom->w, geom->h);
+     }
+@@ -468,7 +500,11 @@
+         attr.background_pixmap=ParentRelative;
+     }else{
+         attrflags=CWBackPixel;
++#ifndef XFT
+         attr.background_pixel=brush->d->cgrp.bg;
++#else /* XFT */
++        attr.background_pixel=brush->d->cgrp.bg.pixel;
++#endif /* XFT */
+     }
+     
+     XChangeWindowAttributes(ioncore_g.dpy, brush->win, attrflags, &attr);
+@@ -484,7 +520,11 @@
+     if(cg==NULL)
+         return;
+     
++#ifndef XFT
+     XSetForeground(ioncore_g.dpy, gc, cg->bg);
++#else /* XFT */
++    XSetForeground(ioncore_g.dpy, gc, cg->bg.pixel);
++#endif /* XFT */
+     XFillRectangle(ioncore_g.dpy, brush->win, gc, 
+                    geom->x, geom->y, geom->w, geom->h);
+ }
+diff -Naur ion-3ds-20060305/de/font.c ion-3ds-therp-20060305/de/font.c
+--- ion-3ds-20060305/de/font.c 2006-03-05 14:45:13.000000000 +0100
++++ ion-3ds-therp-20060305/de/font.c   2006-03-12 09:33:01.000000000 +0100
+@@ -14,7 +14,9 @@
+ #include <libtu/objp.h>
+ #include <ioncore/common.h>
+ #include "font.h"
++#ifndef XFT
+ #include "fontset.h"
++#endif /* ! XFT */
+ #include "brush.h"
+@@ -26,10 +28,13 @@
+ DEFont *de_load_font(const char *fontname)
+ {
++#ifdef XFT
++    XftFont *font;
++#endif
+     DEFont *fnt;
+     XFontSet fontset=NULL;
+     XFontStruct *fontstruct=NULL;
+-    
++
+     assert(fontname!=NULL);
+     
+     /* There shouldn't be that many fonts... */
+@@ -40,6 +45,7 @@
+         }
+     }
+     
++#ifndef XFT
+     if(ioncore_g.use_mb){
+         fontset=de_create_font_set(fontname);
+         if(fontset!=NULL){
+@@ -66,13 +72,34 @@
+         return NULL;
+     }
+     
++#else /* XFT */
++    if(strncmp(fontname, "xft:", 4)==0){
++          font=XftFontOpenName(ioncore_g.dpy, DefaultScreen(ioncore_g.dpy),
++                               fontname+4);
++    }else{
++          font=XftFontOpenXlfd(ioncore_g.dpy, DefaultScreen(ioncore_g.dpy), fontname);
++    }
++    
++    if(font==NULL){
++          if(strcmp(fontname, CF_FALLBACK_FONT_NAME)!=0){
++                  warn(TR("Could not load font \"%s\", trying \"%s\""),
++                       fontname, CF_FALLBACK_FONT_NAME);
++                  return de_load_font(CF_FALLBACK_FONT_NAME);
++          }
++          return NULL;
++    }
++#endif /* XFT */
+     fnt=ALLOC(DEFont);
+     
+     if(fnt==NULL)
+-        return NULL;
++          return NULL;
+     
++#ifndef XFT
+     fnt->fontset=fontset;
+     fnt->fontstruct=fontstruct;
++#else
++    fnt->font=font;
++#endif
+     fnt->pattern=scopy(fontname);
+     fnt->next=NULL;
+     fnt->prev=NULL;
+@@ -92,11 +119,13 @@
+     style->font=font;
+     font->refcount++;
+     
++#ifndef XFT
+     if(style->font->fontstruct!=NULL){
+         XSetFont(ioncore_g.dpy, style->normal_gc, 
+                  style->font->fontstruct->fid);
+     }
++#endif /* ! XFT */
+     return TRUE;
+ }
+@@ -111,11 +140,13 @@
+     if(style->font==NULL)
+         return FALSE;
+     
++#ifndef XFT
+     if(style->font->fontstruct!=NULL){
+         XSetFont(ioncore_g.dpy, style->normal_gc, 
+                  style->font->fontstruct->fid);
+     }
+     
++#endif /* ! XFT */
+     return TRUE;
+ }
+@@ -125,13 +156,17 @@
+     if(--font->refcount!=0)
+         return;
+     
++#ifndef XFT
+     if(font->fontset!=NULL)
+         XFreeFontSet(ioncore_g.dpy, font->fontset);
+     if(font->fontstruct!=NULL)
+         XFreeFont(ioncore_g.dpy, font->fontstruct);
++#else /* XFT */
++    if(font->font!=NULL)
++          XftFontClose(ioncore_g.dpy, font->font);
++#endif /* XFT */
+     if(font->pattern!=NULL)
+-        free(font->pattern);
+-    
++          free(font->pattern);
+     UNLINK_ITEM(fonts, font, next, prev);
+     free(font);
+ }
+@@ -156,6 +191,7 @@
+ void defont_get_font_extents(DEFont *font, GrFontExtents *fnte)
+ {
++#ifndef XFT
+     if(font->fontset!=NULL){
+         XFontSetExtents *ext=XExtentsOfFontSet(font->fontset);
+         if(ext==NULL)
+@@ -171,7 +207,14 @@
+         fnte->baseline=fnt->ascent;
+         return;
+     }
+-    
++#else /* XFT */
++    if(font->font!=NULL){
++          fnte->max_height=font->font->ascent+font->font->descent;
++          fnte->max_width=font->font->max_advance_width;
++          fnte->baseline=font->font->ascent;
++          return;
++    }
++#endif /* XFT */
+ fail:
+     DE_RESET_FONT_EXTENTS(fnte);
+ }
+@@ -188,20 +231,35 @@
+ uint defont_get_text_width(DEFont *font, const char *text, uint len)
+ {
++#ifndef XFT
+     if(font->fontset!=NULL){
+         XRectangle lext;
+ #ifdef CF_DE_USE_XUTF8
+-        if(ioncore_g.enc_utf8)
+-            Xutf8TextExtents(font->fontset, text, len, NULL, &lext);
+-        else
++      if(ioncore_g.enc_utf8)
++              Xutf8TextExtents(font->fontset, text, len, NULL, &lext);
++      else
+ #endif
+-            XmbTextExtents(font->fontset, text, len, NULL, &lext);
+-        return lext.width;
++              XmbTextExtents(font->fontset, text, len, NULL, &lext);
++      return lext.width;
+     }else if(font->fontstruct!=NULL){
+         return XTextWidth(font->fontstruct, text, len);
+     }else{
+         return 0;
+     }
++#else /* XFT */
++    if(font->font!=NULL){
++          XGlyphInfo extents;
++          if(ioncore_g.enc_utf8)
++                  XftTextExtentsUtf8(ioncore_g.dpy, font->font, (XftChar8 *)text, len,
++                                     &extents);
++          else
++                  XftTextExtents8(ioncore_g.dpy, font->font, (XftChar8 *)text, len,
++                                  &extents);
++          return extents.xOff;
++    }else{
++          return 0;
++    }
++#endif /* XFT */
+ }
+@@ -211,6 +269,7 @@
+ /*{{{ String drawing */
++#ifndef XFT
+ void debrush_do_draw_string_default(DEBrush *brush, int x, int y,
+                                     const char *str, int len, bool needfill, 
+                                     DEColourGroup *colours)
+@@ -256,6 +315,41 @@
+     }
+ }
++#else /* XFT */
++void debrush_do_draw_string_default(DEBrush *brush, 
++                                  int x, int y, const char *str,
++                                  int len, bool needfill, 
++                                  DEColourGroup *colours)
++{
++   Window win = brush->win;
++   GC gc=brush->d->normal_gc;
++   XftDraw *draw;
++   XftFont *font;
++
++   if(brush->d->font==NULL)
++         return;
++   
++   font=brush->d->font->font;
++   draw=debrush_get_draw(brush, win);
++   
++   if(TRUE/*needfill*/){
++         XGlyphInfo extents;
++         if(ioncore_g.enc_utf8)
++                 XftTextExtentsUtf8(ioncore_g.dpy, font, (XftChar8 *)str, len,
++                                    &extents);
++         else
++                 XftTextExtents8(ioncore_g.dpy, font, (XftChar8 *)str, len, &extents);
++         XftDrawRect(draw, &(colours->bg), x-extents.x, y-extents.y,
++                     extents.width, extents.height);
++   }
++   
++   if(ioncore_g.enc_utf8)
++         XftDrawStringUtf8(draw, &(colours->fg), font, x, y, (XftChar8 *)str,
++                           len);
++   else
++         XftDrawString8(draw, &(colours->fg), font, x, y, (XftChar8 *)str, len);
++}
++#endif /* XFT */
+ void debrush_do_draw_string(DEBrush *brush, int x, int y,
+                             const char *str, int len, bool needfill, 
+diff -Naur ion-3ds-20060305/de/font.h ion-3ds-therp-20060305/de/font.h
+--- ion-3ds-20060305/de/font.h 2006-03-05 14:45:13.000000000 +0100
++++ ion-3ds-therp-20060305/de/font.h   2006-03-11 18:30:32.000000000 +0100
+@@ -14,6 +14,9 @@
+ #include <ioncore/common.h>
+ #include <ioncore/gr.h>
++#ifdef XFT
++#include <X11/Xft/Xft.h>
++#endif /* XFT */
+ INTRSTRUCT(DEFont);
+@@ -29,6 +32,9 @@
+     int refcount;
+     XFontSet fontset;
+     XFontStruct *fontstruct;
++#ifdef XFT /* XFT */
++    XftFont *font;
++#endif /* XFT */
+     DEFont *next, *prev;
+ };
+diff -Naur ion-3ds-20060305/de/fontset.h ion-3ds-therp-20060305/de/fontset.h
+--- ion-3ds-20060305/de/init.c 2006-03-05 14:45:13.000000000 +0100
++++ ion-3ds-therp-20060305/de/init.c   2006-03-11 18:31:13.000000000 +0100
+@@ -113,16 +113,19 @@
+ void de_get_colour_group(WRootWin *rootwin, DEColourGroup *cg, 
+                          ExtlTab tab, DEStyle *based_on)
+ {
+-    de_get_colour(rootwin, &(cg->hl), tab, based_on, "highlight_colour",
+-                  DE_WHITE(rootwin));
+-    de_get_colour(rootwin, &(cg->sh), tab, based_on, "shadow_colour",
+-                  DE_WHITE(rootwin));
+-    de_get_colour(rootwin, &(cg->bg), tab, based_on, "background_colour",
+-                  DE_BLACK(rootwin));
+-    de_get_colour(rootwin, &(cg->fg), tab, based_on, "foreground_colour",
+-                  DE_WHITE(rootwin));
+-    de_get_colour(rootwin, &(cg->pad), tab, based_on, "padding_colour", 
+-                  cg->bg);
++    DEColour black, white;
++#ifdef XFT
++    de_alloc_colour(rootwin, &black, "black");
++    de_alloc_colour(rootwin, &white, "white");
++#else
++    black=DE_BLACK(rootwin);
++    white=DE_WHITE(rootwin);
++#endif
++    de_get_colour(rootwin, &(cg->hl), tab, based_on, "highlight_colour", white);
++    de_get_colour(rootwin, &(cg->sh), tab, based_on, "shadow_colour", white);
++    de_get_colour(rootwin, &(cg->bg), tab, based_on, "background_colour", black);
++    de_get_colour(rootwin, &(cg->fg), tab, based_on, "foreground_colour", white);
++    de_get_colour(rootwin, &(cg->pad), tab, based_on, "padding_colour", cg->bg);
+ }
+@@ -329,7 +332,6 @@
+ char de_ion_api_version[]=ION_API_VERSION;
+-
+ bool de_init()
+ {
+     WRootWin *rootwin;
+diff -Naur ion-3ds-20060305/de/Makefile ion-3ds-therp-20060305/de/Makefile
+--- ion-3ds-20060305/de/Makefile       2006-03-05 14:45:11.000000000 +0100
++++ ion-3ds-therp-20060305/de/Makefile 2006-03-12 10:13:14.000000000 +0100
+@@ -8,13 +8,12 @@
+ ######################################
++
+ INCLUDES += $(X11_INCLUDES) $(LIBTU_INCLUDES) $(LIBEXTL_INCLUDES) -I..
+ CFLAGS += $(XOPEN_SOURCE) $(C99_SOURCE)
+ SOURCES=init.c draw.c font.c colour.c brush.c fontset.c style.c
+-
+ MODULE=de
+-
+ MAKE_EXPORTS=de
+ ######################################
+diff -Naur ion-3ds-20060305/de/style.c ion-3ds-therp-20060305/de/style.c
+--- ion-3ds-20060305/de/style.c        2006-03-05 14:45:13.000000000 +0100
++++ ion-3ds-therp-20060305/de/style.c  2006-03-11 18:34:35.000000000 +0100
+@@ -74,10 +74,17 @@
+     /*gcv.function=GXclear;*/
+     gcv.stipple=stipple_pixmap;
+     gcvmask=GCFillStyle|GCStipple/*|GCFunction*/;
++#ifndef XFT
+     if(style->font!=NULL && style->font->fontstruct!=NULL){
+         gcv.font=style->font->fontstruct->fid;
+         gcvmask|=GCFont;
+     }
++#else /* XFT */
++//    if(style->font!=NULL){
++//        gcv.font=style->font;
++//        gcvmask|=GCFont;
++//    }
++#endif /* XFT */
+     style->stipple_gc=XCreateGC(dpy, root, gcvmask, &gcv);
+     XCopyGC(dpy, style->normal_gc, 
+@@ -206,6 +213,14 @@
+ bool destyle_init(DEStyle *style, WRootWin *rootwin, const char *name)
+ {
++    DEColour black, white;
++#ifdef XFT
++    de_alloc_colour(rootwin, &black, "black");
++    de_alloc_colour(rootwin, &white, "white");
++#else
++    black=DE_BLACK(rootwin);
++    white=DE_WHITE(rootwin);
++#endif /* XFT */
+     style->style=scopy(name);
+     if(style->style==NULL)
+         return FALSE;
+@@ -229,11 +244,11 @@
+     style->cgrp_alloced=FALSE;
+     style->cgrp.spec=NULL;
+-    style->cgrp.bg=DE_BLACK(rootwin);
+-    style->cgrp.pad=DE_BLACK(rootwin);
+-    style->cgrp.fg=DE_WHITE(rootwin);
+-    style->cgrp.hl=DE_WHITE(rootwin);
+-    style->cgrp.sh=DE_WHITE(rootwin);
++    style->cgrp.bg=black;
++    style->cgrp.pad=black;
++    style->cgrp.fg=white;
++    style->cgrp.hl=white;
++    style->cgrp.sh=white;
+     
+     style->font=NULL;
+     
+@@ -255,7 +270,7 @@
+ static DEStyle *do_create_style(WRootWin *rootwin, const char *name)
+ {
+     DEStyle *style=ALLOC(DEStyle);
+-    if(style!=NULL){
++    if(style!=NULL) {
+         if(!destyle_init(style, rootwin, name)){
+             free(style);
+             return NULL;
+diff -Naur ion-3ds-20060305/de/style.h ion-3ds-therp-20060305/de/style.h
+--- ion-3ds-20060305/de/style.h        2006-03-05 14:45:13.000000000 +0100
++++ ion-3ds-therp-20060305/de/style.h  2006-03-11 17:15:01.000000000 +0100
+@@ -76,6 +76,7 @@
+     Pixmap tag_pixmap;
+     int tag_pixmap_w;
+     int tag_pixmap_h;
++    int xft_style;
+     
+     DEStyle *next, *prev;
+ };
+diff -Naur ion-3ds-20060305/system-ac.mk.in ion-3ds-therp-20060305/system-ac.mk.in
+--- ion-3ds-20060305/system-ac.mk.in   2006-03-05 14:45:12.000000000 +0100
++++ ion-3ds-therp-20060305/system-ac.mk.in     2006-03-12 10:10:50.000000000 +0100
+@@ -188,3 +188,7 @@
+ STRIP=@STRIP@
+ RM=rm
++
++### XFT Support
++CFLAGS+=@XFT_CFLAGS@
++LIBS+=@XFT_LIBS@
diff --git a/x11-wm/ion3/ion3-20060305-r1.ebuild b/x11-wm/ion3/ion3-20060305-r1.ebuild
new file mode 100644 (file)
index 0000000..b9962b0
--- /dev/null
@@ -0,0 +1,83 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/x11-wm/ion3/ion3-20060305-r1.ebuild,v 1.1 2006/03/14 19:33:21 twp Exp $
+
+inherit eutils
+
+MY_PV=${PV/_p/-}
+MY_PN=ion-3ds-${MY_PV}
+DESCRIPTION="A tiling tabbed window manager designed with keyboard users in mind"
+HOMEPAGE="http://www.iki.fi/tuomov/ion/"
+SRC_URI="http://modeemi.cs.tut.fi/~tuomov/ion/dl/${MY_PN}.tar.gz"
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+IUSE="truetype xinerama"
+DEPEND="
+       || (
+               (
+                       x11-libs/libICE
+                       x11-libs/libXext
+                       truetype? ( x11-libs/libXft )
+                       xinerama? ( x11-libs/libXinerama )
+               )
+               virtual/x11
+       )
+       app-misc/run-mailcap
+       >=dev-lang/lua-5.0.2"
+S=${WORKDIR}/${MY_PN}
+
+src_unpack() {
+       unpack ${A}
+       use truetype && epatch ${FILESDIR}/${P}-truetype.patch
+}
+
+src_compile() {
+
+       autoreconf -i
+
+       local myconf=""
+
+       if has_version '>=x11-base/xfree-4.3.0'; then
+               myconf="${myconf} --disable-xfree86-textprop-bug-workaround"
+       fi
+
+       use hppa && myconf="${myconf} --disable-shared"
+
+       econf \
+               --sysconfdir=/etc/X11 \
+               `use_enable truetype xft` \
+               `use_enable xinerama` \
+               ${myconf} || die
+
+       make \
+               DOCDIR=/usr/share/doc/${PF} || die
+
+}
+
+src_install() {
+
+       make \
+               prefix=${D}/usr \
+               ETCDIR=${D}/etc/X11/ion3 \
+               SHAREDIR=${D}/usr/share/ion3 \
+               MANDIR=${D}/usr/share/man \
+               DOCDIR=${D}/usr/share/doc/${PF} \
+               LOCALEDIR=${D}/usr/share/locale \
+               LIBDIR=${D}/usr/lib \
+               MODULEDIR=${D}/usr/lib/ion3/mod \
+               LCDIR=${D}/usr/lib/ion3/lc \
+               VARDIR=${D}/var/cache/ion3 \
+               install || die
+
+       prepalldocs
+
+       echo -e "#!/bin/sh\n/usr/bin/ion3" > ${T}/ion3
+       echo -e "#!/bin/sh\n/usr/bin/pwm3" > ${T}/pwm3
+       exeinto /etc/X11/Sessions
+       doexe ${T}/ion3 ${T}/pwm3
+
+       insinto /usr/share/xsessions
+       doins ${FILESDIR}/ion3.desktop ${FILESDIR}/pwm3.desktop
+
+}