From 8363c953ed7b589b6f3747c7022c8be141cb43da Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Sat, 19 Aug 2023 08:19:07 +0300 Subject: [PATCH] Fix screen text align - Better calculation of center with horizontal and vertical positions. - Fixes #853 --- .../shell/component/view/screen/DefaultScreen.java | 4 ++-- .../shell/component/view/screen/ScreenTests.java | 11 +++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/spring-shell-core/src/main/java/org/springframework/shell/component/view/screen/DefaultScreen.java b/spring-shell-core/src/main/java/org/springframework/shell/component/view/screen/DefaultScreen.java index 7cc1cd9b..b8a6986d 100644 --- a/spring-shell-core/src/main/java/org/springframework/shell/component/view/screen/DefaultScreen.java +++ b/spring-shell-core/src/main/java/org/springframework/shell/component/view/screen/DefaultScreen.java @@ -338,7 +338,7 @@ public class DefaultScreen implements Screen, DisplayLines { public void text(String text, Rectangle rect, HorizontalAlign hAlign, VerticalAlign vAlign) { int x = rect.x(); if (hAlign == HorizontalAlign.CENTER) { - x = (x + rect.width()) / 2; + x = x + rect.width() / 2; x = x - text.length() / 2; } else if (hAlign == HorizontalAlign.RIGHT) { @@ -346,7 +346,7 @@ public class DefaultScreen implements Screen, DisplayLines { } int y = rect.y(); if (vAlign == VerticalAlign.CENTER) { - y = (y + rect.height()) / 2; + y = y + rect.height() / 2; } else if (vAlign == VerticalAlign.BOTTOM) { y = y + rect.height() - 1; diff --git a/spring-shell-core/src/test/java/org/springframework/shell/component/view/screen/ScreenTests.java b/spring-shell-core/src/test/java/org/springframework/shell/component/view/screen/ScreenTests.java index c09c8e1f..fd99e31f 100644 --- a/spring-shell-core/src/test/java/org/springframework/shell/component/view/screen/ScreenTests.java +++ b/spring-shell-core/src/test/java/org/springframework/shell/component/view/screen/ScreenTests.java @@ -76,14 +76,21 @@ class ScreenTests extends AbstractViewTests { void printsTextAlign() { Rectangle rect = new Rectangle(1, 1, 10, 10); screen24x80.writerBuilder().build().text("text", rect, HorizontalAlign.CENTER, VerticalAlign.CENTER); - assertThat(forScreen(screen24x80)).hasHorizontalText("text", 3, 5, 4); + assertThat(forScreen(screen24x80)).hasHorizontalText("text", 4, 6, 4); } @Test void printsTextAlignInOneRowRect() { Rectangle rect = new Rectangle(1, 1, 10, 1); screen24x80.writerBuilder().build().text("text", rect, HorizontalAlign.CENTER, VerticalAlign.CENTER); - assertThat(forScreen(screen24x80)).hasHorizontalText("text", 3, 1, 4); + assertThat(forScreen(screen24x80)).hasHorizontalText("text", 4, 1, 4); + } + + @Test + void printsTextAlignInSmallRect() { + Rectangle rect = new Rectangle(10, 14, 10, 3); + screen24x80.writerBuilder().build().text("text", rect, HorizontalAlign.CENTER, VerticalAlign.CENTER); + assertThat(forScreen(screen24x80)).hasHorizontalText("text", 13, 15, 4); } @Test