ref: 1ffcdbab88aca698161b34096934e196370b3a21
parent: e4af9bc39296b6e1080e905151aa8f981770e49e
author: cinap_lenrek <[email protected]>
date: Sat Nov 8 06:48:38 EST 2014
dont flush screen when hiding software cursor we can avoid some flickering when removing the software cursor from the shadow framebuffer by avoiding the flushscreenimage() call. once the cursor is redrawn, we flush the combined rect of its old and new position in one go.
--- a/sys/src/9/port/swcursor.c
+++ b/sys/src/9/port/swcursor.c
@@ -42,7 +42,6 @@
return;
swvisible = 0;
memimagedraw(gscreen, swrect, swback, ZP, memopaque, ZP, S);
- flushmemscreen(swrect);
}
void
@@ -57,6 +56,8 @@
void
swcursordraw(Point p)
{
+ Rectangle flushr;
+
if(swvisible)
return;
if(swback == nil || swimg1 == nil || swmask1 == nil || gscreen == nil)
@@ -63,10 +64,12 @@
return;
assert(!canqlock(&drawlock));
swvispt = addpt(swoffset, p);
+ flushr = swrect;
swrect = rectaddpt(Rect(0,0,16,16), swvispt);
+ combinerect(&flushr, swrect);
memimagedraw(swback, swback->r, gscreen, swvispt, memopaque, ZP, S);
memimagedraw(gscreen, swrect, swimg1, ZP, swmask1, ZP, SoverD);
- flushmemscreen(swrect);
+ flushmemscreen(flushr);
swvisible = 1;
}