camera_suite_view_start.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. canvas_set_color(canvas, ColorBlack);
  27. canvas_set_font(canvas, FontPrimary);
  28. canvas_draw_str_aligned(canvas, 64, 10, AlignCenter, AlignTop, "Camera Suite");
  29. canvas_set_font(canvas, FontSecondary);
  30. canvas_draw_str_aligned(canvas, 64, 22, AlignCenter, AlignTop, "Flipper Zero");
  31. canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignTop, "ESP32 CAM");
  32. elements_button_center(canvas, "Start");
  33. }
  34. static void camera_suite_view_start_model_init(CameraSuiteViewStartModel* const model) {
  35. model->some_value = 1;
  36. }
  37. bool camera_suite_view_start_input(InputEvent* event, void* context) {
  38. furi_assert(context);
  39. CameraSuiteViewStart* instance = context;
  40. if(event->type == InputTypeRelease) {
  41. switch(event->key) {
  42. case InputKeyBack:
  43. // Exit application.
  44. with_view_model(
  45. instance->view,
  46. CameraSuiteViewStartModel * model,
  47. {
  48. UNUSED(model);
  49. instance->callback(CameraSuiteCustomEventStartBack, instance->context);
  50. },
  51. true);
  52. break;
  53. case InputKeyOk:
  54. // Start the application.
  55. with_view_model(
  56. instance->view,
  57. CameraSuiteViewStartModel * model,
  58. {
  59. UNUSED(model);
  60. instance->callback(CameraSuiteCustomEventStartOk, instance->context);
  61. },
  62. true);
  63. break;
  64. case InputKeyMAX:
  65. case InputKeyLeft:
  66. case InputKeyRight:
  67. case InputKeyUp:
  68. case InputKeyDown:
  69. // Do nothing.
  70. break;
  71. }
  72. }
  73. return true;
  74. }
  75. void camera_suite_view_start_exit(void* context) {
  76. furi_assert(context);
  77. }
  78. void camera_suite_view_start_enter(void* context) {
  79. furi_assert(context);
  80. CameraSuiteViewStart* instance = (CameraSuiteViewStart*)context;
  81. with_view_model(
  82. instance->view,
  83. CameraSuiteViewStartModel * model,
  84. { camera_suite_view_start_model_init(model); },
  85. true);
  86. }
  87. CameraSuiteViewStart* camera_suite_view_start_alloc() {
  88. CameraSuiteViewStart* instance = malloc(sizeof(CameraSuiteViewStart));
  89. instance->view = view_alloc();
  90. view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(CameraSuiteViewStartModel));
  91. // furi_assert crashes in events without this
  92. view_set_context(instance->view, instance);
  93. view_set_draw_callback(instance->view, (ViewDrawCallback)camera_suite_view_start_draw);
  94. view_set_input_callback(instance->view, camera_suite_view_start_input);
  95. with_view_model(
  96. instance->view,
  97. CameraSuiteViewStartModel * model,
  98. { camera_suite_view_start_model_init(model); },
  99. true);
  100. return instance;
  101. }
  102. void camera_suite_view_start_free(CameraSuiteViewStart* instance) {
  103. furi_assert(instance);
  104. with_view_model(
  105. instance->view, CameraSuiteViewStartModel * model, { UNUSED(model); }, true);
  106. view_free(instance->view);
  107. free(instance);
  108. }
  109. View* camera_suite_view_start_get_view(CameraSuiteViewStart* instance) {
  110. furi_assert(instance);
  111. return instance->view;
  112. }