1+ #include <furi.h>
2+ #include <furi_hal.h>
3+
4+ #include <gui/gui.h>
5+ #include <input/input.h>
6+
7+ /* Magic happens here -- this file is generated by fbt.
8+ * Just set fap_icon_assets in application.fam and #include {APPID}_icons.h */
9+ #include "flipp_pomodoro_icons.h"
10+
11+ typedef struct {
12+ uint8_t x , y ;
13+ } ImagePosition ;
14+
15+ static ImagePosition image_position = {.x = 0 , .y = 0 };
16+
17+ // Screen is 128x64 px
18+ static void app_draw_callback (Canvas * canvas , void * ctx ) {
19+ UNUSED (ctx );
20+
21+ canvas_clear (canvas );
22+ canvas_draw_icon (canvas , image_position .x % 128 , image_position .y % 64 , & I_dolphin_71x25 );
23+ }
24+
25+ static void app_input_callback (InputEvent * input_event , void * ctx ) {
26+ furi_assert (ctx );
27+
28+ FuriMessageQueue * event_queue = ctx ;
29+ furi_message_queue_put (event_queue , input_event , FuriWaitForever );
30+ }
31+
32+ int32_t flipp_pomodoro_main (void * p ) {
33+ UNUSED (p );
34+ FuriMessageQueue * event_queue = furi_message_queue_alloc (8 , sizeof (InputEvent ));
35+
36+ // Configure view port
37+ ViewPort * view_port = view_port_alloc ();
38+ view_port_draw_callback_set (view_port , app_draw_callback , view_port );
39+ view_port_input_callback_set (view_port , app_input_callback , event_queue );
40+
41+ // Register view port in GUI
42+ Gui * gui = furi_record_open (RECORD_GUI );
43+ gui_add_view_port (gui , view_port , GuiLayerFullscreen );
44+
45+ InputEvent event ;
46+
47+ bool running = true;
48+ while (running ) {
49+ if (furi_message_queue_get (event_queue , & event , 100 ) == FuriStatusOk ) {
50+ if ((event .type == InputTypePress ) || (event .type == InputTypeRepeat )) {
51+ switch (event .key ) {
52+ case InputKeyLeft :
53+ image_position .x -= 2 ;
54+ break ;
55+ case InputKeyRight :
56+ image_position .x += 2 ;
57+ break ;
58+ case InputKeyUp :
59+ image_position .y -= 2 ;
60+ break ;
61+ case InputKeyDown :
62+ image_position .y += 2 ;
63+ break ;
64+ default :
65+ running = false;
66+ break ;
67+ }
68+ }
69+ }
70+ view_port_update (view_port );
71+ }
72+
73+ view_port_enabled_set (view_port , false);
74+ gui_remove_view_port (gui , view_port );
75+ view_port_free (view_port );
76+ furi_message_queue_free (event_queue );
77+
78+ furi_record_close (RECORD_GUI );
79+
80+ return 0 ;
81+ }
0 commit comments