diff --git a/libs/ui/source/label.cpp b/libs/ui/source/label.cpp index c77f2099..9f0763ce 100644 --- a/libs/ui/source/label.cpp +++ b/libs/ui/source/label.cpp @@ -88,9 +88,35 @@ namespace psemek::ui for (auto const & g : cached_state_->glyphs) bbox |= g.position; + int lines = 1; + geom::vector offset; - offset[0] = shape_.box[0].center() - bbox[0].length() / 2.f; - offset[1] = shape_.box[1].center() - st->text_scale * st->font->size()[1] / 2.f; + + switch (halign_) + { + case halignment::left: + offset[0] = shape_.box[0].min; + break; + case halignment::center: + offset[0] = shape_.box[0].center() - bbox[0].length() / 2.f; + break; + case halignment::right: + offset[0] = shape_.box[0].max - bbox[0].length(); + break; + } + + switch (valign_) + { + case valignment::top: + offset[1] = shape_.box[1].min; + break; + case valignment::center: + offset[1] = shape_.box[1].center() - lines * st->text_scale * st->font->size()[1] / 2.f; + break; + case valignment::bottom: + offset[1] = shape_.box[1].max - lines * st->text_scale * st->font->size()[1]; + break; + } for (auto & g : cached_state_->glyphs) g.position += offset;