Jelajahi Sumber

UI redesign WIP, running page

J 3 tahun lalu
induk
melakukan
da81e3702a
10 mengubah file dengan 77 tambahan dan 50 penghapusan
  1. 0 9
      README.md
  2. TEMPAT SAMPAH
      icons/Button_18x18.png
  3. TEMPAT SAMPAH
      icons/KeyBackspaceSelected_16x9.png
  4. TEMPAT SAMPAH
      icons/KeyBackspaceSelected_24x11.png
  5. TEMPAT SAMPAH
      icons/KeyBackspace_16x9.png
  6. TEMPAT SAMPAH
      icons/KeyBackspace_24x11.png
  7. TEMPAT SAMPAH
      icons/KeyInputSelected_30x11.png
  8. TEMPAT SAMPAH
      icons/KeyInput_30x11.png
  9. 0 0
      icons/KeyRunSelected_24x11.png
  10. 77 41
      views/bf_dev_env.c

+ 0 - 9
README.md

@@ -1,9 +0,0 @@
-# FlipperZeroBrainfuck
-
-A brainfuck editor and interpreter for the flipper zero.  
-Allows for the opening and execution of .b files.  
-
-Very much a WIP, but it does run output-only brainfuck scripts.
-scripts are currently limited in lenght but im planning to remove this limitation when i learn more about how the F0 handles file reading/writing.
-
-![image](https://user-images.githubusercontent.com/16545187/212537175-2c572f3f-6bfd-4432-be67-61da98dc7376.png)

TEMPAT SAMPAH
icons/Button_18x18.png


TEMPAT SAMPAH
icons/KeyBackspaceSelected_16x9.png


TEMPAT SAMPAH
icons/KeyBackspaceSelected_24x11.png


TEMPAT SAMPAH
icons/KeyBackspace_16x9.png


TEMPAT SAMPAH
icons/KeyBackspace_24x11.png


TEMPAT SAMPAH
icons/KeyInputSelected_30x11.png


TEMPAT SAMPAH
icons/KeyInput_30x11.png


+ 0 - 0
icons/KeyRunSel_24x11.png → icons/KeyRunSelected_24x11.png


+ 77 - 41
views/bf_dev_env.c

@@ -30,58 +30,90 @@ BFApp* appDev;
 
 int selectedButton = 0;
 int saveNotifyCountdown = 0;
-static bMapping buttonMappings[11] = {
-    {4, 4, 8, 1},
-    {5, 5, 0, 2},
-    {6, 6, 1, 3},
-    {7, 7, 2, 8},
-    {0, 0, 10, 5},
-    {1, 1, 4, 6},
-    {2, 2, 5, 7},
-    {3, 3, 6, 10},
-    {10, 9, 3, 0},
-    {8, 10, 3, 0},
-    {9, 8, 7, 4}
+int execCountdown = 0;
+
+char dspLine0[25] = {};
+char dspLine1[25] = {};
+char dspLine2[25] = {};
+
+static bMapping buttonMappings[12] = {
+    {8,   8, 7, 1},  //0
+    {8,   8, 0, 2},  //1
+    {9,   9, 1, 3},  //2
+    {9,   9, 2, 4},  //3
+    {10, 10, 3, 5},  //4
+    {10, 10, 4, 6},  //5
+    {11, 11, 5, 7},  //6
+    {11, 11, 6, 0}, //7
+
+    {0, 0, 11, 9}, //8 
+    {3, 3, 8, 10},  //9
+    {5, 5, 9, 11}, //10
+    {6, 6, 10, 8} //11
 };
 
+#define BT_X 14
+#define BT_Y 14
 static void bf_dev_draw_button(Canvas* canvas, int x, int y, bool selected, const char* lbl){
     UNUSED(lbl);
 
     if(selected){
-        canvas_draw_rbox(canvas, x, y, 18, 18, 3);
+        canvas_draw_rbox(canvas, x, y, BT_X, BT_Y, 3);
         canvas_invert_color(canvas);
-        canvas_set_font(canvas, FontKeyboard);
-        canvas_draw_str_aligned(canvas, x + (18/2), y + (18/2) - 1, AlignCenter, AlignCenter, lbl);
+        canvas_set_font(canvas, FontBatteryPercent);
+        canvas_draw_str_aligned(canvas, x + (BT_X/2), y + (BT_Y/2) - 1, AlignCenter, AlignCenter, lbl);
         canvas_invert_color(canvas);
     }
     else{
-        canvas_draw_rbox(canvas, x, y, 18, 18, 3);
+        canvas_draw_rbox(canvas, x, y, BT_X, BT_Y, 3);
         canvas_invert_color(canvas);
-        canvas_draw_rbox(canvas, x+2, y-1, 16, 17, 3);
+        canvas_draw_rbox(canvas, x+2, y-1, BT_X - 2, BT_Y - 1, 3);
         canvas_invert_color(canvas);
-        canvas_draw_rframe(canvas, x, y, 18, 18, 3);
-        canvas_set_font(canvas, FontKeyboard);
-        canvas_draw_str_aligned(canvas, x + (18/2), y + (18/2) - 1, AlignCenter, AlignCenter, lbl);
+        canvas_draw_rframe(canvas, x, y, BT_X, BT_Y, 3);
+        canvas_set_font(canvas, FontBatteryPercent);
+        canvas_draw_str_aligned(canvas, x + (BT_X/2), y + (BT_Y/2) - 1, AlignCenter, AlignCenter, lbl);
     }
 }
 
 static void bf_dev_draw_callback(Canvas* canvas, void* _model) {
     UNUSED(_model);
 
+    if(execCountdown > 0){
+        execCountdown--;
+        canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignCenter, "RUNNING...");
+        if(execCountdown == 0){
+            initWorker(appDev->dataBuffer, appDev->dataSize);
+            beginWorker();
+            text_box_set_text(appDev->text_box, workerGetOutput());
+            scene_manager_next_scene(appDev->scene_manager, brainfuckSceneExecEnv);
+        }
+        return;
+    }
+
     //buttons
-    bf_dev_draw_button(canvas, 2, 24, (selectedButton == 0), "+"); //T 0
-    bf_dev_draw_button(canvas, 22, 24, (selectedButton == 1),  "-"); //T 1
-    bf_dev_draw_button(canvas, 42, 24, (selectedButton == 2),  "<"); //T 2
-    bf_dev_draw_button(canvas, 62, 24, (selectedButton == 3),  ">"); //T 3
-    bf_dev_draw_button(canvas, 2, 44, (selectedButton == 4),  "["); //B 0
-    bf_dev_draw_button(canvas, 22, 44, (selectedButton == 5),  "]"); //B 1
-    bf_dev_draw_button(canvas, 42, 44, (selectedButton == 6),  "."); //B 2
-    bf_dev_draw_button(canvas, 62, 44, (selectedButton == 7),  ","); //B 3
+    // bf_dev_draw_button(canvas, 2, 24 + 9, (selectedButton == 0), "+"); //T 0
+    // bf_dev_draw_button(canvas, 22 - 3, 24 + 9, (selectedButton == 1),  "-"); //T 1
+    // bf_dev_draw_button(canvas, 42 - 6, 24 + 9, (selectedButton == 2),  "<"); //T 2
+    // bf_dev_draw_button(canvas, 62 - 9, 24 + 9, (selectedButton == 3),  ">"); //T 3
+    // bf_dev_draw_button(canvas, 2, 44 + 5, (selectedButton == 4),  "["); //B 0
+    // bf_dev_draw_button(canvas, 22 - 3, 44 + 5, (selectedButton == 5),  "]"); //B 1
+    // bf_dev_draw_button(canvas, 42 - 6, 44 + 5, (selectedButton == 6),  "."); //B 2
+    // bf_dev_draw_button(canvas, 62 - 9, 44 + 5, (selectedButton == 7),  ","); //B 3
+
+    bf_dev_draw_button(canvas, 1, 35, (selectedButton == 0), "+"); //T 0
+    bf_dev_draw_button(canvas, 17, 35, (selectedButton == 1),  "-"); //T 1
+    bf_dev_draw_button(canvas, 33, 35, (selectedButton == 2),  "<"); //T 2
+    bf_dev_draw_button(canvas, 49, 35, (selectedButton == 3),  ">"); //T 3
+    bf_dev_draw_button(canvas, 65, 35, (selectedButton == 4),  "["); //B 0
+    bf_dev_draw_button(canvas, 81, 35, (selectedButton == 5),  "]"); //B 1
+    bf_dev_draw_button(canvas, 97, 35, (selectedButton == 6),  "."); //B 2
+    bf_dev_draw_button(canvas, 113, 35, (selectedButton == 7),  ","); //B 3
 
     //save, run, backspace
-    canvas_draw_icon(canvas, 110, 24, (selectedButton == 8) ? &I_KeyBackspaceSelected_16x9 : &I_KeyBackspace_16x9);
-    canvas_draw_icon(canvas, 102, 38, (selectedButton == 9) ? &I_KeyRunSel_24x11 : &I_KeyRun_24x11);
-    canvas_draw_icon(canvas, 102, 51, (selectedButton == 10) ? &I_KeySaveSelected_24x11 : &I_KeySave_24x11);
+    canvas_draw_icon(canvas, 1, 51, (selectedButton == 8) ? &I_KeyBackspaceSelected_24x11 : &I_KeyBackspace_24x11);
+    canvas_draw_icon(canvas, 44, 51, (selectedButton == 9) ? &I_KeyInputSelected_30x11 : &I_KeyInput_30x11);
+    canvas_draw_icon(canvas, 76, 51, (selectedButton == 10) ? &I_KeyRunSelected_24x11 : &I_KeyRun_24x11);
+    canvas_draw_icon(canvas, 102, 51, (selectedButton == 11) ? &I_KeySaveSelected_24x11 : &I_KeySave_24x11);
 
     if(saveNotifyCountdown > 0){
         canvas_draw_icon(canvas, 98, 54, &I_ButtonRightSmall_3x5);
@@ -89,16 +121,16 @@ static void bf_dev_draw_callback(Canvas* canvas, void* _model) {
     }
 
     //textbox
-    canvas_draw_rframe(canvas, 2, 2, 124, 20, 2);
-    canvas_set_font(canvas, FontKeyboard);
+    canvas_draw_rframe(canvas, 2, 2, 124, 31, 2);
+    canvas_set_font(canvas, FontBatteryPercent);
 
     int dbOffset = 0;
-    if(appDev->dataSize > 20){
-        dbOffset = (appDev->dataSize - 20);
+    if(appDev->dataSize > 24){
+        dbOffset = (appDev->dataSize - 24);
     }
     
     //canvas_draw_str(canvas, 5, 15, (char*)(appDev->dataBuffer + dbOffset));
-    canvas_draw_str_aligned(canvas, 4, 12, AlignLeft, AlignCenter, (char*)(appDev->dataBuffer + dbOffset));
+    canvas_draw_str_aligned(canvas, 4, 8, AlignLeft, AlignCenter, (char*)(appDev->dataBuffer + dbOffset));
 }
 
 
@@ -229,14 +261,17 @@ static bool bf_dev_process_ok(BFDevEnv* devEnv, InputEvent* event) {
 
         case 9:
         {
-            initWorker(appDev->dataBuffer, appDev->dataSize);
-            beginWorker();
-            text_box_set_text(appDev->text_box, workerGetOutput());
-            scene_manager_next_scene(appDev->scene_manager, brainfuckSceneExecEnv);
+            //todo: input
             break;
         }
 
         case 10:
+        {
+            execCountdown = 3;
+            break;
+        }
+
+        case 11:
         {
             //remove old file
             Storage* storage = furi_record_open(RECORD_STORAGE);
@@ -249,7 +284,7 @@ static bool bf_dev_process_ok(BFDevEnv* devEnv, InputEvent* event) {
             buffered_file_stream_close(stream);
 
             //notify
-            saveNotifyCountdown = 5;
+            //todo: save screen
             break;
         }
     }
@@ -272,6 +307,7 @@ static void bf_dev_enter_callback(void* context) {
         true);
 
     appDev = devEnv->appDev;
+    selectedButton = 0;
 
     //clear the bf instruction buffer
     memset(appDev->dataBuffer, 0x00, BF_INST_BUFFER_SIZE * sizeof(char));