camera_suite_view_guide.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #include "../camera_suite.h"
  2. #include "camera_suite_view_guide.h"
  3. struct CameraSuiteViewGuide {
  4. View* view;
  5. CameraSuiteViewGuideCallback callback;
  6. void* context;
  7. };
  8. typedef struct {
  9. int some_value;
  10. } CameraSuiteViewGuideModel;
  11. void camera_suite_view_guide_set_callback(
  12. CameraSuiteViewGuide* instance,
  13. CameraSuiteViewGuideCallback callback,
  14. void* context) {
  15. furi_assert(instance);
  16. furi_assert(callback);
  17. instance->callback = callback;
  18. instance->context = context;
  19. }
  20. void camera_suite_view_guide_draw(Canvas* canvas, CameraSuiteViewGuideModel* model) {
  21. UNUSED(model);
  22. canvas_clear(canvas);
  23. canvas_set_color(canvas, ColorBlack);
  24. canvas_set_font(canvas, FontPrimary);
  25. canvas_draw_str_aligned(canvas, 0, 0, AlignLeft, AlignTop, "Camera Suite Guide");
  26. canvas_set_font(canvas, FontSecondary);
  27. canvas_draw_str_aligned(canvas, 0, 12, AlignLeft, AlignTop, "Left = Toggle invert");
  28. canvas_draw_str_aligned(canvas, 0, 22, AlignLeft, AlignTop, "Right = Toggle dithering");
  29. canvas_draw_str_aligned(canvas, 0, 32, AlignLeft, AlignTop, "Up = Contrast up");
  30. canvas_draw_str_aligned(canvas, 0, 42, AlignLeft, AlignTop, "Down = Contrast down");
  31. canvas_draw_str_aligned(canvas, 0, 52, AlignLeft, AlignTop, "Center = Take picture");
  32. }
  33. static void camera_suite_view_guide_model_init(CameraSuiteViewGuideModel* const model) {
  34. model->some_value = 1;
  35. }
  36. bool camera_suite_view_guide_input(InputEvent* event, void* grid_view_instance) {
  37. furi_assert(grid_view_instance);
  38. CameraSuiteViewGuide* instance = grid_view_instance;
  39. if(event->type == InputTypeRelease) {
  40. switch(event->key) {
  41. case InputKeyBack:
  42. with_view_model(
  43. instance->view,
  44. CameraSuiteViewGuideModel * model,
  45. {
  46. UNUSED(model);
  47. // Go back to the main menu.
  48. instance->callback(CameraSuiteCustomEventSceneGuideBack, instance->context);
  49. },
  50. true);
  51. break;
  52. case InputKeyLeft:
  53. case InputKeyRight:
  54. case InputKeyUp:
  55. case InputKeyDown:
  56. case InputKeyOk:
  57. case InputKeyMAX:
  58. // Do nothing.
  59. break;
  60. }
  61. }
  62. return true;
  63. }
  64. void camera_suite_view_guide_exit(void* context) {
  65. furi_assert(context);
  66. }
  67. void camera_suite_view_guide_enter(void* context) {
  68. furi_assert(context);
  69. CameraSuiteViewGuide* instance = (CameraSuiteViewGuide*)context;
  70. with_view_model(
  71. instance->view,
  72. CameraSuiteViewGuideModel * model,
  73. { camera_suite_view_guide_model_init(model); },
  74. true);
  75. }
  76. CameraSuiteViewGuide* camera_suite_view_guide_alloc() {
  77. CameraSuiteViewGuide* instance = malloc(sizeof(CameraSuiteViewGuide));
  78. instance->view = view_alloc();
  79. view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(CameraSuiteViewGuideModel));
  80. view_set_context(instance->view, instance); // furi_assert crashes in events without this
  81. view_set_draw_callback(instance->view, (ViewDrawCallback)camera_suite_view_guide_draw);
  82. view_set_input_callback(instance->view, camera_suite_view_guide_input);
  83. view_set_enter_callback(instance->view, camera_suite_view_guide_enter);
  84. view_set_exit_callback(instance->view, camera_suite_view_guide_exit);
  85. with_view_model(
  86. instance->view,
  87. CameraSuiteViewGuideModel * model,
  88. { camera_suite_view_guide_model_init(model); },
  89. true);
  90. return instance;
  91. }
  92. void camera_suite_view_guide_free(CameraSuiteViewGuide* instance) {
  93. furi_assert(instance);
  94. with_view_model(
  95. instance->view, CameraSuiteViewGuideModel * model, { UNUSED(model); }, true);
  96. view_free(instance->view);
  97. free(instance);
  98. }
  99. View* camera_suite_view_guide_get_view(CameraSuiteViewGuide* instance) {
  100. furi_assert(instance);
  101. return instance->view;
  102. }