WINGs widgets use a palette of six colors. (Essentially, just four. There are
two colors used only for unselected tabs in tabviews.) This patch allows a user
to declare these six colors in ~/GNUstep/Defaults/WMGLOBAL, e.g.,
{
Background = color1;
Foreground = color2;
Shadow = color3;
Highlight = color4;
UnselectedTabBackground = color5;
UnselectedTabHighlight = color6;
}
---
WINGs/WINGs/WINGs.h | 4 ++++
WINGs/WINGs/WINGsP.h | 13 +++++++++++
WINGs/wcolor.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++----
WINGs/widgets.c | 2 ++
WINGs/wtabview.c | 4 ++--
5 files changed, 78 insertions(+), 6 deletions(-)
diff --git a/WINGs/WINGs/WINGs.h b/WINGs/WINGs/WINGs.h
index 0104e03..ff9eaef 100644
--- a/WINGs/WINGs/WINGs.h
+++ b/WINGs/WINGs/WINGs.h
@@ -349,6 +349,8 @@ typedef struct W_Pixmap WMPixmap;
typedef struct W_Font WMFont;
typedef struct W_Color WMColor;
+typedef struct WMTheme WMTheme;
+
typedef struct W_Screen WMScreen;
typedef struct W_View WMView;
@@ -881,6 +883,8 @@ unsigned short WMGetColorAlpha(WMColor *color);
char* WMGetColorRGBDescription(WMColor *color);
+WMTheme* W_GetTheme(WMScreen *scr);
+
/* ---[ WINGs/widgets.c ]------------------------------------------------- */
WMScreen* WMWidgetScreen(WMWidget *w);
diff --git a/WINGs/WINGs/WINGsP.h b/WINGs/WINGs/WINGsP.h
index de01412..df5cfc4 100644
--- a/WINGs/WINGs/WINGsP.h
+++ b/WINGs/WINGs/WINGsP.h
@@ -64,6 +64,17 @@ typedef struct W_DraggingInfo {
struct W_DragDestinationInfo* destInfo; /* infos needed by destination */
} W_DraggingInfo;
+/* ---[ wcolor.c ]----------------------------------------------------- */
+
+typedef struct WMTheme {
+ WMColor *background;
+ WMColor *foreground;
+ WMColor *shadow;
+ WMColor *highlight;
+ WMColor *unselectedTabBackground;
+ WMColor *unselectedTabHighlight;
+} WMTheme;
+
/* ---[ Structures from WINGs.h ]----------------------------------------- */
/* Pre-definition of internal structs */
@@ -265,6 +276,8 @@ typedef struct W_Screen {
struct W_View *modalView;
unsigned modalLoop:1;
unsigned ignoreNextDoubleClick:1;
+
+ WMTheme *theme;
} W_Screen;
#define W_DRAWABLE(scr) (scr)->rcontext->drawable
diff --git a/WINGs/wcolor.c b/WINGs/wcolor.c
index a02c182..154d5e1 100644
--- a/WINGs/wcolor.c
+++ b/WINGs/wcolor.c
@@ -199,7 +199,7 @@ void WMSetColorInGC(WMColor * color, GC gc)
WMColor *WMWhiteColor(WMScreen * scr)
{
if (!scr->white) {
- scr->white = WMCreateRGBColor(scr, 0xffff, 0xffff, 0xffff,
True);
+ scr->white = scr->theme->highlight;
if (!scr->white->flags.exact)
wwarning(_("could not allocate %s color"), _("white"));
}
@@ -209,7 +209,7 @@ WMColor *WMWhiteColor(WMScreen * scr)
WMColor *WMBlackColor(WMScreen * scr)
{
if (!scr->black) {
- scr->black = WMCreateRGBColor(scr, 0, 0, 0, True);
+ scr->black = scr->theme->foreground;
if (!scr->black->flags.exact)
wwarning(_("could not allocate %s color"), _("black"));
}
@@ -245,7 +245,7 @@ WMColor *WMGrayColor(WMScreen * scr)
WMReleaseColor(white);
WMReleaseColor(black);
} else {
- color = WMCreateRGBColor(scr, 0xaeba, 0xaaaa, 0xaeba,
True);
+ color = scr->theme->background;
if (!color->flags.exact)
wwarning(_("could not allocate %s color"),
_("gray"));
}
@@ -283,7 +283,7 @@ WMColor *WMDarkGrayColor(WMScreen * scr)
WMReleaseColor(white);
WMReleaseColor(black);
} else {
- color = WMCreateRGBColor(scr, 0x5144, 0x5555, 0x5144,
True);
+ color = scr->theme->shadow;
if (!color->flags.exact)
wwarning(_("could not allocate %s color"),
_("dark gray"));
}
@@ -324,3 +324,56 @@ char *WMGetColorRGBDescription(WMColor * color)
return str;
}
+
+WMTheme *W_GetTheme(WMScreen *scr)
+{
+ WMTheme *theme;
+ WMUserDefaults *defaults;
+
+ char *background;
+ char *foreground;
+ char *shadow;
+ char *highlight;
+ char *unselectedTabBackground;
+ char *unselectedTabHighlight;
+
+ defaults = WMGetStandardUserDefaults();
+
+ if (defaults) {
+ background = WMGetUDStringForKey(defaults, "Background");
+ foreground = WMGetUDStringForKey(defaults, "Foreground");
+ shadow = WMGetUDStringForKey(defaults, "Shadow");
+ highlight = WMGetUDStringForKey(defaults, "Highlight");
+ unselectedTabBackground = WMGetUDStringForKey(defaults,
"UnselectedTabBackground");
+ unselectedTabHighlight = WMGetUDStringForKey(defaults,
"UnselectedTabHighlight");
+ }
+
+
+ theme = wmalloc(sizeof(WMTheme));
+
+ theme->background = WMCreateNamedColor(scr,background,True);
+ if (!theme->background)
+ theme->background = WMCreateRGBColor(scr, 0xaeba, 0xaaaa,
0xaeba, True);
+
+ theme->foreground = WMCreateNamedColor(scr,foreground,True);
+ if (!theme->foreground)
+ theme->foreground = WMCreateRGBColor(scr, 0, 0, 0, True);
+
+ theme->shadow = WMCreateNamedColor(scr,shadow,True);
+ if (!theme->shadow)
+ theme->shadow = WMCreateRGBColor(scr, 0x5144, 0x5555, 0x5144,
True);
+
+ theme->highlight = WMCreateNamedColor(scr,highlight,True);
+ if (!theme->highlight)
+ theme->highlight = WMCreateRGBColor(scr, 0xffff, 0xffff,
0xffff, True);
+
+ theme->unselectedTabBackground =
WMCreateNamedColor(scr,unselectedTabBackground,True);
+ if (!theme->unselectedTabBackground)
+ theme->unselectedTabBackground = WMCreateRGBColor(scr, 0x8420,
0x8420, 0x8420, False);
+
+ theme->unselectedTabHighlight =
WMCreateNamedColor(scr,unselectedTabHighlight,True);
+ if (!theme->unselectedTabHighlight)
+ theme->unselectedTabHighlight = WMCreateRGBColor(scr, 0xd9d9,
0xd9d9, 0xd9d9, False);
+
+ return theme;
+}
diff --git a/WINGs/widgets.c b/WINGs/widgets.c
index 7b9ffe8..f470e0a 100644
--- a/WINGs/widgets.c
+++ b/WINGs/widgets.c
@@ -668,6 +668,8 @@ WMScreen *WMCreateScreenWithRContext(Display * display, int
screen, RContext * c
scrPtr->ignoredModifierMask = numLockMask | scrollLockMask |
LockMask;
}
+ scrPtr->theme = W_GetTheme(scrPtr);
+
/* initially allocate some colors */
WMWhiteColor(scrPtr);
WMBlackColor(scrPtr);
diff --git a/WINGs/wtabview.c b/WINGs/wtabview.c
index 57a458c..43bf746 100644
--- a/WINGs/wtabview.c
+++ b/WINGs/wtabview.c
@@ -200,8 +200,8 @@ WMTabView *WMCreateTabView(WMWidget * parent)
tPtr->view->self = tPtr;
tPtr->view->delegate = &delegate;
- tPtr->lightGray = WMCreateRGBColor(scr, 0xd9d9, 0xd9d9, 0xd9d9, False);
- tPtr->tabColor = WMCreateRGBColor(scr, 0x8420, 0x8420, 0x8420, False);
+ tPtr->lightGray = scr->theme->unselectedTabHighlight;
+ tPtr->tabColor = scr->theme->unselectedTabBackground;
tPtr->font = WMRetainFont(scr->normalFont);
--
1.8.3.2
--
To unsubscribe, send mail to [email protected].