2021-10-03 13:36:05 +03:00
|
|
|
/**
|
|
|
|
* @file canvas.h
|
|
|
|
* GUI: Canvas API
|
|
|
|
*/
|
|
|
|
|
Display and UI implementation (#169)
* Menu app. Lib: add mlib submodule.
* Menu: new startup lib dependency definition
* Menu: hierarchy in menu. Cube: fix heap1/4 inconsistency, stack protection.
* GUI: rendering pipeline initial version.
* GUI: layered widget composing, FURI record. Menu: FURI record, api.
* GUI: input dispatching. Menu: switch to input from GUI.
* GUI, MENU: code style cleanup, fix type conversion warnings.
* GUI, Menu: syntax check.
* Makefile: check and reinit submodules, format.
* Menu: lock on event processing. Makefile: proper submodule initialization.
* Menu: fix stack corruption by queue.
* GUI: refactor.
* Makefile: format rule fix, st-util pid.
* GUI, Menu, FURI: format with clang-format.
* GUI, MENU: locks in critical sections, fix stack corruption, ready signaling.
* Makefile: clang format rule cleanup.
* GUI,MENU: migrate to new API.
* Applications: PRODUCTION_HW variable, skip drivers build on local target.
* refactor production build
* add git to dockerfile
* GUI: uncomment lock block
Co-authored-by: Aleksandr Kutuzov <aku@plooks.com>
2020-10-14 13:21:55 +03:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <stdint.h>
|
2024-03-25 14:04:07 +03:00
|
|
|
#include <stddef.h>
|
2021-07-07 11:57:49 +03:00
|
|
|
#include <gui/icon_animation.h>
|
2022-10-28 17:08:50 +03:00
|
|
|
#include <gui/icon.h>
|
Display and UI implementation (#169)
* Menu app. Lib: add mlib submodule.
* Menu: new startup lib dependency definition
* Menu: hierarchy in menu. Cube: fix heap1/4 inconsistency, stack protection.
* GUI: rendering pipeline initial version.
* GUI: layered widget composing, FURI record. Menu: FURI record, api.
* GUI: input dispatching. Menu: switch to input from GUI.
* GUI, MENU: code style cleanup, fix type conversion warnings.
* GUI, Menu: syntax check.
* Makefile: check and reinit submodules, format.
* Menu: lock on event processing. Makefile: proper submodule initialization.
* Menu: fix stack corruption by queue.
* GUI: refactor.
* Makefile: format rule fix, st-util pid.
* GUI, Menu, FURI: format with clang-format.
* GUI, MENU: locks in critical sections, fix stack corruption, ready signaling.
* Makefile: clang format rule cleanup.
* GUI,MENU: migrate to new API.
* Applications: PRODUCTION_HW variable, skip drivers build on local target.
* refactor production build
* add git to dockerfile
* GUI: uncomment lock block
Co-authored-by: Aleksandr Kutuzov <aku@plooks.com>
2020-10-14 13:21:55 +03:00
|
|
|
|
[FL-140] Core api dynamic records (#296)
* SYSTEM: tickless mode with deep sleep.
* Move FreeRTOS ticks to lptim2
* API: move all sumbodules init routines to one place. Timebase: working lptim2 at tick source.
* API Timebase: lp-timer routines, timer access safe zones prediction and synchronization. FreeRTOS: adjust configuration for tickless mode.
* NFC: support for tickless mode.
* API Timebase: improve tick error handling in IRQ. Apploader: use insomnia mode to run applications.
* BLE: prevent sleep while core2 starting
* HAL: nap while in insomnia mode
* init records work
* try to implement record delete
* tests and flapp
* flapp subsystem
* new core functions to get app stat, simplify core code
* fix thread termination
* add strdup to core
* fix tests
* Refactoring: remove all unusued parts, update API usage, aggreagate API sources and headers, new record storage
* Refactoring: update furi record api usage, cleanup code
* Fix broken merge for freertos apps
* Core, Target: fix compilation warnings
* Drop firmware target local
* HAL Timebase, Power, Clock: semaphore guarded access to clock and power modes, better sleep mode.
* SD-Filesystem: wait for all deps to arrive before adding widget. Core, BLE: disable debug dump to serial.
* delete old app example-ipc
* delete old app fatfs list
* fix strobe app, add input header
* delete old display driver
* comment old app qr-code
* fix sd-card test, add forced widget update
* remove unused new core test
* increase heap to 128k
* comment and assert old core tests
* fix syntax
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2021-01-20 19:09:26 +03:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Color enumeration */
|
2020-10-15 18:05:28 +03:00
|
|
|
typedef enum {
|
2020-10-15 18:57:21 +03:00
|
|
|
ColorWhite = 0x00,
|
|
|
|
ColorBlack = 0x01,
|
2022-12-27 12:14:03 +03:00
|
|
|
ColorXOR = 0x02,
|
2020-10-15 18:05:28 +03:00
|
|
|
} Color;
|
Display and UI implementation (#169)
* Menu app. Lib: add mlib submodule.
* Menu: new startup lib dependency definition
* Menu: hierarchy in menu. Cube: fix heap1/4 inconsistency, stack protection.
* GUI: rendering pipeline initial version.
* GUI: layered widget composing, FURI record. Menu: FURI record, api.
* GUI: input dispatching. Menu: switch to input from GUI.
* GUI, MENU: code style cleanup, fix type conversion warnings.
* GUI, Menu: syntax check.
* Makefile: check and reinit submodules, format.
* Menu: lock on event processing. Makefile: proper submodule initialization.
* Menu: fix stack corruption by queue.
* GUI: refactor.
* Makefile: format rule fix, st-util pid.
* GUI, Menu, FURI: format with clang-format.
* GUI, MENU: locks in critical sections, fix stack corruption, ready signaling.
* Makefile: clang format rule cleanup.
* GUI,MENU: migrate to new API.
* Applications: PRODUCTION_HW variable, skip drivers build on local target.
* refactor production build
* add git to dockerfile
* GUI: uncomment lock block
Co-authored-by: Aleksandr Kutuzov <aku@plooks.com>
2020-10-14 13:21:55 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Fonts enumeration */
|
2021-10-27 21:55:03 +03:00
|
|
|
typedef enum {
|
|
|
|
FontPrimary,
|
|
|
|
FontSecondary,
|
|
|
|
FontKeyboard,
|
|
|
|
FontBigNumbers,
|
2022-09-08 18:24:25 +03:00
|
|
|
FontBatteryPercent,
|
|
|
|
|
2021-10-27 21:55:03 +03:00
|
|
|
// Keep last for fonts number calculation
|
|
|
|
FontTotalNumber,
|
|
|
|
} Font;
|
Implementation of some widgets based on real use cases and designs [FL-392][FL-809] (#315)
* gui test app
* aligned string draw functions
* add canvas_invert_color, canvas_draw_button_left, canvas_draw_button_right
* use new str and button fns in dialog
* real dialog mockup
* add new gui test app recipe
* submenu module init
* delete unused variable
* move buttons to element, add canvas_string_width fn, new center button element
* button icons
* submenu module
* use submenu module, switch views
* keyboard buttons img
* new font for keyboard
* text input (keyboard) module
* add text input to gui test app
* add gui tesst app to release build, fix flags
* handle transition from start and end position, fix input switch
* add long text support to text input
* canvas_string_width and the underlying u8g2_GetStrWidth now return uint16_t
* remove deprecated libs and apps
* canvas_font_max_height fn
* new element, aligned multiline text
* use multiline text instead of plain string
* fix second keyboard row, rename uppercase fn
* qwerty-like keyboard layout
* new icons for iButton app
* better dialog text position and events handling
* remove confusing comment
* new extended dialog module
* extended dialog module usage
* update docs
* new gui module, popup with timeout
* popup usage
* canvas, remove outdated canvas_font_max_height, use canvas_current_font_height
* use furi check
* use new view_enter and view_exit callback for timers
* add DrZlo to gui tester codeowner
Co-authored-by: aanper <mail@s3f.ru>
2021-02-05 02:35:06 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Alignment enumeration */
|
Implementation of some widgets based on real use cases and designs [FL-392][FL-809] (#315)
* gui test app
* aligned string draw functions
* add canvas_invert_color, canvas_draw_button_left, canvas_draw_button_right
* use new str and button fns in dialog
* real dialog mockup
* add new gui test app recipe
* submenu module init
* delete unused variable
* move buttons to element, add canvas_string_width fn, new center button element
* button icons
* submenu module
* use submenu module, switch views
* keyboard buttons img
* new font for keyboard
* text input (keyboard) module
* add text input to gui test app
* add gui tesst app to release build, fix flags
* handle transition from start and end position, fix input switch
* add long text support to text input
* canvas_string_width and the underlying u8g2_GetStrWidth now return uint16_t
* remove deprecated libs and apps
* canvas_font_max_height fn
* new element, aligned multiline text
* use multiline text instead of plain string
* fix second keyboard row, rename uppercase fn
* qwerty-like keyboard layout
* new icons for iButton app
* better dialog text position and events handling
* remove confusing comment
* new extended dialog module
* extended dialog module usage
* update docs
* new gui module, popup with timeout
* popup usage
* canvas, remove outdated canvas_font_max_height, use canvas_current_font_height
* use furi check
* use new view_enter and view_exit callback for timers
* add DrZlo to gui tester codeowner
Co-authored-by: aanper <mail@s3f.ru>
2021-02-05 02:35:06 +03:00
|
|
|
typedef enum {
|
|
|
|
AlignLeft,
|
|
|
|
AlignRight,
|
|
|
|
AlignTop,
|
|
|
|
AlignBottom,
|
|
|
|
AlignCenter,
|
|
|
|
} Align;
|
2020-10-15 18:57:21 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Canvas Orientation */
|
2021-05-19 12:43:15 +03:00
|
|
|
typedef enum {
|
|
|
|
CanvasOrientationHorizontal,
|
2022-10-26 21:35:49 +03:00
|
|
|
CanvasOrientationHorizontalFlip,
|
2021-05-19 12:43:15 +03:00
|
|
|
CanvasOrientationVertical,
|
2022-10-26 21:35:49 +03:00
|
|
|
CanvasOrientationVerticalFlip,
|
2021-05-19 12:43:15 +03:00
|
|
|
} CanvasOrientation;
|
|
|
|
|
2021-10-25 17:37:14 +03:00
|
|
|
/** Font Direction */
|
|
|
|
typedef enum {
|
2021-12-15 20:39:06 +03:00
|
|
|
CanvasDirectionLeftToRight,
|
|
|
|
CanvasDirectionTopToBottom,
|
|
|
|
CanvasDirectionRightToLeft,
|
|
|
|
CanvasDirectionBottomToTop,
|
|
|
|
} CanvasDirection;
|
2021-10-25 17:37:14 +03:00
|
|
|
|
2021-10-27 21:55:03 +03:00
|
|
|
/** Font parameters */
|
|
|
|
typedef struct {
|
|
|
|
uint8_t leading_default;
|
|
|
|
uint8_t leading_min;
|
|
|
|
uint8_t height;
|
|
|
|
uint8_t descender;
|
|
|
|
} CanvasFontParameters;
|
|
|
|
|
2023-04-06 06:36:12 +03:00
|
|
|
/** Icon flip */
|
|
|
|
typedef enum {
|
|
|
|
IconFlipNone,
|
|
|
|
IconFlipHorizontal,
|
|
|
|
IconFlipVertical,
|
|
|
|
IconFlipBoth,
|
|
|
|
} IconFlip;
|
|
|
|
|
|
|
|
/** Icon rotation */
|
|
|
|
typedef enum {
|
|
|
|
IconRotation0,
|
|
|
|
IconRotation90,
|
|
|
|
IconRotation180,
|
|
|
|
IconRotation270,
|
|
|
|
} IconRotation;
|
|
|
|
|
2022-09-28 19:52:46 +03:00
|
|
|
/** Canvas anonymous structure */
|
2020-12-14 13:50:32 +03:00
|
|
|
typedef struct Canvas Canvas;
|
|
|
|
|
2022-12-29 14:35:26 +03:00
|
|
|
/** Reset canvas drawing tools configuration
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
*/
|
|
|
|
void canvas_reset(Canvas* canvas);
|
|
|
|
|
|
|
|
/** Commit canvas. Send buffer to display
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
*/
|
|
|
|
void canvas_commit(Canvas* canvas);
|
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Get Canvas width
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
*
|
|
|
|
* @return width in pixels.
|
2020-12-14 13:50:32 +03:00
|
|
|
*/
|
2024-03-25 14:04:07 +03:00
|
|
|
size_t canvas_width(const Canvas* canvas);
|
2020-12-14 13:50:32 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Get Canvas height
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
*
|
|
|
|
* @return height in pixels.
|
2020-12-14 13:50:32 +03:00
|
|
|
*/
|
2024-03-25 14:04:07 +03:00
|
|
|
size_t canvas_height(const Canvas* canvas);
|
2020-12-14 13:50:32 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Get current font height
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
*
|
|
|
|
* @return height in pixels.
|
2021-02-03 12:52:54 +03:00
|
|
|
*/
|
2024-03-25 14:04:07 +03:00
|
|
|
size_t canvas_current_font_height(const Canvas* canvas);
|
2023-05-22 03:45:17 +03:00
|
|
|
|
|
|
|
/** Get current font width
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
*
|
|
|
|
* @return width in pixels.
|
|
|
|
*/
|
2024-03-25 14:08:51 +03:00
|
|
|
size_t canvas_current_font_width(const Canvas* canvas);
|
2021-02-03 12:52:54 +03:00
|
|
|
|
2021-10-27 21:55:03 +03:00
|
|
|
/** Get font parameters
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param font Font
|
|
|
|
*
|
|
|
|
* @return pointer to CanvasFontParameters structure
|
|
|
|
*/
|
2023-02-09 07:58:01 +03:00
|
|
|
const CanvasFontParameters* canvas_get_font_params(const Canvas* canvas, Font font);
|
2021-10-27 21:55:03 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Clear canvas
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
2020-12-14 13:50:32 +03:00
|
|
|
*/
|
|
|
|
void canvas_clear(Canvas* canvas);
|
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Set drawing color
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param color Color
|
2020-12-14 13:50:32 +03:00
|
|
|
*/
|
|
|
|
void canvas_set_color(Canvas* canvas, Color color);
|
|
|
|
|
2024-03-25 14:04:07 +03:00
|
|
|
/** Set font swap Argument String Rotation Description
|
2021-10-25 17:37:14 +03:00
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param dir Direction font
|
|
|
|
*/
|
2021-12-15 20:39:06 +03:00
|
|
|
void canvas_set_font_direction(Canvas* canvas, CanvasDirection dir);
|
2021-10-25 17:37:14 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Invert drawing color
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
Implementation of some widgets based on real use cases and designs [FL-392][FL-809] (#315)
* gui test app
* aligned string draw functions
* add canvas_invert_color, canvas_draw_button_left, canvas_draw_button_right
* use new str and button fns in dialog
* real dialog mockup
* add new gui test app recipe
* submenu module init
* delete unused variable
* move buttons to element, add canvas_string_width fn, new center button element
* button icons
* submenu module
* use submenu module, switch views
* keyboard buttons img
* new font for keyboard
* text input (keyboard) module
* add text input to gui test app
* add gui tesst app to release build, fix flags
* handle transition from start and end position, fix input switch
* add long text support to text input
* canvas_string_width and the underlying u8g2_GetStrWidth now return uint16_t
* remove deprecated libs and apps
* canvas_font_max_height fn
* new element, aligned multiline text
* use multiline text instead of plain string
* fix second keyboard row, rename uppercase fn
* qwerty-like keyboard layout
* new icons for iButton app
* better dialog text position and events handling
* remove confusing comment
* new extended dialog module
* extended dialog module usage
* update docs
* new gui module, popup with timeout
* popup usage
* canvas, remove outdated canvas_font_max_height, use canvas_current_font_height
* use furi check
* use new view_enter and view_exit callback for timers
* add DrZlo to gui tester codeowner
Co-authored-by: aanper <mail@s3f.ru>
2021-02-05 02:35:06 +03:00
|
|
|
*/
|
|
|
|
void canvas_invert_color(Canvas* canvas);
|
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Set drawing font
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param font Font
|
2020-12-14 13:50:32 +03:00
|
|
|
*/
|
|
|
|
void canvas_set_font(Canvas* canvas, Font font);
|
|
|
|
|
2023-01-06 21:43:43 +03:00
|
|
|
/** Set custom drawing font
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param font Pointer to u8g2 const uint8_t* font array
|
|
|
|
*/
|
2023-01-25 08:52:51 +03:00
|
|
|
void canvas_set_custom_u8g2_font(Canvas* canvas, const uint8_t* font);
|
2023-01-06 21:43:43 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Draw string at position of baseline defined by x, y.
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x anchor point x coordinate
|
|
|
|
* @param y anchor point y coordinate
|
|
|
|
* @param str C-string
|
2020-12-14 13:50:32 +03:00
|
|
|
*/
|
2024-03-25 14:04:07 +03:00
|
|
|
void canvas_draw_str(Canvas* canvas, int32_t x, int32_t y, const char* str);
|
2020-12-14 13:50:32 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Draw aligned string defined by x, y.
|
|
|
|
*
|
|
|
|
* Align calculated from position of baseline, string width and ascent (height
|
|
|
|
* of the glyphs above the baseline)
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x anchor point x coordinate
|
|
|
|
* @param y anchor point y coordinate
|
|
|
|
* @param horizontal horizontal alignment
|
|
|
|
* @param vertical vertical alignment
|
|
|
|
* @param str C-string
|
Implementation of some widgets based on real use cases and designs [FL-392][FL-809] (#315)
* gui test app
* aligned string draw functions
* add canvas_invert_color, canvas_draw_button_left, canvas_draw_button_right
* use new str and button fns in dialog
* real dialog mockup
* add new gui test app recipe
* submenu module init
* delete unused variable
* move buttons to element, add canvas_string_width fn, new center button element
* button icons
* submenu module
* use submenu module, switch views
* keyboard buttons img
* new font for keyboard
* text input (keyboard) module
* add text input to gui test app
* add gui tesst app to release build, fix flags
* handle transition from start and end position, fix input switch
* add long text support to text input
* canvas_string_width and the underlying u8g2_GetStrWidth now return uint16_t
* remove deprecated libs and apps
* canvas_font_max_height fn
* new element, aligned multiline text
* use multiline text instead of plain string
* fix second keyboard row, rename uppercase fn
* qwerty-like keyboard layout
* new icons for iButton app
* better dialog text position and events handling
* remove confusing comment
* new extended dialog module
* extended dialog module usage
* update docs
* new gui module, popup with timeout
* popup usage
* canvas, remove outdated canvas_font_max_height, use canvas_current_font_height
* use furi check
* use new view_enter and view_exit callback for timers
* add DrZlo to gui tester codeowner
Co-authored-by: aanper <mail@s3f.ru>
2021-02-05 02:35:06 +03:00
|
|
|
*/
|
|
|
|
void canvas_draw_str_aligned(
|
|
|
|
Canvas* canvas,
|
2024-03-25 14:04:07 +03:00
|
|
|
int32_t x,
|
|
|
|
int32_t y,
|
Implementation of some widgets based on real use cases and designs [FL-392][FL-809] (#315)
* gui test app
* aligned string draw functions
* add canvas_invert_color, canvas_draw_button_left, canvas_draw_button_right
* use new str and button fns in dialog
* real dialog mockup
* add new gui test app recipe
* submenu module init
* delete unused variable
* move buttons to element, add canvas_string_width fn, new center button element
* button icons
* submenu module
* use submenu module, switch views
* keyboard buttons img
* new font for keyboard
* text input (keyboard) module
* add text input to gui test app
* add gui tesst app to release build, fix flags
* handle transition from start and end position, fix input switch
* add long text support to text input
* canvas_string_width and the underlying u8g2_GetStrWidth now return uint16_t
* remove deprecated libs and apps
* canvas_font_max_height fn
* new element, aligned multiline text
* use multiline text instead of plain string
* fix second keyboard row, rename uppercase fn
* qwerty-like keyboard layout
* new icons for iButton app
* better dialog text position and events handling
* remove confusing comment
* new extended dialog module
* extended dialog module usage
* update docs
* new gui module, popup with timeout
* popup usage
* canvas, remove outdated canvas_font_max_height, use canvas_current_font_height
* use furi check
* use new view_enter and view_exit callback for timers
* add DrZlo to gui tester codeowner
Co-authored-by: aanper <mail@s3f.ru>
2021-02-05 02:35:06 +03:00
|
|
|
Align horizontal,
|
|
|
|
Align vertical,
|
|
|
|
const char* str);
|
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Get string width
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param str C-string
|
|
|
|
*
|
|
|
|
* @return width in pixels.
|
Implementation of some widgets based on real use cases and designs [FL-392][FL-809] (#315)
* gui test app
* aligned string draw functions
* add canvas_invert_color, canvas_draw_button_left, canvas_draw_button_right
* use new str and button fns in dialog
* real dialog mockup
* add new gui test app recipe
* submenu module init
* delete unused variable
* move buttons to element, add canvas_string_width fn, new center button element
* button icons
* submenu module
* use submenu module, switch views
* keyboard buttons img
* new font for keyboard
* text input (keyboard) module
* add text input to gui test app
* add gui tesst app to release build, fix flags
* handle transition from start and end position, fix input switch
* add long text support to text input
* canvas_string_width and the underlying u8g2_GetStrWidth now return uint16_t
* remove deprecated libs and apps
* canvas_font_max_height fn
* new element, aligned multiline text
* use multiline text instead of plain string
* fix second keyboard row, rename uppercase fn
* qwerty-like keyboard layout
* new icons for iButton app
* better dialog text position and events handling
* remove confusing comment
* new extended dialog module
* extended dialog module usage
* update docs
* new gui module, popup with timeout
* popup usage
* canvas, remove outdated canvas_font_max_height, use canvas_current_font_height
* use furi check
* use new view_enter and view_exit callback for timers
* add DrZlo to gui tester codeowner
Co-authored-by: aanper <mail@s3f.ru>
2021-02-05 02:35:06 +03:00
|
|
|
*/
|
|
|
|
uint16_t canvas_string_width(Canvas* canvas, const char* str);
|
|
|
|
|
2021-07-08 23:41:34 +03:00
|
|
|
/** Get glyph width
|
2021-10-03 13:36:05 +03:00
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param[in] symbol character
|
|
|
|
*
|
|
|
|
* @return width in pixels
|
2021-07-08 23:41:34 +03:00
|
|
|
*/
|
2024-03-25 14:04:07 +03:00
|
|
|
size_t canvas_glyph_width(Canvas* canvas, uint16_t symbol);
|
2021-07-08 23:41:34 +03:00
|
|
|
|
[FL-2183] [FL-2209] Dolphin Deeds, Level up, assets generation, refactoring (#965)
* Desktop: cleanup headers
* Get loader pubsub via record
* [FL-2183] Dolphin refactoring 2022.01
* Restruct animations assets structure
* Rename assets
* Cleanup headers
* Update Recording animation
* Add BadBattery animation
* Provide loader's pubsub via record
* Fix load/unload animations
* Scripts: add flipper format support, initial dolphin packager rework. Assets: internal and external dolphin.
* Sync internal meta.txt and manifest.txt
* Reorder, rename dolphin assets
* Split essential generated assets
* Add ReadMe for dolphin assets
* Separate essential blocking animations
* Scripts: full dolphin validation before packaging
* Assets, Scripts: dolphin external resources packer
* Github: update codeowners
* Scripts: proper slots handling in dolphin animation meta
* Scripts: correct frames enumeration and fix compiled assets.
* [FL-2209] Add Dolphin Deeds points and many more
* Remove excess frame_rate
* Change dolphin assets directory
* Scripts: add internal resource support to dolphin compiler
* Scripts: add internal assets generation, renaming
* Scripts: correct assert, renaming
* Code cleanup, documentation, fixes
* Update Levelup animations
* Rename essential -> blocking
* Fix Unlocked hint
* Scripts: rewrite Templite compiller, replace regexps with token parser, split block types into code and variable blocks. Update dolphin templates.
* Documentation: add key combos description and use information
* Scripts: cleanup templit, more debug info and add dev comment
Co-authored-by: あく <alleteam@gmail.com>
2022-01-29 12:20:41 +03:00
|
|
|
/** Draw bitmap picture at position defined by x,y.
|
|
|
|
*
|
2024-03-25 14:04:07 +03:00
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate
|
|
|
|
* @param y y coordinate
|
|
|
|
* @param width width of bitmap
|
|
|
|
* @param height height of bitmap
|
|
|
|
* @param compressed_bitmap_data compressed bitmap data
|
[FL-2183] [FL-2209] Dolphin Deeds, Level up, assets generation, refactoring (#965)
* Desktop: cleanup headers
* Get loader pubsub via record
* [FL-2183] Dolphin refactoring 2022.01
* Restruct animations assets structure
* Rename assets
* Cleanup headers
* Update Recording animation
* Add BadBattery animation
* Provide loader's pubsub via record
* Fix load/unload animations
* Scripts: add flipper format support, initial dolphin packager rework. Assets: internal and external dolphin.
* Sync internal meta.txt and manifest.txt
* Reorder, rename dolphin assets
* Split essential generated assets
* Add ReadMe for dolphin assets
* Separate essential blocking animations
* Scripts: full dolphin validation before packaging
* Assets, Scripts: dolphin external resources packer
* Github: update codeowners
* Scripts: proper slots handling in dolphin animation meta
* Scripts: correct frames enumeration and fix compiled assets.
* [FL-2209] Add Dolphin Deeds points and many more
* Remove excess frame_rate
* Change dolphin assets directory
* Scripts: add internal resource support to dolphin compiler
* Scripts: add internal assets generation, renaming
* Scripts: correct assert, renaming
* Code cleanup, documentation, fixes
* Update Levelup animations
* Rename essential -> blocking
* Fix Unlocked hint
* Scripts: rewrite Templite compiller, replace regexps with token parser, split block types into code and variable blocks. Update dolphin templates.
* Documentation: add key combos description and use information
* Scripts: cleanup templit, more debug info and add dev comment
Co-authored-by: あく <alleteam@gmail.com>
2022-01-29 12:20:41 +03:00
|
|
|
*/
|
|
|
|
void canvas_draw_bitmap(
|
|
|
|
Canvas* canvas,
|
2024-03-25 14:04:07 +03:00
|
|
|
int32_t x,
|
|
|
|
int32_t y,
|
|
|
|
size_t width,
|
|
|
|
size_t height,
|
[FL-2183] [FL-2209] Dolphin Deeds, Level up, assets generation, refactoring (#965)
* Desktop: cleanup headers
* Get loader pubsub via record
* [FL-2183] Dolphin refactoring 2022.01
* Restruct animations assets structure
* Rename assets
* Cleanup headers
* Update Recording animation
* Add BadBattery animation
* Provide loader's pubsub via record
* Fix load/unload animations
* Scripts: add flipper format support, initial dolphin packager rework. Assets: internal and external dolphin.
* Sync internal meta.txt and manifest.txt
* Reorder, rename dolphin assets
* Split essential generated assets
* Add ReadMe for dolphin assets
* Separate essential blocking animations
* Scripts: full dolphin validation before packaging
* Assets, Scripts: dolphin external resources packer
* Github: update codeowners
* Scripts: proper slots handling in dolphin animation meta
* Scripts: correct frames enumeration and fix compiled assets.
* [FL-2209] Add Dolphin Deeds points and many more
* Remove excess frame_rate
* Change dolphin assets directory
* Scripts: add internal resource support to dolphin compiler
* Scripts: add internal assets generation, renaming
* Scripts: correct assert, renaming
* Code cleanup, documentation, fixes
* Update Levelup animations
* Rename essential -> blocking
* Fix Unlocked hint
* Scripts: rewrite Templite compiller, replace regexps with token parser, split block types into code and variable blocks. Update dolphin templates.
* Documentation: add key combos description and use information
* Scripts: cleanup templit, more debug info and add dev comment
Co-authored-by: あく <alleteam@gmail.com>
2022-01-29 12:20:41 +03:00
|
|
|
const uint8_t* compressed_bitmap_data);
|
|
|
|
|
2023-04-06 06:36:12 +03:00
|
|
|
/** Draw icon at position defined by x,y with rotation and flip.
|
|
|
|
*
|
2024-03-25 14:04:07 +03:00
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate
|
|
|
|
* @param y y coordinate
|
|
|
|
* @param icon Icon instance
|
|
|
|
* @param rotation IconRotation
|
2023-04-06 06:36:12 +03:00
|
|
|
*/
|
|
|
|
void canvas_draw_icon_ex(
|
|
|
|
Canvas* canvas,
|
2024-03-25 14:04:07 +03:00
|
|
|
int32_t x,
|
|
|
|
int32_t y,
|
2023-04-06 06:36:12 +03:00
|
|
|
const Icon* icon,
|
|
|
|
IconRotation rotation);
|
|
|
|
|
2021-07-07 11:57:49 +03:00
|
|
|
/** Draw animation at position defined by x,y.
|
2021-10-03 13:36:05 +03:00
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate
|
|
|
|
* @param y y coordinate
|
|
|
|
* @param icon_animation IconAnimation instance
|
2020-12-14 13:50:32 +03:00
|
|
|
*/
|
2021-07-07 11:57:49 +03:00
|
|
|
void canvas_draw_icon_animation(
|
|
|
|
Canvas* canvas,
|
2024-03-25 14:04:07 +03:00
|
|
|
int32_t x,
|
|
|
|
int32_t y,
|
2021-07-07 11:57:49 +03:00
|
|
|
IconAnimation* icon_animation);
|
2020-12-14 13:50:32 +03:00
|
|
|
|
2021-07-07 11:57:49 +03:00
|
|
|
/** Draw icon at position defined by x,y.
|
2021-10-03 13:36:05 +03:00
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate
|
|
|
|
* @param y y coordinate
|
|
|
|
* @param icon Icon instance
|
2021-01-08 07:42:48 +03:00
|
|
|
*/
|
2024-03-25 14:04:07 +03:00
|
|
|
void canvas_draw_icon(Canvas* canvas, int32_t x, int32_t y, const Icon* icon);
|
2021-01-08 07:42:48 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Draw XBM bitmap
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate
|
|
|
|
* @param y y coordinate
|
2024-03-25 14:04:07 +03:00
|
|
|
* @param[in] width bitmap width
|
|
|
|
* @param[in] height bitmap height
|
2021-10-03 13:36:05 +03:00
|
|
|
* @param bitmap pointer to XBM bitmap data
|
2020-12-14 13:50:32 +03:00
|
|
|
*/
|
|
|
|
void canvas_draw_xbm(
|
|
|
|
Canvas* canvas,
|
2024-03-25 14:04:07 +03:00
|
|
|
int32_t x,
|
|
|
|
int32_t y,
|
|
|
|
size_t width,
|
|
|
|
size_t height,
|
2020-12-14 13:50:32 +03:00
|
|
|
const uint8_t* bitmap);
|
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Draw dot at x,y
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate
|
|
|
|
* @param y y coordinate
|
2020-12-14 13:50:32 +03:00
|
|
|
*/
|
2024-03-25 14:04:07 +03:00
|
|
|
void canvas_draw_dot(Canvas* canvas, int32_t x, int32_t y);
|
2020-12-14 13:50:32 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Draw box of width, height at x,y
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate
|
|
|
|
* @param y y coordinate
|
|
|
|
* @param width box width
|
|
|
|
* @param height box height
|
2020-12-14 13:50:32 +03:00
|
|
|
*/
|
2024-03-25 14:04:07 +03:00
|
|
|
void canvas_draw_box(Canvas* canvas, int32_t x, int32_t y, size_t width, size_t height);
|
2020-12-14 13:50:32 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Draw frame of width, height at x,y
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate
|
|
|
|
* @param y y coordinate
|
|
|
|
* @param width frame width
|
|
|
|
* @param height frame height
|
2020-12-14 13:50:32 +03:00
|
|
|
*/
|
2024-03-25 14:04:07 +03:00
|
|
|
void canvas_draw_frame(Canvas* canvas, int32_t x, int32_t y, size_t width, size_t height);
|
2020-12-14 13:50:32 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Draw line from x1,y1 to x2,y2
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x1 x1 coordinate
|
|
|
|
* @param y1 y1 coordinate
|
|
|
|
* @param x2 x2 coordinate
|
|
|
|
* @param y2 y2 coordinate
|
2020-12-14 13:50:32 +03:00
|
|
|
*/
|
2024-03-25 14:04:07 +03:00
|
|
|
void canvas_draw_line(Canvas* canvas, int32_t x1, int32_t y1, int32_t x2, int32_t y2);
|
2020-12-14 13:50:32 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Draw circle at x,y with radius r
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate
|
|
|
|
* @param y y coordinate
|
2024-03-25 14:04:07 +03:00
|
|
|
* @param radius radius
|
2021-03-10 15:38:01 +03:00
|
|
|
*/
|
2024-03-25 14:04:07 +03:00
|
|
|
void canvas_draw_circle(Canvas* canvas, int32_t x, int32_t y, size_t radius);
|
2021-03-10 15:38:01 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Draw disc at x,y with radius r
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate
|
|
|
|
* @param y y coordinate
|
2024-03-25 14:04:07 +03:00
|
|
|
* @param radius radius
|
2021-03-10 15:38:01 +03:00
|
|
|
*/
|
2024-03-25 14:04:07 +03:00
|
|
|
void canvas_draw_disc(Canvas* canvas, int32_t x, int32_t y, size_t radius);
|
2021-03-10 15:38:01 +03:00
|
|
|
|
2024-03-25 14:04:07 +03:00
|
|
|
/** Draw triangle with given base and height lengths and their intersection
|
|
|
|
* coordinate
|
2021-12-15 20:39:06 +03:00
|
|
|
*
|
2024-03-25 14:04:07 +03:00
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate of base and height intersection
|
|
|
|
* @param y y coordinate of base and height intersection
|
|
|
|
* @param base length of triangle side
|
|
|
|
* @param height length of triangle height
|
|
|
|
* @param dir CanvasDirection triangle orientation
|
2021-12-15 20:39:06 +03:00
|
|
|
*/
|
|
|
|
void canvas_draw_triangle(
|
|
|
|
Canvas* canvas,
|
2024-03-25 14:04:07 +03:00
|
|
|
int32_t x,
|
|
|
|
int32_t y,
|
|
|
|
size_t base,
|
|
|
|
size_t height,
|
2021-12-15 20:39:06 +03:00
|
|
|
CanvasDirection dir);
|
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Draw glyph
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate
|
|
|
|
* @param y y coordinate
|
|
|
|
* @param ch character
|
2020-12-14 13:50:32 +03:00
|
|
|
*/
|
2024-03-25 14:04:07 +03:00
|
|
|
void canvas_draw_glyph(Canvas* canvas, int32_t x, int32_t y, uint16_t ch);
|
[FL-140] Core api dynamic records (#296)
* SYSTEM: tickless mode with deep sleep.
* Move FreeRTOS ticks to lptim2
* API: move all sumbodules init routines to one place. Timebase: working lptim2 at tick source.
* API Timebase: lp-timer routines, timer access safe zones prediction and synchronization. FreeRTOS: adjust configuration for tickless mode.
* NFC: support for tickless mode.
* API Timebase: improve tick error handling in IRQ. Apploader: use insomnia mode to run applications.
* BLE: prevent sleep while core2 starting
* HAL: nap while in insomnia mode
* init records work
* try to implement record delete
* tests and flapp
* flapp subsystem
* new core functions to get app stat, simplify core code
* fix thread termination
* add strdup to core
* fix tests
* Refactoring: remove all unusued parts, update API usage, aggreagate API sources and headers, new record storage
* Refactoring: update furi record api usage, cleanup code
* Fix broken merge for freertos apps
* Core, Target: fix compilation warnings
* Drop firmware target local
* HAL Timebase, Power, Clock: semaphore guarded access to clock and power modes, better sleep mode.
* SD-Filesystem: wait for all deps to arrive before adding widget. Core, BLE: disable debug dump to serial.
* delete old app example-ipc
* delete old app fatfs list
* fix strobe app, add input header
* delete old display driver
* comment old app qr-code
* fix sd-card test, add forced widget update
* remove unused new core test
* increase heap to 128k
* comment and assert old core tests
* fix syntax
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2021-01-20 19:09:26 +03:00
|
|
|
|
2021-10-03 13:36:05 +03:00
|
|
|
/** Set transparency mode
|
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param alpha transparency mode
|
2021-04-13 21:06:25 +03:00
|
|
|
*/
|
|
|
|
void canvas_set_bitmap_mode(Canvas* canvas, bool alpha);
|
|
|
|
|
2022-09-28 19:52:46 +03:00
|
|
|
/** Draw rounded-corner frame of width, height at x,y, with round value radius
|
2021-10-03 13:36:05 +03:00
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate
|
|
|
|
* @param y y coordinate
|
|
|
|
* @param width frame width
|
|
|
|
* @param height frame height
|
|
|
|
* @param radius frame corner radius
|
2021-06-02 18:16:05 +03:00
|
|
|
*/
|
|
|
|
void canvas_draw_rframe(
|
|
|
|
Canvas* canvas,
|
2024-03-25 14:04:07 +03:00
|
|
|
int32_t x,
|
|
|
|
int32_t y,
|
|
|
|
size_t width,
|
|
|
|
size_t height,
|
|
|
|
size_t radius);
|
2021-06-02 18:16:05 +03:00
|
|
|
|
2023-02-20 18:55:53 +03:00
|
|
|
/** Draw rounded-corner box of width, height at x,y, with round value radius
|
2021-10-03 13:36:05 +03:00
|
|
|
*
|
|
|
|
* @param canvas Canvas instance
|
|
|
|
* @param x x coordinate
|
|
|
|
* @param y y coordinate
|
|
|
|
* @param width box width
|
|
|
|
* @param height box height
|
|
|
|
* @param radius box corner radius
|
2021-06-02 18:16:05 +03:00
|
|
|
*/
|
|
|
|
void canvas_draw_rbox(
|
|
|
|
Canvas* canvas,
|
2024-03-25 14:04:07 +03:00
|
|
|
int32_t x,
|
|
|
|
int32_t y,
|
|
|
|
size_t width,
|
|
|
|
size_t height,
|
|
|
|
size_t radius);
|
2021-06-02 18:16:05 +03:00
|
|
|
|
2022-09-15 04:42:17 +03:00
|
|
|
void canvas_draw_icon_bitmap(
|
|
|
|
Canvas* canvas,
|
|
|
|
uint8_t x,
|
|
|
|
uint8_t y,
|
|
|
|
int16_t w,
|
|
|
|
int16_t h,
|
|
|
|
const Icon* icon);
|
|
|
|
|
[FL-140] Core api dynamic records (#296)
* SYSTEM: tickless mode with deep sleep.
* Move FreeRTOS ticks to lptim2
* API: move all sumbodules init routines to one place. Timebase: working lptim2 at tick source.
* API Timebase: lp-timer routines, timer access safe zones prediction and synchronization. FreeRTOS: adjust configuration for tickless mode.
* NFC: support for tickless mode.
* API Timebase: improve tick error handling in IRQ. Apploader: use insomnia mode to run applications.
* BLE: prevent sleep while core2 starting
* HAL: nap while in insomnia mode
* init records work
* try to implement record delete
* tests and flapp
* flapp subsystem
* new core functions to get app stat, simplify core code
* fix thread termination
* add strdup to core
* fix tests
* Refactoring: remove all unusued parts, update API usage, aggreagate API sources and headers, new record storage
* Refactoring: update furi record api usage, cleanup code
* Fix broken merge for freertos apps
* Core, Target: fix compilation warnings
* Drop firmware target local
* HAL Timebase, Power, Clock: semaphore guarded access to clock and power modes, better sleep mode.
* SD-Filesystem: wait for all deps to arrive before adding widget. Core, BLE: disable debug dump to serial.
* delete old app example-ipc
* delete old app fatfs list
* fix strobe app, add input header
* delete old display driver
* comment old app qr-code
* fix sd-card test, add forced widget update
* remove unused new core test
* increase heap to 128k
* comment and assert old core tests
* fix syntax
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2021-01-20 19:09:26 +03:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|