mirror of
https://github.com/Ralim/IronOS.git
synced 2025-02-26 07:53:55 +00:00
Scratching out layout
This commit is contained in:
4
source/UI/UI.cpp
Normal file
4
source/UI/UI.cpp
Normal 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
45
source/UI/UI.h
Normal 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
53
source/UI/UI_Elements.cpp
Normal 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
28
source/UI/UI_Elements.h
Normal 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
246
source/UI/layout_96x16.yaml
Normal 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:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user