From b8c669f9d96f56b93f5258748c9a30c62e25aa27 Mon Sep 17 00:00:00 2001 From: and3md Date: Wed, 29 Nov 2017 10:33:01 +0100 Subject: [PATCH 1/2] TextWidget/MultilineTextWidget fix multiline when maxWidth is set. --- src/dlangui/widgets/controls.d | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/dlangui/widgets/controls.d b/src/dlangui/widgets/controls.d index 2e3c6395..61aea237 100644 --- a/src/dlangui/widgets/controls.d +++ b/src/dlangui/widgets/controls.d @@ -119,8 +119,15 @@ class TextWidget : Widget { override void measure(int parentWidth, int parentHeight) { FontRef font = font(); - uint w = (maxLines == 1) ? MAX_WIDTH_UNSPECIFIED : - parentWidth - margins.left - margins.right - padding.left - padding.right; + + uint w; + if (maxLines == 1) + w = MAX_WIDTH_UNSPECIFIED; + else { + w = parentWidth - margins.left - margins.right - padding.left - padding.right; + if (maxWidth > 0 && maxWidth < w) + w = maxWidth - padding.left - padding.right; + } uint flags = textFlags; // optimization: do not measure if nothing changed From bfd373a3681ce10b5c4abf51864c1d8857d2fb05 Mon Sep 17 00:00:00 2001 From: and3md Date: Wed, 29 Nov 2017 10:44:12 +0100 Subject: [PATCH 2/2] TextWidget/MultilineTextWidget: _measureSaver should also check maxLines --- src/dlangui/widgets/controls.d | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dlangui/widgets/controls.d b/src/dlangui/widgets/controls.d index 61aea237..27e2fe07 100644 --- a/src/dlangui/widgets/controls.d +++ b/src/dlangui/widgets/controls.d @@ -115,7 +115,7 @@ class TextWidget : Widget { return this; } - private CalcSaver!(Font, dstring, uint, uint) _measureSaver; + private CalcSaver!(Font, dstring, uint, uint, int) _measureSaver; override void measure(int parentWidth, int parentHeight) { FontRef font = font(); @@ -131,7 +131,7 @@ class TextWidget : Widget { uint flags = textFlags; // optimization: do not measure if nothing changed - if (_measureSaver.check(font.get, text, w, flags) || _needLayout) { + if (_measureSaver.check(font.get, text, w, flags, maxLines) || _needLayout) { Point sz; if (maxLines == 1) { sz = font.textSize(text, w, 4, 0, flags);