platform for developing on SQFMI's Watchy
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

#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