WINGs/wframe: remove X11 GC/region clipping from paintFrame
Replace XClearWindow with render backend fill_rect. Remove X11 region-based clip masking around relief drawing — the title is drawn on top afterward, making the clip unnecessary. Eliminates WMColorGC/XCreateGC crash in Wayland mode.
This commit is contained in:
parent
685eb42ecc
commit
4f462357e1
|
|
@ -60,8 +60,11 @@ static void repaintFrame(Frame * fPtr)
|
|||
{
|
||||
W_View *view = fPtr->view;
|
||||
W_Screen *scrPtr = view->screen;
|
||||
const W_RenderBackend *R = scrPtr->renderBackend;
|
||||
void *rctx = scrPtr->renderBackendCtx;
|
||||
|
||||
XClearWindow(scrPtr->display, view->window);
|
||||
R->fill_rect(rctx, (WMDrawable)view->window, view->backColor,
|
||||
0, 0, view->size.width, view->size.height);
|
||||
paintFrame(fPtr);
|
||||
}
|
||||
|
||||
|
|
@ -70,7 +73,6 @@ static void paintFrame(Frame * fPtr)
|
|||
W_View *view = fPtr->view;
|
||||
W_Screen *scrPtr = view->screen;
|
||||
WMFont *font = scrPtr->normalFont;
|
||||
Display *display = scrPtr->display;
|
||||
int tx, ty, tw, th, tlen;
|
||||
int fy, fh;
|
||||
Bool drawTitle;
|
||||
|
|
@ -137,51 +139,9 @@ static void paintFrame(Frame * fPtr)
|
|||
drawTitle = False;
|
||||
}
|
||||
|
||||
{
|
||||
XRectangle rect;
|
||||
Region region, tmp;
|
||||
GC gc[4];
|
||||
int i;
|
||||
|
||||
region = XCreateRegion();
|
||||
|
||||
rect.x = 0;
|
||||
rect.y = 0;
|
||||
rect.width = view->size.width;
|
||||
rect.height = view->size.height;
|
||||
XUnionRectWithRegion(&rect, region, region);
|
||||
if (drawTitle) {
|
||||
tmp = XCreateRegion();
|
||||
rect.x = tx;
|
||||
rect.y = ty;
|
||||
rect.width = tw;
|
||||
rect.height = th;
|
||||
XUnionRectWithRegion(&rect, tmp, tmp);
|
||||
XSubtractRegion(region, tmp, region);
|
||||
XDestroyRegion(tmp);
|
||||
}
|
||||
gc[0] = WMColorGC(scrPtr->black);
|
||||
gc[1] = WMColorGC(scrPtr->darkGray);
|
||||
gc[2] = WMColorGC(scrPtr->gray);
|
||||
gc[3] = WMColorGC(scrPtr->white);
|
||||
|
||||
if (drawTitle) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
XSetRegion(display, gc[i], region);
|
||||
}
|
||||
}
|
||||
XDestroyRegion(region);
|
||||
|
||||
W_DrawReliefWithGC(scrPtr, (WMDrawable)view->window, 0, fy, view->size.width, fh,
|
||||
fPtr->flags.relief, scrPtr->black, scrPtr->darkGray,
|
||||
scrPtr->gray, scrPtr->white);
|
||||
|
||||
if (drawTitle) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
XSetClipMask(display, gc[i], None);
|
||||
}
|
||||
}
|
||||
}
|
||||
W_DrawReliefWithGC(scrPtr, (WMDrawable)view->window, 0, fy, view->size.width, fh,
|
||||
fPtr->flags.relief, scrPtr->black, scrPtr->darkGray,
|
||||
scrPtr->gray, scrPtr->white);
|
||||
|
||||
if (drawTitle) {
|
||||
/* can't draw AA text over and over again because it gets messed */
|
||||
|
|
|
|||
Loading…
Reference in New Issue