diff options
author | Jarkko Koivikko <jarkko.koivikko@code-q.fi> | 2017-08-01 10:39:30 +0300 |
---|---|---|
committer | Jarkko Koivikko <jarkko.koivikko@code-q.fi> | 2017-08-21 12:47:59 +0000 |
commit | 4bd38e1de5a893a1cf6ba04686b2ff73077d61cb (patch) | |
tree | 7554408847d822c41bffcd2f232dda60a8bc6215 /src | |
parent | 55b63ce2b6f9312c471b77bb06fae8fe71fd6513 (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.pro | 1 | ||||
-rw-r--r-- | src/virtualkeyboard/3rdparty/t9write/unpack.py | 3 | ||||
-rw-r--r-- | src/virtualkeyboard/content/components/InputModeKey.qml | 1 | ||||
-rw-r--r-- | src/virtualkeyboard/content/layouts/ar_AR/handwriting.qml | 116 | ||||
-rw-r--r-- | src/virtualkeyboard/content/layouts/ar_AR/main.qml | 12 | ||||
-rw-r--r-- | src/virtualkeyboard/content/styles/default/style.qml | 5 | ||||
-rw-r--r-- | src/virtualkeyboard/content/styles/retro/style.qml | 5 | ||||
-rw-r--r-- | src/virtualkeyboard/doc/src/build.qdoc | 2 | ||||
-rw-r--r-- | src/virtualkeyboard/hunspellinputmethod.cpp | 3 | ||||
-rw-r--r-- | src/virtualkeyboard/inputengine.cpp | 3 | ||||
-rw-r--r-- | src/virtualkeyboard/inputengine.h | 1 | ||||
-rw-r--r-- | src/virtualkeyboard/plaininputmethod.cpp | 3 | ||||
-rw-r--r-- | src/virtualkeyboard/t9writeinputmethod.cpp | 28 | ||||
-rw-r--r-- | src/virtualkeyboard/virtualkeyboard.pro | 2 |
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 += \ |