shithub: riscv

Download patch

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;
 }