diff --git a/GNUmakefile b/GNUmakefile index e3e648c..2335542 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -40,7 +40,7 @@ L_OBJS = src/core.o src/default.o src/draw.o src/lowlevel.o src/error.o src/unic L_OBJS += external/ds.o external/image.o external/truetype.o L_OBJS += src/widget/window.o src/widget/button.o src/widget/frame.o src/widget/menu.o src/widget/submenu.o src/widget/image.o src/widget/scrollbar.o src/widget/checkbox.o src/widget/label.o src/widget/entry.o src/widget/numberentry.o src/widget/viewport.o src/widget/listbox.o L_OBJS += src/cursor/hidden.o src/cursor/default.o src/cursor/cross.o src/cursor/text.o -L_OBJS += src/icon/question.o src/icon/warning.o src/icon/note.o src/icon/info.o src/icon/news.o src/icon/error.o src/icon/file.o src/icon/directory.o src/icon/back.o src/icon/forward.o src/icon/up.o src/icon/computer.o src/icon/search.o +L_OBJS += src/icon/warning.o src/icon/note.o src/icon/info.o src/icon/news.o src/icon/error.o src/icon/file.o src/icon/directory.o src/icon/back.o src/icon/forward.o src/icon/up.o src/icon/computer.o src/icon/search.o L_OBJS += src/text/font.o src/text/boldfont.o src/text/ttf.o src/text/boldttf.o src/text/draw.o E_CFLAGS = $(CFLAGS) diff --git a/include/Mw/TypeDefs.h b/include/Mw/TypeDefs.h index 194c19a..5a557e9 100644 --- a/include/Mw/TypeDefs.h +++ b/include/Mw/TypeDefs.h @@ -89,6 +89,7 @@ struct _MwVoidKeyValue { #ifdef _MILSKO struct _MwWidget { char* name; + MwLLColor bgcolor; MwLL lowlevel; MwWidget parent; diff --git a/src/backend/x11.c b/src/backend/x11.c index 7f17d03..88187ba 100644 --- a/src/backend/x11.c +++ b/src/backend/x11.c @@ -476,6 +476,7 @@ void MwLLDestroyPixmap(MwLLPixmap pixmap) { } void MwLLDrawPixmap(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { + if(rect->width == 0 || rect->height == 0) return; if(pixmap->image != NULL && pixmap->use_render) { Pixmap px = XCreatePixmap(handle->display, handle->window, pixmap->width, pixmap->height, pixmap->depth); Pixmap mask = XCreatePixmap(handle->display, handle->window, rect->width, rect->height, 1); diff --git a/src/core.c b/src/core.c index 927f56d..4c689cc 100644 --- a/src/core.c +++ b/src/core.c @@ -8,6 +8,7 @@ static void lldrawhandler(MwLL handle, void* data) { (void)data; + h->bgcolor = NULL; MwDispatch(h, draw); if(h->draw_inject != NULL) h->draw_inject(h); } diff --git a/src/draw.c b/src/draw.c index 6f5d096..158590c 100644 --- a/src/draw.c +++ b/src/draw.c @@ -561,7 +561,7 @@ MwLLPixmap MwLoadRaw(MwWidget handle, unsigned char* rgb, int width, int height) MwLLPixmap px; unsigned char* out = malloc(width * height * 4); int i; - MwLLColor base = MwParseColor(handle, MwGetText(handle, MwNbackground)); + MwLLColor base = handle->bgcolor == NULL ? MwParseColor(handle, MwGetText(handle, MwNbackground)) : handle->bgcolor; memset(out, 0, width * height * 4); for(i = 0; i < width * height; i++){ @@ -583,7 +583,7 @@ MwLLPixmap MwLoadRaw(MwWidget handle, unsigned char* rgb, int width, int height) } } - MwLLFreeColor(base); + if(handle->bgcolor == NULL) MwLLFreeColor(base); px = MwLLCreatePixmap(handle->lowlevel, out, width, height); diff --git a/src/icon/question.c b/src/icon/question.c deleted file mode 100644 index ec32b1b..0000000 --- a/src/icon/question.c +++ /dev/null @@ -1,46 +0,0 @@ -/* $Id$ */ -#include - -/* XPM */ -char* MwIconQuestion[] = { - /* columns rows colors chars-per-pixel */ - "32 32 6 1 ", - " c None", - ". 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 "}; diff --git a/src/text/draw.c b/src/text/draw.c index 446943b..5ce0593 100644 --- a/src/text/draw.c +++ b/src/text/draw.c @@ -120,12 +120,11 @@ static int ttf_MwDrawText(MwWidget handle, MwPoint* point, const char* text, int int ox = x + (lsb * ttf->scale) + cx; int oy = (ttf->ascent * ttf->scale) + y0 + cy; unsigned char* opx = &px[(oy * tw + ox) * 4]; - double a = out[cy * ow + cx]; opx[0] = color->red; opx[1] = color->green; opx[2] = color->blue; - opx[3] = a; + opx[3] = out[cy * ow + cx]; } } diff --git a/src/widget/listbox.c b/src/widget/listbox.c index 8ab3aa0..2ba174d 100644 --- a/src/widget/listbox.c +++ b/src/widget/listbox.c @@ -214,6 +214,7 @@ static void frame_draw(MwWidget handle) { r2.width = r.width; r2.height = MwTextHeight(handle, "M"); MwDrawRect(handle, &r2, text); + handle->bgcolor = text; } if(lb->list[i].pixmap != NULL) { MwRect r2; @@ -238,6 +239,7 @@ static void frame_draw(MwWidget handle) { if(j == 0) p.x -= MwGetInteger(handle->parent, MwNleftPadding); } p.y += MwTextHeight(handle, "M") / 2; + handle->bgcolor = NULL; } MwDrawFrame(handle, &r, base, 1);