draw.c
author Anselm R. Garbe <arg@10kloc.org>
Tue, 29 Aug 2006 17:31:55 +0200
changeset 384 126e78129f1d
parent 377 b1159a638d0a
child 461 9d23330a5268
permissions -rw-r--r--
configurenotify remembers max geom now, and restores this if necessary, however it accepts to touch the max size on configurerequest, this shouldn't break fillscreen apps (tested with mplayer)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     1
/*
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     2
 * (C)opyright MMIV-MMVI Anselm R. Garbe <garbeam at gmail dot com>
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     3
 * See LICENSE file for license details.
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     4
 */
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
     5
#include "dwm.h"
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     6
#include <stdio.h>
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
     7
#include <string.h>
32
082c75b937b5 removed unnecessary crap
Anselm R. Garbe <garbeam@wmii.de>
parents: 30
diff changeset
     8
#include <X11/Xlocale.h>
082c75b937b5 removed unnecessary crap
Anselm R. Garbe <garbeam@wmii.de>
parents: 30
diff changeset
     9
84
052fe7498930 ordered variables in structs and source files alphabetically
Anselm R. Garbe <garbeam@wmii.de>
parents: 79
diff changeset
    10
/* static */
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
    11
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    12
static unsigned int
173
1db04019684e changed Client->tags and Rule->tags to be Bool (I'll also try to remove the TLast enum)
arg@10ksloc.org
parents: 164
diff changeset
    13
textnw(const char *text, unsigned int len)
75
f08271b7cb20 rearranged several stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 74
diff changeset
    14
{
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    15
	XRectangle r;
123
61490330e90a cleaned up code
arg@10ksloc.org
parents: 93
diff changeset
    16
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    17
	if(dc.font.set) {
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    18
		XmbTextExtents(dc.font.set, text, len, NULL, &r);
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    19
		return r.width;
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    20
	}
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    21
	return XTextWidth(dc.font.xfont, text, len);
75
f08271b7cb20 rearranged several stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 74
diff changeset
    22
}
f08271b7cb20 rearranged several stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 74
diff changeset
    23
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    24
static void
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
    25
drawtext(const char *text, unsigned long col[ColLast], Bool highlight)
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    26
{
344
93192711a36a changing tag indicator through underline
Anselm R. Garbe <arg@10kloc.org>
parents: 342
diff changeset
    27
	int x, y, w, h;
93192711a36a changing tag indicator through underline
Anselm R. Garbe <arg@10kloc.org>
parents: 342
diff changeset
    28
	static char buf[256];
93192711a36a changing tag indicator through underline
Anselm R. Garbe <arg@10kloc.org>
parents: 342
diff changeset
    29
	unsigned int len, olen;
352
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
    30
	XGCValues gcv;
344
93192711a36a changing tag indicator through underline
Anselm R. Garbe <arg@10kloc.org>
parents: 342
diff changeset
    31
	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
93192711a36a changing tag indicator through underline
Anselm R. Garbe <arg@10kloc.org>
parents: 342
diff changeset
    32
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
    33
	XSetForeground(dpy, dc.gc, col[ColBG]);
344
93192711a36a changing tag indicator through underline
Anselm R. Garbe <arg@10kloc.org>
parents: 342
diff changeset
    34
	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
237
7f8f7f14e9cd readded border color, this sucks least
Anselm R.Garbe <arg@10ksloc.org>
parents: 236
diff changeset
    35
3
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    36
	if(!text)
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    37
		return;
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    38
218
c674a0baac63 changed signature of drawtext
arg@10ksloc.org
parents: 208
diff changeset
    39
	w = 0;
269
bf6792e3e700 fixed string cutting in draw.c
Anselm R.Garbe <arg@10ksloc.org>
parents: 262
diff changeset
    40
	olen = len = strlen(text);
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    41
	if(len >= sizeof(buf))
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    42
		len = sizeof(buf) - 1;
3
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
    43
	memcpy(buf, text, len);
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    44
	buf[len] = 0;
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    45
34
cd30cce52b78 added logo+description
Anselm R. Garbe <garbeam@wmii.de>
parents: 33
diff changeset
    46
	h = dc.font.ascent + dc.font.descent;
cd30cce52b78 added logo+description
Anselm R. Garbe <garbeam@wmii.de>
parents: 33
diff changeset
    47
	y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
cd30cce52b78 added logo+description
Anselm R. Garbe <garbeam@wmii.de>
parents: 33
diff changeset
    48
	x = dc.x + (h / 2);
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    49
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    50
	/* shorten text if necessary */
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
    51
	while(len && (w = textnw(buf, len)) > dc.w - h)
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    52
		buf[--len] = 0;
269
bf6792e3e700 fixed string cutting in draw.c
Anselm R.Garbe <arg@10ksloc.org>
parents: 262
diff changeset
    53
	if(len < olen) {
273
ffc73b32084a fixed string cutting
Anselm R.Garbe <arg@10ksloc.org>
parents: 269
diff changeset
    54
		if(len > 1)
ffc73b32084a fixed string cutting
Anselm R.Garbe <arg@10ksloc.org>
parents: 269
diff changeset
    55
			buf[len - 1] = '.';
ffc73b32084a fixed string cutting
Anselm R.Garbe <arg@10ksloc.org>
parents: 269
diff changeset
    56
		if(len > 2)
ffc73b32084a fixed string cutting
Anselm R.Garbe <arg@10ksloc.org>
parents: 269
diff changeset
    57
			buf[len - 2] = '.';
269
bf6792e3e700 fixed string cutting in draw.c
Anselm R.Garbe <arg@10ksloc.org>
parents: 262
diff changeset
    58
		if(len > 3)
273
ffc73b32084a fixed string cutting
Anselm R.Garbe <arg@10ksloc.org>
parents: 269
diff changeset
    59
			buf[len - 3] = '.';
269
bf6792e3e700 fixed string cutting in draw.c
Anselm R.Garbe <arg@10ksloc.org>
parents: 262
diff changeset
    60
	}
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    61
34
cd30cce52b78 added logo+description
Anselm R. Garbe <garbeam@wmii.de>
parents: 33
diff changeset
    62
	if(w > dc.w)
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    63
		return; /* too long */
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
    64
	gcv.foreground = col[ColFG];
352
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
    65
	if(dc.font.set) {
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
    66
		XChangeGC(dpy, dc.gc, GCForeground, &gcv);
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
    67
		XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
352
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
    68
	}
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    69
	else {
352
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
    70
		gcv.font = dc.font.xfont->fid;
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
    71
		XChangeGC(dpy, dc.gc, GCForeground | GCFont, &gcv);
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
    72
		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
    73
	}
345
977585eb2d35 found less intrusive way
Anselm R. Garbe <arg@10kloc.org>
parents: 344
diff changeset
    74
	if(highlight) {
352
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
    75
		r.x = dc.x + 2;
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
    76
		r.y = dc.y + 2;
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
    77
		r.width = r.height = 3;
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
    78
		XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    79
	}
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    80
}
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
    81
84
052fe7498930 ordered variables in structs and source files alphabetically
Anselm R. Garbe <garbeam@wmii.de>
parents: 79
diff changeset
    82
/* extern */
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    83
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    84
void
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    85
drawall()
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    86
{
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    87
	Client *c;
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    88
142
9b9deafa0508 committed a patch which fixes the hints of Jukka
arg@10ksloc.org
parents: 124
diff changeset
    89
	for(c = clients; c; c = getnext(c->next))
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    90
		drawtitle(c);
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    91
	drawstatus();
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    92
}
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    93
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    94
void
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    95
drawstatus()
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    96
{
124
75576e44c1d8 made status bar drawing more robust, implemented togglemax and togglemode, works quite well
arg@10ksloc.org
parents: 123
diff changeset
    97
	int i, x;
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    98
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
    99
	dc.x = dc.y = 0;
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
   100
178
e848966a1ac6 removed TLast tag enum, now tags is simple defined as char *[] array, the rest is calculated correctly, rules take an int array for the tags
arg@10ksloc.org
parents: 173
diff changeset
   101
	for(i = 0; i < ntags; i++) {
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
   102
		dc.w = textw(tags[i]);
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
   103
		if(seltag[i])
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
   104
			drawtext(tags[i], dc.sel, sel && sel->tags[i]);
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
   105
		else
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
   106
			drawtext(tags[i], dc.norm, sel && sel->tags[i]);
362
ba6c55e1b9b2 trying a different configuration
Anselm R. Garbe <arg@10kloc.org>
parents: 361
diff changeset
   107
		dc.x += dc.w;
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
   108
	}
362
ba6c55e1b9b2 trying a different configuration
Anselm R. Garbe <arg@10kloc.org>
parents: 361
diff changeset
   109
ba6c55e1b9b2 trying a different configuration
Anselm R. Garbe <arg@10kloc.org>
parents: 361
diff changeset
   110
	dc.w = bmw;
ba6c55e1b9b2 trying a different configuration
Anselm R. Garbe <arg@10kloc.org>
parents: 361
diff changeset
   111
	drawtext(arrange == dotile ? TILESYMBOL : FLOATSYMBOL, dc.status, False);
ba6c55e1b9b2 trying a different configuration
Anselm R. Garbe <arg@10kloc.org>
parents: 361
diff changeset
   112
361
728e74820e1d removed small 1px gap, somehow without it things feel better
Anselm R. Garbe <arg@10kloc.org>
parents: 360
diff changeset
   113
	x = dc.x + dc.w;
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
   114
	dc.w = textw(stext);
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
   115
	dc.x = bx + bw - dc.w;
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
   116
	if(dc.x < x) {
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
   117
		dc.x = x;
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
   118
		dc.w = bw - x;
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
   119
	}
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
   120
	drawtext(stext, dc.status, False);
340
ae0affabdc02 implemented right tag drawing in the status bar and titlebars
Anselm R. Garbe <arg@10kloc.org>
parents: 334
diff changeset
   121
371
fc9d35252ab4 applied sanders somepatches.patch
Anselm R. Garbe <arg@10kloc.org>
parents: 362
diff changeset
   122
	if((dc.w = dc.x - x) > bh) {
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
   123
		dc.x = x;
371
fc9d35252ab4 applied sanders somepatches.patch
Anselm R. Garbe <arg@10kloc.org>
parents: 362
diff changeset
   124
		if(sel)
fc9d35252ab4 applied sanders somepatches.patch
Anselm R. Garbe <arg@10kloc.org>
parents: 362
diff changeset
   125
			drawtext(sel->name, dc.sel, False);
fc9d35252ab4 applied sanders somepatches.patch
Anselm R. Garbe <arg@10kloc.org>
parents: 362
diff changeset
   126
		else
fc9d35252ab4 applied sanders somepatches.patch
Anselm R. Garbe <arg@10kloc.org>
parents: 362
diff changeset
   127
			drawtext(NULL, dc.norm, False);
124
75576e44c1d8 made status bar drawing more robust, implemented togglemax and togglemode, works quite well
arg@10ksloc.org
parents: 123
diff changeset
   128
	}
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
   129
	XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0);
79
aabebd6e61f3 fixed XSync handling and finished man page
Anselm R. Garbe <garbeam@wmii.de>
parents: 77
diff changeset
   130
	XSync(dpy, False);
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
   131
}
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
   132
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   133
void
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   134
drawtitle(Client *c)
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   135
{
239
e5390f8e06b9 applied sumik's multihead patch
Anselm R.Garbe <arg@10ksloc.org>
parents: 237
diff changeset
   136
	if(c == sel && issel) {
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   137
		drawstatus();
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
   138
		XUnmapWindow(dpy, c->twin);
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
   139
		XSetWindowBorder(dpy, c->win, dc.sel[ColBG]);
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   140
		return;
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   141
	}
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   142
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
   143
	XSetWindowBorder(dpy, c->win, dc.norm[ColBG]);
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
   144
	XMapWindow(dpy, c->twin);
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
   145
	dc.x = dc.y = 0;
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
   146
	dc.w = c->tw;
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
   147
	drawtext(c->name, dc.norm, False);
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
   148
	XCopyArea(dpy, dc.drawable, c->twin, dc.gc, 0, 0, c->tw, c->th, 0, 0);
79
aabebd6e61f3 fixed XSync handling and finished man page
Anselm R. Garbe <garbeam@wmii.de>
parents: 77
diff changeset
   149
	XSync(dpy, False);
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   150
}
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   151
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   152
unsigned long
74
5370ef170cc9 sanitized names
Anselm R. Garbe <garbeam@wmii.de>
parents: 73
diff changeset
   153
