Re: [dwm] Patch. Icon for indicate layout.

From: Alexandr Gubanoff <agubanoff_AT_gmail.com>
Date: Wed, 22 Oct 2008 12:16:55 +0900

I have tried to correct this patch.

--- dwm.c 2008-09-10 04:46:17.000000000 +0900
+++ dwm.c 2008-10-22 11:41:23.998331637 +0900
@@ -117,6 +117,7 @@
 } Key;

 typedef struct {
+ const char *icon;
     const char *symbol;
     void (*arrange)(void);
 } Layout;
@@ -146,6 +147,7 @@
 static void detachstack(Client *c);
 static void die(const char *errstr, ...);
 static void drawbar(void);
+static void drawicon(const char *file, unsigned long col[ColLast]);
 static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long
col[ColLast]);
 static void drawtext(const char *text, unsigned long col[ColLast], Bool
invert);
 static void enternotify(XEvent *e);
@@ -208,6 +210,7 @@
 static int screen;
 static int sx, sy, sw, sh; /* X display screen geometry x, y, width, height
*/
 static int by, bh, blw; /* bar geometry y, height and layout symbol
width */
+static int iy, ih, iw, ix; /* icon geometry*/
 static int wx, wy, ww, wh; /* window area geometry x, y, width, height, bar
excluded */
 static unsigned int seltags = 0, sellt = 0;
 static int (*xerrorxlib)(Display *, XErrorEvent *);
@@ -511,8 +514,14 @@
         dc.x += dc.w;
     }
     if(blw > 0) {
+ if (useicons == False) {
         dc.w = blw;
         drawtext(lt[sellt]->symbol, dc.norm, False);
+ }
+ else {
+ dc.w = iw;
+ drawicon(lt[sellt]->icon, dc.sel);
+ }
         x = dc.x + dc.w;
     }
     else
@@ -538,6 +547,21 @@
 }

 void
+drawicon(const char *file, unsigned long col[ColLast]) {
+ Pixmap icon;
+ unsigned int x, y, pw, ph;
+ icon = XCreatePixmap(dpy, dc.drawable, iw, ih, 1);
+ XReadBitmapFile(dpy, dc.drawable, file, &pw, &ph, &icon, &ix, &iy);
+ x = dc.x + (iw / 2) - (pw / 2) - 1 ;
+ y = dc.y + (ih / 2) - (ph / 2) - 1;
+ XSetForeground(dpy, dc.gc, col[ColBG]);
+ XFillRectangle(dpy, dc.drawable, dc.gc, dc.x, 0, iw, ih);
+ XSetForeground(dpy, dc.gc, col[ColFG]);
+ XSetBackground(dpy, dc.gc, col[ColBG]);
+ XCopyPlane(dpy, icon, dc.drawable, dc.gc, ix, iy, iw, ih, x, y, 1);
+}
+
+void
 drawsquare(Bool filled, Bool empty, Bool invert, unsigned long
col[ColLast]) {
     int x;
     XGCValues gcv;
@@ -1307,7 +1331,7 @@
     sy = 0;
     sw = DisplayWidth(dpy, screen);
     sh = DisplayHeight(dpy, screen);
- bh = dc.h = dc.font.height + 2;
+ iw = ih = bh = dc.h = dc.font.height + 2;
     lt[0] = &layouts[0];
     lt[1] = &layouts[1 % LENGTH(layouts)];
     updategeom();

--- config.def.h 2008-09-10 04:46:17.000000000 +0900
+++ config.def.h 2008-10-22 11:42:21.201603243 +0900
@@ -1,7 +1,7 @@
 /* See LICENSE file for copyright and license details. */

 /* appearance */
-static const char font[] =
"-*-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*";
+static const char font[] =
"-*-terminus-medium-r-normal-*-10-*-*-*-*-*-*-*";
 static const char normbordercolor[] = "#cccccc";
 static const char normbgcolor[] = "#cccccc";
 static const char normfgcolor[] = "#000000";
@@ -13,6 +13,8 @@
 static Bool showbar = True; /* False means no bar */
 static Bool topbar = True; /* False means bottom bar
*/
 static Bool readin = True; /* False means do not read
stdin */
+static Bool useicons = True; /* User icons for Layout
True or False */
+

 /* tagging */
 static const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7",
"8", "9" };
@@ -29,10 +31,10 @@
 static Bool resizehints = True; /* False means respect size hints in tiled
resizals */

 static Layout layouts[] = {
- /* symbol arrange function */
- { "[]=", tile }, /* first entry is default */
- { "><>", NULL }, /* no layout function means floating behavior
*/
- { "[M]", monocle },
+ /* icon symbol arrange function */
+ { "{yuor path to icon}.xbm", "[]=", tile }, /* first entry
is default */
+ { "{yuor path to icon}.xbm", "><>", NULL }, /* no layout
function means floating behavior */
+ { "{yuor path to icon}.xbm", "[M]", monocle },
 };

 /* key definitions */

Its work =.
But, i dont have ideas as it make batter
    x = dc.x + (iw / 2) - (pw / 2) - 1 ;
    y = dc.y + (ih / 2) - (ph / 2) - 1;

2008/10/22 Alexandr Gubanoff <agubanoff_AT_gmail.com>

> Ooops =) I have forgott.
>
> Write thes line "static int iy, ix, ih = 14, iw = 14;" in variables.
>
> At me it is a line number 213.
>
>
> 2008/10/22 Henry <el.rey.de.wonns_AT_googlemail.com>
>
>> Hi,
>>
>> i like the idea but i cant try it cause i cant figure out where i{x,y,w,h}
>> should come from.
>> i guess they should describe the icons positon and size but patched
>> against a clean tarball or hg clone it dosnt work.
>> could you clearify this? id really like to try it out :)
>>
>>
>> kind regards,
>>
>> Henry
>>
>> CC dwm.c
>> dwm.c: In function 'drawbar':
>> dwm.c:522: error: 'iw' undeclared (first use in this function)
>> dwm.c:522: error: (Each undeclared identifier is reported only once
>> dwm.c:522: error: for each function it appears in.)
>> dwm.c: In function 'drawicon':
>> dwm.c:555: error: 'ix' undeclared (first use in this function)
>> dwm.c:555: error: 'iy' undeclared (first use in this function)
>> dwm.c:558: error: 'iw' undeclared (first use in this function)
>> dwm.c:558: error: 'ih' undeclared (first use in this function)
>> make: *** [dwm.o] Error 1
>>
>>
>
Received on Wed Oct 22 2008 - 03:16:55 UTC

This archive was generated by hypermail 2.2.0 : Wed Oct 22 2008 - 03:24:04 UTC