add icons

git-svn-id: http://svn2.nishi.boats/svn/milsko/trunk@258 b9cfdab3-6d41-4d17-bbe4-086880011989
This commit is contained in:
Nishi 2025-10-11 07:25:16 +00:00
commit 83eda35643
13 changed files with 206 additions and 159 deletions

View file

@ -84,6 +84,7 @@ struct _MwWidget {
int prop_event; int prop_event;
void* internal; void* internal;
void* opaque;
MwIntegerKeyValue* integer; MwIntegerKeyValue* integer;
MwTextKeyValue* text; MwTextKeyValue* text;

BIN
resource/icon/info.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 B

BIN
resource/icon/note.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 444 B

BIN
resource/icon/question.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

BIN
resource/icon/warning.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 B

View file

@ -275,13 +275,19 @@ MwLLPixmap MwLLCreatePixmap(MwLL handle, unsigned char* data, int width, int hei
if(r->use_shm) { if(r->use_shm) {
r->image = XShmCreateImage(handle->display, DefaultVisual(handle->display, DefaultScreen(handle->display)), 24, ZPixmap, NULL, &r->shm, width, height); r->image = XShmCreateImage(handle->display, DefaultVisual(handle->display, DefaultScreen(handle->display)), 24, ZPixmap, NULL, &r->shm, width, height);
free(d);
r->shm.shmid = shmget(IPC_PRIVATE, r->image->bytes_per_line * height, IPC_CREAT | 0777); r->shm.shmid = shmget(IPC_PRIVATE, r->image->bytes_per_line * height, IPC_CREAT | 0777);
if(r->shm.shmid == -1) {
XDestroyImage(r->image);
r->use_shm = 0;
} else {
free(d);
r->shm.shmaddr = d = r->image->data = shmat(r->shm.shmid, 0, 0); r->shm.shmaddr = d = r->image->data = shmat(r->shm.shmid, 0, 0);
r->shm.readOnly = False; r->shm.readOnly = False;
XShmAttach(handle->display, &r->shm); XShmAttach(handle->display, &r->shm);
} else { }
}
if(!r->use_shm) {
r->image = XCreateImage(handle->display, DefaultVisual(handle->display, DefaultScreen(handle->display)), 24, ZPixmap, 0, d, width, height, 32, width * 4); r->image = XCreateImage(handle->display, DefaultVisual(handle->display, DefaultScreen(handle->display)), 24, ZPixmap, 0, d, width, height, 32, width * 4);
} }

View file

@ -368,7 +368,7 @@ void MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, int
MwRect r; MwRect r;
sx = point->x; sx = point->x;
sy = point->y - FontHeight * FontScale / 2; sy = point->y - MwTextHeight(handle, text) / 2;
if(align == MwALIGNMENT_CENTER) { if(align == MwALIGNMENT_CENTER) {
sx -= strlen(text) * FontWidth * FontScale / 2; sx -= strlen(text) * FontWidth * FontScale / 2;
@ -382,6 +382,10 @@ void MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, int
if(out >= 0x80) out = 0; if(out >= 0x80) out = 0;
if(out == '\n') {
sx = 0;
sy += FontHeight * FontScale;
} else {
for(y = 0; y < FontHeight; y++) { for(y = 0; y < FontHeight; y++) {
for(x = 0; x < FontWidth; x++) { for(x = 0; x < FontWidth; x++) {
r.x = sx + x * FontScale; r.x = sx + x * FontScale;
@ -397,6 +401,7 @@ void MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, int
sx += FontWidth * FontScale; sx += FontWidth * FontScale;
} }
} }
}
int MwTextWidth(MwWidget handle, const char* text) { int MwTextWidth(MwWidget handle, const char* text) {
(void)handle; (void)handle;
@ -405,10 +410,20 @@ int MwTextWidth(MwWidget handle, const char* text) {
} }
int MwTextHeight(MwWidget handle, const char* text) { int MwTextHeight(MwWidget handle, const char* text) {
int c = 1;
int i = 0;
(void)handle; (void)handle;
(void)text; (void)text;
return FontHeight * FontScale; while(text[i] != 0) {
int out;
i += MwUTF8ToUTF32(text + i, &out);
if(out == '\n') c++;
}
return FontHeight * FontScale * c;
} }
#ifndef USE_STB_IMAGE #ifndef USE_STB_IMAGE

View file

@ -5,40 +5,40 @@
char* MwIconInfo[] = { char* MwIconInfo[] = {
/* columns rows colors chars-per-pixel */ /* columns rows colors chars-per-pixel */
"32 32 4 1 ", "32 32 4 1 ",
" c black", " c None",
". c #6632F7", ". c blue",
"X c white", "X c DarkSlateGray",
"o c None", "o c lavender",
/* pixels */ /* pixels */
"oooooooooooooooooooooooooooooooo", " ",
"ooooooooooo oooooooooooo", " ",
"ooooooooo ooooooooo", " ",
"ooooooo ......... oooooooo", " ",
"oooooo ............. oooooo", " ",
"ooooo ................ ooooo", " ..... ",
"oooo ........XX........ ooooo", " ....... ",
"ooo ........XXXX........ oooo", " .....XX ",
"ooo .........XXXX......... ooo", " XXXXX ",
"oo ..........XXXX......... ooo", " ",
"oo ...........XX........... oo", " ",
"o ......................... oo", " ...... ",
"o ...........XXXX.......... oo", " .......XX ",
"o ...........XXXX........... o", " ..........XX ",
"o ...........XXXX........... o", " XXX.....XX ",
"o ...........XXXX........... o", " .....XX ",
"o ...........XXXX........... o", " .....XX ",
"o ...........XXXX........... o", " .....XX ",
"o ...........XXXX.......... oo", " .....XX ",
"o ...........XXXX.......... oo", " .....XX ",
"oo ..........XXXX.......... oo", " .....XX ",
"oo ..........XXXX......... oo", " ....XX ",
"oo .........XXXX......... ooo", " ....XX ",
"ooo .........XXXX........ ooo", " ....XX . ",
"oooo ........XXXX....... oooo", " ....X ...XX ",
"oooo ........XX....... ooooo", " .......XXX ",
"ooooo ............... oooooo", " XXXXXXX ",
"ooooooo ........... ooooooo", " ",
"oooooooo ..... oooooooo", " ",
"oooooooooo oooooooooo", " ",
"ooooooooooooo oooooooooooooo", " ",
"oooooooooooooooooooooooooooooooo"}; " "};

View file

@ -4,41 +4,43 @@
/* XPM */ /* XPM */
char* MwIconNote[] = { char* MwIconNote[] = {
/* columns rows colors chars-per-pixel */ /* columns rows colors chars-per-pixel */
"32 32 4 1 ", "32 32 6 1 ",
" c None", " c None",
". c black", ". c red",
"X c #FCFC00", "X c white",
"o c black", "o c SlateGray",
"O c firebrick",
"+ c lavender",
/* pixels */ /* pixels */
" ", " .... ",
" ........ ",
" ..XX......o ",
" .XX.......oo ",
" ..X........Oo ",
" .XX........Ooo ",
" .X.........Ooo ",
" .X.........Ooo ",
" ...........Ooo ",
" ...........Ooo ",
" ..........Ooo ",
" ..........Ooo ",
" .........Oooo ",
" .........Ooo ",
" .........Ooo ",
" ........Oooo ",
" .......Ooo ",
" ......Oooo ",
" ......Ooo ",
" ....Oooo ",
" ....Ooo ",
" OOOooo ",
" ooo ",
" ..... ", " ..... ",
" ............ ", " .XX...Oo ",
" ......XXXXX..... ", " .XX.....Oo ",
" ....XXXXXXXXXXX... ", " .X......Ooo ",
" ...XXXXXXXXXXXXXXX... ", " ........Ooo ",
" ...XXXXXXX..XXXXXXXX... ", " ........Ooo ",
" ...XXXXXXX....XXXXXXXX.. ", " O.....Oooo ",
" ...XXXXXXXX....XXXXXXXXX.. ", " OOOOOooo ",
" ..XXXXXXXXX....XXXXXXXXX... ", " ooooo "};
" ...XXXXXXXXX....XXXXXXXXXX.. ",
" ..XXXXXXXXXX....XXXXXXXXXX.. ",
" ..XXXXXXXXXX....XXXXXXXXXXX.. ",
" ..XXXXXXXXXX....XXXXXXXXXXX.. ",
" ..XXXXXXXXXXX....XXXXXXXXXXX.. ",
" ..XXXXXXXXXXX....XXXXXXXXXXX.. ",
" ..XXXXXXXXXXX....XXXXXXXXXXX.. ",
" ..XXXXXXXXXXX....XXXXXXXXXXX.. ",
" ..XXXXXXXXXXX....XXXXXXXXXXX.. ",
" ..XXXXXXXXXX....XXXXXXXXXXX.. ",
" ..XXXXXXXXXXXXXXXXXXXXXXXXX.. ",
" ..XXXXXXXXXXX..XXXXXXXXXXX.. ",
" ..XXXXXXXXX....XXXXXXXXXX.. ",
" ..XXXXXXXXX....XXXXXXXXX.. ",
" ..XXXXXXXX....XXXXXXXX... ",
" ..XXXXXXXX..XXXXXXXX... ",
" ...XXXXXXXXXXXXXXXX... ",
" ....XXXXXXXXXXXXX... ",
" ....XXXXXXXXX.... ",
" .............. ",
" ......... ",
" "};

View file

@ -4,39 +4,43 @@
/* XPM */ /* XPM */
char* MwIconQuestion[] = { char* MwIconQuestion[] = {
/* columns rows colors chars-per-pixel */ /* columns rows colors chars-per-pixel */
"32 32 2 1 ", "32 32 6 1 ",
" c None", " c None",
". c red", ". c orange",
"X c red",
"o c firebrick",
"O c SlateGray",
"+ c lavender",
/* pixels */ /* pixels */
" ", " ",
" ....... ",
" ............. ",
" ........... ", " ........... ",
" .... ...... ", " ..XXXXXXXXXXXXX ",
" ... ...... ", " .XXXXXoooooooooXXO ",
" .... ...... ", " .XXXXoooooooooooooXO ",
" ..... ...... ", " .XXXXooooXXXXoooooooXO ",
" ..... ...... ", " .XXXXooooOOO XXooooooooO ",
" .. ...... ", " .XXXXooooOOO XXoooooooOO ",
" ....... ", " .XXXoooooOO .XXooooooOO ",
" ...... ", " .XXXooooooO .XXooooooOO ",
" ....... ", " XXXooooooOO .XXooooooOO ",
" ....... ", " XXooooooOO .XXXooooooOO ",
" ....... ", " XXooooOOO .XXooooooOOO ",
" ...... ", " XXooOOO .XXooooooOOO ",
" ..... ", " OOOOO .XXooooooOOOO ",
" .... ", " OOO .XXooooooOOOO ",
" ... ", " .XXoooooOOOOO ",
" .... ", " .XXoooooOOOO ",
" .... ", " .XXoooooOOOO ",
" ..... ", " .XXooooOOOO ",
" ...... ", " XXoooOOOO ",
" ...... ", " XXoOOOO ",
" .... ", " OOOOO ",
" ", " .XXooO ",
" .. ", " .X.XXoo ",
" ...... ", " .X.X.XXoo ",
" ...... ", " .XX.XXXooO ",
" ...... ", " XXXXXXooOO ",
" .... ", " XXXXooOOO ",
" "}; " XoooOOOO ",
" OOOOOO ",
" OOOO "};

View file

@ -4,41 +4,42 @@
/* XPM */ /* XPM */
char* MwIconWarning[] = { char* MwIconWarning[] = {
/* columns rows colors chars-per-pixel */ /* columns rows colors chars-per-pixel */
"32 32 4 1 ", "32 32 5 1 ",
" c None", " c None",
". c #FC0000", ". c red",
"X c gray", "X c yellow",
"o c black", "o c DarkSlateGray",
"O c black",
/* pixels */ /* pixels */
" ", " ",
" ", " ",
" . ",
" ... ", " ... ",
" ..X.. ", " ..... ",
" .XXX. ", " ..X..oo ",
" ..XXX.. ", " ..XXX..oo ",
" .XXXXX. ", " ..XXX..oo ",
" ..XXoXX.. ", " ..XXXXX..oo ",
" .XXoooXX. ", " ..XXXXX..oo ",
" ..XXoooXX.. ", " ..XXOOOXX..oo ",
" .XXXoooXXX. ", " ..XOOOOOX..oo ",
" ..XXXoooXXX.. ", " ..XXOOOOOXX..oo ",
" .XXXXoooXXXX. ", " ..XXOOOOOXX..oo ",
" ..XXXXoooXXXX.. ", " ..XXXOOOOOXXX..oo ",
" .XXXXXoooXXXXX. ", " ..XXXOOOOOXXX..oo ",
" ..XXXXXoooXXXXX.. ", " ..XXXXOOOOOXXXX..oo ",
" .XXXXXXoooXXXXXX. ", " ..XXXXOOOOOXXXX..oo ",
" ..XXXXXXoooXXXXXX.. ", " ..XXXXXOOOOOXXXXX..oo ",
" .XXXXXXXoooXXXXXXX. ", " ..XXXXXXOOOXXXXXX..oo ",
" ..XXXXXXXoooXXXXXXX.. ", " ..XXXXXXXOOOXXXXXXX..oo ",
" .XXXXXXXXXoXXXXXXXXX. ", " ..XXXXXXXOOOXXXXXXX..oo ",
" ..XXXXXXXXXXXXXXXXXXX.. ", " ..XXXXXXXXOOOXXXXXXXX..oo ",
" .XXXXXXXXXXoXXXXXXXXXX. ", " ..XXXXXXXXXXXXXXXXXXX..oo ",
" ..XXXXXXXXXoooXXXXXXXXX.. ", " ..XXXXXXXXXOOOXXXXXXXXX..oo ",
" .XXXXXXXXXoooooXXXXXXXXX. ", " ..XXXXXXXXOOOOOXXXXXXXX..oo ",
" ..XXXXXXXXXXoooXXXXXXXXXX.. ", " ..XXXXXXXXXOOOOOXXXXXXXXX..oo ",
" .XXXXXXXXXXXXoXXXXXXXXXXXX. ", " ..XXXXXXXXXXOOOXXXXXXXXXX..oo ",
" ..XXXXXXXXXXXXXXXXXXXXXXXXX.. ", " ..XXXXXXXXXXXXXXXXXXXXXXXXX..oo",
" ............................. ", " .............................oo",
" ........................... ", " ...........................ooo",
" ooooooooooooooooooooooooooo ",
" "}; " "};

View file

@ -1,10 +1,18 @@
/* $Id$ */ /* $Id$ */
#include <Mw/Milsko.h> #include <Mw/Milsko.h>
void msgbox_ok_handler(MwWidget handle, void* user, void* call) {
MwWidget win = user;
MwDestroyWidget(win);
}
MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsigned int flag) { MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsigned int flag) {
MwWidget window, ok; MwWidget window, ok;
MwPoint p; MwPoint p;
int w, h; int w, h;
int left = 8;
int th;
p.x = 0; p.x = 0;
p.y = 0; p.y = 0;
@ -12,16 +20,18 @@ MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsi
window = MwVaCreateWidget(MwWindowClass, "messagebox", handle, 0, 0, (w = 512), (h = 32 * 4), window = MwVaCreateWidget(MwWindowClass, "messagebox", handle, 0, 0, (w = 512), (h = 32 * 4),
MwNtitle, title, MwNtitle, title,
NULL); NULL);
ok = MwVaCreateWidget(MwButtonClass, "ok", window, w - 8 - 64, h - 8 - 24, 64, 24, ok = MwVaCreateWidget(MwButtonClass, "ok", window, w - 8 - 80, h - 8 - 24, 80, 24,
MwNtext, "OK", MwNtext, "OK",
NULL); NULL);
MwAddUserHandler(ok, MwNactivateHandler, msgbox_ok_handler, window);
if((flag & MwMB_ICONMASK) != 0) { if((flag & MwMB_ICONMASK) != 0) {
MwWidget icon; MwWidget icon;
MwLLPixmap px; MwLLPixmap px;
char** data = NULL; char** data = NULL;
icon = MwCreateWidget(MwImageClass, "image", window, 16, (h - 48) / 2, 48, 48); icon = MwCreateWidget(MwImageClass, "image", window, 8, (h - 48) / 2, 48, 48);
switch(flag & MwMB_ICONMASK) { switch(flag & MwMB_ICONMASK) {
case MwMB_ICONWARNING: { case MwMB_ICONWARNING: {
@ -45,8 +55,16 @@ MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsi
px = MwLoadXPM(icon, data); px = MwLoadXPM(icon, data);
MwSetVoid(icon, MwNpixmap, px); MwSetVoid(icon, MwNpixmap, px);
left = 8 + 48 + 8;
} }
th = MwTextHeight(handle, text);
(void)MwVaCreateWidget(MwLabelClass, "label", window, left, (h - th) / 2, w - left - 8, th,
MwNtext, text,
MwNalignment, MwALIGNMENT_BEGINNING,
NULL);
MwLLDetach(window->lowlevel, &p); MwLLDetach(window->lowlevel, &p);
MwLLSetSizeHints(window->lowlevel, w, h, w, h); MwLLSetSizeHints(window->lowlevel, w, h, w, h);
MwLLMakePopup(window->lowlevel, handle->lowlevel); MwLLMakePopup(window->lowlevel, handle->lowlevel);

View file

@ -14,7 +14,7 @@ echo '#ifdef __cplusplus' >> include/Mw/Icon.h
echo 'extern "C" {' >> include/Mw/Icon.h echo 'extern "C" {' >> include/Mw/Icon.h
echo '#endif' >> include/Mw/Icon.h echo '#endif' >> include/Mw/Icon.h
echo '' >> include/Mw/Icon.h echo '' >> include/Mw/Icon.h
for i in doc/*.gif; do for i in resource/icon/*.png; do
LOWER=`echo $i | rev | cut -d"/" -f1 | rev | cut -d"." -f1` LOWER=`echo $i | rev | cut -d"/" -f1 | rev | cut -d"." -f1`
if [ "$LOWER" = "unsure" ]; then if [ "$LOWER" = "unsure" ]; then
LOWER=question LOWER=question