color_guess_startscreen.c 4.1 KB

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