add icons

git-svn-id: http://svn2.nishi.boats/svn/milsko/trunk@258 b9cfdab3-6d41-4d17-bbe4-086880011989
This commit is contained in:
NishiOwO
2025-10-11 07:25:16 +00:00
parent 22b6c60f45
commit 83eda35643
13 changed files with 205 additions and 158 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);
r->shm.shmaddr = d = r->image->data = shmat(r->shm.shmid, 0, 0); if(r->shm.shmid == -1) {
r->shm.readOnly = False; XDestroyImage(r->image);
XShmAttach(handle->display, &r->shm); r->use_shm = 0;
} else { } else {
free(d);
r->shm.shmaddr = d = r->image->data = shmat(r->shm.shmid, 0, 0);
r->shm.readOnly = False;
XShmAttach(handle->display, &r->shm);
}
}
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,19 +382,24 @@ void MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, int
if(out >= 0x80) out = 0; if(out >= 0x80) out = 0;
for(y = 0; y < FontHeight; y++) { if(out == '\n') {
for(x = 0; x < FontWidth; x++) { sx = 0;
r.x = sx + x * FontScale; sy += FontHeight * FontScale;
r.y = sy + y * FontScale; } else {
r.width = FontScale; for(y = 0; y < FontHeight; y++) {
r.height = FontScale; for(x = 0; x < FontWidth; x++) {
r.x = sx + x * FontScale;
r.y = sy + y * FontScale;
r.width = FontScale;
r.height = FontScale;
if((bold ? MwBoldFontData : MwFontData)[out].data[y] & (1 << ((FontWidth - 1) - x))) { if((bold ? MwBoldFontData : MwFontData)[out].data[y] & (1 << ((FontWidth - 1) - x))) {
MwDrawRect(handle, &r, color); MwDrawRect(handle, &r, color);
}
} }
} }
sx += FontWidth * FontScale;
} }
sx += FontWidth * FontScale;
} }
} }
@@ -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 ",
" ......XXXXX..... ", " .XX.......oo ",
" ....XXXXXXXXXXX... ", " ..X........Oo ",
" ...XXXXXXXXXXXXXXX... ", " .XX........Ooo ",
" ...XXXXXXX..XXXXXXXX... ", " .X.........Ooo ",
" ...XXXXXXX....XXXXXXXX.. ", " .X.........Ooo ",
" ...XXXXXXXX....XXXXXXXXX.. ", " ...........Ooo ",
" ..XXXXXXXXX....XXXXXXXXX... ", " ...........Ooo ",
" ...XXXXXXXXX....XXXXXXXXXX.. ", " ..........Ooo ",
" ..XXXXXXXXXX....XXXXXXXXXX.. ", " ..........Ooo ",
" ..XXXXXXXXXX....XXXXXXXXXXX.. ", " .........Oooo ",
" ..XXXXXXXXXX....XXXXXXXXXXX.. ", " .........Ooo ",
" ..XXXXXXXXXXX....XXXXXXXXXXX.. ", " .........Ooo ",
" ..XXXXXXXXXXX....XXXXXXXXXXX.. ", " ........Oooo ",
" ..XXXXXXXXXXX....XXXXXXXXXXX.. ", " .......Ooo ",
" ..XXXXXXXXXXX....XXXXXXXXXXX.. ", " ......Oooo ",
" ..XXXXXXXXXXX....XXXXXXXXXXX.. ", " ......Ooo ",
" ..XXXXXXXXXX....XXXXXXXXXXX.. ", " ....Oooo ",
" ..XXXXXXXXXXXXXXXXXXXXXXXXX.. ", " ....Ooo ",
" ..XXXXXXXXXXX..XXXXXXXXXXX.. ", " OOOooo ",
" ..XXXXXXXXX....XXXXXXXXXX.. ", " ooo ",
" ..XXXXXXXXX....XXXXXXXXX.. ", " ..... ",
" ..XXXXXXXX....XXXXXXXX... ", " .XX...Oo ",
" ..XXXXXXXX..XXXXXXXX... ", " .XX.....Oo ",
" ...XXXXXXXXXXXXXXXX... ", " .X......Ooo ",
" ....XXXXXXXXXXXXX... ", " ........Ooo ",
" ....XXXXXXXXX.... ", " ........Ooo ",
" .............. ", " O.....Oooo ",
" ......... ", " OOOOOooo ",
" "}; " ooooo "};

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.. ", " ..X..oo ",
" .XXX. ", " ..XXX..oo ",
" ..XXX.. ", " ..XXX..oo ",
" .XXXXX. ", " ..XXXXX..oo ",
" ..XXoXX.. ", " ..XXXXX..oo ",
" .XXoooXX. ", " ..XXOOOXX..oo ",
" ..XXoooXX.. ", " ..XOOOOOX..oo ",
" .XXXoooXXX. ", " ..XXOOOOOXX..oo ",
" ..XXXoooXXX.. ", " ..XXOOOOOXX..oo ",
" .XXXXoooXXXX. ", " ..XXXOOOOOXXX..oo ",
" ..XXXXoooXXXX.. ", " ..XXXOOOOOXXX..oo ",
" .XXXXXoooXXXXX. ", " ..XXXXOOOOOXXXX..oo ",
" ..XXXXXoooXXXXX.. ", " ..XXXXOOOOOXXXX..oo ",
" .XXXXXXoooXXXXXX. ", " ..XXXXXOOOOOXXXXX..oo ",
" ..XXXXXXoooXXXXXX.. ", " ..XXXXXXOOOXXXXXX..oo ",
" .XXXXXXXoooXXXXXXX. ", " ..XXXXXXXOOOXXXXXXX..oo ",
" ..XXXXXXXoooXXXXXXX.. ", " ..XXXXXXXOOOXXXXXXX..oo ",
" .XXXXXXXXXoXXXXXXXXX. ", " ..XXXXXXXXOOOXXXXXXXX..oo ",
" ..XXXXXXXXXXXXXXXXXXX.. ", " ..XXXXXXXXXXXXXXXXXXX..oo ",
" .XXXXXXXXXXoXXXXXXXXXX. ", " ..XXXXXXXXXOOOXXXXXXXXX..oo ",
" ..XXXXXXXXXoooXXXXXXXXX.. ", " ..XXXXXXXXOOOOOXXXXXXXX..oo ",
" .XXXXXXXXXoooooXXXXXXXXX. ", " ..XXXXXXXXXOOOOOXXXXXXXXX..oo ",
" ..XXXXXXXXXXoooXXXXXXXXXX.. ", " ..XXXXXXXXXXOOOXXXXXXXXXX..oo ",
" .XXXXXXXXXXXXoXXXXXXXXXXXX. ", " ..XXXXXXXXXXXXXXXXXXXXXXXXX..oo",
" ..XXXXXXXXXXXXXXXXXXXXXXXXX.. ", " .............................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