git: 9front

Download patch

ref: 7b3bb0ea7536e695061d68d5d0710a6f0e7aa3bc
parent: 15f435b8a81ca28fa7285eac9f2d0f7589daf79e
author: rodri <rgl@antares-labs.eu>
date: Thu Jan 22 12:34:00 EST 2026

libmemdraw: use the Fsimple flag to tag and test for 1x1 images

--- a/sys/src/libmemdraw/alloc.c
+++ b/sys/src/libmemdraw/alloc.c
@@ -46,7 +46,7 @@
 
 	i->r = r;
 	i->clipr = r;
-	i->flags = 0;
+	i->flags = Dx(r) == 1 && Dy(r) == 1? Fsimple: 0;
 	i->layer = nil;
 	i->cmap = memdefcmap;
 	if(memsetchan(i, chan) < 0){
--- a/sys/src/libmemdraw/draw.c
+++ b/sys/src/libmemdraw/draw.c
@@ -122,7 +122,7 @@
 	par.state = 0;
 	if(src->flags&Frepl){
 		par.state |= Replsrc;
-		if(Dx(src->r)==1 && Dy(src->r)==1){
+		if(src->flags & Fsimple){
 			par.sval = pixelbits(src, src->r.min);
 			par.state |= Simplesrc;
 			par.srgba = imgtorgba(src, par.sval);
@@ -134,7 +134,7 @@
 
 	if(mask->flags & Frepl){
 		par.state |= Replmask;
-		if(Dx(mask->r)==1 && Dy(mask->r)==1){
+		if(mask->flags & Fsimple){
 			par.mval = pixelbits(mask, mask->r.min);
 			if(par.mval == 0 && (op&DoutS))
 				return;	/* no-op successfully handled */
@@ -1875,7 +1875,10 @@
 static Calcfn*
 boolcopyfn(Memimage *img, Memimage *mask)
 {
-	if(mask->flags&Frepl && Dx(mask->r)==1 && Dy(mask->r)==1 && pixelbits(mask, mask->r.min)==~0)
+	int m;
+
+	m = Frepl|Fsimple;
+	if((mask->flags&m)==m && pixelbits(mask, mask->r.min)==~0)
 		return boolmemmove;
 
 	switch(img->depth){
@@ -2063,7 +2066,7 @@
 	 * destination format and just replicate with memset.
 	 */
 	m = Simplesrc|Simplemask|Fullmask;
-	if((par->state&m)==m && (par->srgba&0xFF) == 0xFF && (op ==S || op == SoverD)){
+	if((par->state&m)==m && (par->srgba&0xFF) == 0xFF && (op == S || op == SoverD)){
 		int d, dwid, ppb, np, nb;
 		uchar *dp, lm, rm;
 
--