diff --git a/applications/services/gui/canvas.c b/applications/services/gui/canvas.c index 33402ab3c..9c19853d3 100644 --- a/applications/services/gui/canvas.c +++ b/applications/services/gui/canvas.c @@ -6,8 +6,6 @@ #include #include -#include - const CanvasFontParameters canvas_font_params[FontTotalNumber] = { [FontPrimary] = {.leading_default = 12, .leading_min = 11, .height = 8, .descender = 2}, [FontSecondary] = {.leading_default = 11, .leading_min = 9, .height = 7, .descender = 2}, @@ -96,6 +94,16 @@ size_t canvas_get_buffer_size(const Canvas* canvas) { return u8g2_GetBufferTileWidth(&canvas->fb) * u8g2_GetBufferTileHeight(&canvas->fb) * 8; } +bool canvas_is_inverted_lcd(Canvas* canvas) { + furi_assert(canvas); + return canvas->lcd_inverse; +} + +void canvas_set_inverted_lcd(Canvas* canvas, bool inverted) { + furi_assert(canvas); + canvas->lcd_inverse = inverted; +} + void canvas_frame_set( Canvas* canvas, int32_t offset_x, @@ -143,8 +151,8 @@ const CanvasFontParameters* canvas_get_font_params(const Canvas* canvas, Font fo void canvas_clear(Canvas* canvas) { furi_check(canvas); - - if(lcd_inverted) { + + if(canvas->lcd_inverse) { u8g2_FillBuffer(&canvas->fb); } else { u8g2_ClearBuffer(&canvas->fb); @@ -154,7 +162,7 @@ void canvas_clear(Canvas* canvas) { void canvas_set_color(Canvas* canvas, Color color) { furi_check(canvas); - if(lcd_inverted) { + if(canvas->lcd_inverse) { if(color == ColorBlack) { color = ColorWhite; } else if(color == ColorWhite) { @@ -170,10 +178,10 @@ void canvas_set_font_direction(Canvas* canvas, CanvasDirection dir) { } void canvas_invert_color(Canvas* canvas) { - if((canvas->fb.draw_color == ColorXOR) && lcd_inverted) { + if((canvas->fb.draw_color == ColorXOR) && canvas->lcd_inverse) { // ColorXOR = 0x02, inversion change it to White = 0x00 // but if we have lcd_inverse ON then we need Black =0x01 instead White 0x00 - // so we force changing color to black + // so we force changing color to black canvas->fb.draw_color = ColorBlack; } else { canvas->fb.draw_color = !canvas->fb.draw_color; diff --git a/applications/services/gui/canvas.h b/applications/services/gui/canvas.h index efd314687..8257c481d 100644 --- a/applications/services/gui/canvas.h +++ b/applications/services/gui/canvas.h @@ -447,6 +447,10 @@ void canvas_draw_icon_bitmap( int16_t h, const Icon* icon); +bool canvas_is_inverted_lcd(Canvas* canvas); + +void canvas_set_inverted_lcd(Canvas* canvas, bool inverted); + #ifdef __cplusplus } #endif diff --git a/applications/services/gui/canvas_i.h b/applications/services/gui/canvas_i.h index 449db71db..d342c07f5 100644 --- a/applications/services/gui/canvas_i.h +++ b/applications/services/gui/canvas_i.h @@ -47,6 +47,7 @@ struct Canvas { CompressIcon* compress_icon; CanvasCallbackPairArray_t canvas_callback_pair; FuriMutex* mutex; + bool lcd_inverse; }; /** Allocate memory and initialize canvas diff --git a/applications/services/notification/notification_app.c b/applications/services/notification/notification_app.c index 8a059586d..f57900fc5 100644 --- a/applications/services/notification/notification_app.c +++ b/applications/services/notification/notification_app.c @@ -620,7 +620,11 @@ static NotificationApp* notification_app_alloc(void) { furi_timer_alloc(night_shift_timer_callback, FuriTimerTypePeriodic, app); // --- NIGHT SHIFT END --- - lcd_inverted = false; + Gui* tmp_gui = furi_record_open(RECORD_GUI); + Canvas* tmp_canvas = gui_direct_draw_acquire(tmp_gui); + canvas_set_inverted_lcd(tmp_canvas, false); + gui_direct_draw_release(tmp_gui); + furi_record_close(RECORD_GUI); return app; } @@ -653,8 +657,12 @@ static void notification_apply_settings(NotificationApp* app) { } // --- NIGHT SHIFT END --- - //setup global variable "inverted" by settings value; - lcd_inverted = app->settings.lcd_inverse; + //setup canvas variable "inverse" by settings value; + Gui* tmp_gui = furi_record_open(RECORD_GUI); + Canvas* tmp_canvas = gui_direct_draw_acquire(tmp_gui); + canvas_set_inverted_lcd(tmp_canvas, app->settings.lcd_inverse); + gui_direct_draw_release(tmp_gui); + furi_record_close(RECORD_GUI); } static void notification_init_settings(NotificationApp* app) { diff --git a/applications/services/notification/notification_app.h b/applications/services/notification/notification_app.h index 30673f470..c0b64b807 100644 --- a/applications/services/notification/notification_app.h +++ b/applications/services/notification/notification_app.h @@ -70,6 +70,3 @@ struct NotificationApp { void notification_message_save_settings(NotificationApp* app); void night_shift_timer_start(NotificationApp* app); void night_shift_timer_stop(NotificationApp* app); - -//global variable for using in canvac.c -extern bool lcd_inverted; diff --git a/applications/settings/notification_settings/notification_settings_app.c b/applications/settings/notification_settings/notification_settings_app.c index 25fc264f8..d313714fc 100644 --- a/applications/settings/notification_settings/notification_settings_app.c +++ b/applications/settings/notification_settings/notification_settings_app.c @@ -355,11 +355,11 @@ static void lcd_inverse_changed(VariableItem* item) { variable_item_set_current_value_text(item, lcd_inverse_text[index]); app->notification->settings.lcd_inverse = lcd_inverse_value[index]; - //setup global variable for using in canvas.c - lcd_inverted = lcd_inverse_value[index]; + Canvas* tmp_canvas = gui_direct_draw_acquire(app->gui); + canvas_set_inverted_lcd(tmp_canvas, lcd_inverse_value[index]); + gui_direct_draw_release(app->gui); notification_message(app->notification, &sequence_display_backlight_on); - } //--- RGB BACKLIGHT --- diff --git a/targets/f7/api_symbols.csv b/targets/f7/api_symbols.csv index 384ae1ea4..db6a1c242 100755 --- a/targets/f7/api_symbols.csv +++ b/targets/f7/api_symbols.csv @@ -852,12 +852,14 @@ Function,+,canvas_get_font_params,const CanvasFontParameters*,"const Canvas*, Fo Function,+,canvas_glyph_width,size_t,"Canvas*, uint16_t" Function,+,canvas_height,size_t,const Canvas* Function,+,canvas_invert_color,void,Canvas* +Function,+,canvas_is_inverted_lcd,_Bool,Canvas* Function,+,canvas_reset,void,Canvas* Function,+,canvas_set_bitmap_mode,void,"Canvas*, _Bool" Function,+,canvas_set_color,void,"Canvas*, Color" Function,+,canvas_set_custom_u8g2_font,void,"Canvas*, const uint8_t*" Function,+,canvas_set_font,void,"Canvas*, Font" Function,+,canvas_set_font_direction,void,"Canvas*, CanvasDirection" +Function,+,canvas_set_inverted_lcd,void,"Canvas*, _Bool" Function,+,canvas_string_width,uint16_t,"Canvas*, const char*" Function,+,canvas_width,size_t,const Canvas* Function,-,cbrt,double,double @@ -3663,8 +3665,8 @@ Function,+,subghz_worker_set_pair_callback,void,"SubGhzWorker*, SubGhzWorkerPair Function,+,subghz_worker_start,void,SubGhzWorker* Function,+,subghz_worker_stop,void,SubGhzWorker* Function,+,submenu_add_item,void,"Submenu*, const char*, uint32_t, SubmenuItemCallback, void*" -Function,+,submenu_add_lockable_item,void,"Submenu*, const char*, uint32_t, SubmenuItemCallback, void*, _Bool, const char*" Function,+,submenu_add_item_ex,void,"Submenu*, const char*, uint32_t, SubmenuItemCallbackEx, void*" +Function,+,submenu_add_lockable_item,void,"Submenu*, const char*, uint32_t, SubmenuItemCallback, void*, _Bool, const char*" Function,+,submenu_alloc,Submenu*, Function,+,submenu_change_item_label,void,"Submenu*, uint32_t, const char*" Function,+,submenu_free,void,Submenu*