]> git.lizzy.rs Git - nothing.git/commitdiff
(#1201) sprite_font_boundary_box newline support
authorMetin Ozyildirim <metinozyildirim@trakya.edu.tr>
Sun, 15 Dec 2019 23:53:19 +0000 (23:53 +0000)
committerMetin Ozyildirim <metinozyildirim@trakya.edu.tr>
Mon, 16 Dec 2019 00:50:10 +0000 (00:50 +0000)
src/game/camera.c
src/game/level/level_editor/label_layer.c
src/game/level_picker.c
src/game/sprite_font.h
src/ui/wiggly_text.c

index be3d665190506fc00a7b42097f0fea50ee561ed6..edd08cae80a40f1a2a312e8107de6916bb1a1c72 100644 (file)
@@ -298,7 +298,7 @@ int camera_is_text_visible(const Camera *camera,
     return rects_overlap(
         camera_rect(
             camera,
-            sprite_font_boundary_box(position, size, strlen(text))),
+            sprite_font_boundary_box(position, size, text)),
         rect_from_sdl(&view_port));
 }
 
index 6a41cfdb5c7527fbad7a53bd527c265ac4b0b66b..739c2dae1995cebdd8f42ed0e975ca5f9a5d0ad7 100644 (file)
@@ -286,7 +286,7 @@ Rect boundary_of_element(const LabelLayer *label_layer,
         sprite_font_boundary_box(
             position,
             LABELS_SIZE,
-            strlen(texts + i * LABEL_LAYER_TEXT_MAX_SIZE)),
+            texts + i * LABEL_LAYER_TEXT_MAX_SIZE),
         sprite_font_boundary_box(
             vec_sum(
                 position,
@@ -294,7 +294,7 @@ Rect boundary_of_element(const LabelLayer *label_layer,
                     vec(0.0f, FONT_CHAR_HEIGHT),
                     LABELS_SIZE)),
             vec(1.0f, 1.0f),
-            strlen(ids + i * LABEL_LAYER_ID_MAX_SIZE)));
+            ids + i * LABEL_LAYER_ID_MAX_SIZE));
 }
 
 int label_layer_render(const LabelLayer *label_layer,
index 50554d5efa8ce3ccc870b1c700fd996a9475f171..f10997ce9859c68c590afed16c029d1e56ba9ec4 100644 (file)
@@ -93,7 +93,7 @@ int level_picker_render(const LevelPicker *level_picker,
                 sprite_font_boundary_box(
                     current_position,
                     LEVEL_PICKER_LIST_FONT_SCALE,
-                    strlen(item_text)));
+                    item_text));
             if (SDL_SetRenderDrawColor(camera->renderer, 255, 255, 255, 255) < 0) {
                 return -1;
             }
@@ -153,7 +153,7 @@ Vec2f level_picker_list_size(const LevelPicker *level_picker)
         Rect boundary_box = sprite_font_boundary_box(
             vec(0.0f, 0.0f),
             LEVEL_PICKER_LIST_FONT_SCALE,
-            strlen(item_text));
+            item_text);
 
         result.x = fmaxf(result.x, boundary_box.w);
         result.y += boundary_box.y + LEVEL_PICKER_LIST_PADDING_BOTTOM;
@@ -221,7 +221,7 @@ int level_picker_event(LevelPicker *level_picker,
             Rect boundary_box = sprite_font_boundary_box(
                 position,
                 LEVEL_PICKER_LIST_FONT_SCALE,
-                strlen(item_text));
+                item_text);
 
             if (rect_contains_point(boundary_box, mouse_pos)) {
                 level_picker->cursor = i;
@@ -256,7 +256,7 @@ int level_picker_event(LevelPicker *level_picker,
             Rect boundary_box = sprite_font_boundary_box(
                 position,
                 LEVEL_PICKER_LIST_FONT_SCALE,
-                strlen(item_text));
+                item_text);
 
             const Vec2f mouse_pos = vec((float) event->motion.x, (float) event->motion.y);
             if (rect_contains_point(boundary_box, mouse_pos)) {
index 7cd3c1068959c8fe64f7fa6ab93d70f7428fe47f..cd2db10ac9cfdaf84c8b19f2e268eaaab5793049 100644 (file)
@@ -23,12 +23,23 @@ void sprite_font_render_text(const Sprite_font *sprite_font,
                              const char *text);
 
 static inline
-Rect sprite_font_boundary_box(Vec2f position, Vec2f size, size_t text_size)
+Rect sprite_font_boundary_box(Vec2f position, Vec2f size, const char *text)
 {
+    size_t num_max_col = 1, num_row = 1;
+    for (size_t i = 0, num_col = 1; text[i] != '\0'; i++){
+        if (text[i] == '\n'){
+            num_col = 1;
+            num_row++;
+            continue;
+        }
+        if (num_col > num_max_col)
+            num_max_col = num_col;
+        num_col++;
+    }
     return rect(
         position.x, position.y,
-        size.x * FONT_CHAR_WIDTH * (float) text_size,
-        size.y * FONT_CHAR_HEIGHT);
+        size.x * FONT_CHAR_WIDTH * (float) num_max_col,
+        size.y * FONT_CHAR_HEIGHT * (float) num_row);
 }
 
 #endif  // SPRITE_FONT_H_
index 07a17f6a43443b1e1d8458aac61788eb9e825ef0..19f88593a2210916913066984d13b895e7e80d3a 100644 (file)
@@ -49,7 +49,7 @@ Vec2f wiggly_text_size(const WigglyText *wiggly_text)
     const Rect boundary = sprite_font_boundary_box(
         vec(0.0f, 0.0f),
         wiggly_text->scale,
-        strlen(wiggly_text->text));
+        wiggly_text->text);
 
     return vec(boundary.w, boundary.h);
 }