151 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			151 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#ifndef UART_CLAY_COMMON_LAYOUT_H
							 | 
						||
| 
								 | 
							
								#define UART_CLAY_COMMON_LAYOUT_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "uart_func.c"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef enum { MAIN_FONT, SMALL_FONT } FONT_ID;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const Clay_Color COLOR_RED = {255, 45, 0, 255};
							 | 
						||
| 
								 | 
							
								const Clay_Color COLOR_GREEN = {25, 255, 25, 255};
							 | 
						||
| 
								 | 
							
								const Clay_Color COLOR_BLUE = {0, 120, 255, 255};
							 | 
						||
| 
								 | 
							
								const Clay_Color COLOR_ORANGE = {225, 127, 0, 255};
							 | 
						||
| 
								 | 
							
								const Clay_Color COLOR_LIGHT = {224, 215, 210, 255};
							 | 
						||
| 
								 | 
							
								const Clay_Color COLOR_BLACK = {0, 0, 0, 255};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const Clay_Sizing EXPAND = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) };
							 | 
						||
| 
								 | 
							
								const Clay_ChildAlignment CENTER_X_Y = { .x = CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const Clay_LayoutConfig BUTTON_CONFIG = {
							 | 
						||
| 
								 | 
							
								    .sizing = EXPAND,
							 | 
						||
| 
								 | 
							
								    .childAlignment = CENTER_X_Y
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const Clay_TextElementConfig LARGE_TEXT = { .textColor = COLOR_BLACK, .fontId = MAIN_FONT, .fontSize = 30 };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Clay_String modal_message;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Clay_Color darken(const Clay_Color color, const int scale) {
							 | 
						||
| 
								 | 
							
								    return (Clay_Color){
							 | 
						||
| 
								 | 
							
								        color.r * (100 - scale) / 100,
							 | 
						||
| 
								 | 
							
								        color.g * (100 - scale) / 100,
							 | 
						||
| 
								 | 
							
								        color.b * (100 - scale) / 100,
							 | 
						||
| 
								 | 
							
								        color.a
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void toggle_red(Clay_ElementId elementId, Clay_PointerData pointerInfo, intptr_t userData) {
							 | 
						||
| 
								 | 
							
								    const uart_data *data = (uart_data *)userData;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (pointerInfo.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) {
							 | 
						||
| 
								 | 
							
								        constexpr size_t response_length = 15;
							 | 
						||
| 
								 | 
							
								        handle_uart(data, 'r', response_length);
							 | 
						||
| 
								 | 
							
								        modal_message.length = response_length - 2;
							 | 
						||
| 
								 | 
							
								        UART_modal_show = true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void toggle_green(Clay_ElementId elementId, Clay_PointerData pointerInfo, intptr_t userData) {
							 | 
						||
| 
								 | 
							
								    const uart_data *data = (uart_data *)userData;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (pointerInfo.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) {
							 | 
						||
| 
								 | 
							
								        constexpr size_t response_length = 17;
							 | 
						||
| 
								 | 
							
								        handle_uart(data, 'g', response_length);
							 | 
						||
| 
								 | 
							
								        modal_message.length = response_length - 2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        UART_modal_show = true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void toggle_blue(Clay_ElementId elementId, Clay_PointerData pointerInfo, intptr_t userData) {
							 | 
						||
| 
								 | 
							
								    const uart_data *data = (uart_data *)userData;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (pointerInfo.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) {
							 | 
						||
| 
								 | 
							
								        constexpr size_t response_length = 16;
							 | 
						||
| 
								 | 
							
								        handle_uart(data, 'b', response_length);
							 | 
						||
| 
								 | 
							
								        modal_message.length = response_length - 2;
							 | 
						||
| 
								 | 
							
								        UART_modal_show = true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void toggle_orange(Clay_ElementId elementId, Clay_PointerData pointerInfo, intptr_t userData) {
							 | 
						||
| 
								 | 
							
								    const uart_data *data = (uart_data *)userData;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (pointerInfo.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) {
							 | 
						||
| 
								 | 
							
								        constexpr size_t response_length = 18;
							 | 
						||
| 
								 | 
							
								        handle_uart(data, 'o', response_length);
							 | 
						||
| 
								 | 
							
								        modal_message.length = response_length - 2;
							 | 
						||
| 
								 | 
							
								        UART_modal_show = true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void hide_modal(Clay_ElementId elementId, Clay_PointerData pointerInfo, intptr_t userData) {
							 | 
						||
| 
								 | 
							
								    if (pointerInfo.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) {
							 | 
						||
| 
								 | 
							
								        UART_modal_show = false;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void Button(const Clay_String label, const Clay_Color color, void (*onHoverFunction)(Clay_ElementId elementId, Clay_PointerData pointerInfo, intptr_t userData), const intptr_t data) {
							 | 
						||
| 
								 | 
							
								    CLAY_AUTO_ID({
							 | 
						||
| 
								 | 
							
								        .layout = BUTTON_CONFIG, .backgroundColor = color, .cornerRadius = CLAY_CORNER_RADIUS(16)
							 | 
						||
| 
								 | 
							
								    }) {
							 | 
						||
| 
								 | 
							
								        Clay_OnHover(onHoverFunction, data);
							 | 
						||
| 
								 | 
							
								        CLAY_TEXT(label, (void *)&LARGE_TEXT);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void Modal() {
							 | 
						||
| 
								 | 
							
								    CLAY_AUTO_ID({
							 | 
						||
| 
								 | 
							
								        .layout = {
							 | 
						||
| 
								 | 
							
								            .layoutDirection = CLAY_TOP_TO_BOTTOM,
							 | 
						||
| 
								 | 
							
								            .sizing = { .height = CLAY_SIZING_PERCENT(0.25f), .width = CLAY_SIZING_PERCENT(0.55f) },
							 | 
						||
| 
								 | 
							
								            .childAlignment = CENTER_X_Y,
							 | 
						||
| 
								 | 
							
								            .padding = CLAY_PADDING_ALL(16),
							 | 
						||
| 
								 | 
							
								            .childGap = 8,
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        .cornerRadius = CLAY_CORNER_RADIUS(16),
							 | 
						||
| 
								 | 
							
								        .floating = {
							 | 
						||
| 
								 | 
							
								            .attachTo = CLAY_ATTACH_TO_PARENT,
							 | 
						||
| 
								 | 
							
								            .attachPoints = { .element = CLAY_ATTACH_POINT_CENTER_CENTER, .parent = CLAY_ATTACH_POINT_CENTER_CENTER }
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        .backgroundColor = darken(COLOR_LIGHT, 10)
							 | 
						||
| 
								 | 
							
								    }) {
							 | 
						||
| 
								 | 
							
								        CLAY_TEXT(modal_message, (void *)&LARGE_TEXT);
							 | 
						||
| 
								 | 
							
								        CLAY_AUTO_ID({ .layout = { .sizing = EXPAND } });
							 | 
						||
| 
								 | 
							
								        CLAY_AUTO_ID({
							 | 
						||
| 
								 | 
							
								            .layout = {
							 | 
						||
| 
								 | 
							
								                .sizing = { .height = CLAY_SIZING_FIT(), .width = CLAY_SIZING_GROW() },
							 | 
						||
| 
								 | 
							
								                .childAlignment = CENTER_X_Y
							 | 
						||
| 
								 | 
							
								            }, .backgroundColor = COLOR_RED, .cornerRadius = CLAY_CORNER_RADIUS(16)
							 | 
						||
| 
								 | 
							
								        }) {
							 | 
						||
| 
								 | 
							
								            Clay_OnHover(hide_modal, 0);
							 | 
						||
| 
								 | 
							
								            CLAY_TEXT(CLAY_STRING("X"), (void *)&LARGE_TEXT);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Clay_RenderCommandArray Clay_CreateLayout(uart_data *data) {
							 | 
						||
| 
								 | 
							
								    Clay_BeginLayout();
							 | 
						||
| 
								 | 
							
								    Clay__debugViewWidth = 700;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    CLAY(CLAY_ID("Outer"),{
							 | 
						||
| 
								 | 
							
								        .layout = {
							 | 
						||
| 
								 | 
							
								            .layoutDirection = CLAY_TOP_TO_BOTTOM,
							 | 
						||
| 
								 | 
							
								            .sizing = EXPAND,
							 | 
						||
| 
								 | 
							
								            .padding = CLAY_PADDING_ALL(16),
							 | 
						||
| 
								 | 
							
								            .childGap = 16
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        .backgroundColor = COLOR_LIGHT,
							 | 
						||
| 
								 | 
							
								    }) {
							 | 
						||
| 
								 | 
							
								        if (UART_modal_show) {
							 | 
						||
| 
								 | 
							
								            Modal();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        Button(CLAY_STRING("Red"), COLOR_RED, UART_modal_show ? nullptr : toggle_red, (intptr_t)data);
							 | 
						||
| 
								 | 
							
								        Button(CLAY_STRING("Green"), COLOR_GREEN, UART_modal_show ? nullptr : toggle_green, (intptr_t)data);
							 | 
						||
| 
								 | 
							
								        Button(CLAY_STRING("Blue"), COLOR_BLUE, UART_modal_show ? nullptr : toggle_blue, (intptr_t)data);
							 | 
						||
| 
								 | 
							
								        Button(CLAY_STRING("Orange"), COLOR_ORANGE, UART_modal_show ? nullptr : toggle_orange, (intptr_t)data);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return Clay_EndLayout();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif //UART_CLAY_COMMON_LAYOUT_H
							 |