getcolor(const char *colstr)
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   154
{
123
61490330e90a cleaned up code
arg@10ksloc.org
parents: 93
diff changeset
   155
	Colormap cmap = DefaultColormap(dpy, screen);
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   156
	XColor color;
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   157
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   158
	XAllocNamedColor(dpy, cmap, colstr, &color, &color);
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   159
	return color.pixel;
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   160
}
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   161
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   162
void
74
5370ef170cc9 sanitized names
Anselm R. Garbe <garbeam@wmii.de>
parents: 73
diff changeset
   163
setfont(const char *fontstr)
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   164
{
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   165
	char **missing, *def;
33
e90449e03167 new stuff (some warning elimination)
Anselm R. Garbe <garbeam@wmii.de>
parents: 32
diff changeset
   166
	int i, n;
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   167
7
49e2fc9fb94f new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 5
diff changeset
   168
	missing = NULL;
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   169
	setlocale(LC_ALL, "");
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   170
	if(dc.font.set)
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   171
		XFreeFontSet(dpy, dc.font.set);
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   172
	dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   173
	if(missing) {
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   174
		while(n--)
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   175
			fprintf(stderr, "missing fontset: %s\n", missing[n]);
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   176
		XFreeStringList(missing);
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   177
		if(dc.font.set) {
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   178
			XFreeFontSet(dpy, dc.font.set);
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   179
			dc.font.set = NULL;
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   180
		}
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   181
	}
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   182
	if(dc.font.set) {
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   183
		XFontSetExtents *font_extents;
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   184
		XFontStruct **xfonts;
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   185
		char **font_names;
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   186
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   187
		dc.font.ascent = dc.font.descent = 0;
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   188
		font_extents = XExtentsOfFontSet(dc.font.set);
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   189
		n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names);
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   190
		for(i = 0, dc.font.ascent = 0, dc.font.descent = 0; i < n; i++) {
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   191
			if(dc.font.ascent < (*xfonts)->ascent)
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   192
				dc.font.ascent = (*xfonts)->ascent;
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   193
			if(dc.font.descent < (*xfonts)->descent)
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   194
				dc.font.descent = (*xfonts)->descent;
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   195
			xfonts++;
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   196
		}
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   197
	}
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   198
	else {
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   199
		if(dc.font.xfont)
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   200
			XFreeFont(dpy, dc.font.xfont);
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   201
		dc.font.xfont = NULL;
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   202
		dc.font.xfont = XLoadQueryFont(dpy, fontstr);
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   203
		if (!dc.font.xfont)
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   204
			dc.font.xfont = XLoadQueryFont(dpy, "fixed");
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   205
		if (!dc.font.xfont)
75
f08271b7cb20 rearranged several stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 74
diff changeset
   206
			eprint("error, cannot init 'fixed' font\n");
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   207
		dc.font.ascent = dc.font.xfont->ascent;
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   208
		dc.font.descent = dc.font.xfont->descent;
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   209
	}
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
   210
	dc.font.height = dc.font.ascent + dc.font.descent;
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
   211
}
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   212
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   213
unsigned int
173
1db04019684e changed Client->tags and Rule->tags to be Bool (I'll also try to remove the TLast enum)
arg@10ksloc.org
parents: 164
diff changeset
   214
textw(const char *text)
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   215
{
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   216
	return textnw(text, strlen(text)) + dc.font.height;
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
   217
}