aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJarkko Koivikko <jarkko.koivikko@code-q.fi>2017-08-01 10:39:30 +0300
committerJarkko Koivikko <jarkko.koivikko@code-q.fi>2017-08-21 12:47:59 +0000
commit4bd38e1de5a893a1cf6ba04686b2ff73077d61cb (patch)
tree7554408847d822c41bffcd2f232dda60a8bc6215 /src
parent55b63ce2b6f9312c471b77bb06fae8fe71fd6513 (diff)
Add Arabic handwriting
[ChangeLog] Added Arabic handwriting. Change-Id: Ica0601da2df262369159415d28fdb183e6f63736 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/virtualkeyboard/3rdparty/t9write/t9write.pro1
-rw-r--r--src/virtualkeyboard/3rdparty/t9write/unpack.py3
-rw-r--r--src/virtualkeyboard/content/components/InputModeKey.qml1
-rw-r--r--src/virtualkeyboard/content/layouts/ar_AR/handwriting.qml116
-rw-r--r--src/virtualkeyboard/content/layouts/ar_AR/main.qml12
-rw-r--r--src/virtualkeyboard/content/styles/default/style.qml5
-rw-r--r--src/virtualkeyboard/content/styles/retro/style.qml5
-rw-r--r--src/virtualkeyboard/doc/src/build.qdoc2
-rw-r--r--src/virtualkeyboard/hunspellinputmethod.cpp3
-rw-r--r--src/virtualkeyboard/inputengine.cpp3
-rw-r--r--src/virtualkeyboard/inputengine.h1
-rw-r--r--src/virtualkeyboard/plaininputmethod.cpp3
-rw-r--r--src/virtualkeyboard/t9writeinputmethod.cpp28
-rw-r--r--src/virtualkeyboard/virtualkeyboard.pro2
14 files changed, 182 insertions, 3 deletions
diff --git a/src/virtualkeyboard/3rdparty/t9write/t9write.pro b/src/virtualkeyboard/3rdparty/t9write/t9write.pro
index f6dddf1c..1a41a03d 100644
--- a/src/virtualkeyboard/3rdparty/t9write/t9write.pro
+++ b/src/virtualkeyboard/3rdparty/t9write/t9write.pro
@@ -3,6 +3,7 @@ TARGET = qtt9write_db
CONFIG += static
T9WRITE_RESOURCE_FILES = \
+ $$files(data/arabic/*.bin) \
$$files(data/*.bin) \
$$files(data/*.ldb) \
$$files(data/*.hdb) \
diff --git a/src/virtualkeyboard/3rdparty/t9write/unpack.py b/src/virtualkeyboard/3rdparty/t9write/unpack.py
index bf02a23a..66ad4f0c 100644
--- a/src/virtualkeyboard/3rdparty/t9write/unpack.py
+++ b/src/virtualkeyboard/3rdparty/t9write/unpack.py
@@ -90,6 +90,9 @@ UNPACK_RULES = {
'*/xxt9wApiOem.h',
'*/xxt9wOem.h',
],
+'data/arabic': [
+ '*/Arabic/_databas_le.bin',
+],
'data': [
'*/_databas_le.bin',
'*/*.hdb',
diff --git a/src/virtualkeyboard/content/components/InputModeKey.qml b/src/virtualkeyboard/content/components/InputModeKey.qml
index 2b7492a4..feec20b5 100644
--- a/src/virtualkeyboard/content/components/InputModeKey.qml
+++ b/src/virtualkeyboard/content/components/InputModeKey.qml
@@ -70,6 +70,7 @@ Key {
"全角", // InputEngine.FullwidthLatin
"ΑΒΓ", // InputEngine.Greek
"АБВ", // InputEngine.Cyrillic
+ "\u0623\u200C\u0628\u200C\u062C", // InputEngine.Arabic
"中文", // InputEngine.ChineseHandwriting
"日本語", // InputEngine.JapaneseHandwriting
"한국어", // InputEngine.KoreanHandwriting
diff --git a/src/virtualkeyboard/content/layouts/ar_AR/handwriting.qml b/src/virtualkeyboard/content/layouts/ar_AR/handwriting.qml
new file mode 100644
index 00000000..f84d47dc
--- /dev/null
+++ b/src/virtualkeyboard/content/layouts/ar_AR/handwriting.qml
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** 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 https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Layouts 1.0
+import QtQuick.VirtualKeyboard 2.3
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+ inputMode: InputEngine.Arabic
+ readonly property bool alphabeticInputMode: [InputEngine.Latin, InputEngine.Dialable].indexOf(InputContext.inputEngine.inputMode) !== -1
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ KeyboardColumn {
+ Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width
+ KeyboardRow {
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.HandwritingRecoginition
+ horizontalRulers:
+ alphabeticInputMode ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ }
+ KeyboardColumn {
+ Layout.preferredWidth: hideKeyboardKey.width
+ KeyboardRow {
+ BackspaceKey {}
+ }
+ KeyboardRow {
+ EnterKey {}
+ }
+ KeyboardRow {
+ ShiftKey { }
+ }
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 154
+ InputModeKey {
+ weight: 217
+ inputModeNameList: [
+ "ABC", // InputEngine.Latin
+ "\u0660\u0661\u0662", // InputEngine.Numeric
+ "123", // InputEngine.Dialable
+ "", // InputEngine.Pinyin
+ "", // InputEngine.Cangjie
+ "", // InputEngine.Zhuyin
+ "", // InputEngine.Hangul
+ "", // InputEngine.Hiragana
+ "", // InputEngine.Katakana
+ "", // InputEngine.FullwidthLatin
+ "", // InputEngine.Greek
+ "", // InputEngine.Cyrillic
+ "\u0623\u200C\u0628\u200C\u062C", // InputEngine.Arabic
+ ]
+ }
+ ChangeLanguageKey {
+ weight: 154
+ customLayoutsOnly: true
+ }
+ HandwritingModeKey {
+ weight: 154
+ }
+ SpaceKey {
+ weight: 864
+ }
+ Key {
+ key: alphabeticInputMode ? Qt.Key_Apostrophe : 0x060C
+ text: alphabeticInputMode ? "'" : "\u060C"
+ alternativeKeys: alphabeticInputMode ? "<>()#%&*/\\\"'=+-_" : "\"\u060C\u066B\u066C\u066D"
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: alphabeticInputMode ? ":;,.?!" : ":\u061B.\u061F!"
+ }
+ HideKeyboardKey {
+ id: hideKeyboardKey
+ weight: 204
+ }
+ }
+}
diff --git a/src/virtualkeyboard/content/layouts/ar_AR/main.qml b/src/virtualkeyboard/content/layouts/ar_AR/main.qml
index 9e53caca..e79847ec 100644
--- a/src/virtualkeyboard/content/layouts/ar_AR/main.qml
+++ b/src/virtualkeyboard/content/layouts/ar_AR/main.qml
@@ -28,10 +28,10 @@
****************************************************************************/
import QtQuick 2.0
-import QtQuick.VirtualKeyboard 2.1
+import QtQuick.VirtualKeyboard 2.3
KeyboardLayoutLoader {
- inputMode: InputEngine.Latin
+ inputMode: InputEngine.Arabic
sourceComponent: InputContext.shift ? page2 : page1
Component {
id: page1
@@ -163,13 +163,16 @@ KeyboardLayoutLoader {
ChangeLanguageKey {
weight: 154
}
+ HandwritingModeKey {
+ weight: 154
+ }
SpaceKey {
weight: 864
}
Key {
key: 0x060C
text: "\u060C"
- alternativeKeys: ".,\u060C\u061F"
+ alternativeKeys: "\"\u061F\u060C.!:\u061B\u066B\u066C\u066D"
}
Key {
key: 0xE000
@@ -312,6 +315,9 @@ KeyboardLayoutLoader {
ChangeLanguageKey {
weight: 154
}
+ HandwritingModeKey {
+ weight: 154
+ }
SpaceKey {
weight: 864
}
diff --git a/src/virtualkeyboard/content/styles/default/style.qml b/src/virtualkeyboard/content/styles/default/style.qml
index 050cc276..595c7b79 100644
--- a/src/virtualkeyboard/content/styles/default/style.qml
+++ b/src/virtualkeyboard/content/styles/default/style.qml
@@ -760,12 +760,17 @@ KeyboardStyle {
text: {
switch (InputContext.inputEngine.inputMode) {
case InputEngine.Numeric:
+ if (["ar", "fa"].indexOf(InputContext.locale.substring(0, 2)) !== -1)
+ return "\u0660\u0661\u0662"
+ // Fallthrough
case InputEngine.Dialable:
return "123"
case InputEngine.Greek:
return "ΑΒΓ"
case InputEngine.Cyrillic:
return "АБВ"
+ case InputEngine.Arabic:
+ return "\u0623\u200C\u0628\u200C\u062C"
case InputEngine.ChineseHandwriting:
return "中文"
case InputEngine.JapaneseHandwriting:
diff --git a/src/virtualkeyboard/content/styles/retro/style.qml b/src/virtualkeyboard/content/styles/retro/style.qml
index bdf6a33f..888f4b50 100644
--- a/src/virtualkeyboard/content/styles/retro/style.qml
+++ b/src/virtualkeyboard/content/styles/retro/style.qml
@@ -874,12 +874,17 @@ KeyboardStyle {
text: {
switch (InputContext.inputEngine.inputMode) {
case InputEngine.Numeric:
+ if (["ar", "fa"].indexOf(InputContext.locale.substring(0, 2)) !== -1)
+ return "\u0660\u0661\u0662"
+ // Fallthrough
case InputEngine.Dialable:
return "123"
case InputEngine.Greek:
return "ΑΒΓ"
case InputEngine.Cyrillic:
return "АБВ"
+ case InputEngine.Arabic:
+ return "\u0623\u200C\u0628\u200C\u062C"
case InputEngine.ChineseHandwriting:
return "中文"
case InputEngine.JapaneseHandwriting:
diff --git a/src/virtualkeyboard/doc/src/build.qdoc b/src/virtualkeyboard/doc/src/build.qdoc
index 9b18a54d..a38af1a5 100644
--- a/src/virtualkeyboard/doc/src/build.qdoc
+++ b/src/virtualkeyboard/doc/src/build.qdoc
@@ -314,6 +314,8 @@ $ python unpack.py T9Write_Alpha_v7-8-0_SDK.zip .
│ ├─── t9write*.h
│ └─── xxt9w*.h
├─── data
+ │ ├─── arabic
+ │ │ └─── *.bin [T9 Write Arabic]
│ ├─── *.bin [T9 Write Alphabetic]
│ ├─── *.hdb
│ ├─── *.phd
diff --git a/src/virtualkeyboard/hunspellinputmethod.cpp b/src/virtualkeyboard/hunspellinputmethod.cpp
index 20c345bb..c77e3265 100644
--- a/src/virtualkeyboard/hunspellinputmethod.cpp
+++ b/src/virtualkeyboard/hunspellinputmethod.cpp
@@ -61,6 +61,9 @@ QList<InputEngine::InputMode> HunspellInputMethod::inputModes(const QString &loc
case QLocale::CyrillicScript:
result.append(InputEngine::Cyrillic);
break;
+ case QLocale::ArabicScript:
+ result.append(InputEngine::Arabic);
+ break;
default:
break;
}
diff --git a/src/virtualkeyboard/inputengine.cpp b/src/virtualkeyboard/inputengine.cpp
index 070834a4..8b1a1cbd 100644
--- a/src/virtualkeyboard/inputengine.cpp
+++ b/src/virtualkeyboard/inputengine.cpp
@@ -766,6 +766,7 @@ void InputEngine::timerEvent(QTimerEvent *timerEvent)
\li \c InputEngine.FullwidthLatin Fullwidth latin input mode for East Asian languages.
\li \c InputEngine.Greek Greek input mode.
\li \c InputEngine.Cyrillic Cyrillic input mode.
+ \li \c InputEngine.Arabic Arabic input mode.
\li \c InputEngine.ChineseHandwriting Chinese handwriting.
\li \c InputEngine.JapaneseHandwriting Japanese handwriting.
\li \c InputEngine.KoreanHandwriting Korean handwriting.
@@ -840,6 +841,8 @@ void InputEngine::timerEvent(QTimerEvent *timerEvent)
Greek input mode.
\value Cyrillic
Cyrillic input mode.
+ \value Arabic
+ Arabic input mode.
*/
/*!
diff --git a/src/virtualkeyboard/inputengine.h b/src/virtualkeyboard/inputengine.h
index 53251688..9f6ed0d0 100644
--- a/src/virtualkeyboard/inputengine.h
+++ b/src/virtualkeyboard/inputengine.h
@@ -76,6 +76,7 @@ public:
FullwidthLatin,
Greek,
Cyrillic,
+ Arabic,
ChineseHandwriting,
JapaneseHandwriting,
KoreanHandwriting
diff --git a/src/virtualkeyboard/plaininputmethod.cpp b/src/virtualkeyboard/plaininputmethod.cpp
index 8d77ac4e..3b1465d2 100644
--- a/src/virtualkeyboard/plaininputmethod.cpp
+++ b/src/virtualkeyboard/plaininputmethod.cpp
@@ -57,6 +57,9 @@ QList<InputEngine::InputMode> PlainInputMethod::inputModes(const QString &locale
case QLocale::CyrillicScript:
result.append(InputEngine::Cyrillic);
break;
+ case QLocale::ArabicScript:
+ result.append(InputEngine::Arabic);
+ break;
default:
break;
}
diff --git a/src/virtualkeyboard/t9writeinputmethod.cpp b/src/virtualkeyboard/t9writeinputmethod.cpp
index 3e52a84b..8479ae5a 100644
--- a/src/virtualkeyboard/t9writeinputmethod.cpp
+++ b/src/virtualkeyboard/t9writeinputmethod.cpp
@@ -109,6 +109,7 @@ public:
enum EngineMode {
EngineUninitialized,
Alphabetic,
+ Arabic,
SimplifiedChinese,
TraditionalChinese,
HongKongChinese,
@@ -190,6 +191,7 @@ public:
switch (newEngineMode) {
case Alphabetic:
+ case Arabic:
cjk = false;
break;
case SimplifiedChinese:
@@ -296,6 +298,9 @@ public:
case Alphabetic:
hwrDbPath.append(QLatin1String("_databas_le.bin"));
break;
+ case Arabic:
+ hwrDbPath.append(QLatin1String("arabic/_databas_le.bin"));
+ break;
case SimplifiedChinese:
hwrDbPath.append(QLatin1String("cjk_S_gb18030_le.hdb"));
break;
@@ -468,6 +473,8 @@ public:
#endif
#ifdef HAVE_T9WRITE_ALPHABETIC
+ if (locale.script() == QLocale::ArabicScript)
+ return T9WriteInputMethodPrivate::Arabic;
return T9WriteInputMethodPrivate::Alphabetic;
#else
return T9WriteInputMethodPrivate::EngineUninitialized;
@@ -632,6 +639,9 @@ public:
} else if (language == DECUMA_LANG_SRCY) {
if (inputMode != InputEngine::Cyrillic)
language = DECUMA_LANG_SRLA;
+ } else if (language == DECUMA_LANG_AR) {
+ if (inputMode != InputEngine::Arabic && inputMode != InputEngine::Numeric)
+ language = DECUMA_LANG_EN;
}
return language;
@@ -693,6 +703,12 @@ public:
break;
case InputEngine::Numeric:
+ if (language == DECUMA_LANG_AR) {
+ symbolCategories.append(DECUMA_CATEGORY_ARABIC_NUM_MODE);
+ symbolCategories.append(DECUMA_CATEGORY_ARABIC_GESTURES);
+ leftToRightGestures = false;
+ break;
+ }
symbolCategories.append(DECUMA_CATEGORY_DIGIT);
if (!inputMethodHints.testFlag(Qt::ImhDigitsOnly))
symbolCategories.append(DECUMA_CATEGORY_NUM_SUP);
@@ -720,6 +736,12 @@ public:
symbolCategories.append(DECUMA_CATEGORY_CONTRACTION_MARK);
break;
+ case InputEngine::Arabic:
+ symbolCategories.append(DECUMA_CATEGORY_ARABIC_ISOLATED_LETTER_MODE);
+ symbolCategories.append(DECUMA_CATEGORY_ARABIC_GESTURES);
+ leftToRightGestures = false;
+ break;
+
default:
qWarning() << "Handwriting is not supported in" << locale.name();
return false;
@@ -1557,6 +1579,12 @@ QList<InputEngine::InputMode> T9WriteInputMethod::inputModes(const QString &loca
availableInputModes.append(InputEngine::Latin);
}
break;
+ case T9WriteInputMethodPrivate::Arabic:
+ if (d->findHwrDb(T9WriteInputMethodPrivate::Arabic, d->defaultHwrDbPath).isEmpty())
+ return availableInputModes;
+ if (!(inputMethodHints & (Qt::ImhDialableCharactersOnly | Qt::ImhFormattedNumbersOnly | Qt::ImhDigitsOnly | Qt::ImhLatinOnly)))
+ availableInputModes.append(InputEngine::Arabic);
+ break;
#endif
#ifdef HAVE_T9WRITE_CJK
case T9WriteInputMethodPrivate::SimplifiedChinese:
diff --git a/src/virtualkeyboard/virtualkeyboard.pro b/src/virtualkeyboard/virtualkeyboard.pro
index 76599f51..83d0b408 100644
--- a/src/virtualkeyboard/virtualkeyboard.pro
+++ b/src/virtualkeyboard/virtualkeyboard.pro
@@ -84,6 +84,8 @@ contains(CONFIG, lang-ar.*) {
content/layouts/ar_AR/main.qml \
content/layouts/ar_AR/numbers.qml \
content/layouts/ar_AR/symbols.qml
+t9write-alphabetic: LAYOUT_FILES += \
+ content/layouts/ar_AR/handwriting.qml
}
contains(CONFIG, lang-bg.*) {
LAYOUT_FILES += \