# HG changeset patch # User David Demelier # Date 1692641753 -7200 # Node ID dae4cdc6a984e4fa4ebbc8db14e796a2bcfb4358 # Parent ade3030f29f042e3de737f175fce9d9d68cdb498 ui: simplify frame diff -r ade3030f29f0 -r dae4cdc6a984 examples/example-ui/example-ui.c --- a/examples/example-ui/example-ui.c Mon Aug 21 07:43:18 2023 +0200 +++ b/examples/example-ui/example-ui.c Mon Aug 21 20:15:53 2023 +0200 @@ -108,9 +108,7 @@ .x = FRAME_ORIGIN_X, .y = FRAME_ORIGIN_Y, .w = FRAME_WIDTH, - .h = FRAME_HEIGHT, - .delegate = &mlk_frame_delegate, - .style = &mlk_style + .h = FRAME_HEIGHT } }, .header = { diff -r ade3030f29f0 -r dae4cdc6a984 libmlk-ui/mlk/ui/frame.c --- a/libmlk-ui/mlk/ui/frame.c Mon Aug 21 07:43:18 2023 +0200 +++ b/libmlk-ui/mlk/ui/frame.c Mon Aug 21 20:15:53 2023 +0200 @@ -21,68 +21,51 @@ #include #include "frame.h" -#include "style.h" +#include "ui_p.h" static void -draw(struct mlk_frame_delegate *self, const struct mlk_frame *frame) +draw(struct mlk_frame_style *self, struct mlk_frame *frame) { - (void)self; - - const struct mlk_style_attr *attr = &frame->style->normal; - - mlk_painter_set_color(attr->color.border); + mlk_painter_set_color(self->border); mlk_painter_draw_rectangle(frame->x, frame->y, frame->w, frame->h); - mlk_painter_set_color(attr->color.bg); + mlk_painter_set_color(self->background); mlk_painter_draw_rectangle( - frame->x + attr->geo.border, - frame->y + attr->geo.border, - frame->w - (attr->geo.border * 2), - frame->h - (attr->geo.border * 2) + frame->x + self->border_size, + frame->y + self->border_size, + frame->w - (self->border_size * 2), + frame->h - (self->border_size * 2) ); } -struct mlk_frame_delegate mlk_frame_delegate = { + +struct mlk_frame_style mlk_frame_style_dark = { + .background = 0x222323ff, + .border = 0x141414ff, + .border_size = 2, .draw = draw }; -void -mlk_frame_init(struct mlk_frame *frame, - struct mlk_style *st, - struct mlk_frame_delegate *dt) -{ - assert(frame); +struct mlk_frame_style mlk_frame_style_light = { + .background = 0xf5f7faff, + .border = 0xcdd2daff, + .border_size = 2, + .draw = draw +}; - frame->x = 0; - frame->y = 0; - frame->w = 0; - frame->h = 0; - frame->style = st ? st : &mlk_style; - frame->delegate = dt ? dt : &mlk_frame_delegate; -} +struct mlk_frame_style *mlk_frame_style = &mlk_frame_style_light; void mlk_frame_update(struct mlk_frame *frame, unsigned int ticks) { assert(frame); - if (frame->delegate->update) - frame->delegate->update(frame->delegate, frame, ticks); + MLK__STYLE_CALL(frame->style, mlk_frame_style, update, frame, ticks); } void -mlk_frame_draw(const struct mlk_frame *frame) +mlk_frame_draw(struct mlk_frame *frame) { assert(frame); - if (frame->delegate->draw) - frame->delegate->draw(frame->delegate, frame); + MLK__STYLE_CALL(frame->style, mlk_frame_style, draw, frame); } - -void -mlk_frame_finish(struct mlk_frame *frame) -{ - assert(frame); - - if (frame->delegate->finish) - frame->delegate->finish(frame->delegate, frame); -} diff -r ade3030f29f0 -r dae4cdc6a984 libmlk-ui/mlk/ui/frame.h --- a/libmlk-ui/mlk/ui/frame.h Mon Aug 21 07:43:18 2023 +0200 +++ b/libmlk-ui/mlk/ui/frame.h Mon Aug 21 20:15:53 2023 +0200 @@ -25,8 +25,7 @@ */ struct mlk_frame; -struct mlk_frame_delegate; -struct mlk_style; +struct mlk_frame_style; struct mlk_frame { /** @@ -62,21 +61,18 @@ * * Frame style. */ - struct mlk_style *style; - - /** - * (read-write, borrowed) - * - * Frame delegate. - */ - struct mlk_frame_delegate *delegate; + struct mlk_frame_style *style; }; /** - * \struct mlk_frame_delegate - * \brief Frame delegate. + * \struct mlk_frame_style + * \brief Frame style. */ -struct mlk_frame_delegate { +struct mlk_frame_style { + unsigned long background; + unsigned long border; + unsigned int border_size; + /* * (read-write, borrowed, optional) * @@ -89,11 +85,11 @@ * * Update the label. * - * \param self this delegate + * \param self this style * \param frame the frame to update * \param ticks number of ticks since last frame */ - void (*update)(struct mlk_frame_delegate *self, + void (*update)(struct mlk_frame_style *self, struct mlk_frame *frame, unsigned int ticks); @@ -102,65 +98,43 @@ * * Draw this frame. * - * \param self this delegate + * \param self this style * \param frame the frame to draw */ - void (*draw)(struct mlk_frame_delegate *self, - const struct mlk_frame *frame); - - /** - * (read-write, optional) - * - * Cleanup this delegate associated with the frame. - * - * \param self this delegate - * \param frame the underlying frame - */ - void (*finish)(struct mlk_frame_delegate *self, - struct mlk_frame *frame); + void (*draw)(struct mlk_frame_style *self, + struct mlk_frame *frame); }; /** - * \brief Default stateless delegate for frame. + * \brief Dark default style for frame. + */ +extern struct mlk_frame_style mlk_frame_style_dark; + +/** + * \brief Light default style for frame. */ -extern struct mlk_frame_delegate mlk_frame_delegate; +extern struct mlk_frame_style mlk_frame_style_light; + +/** + * \brief Default style for all frames. + */ +extern struct mlk_frame_style *mlk_frame_style; #if defined(__cplusplus) extern "C" { #endif /** - * Initialize the frame with default values. - * - * This is not required if you use designated initializers. - * - * \pre frame != NULL - * \param frame the frame to default initialize - * \param st style to use (or NULL to use a default) - * \param dt delegate to use (or NULL to use a default) - */ -void -mlk_frame_init(struct mlk_frame *frame, - struct mlk_style *st, - struct mlk_frame_delegate *dt); - -/** - * Invoke ::mlk_frame_delegate::update. + * Invoke ::mlk_frame_style::update. */ void mlk_frame_update(struct mlk_frame *frame, unsigned int ticks); /** - * Invoke ::mlk_frame_delegate::draw. + * Invoke ::mlk_frame_style::draw. */ void -mlk_frame_draw(const struct mlk_frame *frame); - -/** - * Invoke ::mlk_frame_delegate::finish. - */ -void -mlk_frame_finish(struct mlk_frame *frame); +mlk_frame_draw(struct mlk_frame *frame); #if defined(__cplusplus) } diff -r ade3030f29f0 -r dae4cdc6a984 libmlk-ui/mlk/ui/gridmenu.c --- a/libmlk-ui/mlk/ui/gridmenu.c Mon Aug 21 07:43:18 2023 +0200 +++ b/libmlk-ui/mlk/ui/gridmenu.c Mon Aug 21 20:15:53 2023 +0200 @@ -190,16 +190,14 @@ { (void)self; - struct mlk_frame frame; - - mlk_frame_init(&frame, menu->style, &mlk_frame_delegate); - frame.x = menu->x; - frame.y = menu->y; - frame.w = menu->w; - frame.h = menu->h; + struct mlk_frame frame = { + .x = menu->x, + .y = menu->y, + .w = menu->w, + .h = menu->h + }; mlk_frame_draw(&frame); - mlk_frame_finish(&frame); } static void diff -r ade3030f29f0 -r dae4cdc6a984 libmlk-ui/mlk/ui/ui.c --- a/libmlk-ui/mlk/ui/ui.c Mon Aug 21 07:43:18 2023 +0200 +++ b/libmlk-ui/mlk/ui/ui.c Mon Aug 21 20:15:53 2023 +0200 @@ -37,6 +37,7 @@ #include #include "align.h" +#include "frame.h" #include "label.h" #include "ui.h" #include "ui_p.h" @@ -96,8 +97,10 @@ { if (theme == MLK_WINDOW_THEME_DARK) { mlk_label_style = &mlk_label_style_dark; + mlk_frame_style = &mlk_frame_style_dark; } else { mlk_label_style = &mlk_label_style_light; + mlk_frame_style = &mlk_frame_style_light; } }