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