From: Michael D. Lowis Date: Fri, 2 Oct 2020 03:35:06 +0000 (-0400) Subject: changed style and added new ui functions X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=0022183b86b52a95e8ff792508fcdb260094f5b8;p=proto%2Faos.git changed style and added new ui functions --- diff --git a/inc/libui.h b/inc/libui.h index 984aaee..f3e2bc9 100644 --- a/inc/libui.h +++ b/inc/libui.h @@ -1,10 +1,15 @@ typedef struct UIFont UIFont; typedef struct UIWin UIWin; -UIWin* WindowCreate(char* title); -void WindowDelete(UIWin* win); -void WindowShow(UIWin* win); -void WindowHide(UIWin* win); +UIWin* win_create(char* title); +void win_delete(UIWin* win); +void win_show(UIWin* win); +void win_hide(UIWin* win); + +UIFont font_load(char* patt); +void font_close(UIFont font); + +void ui_begin(UIWin* win); +void ui_end(UIWin* win); + -UIFont FontLoad(char* patt); -void FontClose(UIFont font); \ No newline at end of file diff --git a/src/libui/font_close.c b/src/libui/font_close.c new file mode 100644 index 0000000..6891a1e --- /dev/null +++ b/src/libui/font_close.c @@ -0,0 +1,9 @@ +#include +#include +#include +#include "libui_impl.h" + +void font_close(UIFont font) +{ + XftFontClose(X.display, font.font); +} \ No newline at end of file diff --git a/src/libui/font_load.c b/src/libui/font_load.c index 71eed5c..aa469b7 100644 --- a/src/libui/font_load.c +++ b/src/libui/font_load.c @@ -3,7 +3,7 @@ #include #include "libui_impl.h" -UIFont FontLoad(char* patt) +UIFont font_load(char* patt) { static bool inited = false; if (!inited && !FcInit()) @@ -16,15 +16,15 @@ UIFont FontLoad(char* patt) FcPattern* pattern = FcNameParse((FcChar8 *)patt); if (pattern) { -// /* load the base font */ -// FcResult result; -// FcPattern* match = XftFontMatch(X.display, X.screen_num, pattern, &result); -// if (match) -// { -// font = XftFontOpenPattern(X.display, match); -// } -// FcPatternDestroy(pattern); -// FcPatternDestroy(match); + /* load the base font */ + FcResult result; + FcPattern* match = XftFontMatch(X.display, X.screen_num, pattern, &result); + if (match) + { + font = XftFontOpenPattern(X.display, match); + } + FcPatternDestroy(pattern); + FcPatternDestroy(match); } if (!font) diff --git a/src/libui/libui_impl.h b/src/libui/libui_impl.h index 1da7734..06a9761 100644 --- a/src/libui/libui_impl.h +++ b/src/libui/libui_impl.h @@ -9,13 +9,6 @@ struct UIFont { struct UIWin { struct UIWin* next; - Display* display; - Window root; - Screen* screen; - int screen_num; - int depth; - Visual* visual; - Colormap colormap; int width; int height; Window self; @@ -25,7 +18,19 @@ struct UIWin XftFont* font; }; -extern struct UIWin* Managed_Windows; +struct XConf +{ + Display* display; + Window root; + Screen* screen; + int screen_num; + int depth; + Visual* visual; + Colormap colormap; + struct UIWin* windows; +}; + +extern struct XConf X; enum { WIN_BACKGROUND = 0xEAEAEA diff --git a/src/libui/ui_begin.c b/src/libui/ui_begin.c new file mode 100644 index 0000000..0042d31 --- /dev/null +++ b/src/libui/ui_begin.c @@ -0,0 +1,10 @@ +#include +#include +#include +#include "libui_impl.h" + +void ui_begin(UIWin* win) +{ + XSetForeground(X.display, win->gc, 0xEAEAEA); + XFillRectangle(X.display, win->pixmap, win->gc, 0, 0, win->width, win->height); +} diff --git a/src/libui/ui_end.c b/src/libui/ui_end.c new file mode 100644 index 0000000..11baa5a --- /dev/null +++ b/src/libui/ui_end.c @@ -0,0 +1,10 @@ +#include +#include +#include +#include "libui_impl.h" + +void ui_end(UIWin* win) +{ + XCopyArea(X.display, win->pixmap, win->self, win->gc, 0, 0, win->width, win->height, 0, 0); + XSync(X.display, False); +} diff --git a/src/libui/window_create.c b/src/libui/window_create.c index 8b82ffe..a321c69 100644 --- a/src/libui/window_create.c +++ b/src/libui/window_create.c @@ -3,18 +3,20 @@ #include #include "libui_impl.h" -static Display* XDisplay = NULL; -struct UIWin* Managed_Windows = NULL; +//static Display* XDisplay = NULL; +//struct UIWin* Managed_Windows = NULL; -UIWin* WindowCreate(char* title) +struct XConf X = {0}; + +UIWin* win_create(char* title) { assert(title); /* initialize xlib if it isn't already */ - if (!XDisplay) + if (!X.display) { - XDisplay = XOpenDisplay(NULL); - if (!XDisplay) + X.display = XOpenDisplay(NULL); + if (!X.display) { exit(1); } @@ -22,31 +24,29 @@ UIWin* WindowCreate(char* title) /* allocate a window struct and start populating it */ UIWin* win = ecalloc(1, sizeof(UIWin)); - win->display = XDisplay; - win->root = DefaultRootWindow(win->display); - win->screen = DefaultScreenOfDisplay(win->display); - win->screen_num = DefaultScreen(win->display); - win->depth = DefaultDepth(win->display, win->screen_num); + X.root = DefaultRootWindow(X.display); + X.screen = DefaultScreenOfDisplay(X.display); + X.screen_num = DefaultScreen(X.display); + X.depth = DefaultDepth(X.display, X.screen_num); XWindowAttributes wa; - XGetWindowAttributes(win->display, win->root, &wa); - win->visual = wa.visual; - win->colormap = wa.colormap; + XGetWindowAttributes(X.display, X.root, &wa); + X.visual = wa.visual; + X.colormap = wa.colormap; win->width = 640; win->height = 480; - win->self = XCreateSimpleWindow(win->display, win->root, 0, 0, win->width, win->height, 0, 0, 0xEAEAEA); - XStoreName(win->display, win->self, title); + win->self = XCreateSimpleWindow(X.display, X.root, 0, 0, win->width, win->height, 0, 0, 0xEAEAEA); + XStoreName(X.display, win->self, title); /* initialize the graphics */ - win->pixmap = XCreatePixmap(win->display, win->self, win->width, win->height, win->depth); - win->xft = XftDrawCreate(win->display, win->pixmap, win->visual, win->colormap); -// win->font = FontLoad("Verdana:size=12"); + win->pixmap = XCreatePixmap(X.display, win->self, win->width, win->height, X.depth); + win->xft = XftDrawCreate(X.display, win->pixmap, X.visual, X.colormap); XGCValues gcv; gcv.foreground = 0xEAEAEA; gcv.graphics_exposures = False; - win->gc = XCreateGC(win->display, win->self, GCGraphicsExposures, &gcv); + win->gc = XCreateGC(X.display, win->self, GCGraphicsExposures, &gcv); /* initialize event handling */ - XSelectInput(win->display, win->self, 0 + XSelectInput(X.display, win->self, 0 | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask @@ -59,8 +59,8 @@ UIWin* WindowCreate(char* title) ); /* register it so the even loop will manage it*/ - win->next = Managed_Windows; - Managed_Windows = win; + win->next = X.windows; + X.windows = win; return win; } diff --git a/src/libui/window_delete.c b/src/libui/window_delete.c index 7f2db56..0aa5b5c 100644 --- a/src/libui/window_delete.c +++ b/src/libui/window_delete.c @@ -3,10 +3,10 @@ #include #include "libui_impl.h" -void WindowDelete(UIWin* win) +void win_delete(UIWin* win) { assert(win); - WindowHide(win); + win_hide(win); /* TODO: remove window from managed list */ /* TODO: delete/close the X window and free resources */ } diff --git a/src/libui/window_hide.c b/src/libui/window_hide.c index 78ca6e8..f235901 100644 --- a/src/libui/window_hide.c +++ b/src/libui/window_hide.c @@ -3,8 +3,8 @@ #include #include "libui_impl.h" -void WindowShow(UIWin* win) +void win_show(UIWin* win) { - XUnmapWindow(win->display, win->self); - XSync(win->display, False); + XUnmapWindow(X.display, win->self); + XSync(X.display, False); } diff --git a/src/libui/window_show.c b/src/libui/window_show.c index 6cc8d59..c034c99 100644 --- a/src/libui/window_show.c +++ b/src/libui/window_show.c @@ -3,8 +3,8 @@ #include #include "libui_impl.h" -void WindowShow(UIWin* win) +void win_show(UIWin* win) { - XMapWindow(win->display, win->self); - XSync(win->display, False); + XMapWindow(X.display, win->self); + XSync(X.display, False); }