From: rexim Date: Sun, 21 Jul 2019 17:47:42 +0000 (+0700) Subject: (#965) Make LabelLayer render edit_field inside of the world X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=c74ff02a6dc1862772b92e5e7aeb0a6b154e09d1;hp=-c;p=nothing.git (#965) Make LabelLayer render edit_field inside of the world --- c74ff02a6dc1862772b92e5e7aeb0a6b154e09d1 diff --git a/src/game/level/level_editor/label_layer.c b/src/game/level/level_editor/label_layer.c index bf743ac3..de7a9a64 100644 --- a/src/game/level/level_editor/label_layer.c +++ b/src/game/level/level_editor/label_layer.c @@ -184,11 +184,10 @@ int label_layer_render(const LabelLayer *label_layer, /* TODO(#891): LabelLayer doesn't show the final position of Label after the animation */ for (size_t i = 0; i < n; ++i) { if (label_layer->state == LABEL_LAYER_EDIT_TEXT) { - // TODO(#965): LabelLayer Edit Field should be rendered inside of the world - if (edit_field_render_screen( + if (edit_field_render_world( label_layer->edit_field, camera, - camera_point(camera, positions[i])) < 0) { + positions[i]) < 0) { return -1; } } else { diff --git a/src/ui/edit_field.c b/src/ui/edit_field.c index cb47ae5f..199caace 100644 --- a/src/ui/edit_field.c +++ b/src/ui/edit_field.c @@ -97,7 +97,28 @@ int edit_field_render_world(const Edit_field *edit_field, { trace_assert(edit_field); trace_assert(camera); - (void) world_position; + + const float cursor_y_overflow = 10.0f; + const float cursor_width = 2.0f; + + if (camera_render_text( + camera, + edit_field->buffer, + edit_field->font_size, + edit_field->font_color, + world_position) < 0) { + return -1; + } + + if (camera_fill_rect( + camera, + rect(world_position.x + (float) edit_field->cursor * (float) FONT_CHAR_WIDTH * edit_field->font_size.x, + world_position.y - cursor_y_overflow, + cursor_width, + FONT_CHAR_HEIGHT * edit_field->font_size.y + cursor_y_overflow * 2.0f), + edit_field->font_color) < 0) { + return -1; + } return 0; }