mothra: clip to intersection of r and b->clipr when drawing panels
parent
2d5aecc845
commit
140d0e7eff
|
@ -152,8 +152,6 @@ void pl_interior(int state, Point *ul, Point *size){
|
||||||
void pl_drawicon(Image *b, Rectangle r, int stick, int flags, Icon *s){
|
void pl_drawicon(Image *b, Rectangle r, int stick, int flags, Icon *s){
|
||||||
Rectangle save;
|
Rectangle save;
|
||||||
Point ul, offs;
|
Point ul, offs;
|
||||||
save=b->clipr;
|
|
||||||
replclipr(b, b->repl, r);
|
|
||||||
ul=r.min;
|
ul=r.min;
|
||||||
offs=subpt(subpt(r.max, r.min), pl_iconsize(flags, s));
|
offs=subpt(subpt(r.max, r.min), pl_iconsize(flags, s));
|
||||||
switch(stick){
|
switch(stick){
|
||||||
|
@ -167,6 +165,10 @@ void pl_drawicon(Image *b, Rectangle r, int stick, int flags, Icon *s){
|
||||||
case PLACES: ul.x+=offs.x/2; ul.y+=offs.y; break;
|
case PLACES: ul.x+=offs.x/2; ul.y+=offs.y; break;
|
||||||
case PLACESE: ul.x+=offs.x; ul.y+=offs.y; break;
|
case PLACESE: ul.x+=offs.x; ul.y+=offs.y; break;
|
||||||
}
|
}
|
||||||
|
save=b->clipr;
|
||||||
|
if(!rectclip(&r, save))
|
||||||
|
return;
|
||||||
|
replclipr(b, b->repl, r);
|
||||||
if(flags&BITMAP) draw(b, Rpt(ul, addpt(ul, pl_iconsize(flags, s))), s, 0, ZP);
|
if(flags&BITMAP) draw(b, Rpt(ul, addpt(ul, pl_iconsize(flags, s))), s, 0, ZP);
|
||||||
else string(b, ul, pl_black, ZP, font, s);
|
else string(b, ul, pl_black, ZP, font, s);
|
||||||
replclipr(b, b->repl, save);
|
replclipr(b, b->repl, save);
|
||||||
|
|
|
@ -153,8 +153,13 @@ void pl_rtdraw(Image *b, Rectangle r, Rtext *t, int yoffs){
|
||||||
Point offs;
|
Point offs;
|
||||||
Rectangle dr;
|
Rectangle dr;
|
||||||
Rectangle cr;
|
Rectangle cr;
|
||||||
|
Rectangle xr;
|
||||||
|
|
||||||
|
xr=r;
|
||||||
cr=b->clipr;
|
cr=b->clipr;
|
||||||
replclipr(b, b->repl, r);
|
if(!rectclip(&xr, cr))
|
||||||
|
return;
|
||||||
|
replclipr(b, b->repl, xr);
|
||||||
pl_clr(b, r);
|
pl_clr(b, r);
|
||||||
offs=subpt(r.min, Pt(0, yoffs));
|
offs=subpt(r.min, Pt(0, yoffs));
|
||||||
for(;t;t=t->next) if(!eqrect(t->r, Rect(0,0,0,0))){
|
for(;t;t=t->next) if(!eqrect(t->r, Rect(0,0,0,0))){
|
||||||
|
@ -162,7 +167,6 @@ void pl_rtdraw(Image *b, Rectangle r, Rtext *t, int yoffs){
|
||||||
if(dr.max.y>r.min.y
|
if(dr.max.y>r.min.y
|
||||||
&& dr.min.y<r.max.y){
|
&& dr.min.y<r.max.y){
|
||||||
if(t->b){
|
if(t->b){
|
||||||
// bitblt(b, dr.min, t->b, t->b->r, S|D);
|
|
||||||
draw(b, Rpt(dr.min, addpt(dr.min, subpt(t->b->r.max, t->b->r.min))), t->b, 0, t->b->r.min);
|
draw(b, Rpt(dr.min, addpt(dr.min, subpt(t->b->r.max, t->b->r.min))), t->b, 0, t->b->r.min);
|
||||||
if(t->hot) border(b, insetrect(dr, -2), 1, display->black, ZP);
|
if(t->hot) border(b, insetrect(dr, -2), 1, display->black, ZP);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue