mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2025-10-10 08:42:32 +02:00
LCD Inversion finished by MMX
This commit is contained in:
@@ -6,8 +6,6 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <u8g2_glue.h>
|
#include <u8g2_glue.h>
|
||||||
|
|
||||||
#include <notification/notification_app.h>
|
|
||||||
|
|
||||||
const CanvasFontParameters canvas_font_params[FontTotalNumber] = {
|
const CanvasFontParameters canvas_font_params[FontTotalNumber] = {
|
||||||
[FontPrimary] = {.leading_default = 12, .leading_min = 11, .height = 8, .descender = 2},
|
[FontPrimary] = {.leading_default = 12, .leading_min = 11, .height = 8, .descender = 2},
|
||||||
[FontSecondary] = {.leading_default = 11, .leading_min = 9, .height = 7, .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;
|
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(
|
void canvas_frame_set(
|
||||||
Canvas* canvas,
|
Canvas* canvas,
|
||||||
int32_t offset_x,
|
int32_t offset_x,
|
||||||
@@ -143,8 +151,8 @@ const CanvasFontParameters* canvas_get_font_params(const Canvas* canvas, Font fo
|
|||||||
|
|
||||||
void canvas_clear(Canvas* canvas) {
|
void canvas_clear(Canvas* canvas) {
|
||||||
furi_check(canvas);
|
furi_check(canvas);
|
||||||
|
|
||||||
if(lcd_inverted) {
|
if(canvas->lcd_inverse) {
|
||||||
u8g2_FillBuffer(&canvas->fb);
|
u8g2_FillBuffer(&canvas->fb);
|
||||||
} else {
|
} else {
|
||||||
u8g2_ClearBuffer(&canvas->fb);
|
u8g2_ClearBuffer(&canvas->fb);
|
||||||
@@ -154,7 +162,7 @@ void canvas_clear(Canvas* canvas) {
|
|||||||
void canvas_set_color(Canvas* canvas, Color color) {
|
void canvas_set_color(Canvas* canvas, Color color) {
|
||||||
furi_check(canvas);
|
furi_check(canvas);
|
||||||
|
|
||||||
if(lcd_inverted) {
|
if(canvas->lcd_inverse) {
|
||||||
if(color == ColorBlack) {
|
if(color == ColorBlack) {
|
||||||
color = ColorWhite;
|
color = ColorWhite;
|
||||||
} else if(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) {
|
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
|
// ColorXOR = 0x02, inversion change it to White = 0x00
|
||||||
// but if we have lcd_inverse ON then we need Black =0x01 instead 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;
|
canvas->fb.draw_color = ColorBlack;
|
||||||
} else {
|
} else {
|
||||||
canvas->fb.draw_color = !canvas->fb.draw_color;
|
canvas->fb.draw_color = !canvas->fb.draw_color;
|
||||||
|
@@ -447,6 +447,10 @@ void canvas_draw_icon_bitmap(
|
|||||||
int16_t h,
|
int16_t h,
|
||||||
const Icon* icon);
|
const Icon* icon);
|
||||||
|
|
||||||
|
bool canvas_is_inverted_lcd(Canvas* canvas);
|
||||||
|
|
||||||
|
void canvas_set_inverted_lcd(Canvas* canvas, bool inverted);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -47,6 +47,7 @@ struct Canvas {
|
|||||||
CompressIcon* compress_icon;
|
CompressIcon* compress_icon;
|
||||||
CanvasCallbackPairArray_t canvas_callback_pair;
|
CanvasCallbackPairArray_t canvas_callback_pair;
|
||||||
FuriMutex* mutex;
|
FuriMutex* mutex;
|
||||||
|
bool lcd_inverse;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Allocate memory and initialize canvas
|
/** Allocate memory and initialize canvas
|
||||||
|
@@ -620,7 +620,11 @@ static NotificationApp* notification_app_alloc(void) {
|
|||||||
furi_timer_alloc(night_shift_timer_callback, FuriTimerTypePeriodic, app);
|
furi_timer_alloc(night_shift_timer_callback, FuriTimerTypePeriodic, app);
|
||||||
// --- NIGHT SHIFT END ---
|
// --- 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;
|
return app;
|
||||||
}
|
}
|
||||||
@@ -653,8 +657,12 @@ static void notification_apply_settings(NotificationApp* app) {
|
|||||||
}
|
}
|
||||||
// --- NIGHT SHIFT END ---
|
// --- NIGHT SHIFT END ---
|
||||||
|
|
||||||
//setup global variable "inverted" by settings value;
|
//setup canvas variable "inverse" by settings value;
|
||||||
lcd_inverted = app->settings.lcd_inverse;
|
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) {
|
static void notification_init_settings(NotificationApp* app) {
|
||||||
|
@@ -70,6 +70,3 @@ struct NotificationApp {
|
|||||||
void notification_message_save_settings(NotificationApp* app);
|
void notification_message_save_settings(NotificationApp* app);
|
||||||
void night_shift_timer_start(NotificationApp* app);
|
void night_shift_timer_start(NotificationApp* app);
|
||||||
void night_shift_timer_stop(NotificationApp* app);
|
void night_shift_timer_stop(NotificationApp* app);
|
||||||
|
|
||||||
//global variable for using in canvac.c
|
|
||||||
extern bool lcd_inverted;
|
|
||||||
|
@@ -355,11 +355,11 @@ static void lcd_inverse_changed(VariableItem* item) {
|
|||||||
variable_item_set_current_value_text(item, lcd_inverse_text[index]);
|
variable_item_set_current_value_text(item, lcd_inverse_text[index]);
|
||||||
app->notification->settings.lcd_inverse = lcd_inverse_value[index];
|
app->notification->settings.lcd_inverse = lcd_inverse_value[index];
|
||||||
|
|
||||||
//setup global variable for using in canvas.c
|
Canvas* tmp_canvas = gui_direct_draw_acquire(app->gui);
|
||||||
lcd_inverted = lcd_inverse_value[index];
|
canvas_set_inverted_lcd(tmp_canvas, lcd_inverse_value[index]);
|
||||||
|
gui_direct_draw_release(app->gui);
|
||||||
|
|
||||||
notification_message(app->notification, &sequence_display_backlight_on);
|
notification_message(app->notification, &sequence_display_backlight_on);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--- RGB BACKLIGHT ---
|
//--- RGB BACKLIGHT ---
|
||||||
|
@@ -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_glyph_width,size_t,"Canvas*, uint16_t"
|
||||||
Function,+,canvas_height,size_t,const Canvas*
|
Function,+,canvas_height,size_t,const Canvas*
|
||||||
Function,+,canvas_invert_color,void,Canvas*
|
Function,+,canvas_invert_color,void,Canvas*
|
||||||
|
Function,+,canvas_is_inverted_lcd,_Bool,Canvas*
|
||||||
Function,+,canvas_reset,void,Canvas*
|
Function,+,canvas_reset,void,Canvas*
|
||||||
Function,+,canvas_set_bitmap_mode,void,"Canvas*, _Bool"
|
Function,+,canvas_set_bitmap_mode,void,"Canvas*, _Bool"
|
||||||
Function,+,canvas_set_color,void,"Canvas*, Color"
|
Function,+,canvas_set_color,void,"Canvas*, Color"
|
||||||
Function,+,canvas_set_custom_u8g2_font,void,"Canvas*, const uint8_t*"
|
Function,+,canvas_set_custom_u8g2_font,void,"Canvas*, const uint8_t*"
|
||||||
Function,+,canvas_set_font,void,"Canvas*, Font"
|
Function,+,canvas_set_font,void,"Canvas*, Font"
|
||||||
Function,+,canvas_set_font_direction,void,"Canvas*, CanvasDirection"
|
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_string_width,uint16_t,"Canvas*, const char*"
|
||||||
Function,+,canvas_width,size_t,const Canvas*
|
Function,+,canvas_width,size_t,const Canvas*
|
||||||
Function,-,cbrt,double,double
|
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_start,void,SubGhzWorker*
|
||||||
Function,+,subghz_worker_stop,void,SubGhzWorker*
|
Function,+,subghz_worker_stop,void,SubGhzWorker*
|
||||||
Function,+,submenu_add_item,void,"Submenu*, const char*, uint32_t, SubmenuItemCallback, void*"
|
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_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_alloc,Submenu*,
|
||||||
Function,+,submenu_change_item_label,void,"Submenu*, uint32_t, const char*"
|
Function,+,submenu_change_item_label,void,"Submenu*, uint32_t, const char*"
|
||||||
Function,+,submenu_free,void,Submenu*
|
Function,+,submenu_free,void,Submenu*
|
||||||
|
|
Reference in New Issue
Block a user