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.
 
 

57 lines
1.5 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 "IRunnable.h"
#include "IDrawable.h"
#define MODULE_UI_MAX_WINDOWS 32
#define MODULE_UI_MULTICORE_STACK_SIZE 10240
#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;
class Module_UI : public Task, public IRunnable
{
UiWindow* m_window[MODULE_UI_MAX_WINDOWS];
bool m_initialized = false;
bool m_dirty = 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 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 = COLOUR_PRIMARY, void* font = nullptr);
};
#endif