Assets, Icons, UI toolkit. Part 1. (#202)
* Assets: import from gdrive * Assets: fully working build pipeline and registry * NFC: menu icon * Gui: layers. Irukagotchi: base app to handle input on idle screen. Makefile: reboot after flash in dfu mode. * ValueMutex: with lambda * Assets: proper animation frames sorting * ValueMutex: proper furi_open usage * Assets,GUI: split icon into icon data and icon state. * Format source code * Docker: add python3 and imagemagic * Irukagotchi: cleanup * GUI: event lock moved to gui. * Rfid: proper gui layer * GUI: elements. Menu: frame and scroll * GUI, Menu: format code. * Menu: dual font main menu * Menu: format sources * GUI: 0 total scrollbar * CI: enable lfs * Menu: pixel perfect main menu Co-authored-by: Aleksandr Kutuzov <aku@plooks.com> Co-authored-by: aanper <mail@s3f.ru>
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
#include "canvas.h"
|
||||
#include "canvas_i.h"
|
||||
#include "icon.h"
|
||||
#include "icon_i.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <flipper.h>
|
||||
@@ -20,6 +22,11 @@ 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);
|
||||
void canvas_icon_draw(CanvasApi* api, uint8_t x, uint8_t y, Icon* icon);
|
||||
void canvas_dot_draw(CanvasApi* api, uint8_t x, uint8_t y);
|
||||
void canvas_box_draw(CanvasApi* api, uint8_t x, uint8_t y, uint8_t width, uint8_t height);
|
||||
void canvas_draw_frame(CanvasApi* api, uint8_t x, uint8_t y, uint8_t width, uint8_t height);
|
||||
void canvas_draw_line(CanvasApi* api, uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2);
|
||||
|
||||
uint8_t u8g2_gpio_and_delay_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_ptr);
|
||||
uint8_t u8x8_hw_spi_stm32(u8x8_t* u8x8, uint8_t msg, uint8_t arg_int, void* arg_ptr);
|
||||
@@ -43,6 +50,11 @@ CanvasApi* canvas_api_init() {
|
||||
canvas->api.set_color = canvas_color_set;
|
||||
canvas->api.set_font = canvas_font_set;
|
||||
canvas->api.draw_str = canvas_str_draw;
|
||||
canvas->api.draw_icon = canvas_icon_draw;
|
||||
canvas->api.draw_dot = canvas_dot_draw;
|
||||
canvas->api.draw_box = canvas_box_draw;
|
||||
canvas->api.draw_frame = canvas_draw_frame;
|
||||
canvas->api.draw_line = canvas_draw_line;
|
||||
|
||||
return (CanvasApi*)canvas;
|
||||
}
|
||||
@@ -112,8 +124,43 @@ void canvas_font_set(CanvasApi* api, Font font) {
|
||||
|
||||
void canvas_str_draw(CanvasApi* api, uint8_t x, uint8_t y, const char* str) {
|
||||
assert(api);
|
||||
if(!str) return;
|
||||
Canvas* canvas = (Canvas*)api;
|
||||
x += canvas->offset_x;
|
||||
y += canvas->offset_y;
|
||||
u8g2_DrawStr(&canvas->fb, x, y, str);
|
||||
}
|
||||
|
||||
void canvas_icon_draw(CanvasApi* api, uint8_t x, uint8_t y, Icon* icon) {
|
||||
assert(api);
|
||||
if(!icon) return;
|
||||
Canvas* canvas = (Canvas*)api;
|
||||
x += canvas->offset_x;
|
||||
y += canvas->offset_y;
|
||||
u8g2_DrawXBM(
|
||||
&canvas->fb, x, y, icon_get_width(icon), icon_get_height(icon), icon_get_data(icon));
|
||||
}
|
||||
|
||||
void canvas_dot_draw(CanvasApi* api, uint8_t x, uint8_t y) {
|
||||
assert(api);
|
||||
Canvas* canvas = (Canvas*)api;
|
||||
u8g2_DrawPixel(&canvas->fb, x, y);
|
||||
}
|
||||
|
||||
void canvas_box_draw(CanvasApi* api, uint8_t x, uint8_t y, uint8_t width, uint8_t height) {
|
||||
assert(api);
|
||||
Canvas* canvas = (Canvas*)api;
|
||||
u8g2_DrawBox(&canvas->fb, x, y, width, height);
|
||||
}
|
||||
|
||||
void canvas_draw_frame(CanvasApi* api, uint8_t x, uint8_t y, uint8_t width, uint8_t height) {
|
||||
assert(api);
|
||||
Canvas* canvas = (Canvas*)api;
|
||||
u8g2_DrawFrame(&canvas->fb, x, y, width, height);
|
||||
}
|
||||
|
||||
void canvas_draw_line(CanvasApi* api, uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2) {
|
||||
assert(api);
|
||||
Canvas* canvas = (Canvas*)api;
|
||||
u8g2_DrawLine(&canvas->fb, x1, y1, x2, y2);
|
||||
}
|
||||
|
Reference in New Issue
Block a user