infrared_debug_view.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "infrared_debug_view.h"
  2. #include <gui/canvas.h>
  3. #include <gui/elements.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #define INFRARED_DEBUG_TEXT_LENGTH 64
  7. struct InfraredDebugView {
  8. View* view;
  9. };
  10. typedef struct {
  11. char text[INFRARED_DEBUG_TEXT_LENGTH];
  12. } InfraredDebugViewModel;
  13. static void infrared_debug_view_draw_callback(Canvas* canvas, void* model) {
  14. InfraredDebugViewModel* debug_view_model = model;
  15. canvas_clear(canvas);
  16. canvas_set_font(canvas, FontPrimary);
  17. elements_multiline_text_aligned(canvas, 64, 0, AlignCenter, AlignTop, "INFRARED monitor\n");
  18. canvas_set_font(canvas, FontKeyboard);
  19. if(strlen(debug_view_model->text)) {
  20. elements_multiline_text_aligned(
  21. canvas, 64, 43, AlignCenter, AlignCenter, debug_view_model->text);
  22. }
  23. }
  24. InfraredDebugView* infrared_debug_view_alloc() {
  25. InfraredDebugView* debug_view = malloc(sizeof(InfraredDebugView));
  26. debug_view->view = view_alloc();
  27. view_allocate_model(debug_view->view, ViewModelTypeLocking, sizeof(InfraredDebugViewModel));
  28. view_set_draw_callback(debug_view->view, infrared_debug_view_draw_callback);
  29. view_set_context(debug_view->view, debug_view);
  30. return debug_view;
  31. }
  32. void infrared_debug_view_free(InfraredDebugView* debug_view) {
  33. view_free(debug_view->view);
  34. free(debug_view);
  35. }
  36. View* infrared_debug_view_get_view(InfraredDebugView* debug_view) {
  37. return debug_view->view;
  38. }
  39. void infrared_debug_view_set_text(InfraredDebugView* debug_view, const char* fmt, ...) {
  40. va_list args;
  41. va_start(args, fmt);
  42. InfraredDebugViewModel* model = view_get_model(debug_view->view);
  43. vsnprintf(model->text, INFRARED_DEBUG_TEXT_LENGTH, fmt, args);
  44. view_commit_model(debug_view->view, true);
  45. va_end(args);
  46. }