138 lines
4.7 KiB
C++
138 lines
4.7 KiB
C++
#include "frame_compare.h"
|
|
|
|
void UpdateCompareCanvasDraw(uint8_t mode, M5EPD_Canvas *update_canvas) {
|
|
update_canvas->fillCanvas(0);
|
|
for (int i = 0; i < 16; i++) {
|
|
update_canvas->fillRect(i * 27, 0, 27, 50, i);
|
|
}
|
|
switch (mode) {
|
|
case UPDATE_MODE_INIT : {
|
|
update_canvas->drawString("Display initialization", 8, 60);
|
|
break;
|
|
}
|
|
case UPDATE_MODE_DU : {
|
|
update_canvas->drawString("Monochrome menu, text input ", 8, 60);
|
|
break;
|
|
}
|
|
case UPDATE_MODE_GC16 : {
|
|
update_canvas->drawString("High quality images", 8, 60);
|
|
break;
|
|
}
|
|
case UPDATE_MODE_GL16 : {
|
|
update_canvas->drawString("Text with white background", 8, 60);
|
|
break;
|
|
}
|
|
case UPDATE_MODE_GLR16: {
|
|
update_canvas->drawString("Text with white background", 8, 60);
|
|
break;
|
|
}
|
|
case UPDATE_MODE_GLD16: {
|
|
update_canvas->drawString("Graphics with white background", 8, 60);
|
|
break;
|
|
}
|
|
case UPDATE_MODE_DU4 : {
|
|
update_canvas->drawString("Fast page flipping", 8, 60);
|
|
break;
|
|
}
|
|
case UPDATE_MODE_A2 : {
|
|
update_canvas->drawString("Anti-aliased text in menus", 8, 60);
|
|
break;
|
|
}
|
|
}
|
|
update_canvas->drawRect(0, 0, 432, 100, 15);
|
|
}
|
|
|
|
void key_update_mode_cb(epdgui_args_vector_t &args) {
|
|
EPDGUI_Button *btn = (EPDGUI_Button*)(args[0]);
|
|
M5EPD_Canvas *canvas = (M5EPD_Canvas*)(args[1]);
|
|
M5EPD_Canvas *canvas_time = (M5EPD_Canvas*)(args[2]);
|
|
int mode = btn->GetCustomString().toInt();
|
|
UpdateCompareCanvasDraw(mode, canvas);
|
|
canvas_time->fillCanvas(0);
|
|
uint32_t time = millis();
|
|
canvas->pushCanvas(104, 168 + (mode-1) * 108, (m5epd_update_mode_t)mode);
|
|
M5.EPD.CheckAFSR();
|
|
char buf[30];
|
|
sprintf(buf, "%lu ms", millis() - time);
|
|
canvas_time->drawString(buf, 200, 15);
|
|
canvas_time->pushCanvas(330, 925, UPDATE_MODE_GL16);
|
|
}
|
|
|
|
void key_update_reset_cb(epdgui_args_vector_t &args) {
|
|
M5.EPD.FillPartGram4bpp(104, 168, 432, 748, 0xFFFF);
|
|
M5.EPD.UpdateArea(104, 168, 432, 748, UPDATE_MODE_INIT);
|
|
}
|
|
|
|
Frame_Compare::Frame_Compare(void) {
|
|
_frame_name = "Frame_Compare";
|
|
|
|
_canvas_time = new M5EPD_Canvas(&M5.EPD);
|
|
_canvas = new M5EPD_Canvas(&M5.EPD);
|
|
_canvas->createCanvas(432, 100);
|
|
_canvas_time->createCanvas(200, 30);
|
|
_canvas->setTextSize(26);
|
|
_canvas_time->setTextSize(26);
|
|
_canvas_time->setTextDatum(CR_DATUM);
|
|
|
|
exitbtn("Home");
|
|
_canvas_title->drawString("Compare", 270, 34);
|
|
_key_updatemode[UPDATE_MODE_INIT] = new EPDGUI_Button("Reset all", 4, 88, 532, 60);
|
|
|
|
_key_updatemode[UPDATE_MODE_INIT]->Bind(EPDGUI_Button::EVENT_RELEASED, key_update_reset_cb);
|
|
|
|
for (int i = 1; i < 8; i++) {
|
|
_key_updatemode[i] = new EPDGUI_Button(0, 168 + (i-1) * 108, 100, 100);
|
|
char buf[10];
|
|
sprintf(buf, "%d", i);
|
|
_key_updatemode[i]->SetCustomString(buf);
|
|
_key_updatemode[i]->AddArgs(EPDGUI_Button::EVENT_RELEASED, 0, _key_updatemode[i]);
|
|
_key_updatemode[i]->AddArgs(EPDGUI_Button::EVENT_RELEASED, 1, _canvas);
|
|
_key_updatemode[i]->AddArgs(EPDGUI_Button::EVENT_RELEASED, 2, _canvas_time);
|
|
_key_updatemode[i]->Bind(EPDGUI_Button::EVENT_RELEASED, key_update_mode_cb);
|
|
}
|
|
|
|
_key_updatemode[UPDATE_MODE_DU ]->setLabel("DU");
|
|
_key_updatemode[UPDATE_MODE_GC16 ]->setLabel("GC16");
|
|
_key_updatemode[UPDATE_MODE_GL16 ]->setLabel("GL16");
|
|
_key_updatemode[UPDATE_MODE_GLR16]->setLabel("GLR16");
|
|
_key_updatemode[UPDATE_MODE_GLD16]->setLabel("GLD16");
|
|
_key_updatemode[UPDATE_MODE_DU4 ]->setLabel("DU4");
|
|
_key_updatemode[UPDATE_MODE_A2 ]->setLabel("A2");
|
|
|
|
_key_exit->AddArgs(EPDGUI_Button::EVENT_RELEASED, 0, (void*)(&_is_run));
|
|
_key_exit->Bind(EPDGUI_Button::EVENT_RELEASED, &Frame_Base::exit_cb);
|
|
}
|
|
|
|
Frame_Compare::~Frame_Compare(void) {
|
|
for (int i = 0; i < 8; i++) {
|
|
delete _key_updatemode[i];
|
|
}
|
|
delete _canvas;
|
|
}
|
|
|
|
int Frame_Compare::run() {
|
|
switch (_update_flag) {
|
|
case 1: {
|
|
_update_flag = 0;
|
|
for (int i = 1; i < 8; i++) {
|
|
UpdateCompareCanvasDraw(i, _canvas);
|
|
_canvas->pushCanvas(104, 168 + (i-1) * 108, (m5epd_update_mode_t)i);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
int Frame_Compare::init(epdgui_args_vector_t &args) {
|
|
_is_run = 1;
|
|
_update_flag = 1;
|
|
M5.EPD.Clear();
|
|
_canvas_title->pushCanvas(0, 8, UPDATE_MODE_NONE);
|
|
EPDGUI_AddObject(_key_exit);
|
|
for (int i = 0; i < 8; i++) {
|
|
EPDGUI_AddObject(_key_updatemode[i]);
|
|
}
|
|
EPDGUI_SetAutoUpdate(false);
|
|
return 3;
|
|
} |