commit - 881cb741b107b58be69f057a332cb73fa57d1d99
commit + 6fe77315ff1cd8c27265b1597b5d8192337868d8
blob - 36e5840033333dc2939c3fdef1206d01fdc1f8c5
blob + 02ef472c17c38b13da36ebae7a87f31f33977bfc
--- Makefile
+++ Makefile
driver.c \
frame.c \
font.c \
+ label.c \
layout.c \
ui.c \
xcb.c \
blob - 5ecf4853fe1d024726a75e43449af4c6e19fd4f3
blob + 9a3054785d21ab5b0521066d79388bcd36360df7
--- aui.h
+++ aui.h
struct aui_frame;
struct aui_canvas; /* rendering free of rules */
struct aui_button;
+struct aui_label;
struct aui_window_config {
unsigned int width;
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);
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
.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
{
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
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
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
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#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
#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 };
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
WIDGET_TYPE_FRAME,
WIDGET_TYPE_CANVAS,
WIDGET_TYPE_BUTTON,
+ WIDGET_TYPE_LABEL,
};
struct widget_primitives {
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
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;