color_guess_startscreen.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include "../color_guess.h"
  2. #include <furi.h>
  3. #include <furi_hal.h>
  4. #include <input/input.h>
  5. #include <gui/elements.h>
  6. #include <dolphin/dolphin.h>
  7. struct ColorGuessStartscreen {
  8. View* view;
  9. ColorGuessStartscreenCallback callback;
  10. void* context;
  11. };
  12. typedef struct {
  13. int some_value;
  14. } ColorGuessStartscreenModel;
  15. void color_guess_startscreen_set_callback(
  16. ColorGuessStartscreen* instance,
  17. ColorGuessStartscreenCallback callback,
  18. void* context) {
  19. furi_assert(instance);
  20. furi_assert(callback);
  21. instance->callback = callback;
  22. instance->context = context;
  23. }
  24. void color_guess_startscreen_draw(Canvas* canvas, ColorGuessStartscreenModel* model) {
  25. UNUSED(model);
  26. canvas_clear(canvas);
  27. canvas_set_color(canvas, ColorBlack);
  28. canvas_set_font(canvas, FontPrimary);
  29. canvas_draw_str_aligned(canvas, 64, 10, AlignCenter, AlignTop, "Color Guess");
  30. canvas_set_font(canvas, FontSecondary);
  31. canvas_draw_str_aligned(canvas, 64, 22, AlignCenter, AlignTop, "Guess the color");
  32. canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignTop, "on Flipper's LED");
  33. elements_button_center(canvas, "Start");
  34. }
  35. static void color_guess_startscreen_model_init(ColorGuessStartscreenModel* const model) {
  36. model->some_value = 1;
  37. }
  38. bool color_guess_startscreen_input(InputEvent* event, void* context) {
  39. furi_assert(context);
  40. ColorGuessStartscreen* instance = context;
  41. if(event->type == InputTypeRelease) {
  42. switch(event->key) {
  43. case InputKeyBack:
  44. with_view_model(
  45. instance->view,
  46. ColorGuessStartscreenModel * model,
  47. {
  48. UNUSED(model);
  49. instance->callback(ColorGuessCustomEventStartscreenBack, instance->context);
  50. },
  51. true);
  52. break;
  53. case InputKeyLeft:
  54. case InputKeyRight:
  55. case InputKeyUp:
  56. case InputKeyDown:
  57. case InputKeyOk:
  58. with_view_model(
  59. instance->view,
  60. ColorGuessStartscreenModel * model,
  61. {
  62. UNUSED(model);
  63. instance->callback(ColorGuessCustomEventStartscreenOk, instance->context);
  64. },
  65. true);
  66. break;
  67. case InputKeyMAX:
  68. break;
  69. }
  70. }
  71. return true;
  72. }
  73. void color_guess_startscreen_exit(void* context) {
  74. furi_assert(context);
  75. }
  76. void color_guess_startscreen_enter(void* context) {
  77. furi_assert(context);
  78. ColorGuessStartscreen* instance = (ColorGuessStartscreen*)context;
  79. with_view_model(
  80. instance->view,
  81. ColorGuessStartscreenModel * model,
  82. { color_guess_startscreen_model_init(model); },
  83. true);
  84. }
  85. ColorGuessStartscreen* color_guess_startscreen_alloc() {
  86. ColorGuessStartscreen* instance = malloc(sizeof(ColorGuessStartscreen));
  87. instance->view = view_alloc();
  88. view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(ColorGuessStartscreenModel));
  89. view_set_context(instance->view, instance); // furi_assert crashes in events without this
  90. view_set_draw_callback(instance->view, (ViewDrawCallback)color_guess_startscreen_draw);
  91. view_set_input_callback(instance->view, color_guess_startscreen_input);
  92. //view_set_enter_callback(instance->view, color_guess_startscreen_enter);
  93. //view_set_exit_callback(instance->view, color_guess_startscreen_exit);
  94. with_view_model(
  95. instance->view,
  96. ColorGuessStartscreenModel * model,
  97. { color_guess_startscreen_model_init(model); },
  98. true);
  99. return instance;
  100. }
  101. void color_guess_startscreen_free(ColorGuessStartscreen* instance) {
  102. furi_assert(instance);
  103. with_view_model(
  104. instance->view, ColorGuessStartscreenModel * model, { UNUSED(model); }, true);
  105. view_free(instance->view);
  106. free(instance);
  107. }
  108. View* color_guess_startscreen_get_view(ColorGuessStartscreen* instance) {
  109. furi_assert(instance);
  110. return instance->view;
  111. }