I am proud of you and thankful for your work. :)
Keep it up when you can. :D
Best Regard,
Jason

On Thu, 2010-04-15 at 00:13 +0200, Johann Haarhoff wrote: 
> The theme selection method is very primitive:
> 
> #ifdef NEW_LOOK
> #include <newtheme.c>
> #else
> #include <oldlook.c>
> #endif
> 
> but it should be easy to select at compile time, and at the moment I don't 
> feel like doing anything more elaborate.
> 
> Sorry for the slow progress guys, I am working on this, life just happens to 
> get in the way every now and then.
> 
> Regards,
> 
> Johann
> plain text document attachment
> (0001-Cairo-buttons-can-now-be-themed.patch)
> >From fef81a6929142e7d53a3fae7eb82c0141d8bc410 Mon Sep 17 00:00:00 2001
> From: Johann Haarhoff <joh...@haarhoff.org.za>
> Date: Thu, 15 Apr 2010 00:10:12 +0200
> Subject: [PATCH] Cairo buttons can now be themed
> 
> paintButton now stamps the surface created in wtheme.c onto buttons.
> Themes are selectable by #defining NEW_LOOK, or OLD_LOOK, but this
> has to be built into configure somehow.
> ---
>  WINGs/Makefile.am    |    3 +-
>  WINGs/TODO           |    6 +
>  WINGs/WINGs/WINGs.h  |    3 +
>  WINGs/WINGs/WINGsP.h |    6 +-
>  WINGs/WINGs/wtheme.h |    5 +
>  WINGs/newtheme.c     |  129 +++++++++++++
>  WINGs/oldtheme.c     |  114 +++++++++++
>  WINGs/wbutton.c      |   25 ++-
>  WINGs/wcolor.c       |   11 +
>  WINGs/wfont.c        |    2 +-
>  WINGs/wmisc.c        |  517 +++++++++++++++++++++++++++----------------------
>  WINGs/wtheme.c       |    8 +
>  WINGs/wview.c        |    6 +-
>  test/cairo/draw.c    |  111 ++---------
>  14 files changed, 607 insertions(+), 339 deletions(-)
>  create mode 100644 WINGs/WINGs/wtheme.h
>  create mode 100644 WINGs/newtheme.c
>  create mode 100644 WINGs/oldtheme.c
>  create mode 100644 WINGs/wtheme.c
> 
> diff --git a/WINGs/Makefile.am b/WINGs/Makefile.am
> index b055717..b0ab92d 100644
> --- a/WINGs/Makefile.am
> +++ b/WINGs/Makefile.am
> @@ -52,7 +52,8 @@ libWINGs_la_SOURCES =       \
>       wpixmap.c \
>       wprogressindicator.c \
>       wview.c \
> -     wwindow.c
> +     wwindow.c \
> +     wtheme.c
>  
>  libWUtil_la_SOURCES =        \
>       array.c \
> diff --git a/WINGs/TODO b/WINGs/TODO
> index 7132ef9..fc6a12b 100644
> --- a/WINGs/TODO
> +++ b/WINGs/TODO
> @@ -1,3 +1,9 @@
> +JH
> +
> +- change WM*ColorSpec to return a cairo_pattern if appropriate
> +- make the PaintText* methods paint the bg using the cairo_pattern
> +  this should make theming easy
> +
>  - move paint to idle handlers
>  - check if its useful to add some WMBrowserSelectionDidChangeNotification
>    (actually a pass-through for WMListSelectionDidChangeNotification).
> diff --git a/WINGs/WINGs/WINGs.h b/WINGs/WINGs/WINGs.h
> index 43e4b7a..abff8f9 100644
> --- a/WINGs/WINGs/WINGs.h
> +++ b/WINGs/WINGs/WINGs.h
> @@ -8,6 +8,7 @@
>  #include <cairo.h>
>  
>  #define WINGS_H_VERSION  20041030
> +#define NEW_LOOK 1
>  
> 
>  #ifdef __cplusplus
> @@ -856,6 +857,8 @@ void WMColorSpecSet(cairo_t *cairo, WMColorSpec *color);
>  
>  WMColorSpec WMBlackColorSpec();
>  WMColorSpec WMGrayColorSpec();
> +WMColorSpec WMLightGrayColorSpec();
> +WMColorSpec WMTransparentColorSpec();
>  WMColorSpec WMWhiteColorSpec();
>  WMColorSpec WMDarkGrayColorSpec();
>  
> diff --git a/WINGs/WINGs/WINGsP.h b/WINGs/WINGs/WINGsP.h
> index 403d455..ee4789f 100644
> --- a/WINGs/WINGs/WINGsP.h
> +++ b/WINGs/WINGs/WINGsP.h
> @@ -33,6 +33,8 @@ extern "C" {
>  
>  #define XDND_VERSION    3
>  
> +#define NEW_LOOK 1
> +
>  
>  typedef struct W_Application {
>      char *applicationName;
> @@ -503,8 +505,8 @@ void W_SetViewCursor(W_View *view, Cursor cursor);
>  
>  void W_DrawRelief(W_Screen *scr, cairo_t *cairo, int x, int y, unsigned int 
> width,
>                    unsigned int height, WMReliefType relief);
> -void W_DrawButtonRelief(W_Screen *scr, cairo_t *cairo, int x, int y, 
> unsigned int width, unsigned int height,
> -                        WMReliefType relief);
> +//void W_DrawButtonRelief(W_Screen *scr, cairo_t *cairo, int x, int y, 
> unsigned int width, unsigned int height,
> +//                        WMReliefType relief, unsigned int pushLight);
>  
>  void W_CallDestroyHandlers(W_View *view);
>  
> diff --git a/WINGs/WINGs/wtheme.h b/WINGs/WINGs/wtheme.h
> new file mode 100644
> index 0000000..d5848a2
> --- /dev/null
> +++ b/WINGs/WINGs/wtheme.h
> @@ -0,0 +1,5 @@
> +#include "WINGsP.h"
> +
> +void W_DrawButtonDarkBack(cairo_t *cairo, WMButton *bPtr, unsigned int 
> width, unsigned int height, WMReliefType relief);
> +void W_DrawButtonLightBack(cairo_t *cairo, WMButton *bPtr, unsigned int 
> width, unsigned int height, WMReliefType relief);
> +void W_DrawButtonRelief(cairo_t *cairo, unsigned int width, unsigned int 
> height, WMReliefType relief);
> diff --git a/WINGs/newtheme.c b/WINGs/newtheme.c
> new file mode 100644
> index 0000000..b32590c
> --- /dev/null
> +++ b/WINGs/newtheme.c
> @@ -0,0 +1,129 @@
> +#include <wtheme.h>
> +
> +void W_DrawButtonDarkBack(cairo_t *cairo, WMButton *bPtr, unsigned int 
> width, unsigned int height, WMReliefType relief)
> +{
> +     cairo_save(cairo);
> +
> +     WMColorSpec topfill = WMLightGrayColorSpec();
> +     WMColorSpec bottomfill = WMGrayColorSpec();
> +
> +     //draw main gradient
> +     cairo_pattern_t *linpat;
> +     linpat = cairo_pattern_create_linear(0, 0, 0, height);
> +     cairo_pattern_add_color_stop_rgba(linpat, 0, topfill.red/255.0, 
> topfill.green/255.0, topfill.blue/255.0, topfill.alpha/255.0);
> +     cairo_pattern_add_color_stop_rgba(linpat, 1, bottomfill.red/255.0, 
> bottomfill.green/255.0, bottomfill.blue/255.0, bottomfill.alpha/255.0);
> +     cairo_set_source(cairo, linpat);
> +     cairo_rectangle(cairo, 0, 0, width, height);
> +     cairo_fill(cairo);
> +     cairo_stroke(cairo);
> +
> +     cairo_restore(cairo);
> +     cairo_pattern_destroy(linpat);
> +}
> +
> +void W_DrawButtonLightBack(cairo_t *cairo, WMButton *bPtr, unsigned int 
> width, unsigned int height, WMReliefType relief)
> +{
> +     cairo_save(cairo);
> +
> +     WMColorSpec topfill = WMWhiteColorSpec();
> +     WMColorSpec bottomfill = WMLightGrayColorSpec();
> +
> +     //draw main gradient
> +     cairo_pattern_t *linpat;
> +     linpat = cairo_pattern_create_linear(0, 0, 0, height);
> +     cairo_pattern_add_color_stop_rgba(linpat, 0, topfill.red/255.0, 
> topfill.green/255.0, topfill.blue/255.0, topfill.alpha/255.0);
> +     cairo_pattern_add_color_stop_rgba(linpat, 1, bottomfill.red/255.0, 
> bottomfill.green/255.0, bottomfill.blue/255.0, bottomfill.alpha/255.0);
> +     cairo_set_source(cairo, linpat);
> +//   cairo_set_source_rgb(cairo, 1,1,1);
> +     cairo_rectangle(cairo, 0, 0, width, height);
> +     cairo_fill(cairo);
> +     cairo_stroke(cairo);
> +
> +     cairo_restore(cairo);
> +     cairo_pattern_destroy(linpat);
> +}
> +
> +void W_DrawButtonRelief(cairo_t *cairo, unsigned int width, unsigned int 
> height, WMReliefType relief)
> +{
> +     cairo_save(cairo);
> +
> +     WMColorSpec outerlefttop;
> +     WMColorSpec innerlefttop;
> +     WMColorSpec outerbottomright;
> +     WMColorSpec innerbottomright;
> +
> +     switch (relief) {
> +             case WRSimple:
> +             {
> +                     outerlefttop = WMBlackColorSpec();
> +                     outerbottomright = WMBlackColorSpec();
> +                     innerlefttop = WMTransparentColorSpec();
> +                     innerbottomright = WMTransparentColorSpec();
> +                     break;
> +             }
> +             case WRRaised:
> +             {
> +                     outerlefttop = WMWhiteColorSpec();
> +                     outerbottomright = WMBlackColorSpec();
> +                     innerlefttop = WMTransparentColorSpec();
> +                     innerbottomright = WMDarkGrayColorSpec();
> +                     break;
> +             }
> +             case WRSunken:
> +             {
> +                     outerlefttop = WMDarkGrayColorSpec();
> +                     outerbottomright = WMWhiteColorSpec();
> +                     innerlefttop = WMBlackColorSpec();
> +                     innerbottomright = WMTransparentColorSpec();
> +                     break;
> +             }
> +             case WRPushed:
> +             {
> +                     outerlefttop = WMBlackColorSpec();
> +                     outerbottomright = WMWhiteColorSpec();
> +                     innerlefttop = WMTransparentColorSpec();
> +                     innerbottomright = WMTransparentColorSpec();
> +                     break;
> +             }
> +             case WRRidge:
> +             {
> +                     outerlefttop = WMWhiteColorSpec();
> +                     outerbottomright = WMDarkGrayColorSpec();
> +                     innerlefttop = WMTransparentColorSpec();
> +                     innerbottomright = WMTransparentColorSpec();
> +                     break;
> +             }
> +             case WRGroove:
> +             {
> +                     outerlefttop = WMDarkGrayColorSpec();
> +                     outerbottomright = WMDarkGrayColorSpec();
> +                     innerlefttop = WMTransparentColorSpec();
> +                     innerbottomright = WMTransparentColorSpec();
> +                     break;
> +             }
> +     }
> +
> +     cairo_set_line_width(cairo,1);
> +
> +     WMColorSpecSet(cairo,&outerlefttop);
> +     cairo_rectangle(cairo,0,0,width-1,0);
> +     cairo_rectangle(cairo,0,0,0,height-1);
> +     cairo_stroke(cairo);
> +
> +     WMColorSpecSet(cairo,&innerlefttop);
> +     cairo_rectangle(cairo,1,1,width-2,0);
> +     cairo_rectangle(cairo,1,1,0,height-2);
> +     cairo_stroke(cairo);
> +
> +     WMColorSpecSet(cairo,&innerbottomright);
> +     cairo_rectangle(cairo,1,height-2,width-1,1);
> +     cairo_rectangle(cairo,width-2,1,1,height-2);
> +     cairo_stroke(cairo);
> +
> +     WMColorSpecSet(cairo,&outerbottomright);
> +     cairo_rectangle(cairo,0,height-1,width,1);
> +     cairo_rectangle(cairo,width-1,0,1,height);
> +     cairo_stroke(cairo);
> +
> +     cairo_restore(cairo);
> +}
> diff --git a/WINGs/oldtheme.c b/WINGs/oldtheme.c
> new file mode 100644
> index 0000000..c5b77d5
> --- /dev/null
> +++ b/WINGs/oldtheme.c
> @@ -0,0 +1,114 @@
> +#include <wtheme.h>
> +
> +void W_DrawButtonDarkBack(cairo_t *cairo, WMButton *bPtr, unsigned int 
> width, unsigned int height, WMReliefType relief)
> +{
> +     cairo_save(cairo);
> +
> +     WMColorSpec fill = WMGrayColorSpec();
> +
> +     cairo_set_source_rgba(cairo, fill.red/255.0, fill.green/255.0, 
> fill.blue/255.0, fill.alpha/255.0);
> +     cairo_rectangle(cairo, 0, 0, width, height);
> +     cairo_fill(cairo);
> +     cairo_stroke(cairo);
> +
> +     cairo_restore(cairo);
> +}
> +
> +void W_DrawButtonLightBack(cairo_t *cairo, WMButton *bPtr, unsigned int 
> width, unsigned int height, WMReliefType relief)
> +{
> +     cairo_save(cairo);
> +
> +     WMColorSpec fill = WMWhiteColorSpec();
> +
> +     cairo_set_source_rgba(cairo, fill.red/255.0, fill.green/255.0, 
> fill.blue/255.0, fill.alpha/255.0);
> +     cairo_rectangle(cairo, 0, 0, width, height);
> +     cairo_fill(cairo);
> +     cairo_stroke(cairo);
> +
> +     cairo_restore(cairo);
> +}
> +
> +void W_DrawButtonRelief(cairo_t *cairo, unsigned int width, unsigned int 
> height, WMReliefType relief)
> +{
> +     cairo_save(cairo);
> +
> +     WMColorSpec outerlefttop;
> +     WMColorSpec innerlefttop;
> +     WMColorSpec outerbottomright;
> +     WMColorSpec innerbottomright;
> +
> +     switch (relief) {
> +             case WRSimple:
> +             {
> +                     outerlefttop = WMBlackColorSpec();
> +                     outerbottomright = WMBlackColorSpec();
> +                     innerlefttop = WMTransparentColorSpec();
> +                     innerbottomright = WMTransparentColorSpec();
> +                     break;
> +             }
> +             case WRRaised:
> +             {
> +                     outerlefttop = WMWhiteColorSpec();
> +                     outerbottomright = WMBlackColorSpec();
> +                     innerlefttop = WMTransparentColorSpec();
> +                     innerbottomright = WMDarkGrayColorSpec();
> +                     break;
> +             }
> +             case WRSunken:
> +             {
> +                     outerlefttop = WMDarkGrayColorSpec();
> +                     outerbottomright = WMWhiteColorSpec();
> +                     innerlefttop = WMBlackColorSpec();
> +                     innerbottomright = WMTransparentColorSpec();
> +                     break;
> +             }
> +             case WRPushed:
> +             {
> +                     outerlefttop = WMBlackColorSpec();
> +                     outerbottomright = WMWhiteColorSpec();
> +                     innerlefttop = WMTransparentColorSpec();
> +                     innerbottomright = WMTransparentColorSpec();
> +                     break;
> +             }
> +             case WRRidge:
> +             {
> +                     outerlefttop = WMWhiteColorSpec();
> +                     outerbottomright = WMDarkGrayColorSpec();
> +                     innerlefttop = WMTransparentColorSpec();
> +                     innerbottomright = WMTransparentColorSpec();
> +                     break;
> +             }
> +             case WRGroove:
> +             {
> +                     outerlefttop = WMDarkGrayColorSpec();
> +                     outerbottomright = WMDarkGrayColorSpec();
> +                     innerlefttop = WMTransparentColorSpec();
> +                     innerbottomright = WMTransparentColorSpec();
> +                     break;
> +             }
> +     }
> +
> +     cairo_set_line_width(cairo,1);
> +
> +     WMColorSpecSet(cairo,&outerlefttop);
> +     cairo_rectangle(cairo,0,0,width-1,0);
> +     cairo_rectangle(cairo,0,0,0,height-1);
> +     cairo_stroke(cairo);
> +
> +     WMColorSpecSet(cairo,&innerlefttop);
> +     cairo_rectangle(cairo,1,1,width-2,0);
> +     cairo_rectangle(cairo,1,1,0,height-2);
> +     cairo_stroke(cairo);
> +
> +     WMColorSpecSet(cairo,&innerbottomright);
> +     cairo_rectangle(cairo,1,height-2,width-1,1);
> +     cairo_rectangle(cairo,width-2,1,1,height-2);
> +     cairo_stroke(cairo);
> +
> +     WMColorSpecSet(cairo,&outerbottomright);
> +     cairo_rectangle(cairo,0,height-1,width,1);
> +     cairo_rectangle(cairo,width-1,0,1,height);
> +     cairo_stroke(cairo);
> +
> +     cairo_restore(cairo);
> +}
> diff --git a/WINGs/wbutton.c b/WINGs/wbutton.c
> index 77e4cdd..7304a17 100644
> --- a/WINGs/wbutton.c
> +++ b/WINGs/wbutton.c
> @@ -1,5 +1,6 @@
>  
>  #include "WINGsP.h"
> +#include "wtheme.h"
>  
>  typedef struct W_Button {
>       W_Class widgetClass;
> @@ -453,14 +454,16 @@ void WMSetButtonPeriodicDelay(WMButton * bPtr, float 
> delay, float interval)
>       bPtr->periodicDelay = delay;
>  }
>  
> -static void paintButton(Button * bPtr)
> +static void paintButton(WMButton * bPtr)
>  {
> -     cairo_t *cr= W_CreateCairoForView(W_VIEW(bPtr));
> +     cairo_t *cr = W_CreateCairoForView(W_VIEW(bPtr));
>       W_Screen *scrPtr = bPtr->view->screen;
>       WMReliefType relief;
>       int offset;
>       const char *caption;
>       WMImage *image;
> +     unsigned int lightbg = 0;
> +
>       WMColorSpec textColor;
>       WMColorSpec backColor;
>  
> @@ -488,8 +491,7 @@ static void paintButton(Button * bPtr)
>  
>       if (bPtr->flags.selected) {
>               if (bPtr->flags.stateLight) {
> -                     backColor = WMWhiteColorSpec();
> -                     textColor = WMBlackColorSpec();
> +                     lightbg = 1;
>               }
>  
>               if (bPtr->flags.stateChange) {
> @@ -512,8 +514,7 @@ static void paintButton(Button * bPtr)
>                       offset = 1;
>               }
>               if (bPtr->flags.pushLight) {
> -                     backColor = WMWhiteColorSpec();
> -                     textColor = WMBlackColorSpec();
> +                     lightbg = 1;
>               }
>  
>               if (bPtr->flags.pushChange) {
> @@ -525,16 +526,18 @@ static void paintButton(Button * bPtr)
>               }
>       }
>  
> +     if (lightbg == 1) {
> +             W_DrawButtonLightBack(cr, bPtr, bPtr->view->size.width, 
> bPtr->view->size.height,relief);
> +     } else {
> +             W_DrawButtonDarkBack(cr, bPtr, bPtr->view->size.width, 
> bPtr->view->size.height,relief);
> +     }
>  
> -     W_DrawButtonRelief(scrPtr, cr, 0, 0,
> -                     bPtr->view->size.width, bPtr->view->size.height,
> -                     relief);
> +     W_DrawButtonRelief(cr, bPtr->view->size.width, bPtr->view->size.height, 
> relief);
>  
> -     relief= WRFlat;
>       W_PaintTextAndImage(scrPtr, cr, bPtr->view, True, &textColor,
>                                               (bPtr->font!=NULL ? bPtr->font 
> : scrPtr->normalFont),
>                                               relief, caption, 
> bPtr->flags.alignment, image,
> -                                             bPtr->flags.imagePosition, 
> NULL, offset);
> +                                             bPtr->flags.imagePosition, 
> &backColor, offset);
>  
>       if (image)
>               WMDestroyImage(image);
> diff --git a/WINGs/wcolor.c b/WINGs/wcolor.c
> index 8d0ac7a..929c45c 100644
> --- a/WINGs/wcolor.c
> +++ b/WINGs/wcolor.c
> @@ -334,6 +334,17 @@ WMColorSpec WMBlackColorSpec()
>       return spec;
>  }
>  
> +WMColorSpec WMTransparentColorSpec()
> +{
> +     WMColorSpec spec= {0, 0, 0, 0};
> +     return spec;
> +}
> +
> +WMColorSpec WMLightGrayColorSpec()
> +{
> +     WMColorSpec spec= {194, 190, 194, 0xff};
> +     return spec;
> +}
>  
>  WMColorSpec WMGrayColorSpec()
>  {
> diff --git a/WINGs/wfont.c b/WINGs/wfont.c
> index 775ef88..b9b32aa 100644
> --- a/WINGs/wfont.c
> +++ b/WINGs/wfont.c
> @@ -234,7 +234,7 @@ unsigned int WMFontHeight(WMFont * font)
>  
>       cairo_scaled_font_extents(font->metrics, &extents);
>  
> -     return extents.height;
> +     return (extents.ascent);
>  
>  }
>  char *WMGetFontName(WMFont * font)
> diff --git a/WINGs/wmisc.c b/WINGs/wmisc.c
> index 0413654..fb3bb06 100644
> --- a/WINGs/wmisc.c
> +++ b/WINGs/wmisc.c
> @@ -3,203 +3,262 @@
>  
>  #include <ctype.h>
>  
> -static void curve_rectangle(cairo_t *cr,
> -             double x0, double y0, double rect_width, double rect_height,
> -             double radius)
> -{
> -     double x1,y1;
> -
> -     x1=x0+rect_width;
> -     y1=y0+rect_height;
> -     if (!rect_width || !rect_height)
> -             return;
> -     if (rect_width/2<radius) {
> -             if (rect_height/2<radius) {
> -                     cairo_move_to  (cr, x0, (y0 + y1)/2);
> -                     cairo_curve_to (cr, x0 ,y0, x0, y0, (x0 + x1)/2, y0);
> -                     cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1)/2);
> -                     cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0)/2, y1);
> -                     cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1)/2);
> -             } else {
> -                     cairo_move_to  (cr, x0, y0 + radius);
> -                     cairo_curve_to (cr, x0 ,y0, x0, y0, (x0 + x1)/2, y0);
> -                     cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius);
> -                     cairo_line_to (cr, x1 , y1 - radius);
> -                     cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0)/2, y1);
> -                     cairo_curve_to (cr, x0, y1, x0, y1, x0, y1- radius);
> -             }
> -     } else {
> -             if (rect_height/2<radius) {
> -                     cairo_move_to  (cr, x0, (y0 + y1)/2);
> -                     cairo_curve_to (cr, x0 , y0, x0 , y0, x0 + radius, y0);
> -                     cairo_line_to (cr, x1 - radius, y0);
> -                     cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1)/2);
> -                     cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
> -                     cairo_line_to (cr, x0 + radius, y1);
> -                     cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1)/2);
> -             } else {
> -                     cairo_move_to  (cr, x0, y0 + radius);
> -                     cairo_curve_to (cr, x0 , y0, x0 , y0, x0 + radius, y0);
> -                     cairo_line_to (cr, x1 - radius, y0);
> -                     cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius);
> -                     cairo_line_to (cr, x1 , y1 - radius);
> -                     cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
> -                     cairo_line_to (cr, x0 + radius, y1);
> -                     cairo_curve_to (cr, x0, y1, x0, y1, x0, y1- radius);
> -             }
> -     }
> -     cairo_close_path (cr);
> -}
> -
> -void W_DrawButtonRelief(W_Screen *scr, cairo_t *cairo, int x, int y, 
> unsigned int width, unsigned int height,
> -             WMReliefType relief)
> -{
> -     unsigned char border[4]= {0x00, 0x00, 0x00, 0x70};
> -     //unsigned char color1[4]= {0x8c, 0xb1, 0xbc, 0xff};
> -     //unsigned char color2[4]= {0xcb, 0xf3, 0xff, 0xff};
> -     unsigned char color1[4]= {0x0, 0x0, 0x0, 0xff};
> -     unsigned char color2[4]= {0xcf, 0xcf, 0xcf, 0xff};
> -     unsigned char scolor1[4]= {0xff, 0xff, 0xff, 0xe5};
> -     unsigned char scolor2[4]= {0xff, 0xff, 0xff, 0x70};
> -     cairo_pattern_t *shine;
> -     cairo_pattern_t *base;
> -
> -     x+=1;
> -     y+=1;
> -     width-=2;
> -     height-=2;
> -
> -     cairo_save(cairo);
> -
> -     shine= cairo_pattern_create_linear(0, 0, 0, height*2/5);
> -     cairo_pattern_add_color_stop_rgba(shine, 0,
> -                     scolor1[0]/255.0, scolor1[1]/255.0, scolor1[2]/255.0,
> -                     scolor1[3]/255.0);
> -     cairo_pattern_add_color_stop_rgba(shine, 1,
> -                     scolor2[0]/255.0, scolor2[1]/255.0, scolor2[2]/255.0,
> -                     scolor2[3]/255.0);
> -
> -     base= cairo_pattern_create_linear(0, 0, 0, height-1);
> -     cairo_pattern_add_color_stop_rgba(base, 0,
> -                     color1[0]/255.0, color1[1]/255.0, color1[2]/255.0,
> -                     color1[3]/255.0);
> -     cairo_pattern_add_color_stop_rgba(base, 1,
> -                     color2[0]/255.0, color2[1]/255.0, color2[2]/255.0,
> -                     color2[3]/255.0);
> -
> -
> -     curve_rectangle(cairo, x, y, width-1, height-1, height*2/3);
> -     cairo_set_source(cairo, base);
> -     cairo_fill_preserve(cairo);
> -     cairo_clip(cairo);
> -
> -     curve_rectangle(cairo, x, y, width-1, height*2/5, width);
> -     cairo_set_source(cairo, shine);
> -     cairo_fill(cairo);
> -
> -     curve_rectangle(cairo, x, y, width-1, height-1, height*2/3);
> -     cairo_set_source_rgba(cairo, border[0]/255.0, border[1]/255.0, 
> border[2]/255.0, border[3]/255.0);
> -     cairo_set_line_width(cairo, 2.0);
> -     cairo_stroke(cairo);
> -
> -     cairo_pattern_destroy(shine);
> -     cairo_pattern_destroy(base);
> -
> -     cairo_restore(cairo);
> -}
> +//static void curve_rectangle(cairo_t *cr,
> +//           double x0, double y0, double rect_width, double rect_height,
> +//           double radius)
> +//{
> +//   double x1,y1;
> +//
> +//   x1=x0+rect_width;
> +//   y1=y0+rect_height;
> +//   if (!rect_width || !rect_height)
> +//           return;
> +//   if (rect_width/2<radius) {
> +//           if (rect_height/2<radius) {
> +//                   cairo_move_to  (cr, x0, (y0 + y1)/2);
> +//                   cairo_curve_to (cr, x0 ,y0, x0, y0, (x0 + x1)/2, y0);
> +//                   cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1)/2);
> +//                   cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0)/2, y1);
> +//                   cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1)/2);
> +//           } else {
> +//                   cairo_move_to  (cr, x0, y0 + radius);
> +//                   cairo_curve_to (cr, x0 ,y0, x0, y0, (x0 + x1)/2, y0);
> +//                   cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius);
> +//                   cairo_line_to (cr, x1 , y1 - radius);
> +//                   cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0)/2, y1);
> +//                   cairo_curve_to (cr, x0, y1, x0, y1, x0, y1- radius);
> +//           }
> +//   } else {
> +//           if (rect_height/2<radius) {
> +//                   cairo_move_to  (cr, x0, (y0 + y1)/2);
> +//                   cairo_curve_to (cr, x0 , y0, x0 , y0, x0 + radius, y0);
> +//                   cairo_line_to (cr, x1 - radius, y0);
> +//                   cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1)/2);
> +//                   cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
> +//                   cairo_line_to (cr, x0 + radius, y1);
> +//                   cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1)/2);
> +//           } else {
> +//                   cairo_move_to  (cr, x0, y0 + radius);
> +//                   cairo_curve_to (cr, x0 , y0, x0 , y0, x0 + radius, y0);
> +//                   cairo_line_to (cr, x1 - radius, y0);
> +//                   cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius);
> +//                   cairo_line_to (cr, x1 , y1 - radius);
> +//                   cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
> +//                   cairo_line_to (cr, x0 + radius, y1);
> +//                   cairo_curve_to (cr, x0, y1, x0, y1, x0, y1- radius);
> +//           }
> +//   }
> +//   cairo_close_path (cr);
> +//}
> +//
> +//void W_DrawButtonRelief(W_Screen *scr, cairo_t *cairo, int x, int y, 
> unsigned int width, unsigned int height,
> +//           WMReliefType relief, unsigned int pushLight)
> +//{
> +//   cairo_save(cairo);
> +//
> +//   WMColorSpec outerlefttop;
> +//   WMColorSpec innerlefttop;
> +//   WMColorSpec outerbottomright;
> +//   WMColorSpec innerbottomright;
> +//
> +//#define NEW_LOOK 1
> +//#ifdef NEW_LOOK
> +//#define TOPFILL WMLightGrayColorSpec()
> +//#define BOTFILL WMGrayColorSpec()
> +//#else
> +//#define TOPFILL WMGrayColorSpec()
> +//#define BOTFILL WMGrayColorSpec()
> +//#endif
> +//
> +//   WMColorSpec topfill = TOPFILL;
> +//   WMColorSpec bottomfill = BOTFILL;
> +//
> +//   //the highlight colors depend on the button relief
> +//   switch (relief) {
> +//           case WRSimple:
> +//           {
> +//                   outerlefttop = WMBlackColorSpec();
> +//                   outerbottomright = WMBlackColorSpec();
> +//                   innerlefttop = WMTransparentColorSpec();
> +//                   innerbottomright = WMTransparentColorSpec();
> +//                   break;
> +//           }
> +//           case WRRaised:
> +//           {
> +//                   outerlefttop = WMWhiteColorSpec();
> +//                   outerbottomright = WMBlackColorSpec();
> +//                   innerlefttop = WMTransparentColorSpec();
> +//                   innerbottomright = WMDarkGrayColorSpec();
> +//                   break;
> +//           }
> +//           case WRSunken:
> +//           {
> +//                   outerlefttop = WMDarkGrayColorSpec();
> +//                   outerbottomright = WMWhiteColorSpec();
> +//                   innerlefttop = WMBlackColorSpec();
> +//                   innerbottomright = WMTransparentColorSpec();
> +//                   break;
> +//           }
> +//           case WRPushed:
> +//           {
> +//                   if (pushLight) {
> +//                           topfill = WMWhiteColorSpec();
> +//                           bottomfill = WMWhiteColorSpec();
> +//                   }
> +//                   outerlefttop = WMBlackColorSpec();
> +//                   outerbottomright = WMWhiteColorSpec();
> +//                   innerlefttop = WMTransparentColorSpec();
> +//                   innerbottomright = WMTransparentColorSpec();
> +//                   break;
> +//           }
> +//           case WRRidge:
> +//           {
> +//                   outerlefttop = WMWhiteColorSpec();
> +//                   outerbottomright = WMDarkGrayColorSpec();
> +//                   innerlefttop = WMTransparentColorSpec();
> +//                   innerbottomright = WMTransparentColorSpec();
> +//                   break;
> +//           }
> +//           case WRGroove:
> +//           {
> +//                   outerlefttop = WMDarkGrayColorSpec();
> +//                   outerbottomright = WMDarkGrayColorSpec();
> +//                   innerlefttop = WMTransparentColorSpec();
> +//                   innerbottomright = WMTransparentColorSpec();
> +//                   break;
> +//           }
> +//   }
> +//
> +//   //draw main gradient
> +//   cairo_pattern_t *linpat;
> +//   linpat = cairo_pattern_create_linear(0, 0, 0, height);
> +//   cairo_pattern_add_color_stop_rgba(linpat, 0, topfill.red/255.0, 
> topfill.green/255.0, topfill.blue/255.0, topfill.alpha/255.0);
> +//   cairo_pattern_add_color_stop_rgba(linpat, 0, bottomfill.red/255.0, 
> bottomfill.green/255.0, bottomfill.blue/255.0, bottomfill.alpha/255.0);
> +//   cairo_set_source(cairo, linpat);
> +//   cairo_rectangle(cairo, 0, 0, width, height);
> +//   cairo_fill(cairo);
> +//   cairo_stroke(cairo);
> +//
> +//   //draw highlights
> +//   cairo_set_line_width(cairo,1);
> +//
> +//   WMColorSpecSet(cairo,&outerlefttop);
> +//   cairo_rectangle(cairo,0,0,width-1,0);
> +//   cairo_rectangle(cairo,0,0,0,height-1);
> +//   cairo_stroke(cairo);
> +//
> +//   WMColorSpecSet(cairo,&innerlefttop);
> +//   cairo_rectangle(cairo,1,1,width-2,0);
> +//   cairo_rectangle(cairo,1,1,0,height-2);
> +//   cairo_stroke(cairo);
> +//
> +//   WMColorSpecSet(cairo,&innerbottomright);
> +//   cairo_rectangle(cairo,1,height-2,width-1,1);
> +//   cairo_rectangle(cairo,width-2,1,1,height-2);
> +//   cairo_stroke(cairo);
> +//
> +//   WMColorSpecSet(cairo,&outerbottomright);
> +//   cairo_rectangle(cairo,0,height-1,width,1);
> +//   cairo_rectangle(cairo,width-1,0,1,height);
> +//   cairo_stroke(cairo);
> +//
> +//   cairo_pattern_destroy(linpat);
> +//
> +//   cairo_restore(cairo);
> +//}
>  
>  void W_DrawRelief(W_Screen *scr, cairo_t *cairo, int x, int y, unsigned int 
> width, unsigned int height,
>               WMReliefType relief)
>  {
> -     WMColorSpec b;
> -     WMColorSpec w;
> -     WMColorSpec d;
> -     WMColorSpec l;
> -
> -     switch (relief) {
> -             case WRSimple:
> -                     WMColorSpecSet(cairo, &b);
> -                     cairo_rectangle(cairo, x, y, width-1, height-1);
> -                     cairo_stroke(cairo);
> -                     return;
> -
> -             case WRRaised:
> -                     b= WMBlackColorSpec();
> -                     w= WMWhiteColorSpec();
> -                     d= WMDarkGrayColorSpec();
> -                     l= WMGrayColorSpec();
> -                     break;
> -
> -             case WRSunken:
> -                     l= WMBlackColorSpec();
> -                     b= WMWhiteColorSpec();
> -                     w= WMDarkGrayColorSpec();
> -                     d= WMGrayColorSpec();
> -                     break;
> -
> -             case WRPushed:
> -                     l= w= WMBlackColorSpec();
> -                     d= b= WMWhiteColorSpec();
> -                     break;
> -
> -             case WRRidge:
> -                     l= b= WMDarkGrayColorSpec();
> -                     d= w= WMWhiteColorSpec();
> -                     break;
> -
> -             case WRGroove:
> -                     w= d= WMDarkGrayColorSpec();
> -                     l= b= WMWhiteColorSpec();
> -                     break;
> -
> -             default:
> -                     return;
> -     }
> -     /* top left */
> -     WMColorSpecSet(cairo, &w);
> -     cairo_move_to(cairo, x, y);
> -     cairo_line_to(cairo, x+width-1, y);
> -     cairo_stroke(cairo);
> -     if (width > 2 && relief != WRRaised && relief!=WRPushed) {
> -             WMColorSpecSet(cairo, &l);
> -             cairo_move_to(cairo, x+1, y+1);
> -             cairo_line_to(cairo, x+width-3, y+1);
> -             cairo_stroke(cairo);
> -     }
> -
> -     WMColorSpecSet(cairo, &w);
> -     cairo_move_to(cairo, x, y);
> -     cairo_line_to(cairo, x, y+height-1);
> -     cairo_stroke(cairo);
> -     if (height > 2 && relief != WRRaised && relief!=WRPushed) {
> -             WMColorSpecSet(cairo, &l);
> -             cairo_move_to(cairo, x+1, y+1);
> -             cairo_line_to(cairo, x+1, y+height-3);
> -             cairo_stroke(cairo);
> -     }
> -
> -     /* bottom right */
> -     WMColorSpecSet(cairo, &b);
> -     cairo_move_to(cairo, x, y+height-1);
> -     cairo_line_to(cairo, x+width-1, y+height-1);
> -     cairo_stroke(cairo);
> -     if (width > 2 && relief!=WRPushed) {
> -             WMColorSpecSet(cairo, &d);
> -             cairo_move_to(cairo, x+1, y+height-2);
> -             cairo_line_to(cairo, x+width-2, y+height-2);
> -             cairo_stroke(cairo);
> -     }
> -
> -     WMColorSpecSet(cairo, &b);
> -     cairo_move_to(cairo, x+width-1, y);
> -     cairo_line_to(cairo, x+width-1, y+height-1);
> -     cairo_stroke(cairo);
> -     if (height > 2 && relief!=WRPushed) {
> -             WMColorSpecSet(cairo, &d);
> -             cairo_move_to(cairo, x+width-2, y+1);
> -             cairo_line_to(cairo, x+width-2, y+height-2);
> -             cairo_stroke(cairo);
> -     }
> +//   WMColorSpec b;
> +//   WMColorSpec w;
> +//   WMColorSpec d;
> +//   WMColorSpec l;
> +//
> +//   switch (relief) {
> +//           case WRSimple:
> +//                   WMColorSpecSet(cairo, &b);
> +//                   cairo_rectangle(cairo, x, y, width-1, height-1);
> +//                   cairo_stroke(cairo);
> +//                   return;
> +//
> +//           case WRRaised:
> +//                   b= WMBlackColorSpec();
> +//                   w= WMWhiteColorSpec();
> +//                   d= WMDarkGrayColorSpec();
> +//                   l= WMGrayColorSpec();
> +//                   break;
> +//
> +//           case WRSunken:
> +//                   l= WMBlackColorSpec();
> +//                   b= WMWhiteColorSpec();
> +//                   w= WMDarkGrayColorSpec();
> +//                   d= WMGrayColorSpec();
> +//                   break;
> +//
> +//           case WRPushed:
> +//                   l= w= WMBlackColorSpec();
> +//                   d= b= WMWhiteColorSpec();
> +//                   break;
> +//
> +//           case WRRidge:
> +//                   l= b= WMDarkGrayColorSpec();
> +//                   d= w= WMWhiteColorSpec();
> +//                   break;
> +//
> +//           case WRGroove:
> +//                   w= d= WMDarkGrayColorSpec();
> +//                   l= b= WMWhiteColorSpec();
> +//                   break;
> +//
> +//           default:
> +//                   return;
> +//   }
> +//   /* top left */
> +//   WMColorSpecSet(cairo, &w);
> +//   cairo_move_to(cairo, x, y);
> +//   cairo_line_to(cairo, x+width-1, y);
> +//   cairo_stroke(cairo);
> +//   if (width > 2 && relief != WRRaised && relief!=WRPushed) {
> +//           WMColorSpecSet(cairo, &l);
> +//           cairo_move_to(cairo, x+1, y+1);
> +//           cairo_line_to(cairo, x+width-3, y+1);
> +//           cairo_stroke(cairo);
> +//   }
> +//
> +//   WMColorSpecSet(cairo, &w);
> +//   cairo_move_to(cairo, x, y);
> +//   cairo_line_to(cairo, x, y+height-1);
> +//   cairo_stroke(cairo);
> +//   if (height > 2 && relief != WRRaised && relief!=WRPushed) {
> +//           WMColorSpecSet(cairo, &l);
> +//           cairo_move_to(cairo, x+1, y+1);
> +//           cairo_line_to(cairo, x+1, y+height-3);
> +//           cairo_stroke(cairo);
> +//   }
> +//
> +//   /* bottom right */
> +//   WMColorSpecSet(cairo, &b);
> +//   cairo_move_to(cairo, x, y+height-1);
> +//   cairo_line_to(cairo, x+width-1, y+height-1);
> +//   cairo_stroke(cairo);
> +//   if (width > 2 && relief!=WRPushed) {
> +//           WMColorSpecSet(cairo, &d);
> +//           cairo_move_to(cairo, x+1, y+height-2);
> +//           cairo_line_to(cairo, x+width-2, y+height-2);
> +//           cairo_stroke(cairo);
> +//   }
> +//
> +//   WMColorSpecSet(cairo, &b);
> +//   cairo_move_to(cairo, x+width-1, y);
> +//   cairo_line_to(cairo, x+width-1, y+height-1);
> +//   cairo_stroke(cairo);
> +//   if (height > 2 && relief!=WRPushed) {
> +//           WMColorSpecSet(cairo, &d);
> +//           cairo_move_to(cairo, x+width-2, y+1);
> +//           cairo_line_to(cairo, x+width-2, y+height-2);
> +//           cairo_stroke(cairo);
> +//   }
>  }
>  
>  static int findNextWord(const char *text, int limit)
> @@ -225,7 +284,7 @@ static int fitText(const char *text, WMFont * font, int 
> width, int wrap)
>       if (!wrap || beforecrlf == 0)
>               return beforecrlf;
>  
> -     //XXX w = WMWidthOfString(font, text, beforecrlf);
> +     w = WMWidthOfString(font, text);
>       if (w <= width) {
>               /* text up to first crlf fits */
>               return beforecrlf;
> @@ -236,14 +295,14 @@ static int fitText(const char *text, WMFont * font, int 
> width, int wrap)
>               word2 = word1 + findNextWord(text + word1, beforecrlf - word1);
>               if (word2 >= beforecrlf)
>                       break;
> -             //XXXw = WMWidthOfString(font, text, word2);
> +             w = WMWidthOfString(font, text);
>               if (w > width)
>                       break;
>               word1 = word2;
>       }
>  
>       for (i = word1; i < word2; i++) {
> -             //XXXw = WMWidthOfString(font, text, i);
> +             w = WMWidthOfString(font, text);
>               if (w > width) {
>                       break;
>               }
> @@ -331,35 +390,35 @@ void W_PaintText(cairo_t *cairo, WMFont *font,  int x, 
> int y,
>       int count;
>       int fheight = WMFontHeight(font);
>  
> -     //line_x= x + (width - WMWidthOfString(font, ptr))/2;
> -     //WMDrawString(cairo, color, font, line_x, y, ptr);
> -     //return;
> -
> -     while (length > 0) {
> -             count = fitText(ptr, font, width, wrap);
> -
> -             line_width = WMWidthOfString(font, text);
> -
> -             if (alignment == WALeft)
> -                     line_x = x;
> -             else if (alignment == WARight)
> -                     line_x = x + width - line_width;
> -             else
> -                     line_x = x + (width - line_width) / 2;
> -
> -             WMDrawString(cairo, color, font, line_x, y, ptr);
> -
> -             if (wrap && ptr[count] != '\n')
> -                     y += fheight;
> -
> -             while (ptr[count] && ptr[count] == '\n') {
> -                     y += fheight;
> -                     count++;
> -             }
> -
> -             ptr += count;
> -             length -= count;
> -     }
> +     line_x= x + (width - WMWidthOfString(font, ptr))/2;
> +     WMDrawString(cairo, color, font, line_x, y, ptr);
> +     return;
> +
> +//   while (length > 0) {
> +//           count = fitText(ptr, font, width, wrap);
> +//
> +//           line_width = WMWidthOfString(font, text);
> +//
> +//           if (alignment == WALeft)
> +//                   line_x = x;
> +//           else if (alignment == WARight)
> +//                   line_x = x + width - line_width;
> +//           else
> +//                   line_x = x + (width - line_width) / 2;
> +//
> +//           WMDrawString(cairo, color, font, line_x, y, ptr);
> +//
> +//           if (wrap && ptr[count] != '\n')
> +//                   y += fheight;
> +//
> +//           while (ptr[count] && ptr[count] == '\n') {
> +//                   y += fheight;
> +//                   count++;
> +//           }
> +//
> +//           ptr += count;
> +//           length -= count;
> +//   }
>  }
>  
>  void W_PaintTextAndImage(W_Screen *screen, cairo_t *cairo, W_View *view, int 
> wrap, WMColorSpec *textColor, W_Font *font,
> @@ -372,12 +431,6 @@ void W_PaintTextAndImage(W_Screen *screen, cairo_t 
> *cairo, W_View *view, int wra
>  
>       cairo_save(cairo);
>  
> -     if (backColor)
> -     {
> -             cairo_rectangle(cairo, 0, 0, view->size.width, 
> view->size.height);
> -             WMColorSpecSet(cairo, backColor);
> -             cairo_fill(cairo);
> -     }
>       if (relief == WRFlat) {
>               x = 0;
>               y = 0;
> @@ -458,7 +511,7 @@ void W_PaintTextAndImage(W_Screen *screen, cairo_t 
> *cairo, W_View *view, int wra
>       }
>  
>       /* draw relief */
> -     W_DrawRelief(screen, cairo, 0, 0, view->size.width, view->size.height, 
> relief);
> +     //W_DrawRelief(screen, cairo, 0, 0, view->size.width, 
> view->size.height, relief);
>  }
>  
>  WMPoint wmkpoint(int x, int y)
> diff --git a/WINGs/wtheme.c b/WINGs/wtheme.c
> new file mode 100644
> index 0000000..6d6c148
> --- /dev/null
> +++ b/WINGs/wtheme.c
> @@ -0,0 +1,8 @@
> +#include <wtheme.h>
> +
> +#define NEW_THEME
> +#ifdef NEW_THEME
> +#include <newtheme.c>
> +#else
> +#include <oldtheme.c>
> +#endif
> diff --git a/WINGs/wview.c b/WINGs/wview.c
> index d0893ea..c3806bc 100644
> --- a/WINGs/wview.c
> +++ b/WINGs/wview.c
> @@ -109,7 +109,7 @@ static W_View *createView(W_Screen * screen, W_View * 
> parent)
>               view->attribs = defAtts;
>  
>               view->attribFlags |= CWBackPixel|CWColormap|CWBorderPixel;
> -             view->attribs.background_pixel = 
> WMCreateRGBAColor(screen,0,0,0,0,0);
> +             view->attribs.background_pixel = 
> WhitePixel(screen->display,screen->screen);
>               view->attribs.border_pixel = 0;
>               view->attribs.colormap = screen->colormap;
>  
> @@ -405,12 +405,12 @@ cairo_t* W_CreateCairoForView(W_View *view)
>       cairo_surface_t *surface;
>       cairo_t *cairo;
>  
> -     surface= cairo_xlib_surface_create(W_VIEW_DISPLAY(view),
> +     surface = cairo_xlib_surface_create(W_VIEW_DISPLAY(view),
>                       W_VIEW_DRAWABLE(view),
>                       W_VIEW_SCREEN(view)->visual,
>                       W_VIEW_WIDTH(view),
>                       W_VIEW_HEIGHT(view));
> -     cairo= cairo_create(surface);
> +     cairo = cairo_create(surface);
>       cairo_surface_destroy(surface);
>       cairo_translate(cairo, 0.5, 0.5);
>       cairo_set_line_width(cairo, 1.0);
> diff --git a/test/cairo/draw.c b/test/cairo/draw.c
> index 515d4b6..ba4a4b2 100644
> --- a/test/cairo/draw.c
> +++ b/test/cairo/draw.c
> @@ -11,111 +11,44 @@
>   * cairo code you want to try in draw and very quickly see the results
>   * -- JH
>   */
> -static void curve_rectangle(cairo_t *cr,
> -             double x0, double y0, double rect_width, double rect_height,
> -             double radius)
> -{
> -     double x1,y1;
> -
> -     x1=x0+rect_width;
> -     y1=y0+rect_height;
> -     if (!rect_width || !rect_height)
> -             return;
> -     if (rect_width/2<radius) {
> -             if (rect_height/2<radius) {
> -                     cairo_move_to  (cr, x0, (y0 + y1)/2);
> -                     cairo_curve_to (cr, x0 ,y0, x0, y0, (x0 + x1)/2, y0);
> -                     cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1)/2);
> -                     cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0)/2, y1);
> -                     cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1)/2);
> -             } else {
> -                     cairo_move_to  (cr, x0, y0 + radius);
> -                     cairo_curve_to (cr, x0 ,y0, x0, y0, (x0 + x1)/2, y0);
> -                     cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius);
> -                     cairo_line_to (cr, x1 , y1 - radius);
> -                     cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0)/2, y1);
> -                     cairo_curve_to (cr, x0, y1, x0, y1, x0, y1- radius);
> -             }
> -     } else {
> -             if (rect_height/2<radius) {
> -                     cairo_move_to  (cr, x0, (y0 + y1)/2);
> -                     cairo_curve_to (cr, x0 , y0, x0 , y0, x0 + radius, y0);
> -                     cairo_line_to (cr, x1 - radius, y0);
> -                     cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1)/2);
> -                     cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
> -                     cairo_line_to (cr, x0 + radius, y1);
> -                     cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1)/2);
> -             } else {
> -                     cairo_move_to  (cr, x0, y0 + radius);
> -                     cairo_curve_to (cr, x0 , y0, x0 , y0, x0 + radius, y0);
> -                     cairo_line_to (cr, x1 - radius, y0);
> -                     cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius);
> -                     cairo_line_to (cr, x1 , y1 - radius);
> -                     cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
> -                     cairo_line_to (cr, x0 + radius, y1);
> -                     cairo_curve_to (cr, x0, y1, x0, y1, x0, y1- radius);
> -             }
> -     }
> -     cairo_close_path (cr);
> -}
>  
>  void draw(Display *dpy, Screen *scr, Visual *vis, Window win) {
>       cairo_surface_t *surf;
>       cairo_t *ct;
> -
> -     int width=200;
> -     int height = 50;
> -     int x = 10;
> -     int y = 10;
> -
> -     unsigned char border[4]= {0x00, 0x00, 0x00, 0x70};
> -     //unsigned char color1[4]= {0x8c, 0xb1, 0xbc, 0xff};
> -     //unsigned char color2[4]= {0xcb, 0xf3, 0xff, 0xff};
> -     unsigned char color1[4]= {0x0, 0x0, 0x0, 0xff};
> -     unsigned char color2[4]= {0xcf, 0xcf, 0xcf, 0xff};
> -     unsigned char scolor1[4]= {0xff, 0xff, 0xff, 0xe5};
> -     unsigned char scolor2[4]= {0xff, 0xff, 0xff, 0x70};
> +     cairo_pattern_t *linpat;
> +     int height = 35;
> +     int width = 130;
>  
>       surf = (cairo_surface_t *) cairo_xlib_surface_create(dpy, win, vis, 
> 500, 500);
>       ct = cairo_create(surf);
>  
> -     cairo_pattern_t *shine;
> -     cairo_pattern_t *base;
> -
> -     shine= cairo_pattern_create_linear(0, 0, 0, height*2/5);
> -     cairo_pattern_add_color_stop_rgba(shine, 0,
> -                     scolor1[0]/255.0, scolor1[1]/255.0, scolor1[2]/255.0,
> -                     scolor1[3]/255.0);
> -     cairo_pattern_add_color_stop_rgba(shine, 1,
> -                     scolor2[0]/255.0, scolor2[1]/255.0, scolor2[2]/255.0,
> -                     scolor2[3]/255.0);
> -
> -     base= cairo_pattern_create_linear(0, 0, 0, height-1);
> -     cairo_pattern_add_color_stop_rgba(base, 0,
> -                     color1[0]/255.0, color1[1]/255.0, color1[2]/255.0,
> -                     color1[3]/255.0);
> -     cairo_pattern_add_color_stop_rgba(base, 1,
> -                     color2[0]/255.0, color2[1]/255.0, color2[2]/255.0,
> -                     color2[3]/255.0);
> -
> -
> -     curve_rectangle(ct, x, y, width-1, height-1, height*2/3);
> -     cairo_set_source(ct, base);
> -     cairo_fill_preserve(ct);
> -     cairo_clip(ct);
> -
> -     curve_rectangle(ct, x, y, width-1, height*2/5, width);
> -     cairo_set_source(ct, shine);
> +     //cairo_set_line_width(ct, 1);
> +
> +     linpat = cairo_pattern_create_linear(0,0,0,height);
> +     cairo_pattern_add_color_stop_rgb(linpat, 0, 194.0/255, 190.0/255, 
> 194.0/255);
> +     cairo_pattern_add_color_stop_rgb(linpat, 1, 174.0/255, 170.0/255, 
> 174.0/255);
> +     cairo_set_source(ct,linpat);
> +     cairo_rectangle(ct,0,0,width,height);
>       cairo_fill(ct);
>  
> -     curve_rectangle(ct, x, y, width-1, height-1, height*2/3);
> -     cairo_set_source_rgba(ct, border[0]/255.0, border[1]/255.0, 
> border[2]/255.0, border[3]/255.0);
> -     cairo_set_line_width(ct, 2.0);
> -     cairo_stroke(ct);
> +     cairo_set_source_rgb(ct, 1, 1, 1);
> +     cairo_rectangle(ct,0,0,1,height-1);
> +     cairo_rectangle(ct,0,0,width-1,1);
> +     cairo_fill(ct);
> +
> +     cairo_set_source_rgb(ct, 81.0/255, 85.0/255, 81.0/255);
> +     cairo_rectangle(ct,1,height-2,width-1,1);
> +     cairo_rectangle(ct,width-2,1,1,height-1);
> +     cairo_fill(ct);
>  
> -     cairo_pattern_destroy(shine);
> -     cairo_pattern_destroy(base);
> +     cairo_set_source_rgb(ct, 0, 0, 0);
> +     cairo_rectangle(ct,0,height-1,width,1);
> +     cairo_rectangle(ct,width-1,0,1,height);
> +     cairo_fill(ct);
> +
> +     cairo_stroke(ct);
>  
> +     cairo_pattern_destroy(linpat);
>       cairo_destroy(ct);
>       cairo_surface_destroy(surf);
>  }
> -- 
> 1.6.0.3
> 



-- 
To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.info.

Reply via email to