aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-01-06 17:16:55 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2017-01-10 14:09:51 +0000
commit0a86cab635e66ba44dcf3866c698aa1d037acff9 (patch)
tree6d7b4eb478cb44376c02bdc518672e01fa1651f1 /src
parent04502964550874bef7cb35d3a6f642f8ab7c61c2 (diff)
Editors: fix placeholder text alignment
The internal QQuickPlaceholderText creates an "implicit binding" to the editor's horizontalAlignment, meaning that the placeholder respects the editor's horizontal alignment when explicitly set, and otherwise determines the alignment from the placeholder text's visual direction. [ChangeLog][Controls][TextField] Fixed the horizontal alignment of the placeholder text in right-to-left UIs. [ChangeLog][Controls][TextArea] Fixed the horizontal alignment of the placeholder text in right-to-left UIs. Task-number: QTBUG-55999 Change-Id: If1a8596c35c1920874996277520f1c54430c5f69 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/imports/controls/TextArea.qml3
-rw-r--r--src/imports/controls/TextField.qml3
-rw-r--r--src/imports/controls/material/TextArea.qml5
-rw-r--r--src/imports/controls/material/TextField.qml5
-rw-r--r--src/imports/controls/qtquickcontrols2plugin.cpp2
-rw-r--r--src/imports/controls/universal/TextArea.qml5
-rw-r--r--src/imports/controls/universal/TextField.qml5
-rw-r--r--src/quickcontrols2/qquickplaceholdertext.cpp73
-rw-r--r--src/quickcontrols2/qquickplaceholdertext_p.h74
-rw-r--r--src/quickcontrols2/quickcontrols2.pri2
10 files changed, 165 insertions, 12 deletions
diff --git a/src/imports/controls/TextArea.qml b/src/imports/controls/TextArea.qml
index 88db299b..6a80bb69 100644
--- a/src/imports/controls/TextArea.qml
+++ b/src/imports/controls/TextArea.qml
@@ -57,7 +57,7 @@ T.TextArea {
selectionColor: Default.textSelectionColor
selectedTextColor: color
- Text {
+ PlaceholderText {
id: placeholder
x: control.leftPadding
y: control.topPadding
@@ -67,7 +67,6 @@ T.TextArea {
text: control.placeholderText
font: control.font
color: Default.textDisabledLightColor
- horizontalAlignment: control.horizontalAlignment
verticalAlignment: control.verticalAlignment
visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
elide: Text.ElideRight
diff --git a/src/imports/controls/TextField.qml b/src/imports/controls/TextField.qml
index 0f665344..1e62ac55 100644
--- a/src/imports/controls/TextField.qml
+++ b/src/imports/controls/TextField.qml
@@ -58,7 +58,7 @@ T.TextField {
selectedTextColor: color
verticalAlignment: TextInput.AlignVCenter
- Text {
+ PlaceholderText {
id: placeholder
x: control.leftPadding
y: control.topPadding
@@ -68,7 +68,6 @@ T.TextField {
text: control.placeholderText
font: control.font
color: Default.textDisabledColor
- horizontalAlignment: control.horizontalAlignment
verticalAlignment: control.verticalAlignment
visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
elide: Text.ElideRight
diff --git a/src/imports/controls/material/TextArea.qml b/src/imports/controls/material/TextArea.qml
index 5c4f0279..19f0cca4 100644
--- a/src/imports/controls/material/TextArea.qml
+++ b/src/imports/controls/material/TextArea.qml
@@ -36,6 +36,8 @@
import QtQuick 2.9
import QtQuick.Templates 2.2 as T
+import QtQuick.Controls 2.2
+import QtQuick.Controls.impl 2.2
import QtQuick.Controls.Material 2.2
import QtQuick.Controls.Material.impl 2.2
@@ -58,7 +60,7 @@ T.TextArea {
cursorDelegate: CursorDelegate { }
- Text {
+ PlaceholderText {
id: placeholder
x: control.leftPadding
y: control.topPadding
@@ -67,7 +69,6 @@ T.TextArea {
text: control.placeholderText
font: control.font
color: control.Material.hintTextColor
- horizontalAlignment: control.horizontalAlignment
verticalAlignment: control.verticalAlignment
elide: Text.ElideRight
visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
diff --git a/src/imports/controls/material/TextField.qml b/src/imports/controls/material/TextField.qml
index eb53992b..2d707151 100644
--- a/src/imports/controls/material/TextField.qml
+++ b/src/imports/controls/material/TextField.qml
@@ -36,6 +36,8 @@
import QtQuick 2.9
import QtQuick.Templates 2.2 as T
+import QtQuick.Controls 2.2
+import QtQuick.Controls.impl 2.2
import QtQuick.Controls.Material 2.2
import QtQuick.Controls.Material.impl 2.2
@@ -59,7 +61,7 @@ T.TextField {
cursorDelegate: CursorDelegate { }
- Text {
+ PlaceholderText {
id: placeholder
x: control.leftPadding
y: control.topPadding
@@ -68,7 +70,6 @@ T.TextField {
text: control.placeholderText
font: control.font
color: control.Material.hintTextColor
- horizontalAlignment: control.horizontalAlignment
verticalAlignment: control.verticalAlignment
elide: Text.ElideRight
visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
diff --git a/src/imports/controls/qtquickcontrols2plugin.cpp b/src/imports/controls/qtquickcontrols2plugin.cpp
index 70f6879b..95ed3776 100644
--- a/src/imports/controls/qtquickcontrols2plugin.cpp
+++ b/src/imports/controls/qtquickcontrols2plugin.cpp
@@ -36,6 +36,7 @@
#include <QtCore/private/qfileselector_p.h>
#include <QtQuickControls2/qquickstyle.h>
+#include <QtQuickControls2/private/qquickplaceholdertext_p.h>
#include <QtQuickControls2/private/qquickstyle_p.h>
#include <QtQuickControls2/private/qquickstyleplugin_p.h>
#include <QtQuickControls2/private/qquickstyleselector_p.h>
@@ -163,6 +164,7 @@ void QtQuickControls2Plugin::initializeEngine(QQmlEngine *engine, const char *ur
qmlRegisterType<QQuickDefaultBusyIndicator>(import, 2, 0, "BusyIndicatorImpl");
qmlRegisterType<QQuickDefaultProgressBar>(import, 2, 0, "ProgressBarImpl");
qmlRegisterType<QQuickDialRing>(import, 2, 0, "DialRing");
+ qmlRegisterType<QQuickPlaceholderText>(import, 2, 2, "PlaceholderText");
qmlRegisterType<QQuickTumblerView>(import, 2, 1, "TumblerView");
qmlRegisterSingletonType<QQuickDefaultStyle>(import, 2, 1, "Default", styleSingleton);
qmlRegisterType(typeUrl(QStringLiteral("CheckIndicator.qml")), import, 2, 0, "CheckIndicator");
diff --git a/src/imports/controls/universal/TextArea.qml b/src/imports/controls/universal/TextArea.qml
index 2b38e678..8d931a96 100644
--- a/src/imports/controls/universal/TextArea.qml
+++ b/src/imports/controls/universal/TextArea.qml
@@ -36,6 +36,8 @@
import QtQuick 2.9
import QtQuick.Templates 2.2 as T
+import QtQuick.Controls 2.2
+import QtQuick.Controls.impl 2.2
import QtQuick.Controls.Universal 2.2
T.TextArea {
@@ -60,7 +62,7 @@ T.TextArea {
selectionColor: Universal.accent
selectedTextColor: Universal.chromeWhiteColor
- Text {
+ PlaceholderText {
id: placeholder
x: control.leftPadding
y: control.topPadding
@@ -72,7 +74,6 @@ T.TextArea {
color: !control.enabled ? control.Universal.chromeDisabledLowColor :
control.activeFocus ? control.Universal.chromeBlackMediumLowColor : control.Universal.baseMediumColor
visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
- horizontalAlignment: control.horizontalAlignment
verticalAlignment: control.verticalAlignment
elide: Text.ElideRight
}
diff --git a/src/imports/controls/universal/TextField.qml b/src/imports/controls/universal/TextField.qml
index 14ade06c..e28c1893 100644
--- a/src/imports/controls/universal/TextField.qml
+++ b/src/imports/controls/universal/TextField.qml
@@ -36,6 +36,8 @@
import QtQuick 2.9
import QtQuick.Templates 2.2 as T
+import QtQuick.Controls 2.2
+import QtQuick.Controls.impl 2.2
import QtQuick.Controls.Universal 2.2
T.TextField {
@@ -61,7 +63,7 @@ T.TextField {
selectedTextColor: Universal.chromeWhiteColor
verticalAlignment: TextInput.AlignVCenter
- Text {
+ PlaceholderText {
id: placeholder
x: control.leftPadding
y: control.topPadding
@@ -73,7 +75,6 @@ T.TextField {
color: !control.enabled ? control.Universal.chromeDisabledLowColor :
control.activeFocus ? control.Universal.chromeBlackMediumLowColor : control.Universal.baseMediumColor
visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
- horizontalAlignment: control.horizontalAlignment
verticalAlignment: control.verticalAlignment
elide: Text.ElideRight
}
diff --git a/src/quickcontrols2/qquickplaceholdertext.cpp b/src/quickcontrols2/qquickplaceholdertext.cpp
new file mode 100644
index 00000000..2fe6be07
--- /dev/null
+++ b/src/quickcontrols2/qquickplaceholdertext.cpp
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qquickplaceholdertext_p.h"
+
+#include <QtQuick/private/qquicktext_p_p.h>
+#include <QtQuick/private/qquicktextinput_p_p.h>
+#include <QtQuick/private/qquicktextedit_p_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QQuickPlaceholderText::QQuickPlaceholderText(QQuickItem *parent) : QQuickText(parent)
+{
+}
+
+void QQuickPlaceholderText::componentComplete()
+{
+ QQuickText::componentComplete();
+ connect(parentItem(), SIGNAL(effectiveHorizontalAlignmentChanged()), this, SLOT(updateAlignment()));
+ updateAlignment();
+}
+
+void QQuickPlaceholderText::updateAlignment()
+{
+ if (QQuickTextInput *input = qobject_cast<QQuickTextInput *>(parentItem())) {
+ if (QQuickTextInputPrivate::get(input)->hAlignImplicit)
+ resetHAlign();
+ else
+ setHAlign(static_cast<HAlignment>(input->hAlign()));
+ } else if (QQuickTextEdit *edit = qobject_cast<QQuickTextEdit *>(parentItem())) {
+ if (QQuickTextEditPrivate::get(edit)->hAlignImplicit)
+ resetHAlign();
+ else
+ setHAlign(static_cast<HAlignment>(edit->hAlign()));
+ } else {
+ resetHAlign();
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/quickcontrols2/qquickplaceholdertext_p.h b/src/quickcontrols2/qquickplaceholdertext_p.h
new file mode 100644
index 00000000..1e49286c
--- /dev/null
+++ b/src/quickcontrols2/qquickplaceholdertext_p.h
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QQUICKPLACEHOLDERTEXT_P_H
+#define QQUICKPLACEHOLDERTEXT_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtQuick/private/qquicktext_p.h>
+#include <QtQuickControls2/private/qtquickcontrols2global_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class Q_QUICKCONTROLS2_PRIVATE_EXPORT QQuickPlaceholderText : public QQuickText
+{
+ Q_OBJECT
+
+public:
+ explicit QQuickPlaceholderText(QQuickItem *parent = nullptr);
+
+protected:
+ void componentComplete() override;
+
+private Q_SLOTS:
+ void updateAlignment();
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QQuickPlaceholderText)
+
+#endif // QQUICKPLACEHOLDERTEXT_P_H
diff --git a/src/quickcontrols2/quickcontrols2.pri b/src/quickcontrols2/quickcontrols2.pri
index eddd14d2..135318a7 100644
--- a/src/quickcontrols2/quickcontrols2.pri
+++ b/src/quickcontrols2/quickcontrols2.pri
@@ -1,6 +1,7 @@
HEADERS += \
$$PWD/qquickanimatednode_p.h \
$$PWD/qquickcolorimageprovider_p.h \
+ $$PWD/qquickplaceholdertext_p.h \
$$PWD/qquickproxytheme_p.h \
$$PWD/qquickstyle.h \
$$PWD/qquickstyle_p.h \
@@ -14,6 +15,7 @@ HEADERS += \
SOURCES += \
$$PWD/qquickanimatednode.cpp \
$$PWD/qquickcolorimageprovider.cpp \
+ $$PWD/qquickplaceholdertext.cpp \
$$PWD/qquickproxytheme.cpp \
$$PWD/qquickstyle.cpp \
$$PWD/qquickstyleattached.cpp \