@@ -32,21 +32,24 @@ static uint8_t bmp_editor_move(AppBmpEditor* BmpEditor, int8_t x, int8_t y) {
32
32
}
33
33
34
34
static uint8_t bmp_editor_resize (AppBmpEditor * BmpEditor , int8_t w , int8_t h ) {
35
+ // Compute the new dimensions given increments/decrements in size. Usually only height
35
36
int dh = BmpEditor -> model_data -> bmp_h + h ;
36
37
int dw = BmpEditor -> model_data -> bmp_w + w ;
37
- if (dh < PARAM_BMP_EDITOR_MIN_RES_H )
38
+ if (dh < PARAM_BMP_EDITOR_MIN_RES_H ) {
38
39
BmpEditor -> model_data -> bmp_h = PARAM_BMP_EDITOR_MIN_RES_H ;
39
- else if (dh > PARAM_BMP_EDITOR_MAX_RES_H )
40
+ } else if (dh > PARAM_BMP_EDITOR_MAX_RES_H ) {
40
41
BmpEditor -> model_data -> bmp_h = PARAM_BMP_EDITOR_MAX_RES_H ;
41
- else
42
+ } else {
42
43
BmpEditor -> model_data -> bmp_h = dh ;
44
+ }
43
45
44
- if (dw < PARAM_BMP_EDITOR_MIN_RES_W )
46
+ if (dw < PARAM_BMP_EDITOR_MIN_RES_W ) {
45
47
BmpEditor -> model_data -> bmp_w = PARAM_BMP_EDITOR_MIN_RES_W ;
46
- else if (dw > PARAM_BMP_EDITOR_MAX_RES_W )
48
+ } else if (dw > PARAM_BMP_EDITOR_MAX_RES_W ) {
47
49
BmpEditor -> model_data -> bmp_w = PARAM_BMP_EDITOR_MAX_RES_W ;
48
- else
50
+ } else {
49
51
BmpEditor -> model_data -> bmp_w = dw ;
52
+ }
50
53
51
54
BmpEditor -> model_data -> cursor .x = (BmpEditor -> model_data -> bmp_w / 2 );
52
55
BmpEditor -> model_data -> cursor .y = (BmpEditor -> model_data -> bmp_h / 2 );
@@ -84,7 +87,7 @@ static void bmp_editor_text_input_callback(void* ctx) {
84
87
LIGHTMSGCONF_SAVE_FOLDER ,
85
88
BmpEditor -> bitmapName ,
86
89
".bmp" );
87
- view_dispatcher_send_custom_event (app -> view_dispatcher , SetTextInputSaveEvent );
90
+ view_dispatcher_send_custom_event (app -> view_dispatcher , AppBmpEditorEventSaveText );
88
91
}
89
92
90
93
static void bmp_editor_select_name (void * ctx ) {
@@ -114,6 +117,7 @@ static void bmp_editor_select_file(void* ctx) {
114
117
AppContext * app = (AppContext * )ctx ; // Main app struct
115
118
AppData * appData = (AppData * )app -> data ;
116
119
AppBmpEditor * BmpEditor = app -> sceneBmpEditor ;
120
+
117
121
bmpEditorData * BmpEditorData = BmpEditor -> model_data ;
118
122
Configuration * light_msg_data = (Configuration * )appData -> config ;
119
123
DialogsFileBrowserOptions browser_options ;
@@ -129,16 +133,24 @@ static void bmp_editor_select_file(void* ctx) {
129
133
if (dialog_file_browser_show (BmpEditor -> dialogs , bitmapPath , bitmapPath , & browser_options )) {
130
134
if (BmpEditorData -> bitmap ) bitmapMatrix_free (BmpEditorData -> bitmap );
131
135
BmpEditorData -> bitmap = bmp_to_bitmapMatrix (furi_string_get_cstr (bitmapPath ));
132
- BmpEditorData -> bmp_w = BmpEditorData -> bitmap -> width ;
133
- BmpEditorData -> bmp_h = BmpEditorData -> bitmap -> height ;
134
- BmpEditorData -> state = BmpEditorStateDrawing ;
135
-
136
- memcpy (
137
- BmpEditor -> bitmapPath ,
138
- furi_string_get_cstr (bitmapPath ),
139
- strlen (furi_string_get_cstr (bitmapPath )));
140
- bmp_compute_model (BmpEditor , BmpEditor -> model_data );
141
- view_dispatcher_switch_to_view (app -> view_dispatcher , AppViewBmpEditor );
136
+ if (BmpEditorData -> bitmap -> width > PARAM_BMP_EDITOR_MAX_RES_W ) {
137
+ //if(BmpEditorData->bitmap) bitmapMatrix_free(BmpEditorData->bitmap);
138
+ //furi_string_free(bitmapPath);
139
+ BmpEditorData -> state = BmpEditorStateSizeError ;
140
+ BmpEditorData -> error = L401_ERR_WIDTH ;
141
+ view_dispatcher_switch_to_view (app -> view_dispatcher , AppViewBmpEditor );
142
+ return ;
143
+ } else {
144
+ BmpEditorData -> bmp_w = BmpEditorData -> bitmap -> width ;
145
+ BmpEditorData -> bmp_h = BmpEditorData -> bitmap -> height ;
146
+ BmpEditorData -> state = BmpEditorStateDrawing ;
147
+ memcpy (
148
+ BmpEditor -> bitmapPath ,
149
+ furi_string_get_cstr (bitmapPath ),
150
+ strlen (furi_string_get_cstr (bitmapPath )));
151
+ bmp_compute_model (BmpEditor , BmpEditor -> model_data );
152
+ view_dispatcher_switch_to_view (app -> view_dispatcher , AppViewBmpEditor );
153
+ }
142
154
}
143
155
furi_string_free (bitmapPath );
144
156
}
@@ -149,6 +161,17 @@ static bool bmp_editor_mainmenu_input_callback(InputEvent* input_event, void* ct
149
161
return false;
150
162
}
151
163
164
+ static bool bmp_editor_error_input_callback (InputEvent * input_event , void * ctx ) {
165
+ AppContext * app = (AppContext * )ctx ;
166
+ bool consumed = false;
167
+
168
+ if ((input_event -> type == InputTypePress ) || (input_event -> type == InputTypeRepeat )) {
169
+ view_dispatcher_send_custom_event (app -> view_dispatcher , AppBmpEditorEventQuit );
170
+ consumed = true;
171
+ }
172
+ return consumed ;
173
+ }
174
+
152
175
static bool bmp_editor_select_size_input_callback (InputEvent * input_event , void * ctx ) {
153
176
AppContext * app = (AppContext * )ctx ;
154
177
AppBmpEditor * BmpEditor = app -> sceneBmpEditor ;
@@ -214,7 +237,6 @@ static bool bmp_editor_draw_input_callback(InputEvent* input_event, void* ctx) {
214
237
break ;
215
238
case InputKeyOk :
216
239
bmp_editor_toggle (BmpEditor );
217
- view_dispatcher_send_custom_event (app -> view_dispatcher , AppBmpEditorEventToggle );
218
240
consumed = false;
219
241
break ;
220
242
case InputKeyBack :
@@ -261,6 +283,9 @@ static bool app_scene_bmp_editor_input_callback(InputEvent* input_event, void* c
261
283
case BmpEditorStateDrawing :
262
284
consumed = bmp_editor_draw_input_callback (input_event , ctx );
263
285
break ;
286
+ case BmpEditorStateSizeError :
287
+ consumed = bmp_editor_error_input_callback (input_event , ctx );
288
+ break ;
264
289
default :
265
290
break ;
266
291
}
@@ -290,6 +315,27 @@ static void bmp_editor_drawSizePicker(Canvas* canvas, void* ctx) {
290
315
canvas_draw_str (canvas , 25 + 45 , 62 , "OK" );
291
316
}
292
317
318
+ static void bmp_editor_drawError (Canvas * canvas , void * ctx ) {
319
+ // UNUSED(ctx);
320
+ bmpEditorModel * BmpEditorModel = (bmpEditorModel * )ctx ;
321
+ bmpEditorData * BmpEditorData = BmpEditorModel -> data ;
322
+
323
+ switch (BmpEditorData -> error ) {
324
+ case L401_ERR_WIDTH :
325
+ canvas_clear (canvas );
326
+ canvas_set_font (canvas , FontSecondary );
327
+ canvas_draw_str_aligned (canvas , 64 , 20 , AlignCenter , AlignCenter , "BMP File too large to" );
328
+ canvas_draw_str_aligned (canvas , 64 , 30 , AlignCenter , AlignCenter , "be edited on flipper!" );
329
+ break ;
330
+ default :
331
+ canvas_clear (canvas );
332
+ canvas_set_font (canvas , FontPrimary );
333
+ canvas_draw_str_aligned (canvas , 64 , 10 , AlignCenter , AlignCenter , "Unknown error" );
334
+ break ;
335
+ }
336
+ elements_button_center (canvas , "Return" );
337
+ }
338
+
293
339
static void bmp_editor_drawBoard (Canvas * canvas , void * ctx ) {
294
340
bmpEditorModel * BmpEditorModel = (bmpEditorModel * )ctx ;
295
341
bmpEditorData * BmpEditorData = BmpEditorModel -> data ;
@@ -365,6 +411,9 @@ static void app_scene_bmp_editor_render_callback(Canvas* canvas, void* _model) {
365
411
case BmpEditorStateDrawing :
366
412
bmp_editor_drawBoard (canvas , _model );
367
413
break ;
414
+ case BmpEditorStateSizeError :
415
+ bmp_editor_drawError (canvas , _model );
416
+ break ;
368
417
default :
369
418
break ;
370
419
}
@@ -404,6 +453,7 @@ AppBmpEditor* app_bmp_editor_alloc(void* ctx) {
404
453
appBmpEditor -> model_data -> bmp_pixel_spacing = 0 ;
405
454
appBmpEditor -> model_data -> bmp_w = 32 ;
406
455
appBmpEditor -> model_data -> bmp_h = 16 ;
456
+ appBmpEditor -> model_data -> error = L401_OK ;
407
457
appBmpEditor -> mainmenu = submenu_alloc ();
408
458
409
459
submenu_add_item (
@@ -432,11 +482,9 @@ AppBmpEditor* app_bmp_editor_alloc(void* ctx) {
432
482
433
483
appBmpEditor -> view = view_alloc ();
434
484
view_allocate_model (appBmpEditor -> view , ViewModelTypeLocking , sizeof (bmpEditorModel ));
435
-
436
485
view_set_context (appBmpEditor -> view , app );
437
486
view_set_draw_callback (appBmpEditor -> view , app_scene_bmp_editor_render_callback );
438
487
view_set_input_callback (appBmpEditor -> view , app_scene_bmp_editor_input_callback );
439
-
440
488
return appBmpEditor ;
441
489
}
442
490
@@ -536,11 +584,17 @@ bool app_scene_bmp_editor_on_event(void* ctx, SceneManagerEvent event) {
536
584
// UNUSED(ctx);
537
585
bool consumed = false;
538
586
if (event .type == SceneManagerEventTypeCustom ) {
539
- if (event .event == SetTextInputSaveEvent ) {
587
+ switch (event .event ) {
588
+ case AppBmpEditorEventSaveText :
540
589
bmp_editor_init_bitmap (ctx );
541
590
BmpEditorData -> state = BmpEditorStateDrawing ;
542
591
view_dispatcher_switch_to_view (app -> view_dispatcher , AppViewBmpEditor );
543
592
consumed = true;
593
+ break ;
594
+ case AppBmpEditorEventQuit :
595
+ view_dispatcher_switch_to_view (app -> view_dispatcher , BmpEditorViewMainMenu );
596
+ consumed = true;
597
+ break ;
544
598
}
545
599
}
546
600
// scene_manager_next_scene(app->scene_manager, AppSceneMainMenu);
0 commit comments