From 1a335f6ae320dfedef617564a161b73ff276ca5b Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sat, 3 Oct 2015 18:23:28 +0200 Subject: QQuickTextEdit/Input: revise implicit resizing - take two Referencing unexported symbols (ExtraData) from an inlined method does not work with MinGW. Change-Id: I19935c84c4e2014f73bcd1801d182d193166bd44 Reviewed-by: Liang Qi --- src/quick/items/qquicktextedit.cpp | 17 +++++++++++++++-- src/quick/items/qquicktextedit_p_p.h | 8 ++------ src/quick/items/qquicktextinput.cpp | 17 +++++++++++++++-- src/quick/items/qquicktextinput_p_p.h | 8 ++------ 4 files changed, 34 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp index 9c77f11d74..7cf3b449a0 100644 --- a/src/quick/items/qquicktextedit.cpp +++ b/src/quick/items/qquicktextedit.cpp @@ -773,6 +773,19 @@ void QQuickTextEditPrivate::setBottomPadding(qreal value, bool reset) } } +bool QQuickTextEditPrivate::isImplicitResizeEnabled() const +{ + return !extra.isAllocated() || extra->implicitResize; +} + +void QQuickTextEditPrivate::setImplicitResizeEnabled(bool enabled) +{ + if (!enabled) + extra.value().implicitResize = false; + else if (extra.isAllocated()) + extra->implicitResize = true; +} + QQuickTextEdit::VAlignment QQuickTextEdit::vAlign() const { Q_D(const QQuickTextEdit); @@ -2346,7 +2359,7 @@ void QQuickTextEdit::updateSize() const bool wasInLayout = d->inLayout; d->inLayout = true; - if (!d->extra.isAllocated() || d->extra->implicitResize) + if (d->isImplicitResizeEnabled()) setImplicitWidth(naturalWidth + leftPadding() + rightPadding()); d->inLayout = wasInLayout; if (d->inLayout) // probably the result of a binding loop, but by letting it @@ -2366,7 +2379,7 @@ void QQuickTextEdit::updateSize() QFontMetricsF fm(d->font); qreal newHeight = d->document->isEmpty() ? qCeil(fm.height()) : d->document->size().height(); - if (!d->extra.isAllocated() || d->extra->implicitResize) { + if (d->isImplicitResizeEnabled()) { // ### Setting the implicitWidth triggers another updateSize(), and unless there are bindings nothing has changed. if (!widthValid() && !d->requireImplicitWidth) setImplicitSize(newWidth + leftPadding() + rightPadding(), newHeight + topPadding() + bottomPadding()); diff --git a/src/quick/items/qquicktextedit_p_p.h b/src/quick/items/qquicktextedit_p_p.h index 1ff141f3d5..fed0688fd7 100644 --- a/src/quick/items/qquicktextedit_p_p.h +++ b/src/quick/items/qquicktextedit_p_p.h @@ -155,12 +155,8 @@ public: void setRightPadding(qreal value, bool reset = false); void setBottomPadding(qreal value, bool reset = false); - void setImplicitResizeEnabled(bool enabled) { - if (!enabled) - extra.value().implicitResize = false; - else if (extra.isAllocated()) - extra->implicitResize = true; - } + bool isImplicitResizeEnabled() const; + void setImplicitResizeEnabled(bool enabled); QColor color; QColor selectionColor; diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp index 2303322347..ab8e75bfef 100644 --- a/src/quick/items/qquicktextinput.cpp +++ b/src/quick/items/qquicktextinput.cpp @@ -2796,6 +2796,19 @@ void QQuickTextInputPrivate::setBottomPadding(qreal value, bool reset) } } +bool QQuickTextInputPrivate::isImplicitResizeEnabled() const +{ + return !extra.isAllocated() || extra->implicitResize; +} + +void QQuickTextInputPrivate::setImplicitResizeEnabled(bool enabled) +{ + if (!enabled) + extra.value().implicitResize = false; + else if (extra.isAllocated()) + extra->implicitResize = true; +} + void QQuickTextInputPrivate::updateLayout() { Q_Q(QQuickTextInput); @@ -2821,7 +2834,7 @@ void QQuickTextInputPrivate::updateLayout() line.setLineWidth(INT_MAX); const bool wasInLayout = inLayout; inLayout = true; - if (!extra.isAllocated() || extra->implicitResize) + if (isImplicitResizeEnabled()) q->setImplicitWidth(qCeil(line.naturalTextWidth()) + q->leftPadding() + q->rightPadding()); inLayout = wasInLayout; if (inLayout) // probably the result of a binding loop, but by letting it @@ -2853,7 +2866,7 @@ void QQuickTextInputPrivate::updateLayout() q->polish(); q->update(); - if (!extra.isAllocated() || extra->implicitResize) { + if (isImplicitResizeEnabled()) { if (!requireImplicitWidth && !q->widthValid()) q->setImplicitSize(width + q->leftPadding() + q->rightPadding(), height + q->topPadding() + q->bottomPadding()); else diff --git a/src/quick/items/qquicktextinput_p_p.h b/src/quick/items/qquicktextinput_p_p.h index 7e1f18130e..00d9b2b0fa 100644 --- a/src/quick/items/qquicktextinput_p_p.h +++ b/src/quick/items/qquicktextinput_p_p.h @@ -443,12 +443,8 @@ public: void setRightPadding(qreal value, bool reset = false); void setBottomPadding(qreal value, bool reset = false); - void setImplicitResizeEnabled(bool enabled) { - if (!enabled) - extra.value().implicitResize = false; - else if (extra.isAllocated()) - extra->implicitResize = true; - } + bool isImplicitResizeEnabled() const; + void setImplicitResizeEnabled(bool enabled); private: void removeSelectedText(); -- cgit v1.2.3