Просмотр исходного кода

Handle long and short press of DPAD

SimplyMinimal 3 лет назад
Родитель
Сommit
2ec04b67a4
1 измененных файлов с 23 добавлено и 22 удалено
  1. 23 22
      etch-a-sketch.c

+ 23 - 22
etch-a-sketch.c

@@ -87,18 +87,38 @@ int32_t etch_a_sketch_app(void* p) {
 
 
     while(furi_message_queue_get(event_queue, &event, FuriWaitForever) == FuriStatusOk) {
     while(furi_message_queue_get(event_queue, &event, FuriWaitForever) == FuriStatusOk) {
         //break out of the loop if the back key is pressed
         //break out of the loop if the back key is pressed
-        if(event.type == InputTypeShort && event.key == InputKeyBack) {
+        if(event.key == InputKeyBack && event.type == InputTypeShort) {
             break;
             break;
         }
         }
 
 
+        // Clear
+        if(event.key == InputKeyBack && event.type == InputTypeLong) {
+            etch_state->board[1][1] = true;
+            for(int y = 0; y < 32; y++) {
+                for(int x = 0; x < 64; x++) {
+                    etch_state->board[x][y] = false;
+                }
+            }
+            view_port_update(view_port);
+        }
+
         // Single Dot Select
         // Single Dot Select
-        if(event.type == InputTypeShort && event.key == InputKeyOk) {
+        if(event.key == InputKeyOk && event.type == InputTypeShort) {
             etch_state->board[etch_state->selected.x][etch_state->selected.y] =
             etch_state->board[etch_state->selected.x][etch_state->selected.y] =
                 !etch_state->board[etch_state->selected.x][etch_state->selected.y];
                 !etch_state->board[etch_state->selected.x][etch_state->selected.y];
         }
         }
 
 
+        // Erase Board
+        // TODO: Do animation of shaking board
+        if(event.key == InputKeyOk && event.type == InputTypeLong) {
+            etch_state->isDrawing = !etch_state->isDrawing;
+            etch_state->board[etch_state->selected.x][etch_state->selected.y] = true;
+            view_port_update(view_port);
+        }
+
         //check the key pressed and change x and y accordingly
         //check the key pressed and change x and y accordingly
-        if(event.type) {
+        if(event.type == InputTypeShort || event.type == InputTypeRepeat ||
+           event.type == InputTypeLong) {
             switch(event.key) {
             switch(event.key) {
             case InputKeyUp:
             case InputKeyUp:
                 etch_state->selected.y -= 1;
                 etch_state->selected.y -= 1;
@@ -134,25 +154,6 @@ int32_t etch_a_sketch_app(void* p) {
             }
             }
             view_port_update(view_port);
             view_port_update(view_port);
         }
         }
-
-        // Clear Board
-        if(event.key == InputKeyBack && event.type == InputTypeLong) {
-            etch_state->board[1][1] = true;
-            for(int y = 0; y < 32; y++) {
-                for(int x = 0; x < 64; x++) {
-                    etch_state->board[x][y] = false;
-                }
-            }
-            view_port_update(view_port);
-        }
-
-        // Erase Board
-        // TODO: Do animation of shaking board
-        if(event.key == InputKeyOk && event.type == InputTypeLong) {
-            etch_state->isDrawing = !etch_state->isDrawing;
-            etch_state->board[etch_state->selected.x][etch_state->selected.y] = true;
-            view_port_update(view_port);
-        }
     }
     }
 
 
     gui_remove_view_port(gui, view_port);
     gui_remove_view_port(gui, view_port);