From 57473c545ca74d0bf5093b38365b3c2da991c436 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Thu, 25 Feb 2021 21:09:41 +0300 Subject: [PATCH] Support all alignment modes in label --- libs/ui/source/label.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) 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;