From 137a571fece4b21bfca24b97e76d6b1a8151a477 Mon Sep 17 00:00:00 2001 From: Doug Torrance Date: Mon, 2 Jun 2014 14:11:38 -0600 Subject: [PATCH] WPrefs: set IconTitleColor, IconTitleBack, ClipTitleColor, and CClipTitleColor This patch adds the ability to set the colors for IconTitleColor, IconTitleBack, ClipTitleColor, and CClipTitleColor, the only four colors set by setstyle which previously were not configurable using WPrefs. The icon in the preview window appears as a miniwindow if IconTitleColor or IconTitleBack are being configured and as the clip if ClipTitleColor or CClipTitleColor are being configured. --- WPrefs.app/Appearance.c | 179 +++++++++++++++++++++++++++++++--------- 1 file changed, 138 insertions(+), 41 deletions(-) diff --git a/WPrefs.app/Appearance.c b/WPrefs.app/Appearance.c index 2d5acbe6..8d5020c5 100644 --- a/WPrefs.app/Appearance.c +++ b/WPrefs.app/Appearance.c @@ -60,7 +60,7 @@ typedef struct _Panel { WMFrame *colF; WMPopUpButton *colP; - WMColor *colors[14]; + WMColor *colors[15]; WMColorWell *colW; @@ -354,11 +354,11 @@ static const struct { { "HighlightTextColor", "black" }, { "FrameFocusedBorderColor", "black" }, { "FrameBorderColor", "black" }, - { "FrameSelectedBorderColor", "white" }/* , */ - /* { "IconTitleColor", "white" }, */ - /* { "IconTitleBack", "black" }, */ - /* { "ClipTitleColor", "black" }, */ - /* { "CClipTitleColor", "#454045" } */ + { "FrameSelectedBorderColor", "white" }, + { "IconTitleColor", "white" }, + { "IconTitleBack", "black" }, + { "ClipTitleColor", "black" }, + { "CClipTitleColor", "#454045" } }; static WMRect previewPositions[] = { @@ -853,9 +853,6 @@ static void updatePreviewBox(_Panel * panel, int elements) titem = (TextureListItem *) item->clientData; renderPreview(panel, gc, PICON, titem->ispixmap ? 0 : RBEV_RAISED3); - - colorUpdate |= 1 << ICONT_COL | 1 << ICONB_COL | - 1 << CLIP_COL | 1 << CCLIP_COL; } if (colorUpdate) @@ -1384,10 +1381,10 @@ static void changeColorPage(WMWidget * w, void *data) {-22, -21}, {-22, -21}, {-22, -21}, - {130, 140}, - {130, 140}, - {130, 140}, - {130, 140} + {130, 132}, + {130, 132}, + {130, 132}, + {130, 132} }; if (panel->preview) { @@ -1407,7 +1404,8 @@ static void changeColorPage(WMWidget * w, void *data) if (panel->preview) WMDrawPixmap(panel->hand, panel->preview, positions[section].x, positions[section].y); - section = WMGetPopUpButtonSelectedItem(panel->colP); + if (section >= ICONT_COL) + updateColorPreviewBox(panel, 1 << section); WMSetColorWellColor(panel->colW, panel->colors[section]); } @@ -1563,28 +1561,129 @@ static void updateColorPreviewBox(_Panel * panel, int elements) 29, 9, 190, 20); } - /* - if (elements & (1 << ICONT_COL)) { - WRITE(_("Focused Window"), panel->colors[ICONT_COL], - panel->boldFont, - 155, 130, 64); + if (elements & (1 << ICONT_COL) || elements & (1 << ICONB_COL)) { + RColor rgb; + RHSVColor hsv, hsv2; + int v; + WMColor *light, *dim; + + updatePreviewBox(panel, 1 << PICON); + + rgb.red = WMRedComponentOfColor(panel->colors[ICONB_COL]) >> 8; + rgb.green = WMGreenComponentOfColor(panel->colors[ICONB_COL]) >> 8; + rgb.blue = WMBlueComponentOfColor(panel->colors[ICONB_COL]) >> 8; + RRGBtoHSV(&rgb, &hsv); + RHSVtoRGB(&hsv, &rgb); + hsv2 = hsv; + + v = hsv.value * 16 / 10; + hsv.value = (v > 255 ? 255 : v); + RHSVtoRGB(&hsv, &rgb); + light = WMCreateRGBColor(scr, rgb.red << 8, rgb.green << 8, rgb.blue << 8, False); + + hsv2.value = hsv2.value / 2; + RHSVtoRGB(&hsv2, &rgb); + dim = WMCreateRGBColor(scr, rgb.red << 8, rgb.green << 8, rgb.blue << 8, False); + + XFillRectangle(dpy, d, WMColorGC(panel->colors[ICONB_COL]), 156, 131, 62, 11); + XDrawLine(dpy, d, WMColorGC(light), 155, 130, 155, 142); + XDrawLine(dpy, d, WMColorGC(light), 156, 130, 217, 130); + XDrawLine(dpy, d, WMColorGC(dim), 218, 130, 218, 142); + + paintText(scr, d, panel->colors[ICONT_COL], + panel->smallFont, 155, 130, 64, 13, WALeft, + _("Icon Text")); + } - if (elements & (1 << ICONB_COL)) { - WRITE(_("Focused Window"), panel->colors[ICONB_COL], - panel->boldFont, - 0, 0, 30); - } - if (elements & (1 << CLIP_COL)) { - WRITE(_("Focused Window"), panel->colors[CLIP_COL], - panel->boldFont, - 0, 0, 30); - } - if (elements & (1 << CCLIP_COL)) { - WRITE(_("Focused Window"), panel->colors[CCLIP_COL], - panel->boldFont, - 0, 0, 30); - } - */ + + if (elements & (1 << CLIP_COL) || elements & (1 << CCLIP_COL)) { + Pixmap pix; + RColor black; + RColor dark; + RColor light; + RImage *tile; + TextureListItem *titem; + WMListItem *item; + XPoint p[4]; + + item = WMGetListItem(panel->texLs, panel->textureIndex[PICON]); + titem = (TextureListItem *) item->clientData; + + pix = renderTexture(scr, titem->prop, 64, 64, NULL, titem->ispixmap ? 0 : RBEV_RAISED3); + tile = RCreateImageFromDrawable(WMScreenRContext(scr), pix, None); + + black.alpha = 255; + black.red = black.green = black.blue = 0; + + dark.alpha = 0; + dark.red = dark.green = dark.blue = 60; + + light.alpha = 0; + light.red = light.green = light.blue = 80; + + /* top right */ + ROperateLine(tile, RSubtractOperation, 64 - 1 - 23, 0, 64 - 2, 23 - 1, &dark); + RDrawLine(tile, 64 - 1 - 23 - 1, 0, 64 - 1, 23 + 1, &black); + ROperateLine(tile, RAddOperation, 64 - 1 - 23, 2, 64 - 3, 23, &light); + + /* arrow bevel */ + ROperateLine(tile, RSubtractOperation, 64 - 7 - (23 - 15), 4, 64 - 5, 4, &dark); + ROperateLine(tile, RSubtractOperation, 64 - 6 - (23 - 15), 5, 64 - 5, 6 + 23 - 15, &dark); + ROperateLine(tile, RAddOperation, 64 - 5, 4, 64 - 5, 6 + 23 - 15, &light); + + /* bottom left */ + ROperateLine(tile, RAddOperation, 2, 64 - 1 - 23 + 2, 23 - 2, 64 - 3, &dark); + RDrawLine(tile, 0, 64 - 1 - 23 - 1, 23 + 1, 64 - 1, &black); + ROperateLine(tile, RSubtractOperation, 0, 64 - 1 - 23 - 2, 23 + 1, 64 - 2, &light); + + /* arrow bevel */ + ROperateLine(tile, RSubtractOperation, 4, 64 - 7 - (23 - 15), 4, 64 - 5, &dark); + ROperateLine(tile, RSubtractOperation, 5, 64 - 6 - (23 - 15), 6 + 23 - 15, 64 - 5, &dark); + ROperateLine(tile, RAddOperation, 4, 64 - 5, 6 + 23 - 15, 64 - 5, &light); + + RConvertImage(WMScreenRContext(scr), tile, &pix); + RReleaseImage(tile); + + XCopyArea(dpy, pix, d, gc, 0, 0, 64, 64, 155, 130); + XFreePixmap(dpy, pix); + + /* top right arrow */ + p[0].x = p[3].x = 155 + 64 - 5 - (23 - 15); + p[0].y = p[3].y = 130 + 5; + p[1].x = 155 + 64 - 6; + p[1].y = 130 + 5; + p[2].x = 155 + 64 - 6; + p[2].y = 130 + 4 + 23 - 15; + + XFillPolygon(dpy, d, WMColorGC(panel->colors[CLIP_COL]), p, 3, Convex, CoordModeOrigin); + XDrawLines(dpy, d, WMColorGC(panel->colors[CLIP_COL]), p, 4, CoordModeOrigin); + + /* bottom left arrow */ + p[0].x = p[3].x = 155 + 5; + p[0].y = p[3].y = 130 + 64 - 5 - (23 - 15); + p[1].x = 155 + 5; + p[1].y = 130 + 64 - 6; + p[2].x = 155 + 4 + 23 - 15; + p[2].y = 130 + 64 - 6; + + XFillPolygon(dpy, d, WMColorGC(panel->colors[CLIP_COL]), p, 3, Convex, CoordModeOrigin); + XDrawLines(dpy, d, WMColorGC(panel->colors[CLIP_COL]), p, 4, CoordModeOrigin); + + } + + if (elements & (1 << CLIP_COL)) + paintText(scr, d, panel->colors[CLIP_COL], + panel->boldFont, 155 + 23, 130 + 64 - 15 - 3, 22, 15, WALeft, + _("Clip")); + + if (elements & (1 << CCLIP_COL)) { + paintText(scr, d, panel->colors[CCLIP_COL], + panel->boldFont, 155+2, 130 + 2, 26, 15, WALeft, _("Coll.")); + paintText(scr, d, panel->colors[CCLIP_COL], + panel->boldFont, 155 + 23, 130 + 64 - 15 - 3, 22, 15, WALeft, + _("Clip")); + } + WMRedisplayWidget(panel->prevL); } @@ -1857,12 +1956,10 @@ static void createPanel(Panel * p) WMAddPopUpButtonItem(panel->colP, _("Focused Window Border Color")); WMAddPopUpButtonItem(panel->colP, _("Window Border Color")); WMAddPopUpButtonItem(panel->colP, _("Selected Window Border Color")); - /* - WMAddPopUpButtonItem(panel->colP, _("Miniwindow Title")); - WMAddPopUpButtonItem(panel->colP, _("Miniwindow Title Back")); - WMAddPopUpButtonItem(panel->colP, _("Clip Title")); - WMAddPopUpButtonItem(panel->colP, _("Collapsed Clip Title")); - */ + WMAddPopUpButtonItem(panel->colP, _("Miniwindow Title")); + WMAddPopUpButtonItem(panel->colP, _("Miniwindow Title Back")); + WMAddPopUpButtonItem(panel->colP, _("Clip Title")); + WMAddPopUpButtonItem(panel->colP, _("Collapsed Clip Title")); WMSetPopUpButtonSelectedItem(panel->colP, 0);