diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-03-23 14:34:10 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-03-23 14:34:10 +0100 |
commit | 140d0e7efff27c8e0522a2c20bd01abf9eb34499 (patch) | |
tree | eb10b8866fc97ecb0d168ff23a7b2d471231503f /sys/src/cmd/mothra/libpanel | |
parent | 2d5aecc845ace18efd730e0f207c31f9aca60afe (diff) |
mothra: clip to intersection of r and b->clipr when drawing panels
Diffstat (limited to 'sys/src/cmd/mothra/libpanel')
-rw-r--r-- | sys/src/cmd/mothra/libpanel/draw.c | 6 | ||||
-rw-r--r-- | sys/src/cmd/mothra/libpanel/rtext.c | 8 |
2 files changed, 10 insertions, 4 deletions
diff --git a/sys/src/cmd/mothra/libpanel/draw.c b/sys/src/cmd/mothra/libpanel/draw.c index 3aa9bb57b..7dbd19fc1 100644 --- a/sys/src/cmd/mothra/libpanel/draw.c +++ b/sys/src/cmd/mothra/libpanel/draw.c @@ -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){ Rectangle save; Point ul, offs; - save=b->clipr; - replclipr(b, b->repl, r); ul=r.min; offs=subpt(subpt(r.max, r.min), pl_iconsize(flags, s)); 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 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); else string(b, ul, pl_black, ZP, font, s); replclipr(b, b->repl, save); diff --git a/sys/src/cmd/mothra/libpanel/rtext.c b/sys/src/cmd/mothra/libpanel/rtext.c index 0f03c5212..4a33e406f 100644 --- a/sys/src/cmd/mothra/libpanel/rtext.c +++ b/sys/src/cmd/mothra/libpanel/rtext.c @@ -153,8 +153,13 @@ void pl_rtdraw(Image *b, Rectangle r, Rtext *t, int yoffs){ Point offs; Rectangle dr; Rectangle cr; + Rectangle xr; + + xr=r; cr=b->clipr; - replclipr(b, b->repl, r); + if(!rectclip(&xr, cr)) + return; + replclipr(b, b->repl, xr); pl_clr(b, r); offs=subpt(r.min, Pt(0, yoffs)); 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 && dr.min.y<r.max.y){ 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); if(t->hot) border(b, insetrect(dr, -2), 1, display->black, ZP); } |