From ad6a1b0d26dee4e6474b73f9363fb6726e304e14 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Thu, 5 Mar 2015 23:44:00 +0100 Subject: Add Control::padding for convenience Change-Id: I9a472e2378854ba07ce34ad571f54b0fa4a3755c Reviewed-by: Jari-Pekka Nurmi --- src/controls/qquickcontrol.cpp | 184 +++++++++++++++++++++++-------- src/controls/qquickcontrol_p.h | 30 +++-- src/controls/qquickcontrol_p_p.h | 14 ++- src/imports/controls/BusyIndicator.qml | 5 +- src/imports/controls/Button.qml | 5 +- src/imports/controls/CheckBox.qml | 5 +- src/imports/controls/Frame.qml | 5 +- src/imports/controls/GroupBox.qml | 4 +- src/imports/controls/PageIndicator.qml | 5 +- src/imports/controls/ProgressBar.qml | 5 +- src/imports/controls/RadioButton.qml | 5 +- src/imports/controls/ScrollBar.qml | 5 +- src/imports/controls/ScrollIndicator.qml | 5 +- src/imports/controls/Slider.qml | 5 +- src/imports/controls/Switch.qml | 5 +- src/imports/controls/TabButton.qml | 5 +- src/imports/controls/TextField.qml | 5 +- src/imports/controls/ToggleButton.qml | 5 +- src/imports/controls/ToolButton.qml | 5 +- 19 files changed, 185 insertions(+), 122 deletions(-) diff --git a/src/controls/qquickcontrol.cpp b/src/controls/qquickcontrol.cpp index 0520e5d5..1d843597 100644 --- a/src/controls/qquickcontrol.cpp +++ b/src/controls/qquickcontrol.cpp @@ -53,8 +53,9 @@ QT_BEGIN_NAMESPACE */ QQuickControlPrivate::QQuickControlPrivate() : - hasStyle(false), style(Q_NULLPTR), background(Q_NULLPTR), - topPadding(0), leftPadding(0), rightPadding(0), bottomPadding(0) + hasStyle(false), hasTopPadding(false), hasLeftPadding(false), hasRightPadding(false), hasBottomPadding(false), + padding(0), topPadding(0), leftPadding(0), rightPadding(0), bottomPadding(0), + background(Q_NULLPTR), style(Q_NULLPTR) { } @@ -64,6 +65,46 @@ void QQuickControlPrivate::mirrorChange() q->mirrorChange(); } +void QQuickControlPrivate::setTopPadding(qreal value, bool reset) +{ + Q_Q(QQuickControl); + qreal oldPadding = q->topPadding(); + topPadding = value; + hasTopPadding = !reset; + if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding))) + emit q->topPaddingChanged(); +} + +void QQuickControlPrivate::setLeftPadding(qreal value, bool reset) +{ + Q_Q(QQuickControl); + qreal oldPadding = q->leftPadding(); + leftPadding = value; + hasLeftPadding = !reset; + if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding))) + emit q->leftPaddingChanged(); +} + +void QQuickControlPrivate::setRightPadding(qreal value, bool reset) +{ + Q_Q(QQuickControl); + qreal oldPadding = q->rightPadding(); + rightPadding = value; + hasRightPadding = !reset; + if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding))) + emit q->rightPaddingChanged(); +} + +void QQuickControlPrivate::setBottomPadding(qreal value, bool reset) +{ + Q_Q(QQuickControl); + qreal oldPadding = q->bottomPadding(); + bottomPadding = value; + hasBottomPadding = !reset; + if ((!reset && !qFuzzyCompare(oldPadding, value)) || (reset && !qFuzzyCompare(oldPadding, padding))) + emit q->bottomPaddingChanged(); +} + void QQuickControlPrivate::resolveStyle(QQuickStyle *res) { Q_Q(QQuickControl); @@ -85,6 +126,7 @@ QQuickControl::QQuickControl(QQuickControlPrivate &dd, QQuickItem *parent) : } /*! + \qmlproperty real QtQuickControls2::Control::padding \qmlproperty real QtQuickControls2::Control::topPadding \qmlproperty real QtQuickControls2::Control::leftPadding \qmlproperty real QtQuickControls2::Control::rightPadding @@ -92,63 +134,137 @@ QQuickControl::QQuickControl(QQuickControlPrivate &dd, QQuickItem *parent) : These properties hold the padding. */ +qreal QQuickControl::padding() const +{ + Q_D(const QQuickControl); + return d->padding; +} + +void QQuickControl::setPadding(qreal padding) +{ + Q_D(QQuickControl); + if (qFuzzyCompare(d->padding, padding)) + return; + d->padding = padding; + emit paddingChanged(); + if (!d->hasTopPadding) + emit topPaddingChanged(); + if (!d->hasLeftPadding) + emit leftPaddingChanged(); + if (!d->hasRightPadding) + emit rightPaddingChanged(); + if (!d->hasBottomPadding) + emit bottomPaddingChanged(); +} + +void QQuickControl::resetPadding() +{ + setPadding(0); +} + qreal QQuickControl::topPadding() const { Q_D(const QQuickControl); - return d->topPadding; + if (d->hasTopPadding) + return d->topPadding; + return d->padding; } void QQuickControl::setTopPadding(qreal padding) { Q_D(QQuickControl); - if (!qFuzzyCompare(d->topPadding, padding)) { - d->topPadding = padding; - emit topPaddingChanged(); - } + d->setTopPadding(padding); +} + +void QQuickControl::resetTopPadding() +{ + Q_D(QQuickControl); + d->setTopPadding(0, true); } qreal QQuickControl::leftPadding() const { Q_D(const QQuickControl); - return d->leftPadding; + if (d->hasLeftPadding) + return d->leftPadding; + return d->padding; } void QQuickControl::setLeftPadding(qreal padding) { Q_D(QQuickControl); - if (!qFuzzyCompare(d->leftPadding, padding)) { - d->leftPadding = padding; - emit leftPaddingChanged(); - } + d->setLeftPadding(padding); +} + +void QQuickControl::resetLeftPadding() +{ + Q_D(QQuickControl); + d->setLeftPadding(0, true); } qreal QQuickControl::rightPadding() const { Q_D(const QQuickControl); - return d->rightPadding; + if (d->hasRightPadding) + return d->rightPadding; + return d->padding; } void QQuickControl::setRightPadding(qreal padding) { Q_D(QQuickControl); - if (!qFuzzyCompare(d->rightPadding, padding)) { - d->rightPadding = padding; - emit rightPaddingChanged(); - } + d->setRightPadding(padding); +} + +void QQuickControl::resetRightPadding() +{ + Q_D(QQuickControl); + d->setRightPadding(0, true); } qreal QQuickControl::bottomPadding() const { Q_D(const QQuickControl); - return d->bottomPadding; + if (d->hasBottomPadding) + return d->bottomPadding; + return d->padding; } void QQuickControl::setBottomPadding(qreal padding) { Q_D(QQuickControl); - if (!qFuzzyCompare(d->bottomPadding, padding)) { - d->bottomPadding = padding; - emit bottomPaddingChanged(); + d->setBottomPadding(padding); +} + +void QQuickControl::resetBottomPadding() +{ + Q_D(QQuickControl); + d->setBottomPadding(0, true); +} + +/*! + \qmlproperty Item QtQuickControls2::Control::background + + This property holds the background item. +*/ +QQuickItem *QQuickControl::background() const +{ + Q_D(const QQuickControl); + return d->background; +} + +void QQuickControl::setBackground(QQuickItem *background) +{ + Q_D(QQuickControl); + if (d->background != background) { + delete d->background; + d->background = background; + if (background) { + background->setParentItem(this); + if (qFuzzyIsNull(background->z())) + background->setZ(-1); + } + emit backgroundChanged(); } } @@ -191,32 +307,6 @@ void QQuickControl::resetStyle() setStyle(Q_NULLPTR); } -/*! - \qmlproperty Item QtQuickControls2::Control::background - - This property holds the background item. -*/ -QQuickItem *QQuickControl::background() const -{ - Q_D(const QQuickControl); - return d->background; -} - -void QQuickControl::setBackground(QQuickItem *background) -{ - Q_D(QQuickControl); - if (d->background != background) { - delete d->background; - d->background = background; - if (background) { - background->setParentItem(this); - if (qFuzzyIsNull(background->z())) - background->setZ(-1); - } - emit backgroundChanged(); - } -} - bool QQuickControl::event(QEvent *event) { Q_D(QQuickControl); diff --git a/src/controls/qquickcontrol_p.h b/src/controls/qquickcontrol_p.h index 17f94d7d..3744700e 100644 --- a/src/controls/qquickcontrol_p.h +++ b/src/controls/qquickcontrol_p.h @@ -61,43 +61,53 @@ class Q_QUICKCONTROLS_EXPORT QQuickControl : public QQuickItem, public QQuickSty { Q_OBJECT Q_INTERFACES(QQuickStylable) - Q_PROPERTY(qreal topPadding READ topPadding WRITE setTopPadding NOTIFY topPaddingChanged FINAL) - Q_PROPERTY(qreal leftPadding READ leftPadding WRITE setLeftPadding NOTIFY leftPaddingChanged FINAL) - Q_PROPERTY(qreal rightPadding READ rightPadding WRITE setRightPadding NOTIFY rightPaddingChanged FINAL) - Q_PROPERTY(qreal bottomPadding READ bottomPadding WRITE setBottomPadding NOTIFY bottomPaddingChanged FINAL) - Q_PROPERTY(QQuickStyle *style READ style WRITE setStyle RESET resetStyle NOTIFY styleChanged FINAL) + Q_PROPERTY(qreal padding READ padding WRITE setPadding RESET resetPadding NOTIFY paddingChanged FINAL) + Q_PROPERTY(qreal topPadding READ topPadding WRITE setTopPadding RESET resetTopPadding NOTIFY topPaddingChanged FINAL) + Q_PROPERTY(qreal leftPadding READ leftPadding WRITE setLeftPadding RESET resetLeftPadding NOTIFY leftPaddingChanged FINAL) + Q_PROPERTY(qreal rightPadding READ rightPadding WRITE setRightPadding RESET resetRightPadding NOTIFY rightPaddingChanged FINAL) + Q_PROPERTY(qreal bottomPadding READ bottomPadding WRITE setBottomPadding RESET resetBottomPadding NOTIFY bottomPaddingChanged FINAL) Q_PROPERTY(QQuickItem *background READ background WRITE setBackground NOTIFY backgroundChanged FINAL) + Q_PROPERTY(QQuickStyle *style READ style WRITE setStyle RESET resetStyle NOTIFY styleChanged FINAL) public: explicit QQuickControl(QQuickItem *parent = Q_NULLPTR); + qreal padding() const; + void setPadding(qreal padding); + void resetPadding(); + qreal topPadding() const; void setTopPadding(qreal padding); + void resetTopPadding(); qreal leftPadding() const; void setLeftPadding(qreal padding); + void resetLeftPadding(); qreal rightPadding() const; void setRightPadding(qreal padding); + void resetRightPadding(); qreal bottomPadding() const; void setBottomPadding(qreal padding); + void resetBottomPadding(); + + QQuickItem *background() const; + void setBackground(QQuickItem *background); QQuickStyle *style() const Q_DECL_OVERRIDE; void setStyle(QQuickStyle *style) Q_DECL_OVERRIDE; bool hasStyle() const Q_DECL_OVERRIDE; void resetStyle() Q_DECL_OVERRIDE; - QQuickItem *background() const; - void setBackground(QQuickItem *background); - Q_SIGNALS: - void styleChanged(); - void backgroundChanged(); + void paddingChanged(); void topPaddingChanged(); void leftPaddingChanged(); void rightPaddingChanged(); void bottomPaddingChanged(); + void backgroundChanged(); + void styleChanged(); protected: QQuickControl(QQuickControlPrivate &dd, QQuickItem *parent); diff --git a/src/controls/qquickcontrol_p_p.h b/src/controls/qquickcontrol_p_p.h index cc593252..afd05385 100644 --- a/src/controls/qquickcontrol_p_p.h +++ b/src/controls/qquickcontrol_p_p.h @@ -62,15 +62,25 @@ public: void mirrorChange() Q_DECL_OVERRIDE; + void setTopPadding(qreal value, bool reset = false); + void setLeftPadding(qreal value, bool reset = false); + void setRightPadding(qreal value, bool reset = false); + void setBottomPadding(qreal value, bool reset = false); + void resolveStyle(QQuickStyle *other = 0); bool hasStyle; - QQuickStyle *style; - QQuickItem *background; + bool hasTopPadding; + bool hasLeftPadding; + bool hasRightPadding; + bool hasBottomPadding; + qreal padding; qreal topPadding; qreal leftPadding; qreal rightPadding; qreal bottomPadding; + QQuickItem *background; + QQuickStyle *style; }; QT_END_NAMESPACE diff --git a/src/imports/controls/BusyIndicator.qml b/src/imports/controls/BusyIndicator.qml index f13b579f..690940b0 100644 --- a/src/imports/controls/BusyIndicator.qml +++ b/src/imports/controls/BusyIndicator.qml @@ -45,10 +45,7 @@ AbstractBusyIndicator { Accessible.role: Accessible.Indicator - topPadding: style.padding - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding + padding: style.padding indicator: Item { id: delegate diff --git a/src/imports/controls/Button.qml b/src/imports/controls/Button.qml index f77e5685..b54856a9 100644 --- a/src/imports/controls/Button.qml +++ b/src/imports/controls/Button.qml @@ -49,10 +49,7 @@ AbstractButton { Accessible.pressed: pressed Accessible.role: Accessible.Button - topPadding: style.padding - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding + padding: style.padding label: Text { x: control.leftPadding diff --git a/src/imports/controls/CheckBox.qml b/src/imports/controls/CheckBox.qml index b100fcb5..559fda3b 100644 --- a/src/imports/controls/CheckBox.qml +++ b/src/imports/controls/CheckBox.qml @@ -53,10 +53,7 @@ AbstractCheckBox { Accessible.pressed: pressed Accessible.role: Accessible.CheckBox - topPadding: style.padding - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding + padding: style.padding indicator: Rectangle { readonly property bool mirror: control.effectiveLayoutDirection == Qt.RightToLeft diff --git a/src/imports/controls/Frame.qml b/src/imports/controls/Frame.qml index 766e5e30..bff6dd68 100644 --- a/src/imports/controls/Frame.qml +++ b/src/imports/controls/Frame.qml @@ -50,10 +50,7 @@ AbstractFrame { contentWidth: content.children.length === 1 ? content.children[0].implicitWidth : 0 contentHeight: content.children.length === 1 ? content.children[0].implicitHeight : 0 - topPadding: style.padding - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding + padding: style.padding contentItem: Item { id: content diff --git a/src/imports/controls/GroupBox.qml b/src/imports/controls/GroupBox.qml index 2e278e3a..f3f032a8 100644 --- a/src/imports/controls/GroupBox.qml +++ b/src/imports/controls/GroupBox.qml @@ -50,10 +50,8 @@ AbstractGroupBox { contentWidth: content.children.length === 1 ? content.children[0].implicitWidth : 0 contentHeight: content.children.length === 1 ? content.children[0].implicitHeight : 0 + padding: style.padding topPadding: style.padding + (label && title ? label.implicitHeight + style.spacing : 0) - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding contentItem: Item { id: content diff --git a/src/imports/controls/PageIndicator.qml b/src/imports/controls/PageIndicator.qml index 23a4a28d..28913866 100644 --- a/src/imports/controls/PageIndicator.qml +++ b/src/imports/controls/PageIndicator.qml @@ -61,10 +61,7 @@ AbstractPageIndicator { implicitWidth: Math.max(background ? background.implicitWidth : 0, contentWidth + leftPadding + rightPadding) implicitHeight: Math.max(background ? background.implicitHeight : 0, contentHeight + topPadding + bottomPadding) - topPadding: style.padding - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding + padding: style.padding contentItem: Row { id: row diff --git a/src/imports/controls/ProgressBar.qml b/src/imports/controls/ProgressBar.qml index bb3ac3a3..9e136fc2 100644 --- a/src/imports/controls/ProgressBar.qml +++ b/src/imports/controls/ProgressBar.qml @@ -47,10 +47,7 @@ AbstractProgressBar { Accessible.role: Accessible.ProgressBar - topPadding: style.padding - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding + padding: style.padding indicator: Item { x: control.leftPadding diff --git a/src/imports/controls/RadioButton.qml b/src/imports/controls/RadioButton.qml index 82ecc10c..51fb0192 100644 --- a/src/imports/controls/RadioButton.qml +++ b/src/imports/controls/RadioButton.qml @@ -53,10 +53,7 @@ AbstractRadioButton { Accessible.pressed: pressed Accessible.role: Accessible.RadioButton - topPadding: style.padding - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding + padding: style.padding indicator: Rectangle { readonly property bool mirror: control.effectiveLayoutDirection == Qt.RightToLeft diff --git a/src/imports/controls/ScrollBar.qml b/src/imports/controls/ScrollBar.qml index e14b64ff..704ad503 100644 --- a/src/imports/controls/ScrollBar.qml +++ b/src/imports/controls/ScrollBar.qml @@ -48,10 +48,7 @@ AbstractScrollBar { Accessible.pressed: pressed Accessible.role: Accessible.ScrollBar - topPadding: 2 - leftPadding: 2 - rightPadding: 2 - bottomPadding: 2 + padding: 2 handle: Rectangle { id: handle diff --git a/src/imports/controls/ScrollIndicator.qml b/src/imports/controls/ScrollIndicator.qml index 0b361e87..1fc1ddda 100644 --- a/src/imports/controls/ScrollIndicator.qml +++ b/src/imports/controls/ScrollIndicator.qml @@ -47,10 +47,7 @@ AbstractScrollIndicator { Accessible.role: Accessible.Indicator - topPadding: 2 - leftPadding: 2 - rightPadding: 2 - bottomPadding: 2 + padding: 2 indicator: Rectangle { id: indicator diff --git a/src/imports/controls/Slider.qml b/src/imports/controls/Slider.qml index 82eac87e..5af9ec59 100644 --- a/src/imports/controls/Slider.qml +++ b/src/imports/controls/Slider.qml @@ -50,10 +50,7 @@ AbstractSlider { Accessible.pressed: pressed Accessible.role: Accessible.Slider - topPadding: style.padding - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding + padding: style.padding handle: Rectangle { implicitWidth: 20 diff --git a/src/imports/controls/Switch.qml b/src/imports/controls/Switch.qml index 4ce9801d..0b69000f 100644 --- a/src/imports/controls/Switch.qml +++ b/src/imports/controls/Switch.qml @@ -54,10 +54,7 @@ AbstractSwitch { Accessible.pressed: pressed Accessible.role: Accessible.Button // TODO: Switch? - topPadding: style.padding - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding + padding: style.padding indicator: Rectangle { readonly property bool mirror: control.effectiveLayoutDirection == Qt.RightToLeft diff --git a/src/imports/controls/TabButton.qml b/src/imports/controls/TabButton.qml index e1621c85..9a67b31e 100644 --- a/src/imports/controls/TabButton.qml +++ b/src/imports/controls/TabButton.qml @@ -50,10 +50,7 @@ AbstractTabButton { Accessible.selected: checked Accessible.role: Accessible.PageTab - topPadding: style.padding - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding + padding: style.padding label: Text { x: control.leftPadding diff --git a/src/imports/controls/TextField.qml b/src/imports/controls/TextField.qml index 12d5e404..cad8c329 100644 --- a/src/imports/controls/TextField.qml +++ b/src/imports/controls/TextField.qml @@ -54,10 +54,7 @@ AbstractTextField { Accessible.passwordEdit: !!input && (input.echoMode == TextInput.Password || input.echoMode === TextInput.PasswordEchoOnEdit) - topPadding: style.padding - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding + padding: style.padding input: TextInput { x: control.leftPadding diff --git a/src/imports/controls/ToggleButton.qml b/src/imports/controls/ToggleButton.qml index a043f290..4f82d7fb 100644 --- a/src/imports/controls/ToggleButton.qml +++ b/src/imports/controls/ToggleButton.qml @@ -54,10 +54,7 @@ AbstractToggleButton { Accessible.pressed: pressed Accessible.role: Accessible.Button - topPadding: style.padding - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding + padding: style.padding indicator: Rectangle { readonly property bool mirror: control.effectiveLayoutDirection == Qt.RightToLeft diff --git a/src/imports/controls/ToolButton.qml b/src/imports/controls/ToolButton.qml index 9f838cb0..5e21374d 100644 --- a/src/imports/controls/ToolButton.qml +++ b/src/imports/controls/ToolButton.qml @@ -49,10 +49,7 @@ AbstractButton { Accessible.pressed: pressed Accessible.role: Accessible.Button - topPadding: style.padding - leftPadding: style.padding - rightPadding: style.padding - bottomPadding: style.padding + padding: style.padding label: Text { x: control.leftPadding -- cgit v1.2.3