camera_suite_view_start.c 6.8 KB

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