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;
void* internal;
void* opaque;
MwIntegerKeyValue* integer;
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) {
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.shmaddr = d = r->image->data = shmat(r->shm.shmid, 0, 0);
r->shm.readOnly = False;
XShmAttach(handle->display, &r->shm);
} else {
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.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);
}

View File

@@ -368,7 +368,7 @@ void MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, int
MwRect r;
sx = point->x;
sy = point->y - FontHeight * FontScale / 2;
sy = point->y - MwTextHeight(handle, text) / 2;
if(align == MwALIGNMENT_CENTER) {
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;
for(y = 0; y < FontHeight; y++) {
for(x = 0; x < FontWidth; x++) {
r.x = sx + x * FontScale;
r.y = sy + y * FontScale;
r.width = FontScale;
r.height = FontScale;
if(out == '\n') {
sx = 0;
sy += FontHeight * FontScale;
} else {
for(y = 0; y < FontHeight; y++) {
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))) {
MwDrawRect(handle, &r, color);
if((bold ? MwBoldFontData : MwFontData)[out].data[y] & (1 << ((FontWidth - 1) - x))) {
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 c = 1;
int i = 0;
(void)handle;
(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

View File

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

View File

@@ -4,41 +4,43 @@
/* XPM */
char* MwIconNote[] = {
/* columns rows colors chars-per-pixel */
"32 32 4 1 ",
"32 32 6 1 ",
" c None",
". c black",
"X c #FCFC00",
"o c black",
". c red",
"X c white",
"o c SlateGray",
"O c firebrick",
"+ c lavender",
/* pixels */
" ",
" ..... ",
" ............ ",
" ......XXXXX..... ",
" ....XXXXXXXXXXX... ",
" ...XXXXXXXXXXXXXXX... ",
" ...XXXXXXX..XXXXXXXX... ",
" ...XXXXXXX....XXXXXXXX.. ",
" ...XXXXXXXX....XXXXXXXXX.. ",
" ..XXXXXXXXX....XXXXXXXXX... ",
" ...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.... ",
" .............. ",
" ......... ",
" "};
" .... ",
" ........ ",
" ..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 ",
" .XX.....Oo ",
" .X......Ooo ",
" ........Ooo ",
" ........Ooo ",
" O.....Oooo ",
" OOOOOooo ",
" ooooo "};

View File

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

View File

@@ -1,10 +1,18 @@
/* $Id$ */
#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 window, ok;
MwPoint p;
int w, h;
int left = 8;
int th;
p.x = 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),
MwNtitle, title,
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",
NULL);
MwAddUserHandler(ok, MwNactivateHandler, msgbox_ok_handler, window);
if((flag & MwMB_ICONMASK) != 0) {
MwWidget icon;
MwLLPixmap px;
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) {
case MwMB_ICONWARNING: {
@@ -45,8 +55,16 @@ MwWidget MwMessageBox(MwWidget handle, const char* text, const char* title, unsi
px = MwLoadXPM(icon, data);
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);
MwLLSetSizeHints(window->lowlevel, w, h, w, h);
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 '#endif' >> 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`
if [ "$LOWER" = "unsure" ]; then
LOWER=question