Hanspeter Portner: 1 Add base button 3 files changed, 95 insertions(+), 2 deletions(-)
Copy & paste the following snippet into your terminal to import this patchset into git:
curl -s https://lists.open-music-kontrollers.ch/~hp/patches/patches/1/mbox | git am -3Learn more about email & git
--- d2tk/base.h | 24 +++++++++++++++++ meson_options.txt | 4 +-- src/base_button.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+), 2 deletions(-) diff --git a/d2tk/base.h b/d2tk/base.h index e9b434457..8f90664ab 100644 --- a/d2tk/base.h +++ b/d2tk/base.h @@ -24,6 +24,7 @@ typedef struct _d2tk_pos_t d2tk_pos_t; typedef struct _d2tk_style_t d2tk_style_t; typedef struct _d2tk_table_t d2tk_table_t; typedef struct _d2tk_frame_t d2tk_frame_t; +typedef struct _d2tk_button_t d2tk_button_t; typedef struct _d2tk_layout_t d2tk_layout_t; typedef struct _d2tk_scrollbar_t d2tk_scrollbar_t; typedef struct _d2tk_flowmatrix_t d2tk_flowmatrix_t; @@ -165,6 +166,7 @@ typedef enum _d2tk_flag_t { extern const size_t d2tk_table_sz; extern const size_t d2tk_frame_sz; +extern const size_t d2tk_button_sz; extern const size_t d2tk_layout_sz; extern const size_t d2tk_scrollbar_sz; extern const size_t d2tk_flowmatrix_sz; @@ -400,6 +402,28 @@ d2tk_base_button_image(d2tk_base_t *base, d2tk_id_t id, ssize_t path_len, #define d2tk_base_button_image_is_changed(...) \ d2tk_state_is_changed(d2tk_base_button_image(__VA_ARGS__)) +D2TK_API d2tk_button_t * +d2tk_button_begin(d2tk_base_t *base, d2tk_id_t id, const d2tk_rect_t *rect, + d2tk_button_t *btn); + +D2TK_API bool +d2tk_button_not_end(d2tk_button_t *btn); + +D2TK_API d2tk_button_t * +d2tk_button_next(d2tk_button_t *btn); + +D2TK_API const d2tk_rect_t * +d2tk_button_get_rect(d2tk_button_t *btn); + +D2TK_API d2tk_state_t +d2tk_button_get_state(d2tk_button_t *btn); + +#define D2TK_BASE_BUTTON(BASE, ID, RECT, BTN) \ + for(d2tk_button_t *(BTN) = d2tk_button_begin((BASE), (ID), (RECT), \ + alloca(d2tk_button_sz)); \ + d2tk_button_not_end((BTN)); \ + (BTN) = d2tk_button_next((BTN))) + D2TK_API const d2tk_style_t * d2tk_base_get_default_style(); diff --git a/meson_options.txt b/meson_options.txt index d7b5a9036..ce6cdde18 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -26,7 +26,6 @@ option('use-backend-nanovg', type : 'feature', value : 'disabled', yield : true) -option('use-gles-version', type : 'integer', min : 2, max : 3, @@ -54,4 +53,5 @@ option('use-fontconfig', type : 'feature', value : 'disabled', yield : true) -option('version', type : 'string', value : '0.1.1289') +option('version', type : 'string', value : ' +0.1.1293') diff --git a/src/base_button.c b/src/base_button.c index 0724f2919..4f94177a3 100644 --- a/src/base_button.c +++ b/src/base_button.c @@ -202,3 +202,72 @@ d2tk_base_toggle(d2tk_base_t *base, d2tk_id_t id, const d2tk_rect_t *rect, return d2tk_base_toggle_label(base, id, 0, NULL, D2TK_ALIGN_NONE, rect, value); } + +struct _d2tk_button_t { + d2tk_state_t state; + d2tk_rect_t rect; +}; + +const size_t d2tk_button_sz = sizeof(d2tk_button_t); + +D2TK_API d2tk_button_t * +d2tk_button_begin(d2tk_base_t *base, d2tk_id_t id, const d2tk_rect_t *rect, + d2tk_button_t *btn) +{ + const d2tk_style_t *style = d2tk_base_get_style(base); + d2tk_state_t state = d2tk_base_is_active_hot(base, id, rect, D2TK_FLAG_NONE); + + if(d2tk_state_is_down(state) || d2tk_state_is_enter(state)) + { + state |= D2TK_STATE_CHANGED; + } + + d2tk_triple_t triple = D2TK_TRIPLE_NONE; + + if(d2tk_state_is_active(state)) + { + triple |= D2TK_TRIPLE_ACTIVE; + } + + if(d2tk_state_is_hot(state)) + { + triple |= D2TK_TRIPLE_HOT; + } + + if(d2tk_state_is_focused(state)) + { + triple |= D2TK_TRIPLE_FOCUS; + } + + _d2tk_base_draw_button(base->core, 0, NULL, D2TK_ALIGN_NONE, 0, NULL, + rect, triple, style); + + btn->state = state; + d2tk_rect_shrink(&btn->rect, rect, style->padding); + + return btn; +} + +D2TK_API bool +d2tk_button_not_end(d2tk_button_t *btn) +{ + return btn ? true : false; +} + +D2TK_API d2tk_button_t * +d2tk_button_next(d2tk_button_t *btn __attribute__((unused))) +{ + return NULL; +} + +D2TK_API const d2tk_rect_t * +d2tk_button_get_rect(d2tk_button_t *btn) +{ + return &btn->rect; +} + +D2TK_API d2tk_state_t +d2tk_button_get_state(d2tk_button_t *btn) +{ + return btn->state; +} -- 2.40.0