1
0
mirror of https://github.com/gryf/wmaker.git synced 2026-01-09 15:24:12 +01:00

WPrefs: Set workspace background

This patch enables users to set the workspace background (WorkspaceBack) in the
Appearance Preferences section of WPrefs.  It appears as a new item in the
popup menu in the Texture tab, in the list of textures below, and a preview
appears in the background of the preview panel on the left.
This commit is contained in:
Doug Torrance
2014-05-11 23:05:43 -05:00
committed by Carlos R. Mafra
parent a325624b4a
commit 66556c421d

View File

@@ -108,6 +108,7 @@ typedef struct _Panel {
Pixmap preview;
Pixmap previewNoText;
Pixmap previewBack;
char *fprefix;
} _Panel;
@@ -303,7 +304,8 @@ static const struct {
{ "ResizebarBack", "(solid, gray)", N_("[Resizebar]") },
{ "MenuTitleBack", "(solid, black)", N_("[Menu Title]") },
{ "MenuTextBack", "(solid, gray)", N_("[Menu Item]") },
{ "IconBack", "(solid, gray)", N_("[Icon]") }
{ "IconBack", "(solid, gray)", N_("[Icon]") },
{ "WorkspaceBack", "(solid, black)", N_("[Background]") }
};
#define RESIZEBAR_BEVEL -1
@@ -364,6 +366,7 @@ static WMRect previewPositions[] = {
{{155, 130}, {64, 64}}
};
#define PBACKGROUND 7
#define EVERYTHING 0xff
static WMRect previewColorPositions[] = {
@@ -755,21 +758,32 @@ static void updatePreviewBox(_Panel * panel, int elements)
gc = XCreateGC(dpy, WMWidgetXID(panel->parent), 0, NULL);
if (panel->preview == None) {
WMColor *color;
WMPixmap *p;
panel->previewNoText = XCreatePixmap(dpy, WMWidgetXID(panel->parent),
240 - 4, 215 - 4, WMScreenDepth(scr));
panel->previewBack = XCreatePixmap(dpy, WMWidgetXID(panel->parent),
240 - 4, 215 - 4, WMScreenDepth(scr));
p = WMCreatePixmap(scr, 240 - 4, 215 - 4, WMScreenDepth(scr), False);
panel->preview = WMGetPixmapXID(p);
WMSetLabelImage(panel->prevL, p);
WMReleasePixmap(p);
}
if (elements & (1 << PBACKGROUND)) {
Pixmap tmp;
TextureListItem *titem;
WMListItem *item;
color = WMCreateRGBColor(scr, 0x5100, 0x5100, 0x7100, True);
XFillRectangle(dpy, panel->preview, WMColorGC(color), 0, 0, 240 - 4, 215 - 4);
XFillRectangle(dpy, panel->previewNoText, WMColorGC(color), 0, 0, 240 - 4, 215 - 4);
WMReleaseColor(color);
item = WMGetListItem(panel->texLs,
panel->textureIndex[PBACKGROUND]);
titem = (TextureListItem *) item->clientData;
tmp = renderTexture(scr, titem->prop, 240 - 4, 215 - 4, NULL, 0);
XCopyArea(dpy, tmp, panel->preview, gc, 0, 0, 240 - 4, 215 -4 , 0, 0);
XCopyArea(dpy, tmp, panel->previewNoText, gc, 0, 0, 240 - 4, 215 -4 , 0, 0);
XCopyArea(dpy, tmp, panel->previewBack, gc, 0, 0, 240 - 4, 215 -4 , 0, 0);
XFreePixmap(dpy, tmp);
}
if (elements & (1 << PFOCUSED)) {
@@ -966,8 +980,12 @@ static void okEditTexture(void *data)
WMRedisplayWidget(panel->texLs);
if (titem->selectedFor)
updatePreviewBox(panel, titem->selectedFor);
if (titem->selectedFor) {
if (titem->selectedFor & (1 << PBACKGROUND))
updatePreviewBox(panel, EVERYTHING);
else
updatePreviewBox(panel, titem->selectedFor);
}
changePage(panel->secP, panel);
}
@@ -1097,12 +1115,14 @@ static void changePage(WMWidget * w, void *data)
WMSetListPosition(panel->texLs, panel->textureIndex[section] - 2);
}
{
WMColor *color;
GC gc;
color = WMCreateRGBColor(scr, 0x5100, 0x5100, 0x7100, True);
XFillRectangle(rc->dpy, panel->preview, WMColorGC(color),
positions[panel->oldsection].x, positions[panel->oldsection].y, 22, 22);
WMReleaseColor(color);
gc = XCreateGC(rc->dpy, WMWidgetXID(panel->parent), 0, NULL);
XCopyArea(rc->dpy, panel->previewBack, panel->preview, gc,
positions[panel->oldsection].x,
positions[panel->oldsection].y, 22, 22 ,
positions[panel->oldsection].x,
positions[panel->oldsection].y);
}
if (w) {
panel->oldsection = section;
@@ -1206,7 +1226,10 @@ static void textureDoubleClick(WMWidget * w, void *data)
WMRedisplayWidget(panel->texLs);
updatePreviewBox(panel, 1 << section);
if (section == PBACKGROUND)
updatePreviewBox(panel, EVERYTHING);
else
updatePreviewBox(panel, 1 << section);
}
static void paintListItem(WMList * lPtr, int index, Drawable d, char *text, int state, WMRect * rect)
@@ -1380,12 +1403,14 @@ static void changeColorPage(WMWidget * w, void *data)
};
if (panel->preview) {
WMColor *color;
GC gc;
color = WMCreateRGBColor(scr, 0x5100, 0x5100, 0x7100, True);
XFillRectangle(rc->dpy, panel->preview, WMColorGC(color),
positions[panel->oldcsection].x, positions[panel->oldcsection].y, 22, 22);
WMReleaseColor(color);
gc = XCreateGC(rc->dpy, WMWidgetXID(panel->parent), 0, NULL);
XCopyArea(rc->dpy, panel->previewBack, panel->preview, gc,
positions[panel->oldcsection].x,
positions[panel->oldcsection].y, 22, 22 ,
positions[panel->oldcsection].x,
positions[panel->oldcsection].y);
}
if (w) {
section = WMGetPopUpButtonSelectedItem(panel->colP);
@@ -1668,8 +1693,8 @@ static void createPanel(Panel * p)
WMAddPopUpButtonItem(panel->secP, _("Titlebar of Menus"));
WMAddPopUpButtonItem(panel->secP, _("Menu Items"));
WMAddPopUpButtonItem(panel->secP, _("Icon Background"));
/* WMAddPopUpButtonItem(panel->secP, _("Workspace Backgrounds"));
*/
WMAddPopUpButtonItem(panel->secP, _("Workspace Background"));
WMSetPopUpButtonSelectedItem(panel->secP, 0);
WMSetPopUpButtonAction(panel->secP, changePage, panel);
@@ -2044,7 +2069,7 @@ static void prepareForClose(_Panel * panel)
textureList = WMCreatePLArray(NULL, NULL);
/* store list of textures */
for (i = 7; i < WMGetListNumberOfRows(panel->texLs); i++) {
for (i = 8; i < WMGetListNumberOfRows(panel->texLs); i++) {
item = WMGetListItem(panel->texLs, i);
titem = (TextureListItem *) item->clientData;