From 6980a9b2e367ab2c57980bac2b5e8c9a493888b8 Mon Sep 17 00:00:00 2001 From: and3md Date: Sun, 25 Jun 2017 13:56:37 +0200 Subject: [PATCH] Set LineEdit measured size to "aaaaa" size and EditBox to "aaaaa/naaaaa". --- src/dlangui/widgets/editors.d | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/dlangui/widgets/editors.d b/src/dlangui/widgets/editors.d index 0c704a7a..482b2b51 100644 --- a/src/dlangui/widgets/editors.d +++ b/src/dlangui/widgets/editors.d @@ -1899,6 +1899,10 @@ class EditLine : EditWidgetBase { protected dstring _measuredText; protected int[] _measuredTextWidths; protected Point _measuredTextSize; + + protected Point _measuredTextToSetWidgetSize; + protected dstring _textToSetWidgetSize = "aaaaa"d; + protected int[] _measuredTextToSetWidgetSizeWidths; protected dchar _passwordChar = 0; /// password character - 0 for normal editor, some character, e.g. '*' to hide text by replacing all characters with this char @@ -1972,17 +1976,27 @@ class EditLine : EditWidgetBase { //Point sz = font.textSize(text); _measuredText = applyPasswordChar(text); _measuredTextWidths.length = _measuredText.length; - int charsMeasured = font.measureText(_measuredText, _measuredTextWidths, int.max, tabSize); + int charsMeasured = font.measureText(_measuredText, _measuredTextWidths, MAX_WIDTH_UNSPECIFIED, tabSize); _measuredTextSize.x = charsMeasured > 0 ? _measuredTextWidths[charsMeasured - 1]: 0; _measuredTextSize.y = font.height; return _measuredTextSize; } + + protected Point measureTextToSetWidgetSize() { + FontRef font = font(); + _measuredTextToSetWidgetSizeWidths.length = _textToSetWidgetSize.length; + int charsMeasured = font.measureText(_textToSetWidgetSize, _measuredTextToSetWidgetSizeWidths, MAX_WIDTH_UNSPECIFIED, tabSize); + _measuredTextToSetWidgetSize.x = charsMeasured > 0 ? _measuredTextToSetWidgetSizeWidths[charsMeasured - 1]: 0; + _measuredTextToSetWidgetSize.y = font.height; + return _measuredTextToSetWidgetSize; + } /// measure override void measure(int parentWidth, int parentHeight) { updateFontProps(); measureVisibleText(); - measuredContent(parentWidth, parentHeight, _measuredTextSize.x + _leftPaneWidth, _measuredTextSize.y); + measureTextToSetWidgetSize(); + measuredContent(parentWidth, parentHeight, _measuredTextToSetWidgetSize.x + _leftPaneWidth, _measuredTextToSetWidgetSize.y); } override bool handleAction(const Action a) { @@ -2128,6 +2142,10 @@ class EditBox : EditWidgetBase { protected int[] _visibleLinesWidths; // width (in pixels) of visible lines protected CustomCharProps[][] _visibleLinesHighlights; protected CustomCharProps[][] _visibleLinesHighlightsBuf; + + protected Point _measuredTextToSetWidgetSize; + protected dstring _textToSetWidgetSize = "aaaaa/naaaaa"d; + protected int[] _measuredTextToSetWidgetSizeWidths; override protected int lineCount() { return _content.length; @@ -2641,6 +2659,16 @@ class EditBox : EditWidgetBase { return textSz; } + // override to set minimum scrollwidget size - default 100x100 + override protected Point minimumVisibleContentSize() { + FontRef font = font(); + _measuredTextToSetWidgetSizeWidths.length = _textToSetWidgetSize.length; + int charsMeasured = font.measureText(_textToSetWidgetSize, _measuredTextToSetWidgetSizeWidths, MAX_WIDTH_UNSPECIFIED, tabSize); + _measuredTextToSetWidgetSize.x = charsMeasured > 0 ? _measuredTextToSetWidgetSizeWidths[charsMeasured - 1]: 0; + _measuredTextToSetWidgetSize.y = font.height; + return _measuredTextToSetWidgetSize; + } + /// measure override void measure(int parentWidth, int parentHeight) { if (visibility == Visibility.Gone) { @@ -2657,8 +2685,6 @@ class EditBox : EditWidgetBase { } super.measure(parentWidth, parentHeight); - // do we need to add vsbwidth, hsbheight ??? - //measuredContent(parentWidth, parentHeight, textSz.x + vsbwidth, textSz.y + hsbheight); }