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