Commit Diff


commit - 870fe49e4274af2aa8cdc5315feb6956330d2af7
commit + 94783f656eaf549437a61d52e2df97f28791e880
blob - 2fde96a624cd67966672ed3bfcb09cb4d96e552c
blob + aec9a0c7220e03ce9f502e4ec0c4777ea53660cc
--- TODO
+++ TODO
@@ -1,47 +1,20 @@
-Event targets
+- Create debugging macros that make programs more verbose when compiling
+  with the `MUI_DEBUG` flag
 
-Debug macro
+- Complete man page 7 for a brief description of the library ins and outs
 
-Complete man `mui.1` for demos
+- Complete man page 1 for library demos that will be run using the mui
+  command with the demo name
 
-Complete man `mui.3`
+- Implement nested groups
 
-Nested groups
+- Implement groups styles (ex. VStack groups, HStack groups, Grid groups,
+  etc.) with a set of flags (ex. Scrollable and clipping?)
 
-Groups styles (Scroll, VStack, HStack, Grid)
+- Add font options (ex. color, size, etc) with flags (ex. multiline, text
+  wrapping)
 
-Group clipping
+- Add a minimum size option for layouts
 
-Font faces (color, size, style)
-
-Minimum layout dimensions
-
-Multiline support text rendering
-
-Man page
-
-Fix image rendering and text rendering on FreeBSD and NetBSD (DONE)
-
-Fix issue when text render with noise when having a small len (DONE?)
-
-Cleanup functions aka delete functions (DONE)
-
-Fix alignment to update when added to group (DONE)
-
-New flag 'MUI_SCALE_X' and 'MUI_SCALE_Y' which will be actual scale of
-the layout while 'MUI_EXPAND_X' and 'MUI_EXPAND_Y' will be the actual
-width and height. (DONE)
-
-Proper scale matrix for xcb_render (DONE)
-
-Layout anchoring (DONE)
-
-Change shape color after adding to group (DONE)
-
-Events (KeyPress and KeyRelease) (DONE)
-
-Fix issue when shape changes color but isn't visible until update (DONE)
-
-Image rendering (DONE)
-
-Text rendering (the hardest) (DONE)
+- Fix issues happening in text rendering (noises that adds odd colors to
+  text and sometimes text from a dead program invading the new one)
blob - 043be9b90254b76b7bcdf9f49dc09e9758c7f0b4
blob + 2a2c2f029682e93ee55c38e5cf3c7cd27737c954
--- demo/event/main.c
+++ demo/event/main.c
@@ -5,6 +5,8 @@
  */
 /********************************************************/
 
+#include <unistd.h>
+
 #include "mui.h"
 
 #define PRESS     0
