camera_suite_view_start.c 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. #include "../camera_suite.h"
  2. #include <furi.h>
  3. #include <furi_hal.h>
  4. #include <input/input.h>
  5. #include <gui/elements.h>
  6. struct CameraSuiteViewStart {
  7. View* view;
  8. CameraSuiteViewStartCallback callback;
  9. void* context;
  10. };
  11. typedef struct {
  12. int some_value;
  13. } CameraSuiteViewStartModel;
  14. void camera_suite_view_start_set_callback(
  15. CameraSuiteViewStart* instance,
  16. CameraSuiteViewStartCallback callback,
  17. void* context) {
  18. furi_assert(instance);
  19. furi_assert(callback);
  20. instance->callback = callback;
  21. instance->context = context;
  22. }
  23. void camera_suite_view_start_draw(Canvas* canvas, CameraSuiteViewStartModel* model) {
  24. UNUSED(model);
  25. canvas_clear(canvas);
  26. // Draw Camera Suite logo.
  27. canvas_draw_circle(canvas, 82, 28, 1);
  28. canvas_draw_circle(canvas, 85, 29, 11);
  29. canvas_draw_circle(canvas, 85, 29, 6);
  30. canvas_draw_circle(canvas, 85, 29, 9);
  31. canvas_draw_circle(canvas, 104, 17, 1);
  32. canvas_draw_line(canvas, 70, 14, 108, 14);
  33. canvas_draw_line(canvas, 70, 14, 74, 10);
  34. canvas_draw_line(canvas, 70, 15, 70, 37);
  35. canvas_draw_line(canvas, 70, 32, 74, 32);
  36. canvas_draw_line(canvas, 75, 9, 82, 9);
  37. canvas_draw_line(canvas, 78, 37, 70, 37);
  38. canvas_draw_line(canvas, 79, 20, 70, 20);
  39. canvas_draw_line(canvas, 81, 18, 85, 14);
  40. canvas_draw_line(canvas, 82, 14, 82, 8);
  41. canvas_draw_line(canvas, 82, 8, 86, 4);
  42. canvas_draw_line(canvas, 82, 8, 95, 8);
  43. canvas_draw_line(canvas, 83, 14, 85, 11);
  44. canvas_draw_line(canvas, 84, 15, 92, 15);
  45. canvas_draw_line(canvas, 86, 11, 92, 11);
  46. canvas_draw_line(canvas, 86, 23, 84, 24);
  47. canvas_draw_line(canvas, 86, 24, 82, 24);
  48. canvas_draw_line(canvas, 86, 25, 89, 27);
  49. canvas_draw_line(canvas, 86, 4, 98, 4);
  50. canvas_draw_line(canvas, 87, 24, 91, 28);
  51. canvas_draw_line(canvas, 87, 26, 89, 28);
  52. canvas_draw_line(canvas, 88, 26, 84, 25);
  53. canvas_draw_line(canvas, 88, 26, 86, 24);
  54. canvas_draw_line(canvas, 88, 28, 89, 31);
  55. canvas_draw_line(canvas, 89, 28, 89, 30);
  56. canvas_draw_line(canvas, 90, 28, 90, 31);
  57. canvas_draw_line(canvas, 90, 30, 89, 33);
  58. canvas_draw_line(canvas, 92, 11, 93, 14);
  59. canvas_draw_line(canvas, 93, 16, 97, 18);
  60. canvas_draw_line(canvas, 94, 8, 98, 4);
  61. canvas_draw_line(canvas, 95, 9, 95, 14);
  62. canvas_draw_line(canvas, 96, 32, 107, 32);
  63. canvas_draw_line(canvas, 98, 19, 100, 22);
  64. canvas_draw_line(canvas, 98, 5, 98, 9);
  65. canvas_draw_line(canvas, 98, 9, 111, 9);
  66. canvas_draw_line(canvas, 98, 9, 96, 14);
  67. canvas_draw_line(canvas, 99, 20, 108, 20);
  68. canvas_draw_line(canvas, 100, 23, 100, 27);
  69. canvas_draw_line(canvas, 100, 28, 93, 36);
  70. canvas_draw_line(canvas, 102, 23, 104, 23);
  71. canvas_draw_line(canvas, 104, 23, 106, 28);
  72. canvas_draw_line(canvas, 104, 24, 102, 28);
  73. canvas_draw_line(canvas, 107, 14, 112, 9);
  74. canvas_draw_line(canvas, 107, 28, 108, 27);
  75. canvas_draw_line(canvas, 107, 37, 92, 37);
  76. canvas_draw_line(canvas, 108, 15, 108, 37);
  77. canvas_draw_line(canvas, 108, 20, 112, 16);
  78. canvas_draw_line(canvas, 108, 32, 112, 28);
  79. canvas_draw_line(canvas, 108, 37, 112, 33);
  80. canvas_draw_line(canvas, 112, 10, 112, 33);
  81. // Draw "Start" button.
  82. canvas_set_font(canvas, FontSecondary);
  83. canvas_draw_str(canvas, 46, 57, "Start");
  84. canvas_draw_circle(canvas, 75, 53, 2);
  85. canvas_draw_dot(canvas, 72, 50);
  86. canvas_draw_dot(canvas, 72, 56);
  87. canvas_draw_dot(canvas, 78, 50);
  88. canvas_draw_dot(canvas, 78, 56);
  89. canvas_draw_line(canvas, 43, 47, 43, 59);
  90. canvas_draw_line(canvas, 44, 46, 81, 46);
  91. canvas_draw_line(canvas, 44, 60, 81, 60);
  92. canvas_draw_line(canvas, 71, 51, 71, 55);
  93. canvas_draw_line(canvas, 73, 49, 77, 49);
  94. canvas_draw_line(canvas, 73, 57, 77, 57);
  95. canvas_draw_line(canvas, 74, 52, 76, 52);
  96. canvas_draw_line(canvas, 74, 53, 76, 53);
  97. canvas_draw_line(canvas, 74, 54, 77, 54);
  98. canvas_draw_line(canvas, 79, 51, 79, 55);
  99. canvas_draw_line(canvas, 82, 47, 82, 59);
  100. // Draw "Camera Suite" text.
  101. canvas_set_font(canvas, FontPrimary);
  102. canvas_draw_str(canvas, 16, 23, "Camera");
  103. canvas_set_font(canvas, FontPrimary);
  104. canvas_draw_str(canvas, 23, 35, "Suite");
  105. }
  106. static void camera_suite_view_start_model_init(CameraSuiteViewStartModel* const model) {
  107. model->some_value = 1;
  108. }
  109. bool camera_suite_view_start_input(InputEvent* event, void* context) {
  110. furi_assert(context);
  111. CameraSuiteViewStart* instance = context;
  112. if(event->type == InputTypeRelease) {
  113. switch(event->key) {
  114. case InputKeyBack:
  115. // Exit application.
  116. with_view_model(
  117. instance->view,
  118. CameraSuiteViewStartModel * model,
  119. {
  120. UNUSED(model);
  121. instance->callback(CameraSuiteCustomEventStartBack, instance->context);
  122. },
  123. true);
  124. break;
  125. case InputKeyOk:
  126. // Start the application.
  127. with_view_model(
  128. instance->view,
  129. CameraSuiteViewStartModel * model,
  130. {
  131. UNUSED(model);
  132. instance->callback(CameraSuiteCustomEventStartOk, instance->context);
  133. },
  134. true);
  135. break;
  136. case InputKeyMAX:
  137. case InputKeyLeft:
  138. case InputKeyRight:
  139. case InputKeyUp:
  140. case InputKeyDown:
  141. // Do nothing.
  142. break;
  143. }
  144. }
  145. return true;
  146. }
  147. void camera_suite_view_start_exit(void* context) {
  148. furi_assert(context);
  149. }
  150. void camera_suite_view_start_enter(void* context) {
  151. furi_assert(context);
  152. CameraSuiteViewStart* instance = (CameraSuiteViewStart*)context;
  153. with_view_model(
  154. instance->view,
  155. CameraSuiteViewStartModel * model,
  156. { camera_suite_view_start_model_init(model); },
  157. true);
  158. }
  159. CameraSuiteViewStart* camera_suite_view_start_alloc() {
  160. CameraSuiteViewStart* instance = malloc(sizeof(CameraSuiteViewStart));
  161. instance->view = view_alloc();
  162. view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(CameraSuiteViewStartModel));
  163. // furi_assert crashes in events without this
  164. view_set_context(instance->view, instance);
  165. view_set_draw_callback(instance->view, (ViewDrawCallback)camera_suite_view_start_draw);
  166. view_set_input_callback(instance->view, camera_suite_view_start_input);
  167. with_view_model(
  168. instance->view,
  169. CameraSuiteViewStartModel * model,
  170. { camera_suite_view_start_model_init(model); },
  171. true);
  172. return instance;
  173. }
  174. void camera_suite_view_start_free(CameraSuiteViewStart* instance) {
  175. furi_assert(instance);
  176. with_view_model(
  177. instance->view, CameraSuiteViewStartModel * model, { UNUSED(model); }, true);
  178. view_free(instance->view);
  179. free(instance);
  180. }
  181. View* camera_suite_view_start_get_view(CameraSuiteViewStart* instance) {
  182. furi_assert(instance);
  183. return instance->view;
  184. }