draw.c
changeset 344 93192711a36a
parent 342 a1901753deef
child 345 977585eb2d35
equal deleted inserted replaced
343:336d3a2c3f80 344:93192711a36a
    20 	}
    20 	}
    21 	return XTextWidth(dc.font.xfont, text, len);
    21 	return XTextWidth(dc.font.xfont, text, len);
    22 }
    22 }
    23 
    23 
    24 static void
    24 static void
    25 drawborder()
    25 drawtext(const char *text, Bool invert, Bool underline)
    26 {
    26 {
       
    27 	int x, y, w, h;
       
    28 	static char buf[256];
       
    29 	unsigned int len, olen;
       
    30 	XGCValues gcv;
    27 	XPoint points[5];
    31 	XPoint points[5];
       
    32 	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
       
    33 
       
    34 	XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
       
    35 	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
    28 	points[0].x = dc.x;
    36 	points[0].x = dc.x;
    29 	points[0].y = dc.y;
    37 	points[0].y = dc.y;
    30 	points[1].x = dc.w - 1;
    38 	points[1].x = dc.w - 1;
    31 	points[1].y = 0;
    39 	points[1].y = 0;
    32 	points[2].x = 0;
    40 	points[2].x = 0;
    33 	points[2].y = dc.h - 1;
    41 	points[2].y = dc.h - 1;
    34 	points[3].x = -(dc.w - 1);
    42 	points[3].x = -(dc.w - 1);
    35 	points[3].y = 0;
    43 	points[3].y = 0;
    36 	points[4].x = 0;
    44 	points[4].x = 0;
    37 	points[4].y = -(dc.h - 1);
    45 	points[4].y = -(dc.h - 1);
       
    46 	XSetForeground(dpy, dc.gc, dc.border);
    38 	XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious);
    47 	XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious);
    39 }
       
    40 
       
    41 static void
       
    42 drawtext(const char *text, Bool invert, Bool highlight)
       
    43 {
       
    44 	int x, y, w, h;
       
    45 	static char buf[256];
       
    46 	unsigned int len, olen;
       
    47 	DC tmp;
       
    48 	XGCValues gcv;
       
    49 	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
       
    50 
       
    51 	XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
       
    52 	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
       
    53 	XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
       
    54 	XSetForeground(dpy, dc.gc, dc.border);
       
    55 	drawborder();
       
    56 
    48 
    57 	if(!text)
    49 	if(!text)
    58 		return;
    50 		return;
    59 
    51 
    60 	w = 0;
    52 	w = 0;
    91 	else {
    83 	else {
    92 		gcv.font = dc.font.xfont->fid;
    84 		gcv.font = dc.font.xfont->fid;
    93 		XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv);
    85 		XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv);
    94 		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
    86 		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
    95 	}
    87 	}
    96 	if(highlight) {
    88 	if(underline) {
    97 		tmp = dc;
    89 		points[0].x = dc.x + (h / 2) - 1;
    98 		dc.x += 2;
    90 		points[0].y = dc.y + dc.h - 3;
    99 		dc.y += 2;
    91 		points[1].x = dc.w - h + 2;
   100 		dc.w -= 4;
    92 		points[1].y = 0;
   101 		dc.h -= 4;
    93 		XDrawLines(dpy, dc.drawable, dc.gc, points, 2, CoordModePrevious);
   102 		drawborder();
       
   103 		dc = tmp;
       
   104 	}
    94 	}
   105 }
    95 }
   106 
    96 
   107 /* extern */
    97 /* extern */
   108 
    98