123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- /*
- * screen.cpp
- *
- * Created on: Jan 12, 2021
- * Author: David Original work by Jose (PTDreamer), 2017
- */
- #include "screen.h"
- #include "oled.h"
- void screen_addWidget(widget_t *widget, screen_t *scr) {
- widget_t *last_widget = NULL;
- if(scr->widgets) {
- last_widget = scr->widgets;
- while(last_widget->next_widget)
- last_widget = last_widget->next_widget;
- }
- widget->next_widget = NULL;
- widget->parent = scr;
- if(last_widget)
- last_widget->next_widget = widget;
- else
- scr->widgets = widget;
- }
- widget_t * screen_tabToWidget(screen_t * scr, uint8_t tab) {
- widget_t *last_widget = NULL;
- if(scr->widgets) {
- last_widget = scr->widgets;
- while(last_widget) {
- if(last_widget->type == widget_editable) {
- if(((editable_widget_t*)last_widget->content)->selectable.tab == tab)
- return last_widget;
- }
- last_widget = last_widget->next_widget;
- }
- }
- return last_widget;
- }
- int default_screenProcessInput(screen_t * scr, RE_Rotation_t input, RE_State_t *state) {
- int ret = -1;
- selectable_widget_t *sel = extractSelectablePartFromWidget(scr->current_widget);
- if(sel) {
- if(sel->processInput) {
- ret = sel->processInput(scr->current_widget, input, state);
- }
- }
- return ret;
- }
- void default_screenDraw(screen_t *scr) {
- widget_t *last_widget = NULL;
- if(scr->widgets) {
- if(scr->refresh==screenRefresh_eraseNow){
- FillBuffer(BLACK,fill_dma);
- }
- last_widget = scr->widgets;
- while(last_widget) {
- if(last_widget->draw){
- last_widget->draw(last_widget);
- }
- last_widget = last_widget->next_widget;
- }
- scr->refresh=screenRefresh_idle;
- }
- }
- void default_screenUpdate(screen_t *scr) {
- if(scr->widgets) {
- widget_t *last_widget = scr->widgets;
- while(last_widget) {
- if(last_widget->update){
- last_widget->update(last_widget);
- }
- last_widget = last_widget->next_widget;
- }
- }
- }
- void default_init(screen_t *scr) {
- if(scr->current_widget)
- return;
- if(!scr->widgets)
- return;
- int c = 1000;
- widget_t *w = scr->widgets;
- selectable_widget_t *sel;
- while(w) {
- sel = extractSelectablePartFromWidget(w);
- if(sel) {
- if(sel->tab < c) {
- c = sel->tab;
- }
- }
- w = w->next_widget;
- }
- w = scr->widgets;
- scr->current_widget = NULL;
- while(w) {
- sel = extractSelectablePartFromWidget(w);
- if(sel) {
- if(sel->tab == c) {
- scr->current_widget = w;
- if(sel->state == widget_idle)
- sel->state = widget_selected;
- return;
- }
- }
- w = w->next_widget;
- }
- }
- void screen_setDefaults(screen_t *scr) {
- scr->processInput = &default_screenProcessInput;
- scr->init = &default_init;
- scr->draw = &default_screenDraw;
- scr->update = &default_screenUpdate;
- scr->onEnter = NULL;
- scr->onExit = NULL;
- }
|