Ver Fonte

Canvas: aligned printf

SG há 1 ano atrás
pai
commit
8946381a4f
3 ficheiros alterados com 44 adições e 3 exclusões
  1. 19 0
      canvas.c
  2. 24 2
      canvas.h
  3. 1 1
      game_engine.c

+ 19 - 0
canvas.c

@@ -27,6 +27,25 @@ size_t canvas_printf_width(Canvas* canvas, const char* format, ...) {
     return size;
 }
 
+void canvas_printf_aligned(
+    Canvas* canvas,
+    uint8_t x,
+    uint8_t y,
+    Align h,
+    Align v,
+    const char* format,
+    ...) {
+    FuriString* string = furi_string_alloc();
+    va_list args;
+    va_start(args, format);
+    furi_string_vprintf(string, format, args);
+    va_end(args);
+
+    canvas_draw_str_aligned(canvas, x, y, h, v, furi_string_get_cstr(string));
+
+    furi_string_free(string);
+}
+
 void canvas_draw_str_aligned_outline(
     Canvas* canvas,
     uint8_t x,

+ 24 - 2
canvas.h

@@ -15,7 +15,8 @@ extern "C" {
  * @param format format string
  * @param ...  arguments
  */
-void canvas_printf(Canvas* canvas, uint8_t x, uint8_t y, const char* format, ...);
+void canvas_printf(Canvas* canvas, uint8_t x, uint8_t y, const char* format, ...)
+    __attribute__((__format__(__printf__, 4, 5)));
 
 /**
  * @brief Get width of formatted string
@@ -25,7 +26,28 @@ void canvas_printf(Canvas* canvas, uint8_t x, uint8_t y, const char* format, ...
  * @param ... arguments
  * @return size_t width of formatted string
  */
-size_t canvas_printf_width(Canvas* canvas, const char* format, ...);
+size_t canvas_printf_width(Canvas* canvas, const char* format, ...)
+    __attribute__((__format__(__printf__, 2, 3)));
+
+/**
+ * @brief Print formatted string to canvas with alignment
+ * 
+ * @param canvas canvas instance
+ * @param x x position
+ * @param y y position
+ * @param h horizontal alignment
+ * @param v vertical alignment
+ * @param format format string
+ * @param ... arguments
+ */
+void canvas_printf_aligned(
+    Canvas* canvas,
+    uint8_t x,
+    uint8_t y,
+    Align h,
+    Align v,
+    const char* format,
+    ...) __attribute__((__format__(__printf__, 6, 7)));
 
 /**
  * @brief Draw aligned string with outline

+ 1 - 1
game_engine.c

@@ -172,7 +172,7 @@ void game_engine_run(GameEngine* engine) {
             // show fps if needed
             if(engine->settings.show_fps) {
                 canvas_set_color(canvas, ColorXOR);
-                canvas_printf(canvas, 0, 7, "%u", (uint32_t)roundf(engine->fps));
+                canvas_printf(canvas, 0, 7, "%lu", (uint32_t)roundf(engine->fps));
             }
 
             // and output screen buffer