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.