}
size_t n = dynarray_count(label_layer->ids);
+ char *ids = dynarray_data(label_layer->ids);
Point *positions = dynarray_data(label_layer->positions);
Color *colors = dynarray_data(label_layer->colors);
char *texts = dynarray_data(label_layer->texts);
/* 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(
+ if (edit_field_render_world(
label_layer->edit_field,
camera,
- camera_point(camera, positions[i])) < 0) {
+ positions[i]) < 0) {
return -1;
}
} else {
return -1;
}
}
+
+ if (camera_render_text(
+ camera,
+ ids + i * LABEL_LAYER_ID_MAX_SIZE,
+ vec(1.0f, 1.0f),
+ color_scale(
+ color_invert(colors[i]),
+ rgba(1.0f, 1.0f, 1.0f, active ? 1.0f : 0.5f)),
+ vec_sub(positions[i], vec(0.0f, FONT_CHAR_HEIGHT))) < 0) {
+ return -1;
+ }
}
if (label_layer->selected >= 0) {
trace_assert(label_layer->selected >= 0);
switch (event->type) {
- case SDL_TEXTINPUT: {
- if (edit_field_text_input(
- label_layer->edit_field,
- &event->text) < 0) {
- return -1;
- }
- } break;
-
- case SDL_KEYDOWN:
- case SDL_KEYUP: {
- if (edit_field_keyboard(
- label_layer->edit_field,
- &event->key) < 0) {
- return -1;
- }
-
+ case SDL_KEYDOWN: {
if (event->key.keysym.sym == SDLK_RETURN) {
char *text =
(char*)dynarray_data(label_layer->texts) + label_layer->selected * LABEL_LAYER_TEXT_MAX_SIZE;
memset(text, 0, LABEL_LAYER_TEXT_MAX_SIZE);
memcpy(text, edit_field_as_text(label_layer->edit_field), LABEL_LAYER_TEXT_MAX_SIZE - 1);
label_layer->state = LABEL_LAYER_IDLE;
+ return 0;
}
} break;
}
- return 0;
+ return edit_field_event(label_layer->edit_field, event);
}
int label_layer_event(LabelLayer *label_layer,