split draw rectangle function
This commit is contained in:
parent
27fb9d8189
commit
04d0b75108
|
@ -230,52 +230,55 @@ static void
|
|||
surface_draw_rect(XSurface* surf, int16_t x, int16_t y, uint16_t w,
|
||||
uint16_t h, uint16_t r, struct zr_color col)
|
||||
{
|
||||
XPoint pnts[12];
|
||||
unsigned long c = color_from_byte(&col.r);
|
||||
short xc = x + r;
|
||||
short yc = y + r;
|
||||
short wc = (short)(w - 2 * r);
|
||||
short hc = (short)(h - 2 * r);
|
||||
|
||||
XSetForeground(surf->dpy, surf->gc, c);
|
||||
pnts[0].x = x;
|
||||
pnts[0].y = yc;
|
||||
pnts[1].x = xc;
|
||||
pnts[1].y = yc;
|
||||
pnts[2].x = xc;
|
||||
pnts[2].y = y;
|
||||
if (r == 0) {
|
||||
XFillRectangle(surf->dpy, surf->drawable, surf->gc, x, y, w, h);
|
||||
} else {
|
||||
short xc = x + r;
|
||||
short yc = y + r;
|
||||
short wc = (short)(w - 2 * r);
|
||||
short hc = (short)(h - 2 * r);
|
||||
|
||||
pnts[3].x = xc + wc;
|
||||
pnts[3].y = y;
|
||||
pnts[4].x = xc + wc;
|
||||
pnts[4].y = yc;
|
||||
pnts[5].x = x + w;
|
||||
pnts[5].y = yc;
|
||||
XPoint pnts[12];
|
||||
pnts[0].x = x;
|
||||
pnts[0].y = yc;
|
||||
pnts[1].x = xc;
|
||||
pnts[1].y = yc;
|
||||
pnts[2].x = xc;
|
||||
pnts[2].y = y;
|
||||
|
||||
pnts[6].x = x + w;
|
||||
pnts[6].y = yc + hc;
|
||||
pnts[7].x = xc + wc;
|
||||
pnts[7].y = yc + hc;
|
||||
pnts[8].x = xc + wc;
|
||||
pnts[8].y = y + h;
|
||||
pnts[3].x = xc + wc;
|
||||
pnts[3].y = y;
|
||||
pnts[4].x = xc + wc;
|
||||
pnts[4].y = yc;
|
||||
pnts[5].x = x + w;
|
||||
pnts[5].y = yc;
|
||||
|
||||
pnts[9].x = xc;
|
||||
pnts[9].y = y + h;
|
||||
pnts[10].x = xc;
|
||||
pnts[10].y = yc + hc;
|
||||
pnts[11].x = x;
|
||||
pnts[11].y = yc + hc;
|
||||
pnts[6].x = x + w;
|
||||
pnts[6].y = yc + hc;
|
||||
pnts[7].x = xc + wc;
|
||||
pnts[7].y = yc + hc;
|
||||
pnts[8].x = xc + wc;
|
||||
pnts[8].y = y + h;
|
||||
|
||||
XFillPolygon(surf->dpy, surf->drawable, surf->gc, pnts, 12, Convex, CoordModeOrigin);
|
||||
XFillArc(surf->dpy, surf->drawable, surf->gc, xc + wc - r, y,
|
||||
(unsigned)r*2, (unsigned)r*2, 0 * 64, 90 * 64);
|
||||
XFillArc(surf->dpy, surf->drawable, surf->gc, x, y,
|
||||
(unsigned)r*2, (unsigned)r*2, 90 * 64, 90 * 64);
|
||||
XFillArc(surf->dpy, surf->drawable, surf->gc, x, yc + hc - r,
|
||||
(unsigned)r*2, (unsigned)2*r, 180 * 64, 90 * 64);
|
||||
XFillArc(surf->dpy, surf->drawable, surf->gc, xc + wc - r, yc + hc - r,
|
||||
(unsigned)r*2, (unsigned)2*r, -90 * 64, 90 * 64);
|
||||
pnts[9].x = xc;
|
||||
pnts[9].y = y + h;
|
||||
pnts[10].x = xc;
|
||||
pnts[10].y = yc + hc;
|
||||
pnts[11].x = x;
|
||||
pnts[11].y = yc + hc;
|
||||
|
||||
XFillPolygon(surf->dpy, surf->drawable, surf->gc, pnts, 12, Convex, CoordModeOrigin);
|
||||
XFillArc(surf->dpy, surf->drawable, surf->gc, xc + wc - r, y,
|
||||
(unsigned)r*2, (unsigned)r*2, 0 * 64, 90 * 64);
|
||||
XFillArc(surf->dpy, surf->drawable, surf->gc, x, y,
|
||||
(unsigned)r*2, (unsigned)r*2, 90 * 64, 90 * 64);
|
||||
XFillArc(surf->dpy, surf->drawable, surf->gc, x, yc + hc - r,
|
||||
(unsigned)r*2, (unsigned)2*r, 180 * 64, 90 * 64);
|
||||
XFillArc(surf->dpy, surf->drawable, surf->gc, xc + wc - r, yc + hc - r,
|
||||
(unsigned)r*2, (unsigned)2*r, -90 * 64, 90 * 64);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue