commit 6fe77315ff1cd8c27265b1597b5d8192337868d8 from: Onana Onana Xavier Manuel date: Mon Jul 6 17:12:32 2026 UTC Label and naming changes * Added aui_label * Changed naming of config to be more correct * Man Page update commit - 881cb741b107b58be69f057a332cb73fa57d1d99 commit + 6fe77315ff1cd8c27265b1597b5d8192337868d8 blob - 36e5840033333dc2939c3fdef1206d01fdc1f8c5 blob + 02ef472c17c38b13da36ebae7a87f31f33977bfc --- Makefile +++ Makefile @@ -7,6 +7,7 @@ SRCS= button.c \ driver.c \ frame.c \ font.c \ + label.c \ layout.c \ ui.c \ xcb.c \ blob - 5ecf4853fe1d024726a75e43449af4c6e19fd4f3 blob + 9a3054785d21ab5b0521066d79388bcd36360df7 --- aui.h +++ aui.h @@ -55,6 +55,7 @@ struct aui_window; struct aui_frame; struct aui_canvas; /* rendering free of rules */ struct aui_button; +struct aui_label; struct aui_window_config { unsigned int width; @@ -74,6 +75,12 @@ struct aui_canvas_config { struct aui_color bg; }; +struct aui_label_config { + const char *text; + struct aui_color fg; + struct aui_color bg; +}; + struct aui_canvas_item; void aui_run(void); @@ -82,6 +89,7 @@ struct aui_window *aui_window_new(struct aui_window_co struct aui_button *aui_button_new(struct aui_widget *, struct aui_button_config *); struct aui_frame *aui_frame_new(struct aui_widget *); struct aui_canvas *aui_canvas_new(struct aui_widget *); +struct aui_label *aui_label_new(struct aui_widget *, struct aui_label_config *); int aui_place(struct aui_widget *, struct aui_placepar *); int aui_pack(struct aui_widget *, struct aui_packpar *); int aui_grid(struct aui_widget *, struct aui_gridpar *); blob - b39ada7eed8b8720e3f6c99144a31c9033dd8ce4 blob + 05d261df8fbc7e48865fdd6f704122cb3d5ad61f --- aui_run.3 +++ aui_run.3 @@ -19,9 +19,11 @@ .Ft void .Fn aui_destroy "struct aui_widget *" .Ft struct aui_window* -.Fn aui_window_new "struct aui_windowconfig * config" +.Fn aui_window_new "struct aui_window_config * config" .Ft struct aui_button* -.Fn aui_button_new "struct aui_widget * parent" "struct aui_buttonconfig * config" +.Fn aui_button_new "struct aui_widget * parent" "struct aui_button_config * config" +.Ft struct aui_label* +.Fn aui_label_new "struct aui_widget * parent" "struct aui_label_config * config" .Ft struct aui_frame* .Fn aui_frame_new "struct aui_widget * parent" .Ft struct aui_canvas* blob - 771779d9e1ed3c295d565aecdee4c4bb88d04ff7 blob + f5a9d06acc51ebbf6ca18aa7afc93f34839645b3 --- button.c +++ button.c @@ -39,9 +39,7 @@ aui_button_new(struct aui_widget *parent, struct aui_b { struct aui_button *button = calloc(1, sizeof(struct aui_button)); struct aui_widget *widget = &button->widget; - widget_init(&button->widget); - widget->in_ops = &button_ops; - widget->type = WIDGET_TYPE_BUTTON; + widget_init(&button->widget, WIDGET_TYPE_BUTTON, &button_ops); /* * Creating the rectangle primitive blob - 33b2058eb13f6c236e7b88184dd49005fe00255e blob + 56a859f9038051123999454079c51e46acdeac6c --- canvas.c +++ canvas.c @@ -41,9 +41,7 @@ aui_canvas_new(struct aui_widget *parent) struct aui_canvas *canvas = calloc(1, sizeof(struct aui_canvas)); struct aui_widget *widget = (struct aui_widget *)canvas; - widget_init(widget); - widget->in_ops = &canvas_ops; - widget->type = WIDGET_TYPE_CANVAS; + widget_init(widget, WIDGET_TYPE_CANVAS, &canvas_ops); widget_add(parent, widget); widget->primitives.count = 1; blob - 0d68d695d6c279aada0f3985fbaf0b41c7f397e9 blob + bd3fe7736b6637d8e84f3c8588ba9e901d6d5063 --- frame.c +++ frame.c @@ -34,9 +34,7 @@ aui_frame_new(struct aui_widget *parent) struct aui_widget *widget = (struct aui_widget *)frame; struct aui_container *con = (struct aui_container *)frame; - widget_init(widget); - widget->in_ops = &frame_ops; - widget->type = WIDGET_TYPE_FRAME; + widget_init(widget, WIDGET_TYPE_FRAME, &frame_ops); widget_add(parent, widget); con->map_count = 0; blob - /dev/null blob + 68b44b9e7de9f46ca42c126550437393240b084f (mode 644) --- /dev/null +++ label.c @@ -0,0 +1,100 @@ +#include +#include +#include + +#include "driver.h" +#include "widget.h" + +static void label_mouse_hover(struct aui_widget *, uint16_t, uint16_t); +static void label_mouse_unhover(struct aui_widget *); +static void label_mouse_press(struct aui_widget *, uint16_t, uint16_t, uint8_t); +static void label_mouse_release(struct aui_widget *, uint16_t, uint16_t, uint8_t); +static void label_set_geometry(struct aui_widget *, struct aui_geometry *); +static void label_free(struct aui_widget *); +static struct aui_geometry label_get_min_size(struct aui_widget *); + +static struct widget_ops label_ops = { + label_mouse_hover, + label_mouse_unhover, + label_mouse_press, + label_mouse_release, + label_set_geometry, /* set geometry */ + label_free, + label_get_min_size, +}; + +struct aui_label_config default_config = { + .text = "Hello AUI", +}; + +struct aui_label* +aui_label_new(struct aui_widget *parent, struct aui_label_config *config) +{ + struct aui_label *label = calloc(1, sizeof(struct aui_label)); + struct aui_widget *widget = &label->widget; + + widget_init(widget, WIDGET_TYPE_LABEL, &label_ops); + widget_add(parent, widget); + + label->config = (config == NULL) ? default_config : *config; + + widget->primitives.count = 1; + widget->primitives.list = calloc(widget->primitives.count, sizeof(struct primitive*)); + + widget->primitives.list[0] = driver->ops->create_text(); + driver->ops->set_text(widget->primitives.list[0], label->config.text, 0, 0); + + return label; +} + +static void +label_mouse_hover(struct aui_widget *widget, uint16_t dx, uint16_t dy) +{ + +} + +static void +label_mouse_unhover(struct aui_widget *widget) +{ + +} + +static void +label_mouse_press(struct aui_widget *widget, uint16_t x, uint16_t y, uint8_t button) +{ + +} + +static void +label_mouse_release(struct aui_widget *widget, uint16_t x, uint16_t y, uint8_t button) +{ + +} + +static void +label_set_geometry(struct aui_widget *widget, struct aui_geometry *geom) +{ + struct aui_geometry tgeom = driver->ops->get_text_geometry(widget->primitives.list[0]); + struct aui_label *label = (struct aui_label *)widget; + + driver->ops->set_text( + widget->primitives.list[0], + label->config.text, + geom->x + geom->width / 2 - tgeom.width / 2 , + geom->y + geom->height + ); + widget->geom = *geom; +} + +static void +label_free(struct aui_widget *widget) +{ + +} + +static struct aui_geometry +label_get_min_size(struct aui_widget *widget) +{ + struct aui_geometry geom = driver->ops->get_text_geometry(widget->primitives.list[0]); + return geom; +} blob - 2e226b2403669bc70d26443bc3ee863176fb9162 blob + bcc66e218787c447009041fffa14987e560db0b8 --- widget.c +++ widget.c @@ -7,7 +7,7 @@ #include "primitive.h" void -widget_init(struct aui_widget *widget) +widget_init(struct aui_widget *widget, unsigned int type, struct widget_ops *ops) { TAILQ_INIT(&(widget)->queue); widget->geom = (struct aui_geometry) { 0 }; @@ -16,6 +16,9 @@ widget_init(struct aui_widget *widget) memset(&widget->placepar, 0, sizeof(struct aui_placepar)); memset(&widget->gridpar, 0, sizeof(struct aui_gridpar)); memset(&widget->packpar, 0, sizeof(struct aui_packpar)); + + widget->type = type; + widget->in_ops = ops; } void blob - d446131c88362e0184232c761d4b8c89b9c337d4 blob + e8bf66dad05133110e600b2f51b6f4872c591f5c --- widget.h +++ widget.h @@ -19,6 +19,7 @@ enum widget_type { WIDGET_TYPE_FRAME, WIDGET_TYPE_CANVAS, WIDGET_TYPE_BUTTON, + WIDGET_TYPE_LABEL, }; struct widget_primitives { @@ -101,9 +102,14 @@ struct aui_button { struct aui_button_config config; }; +struct aui_label { + struct aui_widget widget; + struct aui_label_config config; +}; + extern struct aui_window_list wlist; -void widget_init(struct aui_widget *); +void widget_init(struct aui_widget*, unsigned int, struct widget_ops*); void widget_draw(struct aui_widget *); void widget_add(struct aui_widget *, struct aui_widget *); void widget_remove(struct aui_widget *, struct aui_widget *); blob - 8b025f0234b95cbb3ae9f98e7a02429eca6c50b4 blob + 8b4e7d1ce36c108e08792a4e6c43df901dce0393 --- window.c +++ window.c @@ -50,13 +50,11 @@ aui_window_new(struct aui_window_config *config) struct aui_window *aw = driver->ops->create_window(config); struct aui_widget *widget = (struct aui_widget *)aw; struct aui_container *con = (struct aui_container *)aw; - widget->type = WIDGET_TYPE_WINDOW; con->map_count = 0; LIST_INSERT_HEAD(&wlist, aw, entries); - widget_init(widget); + widget_init(widget, WIDGET_TYPE_WINDOW, &window_ops); - widget->in_ops = &window_ops; widget->mapped = 1; widget->window = aw;