You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.8 KiB
68 lines
1.8 KiB
#ifndef _MODULE_UI_h
|
|
#define _MODULE_UI_h
|
|
|
|
#include <Arduino.h>
|
|
#include "watchos_consts.h"
|
|
#include "watchos_hw.h"
|
|
#include "watchos_types.h"
|
|
|
|
#include "Task.h"
|
|
#include "Module_Power.h"
|
|
#include "IRunnable.h"
|
|
#include "IDrawable.h"
|
|
|
|
#define MODULE_UI_MAX_WINDOWS 32
|
|
#define MODULE_UI_MULTICORE_STACK_SIZE 10240
|
|
|
|
#define MODULE_UI_MAX_FONTS 32
|
|
|
|
#define MODULE_UI_LAYOUT_MODE_NONE 0
|
|
#define MODULE_UI_LAYOUT_MODE_SPLIT_VERTICAL 1
|
|
#define MODULE_UI_LAYOUT_MODE_SPLIT_HORIZONTAL 2
|
|
#define MODULE_UI_LAYOUT_MODE_ABSOLUTE 3
|
|
|
|
struct UiWindow;
|
|
struct UiFont;
|
|
|
|
class Module_UI : public Task, public IRunnable
|
|
{
|
|
Module_Power* module_power;
|
|
UiWindow* m_window[MODULE_UI_MAX_WINDOWS];
|
|
UiFont* m_font[MODULE_UI_MAX_FONTS];
|
|
|
|
bool m_initialized = false;
|
|
bool m_dirty = false, m_redraw = false;
|
|
// temp, until we implement scenes
|
|
kernel_handle_t m_root;
|
|
int m_draw_x, m_draw_y, m_draw_w, m_draw_h;
|
|
|
|
void draw_window(UiWindow* window, int x, int y, int width, int height);
|
|
void local_to_screen(int* x, int* y);
|
|
|
|
public:
|
|
Module_UI();
|
|
kernel_handle_t createWindow(IDrawable* drawable, kernel_handle_t parent);
|
|
kernel_handle_t createWindow(kernel_handle_t parent);
|
|
kernel_handle_t getRoot();
|
|
|
|
void initialize();
|
|
void start();
|
|
void tick();
|
|
|
|
void draw();
|
|
void do_draw();
|
|
|
|
void setLayoutMode(kernel_handle_t window_handle, byte layout_mode);
|
|
void setDirty(kernel_handle_t window_handle);
|
|
|
|
int getWidth();
|
|
int getHeight();
|
|
void fill(uint16_t colour = COLOUR_SECONDARY);
|
|
void fill(int x, int y, int width, int height, uint16_t colour = COLOUR_SECONDARY);
|
|
void print(int x, int y, char* str, uint16_t colour, void* font);
|
|
void print(int x, int y, char* str, uint16_t colour = COLOUR_PRIMARY, byte font_id = 0);
|
|
|
|
void registerFont(byte id, const void* font);
|
|
};
|
|
|
|
#endif
|