summaryrefslogtreecommitdiffstats
path: root/src/controls
diff options
context:
space:
mode:
authorJan Arve Saether <jan-arve.saether@digia.com>2013-09-09 12:51:13 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-20 18:27:18 +0200
commit2ab5962b7a8af8d63023b8118082b49c33493121 (patch)
treee257813688f2a04f24c8fc02a6c9f9e44babcb62 /src/controls
parent36d1c9834c5e1951e6ec8ed70793e74441109a88 (diff)
Pick up baselineOffset from the style.
Change-Id: I126fd3d9b399fa3a7c62685060fd49b1cea4df62 Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
Diffstat (limited to 'src/controls')
-rw-r--r--src/controls/Private/Control.qml1
-rw-r--r--src/controls/Private/qquickstyleitem.cpp68
-rw-r--r--src/controls/Private/qquickstyleitem_p.h2
-rw-r--r--src/controls/Styles/Desktop/CheckBoxStyle.qml2
-rw-r--r--src/controls/Styles/Desktop/ComboBoxStyle.qml1
-rw-r--r--src/controls/Styles/Desktop/RadioButtonStyle.qml1
-rw-r--r--src/controls/Styles/Desktop/SpinBoxStyle.qml1
7 files changed, 75 insertions, 1 deletions
diff --git a/src/controls/Private/Control.qml b/src/controls/Private/Control.qml
index 6b9a44155..f2b234fd8 100644
--- a/src/controls/Private/Control.qml
+++ b/src/controls/Private/Control.qml
@@ -68,6 +68,7 @@ FocusScope {
implicitWidth: __panel ? __panel.implicitWidth: 0
implicitHeight: __panel ? __panel.implicitHeight: 0
+ baselineOffset: __panel ? __panel.baselineOffset: 0
activeFocusOnTab: false
/*! \internal */
diff --git a/src/controls/Private/qquickstyleitem.cpp b/src/controls/Private/qquickstyleitem.cpp
index 82e503ddf..7278ae5b7 100644
--- a/src/controls/Private/qquickstyleitem.cpp
+++ b/src/controls/Private/qquickstyleitem.cpp
@@ -165,6 +165,10 @@ QQuickStyleItem::QQuickStyleItem(QQuickItem *parent)
connect(this, SIGNAL(contentWidthChanged(int)), this, SLOT(updateSizeHint()));
connect(this, SIGNAL(contentHeightChanged(int)), this, SLOT(updateSizeHint()));
connect(this, SIGNAL(widthChanged()), this, SLOT(updateRect()));
+ connect(this, SIGNAL(heightChanged()), this, SLOT(updateRect()));
+
+ connect(this, SIGNAL(heightChanged()), this, SLOT(updateBaselineOffset()));
+ connect(this, SIGNAL(contentHeightChanged(int)), this, SLOT(updateBaselineOffset()));
}
QQuickStyleItem::~QQuickStyleItem()
@@ -879,6 +883,69 @@ QSize QQuickStyleItem::sizeFromContents(int width, int height)
} return size;
}
+qreal QQuickStyleItem::baselineOffset()
+{
+ QRect r;
+ switch (m_itemType) {
+ case RadioButton:
+ r = qApp->style()->subElementRect(QStyle::SE_RadioButtonContents, m_styleoption);
+ break;
+ case Button:
+ r = qApp->style()->subElementRect(QStyle::SE_PushButtonContents, m_styleoption);
+ break;
+ case CheckBox:
+ r = qApp->style()->subElementRect(QStyle::SE_CheckBoxContents, m_styleoption);
+ break;
+ case Edit:
+ r = qApp->style()->subElementRect(QStyle::SE_LineEditContents, m_styleoption);
+ break;
+ case ComboBox:
+ if (const QStyleOptionComboBox *combo = qstyleoption_cast<const QStyleOptionComboBox *>(m_styleoption)) {
+ r = qApp->style()->subControlRect(QStyle::CC_ComboBox, combo, QStyle::SC_ComboBoxEditField);
+ if (style() != QStringLiteral("mac"))
+ r.adjust(0,0,0,1);
+ }
+ break;
+ case SpinBox:
+ if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast<const QStyleOptionSpinBox *>(m_styleoption))
+ r = qApp->style()->subControlRect(QStyle::CC_SpinBox, spinbox, QStyle::SC_SpinBoxEditField);
+ break;
+ default:
+ break;
+ }
+ if (r.isValid()) {
+ const QFontMetrics &fm = m_styleoption->fontMetrics;
+ const float surplus = r.height() - fm.height();
+ float result = float(r.top()) + surplus/2.0 + fm.ascent();
+#ifdef Q_OS_OSX
+ if (style() == QStringLiteral("mac")) {
+ switch (m_itemType) {
+ case Button:
+ case Edit:
+ result -= 1;
+ break;
+ case ComboBox:
+ // adjust back the adjustments done in drawControl(CE_ComboBoxLabel)
+ result += 1;
+ break;
+ default:
+ break;
+ }
+ }
+#endif
+ return result;
+ }
+
+ return 0.;
+}
+
+void QQuickStyleItem::updateBaselineOffset()
+{
+ const qreal baseline = baselineOffset();
+ if (baseline > 0)
+ setBaselineOffset(baseline);
+}
+
void QQuickStyleItem::setContentWidth(int arg)
{
if (m_contentWidth != arg) {
@@ -905,6 +972,7 @@ void QQuickStyleItem::updateRect()
{
initStyleOption();
m_styleoption->rect.setWidth(width());
+ m_styleoption->rect.setHeight(height());
}
int QQuickStyleItem::pixelMetric(const QString &metric)
diff --git a/src/controls/Private/qquickstyleitem_p.h b/src/controls/Private/qquickstyleitem_p.h
index cfe9866eb..336d3b462 100644
--- a/src/controls/Private/qquickstyleitem_p.h
+++ b/src/controls/Private/qquickstyleitem_p.h
@@ -184,6 +184,7 @@ public Q_SLOTS:
QVariant styleHint(const QString&);
void updateSizeHint();
void updateRect();
+ void updateBaselineOffset();
void updateItem(){polish();}
QString hitTest(int x, int y);
QRectF subControlRect(const QString &subcontrolString);
@@ -224,6 +225,7 @@ protected:
private:
QSize sizeFromContents(int width, int height);
+ qreal baselineOffset();
protected:
QWidget *m_dummywidget;
diff --git a/src/controls/Styles/Desktop/CheckBoxStyle.qml b/src/controls/Styles/Desktop/CheckBoxStyle.qml
index 2cc688a7c..819c6a819 100644
--- a/src/controls/Styles/Desktop/CheckBoxStyle.qml
+++ b/src/controls/Styles/Desktop/CheckBoxStyle.qml
@@ -47,7 +47,7 @@ Style {
implicitWidth: styleitem.implicitWidth
implicitHeight: styleitem.implicitHeight
-
+ baselineOffset: styleitem.baselineOffset
StyleItem {
id: styleitem
elementType: "checkbox"
diff --git a/src/controls/Styles/Desktop/ComboBoxStyle.qml b/src/controls/Styles/Desktop/ComboBoxStyle.qml
index 2c1cd7c2d..fd4b6cfe2 100644
--- a/src/controls/Styles/Desktop/ComboBoxStyle.qml
+++ b/src/controls/Styles/Desktop/ComboBoxStyle.qml
@@ -51,6 +51,7 @@ Style {
implicitWidth: 125
implicitHeight: styleItem.implicitHeight
+ baselineOffset: styleItem.baselineOffset
anchors.fill: parent
StyleItem {
id: styleItem
diff --git a/src/controls/Styles/Desktop/RadioButtonStyle.qml b/src/controls/Styles/Desktop/RadioButtonStyle.qml
index 34d1efa8e..4a00ee22a 100644
--- a/src/controls/Styles/Desktop/RadioButtonStyle.qml
+++ b/src/controls/Styles/Desktop/RadioButtonStyle.qml
@@ -48,6 +48,7 @@ Style {
implicitWidth: styleitem.implicitWidth
implicitHeight: styleitem.implicitHeight
+ baselineOffset: styleitem.baselineOffset
StyleItem {
id: styleitem
diff --git a/src/controls/Styles/Desktop/SpinBoxStyle.qml b/src/controls/Styles/Desktop/SpinBoxStyle.qml
index 6fdd407e7..7e1903704 100644
--- a/src/controls/Styles/Desktop/SpinBoxStyle.qml
+++ b/src/controls/Styles/Desktop/SpinBoxStyle.qml
@@ -81,6 +81,7 @@ Style {
implicitWidth: styleitem.implicitWidth
implicitHeight: styleitem.implicitHeight
+ baselineOffset: styleitem.baselineOffset
Item {
id: edit