ref: 775ac48ec6a03a849d41f41da14673102be22d8c
parent: 6f4b1dc79f7ec7b1c5f3cea63d35d7fd42540d07
author: qwx <qwx@sciops.net>
date: Sat Sep 13 18:32:38 EDT 2025
libdraw: sync with upstream
--- a/sys/include/ape/draw.h
+++ b/sys/include/ape/draw.h
@@ -24,6 +24,7 @@
typedef struct RGB RGB;
typedef struct Screen Screen;
typedef struct Subfont Subfont;
+typedef long Warp[3][3];
typedef struct Theme Theme;
#pragma varargck type "R" Rectangle
@@ -183,8 +184,9 @@
struct Display
{
- QLock qlock;
- int locking; /*program is using lockdisplay */
+ QLock qlock;
+ RWLock usrlock; /* for getwindow(2) and the globals */
+ int locking; /* ignored (kept for backwards compatibility) */
int dirno;
int fd;
int reffd;
@@ -202,13 +204,13 @@
Image *transparent;
Image *image;
uchar *buf;
- int bufsize;
+ int bufsize;
uchar *bufp;
Font *defaultfont;
Subfont *defaultsubfont;
Image *windows;
Image *screenimage;
- int _isnewdisplay;
+ int _isnewdisplay;
};
struct Image
@@ -472,6 +474,8 @@
extern void fillarcop(Image*, Point, int, int, Image*, Point, int, int, Drawop);
extern void border(Image*, Rectangle, int, Image*, Point);
extern void borderop(Image*, Rectangle, int, Image*, Point, Drawop);
+extern void mkwarp(Warp, double[3][3]);
+extern void affinewarp(Image*, Rectangle, Image*, Point, Warp, int);
/*
* Font management
@@ -502,8 +506,16 @@
extern char* subfontname(char*, char*, int);
extern Subfont* _getsubfont(Display*, char*);
extern Subfont* getdefont(Display*);
-extern void lockdisplay(Display*);
+
+/*
+ * Concurrency
+ */
+extern void lockdisplay(Display*);
extern void unlockdisplay(Display*);
+extern void rlockdisplay(Display*);
+extern void runlockdisplay(Display*);
+extern void _lockdisplay(Display*);
+extern void _unlockdisplay(Display*);
/*
* Predefined
@@ -521,7 +533,7 @@
extern Image *screen;
extern Screen *_screen;
extern int _cursorfd;
-extern void _setdrawop(Display*, Drawop);
+extern uchar* _bufimageop(Display*, int, Drawop);
#define BGSHORT(p) ((p)[0]|((p)[1]<<8))
#define BGLONG(p) ((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24))
--- a/sys/include/draw.h
+++ b/sys/include/draw.h
@@ -14,6 +14,7 @@
typedef struct RGB RGB;
typedef struct Screen Screen;
typedef struct Subfont Subfont;
+typedef long Warp[3][3];
typedef struct Theme Theme;
#pragma incomplete Mouse
@@ -176,7 +177,8 @@
struct Display
{
QLock qlock;
- int locking; /*program is using lockdisplay */
+ RWLock usrlock; /* for getwindow(2) and the globals */
+ int locking; /* ignored (kept for backwards compatibility) */
int dirno;
int fd;
int reffd;
@@ -466,6 +468,8 @@
extern void fillarcop(Image*, Point, int, int, Image*, Point, int, int, Drawop);
extern void border(Image*, Rectangle, int, Image*, Point);
extern void borderop(Image*, Rectangle, int, Image*, Point, Drawop);
+extern void mkwarp(Warp, double[3][3]);
+extern void affinewarp(Image*, Rectangle, Image*, Point, Warp, int);
/*
* Font management
@@ -496,8 +500,16 @@
extern char* subfontname(char*, char*, int);
extern Subfont* _getsubfont(Display*, char*);
extern Subfont* getdefont(Display*);
-extern void lockdisplay(Display*);
+
+/*
+ * Concurrency
+ */
+extern void lockdisplay(Display*);
extern void unlockdisplay(Display*);
+extern void rlockdisplay(Display*);
+extern void runlockdisplay(Display*);
+extern void _lockdisplay(Display*);
+extern void _unlockdisplay(Display*);
/*
* Predefined
@@ -515,7 +527,7 @@
extern Image *screen;
extern Screen *_screen;
extern int _cursorfd;
-extern void _setdrawop(Display*, Drawop);
+extern uchar* _bufimageop(Display*, int, Drawop);
#define BGSHORT(p) ((p)[0]|((p)[1]<<8))
#define BGLONG(p) ((p)[0]|((p)[1]<<8)|((p)[2]<<16)|((p)[3]<<24))
--- a/sys/src/libdraw/emenuhit.c
+++ b/sys/src/libdraw/emenuhit.c
@@ -61,6 +61,8 @@
freeimage(high);
freeimage(bord);
freeimage(menutxt);
+ freeimage(htext);
+ freeimage(text);
back = display->white;
high = display->black;
bord = display->black;
@@ -131,10 +133,10 @@
int i;
paintitem(menu, textr, off, lasti, 1, save, nil);
- flushimage(display, 1); /* in case display->locking is set */
+ flushimage(display, 1);
*m = emouse();
while(m->buttons & (1<<(but-1))){
- flushimage(display, 1); /* in case display->locking is set */
+ flushimage(display, 1);
*m = emouse();
i = menusel(textr, m->xy);
if(i != -1 && i == lasti)
@@ -171,8 +173,7 @@
if(r.max.y < r.min.y+2)
r.max.y = r.min.y+2;
border(screen, r, 1, bord, ZP);
- if(menutxt)
- draw(screen, insetrect(r, 1), menutxt, nil, ZP);
+ draw(screen, insetrect(r, 1), menutxt, nil, ZP);
}
int
@@ -273,7 +274,7 @@
menuscrollpaint(scrollr, off, nitem, nitemdrawn);
}
}
- flushimage(display, 1); /* in case display->locking is set */
+ flushimage(display, 1);
*m = emouse();
}
}
--- a/sys/src/libdraw/menuhit.c
+++ b/sys/src/libdraw/menuhit.c
@@ -62,6 +62,8 @@
freeimage(high);
freeimage(bord);
freeimage(menutxt);
+ freeimage(text);
+ freeimage(htext);
back = display->white;
high = display->black;
bord = display->black;
@@ -168,8 +170,7 @@
if(r.max.y < r.min.y+2)
r.max.y = r.min.y+2;
border(m, r, 1, bord, ZP);
- if(menutxt)
- draw(m, insetrect(r, 1), menutxt, nil, ZP);
+ draw(m, insetrect(r, 1), menutxt, nil, ZP);
}
int
--- a/sys/src/libdraw/mkfile
+++ b/sys/src/libdraw/mkfile
@@ -63,6 +63,8 @@
writecolmap.$O\
writeimage.$O\
writesubfont.$O\
+ warp.$O\
+ mkwarp.$O\
HFILES=\
/sys/include/draw.h\
--
⑨