Skip to content
Snippets Groups Projects
Commit 38813ee0 authored by Leonardo Guilherme's avatar Leonardo Guilherme
Browse files

implements button state and increase button example

parent df979c92
Branches master
No related tags found
No related merge requests found
......@@ -62,8 +62,18 @@ int main(int argc, const char * argv[]) {
.row = 1
},
.button = {
.normal = {
.column = 7,
.row = 1
},
.hovered = {
.column = 7,
.row = 4
},
.pressed = {
.column = 7,
.row = 7
}
}
},
.tileset_texture = cmx_sdl2_texture_make_from_image_data(
......@@ -78,14 +88,35 @@ int main(int argc, const char * argv[]) {
cmw_frame_construct(&frame);
cm_area_fill(&frame.area, &context.area, cm_rect_make_inset_of(&cm_rect_zero, 12));
struct cmw_button button;
cmw_button_construct(&button);
cmw_button_set_label_size_fn(&button, text_size, &font);
cmw_button_set_text(&button, (uint8_t *) "Olá, mundão!");
cm_value_link(&button.area.left, &frame.area.center.x, -50);
cm_value_link(&button.area.right, &frame.area.center.x, 50);
cm_value_link(&button.area.bottom, &frame.area.bottom, -20);
cm_value_link(&button.area.top, &frame.area.bottom, -52);
struct cmw_button button_normal;
cmw_button_construct(&button_normal);
cmw_button_set_label_size_fn(&button_normal, text_size, &font);
cmw_button_set_text(&button_normal, (uint8_t *) "Normal button");
cm_value_link(&button_normal.area.top, &frame.area.center.y, -25);
cm_value_link(&button_normal.area.bottom, &frame.area.center.y, 25);
cm_value_link(&button_normal.area.left, &frame.area.center.x, -60);
cm_value_link(&button_normal.area.right, &frame.area.center.x, 60);
struct cmw_button button_hover;
cmw_button_construct(&button_hover);
button_hover.state = cmw_button__state_hovered;
cmw_button_set_label_size_fn(&button_hover, text_size, &font);
cmw_button_set_text(&button_hover, (uint8_t *) "Hovered button");
cm_value_link(&button_hover.area.left, &button_normal.area.left, 0);
cm_value_link(&button_hover.area.right, &button_normal.area.right, 0);
cm_value_link(&button_hover.area.bottom, &button_normal.area.top, 0);
cm_value_link(&button_hover.area.top, &button_hover.area.bottom, -50);
struct cmw_button button_pressed;
cmw_button_construct(&button_pressed);
button_pressed.state = cmw_button__state_pressed;
cmw_button_set_label_size_fn(&button_pressed, text_size, &font);
cmw_button_set_text(&button_pressed, (uint8_t *) "Pressed button");
cm_value_link(&button_pressed.area.left, &button_normal.area.left, 0);
cm_value_link(&button_pressed.area.right, &button_normal.area.right, 0);
cm_value_link(&button_pressed.area.top, &button_normal.area.bottom, 0);
cm_value_link(&button_pressed.area.bottom, &button_pressed.area.top, 50);
/* main program loop */
while (!SDL_QuitRequested()) {
......@@ -94,7 +125,9 @@ int main(int argc, const char * argv[]) {
cm_render_queue_flush(&context.queue);
SDL_RenderClear(context.renderer);
cmw_frame_render(&frame, &context.tileset, &context.queue);
cmw_button_render(&button, &context.tileset, &context.queue);
cmw_button_render(&button_normal, &context.tileset, &context.queue);
cmw_button_render(&button_hover, &context.tileset, &context.queue);
cmw_button_render(&button_pressed, &context.tileset, &context.queue);
cmx_sdl2_context_render(&context);
SDL_RenderPresent(context.renderer);
}
......
......@@ -3,3 +3,4 @@ add_subdirectory(00-sdl2-rendering)
add_subdirectory(01-text-rendering)
add_subdirectory(02-anchors)
add_subdirectory(03-buttons)
add_subdirectory(sandbox)
examples/assets/tilesets/creme.png

20.6 KiB | W: | H:

examples/assets/tilesets/creme.png

23.6 KiB | W: | H:

examples/assets/tilesets/creme.png
examples/assets/tilesets/creme.png
examples/assets/tilesets/creme.png
examples/assets/tilesets/creme.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -19,7 +19,11 @@ extern "C" {
*/
struct cm_tileset {
struct cm_tile frame;
struct cm_tile button;
struct {
struct cm_tile normal;
struct cm_tile hovered;
struct cm_tile pressed;
} button;
uint16_t tile_width;
uint16_t tile_height;
......
......@@ -236,6 +236,7 @@ void cm_value_set_recursive(struct cm_value * value, float absolute, int parent_
}
void cm_value_debug_print(const struct cm_value * value, float n, uint32_t depth) {
if (depth == 0) printf("cycle %d\n", value->update_token);
printf("%*s %s", depth * 2, "", value->tag);
if (value->upstream_count > 0) {
printf("::%s(", value->reduce.tag);
......
......@@ -8,9 +8,16 @@
extern "C" {
#endif
enum cmw_button_state {
cmw_button__state_normal,
cmw_button__state_hovered,
cmw_button__state_pressed
};
struct cmw_button {
struct cm_area area;
struct cmw_label label;
enum cmw_button_state state;
};
WIDGETS_API extern void cmw_button_construct(struct cmw_button * button);
......
#include <tileset.h>
#include "button.h"
void cmw_button_construct(struct cmw_button * button) {
cm_area_construct(&button->area);
cm_area_set_tag(&button->area, " btn");
cmw_label_construct(&button->label);
button->state = cmw_button__state_normal;
cm_area_center_at(
&button->label.area,
&button->area.center.x,
......@@ -37,7 +39,19 @@ uint16_t cmw_button_render(
struct cm_tileset const * tileset,
struct cm_render_queue * queue
) {
return cm_area_render(&button->area, tileset, queue, tileset->button) +
struct cm_tile tile = tileset->button.normal;
switch (button->state) {
case cmw_button__state_hovered:
tile = tileset->button.hovered;
break;
case cmw_button__state_pressed:
tile = tileset->button.pressed;
break;
case cmw_button__state_normal:
default:
break;
}
return cm_area_render(&button->area, tileset, queue, tile) +
cmw_label_render(&button->label, tileset, queue);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment