Scratching out layout

This commit is contained in:
Ben V. Brown
2023-06-28 22:49:37 +10:00
parent 0a3dfb34ec
commit d9350fdc73
5 changed files with 376 additions and 0 deletions

4
source/UI/UI.cpp Normal file
View File

@@ -0,0 +1,4 @@
#include "UI.h"
void ui_render_screen(Screen_t *screen, ScreenContext_t *context) {
// Basically switch out the handlers
}

45
source/UI/UI.h Normal file
View File

@@ -0,0 +1,45 @@
#pragma once
#include <stdint.h>
typedef enum {
SimplifiedHome, // Basic home
SimplifiedHomeWarning, // Home with temp warning
DetailedHome, // Detailed home view
DetailedHomeWarning, // Home with temp warning
DebugMenu, // Debugging metrics
settingsCategory, // Settings category with icon
SettingsEntryBool, // Tickbox setting
SettingsEntry3Number, // Settings adjust with 3 number digits
SettingsEntry2Number, // Settings adjust with 2 number digits
SettingsEntry1Number, // Settings adjust with 2 number digits
SettingsEntry1Text, // Setting with single text char for state
ScrollingText, // Scrolling large text (warnings, help text)
SolderingMode, // Basic soldering mode
DetailedSolderingMode, // Detailed soldering mode
NumberAdjust, // Number adjust of number with <> either side
} screenLayout_t;
typedef void (*render_prep_fn)();
typedef void (*tick_fn)();
typedef void (*button_handler_fn)();
typedef struct {
// on_enter
// on_exit
tick_fn tick;
render_prep_fn render_prepare;
screenLayout_t layout; // Render layout used
button_handler_fn handle_button;
} Screen_t;
typedef union {
int32_t i32;
void *ptr;
} screen_arg_t;
typedef struct {
screen_arg_t args[4];
} ScreenContext_t;
//
void ui_render_screen(Screen_t *screen, ScreenContext_t *context);

53
source/UI/UI_Elements.cpp Normal file
View File

@@ -0,0 +1,53 @@
#include "UI_Elements.h"
void render_Text(screen_arg_t *args);
void render_Number(screen_arg_t *args);
void render_Image(screen_arg_t *args);
void render_PowerSource(screen_arg_t *args);
void render_Temperature(screen_arg_t *args);
void render_InputVoltage(screen_arg_t *args);
void render_ScrollBar(screen_arg_t *args);
void render_CheckBox(screen_arg_t *args);
void render_TextScroller(screen_arg_t *args);
void ui_render_element(ElementTypes_t element, screen_arg_t *args) {
switch (element) {
case ElementTypes_t::Text:
render_Text(args);
break;
case ElementTypes_t::Number:
render_Number(args);
break;
case ElementTypes_t::Image:
render_Image(args);
break;
case ElementTypes_t::PowerSource:
render_PowerSource(args);
break;
case ElementTypes_t::Temperature:
render_Temperature(args);
break;
case ElementTypes_t::InputVoltage:
render_InputVoltage(args);
break;
case ElementTypes_t::ScrollBar:
render_ScrollBar(args);
break;
case ElementTypes_t::CheckBox:
render_CheckBox(args);
break;
case ElementTypes_t::TextScroller:
render_TextScroller(args);
break;
}
}
void render_Text(screen_arg_t *args) {}
void render_Number(screen_arg_t *args) {}
void render_Image(screen_arg_t *args) {}
void render_PowerSource(screen_arg_t *args) {}
void render_Temperature(screen_arg_t *args) {}
void render_InputVoltage(screen_arg_t *args) {}
void render_ScrollBar(screen_arg_t *args) {}
void render_CheckBox(screen_arg_t *args) {}
void render_TextScroller(screen_arg_t *args) {}

28
source/UI/UI_Elements.h Normal file
View File

@@ -0,0 +1,28 @@
#pragma once
#include "UI.h"
typedef enum {
Text, // Basic text splat, using re-encoded strings
Number, // Draws numbers using best size for the height (always one line)
Image, // Pre-rendered bitmap that can be memcpy'ed in
PowerSource, // Draws a battery icon, or text for voltage, or DC power plug
Temperature, // Draws the number with temperature symbol following (height picks font)
InputVoltage, // Draws the number with V following and also 1 dp(height picks font)
ScrollBar, // Draws a vertical scrollbar, number sets percentage 0-100
CheckBox, // Draws checkbox, ticked = number!=0
TextScroller, // Renders text, scrolling with time
} ElementTypes_t;
typedef struct {
struct {
uint8_t x;
uint8_t y;
} position;
struct {
uint8_t w;
uint8_t h;
} size;
} ElementSettings_t;
void ui_render_element(ElementTypes_t element, screen_arg_t *args);

246
source/UI/layout_96x16.yaml Normal file
View File

@@ -0,0 +1,246 @@
layouts:
simplifiedHome:
mirrorOnRotate: true
elements:
- type: image
position:
x: 0
y: 0
size:
w: 42
h: 16
- type: image
position:
x: 0
y: 0
size:
w: 42
h: 16
- type: powerSource
position:
x: 84
y: 0
size:
w: 12
h: 16
simplifiedHomeWarning:
mirrorOnRotate: true
elements:
- type: text
position:
x: 0
y: 0
size:
w: 42
h: 16
- type: image
position:
x: 0
y: 0
size:
w: 42
h: 16
- type: powerSource
position:
x: 84
y: 0
size:
w: 12
h: 16
detailedHome:
elements:
- type: temperature
position:
x: 0
y: 0
size:
w: 48
h: 16
- type: temperature
position:
x: 48
y: 0
size:
w: 32
h: 8
- type: inputVoltage
position:
x: 48
y: 0
size:
w: 32
h: 8
detailedHomeWarning:
elements:
- type: temperature
position:
x: 0
y: 0
size:
w: 48
h: 16
- type: inputVoltage
position:
x: 48
y: 0
size:
w: 32
h: 8
SebugMenu:
elements:
- type: text
position:
x: 0
y: 0
size:
w: 96
h: 8
- type: text
position:
x: 0
y: 8
size:
w: 48
h: 8
- type: number
position:
x: 48
y: 8
size:
w: 48
h: 8
SettingsCategory:
elements:
- type: text
position:
x: 0
y: 0
size:
w: 78
h: 16
- type: image
position:
x: 79
y: 0
size:
w: 16
h: 16
- type: scrollBar
x: 95
h: 16
SettingsEntryBool:
elements:
- type: text
position:
x: 0
y: 0
size:
w: 78
h: 16
- type: checkbox
position:
x: 79
y: 0
size:
w: 16
h: 16
- type: scrollBar
x: 95
h: 16
SettingsEntry3Number:
elements:
- type: text
position:
x: 0
y: 0
size:
w: 78
h: 16
- type: number
position:
x: 79
y: 0
size:
w: 36
h: 16
- type: scrollBar
x: 95
h: 16
SettingsEntry2Number:
elements:
- type: text
position:
x: 0
y: 0
size:
w: 78
h: 16
- type: number
position:
x: 79
y: 0
size:
w: 36
h: 16
- type: scrollBar
x: 95
h: 16
SettingsEntry1Number:
elements:
- type: text
position:
x: 0
y: 0
size:
w: 78
h: 16
- type: number
position:
x: 79
y: 0
size:
w: 36
h: 16
- type: scrollBar
x: 95
h: 16
SettingsEntry1Text:
elements:
- type: text
position:
x: 0
y: 0
size:
w: 78
h: 16
- type: number
position:
x: 79
y: 0
size:
w: 36
h: 16
- type: scrollBar
x: 95
h: 16
ScrollingText:
elements:
- type: textScroller
position:
x: 0
y: 0
size:
w: 96
h: 16
SolderingMode:
elements:
DetailedSolderingMode:
elements:
NumberAdjust:
elements: