[Horus] Optimization for the Model Select screen (proxy design pattern)
This commit is contained in:
@@ -51,7 +51,7 @@ void drawCategory(coord_t y, const char * name, bool selected)
|
||||
|
||||
void drawModel(coord_t x, coord_t y, ModelCell * model, bool current, bool selected)
|
||||
{
|
||||
lcd->drawBitmap(x+1, y+1, &model->buffer);
|
||||
lcd->drawBitmap(x+1, y+1, model->getBuffer());
|
||||
if (current) {
|
||||
lcd->drawBitmapPattern(x+66, y+43, LBM_ACTIVE_MODEL, TITLE_BGCOLOR);
|
||||
}
|
||||
@@ -324,7 +324,7 @@ bool menuModelSelect(event_t event)
|
||||
drawModel(MODELS_LEFT, y, *it, current, selected);
|
||||
}
|
||||
if (selected) {
|
||||
lcdDrawText(MODELS_LEFT, LCD_H-FH-1, (*it)->name, TEXT_COLOR);
|
||||
// lcdDrawText(MODELS_LEFT, LCD_H-FH-1, (*it)->name, TEXT_COLOR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,47 +31,59 @@ class ModelCell
|
||||
{
|
||||
public:
|
||||
ModelCell(const char * name):
|
||||
buffer(BMP_RGB565, MODELCELL_WIDTH, MODELCELL_HEIGHT)
|
||||
buffer(NULL)
|
||||
{
|
||||
buffer.clear(TEXT_BGCOLOR);
|
||||
|
||||
strncpy(this->name, name, sizeof(this->name));
|
||||
}
|
||||
|
||||
const BitmapBuffer * getBuffer()
|
||||
{
|
||||
if (!buffer) {
|
||||
load();
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void load()
|
||||
{
|
||||
ModelHeader header;
|
||||
const char * error = NULL;
|
||||
|
||||
buffer = new BitmapBuffer(BMP_RGB565, MODELCELL_WIDTH, MODELCELL_HEIGHT);
|
||||
buffer->clear(TEXT_BGCOLOR);
|
||||
|
||||
if (strncmp(name, g_eeGeneral.currModelFilename, LEN_MODEL_FILENAME) == 0)
|
||||
header = g_model.header;
|
||||
else
|
||||
error = readModel(name, (uint8_t *)&header, sizeof(header));
|
||||
|
||||
if (error) {
|
||||
buffer.drawText(5, 2, "(Invalid Model)", TEXT_COLOR);
|
||||
buffer.drawBitmapPattern(5, 23, LBM_LIBRARY_SLOT, TEXT_COLOR);
|
||||
buffer->drawText(5, 2, "(Invalid Model)", TEXT_COLOR);
|
||||
buffer->drawBitmapPattern(5, 23, LBM_LIBRARY_SLOT, TEXT_COLOR);
|
||||
}
|
||||
else {
|
||||
char timer[LEN_TIMER_STRING];
|
||||
buffer.drawSizedText(5, 2, header.name, LEN_MODEL_NAME, ZCHAR|TEXT_COLOR);
|
||||
buffer->drawSizedText(5, 2, header.name, LEN_MODEL_NAME, ZCHAR|TEXT_COLOR);
|
||||
getTimerString(timer, 0);
|
||||
buffer.drawText(101, 40, timer, TEXT_COLOR);
|
||||
buffer->drawText(101, 40, timer, TEXT_COLOR);
|
||||
for (int i=0; i<4; i++) {
|
||||
buffer.drawBitmapPattern(104+i*11, 25, LBM_SCORE0, TITLE_BGCOLOR);
|
||||
buffer->drawBitmapPattern(104+i*11, 25, LBM_SCORE0, TITLE_BGCOLOR);
|
||||
}
|
||||
GET_FILENAME(filename, BITMAPS_PATH, header.bitmap, "");
|
||||
const BitmapBuffer * bitmap = BitmapBuffer::load(filename);
|
||||
if (bitmap) {
|
||||
buffer.drawScaledBitmap(bitmap, 5, 24, 56, 32);
|
||||
buffer->drawScaledBitmap(bitmap, 5, 24, 56, 32);
|
||||
delete bitmap;
|
||||
}
|
||||
else {
|
||||
buffer.drawBitmapPattern(5, 23, LBM_LIBRARY_SLOT, TEXT_COLOR);
|
||||
buffer->drawBitmapPattern(5, 23, LBM_LIBRARY_SLOT, TEXT_COLOR);
|
||||
}
|
||||
}
|
||||
buffer.drawSolidHorizontalLine(5, 19, 143, LINE_COLOR);
|
||||
buffer->drawSolidHorizontalLine(5, 19, 143, LINE_COLOR);
|
||||
}
|
||||
|
||||
char name[LEN_MODEL_FILENAME+1];
|
||||
BitmapBuffer buffer;
|
||||
BitmapBuffer * buffer;
|
||||
};
|
||||
|
||||
class ModelsCategory: public std::list<ModelCell *>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#include "ff.h"
|
||||
|
||||
#define DEFAULT_CATEGORY "Models"
|
||||
#define DEFAULT_MODEL_FILENAME "model01.bin"
|
||||
#define DEFAULT_MODEL_FILENAME "model1.bin"
|
||||
|
||||
const char * readModel(const char * filename, uint8_t * buffer, uint32_t size);
|
||||
const char * loadModel(const char * filename, bool alarms=true);
|
||||
|
||||
Reference in New Issue
Block a user