diff --git a/CHANGELOG.md b/CHANGELOG.md index 54f7d8ed..a224d16d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - fix: Initial window size limits are now properly applied when the window is (almost) larger than the screen. - fix: The default choice screen displays previously selected choices in a different color. If you saved at a choice, the colors wouldn't update when loading. - fix: Debug adapter: Relative path handling used by breakpoints didn't always work on case-insensitive file systems. +- fix: Parts of lines would sometimes be cut off or missing from the text log due to a rounding error. # v4.9.6 - fix: File permissions were broken for Linux/Mac builds when building on a file system which doesn't support permissions (e.g. NTFS on Windows) diff --git a/core/src/main/java/nl/weeaboo/vn/impl/text/TextRenderer.java b/core/src/main/java/nl/weeaboo/vn/impl/text/TextRenderer.java index bdfbfd5d..b5096adf 100644 --- a/core/src/main/java/nl/weeaboo/vn/impl/text/TextRenderer.java +++ b/core/src/main/java/nl/weeaboo/vn/impl/text/TextRenderer.java @@ -167,11 +167,11 @@ public void setMaxSize(double w, double h) { } private int getLayoutMaxWidth() { - return (int)Math.floor(getMaxWidth()); + return (int)Math.round(getMaxWidth()); } private int getLayoutMaxHeight() { - return (int)Math.floor(getMaxHeight()); + return (int)Math.round(getMaxHeight()); } @Override @@ -341,7 +341,7 @@ public void setRightToLeft(boolean rtl) { @Override public void setSize(double w, double h) { - setMaxSize((int)Math.floor(w), (int)Math.floor(h)); + setMaxSize((int)Math.ceil(w), (int)Math.ceil(h)); super.setSize(w, h); } diff --git a/core/src/test/java/nl/weeaboo/vn/impl/text/TextRendererTest.java b/core/src/test/java/nl/weeaboo/vn/impl/text/TextRendererTest.java index c39af56a..1be350ac 100644 --- a/core/src/test/java/nl/weeaboo/vn/impl/text/TextRendererTest.java +++ b/core/src/test/java/nl/weeaboo/vn/impl/text/TextRendererTest.java @@ -12,6 +12,7 @@ import nl.weeaboo.test.RectAssert; import nl.weeaboo.vn.core.VerticalAlign; import nl.weeaboo.vn.impl.core.StaticEnvironment; +import nl.weeaboo.vn.layout.ILayoutElem; public class TextRendererTest { @@ -132,6 +133,17 @@ public void testLineBounds() { assertLineBounds(0, Rect2D.EMPTY); } + /** + * Calculation of max width/height for {@link ILayoutElem} purposes. + */ + @Test + public void testMaxWidth() { + textRenderer.setText("one\ntwo\nthree"); + textRenderer.setSize(63.999, 12.34); + + assertMaxSize(64.0, 13.0); + } + private void assertLineBounds(int lineIndex, Rect2D expectedBounds) { Rect2D actualBounds = textRenderer.getLineBounds(lineIndex); RectAssert.assertEquals(expectedBounds, actualBounds, 0.0); @@ -154,4 +166,9 @@ private void assertFinalLineFullyVisible(boolean expected) { Assert.assertEquals(expected, textRenderer.isFinalLineFullyVisible()); } + private void assertMaxSize(double expectedW, double expectedH) { + Assert.assertEquals(expectedW, textRenderer.getMaxWidth(), 0.0); + Assert.assertEquals(expectedH, textRenderer.getMaxHeight(), 0.0); + } + }