@@ -104,43 +106,54 @@ main(void)
         event = mui_pop_event(window.handler);
 
         switch (event.type) {
-            case MUI_EVENT_MOUSE_MOTION:
-                if (event_recorder[MOTION].ptr && event.target.ptr != event_recorder[MOTION].ptr) {
-                    if (event_recorder[MOTION].ptr != event_recorder[PRESS].ptr)
-                        mui_set_shape_color(event_recorder[MOTION].ptr, 1.0, 1.0, 1.0, 1.0);
-                    event_recorder[MOTION].ptr = NULL;
-                }
-
-                if (event.target.ptr && event_recorder[MOTION].ptr != event.target.ptr) {
-                    mui_set_shape_color(event.target.ptr, 0.75, 0.75, 0.75, 1.0);
-                    event_recorder[MOTION].ptr = event.target.ptr;
-                }
-                break;
-
             case MUI_EVENT_MOUSE_PRESS:
-                if (event.target.ptr && event_recorder[PRESS].ptr != event.target.ptr) {
-                    mui_set_shape_color(event.target.ptr, 0.5, 0.5, 0.5, 1.0);
-                }
                 event_recorder[PRESS].ptr = event.target.ptr;
+
+                if (event.target.ptr)
+                    mui_set_shape_color(event.target.ptr, 0.5, 0.5, 0.5, 1.0);
                 break;
+            case MUI_EVENT_MOUSE_MOTION:
+                if (event.target.ptr == event_recorder[MOTION].ptr)
+                    break;
 
+                if (event_recorder[MOTION].ptr)
+                    if (event_recorder[MOTION].ptr != event_recorder[PRESS].ptr)
+                        mui_set_shape_color(event_recorder[MOTION].ptr, 1.0, 1.0, 1.0, 1.0);
+
+                if (event.target.ptr && event.target.ptr != event_recorder[PRESS].ptr)
+                    mui_set_shape_color(event.target.ptr, 0.75, 0.75, 0.75, 1.0);
+                event_recorder[MOTION].ptr = event.target.ptr;
+
+                break;
             case MUI_EVENT_MOUSE_RELEASE:
-                if (event_recorder[PRESS].ptr) {
-                    mui_set_shape_color(event_recorder[PRESS].ptr, 1.0, 1.0, 1.0, 1.0);
-                    event_recorder[PRESS].ptr = NULL;
-                }
-
                 if (event.target.ptr) {
-                    if (event_recorder[MOTION].ptr)
-                        mui_set_shape_color(event_recorder[MOTION].ptr, 1.0, 1.0, 1.0, 1.0);
-
-                    mui_set_shape_color(event.target.ptr, 0.75, 0.75, 0.75, 1.0);
                     event_recorder[MOTION].ptr = event.target.ptr;
+                    if (event_recorder[MOTION].ptr == event_recorder[PRESS].ptr)
+                        mui_set_shape_color(event.target.ptr, 0.75, 0.75, 0.75, 1.0);
+                    else {
+                        if (event_recorder[PRESS].ptr)
+                            mui_set_shape_color(event_recorder[PRESS].ptr, 1.0, 1.0, 1.0, 1.0);
+                    }
+                } else {
+                    if (event_recorder[PRESS].ptr)
+                        mui_set_shape_color(event_recorder[PRESS].ptr, 1.0, 1.0, 1.0, 1.0);
                 }
+
+                event_recorder[PRESS].ptr = NULL;
+
+                break;
+            default:
+                break;
         }
+
+        usleep(10000);
         mui_update();
     }
 
+    for (int i = 0; i < 5; i++)
+        mui_delete_shape(buttons[i].shape);
 
+    mui_delete_window(window.mw);
+
     return 0;
 }
blob - d555489a457852e1d81213e465561c078d6ecc12
blob + 7550594e8ce6f36f6d267ec6b8d9396befa14332
--- event.c
+++ event.c
@@ -28,7 +28,7 @@ mui_push_event(struct mui_event_handler *handler, stru
     if (handler->count == MUI_EVENT_MAX) {
         struct mui_event *tail;
 
-        tail = TAILQ_LAST(&handler->head, ev_list);
+        tail = TAILQ_FIRST(&handler->head);
         TAILQ_REMOVE(&handler->head, tail, entries);
         handler->count--;
         free(tail);
@@ -56,7 +56,7 @@ mui_pop_event(struct mui_event_handler *handler)
     if (handler->count == 0)
         return event;
 
-    head = TAILQ_FIRST(&handler->head);
+    head = TAILQ_LAST(&handler->head, ev_list);
 
     memcpy(&event, head, sizeof(event));
     TAILQ_REMOVE(&handler->head, head, entries);
blob - 30a8ba0bd7cb98e97ed8cec4a94b029b0316d11e
blob + ce6f83d61a7141b265272ee276b83e3d79851a72
--- mui.h
+++ mui.h
@@ -55,7 +55,7 @@ struct mui_window;
 
 struct mui_ctx;
 
-#define MUI_EVENT_MAX           32
+#define MUI_EVENT_MAX           3
 
 enum {
     MUI_EVENT_NONE,
@@ -290,6 +290,10 @@ int                                 mui_ctx_get_font_h
 #define MUI_LABEL                   2
 #define MUI_IMAGE                   3
 #define MUI_GROUP                   4
+    #define MUI_VSTACK          1
+    #define MUI_HSTACK          2
+    #define MUI_ZSTACK          3
+    #define MUI_GRID            4
 
 /* LABEL FLAGS */