[Horus] Menus icons now in cache

I hope it will reduce calculation time a little bit!
This commit is contained in:
Bertrand Songis
2016-04-07 08:26:04 +02:00
parent b1e5e06d5b
commit eaed9dd1a9
86 changed files with 373 additions and 352 deletions
+90 -19
View File
@@ -20,10 +20,6 @@
#include "opentx.h"
const uint8_t LBM_TOPMENU_MASK_OPENTX[] = {
#include "mask_topmenu_opentx.lbm"
};
const ZoneOption OPTIONS_THEME_DEFAULT[] = {
{ "Background color", ZoneOption::Color, OPTION_DEFAULT_VALUE_UNSIGNED(WHITE) },
{ "Main color", ZoneOption::Color, OPTION_DEFAULT_VALUE_UNSIGNED(RED) },
@@ -68,12 +64,79 @@ class DefaultTheme: public Theme
lcdColorTable[OVERLAY_COLOR_INDEX] = BLACK;
}
void loadMenuIcon(uint8_t index, const char * filename) const
{
BitmapBuffer * mask = BitmapBuffer::loadMask(getThemePath(filename));
if (mask) {
menuIconNormal[index] = new BitmapBuffer(BMP_RGB565, mask->getWidth(), mask->getHeight());
menuIconNormal[index]->clear(HEADER_BGCOLOR);
menuIconNormal[index]->drawMask(0, 0, mask, MENU_TITLE_COLOR);
menuIconSelected[index] = new BitmapBuffer(BMP_RGB565, mask->getWidth(), mask->getHeight());
menuIconSelected[index]->clear(HEADER_CURRENT_BGCOLOR);
menuIconSelected[index]->drawMask(0, 0, mask, MENU_TITLE_COLOR);
}
}
void loadMenusIcons() const
{
loadMenuIcon(ICON_OPENTX, "mask_opentx.png");
loadMenuIcon(ICON_RADIO, "mask_menu_radio.png");
loadMenuIcon(ICON_RADIO_SETUP, "mask_radio_setup.png");
loadMenuIcon(ICON_RADIO_SD_BROWSER, "mask_radio_sd_browser.png");
loadMenuIcon(ICON_RADIO_GLOBAL_FUNCTIONS, "mask_radio_global_functions.png");
loadMenuIcon(ICON_RADIO_TRAINER, "mask_radio_trainer.png");
loadMenuIcon(ICON_RADIO_HARDWARE, "mask_radio_hardware.png");
loadMenuIcon(ICON_RADIO_VERSION, "mask_radio_version.png");
loadMenuIcon(ICON_MODEL, "mask_menu_model.png");
loadMenuIcon(ICON_MODEL_SETUP, "mask_model_setup.png");
loadMenuIcon(ICON_MODEL_HELI, "mask_model_heli.png");
loadMenuIcon(ICON_MODEL_FLIGHT_MODES, "mask_model_flight_modes.png");
loadMenuIcon(ICON_MODEL_INPUTS, "mask_model_inputs.png");
loadMenuIcon(ICON_MODEL_MIXER, "mask_model_mixer.png");
loadMenuIcon(ICON_MODEL_OUTPUTS, "mask_model_outputs.png");
loadMenuIcon(ICON_MODEL_CURVES, "mask_model_curves.png");
loadMenuIcon(ICON_MODEL_GVARS, "mask_model_gvars.png");
loadMenuIcon(ICON_MODEL_LOGICAL_SWITCHES, "mask_model_logical_switches.png");
loadMenuIcon(ICON_MODEL_SPECIAL_FUNCTIONS, "mask_model_special_functions.png");
loadMenuIcon(ICON_MODEL_LUA_SCRIPTS, "mask_model_lua_scripts.png");
loadMenuIcon(ICON_MODEL_TELEMETRY, "mask_model_telemetry.png");
loadMenuIcon(ICON_STATS, "mask_menu_stats.png");
loadMenuIcon(ICON_STATS_THROTTLE_GRAPH, "mask_stats_throttle_graph.png");
loadMenuIcon(ICON_STATS_TIMERS, "mask_stats_timers.png");
loadMenuIcon(ICON_STATS_ANALOGS, "mask_stats_analogs.png");
loadMenuIcon(ICON_STATS_DEBUG, "mask_stats_debug.png");
loadMenuIcon(ICON_THEME, "mask_menu_theme.png");
loadMenuIcon(ICON_THEME_SETUP, "mask_theme_setup.png");
loadMenuIcon(ICON_THEME_VIEW1, "mask_theme_view1.png");
loadMenuIcon(ICON_THEME_VIEW2, "mask_theme_view2.png");
loadMenuIcon(ICON_THEME_VIEW3, "mask_theme_view3.png");
loadMenuIcon(ICON_THEME_VIEW4, "mask_theme_view4.png");
loadMenuIcon(ICON_THEME_VIEW5, "mask_theme_view5.png");
loadMenuIcon(ICON_THEME_ADD_VIEW, "mask_theme_add_view.png");
BitmapBuffer * background = BitmapBuffer::loadMask(getThemePath("mask_currentmenu_bg.png"));
BitmapBuffer * shadow = BitmapBuffer::loadMask(getThemePath("mask_currentmenu_shadow.png"));
BitmapBuffer * dot = BitmapBuffer::loadMask(getThemePath("mask_currentmenu_dot.png"));
if (!currentMenuBackground) currentMenuBackground = new BitmapBuffer(BMP_RGB565, 36, 53);
currentMenuBackground->drawSolidFilledRect(0, 0, currentMenuBackground->getWidth(), MENU_HEADER_HEIGHT, HEADER_BGCOLOR);
currentMenuBackground->drawSolidFilledRect(0, MENU_HEADER_HEIGHT, currentMenuBackground->getWidth(), MENU_TITLE_TOP - MENU_HEADER_HEIGHT, TEXT_BGCOLOR);
currentMenuBackground->drawSolidFilledRect(0, MENU_TITLE_TOP, currentMenuBackground->getWidth(), currentMenuBackground->getHeight() - MENU_TITLE_TOP, TITLE_BGCOLOR);
currentMenuBackground->drawMask(0, 0, background, HEADER_CURRENT_BGCOLOR);
currentMenuBackground->drawMask(0, 0, shadow, TRIM_SHADOW_COLOR);
currentMenuBackground->drawMask(10, 39, dot, MENU_TITLE_COLOR);
delete background;
delete shadow;
delete dot;
}
virtual void load() const
{
loadColors();
loadMenusIcons();
Theme::load();
if (!backgroundBitmap) backgroundBitmap = BitmapBuffer::load(getThemePath("mainbg.bmp"));
if (!aboutBackgroundBitmap) aboutBackgroundBitmap = BitmapBuffer::load(getThemePath("aboutbg.bmp"));
update();
}
@@ -103,33 +166,41 @@ class DefaultTheme: public Theme
}
}
virtual void drawAboutBackground() const
{
lcd->drawBitmap(0, 0, aboutBackgroundBitmap);
}
virtual void drawTopbarBackground(const uint8_t * icon) const
virtual void drawTopbarBackground(uint8_t icon) const
{
lcdDrawSolidFilledRect(0, 0, LCD_W, MENU_HEADER_HEIGHT, HEADER_BGCOLOR);
lcdDrawBitmapPattern(0, 0, LBM_TOPMENU_POLYGON, TITLE_BGCOLOR);
if (icon) {
lcdDrawBitmapPattern(5, 7, icon, MENU_TITLE_COLOR);
}
else {
lcdDrawBitmapPattern(4, 10, LBM_TOPMENU_MASK_OPENTX, MENU_TITLE_COLOR);
}
if (icon == ICON_OPENTX)
lcd->drawBitmap(4, 10, menuIconSelected[ICON_OPENTX]);
else
lcd->drawBitmap(5, 7, menuIconSelected[icon]);
drawTopbarDatetime();
}
virtual void drawMenuIcon(uint8_t index, uint8_t position, bool selected) const
{
if (selected) {
lcd->drawBitmap(58+position*MENU_ICONS_SPACING-10, 0, currentMenuBackground);
lcd->drawBitmap(50+position*MENU_ICONS_SPACING, 7, menuIconSelected[index], MENU_TITLE_COLOR);
}
else {
lcd->drawBitmap(50+position*MENU_ICONS_SPACING, 7, menuIconNormal[index], MENU_TITLE_COLOR);
}
}
protected:
static const BitmapBuffer * backgroundBitmap;
static const BitmapBuffer * aboutBackgroundBitmap;
static BitmapBuffer * menuIconNormal[MENUS_ICONS_COUNT];
static BitmapBuffer * menuIconSelected[MENUS_ICONS_COUNT];
static BitmapBuffer * currentMenuBackground;
};
const BitmapBuffer * DefaultTheme::backgroundBitmap = NULL;
const BitmapBuffer * DefaultTheme::aboutBackgroundBitmap = NULL;
BitmapBuffer * DefaultTheme::menuIconNormal[MENUS_ICONS_COUNT] = { NULL };
BitmapBuffer * DefaultTheme::menuIconSelected[MENUS_ICONS_COUNT] = { NULL };
BitmapBuffer * DefaultTheme::currentMenuBackground = NULL;
DefaultTheme defaultTheme;
Theme * theme = &defaultTheme;