From b0ea597d6283b51d998cfb7b8d9e415e81752d8f Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Thu, 13 Nov 2025 01:30:10 +0000 Subject: [PATCH] add MwLibraryInit git-svn-id: http://svn2.nishi.boats/svn/milsko/trunk@680 b9cfdab3-6d41-4d17-bbe4-086880011989 --- examples/basic/checkbox.c | 6 ++- examples/basic/colorpicker.c | 2 + examples/basic/example.c | 2 + examples/basic/image.c | 19 ++++++--- examples/basic/listbox.c | 3 ++ examples/basic/messagebox.c | 12 ++++-- examples/basic/progressbar.c | 8 +++- examples/basic/radiobox.c | 6 ++- examples/basic/rotate.c | 8 +++- examples/basic/scrollbar.c | 8 +++- examples/basic/viewport.c | 6 ++- examples/gldemos/glutlayer.c | 2 + examples/gldemos/triangle.c | 2 + examples/gldemos/tripaint.c | 8 +++- include/Mw/Core.h | 6 +++ include/Mw/LowLevel.h | 64 +++++++++++++-------------- pl/rules.pl | 5 --- src/backend/gdi.c | 70 ++++++++++++++++-------------- src/backend/mac/carbon.c | 76 --------------------------------- src/backend/mac/carbon.h | 12 ------ src/backend/mac/mac.c | 83 ------------------------------------ src/backend/mac/mac.h | 54 ----------------------- src/backend/x11.c | 71 ++++++++++++++++-------------- src/core.c | 26 +++++++++++ src/lowlevel.c | 46 ++++++++++++++++++++ src/widget/combobox.c | 4 +- src/widget/listbox.c | 4 +- 27 files changed, 263 insertions(+), 350 deletions(-) delete mode 100644 src/backend/mac/carbon.c delete mode 100644 src/backend/mac/carbon.h delete mode 100644 src/backend/mac/mac.c delete mode 100644 src/backend/mac/mac.h diff --git a/examples/basic/checkbox.c b/examples/basic/checkbox.c index 5d6d6af..972cb2c 100644 --- a/examples/basic/checkbox.c +++ b/examples/basic/checkbox.c @@ -2,7 +2,11 @@ #include int main() { - MwWidget window = MwVaCreateWidget(MwWindowClass, "test", NULL, MwDEFAULT, MwDEFAULT, 8 + 16 + 8 + 16 * 10 + 8, 8 + 16 + 8 + 16 + 8, + MwWidget window; + + MwLibraryInit(); + + window = MwVaCreateWidget(MwWindowClass, "test", NULL, MwDEFAULT, MwDEFAULT, 8 + 16 + 8 + 16 * 10 + 8, 8 + 16 + 8 + 16 + 8, MwNtitle, "checkbox", NULL); diff --git a/examples/basic/colorpicker.c b/examples/basic/colorpicker.c index 8bbd8d0..7859843 100644 --- a/examples/basic/colorpicker.c +++ b/examples/basic/colorpicker.c @@ -33,6 +33,8 @@ void color_picker(MwWidget handle, void* user_data, void* call_data) { } int main() { + MwLibraryInit(); + window = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 640, 480, MwNtitle, "color picker", NULL); MwSetText(window, MwNbackground, "#000000"); diff --git a/examples/basic/example.c b/examples/basic/example.c index 4255a7f..ea57d6e 100644 --- a/examples/basic/example.c +++ b/examples/basic/example.c @@ -58,6 +58,8 @@ void resize(MwWidget handle, void* user_data, void* call_data) { int main() { MwMenu m, m2; + MwLibraryInit(); + window = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 400, 400, MwNtitle, "hello world", NULL); diff --git a/examples/basic/image.c b/examples/basic/image.c index e671b0b..24b5e12 100644 --- a/examples/basic/image.c +++ b/examples/basic/image.c @@ -2,15 +2,20 @@ #include int main() { - MwWidget window = MwVaCreateWidget(MwWindowClass, "window", NULL, MwDEFAULT, MwDEFAULT, 500, 500, + MwWidget window, image, image2, image3; + MwLLPixmap px, px2, px3; + + MwLibraryInit(); + + window = MwVaCreateWidget(MwWindowClass, "window", NULL, MwDEFAULT, MwDEFAULT, 500, 500, MwNtitle, "image image", NULL); - MwWidget image = MwCreateWidget(MwImageClass, "image", window, 50, 50, 200, 400); - MwWidget image2 = MwCreateWidget(MwImageClass, "image", window, 250, 50, 200, 200); - MwWidget image3 = MwCreateWidget(MwImageClass, "image", window, 250, 250, 200, 200); - MwLLPixmap px = MwLoadImage(window, "examples/picture.png"); - MwLLPixmap px2 = MwLoadImage(window, "examples/picture.jpg"); - MwLLPixmap px3 = MwLoadImage(window, "resource/logo/logo.png"); + image = MwCreateWidget(MwImageClass, "image", window, 50, 50, 200, 400); + image2 = MwCreateWidget(MwImageClass, "image", window, 250, 50, 200, 200); + image3 = MwCreateWidget(MwImageClass, "image", window, 250, 250, 200, 200); + px = MwLoadImage(window, "examples/picture.png"); + px2 = MwLoadImage(window, "examples/picture.jpg"); + px3 = MwLoadImage(window, "resource/logo/logo.png"); if(px == NULL) px = MwLoadImage(window, "../examples/picture.png"); if(px2 == NULL) px2 = MwLoadImage(window, "../examples/picture.jpg"); diff --git a/examples/basic/listbox.c b/examples/basic/listbox.c index 438fa94..3aca836 100644 --- a/examples/basic/listbox.c +++ b/examples/basic/listbox.c @@ -29,6 +29,9 @@ int main() { int i; MwListBoxPacket* packet; int index; + + MwLibraryInit(); + wmain = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 640, 480, MwNtitle, "listbox", NULL); diff --git a/examples/basic/messagebox.c b/examples/basic/messagebox.c index 73fd2f8..0a8f1cc 100644 --- a/examples/basic/messagebox.c +++ b/examples/basic/messagebox.c @@ -38,10 +38,14 @@ void spawn3(MwWidget handle, void* user, void* call) { } int main() { - MwWidget msg = MwVaCreateWidget(MwWindowClass, "test", NULL, MwDEFAULT, MwDEFAULT, 300, 100, MwNtitle, "test", NULL); - MwWidget btn = MwVaCreateWidget(MwButtonClass, "button", msg, 8, 8, 300 - 16, (100 - 16) / 2, MwNtext, "press me!", NULL); - MwWidget btn2 = MwVaCreateWidget(MwButtonClass, "button", msg, 8, 8 + (100 - 16) / 2, (300 - 16) / 2, (100 - 16) / 2, MwNtext, "press me!", NULL); - MwWidget btn3 = MwVaCreateWidget(MwButtonClass, "button", msg, 8 + (300 - 16) / 2, 8 + (100 - 16) / 2, (300 - 16) / 2, (100 - 16) / 2, MwNtext, "press me!", NULL); + MwWidget msg, btn, btn2, btn3; + + MwLibraryInit(); + + msg = MwVaCreateWidget(MwWindowClass, "test", NULL, MwDEFAULT, MwDEFAULT, 300, 100, MwNtitle, "test", NULL); + btn = MwVaCreateWidget(MwButtonClass, "button", msg, 8, 8, 300 - 16, (100 - 16) / 2, MwNtext, "press me!", NULL); + btn2 = MwVaCreateWidget(MwButtonClass, "button", msg, 8, 8 + (100 - 16) / 2, (300 - 16) / 2, (100 - 16) / 2, MwNtext, "press me!", NULL); + btn3 = MwVaCreateWidget(MwButtonClass, "button", msg, 8 + (300 - 16) / 2, 8 + (100 - 16) / 2, (300 - 16) / 2, (100 - 16) / 2, MwNtext, "press me!", NULL); MwAddUserHandler(btn, MwNactivateHandler, spawn, msg); MwAddUserHandler(btn2, MwNactivateHandler, spawn2, msg); diff --git a/examples/basic/progressbar.c b/examples/basic/progressbar.c index e2c3c3c..4d4a16f 100644 --- a/examples/basic/progressbar.c +++ b/examples/basic/progressbar.c @@ -1,10 +1,14 @@ #include int main() { - MwWidget w = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 5 + 640 + 5, 5 + 32 + 5, + MwWidget w, p; + + MwLibraryInit(); + + w = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 5 + 640 + 5, 5 + 32 + 5, MwNtitle, "progress bar", NULL); - MwWidget p = MwVaCreateWidget(MwProgressBarClass, "progress", w, 5, 5, 640, 32, + p = MwVaCreateWidget(MwProgressBarClass, "progress", w, 5, 5, 640, 32, MwNvalue, 25, NULL); diff --git a/examples/basic/radiobox.c b/examples/basic/radiobox.c index 31d5671..213bdc7 100644 --- a/examples/basic/radiobox.c +++ b/examples/basic/radiobox.c @@ -2,7 +2,11 @@ #include int main() { - MwWidget window = MwVaCreateWidget(MwWindowClass, "test", NULL, MwDEFAULT, MwDEFAULT, 8 + 16 + 8 + 16 * 10 + 8, 8 + 16 + 8 + 16 + 8, + MwWidget window; + + MwLibraryInit(); + + window = MwVaCreateWidget(MwWindowClass, "test", NULL, MwDEFAULT, MwDEFAULT, 8 + 16 + 8 + 16 * 10 + 8, 8 + 16 + 8 + 16 + 8, MwNtitle, "radiobox", NULL); diff --git a/examples/basic/rotate.c b/examples/basic/rotate.c index c12229b..c3b85d7 100644 --- a/examples/basic/rotate.c +++ b/examples/basic/rotate.c @@ -55,10 +55,14 @@ void resize(MwWidget w, void* user, void* client) { } int main() { - MwWidget window = MwVaCreateWidget(MwWindowClass, "window", NULL, MwDEFAULT, MwDEFAULT, (ww = 500), (wh = 500), + MwWidget window; + int i; + + MwLibraryInit(); + + window = MwVaCreateWidget(MwWindowClass, "window", NULL, MwDEFAULT, MwDEFAULT, (ww = 500), (wh = 500), MwNtitle, "rotate", NULL); - int i; for(i = 0; i < (int)(sizeof(buttons) / sizeof(buttons[0])); i++) { const char* color = ""; diff --git a/examples/basic/scrollbar.c b/examples/basic/scrollbar.c index 7f8db05..f1c5490 100644 --- a/examples/basic/scrollbar.c +++ b/examples/basic/scrollbar.c @@ -3,10 +3,14 @@ #include int main() { - MwWidget window = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 500, 500, + MwWidget window; + int i; + + MwLibraryInit(); + + window = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 500, 500, MwNtitle, "main", NULL); - int i; for(i = 0; i < 500 / 16; i++) { MwVaCreateWidget(MwScrollBarClass, "scroll", window, 16 * i, 0, 16, 500, diff --git a/examples/basic/viewport.c b/examples/basic/viewport.c index c78f8fc..f6d8815 100644 --- a/examples/basic/viewport.c +++ b/examples/basic/viewport.c @@ -17,9 +17,13 @@ static void resize(MwWidget handle, void* user, void* call) { } int main() { - MwWidget w = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 640, 480, MwNtitle, "test", NULL); + MwWidget w; MwLLPixmap px; + MwLibraryInit(); + + w = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 640, 480, MwNtitle, "test", NULL); + vp = MwCreateWidget(MwViewportClass, "vp", w, 5, 5, 630, 470); px = MwLoadImage(vp, "examples/picture.png"); diff --git a/examples/gldemos/glutlayer.c b/examples/gldemos/glutlayer.c index 78733b0..dd24ef5 100644 --- a/examples/gldemos/glutlayer.c +++ b/examples/gldemos/glutlayer.c @@ -47,6 +47,8 @@ static void key_pressed(MwWidget handle, void* user, void* client) { int main() { MwWidget window; + MwLibraryInit(); + window = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 500, 500, MwNtitle, TITLE, NULL); diff --git a/examples/gldemos/triangle.c b/examples/gldemos/triangle.c index 6931938..cb89907 100644 --- a/examples/gldemos/triangle.c +++ b/examples/gldemos/triangle.c @@ -71,6 +71,8 @@ void activate(MwWidget handle, void* user_data, void* call_data) { } int main() { + MwLibraryInit(); + window = MwVaCreateWidget(MwWindowClass, "main", NULL, 0, 0, 400, 450, MwNtitle, "hello world", NULL); diff --git a/examples/gldemos/tripaint.c b/examples/gldemos/tripaint.c index ac353ba..ea06b59 100644 --- a/examples/gldemos/tripaint.c +++ b/examples/gldemos/tripaint.c @@ -109,10 +109,14 @@ static void mouse_move(MwWidget handle, void* user, void* call) { int main() { MwSizeHints hints; - MwWidget window = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 640, 480, + MwWidget window, viewport; + + MwLibraryInit(); + + window = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 640, 480, MwNtitle, "tripaint", NULL); - MwWidget viewport = MwCreateWidget(MwViewportClass, "viewport", window, 5, 5, 630, 470 - 16 - 5); + viewport = MwCreateWidget(MwViewportClass, "viewport", window, 5, 5, 630, 470 - 16 - 5); hints.min_width = hints.max_width = 640; hints.min_height = hints.max_height = 480; diff --git a/include/Mw/Core.h b/include/Mw/Core.h index 377f356..a1fe00e 100644 --- a/include/Mw/Core.h +++ b/include/Mw/Core.h @@ -44,6 +44,12 @@ extern "C" { #endif +/*! + * @brief Initializes the Milsko Toolkit + * @return `0` if successful + */ +MWDECL int MwLibraryInit(void); + /*! * @brief Creates a widget * @param widget_class Widget class diff --git a/include/Mw/LowLevel.h b/include/Mw/LowLevel.h index f96c196..5b0760f 100644 --- a/include/Mw/LowLevel.h +++ b/include/Mw/LowLevel.h @@ -89,52 +89,52 @@ extern "C" { MWDECL void MwLLCreateCommon(MwLL handle); MWDECL void MwLLDestroyCommon(MwLL handle); -/* driver-specific */ -MWDECL MwLL MwLLCreate(MwLL parent, int x, int y, int width, int height); -MWDECL void MwLLDestroy(MwLL handle); +/* driver-specific, these get assigned by backend */ +MWDECL MwLL (*MwLLCreate)(MwLL parent, int x, int y, int width, int height); +MWDECL void (*MwLLDestroy)(MwLL handle); -MWDECL void MwLLPolygon(MwLL handle, MwPoint* points, int points_count, MwLLColor color); -MWDECL void MwLLLine(MwLL handle, MwPoint* points, MwLLColor color); +MWDECL void (*MwLLPolygon)(MwLL handle, MwPoint* points, int points_count, MwLLColor color); +MWDECL void (*MwLLLine)(MwLL handle, MwPoint* points, MwLLColor color); -MWDECL MwLLColor MwLLAllocColor(MwLL handle, int r, int g, int b); -MWDECL void MwLLColorUpdate(MwLL handle, MwLLColor c, int r, int g, int b); -MWDECL void MwLLFreeColor(MwLLColor color); +MWDECL MwLLColor (*MwLLAllocColor)(MwLL handle, int r, int g, int b); +MWDECL void (*MwLLColorUpdate)(MwLL handle, MwLLColor c, int r, int g, int b); +MWDECL void (*MwLLFreeColor)(MwLLColor color); -MWDECL void MwLLGetXYWH(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h); -MWDECL void MwLLSetXY(MwLL handle, int x, int y); -MWDECL void MwLLSetWH(MwLL handle, int w, int h); +MWDECL void (*MwLLGetXYWH)(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h); +MWDECL void (*MwLLSetXY)(MwLL handle, int x, int y); +MWDECL void (*MwLLSetWH)(MwLL handle, int w, int h); -MWDECL void MwLLSetTitle(MwLL handle, const char* title); +MWDECL void (*MwLLSetTitle)(MwLL handle, const char* title); -MWDECL int MwLLPending(MwLL handle); -MWDECL void MwLLNextEvent(MwLL handle); +MWDECL int (*MwLLPending)(MwLL handle); +MWDECL void (*MwLLNextEvent)(MwLL handle); -MWDECL MwLLPixmap MwLLCreatePixmap(MwLL handle, unsigned char* data, int width, int height); -MWDECL void MwLLPixmapUpdate(MwLLPixmap pixmap); -MWDECL void MwLLDestroyPixmap(MwLLPixmap pixmap); -MWDECL void MwLLDrawPixmap(MwLL handle, MwRect* rect, MwLLPixmap pixmap); -MWDECL void MwLLSetIcon(MwLL handle, MwLLPixmap pixmap); +MWDECL MwLLPixmap (*MwLLCreatePixmap)(MwLL handle, unsigned char* data, int width, int height); +MWDECL void (*MwLLPixmapUpdate)(MwLLPixmap pixmap); +MWDECL void (*MwLLDestroyPixmap)(MwLLPixmap pixmap); +MWDECL void (*MwLLDrawPixmap)(MwLL handle, MwRect* rect, MwLLPixmap pixmap); +MWDECL void (*MwLLSetIcon)(MwLL handle, MwLLPixmap pixmap); -MWDECL void MwLLForceRender(MwLL handle); +MWDECL void (*MwLLForceRender)(MwLL handle); -MWDECL void MwLLSetCursor(MwLL handle, MwCursor* image, MwCursor* mask); -MWDECL void MwLLDetach(MwLL handle, MwPoint* point); -MWDECL void MwLLShow(MwLL handle, int show); +MWDECL void (*MwLLSetCursor)(MwLL handle, MwCursor* image, MwCursor* mask); +MWDECL void (*MwLLDetach)(MwLL handle, MwPoint* point); +MWDECL void (*MwLLShow)(MwLL handle, int show); -MWDECL void MwLLMakePopup(MwLL handle, MwLL parent); +MWDECL void (*MwLLMakePopup)(MwLL handle, MwLL parent); -MWDECL void MwLLSetSizeHints(MwLL handle, int minx, int miny, int maxx, int maxy); -MWDECL void MwLLMakeBorderless(MwLL handle, int toggle); +MWDECL void (*MwLLSetSizeHints)(MwLL handle, int minx, int miny, int maxx, int maxy); +MWDECL void (*MwLLMakeBorderless)(MwLL handle, int toggle); -MWDECL void MwLLSetBackground(MwLL handle, MwLLColor color); +MWDECL void (*MwLLSetBackground)(MwLL handle, MwLLColor color); -MWDECL void MwLLFocus(MwLL handle); -MWDECL void MwLLGrabPointer(MwLL handle, int toggle); +MWDECL void (*MwLLFocus)(MwLL handle); +MWDECL void (*MwLLGrabPointer)(MwLL handle, int toggle); -MWDECL void MwLLSetClipboard(MwLL handle, const char* text); -MWDECL char* MwLLGetClipboard(MwLL handle); +MWDECL void (*MwLLSetClipboard)(MwLL handle, const char* text); +MWDECL char* (*MwLLGetClipboard)(MwLL handle); -MWDECL void MwLLMakeToolWindow(MwLL handle); +MWDECL void (*MwLLMakeToolWindow)(MwLL handle); #ifdef __cplusplus } diff --git a/pl/rules.pl b/pl/rules.pl index cefb1c2..c82c75f 100644 --- a/pl/rules.pl +++ b/pl/rules.pl @@ -25,11 +25,6 @@ elsif ($backend eq "gdi") { $gl_libs = "-lopengl32 -lglu32"; } -elsif ($backend eq "darwin") { - add_cflags("-DUSE_DARWIN"); - new_object("src/backend/mac/*.c"); - add_ldflags("-framework Carbon"); -} if (param_get("stb-image")) { add_cflags("-DUSE_STB_IMAGE"); diff --git a/src/backend/gdi.c b/src/backend/gdi.c index d878a48..b94ba5c 100644 --- a/src/backend/gdi.c +++ b/src/backend/gdi.c @@ -210,7 +210,7 @@ static LRESULT CALLBACK wndproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { return 0; } -MwLL MwLLCreate(MwLL parent, int x, int y, int width, int height) { +static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { MwLL r = malloc(sizeof(*r)); userdata_t* u = malloc(sizeof(*u)); WNDCLASSEX wc; @@ -263,7 +263,7 @@ MwLL MwLLCreate(MwLL parent, int x, int y, int width, int height) { return r; } -void MwLLDestroy(MwLL handle) { +static void MwLLDestroyImpl(MwLL handle) { MwLLDestroyCommon(handle); /* for safety */ @@ -275,7 +275,7 @@ void MwLLDestroy(MwLL handle) { free(handle); } -void MwLLPolygon(MwLL handle, MwPoint* points, int points_count, MwLLColor color) { +static void MwLLPolygonImpl(MwLL handle, MwPoint* points, int points_count, MwLLColor color) { POINT* p = malloc(sizeof(*p) * points_count); HPEN pen = CreatePen(PS_NULL, 0, RGB(0, 0, 0)); int i; @@ -294,7 +294,7 @@ void MwLLPolygon(MwLL handle, MwPoint* points, int points_count, MwLLColor color free(p); } -void MwLLLine(MwLL handle, MwPoint* points, MwLLColor color) { +static void MwLLLineImpl(MwLL handle, MwPoint* points, MwLLColor color) { HPEN pen = CreatePen(PS_SOLID, 1, RGB(color->red, color->green, color->blue)); SelectObject(handle->hDC, pen); @@ -304,7 +304,7 @@ void MwLLLine(MwLL handle, MwPoint* points, MwLLColor color) { DeleteObject(pen); } -MwLLColor MwLLAllocColor(MwLL handle, int r, int g, int b) { +static MwLLColor MwLLAllocColorImpl(MwLL handle, int r, int g, int b) { MwLLColor c = malloc(sizeof(*c)); c->brush = NULL; @@ -314,7 +314,7 @@ MwLLColor MwLLAllocColor(MwLL handle, int r, int g, int b) { return c; } -void MwLLColorUpdate(MwLL handle, MwLLColor c, int r, int g, int b) { +static void MwLLColorUpdateImpl(MwLL handle, MwLLColor c, int r, int g, int b) { HDC dc = GetDC(handle->hWnd); if(r > 255) r = 255; @@ -333,18 +333,18 @@ void MwLLColorUpdate(MwLL handle, MwLLColor c, int r, int g, int b) { ReleaseDC(handle->hWnd, dc); } -void MwLLFreeColor(MwLLColor color) { +static void MwLLFreeColorImpl(MwLLColor color) { DeleteObject(color->brush); free(color); } -void MwLLSetBackground(MwLL handle, MwLLColor color) { +static void MwLLSetBackgroundImpl(MwLL handle, MwLLColor color) { (void)handle; (void)color; } -void MwLLGetXYWH(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) { +static void MwLLGetXYWHImpl(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) { RECT rc; GetClientRect(handle->hWnd, &rc); @@ -356,21 +356,21 @@ void MwLLGetXYWH(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) *h = rc.bottom - rc.top; } -void MwLLSetXY(MwLL handle, int x, int y) { +static void MwLLSetXYImpl(MwLL handle, int x, int y) { SetWindowPos(handle->hWnd, NULL, x, y, 0, 0, SWP_NOSIZE); InvalidateRect(handle->hWnd, NULL, FALSE); } -void MwLLSetWH(MwLL handle, int w, int h) { +static void MwLLSetWHImpl(MwLL handle, int w, int h) { SetWindowPos(handle->hWnd, NULL, 0, 0, w, h, SWP_NOMOVE); InvalidateRect(handle->hWnd, NULL, FALSE); } -void MwLLSetTitle(MwLL handle, const char* title) { +static void MwLLSetTitleImpl(MwLL handle, const char* title) { SetWindowText(handle->hWnd, title); } -int MwLLPending(MwLL handle) { +static int MwLLPendingImpl(MwLL handle) { MSG msg; (void)handle; @@ -378,7 +378,7 @@ int MwLLPending(MwLL handle) { return PeekMessage(&msg, handle->hWnd, 0, 0, PM_NOREMOVE) ? 1 : 0; } -void MwLLNextEvent(MwLL handle) { +static void MwLLNextEventImpl(MwLL handle) { MSG msg; (void)handle; @@ -390,7 +390,7 @@ void MwLLNextEvent(MwLL handle) { } } -MwLLPixmap MwLLCreatePixmap(MwLL handle, unsigned char* data, int width, int height) { +static MwLLPixmap MwLLCreatePixmapImpl(MwLL handle, unsigned char* data, int width, int height) { MwLLPixmap r = malloc(sizeof(*r)); HDC dc = GetDC(handle->hWnd); BITMAPINFOHEADER bmih; @@ -425,7 +425,7 @@ MwLLPixmap MwLLCreatePixmap(MwLL handle, unsigned char* data, int width, int hei return r; } -void MwLLPixmapUpdate(MwLLPixmap r) { +static void MwLLPixmapUpdateImpl(MwLLPixmap r) { int y, x; int w = (r->width + (16 - (r->width % 16))) / 8; WORD* words; @@ -466,7 +466,7 @@ void MwLLPixmapUpdate(MwLLPixmap r) { free(words2); } -void MwLLDestroyPixmap(MwLLPixmap pixmap) { +static void MwLLDestroyPixmapImpl(MwLLPixmap pixmap) { free(pixmap->raw); DeleteObject(pixmap->hMask); DeleteObject(pixmap->hMask2); @@ -475,7 +475,7 @@ void MwLLDestroyPixmap(MwLLPixmap pixmap) { free(pixmap); } -void MwLLDrawPixmap(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { +static void MwLLDrawPixmapImpl(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { HDC hmdc = CreateCompatibleDC(handle->hDC); POINT p[3]; @@ -496,7 +496,7 @@ void MwLLDrawPixmap(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { DeleteDC(hmdc); } -void MwLLSetIcon(MwLL handle, MwLLPixmap pixmap) { +static void MwLLSetIconImpl(MwLL handle, MwLLPixmap pixmap) { ICONINFO ii; HICON ico; @@ -514,11 +514,11 @@ void MwLLSetIcon(MwLL handle, MwLLPixmap pixmap) { DestroyIcon(ico); } -void MwLLForceRender(MwLL handle) { +static void MwLLForceRenderImpl(MwLL handle) { PostMessage(handle->hWnd, WM_USER, 0, 0); } -void MwLLSetCursor(MwLL handle, MwCursor* image, MwCursor* mask) { +static void MwLLSetCursorImpl(MwLL handle, MwCursor* image, MwCursor* mask) { HCURSOR cursor; BYTE* dmask = malloc((MwCursorDataHeight / 8) * MwCursorDataHeight); BYTE* dimage = malloc((MwCursorDataHeight / 8) * MwCursorDataHeight); @@ -566,7 +566,7 @@ void MwLLSetCursor(MwLL handle, MwCursor* image, MwCursor* mask) { free(dmask); } -void MwLLDetach(MwLL handle, MwPoint* point) { +static void MwLLDetachImpl(MwLL handle, MwPoint* point) { RECT rc, rc2; LPARAM lp = GetWindowLongPtr(handle->hWnd, GWL_STYLE); @@ -589,18 +589,18 @@ void MwLLDetach(MwLL handle, MwPoint* point) { SetWindowPos(handle->hWnd, HWND_TOPMOST, rc.left, rc.top, rc2.right == 0 ? 1 : rc2.right, rc2.bottom == 0 ? 1 : rc2.bottom, SWP_FRAMECHANGED | SWP_NOACTIVATE); } -void MwLLShow(MwLL handle, int show) { +static void MwLLShowImpl(MwLL handle, int show) { ShowWindow(handle->hWnd, show ? SW_NORMAL : SW_HIDE); if(show) SetFocus(handle->hWnd); } -void MwLLMakePopup(MwLL handle, MwLL parent) { +static void MwLLMakePopupImpl(MwLL handle, MwLL parent) { (void)handle; (void)parent; /* TODO */ } -void MwLLSetSizeHints(MwLL handle, int minx, int miny, int maxx, int maxy) { +static void MwLLSetSizeHintsImpl(MwLL handle, int minx, int miny, int maxx, int maxy) { userdata_t* u = (userdata_t*)GetWindowLongPtr(handle->hWnd, GWLP_USERDATA); u->min_set = u->max_set = 1; @@ -610,7 +610,7 @@ void MwLLSetSizeHints(MwLL handle, int minx, int miny, int maxx, int maxy) { u->max.y = maxy; } -void MwLLMakeBorderless(MwLL handle, int toggle) { +static void MwLLMakeBorderlessImpl(MwLL handle, int toggle) { LPARAM lp = GetWindowLongPtr(handle->hWnd, GWL_STYLE); if(toggle) { @@ -624,11 +624,11 @@ void MwLLMakeBorderless(MwLL handle, int toggle) { SetWindowPos(handle->hWnd, NULL, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER); } -void MwLLFocus(MwLL handle) { +static void MwLLFocusImpl(MwLL handle) { SetFocus(handle->hWnd); } -void MwLLGrabPointer(MwLL handle, int toggle) { +static void MwLLGrabPointerImpl(MwLL handle, int toggle) { if(toggle) { POINT p; RECT rc; @@ -657,7 +657,7 @@ void MwLLGrabPointer(MwLL handle, int toggle) { } } -void MwLLSetClipboard(MwLL handle, const char* text) { +static void MwLLSetClipboardImpl(MwLL handle, const char* text) { HGLOBAL hg; if(OpenClipboard(handle->hWnd) != 0) { char* lock; @@ -675,7 +675,7 @@ void MwLLSetClipboard(MwLL handle, const char* text) { } } -char* MwLLGetClipboard(MwLL handle) { +static char* MwLLGetClipboardImpl(MwLL handle) { HGLOBAL hg; char* r = NULL; if(OpenClipboard(handle->hWnd) != 0 && (hg = GetClipboardData(CF_TEXT)) != NULL) { @@ -692,7 +692,7 @@ char* MwLLGetClipboard(MwLL handle) { return r; } -void MwLLMakeToolWindow(MwLL handle) { +static void MwLLMakeToolWindowImpl(MwLL handle) { LPARAM lp = GetWindowLongPtr(handle->hWnd, GWL_STYLE) & WS_VISIBLE; RECT rc; @@ -703,3 +703,11 @@ void MwLLMakeToolWindow(MwLL handle) { SetWindowPos(handle->hWnd, NULL, 0, 0, rc.right - rc.left, rc.bottom - rc.top, SWP_FRAMECHANGED | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER); } + +static int MwLLGDICallInitImpl(void) { + /* TODO: check properly */ + return 0; +} + +#include "call.c" +CALL(GDI); diff --git a/src/backend/mac/carbon.c b/src/backend/mac/carbon.c deleted file mode 100644 index 8b9f64b..0000000 --- a/src/backend/mac/carbon.c +++ /dev/null @@ -1,76 +0,0 @@ -/* $Id: carbon.c 154 2025-10-04 12:33:26Z nishi $ */ - -#include "mac.h" -#include "carbon.h" -#include - -void carbonBackendUserDataInit(mac_backend_userdata ud) { -} - -static MwLL carbon_create(MwLL parent, int x, int y, int width, int height) { - return NULL; -}; -static void carbon_destroy(MwLL handle) { - return; -}; -static void carbon_polygon(MwLL handle, MwPoint* points, int points_count, MwLLColor color) { - return; -}; -static MwLLColor carbon_allocColor(MwLL handle, int r, int g, int b) { - return NULL; -}; -static void carbon_freeColor(MwLLColor color) { - return; -}; -static void carbon_getXYWH(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) { - return; -}; -static void carbon_setXY(MwLL handle, int x, int y) { - return; -}; -static void carbon_setWH(MwLL handle, int w, int h) { - return; -}; -static void carbon_setTitle(MwLL handle, const char* title) { - return; -}; -static int carbon_pending(MwLL handle) { - return 0; -}; -static void carbon_nextEvent(MwLL handle) { - return; -}; -static MwLLPixmap carbon_createPixmap(MwLL handle, unsigned char* data, int width, int height) { - return NULL; -}; -static void carbon_drawPixmap(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { - return; -}; -static void carbon_setIcon(MwLL handle, MwLLPixmap pixmap) { - return; -}; -static void carbon_forceRender(MwLL handle) { - return; -}; - -static mac_backend carbon_backend = { - .create = carbon_create, - .destroy = carbon_destroy, - .polygon = carbon_polygon, - .allocColor = carbon_allocColor, - .freeColor = carbon_freeColor, - .getXYWH = carbon_getXYWH, - .setXY = carbon_setXY, - .setWH = carbon_setWH, - .setTitle = carbon_setTitle, - .pending = carbon_pending, - .nextEvent = carbon_nextEvent, - .createPixmap = carbon_createPixmap, - .drawPixmap = carbon_drawPixmap, - .setIcon = carbon_setIcon, - .forceRender = carbon_forceRender, -}; - -mac_backend getCarbonBackend(void) { - return carbon_backend; -}; diff --git a/src/backend/mac/carbon.h b/src/backend/mac/carbon.h deleted file mode 100644 index f606cd6..0000000 --- a/src/backend/mac/carbon.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef __QUICKDRAW_H__ -#define __QUICKDRAW_H__ - -#include "mac.h" - -struct mac_backend_userdata_t { -}; - -void carbonBackendUserDataInit(mac_backend_userdata); -mac_backend getCarbonBackend(void); - -#endif diff --git a/src/backend/mac/mac.c b/src/backend/mac/mac.c deleted file mode 100644 index 3095de6..0000000 --- a/src/backend/mac/mac.c +++ /dev/null @@ -1,83 +0,0 @@ -/* $Id$ */ -#include - -#include "mac.h" -#include "carbon.h" - -MwLL MwLLCreate(MwLL parent, int x, int y, int width, int height) { - // void* library; - // MwLL r = malloc(sizeof(*r)); - // MwLLCreateCommon(r); - // - // library = dlopen("CarbonLib", RTLD_NOW); - // if(library != NULL) { - // dlclose(library); - // r->backend = getQuickDrawBackend(); - // quickDrawBackendUserDataInit(r->userdata); - // return r; - // } - // - // printf("ERROR: No supported UI library found. (Searched for: CarbonLib)\n"); - // getchar(); - // raise(SIGTRAP); - - return NULL; -}; - -void MwLLSleep(int ms) { - usleep(ms * 1000); -} - -void MwLLFreeColor(MwLLColor color) { - free(color); -} - -void MwLLDestroyPixmap(MwLLPixmap pixmap) { - free(pixmap); -} - -void MwLLDestroy(MwLL handle) { - handle->backend.destroy(handle); -}; -void MwLLPolygon(MwLL handle, MwPoint* points, int points_count, MwLLColor color) { - handle->backend.polygon(handle, points, points_count, color); -}; -MwLLColor MwLLAllocColor(MwLL handle, int r, int g, int b) { - return handle->backend.allocColor(handle, r, g, b); -}; -void MwLLGetXYWH(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) { - return handle->backend.getXYWH(handle, x, y, w, h); -}; -void MwLLSetXY(MwLL handle, int x, int y) { - return handle->backend.setXY(handle, x, y); -}; -void MwLLSetWH(MwLL handle, int w, int h) { - return handle->backend.setWH(handle, w, h); -}; -void MwLLSetTitle(MwLL handle, const char* title) { - return handle->backend.setTitle(handle, title); -}; -int MwLLPending(MwLL handle) { - return handle->backend.pending(handle); -}; -void MwLLNextEvent(MwLL handle) { - return handle->backend.nextEvent(handle); -}; -MwLLPixmap MwLLCreatePixmap(MwLL handle, unsigned char* data, int width, int height) { - return handle->backend.createPixmap(handle, data, width, height); -}; -void MwLLDrawPixmap(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { - return handle->backend.drawPixmap(handle, rect, pixmap); -}; -void MwLLSetIcon(MwLL handle, MwLLPixmap pixmap) { - return handle->backend.setIcon(handle, pixmap); -}; -void MwLLForceRender(MwLL handle) { - return handle->backend.forceRender(handle); -}; -void MwLLSetCursor(MwLL handle, MwCursor* image, MwCursor* mask) { - return handle->backend.setCursor(handle, image, mask); -}; -void MwLLDetach(MwLL handle, MwPoint* point) { - return handle->backend.detach(handle, point); -}; diff --git a/src/backend/mac/mac.h b/src/backend/mac/mac.h deleted file mode 100644 index cb76bb4..0000000 --- a/src/backend/mac/mac.h +++ /dev/null @@ -1,54 +0,0 @@ -/* $Id$ */ - -#ifndef __MAC_H__ -#define __MAC_H__ - -#include -#include -#include - -typedef enum { - PLATFORM_QUICKDRAW = 0, - PLATFORM_QUARTZ, -} macPlatform; - -typedef struct mac_backend_t { - MwLL (*create)(MwLL parent, int x, int y, int width, int height); - void (*destroy)(MwLL handle); - void (*polygon)(MwLL handle, MwPoint* points, int points_count, MwLLColor color); - MwLLColor (*allocColor)(MwLL handle, int r, int g, int b); - void (*freeColor)(MwLLColor color); - void (*getXYWH)(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h); - void (*setXY)(MwLL handle, int x, int y); - void (*setWH)(MwLL handle, int w, int h); - void (*setTitle)(MwLL handle, const char* title); - int (*pending)(MwLL handle); - void (*nextEvent)(MwLL handle); - MwLLPixmap (*createPixmap)(MwLL handle, unsigned char* data, int width, int height); - void (*drawPixmap)(MwLL handle, MwRect* rect, MwLLPixmap pixmap); - void (*setIcon)(MwLL handle, MwLLPixmap pixmap); - void (*forceRender)(MwLL handle); - void (*setCursor)(MwLL handle, MwCursor* image, MwCursor* mask); - void (*detach)(MwLL handle, MwPoint* point); -} mac_backend; - -typedef struct mac_backend_userdata_t* mac_backend_userdata; - -struct _MwLL { - mac_backend backend; - mac_backend_userdata userdata; - - int copy_buffer; - - unsigned int width; - unsigned int height; - - MwLLHandler handler; -}; - -struct _MwLLPixmap { - unsigned int width; - unsigned int height; -}; - -#endif diff --git a/src/backend/x11.c b/src/backend/x11.c index 40ce480..f7c918d 100644 --- a/src/backend/x11.c +++ b/src/backend/x11.c @@ -121,7 +121,7 @@ static XVisualInfo* get_visual_info(Display* display) { return XGetVisualInfo(display, VisualIDMask, &xvi, &n); } -MwLL MwLLCreate(MwLL parent, int x, int y, int width, int height) { +static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) { MwLL r; Window p; XVisualInfo* xvi; @@ -225,7 +225,7 @@ MwLL MwLLCreate(MwLL parent, int x, int y, int width, int height) { return r; } -void MwLLDestroy(MwLL handle) { +static void MwLLDestroyImpl(MwLL handle) { MwLLDestroyCommon(handle); if(handle->xic) XDestroyIC(handle->xic); @@ -241,7 +241,7 @@ void MwLLDestroy(MwLL handle) { free(handle); } -void MwLLPolygon(MwLL handle, MwPoint* points, int points_count, MwLLColor color) { +static void MwLLPolygonImpl(MwLL handle, MwPoint* points, int points_count, MwLLColor color) { int i; XPoint* p = malloc(sizeof(*p) * points_count); @@ -256,19 +256,19 @@ void MwLLPolygon(MwLL handle, MwPoint* points, int points_count, MwLLColor color free(p); } -void MwLLLine(MwLL handle, MwPoint* points, MwLLColor color) { +static void MwLLLineImpl(MwLL handle, MwPoint* points, MwLLColor color) { XSetForeground(handle->display, handle->gc, color->pixel); XDrawLine(handle->display, handle->pixmap, handle->gc, points[0].x, points[0].y, points[1].x, points[1].y); } -MwLLColor MwLLAllocColor(MwLL handle, int r, int g, int b) { +static MwLLColor MwLLAllocColorImpl(MwLL handle, int r, int g, int b) { MwLLColor c = malloc(sizeof(*c)); MwLLColorUpdate(handle, c, r, g, b); return c; } -void MwLLColorUpdate(MwLL handle, MwLLColor c, int r, int g, int b) { +static void MwLLColorUpdateImpl(MwLL handle, MwLLColor c, int r, int g, int b) { XColor xc; if(handle->red_mask == 0) { @@ -292,7 +292,8 @@ void MwLLColorUpdate(MwLL handle, MwLLColor c, int r, int g, int b) { c->green = g; c->blue = b; } -void MwLLGetXYWH(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) { + +static void MwLLGetXYWHImpl(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) { Window root; unsigned int border, depth; @@ -308,7 +309,7 @@ void MwLLGetXYWH(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h) } } -void MwLLSetXY(MwLL handle, int x, int y) { +static void MwLLSetXYImpl(MwLL handle, int x, int y) { XSizeHints sh; long r; @@ -325,7 +326,7 @@ void MwLLSetXY(MwLL handle, int x, int y) { XSync(handle->display, False); } -void MwLLSetWH(MwLL handle, int w, int h) { +static void MwLLSetWHImpl(MwLL handle, int w, int h) { XSizeHints sh; long r; @@ -353,15 +354,15 @@ void MwLLSetWH(MwLL handle, int w, int h) { MwLLForceRender(handle); } -void MwLLFreeColor(MwLLColor color) { +static void MwLLFreeColorImpl(MwLLColor color) { free(color); } -void MwLLSetBackground(MwLL handle, MwLLColor color) { +static void MwLLSetBackgroundImpl(MwLL handle, MwLLColor color) { XSetWindowBackground(handle->display, handle->window, color->pixel); } -int MwLLPending(MwLL handle) { +static int MwLLPendingImpl(MwLL handle) { XEvent ev; if(XCheckTypedWindowEvent(handle->display, handle->window, ClientMessage, &ev) || XCheckWindowEvent(handle->display, handle->window, mask, &ev)) { XPutBackEvent(handle->display, &ev); @@ -370,7 +371,7 @@ int MwLLPending(MwLL handle) { return 0; } -void MwLLNextEvent(MwLL handle) { +static void MwLLNextEventImpl(MwLL handle) { XEvent ev; while(XCheckTypedWindowEvent(handle->display, handle->window, ClientMessage, &ev) || XCheckWindowEvent(handle->display, handle->window, mask, &ev)) { int render = 0; @@ -526,11 +527,11 @@ void MwLLNextEvent(MwLL handle) { } } -void MwLLSetTitle(MwLL handle, const char* title) { +static void MwLLSetTitleImpl(MwLL handle, const char* title) { XSetStandardProperties(handle->display, handle->window, title, title, None, (char**)NULL, 0, NULL); } -MwLLPixmap MwLLCreatePixmap(MwLL handle, unsigned char* data, int width, int height) { +static MwLLPixmap MwLLCreatePixmapImpl(MwLL handle, unsigned char* data, int width, int height) { MwLLPixmap r = malloc(sizeof(*r)); char* di = malloc(4 * width * height); char* dm = malloc(4 * width * height); @@ -560,7 +561,7 @@ MwLLPixmap MwLLCreatePixmap(MwLL handle, unsigned char* data, int width, int hei return r; } -void MwLLPixmapUpdate(MwLLPixmap r) { +static void MwLLPixmapUpdateImpl(MwLLPixmap r) { int y, x; for(y = 0; y < r->height; y++) { for(x = 0; x < r->width; x++) { @@ -588,7 +589,7 @@ void MwLLPixmapUpdate(MwLLPixmap r) { } } -void MwLLDestroyPixmap(MwLLPixmap pixmap) { +static void MwLLDestroyPixmapImpl(MwLLPixmap pixmap) { free(pixmap->raw); XDestroyImage(pixmap->image); XDestroyImage(pixmap->mask); @@ -597,7 +598,7 @@ void MwLLDestroyPixmap(MwLLPixmap pixmap) { free(pixmap); } -void MwLLDrawPixmap(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { +static void MwLLDrawPixmapImpl(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { if(rect->width == 0 || rect->height == 0) return; #ifdef USE_XRENDER if(pixmap->image != NULL && pixmap->use_xrender) { @@ -712,7 +713,7 @@ void MwLLDrawPixmap(MwLL handle, MwRect* rect, MwLLPixmap pixmap) { } } -void MwLLSetIcon(MwLL handle, MwLLPixmap pixmap) { +static void MwLLSetIconImpl(MwLL handle, MwLLPixmap pixmap) { unsigned long* icon = malloc((2 + pixmap->width * pixmap->height) * sizeof(*icon)); int i; Atom atom = XInternAtom(handle->display, "_NET_WM_ICON", False); @@ -729,7 +730,7 @@ void MwLLSetIcon(MwLL handle, MwLLPixmap pixmap) { free(icon); } -void MwLLForceRender(MwLL handle) { +static void MwLLForceRenderImpl(MwLL handle) { XEvent ev; memset(&ev, 0, sizeof(ev)); @@ -738,7 +739,7 @@ void MwLLForceRender(MwLL handle) { XSendEvent(handle->display, handle->window, False, ExposureMask, &ev); } -void MwLLSetCursor(MwLL handle, MwCursor* image, MwCursor* mask) { +static void MwLLSetCursorImpl(MwLL handle, MwCursor* image, MwCursor* mask) { Cursor cur; int y, x, ys, xs; char* di = malloc(MwCursorDataHeight * MwCursorDataHeight * 4); @@ -801,7 +802,7 @@ void MwLLSetCursor(MwLL handle, MwCursor* image, MwCursor* mask) { XDestroyImage(cmask); } -void MwLLDetach(MwLL handle, MwPoint* point) { +static void MwLLDetachImpl(MwLL handle, MwPoint* point) { int x = 0, y = 0; Window child, root, parent; Window* children; @@ -824,7 +825,7 @@ void MwLLDetach(MwLL handle, MwPoint* point) { if(xwa.map_state == IsViewable) wait_map(handle, 0, 0); } -void MwLLShow(MwLL handle, int show) { +static void MwLLShowImpl(MwLL handle, int show) { if(show) { wait_map(handle, 0, 0); @@ -834,7 +835,7 @@ void MwLLShow(MwLL handle, int show) { } } -void MwLLMakePopup(MwLL handle, MwLL parent) { +static void MwLLMakePopupImpl(MwLL handle, MwLL parent) { Atom wndtype = XInternAtom(handle->display, "_NET_WM_WINDOW_TYPE", False); Atom wnddlg = XInternAtom(handle->display, "_NET_WM_WINDOW_TYPE_DIALOG", False); Atom wndstate = XInternAtom(handle->display, "_NET_WM_STATE", False); @@ -849,7 +850,7 @@ void MwLLMakePopup(MwLL handle, MwLL parent) { wait_map(handle, 1, 0); } -void MwLLSetSizeHints(MwLL handle, int minx, int miny, int maxx, int maxy) { +static void MwLLSetSizeHintsImpl(MwLL handle, int minx, int miny, int maxx, int maxy) { XSizeHints* hints = XAllocSizeHints(); long ret; @@ -868,7 +869,7 @@ void MwLLSetSizeHints(MwLL handle, int minx, int miny, int maxx, int maxy) { wait_map(handle, 1, 0); } -void MwLLMakeBorderless(MwLL handle, int toggle) { +static void MwLLMakeBorderlessImpl(MwLL handle, int toggle) { Atom atom = XInternAtom(handle->display, "_MOTIF_WM_HINTS", 0); mwm_hints_t hints; @@ -881,11 +882,11 @@ void MwLLMakeBorderless(MwLL handle, int toggle) { wait_map(handle, 1, 0); } -void MwLLFocus(MwLL handle) { +static void MwLLFocusImpl(MwLL handle) { XSetInputFocus(handle->display, handle->window, RevertToNone, CurrentTime); } -void MwLLGrabPointer(MwLL handle, int toggle) { +static void MwLLGrabPointerImpl(MwLL handle, int toggle) { XWindowAttributes attr; XGetWindowAttributes(handle->display, handle->window, &attr); @@ -899,14 +900,14 @@ void MwLLGrabPointer(MwLL handle, int toggle) { } } -void MwLLSetClipboard(MwLL handle, const char* text) { +static void MwLLSetClipboardImpl(MwLL handle, const char* text) { /* TODO */ (void)handle; (void)text; } -char* MwLLGetClipboard(MwLL handle) { +static char* MwLLGetClipboardImpl(MwLL handle) { Atom clip, target, prop; XEvent ev; XEvent* queue = NULL; @@ -947,7 +948,7 @@ char* MwLLGetClipboard(MwLL handle) { return r; } -void MwLLMakeToolWindow(MwLL handle) { +static void MwLLMakeToolWindowImpl(MwLL handle) { XSetWindowAttributes xswa; Atom wndtype = XInternAtom(handle->display, "_NET_WM_WINDOW_TYPE", False); Atom wndmenu = XInternAtom(handle->display, "_NET_WM_WINDOW_TYPE_MENU", False); @@ -957,3 +958,11 @@ void MwLLMakeToolWindow(MwLL handle) { XChangeWindowAttributes(handle->display, handle->window, CWOverrideRedirect, &xswa); XChangeProperty(handle->display, handle->window, wndtype, XA_ATOM, 32, PropModeReplace, (unsigned char*)&wndmenu, 1); } + +static int MwLLX11CallInitImpl(void) { + /* TODO: check properly */ + return 0; +} + +#include "call.c" +CALL(X11); diff --git a/src/core.c b/src/core.c index d261537..5aca1a3 100644 --- a/src/core.c +++ b/src/core.c @@ -604,3 +604,29 @@ void MwToggleDarkTheme(MwWidget handle, int toggle) { MwWidget MwGetParent(MwWidget handle) { return handle->parent; } + +typedef int (*call_t)(void); +int MwLibraryInit(void) { +#ifdef USE_X11 + extern call_t MwLLX11CallInit; +#endif +#ifdef USE_GDI + extern call_t MwLLGDICallInit; +#endif + + call_t calls[] = { +#ifdef USE_X11 + MwLLX11CallInit, +#endif +#ifdef USE_GDI + MwLLGDICallInit, +#endif + NULL}; + int i; + + for(i = 0; calls[i] != NULL; i++) { + if(calls[i]() == 0) return 0; + } + + return 1; +} diff --git a/src/lowlevel.c b/src/lowlevel.c index 4b3f9ba..bd77cd9 100644 --- a/src/lowlevel.c +++ b/src/lowlevel.c @@ -1,6 +1,52 @@ /* $Id$ */ #include +MwLL (*MwLLCreate)(MwLL parent, int x, int y, int width, int height); +void (*MwLLDestroy)(MwLL handle); + +void (*MwLLPolygon)(MwLL handle, MwPoint* points, int points_count, MwLLColor color); +void (*MwLLLine)(MwLL handle, MwPoint* points, MwLLColor color); + +MwLLColor (*MwLLAllocColor)(MwLL handle, int r, int g, int b); +void (*MwLLColorUpdate)(MwLL handle, MwLLColor c, int r, int g, int b); +void (*MwLLFreeColor)(MwLLColor color); + +void (*MwLLGetXYWH)(MwLL handle, int* x, int* y, unsigned int* w, unsigned int* h); +void (*MwLLSetXY)(MwLL handle, int x, int y); +void (*MwLLSetWH)(MwLL handle, int w, int h); + +void (*MwLLSetTitle)(MwLL handle, const char* title); + +int (*MwLLPending)(MwLL handle); +void (*MwLLNextEvent)(MwLL handle); + +MwLLPixmap (*MwLLCreatePixmap)(MwLL handle, unsigned char* data, int width, int height); +void (*MwLLPixmapUpdate)(MwLLPixmap pixmap); +void (*MwLLDestroyPixmap)(MwLLPixmap pixmap); +void (*MwLLDrawPixmap)(MwLL handle, MwRect* rect, MwLLPixmap pixmap); +void (*MwLLSetIcon)(MwLL handle, MwLLPixmap pixmap); + +void (*MwLLForceRender)(MwLL handle); + +void (*MwLLSetCursor)(MwLL handle, MwCursor* image, MwCursor* mask); +void (*MwLLDetach)(MwLL handle, MwPoint* point); +void (*MwLLShow)(MwLL handle, int show); + +void (*MwLLMakePopup)(MwLL handle, MwLL parent); + +void (*MwLLSetSizeHints)(MwLL handle, int minx, int miny, int maxx, int maxy); +void (*MwLLMakeBorderless)(MwLL handle, int toggle); + +void (*MwLLSetBackground)(MwLL handle, MwLLColor color); + +void (*MwLLFocus)(MwLL handle); +void (*MwLLGrabPointer)(MwLL handle, int toggle); + +void (*MwLLSetClipboard)(MwLL handle, const char* text); +char* (*MwLLGetClipboard)(MwLL handle); + +void (*MwLLMakeToolWindow)(MwLL handle); + void MwLLCreateCommon(MwLL handle) { handle->handler = malloc(sizeof(*handle->handler)); memset(handle->handler, 0, sizeof(*handle->handler)); diff --git a/src/widget/combobox.c b/src/widget/combobox.c index fbf95c9..50cf598 100644 --- a/src/widget/combobox.c +++ b/src/widget/combobox.c @@ -47,7 +47,7 @@ static void draw(MwWidget handle) { if(arrlen(cb->list) > cb->selected) { MwPoint p; - p.x = MwDefaultBorderWidth(handle) * 2; + p.x = MwDefaultBorderWidth(handle) * 2 + 4; p.y = MwGetInteger(handle, MwNheight) / 2; MwDrawText(handle, &p, cb->list[cb->selected], 0, MwALIGNMENT_BEGINNING, text); @@ -110,7 +110,7 @@ static void click(MwWidget handle) { if(l > width) width = l; } - cb->listbox = MwVaCreateWidget(MwListBoxClass, "listbox", handle, 0, MwGetInteger(handle, MwNheight), width, MwTextHeight(handle, "M") * 6 + MwDefaultBorderWidth(handle) * 2, + cb->listbox = MwVaCreateWidget(MwListBoxClass, "listbox", handle, 0, MwGetInteger(handle, MwNheight), width, MwTextHeight(handle, "M") * 6 + MwDefaultBorderWidth(handle) * 2 + MwTextHeight(handle, "M") / 4, MwNsingleClickSelectable, 1, NULL); MwLLShow(cb->listbox->lowlevel, 0); diff --git a/src/widget/listbox.c b/src/widget/listbox.c index 499cd66..03d044a 100644 --- a/src/widget/listbox.c +++ b/src/widget/listbox.c @@ -231,7 +231,7 @@ static void frame_draw(MwWidget handle) { MwLLDrawPixmap(handle->lowlevel, &r2, lb->list[i].pixmap); } p.y += MwTextHeight(handle, "M") / 2; - p.x = MwGetInteger(handle->parent, MwNleftPadding) + MwDefaultBorderWidth(handle); + p.x = MwGetInteger(handle->parent, MwNleftPadding) + MwDefaultBorderWidth(handle) + 4; for(j = 0; j < arrlen(lb->list[i].name); j++) { char* t = lb->list[i].name[j]; @@ -344,7 +344,7 @@ static void draw(MwWidget handle) { if(MwGetInteger(handle, MwNhasHeading) && arrlen(lb->list) > 0) { MwPoint p; int i; - int x = 0; + int x = 4; r.width -= 16;