Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraanper <mail@s3f.ru>2020-10-15 18:05:28 +0300
committeraanper <mail@s3f.ru>2020-10-15 18:05:28 +0300
commite684869970ce5e4b9d785dd25ccd6620c82f441a (patch)
treea4ee38426646ce889615347795d329dc06f7581c /applications/gui/canvas.c
parent19ef348c80e027f4c9ea304bc96349c195e97fbb (diff)
refactor canvas
Diffstat (limited to 'applications/gui/canvas.c')
-rw-r--r--applications/gui/canvas.c116
1 files changed, 73 insertions, 43 deletions
diff --git a/applications/gui/canvas.c b/applications/gui/canvas.c
index 6f137284..2572bd23 100644
--- a/applications/gui/canvas.c
+++ b/applications/gui/canvas.c
@@ -6,74 +6,104 @@
#include <u8g2.h>
struct Canvas {
- FuriRecordSubscriber* fb_record;
- u8g2_t* fb;
+ u8g2_t fb;
uint8_t offset_x;
uint8_t offset_y;
uint8_t width;
uint8_t height;
};
-Canvas* canvas_alloc() {
- Canvas* canvas = furi_alloc(sizeof(Canvas));
- canvas->fb_record = furi_open_deprecated("u8g2_fb", false, false, NULL, NULL, NULL);
- assert(canvas->fb_record);
- return canvas;
+uint8_t canvas_width(CanvasApi* api);
+uint8_t canvas_height(CanvasApi* api);
+void canvas_clear(CanvasApi* api);
+void canvas_color_set(CanvasApi* api, uint8_t color);
+void canvas_font_set(CanvasApi* api, Font font);
+void canvas_str_draw(CanvasApi* api, uint8_t x, uint8_t y, const char* str);
+
+CanvasApi* canvas_api_init() {
+ CanvasApi* api = furi_alloc(sizeof(CanvasApi));
+
+ u8g2_t _u8g2;
+ u8g2_Setup_st7565_erc12864_alt_f(
+ &api->canvas.fb, U8G2_R0, u8x8_hw_spi_stm32, u8g2_gpio_and_delay_stm32);
+ u8g2_InitDisplay(
+ &canvas->fb); // send init sequence to the display, display is in sleep mode after this
+ u8g2_SetContrast(&api->canvas.fb, 36);
+
+ u8g2_SetPowerSave(&api->canvas.fb, 0); // wake up display
+ u8g2_SendBuffer(&api->canvas.fb);
+
+ api->width = canvas_width;
+ api->height = canvas_height;
+ api->clear = canvas_clear;
+ api->canvas_color_set = canvas_color_set;
+ api->canvas_font_set = canvas_font_set;
+ api->draw_str = canvas_str_draw;
+
+ api->fonts = {
+ .primary = u8g2_font_Born2bSportyV2_tr,
+ .secondary = u8g2_font_HelvetiPixel_tr,
+ };
+
+ return api;
}
-void canvas_free(Canvas* canvas) {
- assert(canvas);
- free(canvas);
+void canvas_api_free(CanvasApi* api) {
+ assert(api);
+ free(api);
}
-void canvas_commit(Canvas* canvas) {
- assert(canvas);
- if(canvas->fb) {
- furi_commit(canvas->fb_record);
- canvas->fb = NULL;
- }
+void canvas_commit(CanvasApi* api) {
+ assert(api);
+
+ u8g2_SetPowerSave(&api->canvas.fb, 0); // wake up display
+ u8g2_SendBuffer(&api->canvas.fb);
}
void canvas_frame_set(
- Canvas* canvas,
+ CanvasApi* api,
uint8_t offset_x,
uint8_t offset_y,
uint8_t width,
uint8_t height) {
- assert(canvas);
- canvas->offset_x = offset_x;
- canvas->offset_y = offset_y;
- canvas->width = width;
- canvas->height = height;
+ assert(api);
+ api->canvas.offset_x = offset_x;
+ api->canvas.offset_y = offset_y;
+ api->canvas.width = width;
+ api->canvas.height = height;
}
-u8g2_t* canvas_fb(Canvas* canvas) {
- if(!canvas->fb) {
- canvas->fb = furi_take(canvas->fb_record);
- assert(canvas->fb);
- }
- return canvas->fb;
+uint8_t canvas_width(CanvasApi* api) {
+ assert(api);
+
+ return api->canvas.width;
+}
+
+uint8_t canvas_height(CanvasApi* api) {
+ assert(api);
+
+ return api->canvas.height;
}
-void canvas_clear(Canvas* canvas) {
- u8g2_t* fb = canvas_fb(canvas);
- u8g2_ClearBuffer(fb);
+void canvas_clear(CanvasApi* api) {
+ assert(api);
+ u8g2_ClearBuffer(&api->canvas.fb);
}
-void canvas_color_set(Canvas* canvas, uint8_t color) {
- u8g2_t* fb = canvas_fb(canvas);
- u8g2_SetDrawColor(fb, 1);
+void canvas_color_set(CanvasApi* api, Color color) {
+ assert(api);
+ u8g2_SetDrawColor(&api->canvas.fb, color);
}
-void canvas_font_set(Canvas* canvas, font_t font) {
- u8g2_t* fb = canvas_fb(canvas);
- u8g2_SetFontMode(fb, 1);
- u8g2_SetFont(fb, font);
+void canvas_font_set(CanvasApi* api, Font font) {
+ assert(api);
+ u8g2_SetFontMode(&api->canvas.fb, 1);
+ u8g2_SetFont(&api->canvas.fb, font);
}
-void canvas_str_draw(Canvas* canvas, uint8_t x, uint8_t y, const char* str) {
- x += canvas->offset_x;
- y += canvas->offset_y;
- u8g2_t* fb = canvas_fb(canvas);
- u8g2_DrawStr(fb, x, y, str);
+void canvas_str_draw(CanvasApi* api, uint8_t x, uint8_t y, const char* str) {
+ assert(api);
+ x += api->canvas.offset_x;
+ y += api->canvas.offset_y;
+ u8g2_DrawStr(&api->canvas.fb, x, y, str);
}