aboutsummaryrefslogtreecommitdiffstats
path: root/src/layouts
diff options
context:
space:
mode:
Diffstat (limited to 'src/layouts')
-rw-r--r--src/layouts/CMakeLists.txt357
-rw-r--r--src/layouts/ar_AR/dialpad.fallback0
-rw-r--r--src/layouts/ar_AR/digits.qml123
-rw-r--r--src/layouts/ar_AR/handwriting.qml101
-rw-r--r--src/layouts/ar_AR/main.qml223
-rw-r--r--src/layouts/ar_AR/numbers.qml196
-rw-r--r--src/layouts/ar_AR/symbols.qml383
-rw-r--r--src/layouts/bg_BG/dialpad.fallback0
-rw-r--r--src/layouts/bg_BG/digits.fallback0
-rw-r--r--src/layouts/bg_BG/handwriting.qml84
-rw-r--r--src/layouts/bg_BG/main.qml383
-rw-r--r--src/layouts/bg_BG/numbers.fallback0
-rw-r--r--src/layouts/bg_BG/symbols.fallback0
-rw-r--r--src/layouts/cs_CZ/dialpad.fallback0
-rw-r--r--src/layouts/cs_CZ/digits.fallback0
-rw-r--r--src/layouts/cs_CZ/handwriting.qml82
-rw-r--r--src/layouts/cs_CZ/main.qml219
-rw-r--r--src/layouts/cs_CZ/numbers.fallback0
-rw-r--r--src/layouts/cs_CZ/symbols.fallback0
-rw-r--r--src/layouts/da_DK/dialpad.fallback0
-rw-r--r--src/layouts/da_DK/digits.fallback0
-rw-r--r--src/layouts/da_DK/handwriting.fallback0
-rw-r--r--src/layouts/da_DK/main.qml220
-rw-r--r--src/layouts/da_DK/numbers.fallback0
-rw-r--r--src/layouts/da_DK/symbols.fallback0
-rw-r--r--src/layouts/de_DE/dialpad.fallback0
-rw-r--r--src/layouts/de_DE/digits.fallback0
-rw-r--r--src/layouts/de_DE/handwriting.fallback0
-rw-r--r--src/layouts/de_DE/main.qml215
-rw-r--r--src/layouts/de_DE/numbers.fallback0
-rw-r--r--src/layouts/de_DE/symbols.fallback0
-rw-r--r--src/layouts/el_GR/dialpad.fallback0
-rw-r--r--src/layouts/el_GR/digits.fallback0
-rw-r--r--src/layouts/el_GR/handwriting.qml84
-rw-r--r--src/layouts/el_GR/main.qml393
-rw-r--r--src/layouts/el_GR/numbers.fallback0
-rw-r--r--src/layouts/el_GR/symbols.fallback0
-rw-r--r--src/layouts/en_GB/dialpad.fallback0
-rw-r--r--src/layouts/en_GB/digits.fallback0
-rw-r--r--src/layouts/en_GB/handwriting.fallback0
-rw-r--r--src/layouts/en_GB/main.fallback0
-rw-r--r--src/layouts/en_GB/numbers.fallback0
-rw-r--r--src/layouts/en_GB/symbols.fallback0
-rw-r--r--src/layouts/en_US/dialpad.fallback0
-rw-r--r--src/layouts/en_US/digits.fallback0
-rw-r--r--src/layouts/en_US/handwriting.fallback0
-rw-r--r--src/layouts/en_US/main.fallback0
-rw-r--r--src/layouts/en_US/numbers.fallback0
-rw-r--r--src/layouts/en_US/symbols.fallback0
-rw-r--r--src/layouts/es_ES/dialpad.fallback0
-rw-r--r--src/layouts/es_ES/digits.fallback0
-rw-r--r--src/layouts/es_ES/handwriting.qml82
-rw-r--r--src/layouts/es_ES/main.qml204
-rw-r--r--src/layouts/es_ES/numbers.fallback0
-rw-r--r--src/layouts/es_ES/symbols.qml370
-rw-r--r--src/layouts/es_MX/dialpad.fallback0
-rw-r--r--src/layouts/es_MX/digits.fallback0
-rw-r--r--src/layouts/es_MX/handwriting.qml82
-rw-r--r--src/layouts/es_MX/main.qml204
-rw-r--r--src/layouts/es_MX/numbers.fallback0
-rw-r--r--src/layouts/es_MX/symbols.qml370
-rw-r--r--src/layouts/et_EE/dialpad.fallback0
-rw-r--r--src/layouts/et_EE/digits.fallback0
-rw-r--r--src/layouts/et_EE/handwriting.fallback0
-rw-r--r--src/layouts/et_EE/main.qml217
-rw-r--r--src/layouts/et_EE/numbers.fallback0
-rw-r--r--src/layouts/et_EE/symbols.fallback0
-rw-r--r--src/layouts/fa_FA/dialpad.fallback0
-rw-r--r--src/layouts/fa_FA/digits.qml113
-rw-r--r--src/layouts/fa_FA/handwriting.qml101
-rw-r--r--src/layouts/fa_FA/main.qml190
-rw-r--r--src/layouts/fa_FA/numbers.qml186
-rw-r--r--src/layouts/fa_FA/symbols.qml373
-rw-r--r--src/layouts/fallback/dialpad.qml114
-rw-r--r--src/layouts/fallback/digits.qml114
-rw-r--r--src/layouts/fallback/handwriting.qml81
-rw-r--r--src/layouts/fallback/main.qml221
-rw-r--r--src/layouts/fallback/numbers.qml186
-rw-r--r--src/layouts/fallback/symbols.qml368
-rw-r--r--src/layouts/fi_FI/dialpad.fallback0
-rw-r--r--src/layouts/fi_FI/digits.fallback0
-rw-r--r--src/layouts/fi_FI/handwriting.fallback0
-rw-r--r--src/layouts/fi_FI/main.qml214
-rw-r--r--src/layouts/fi_FI/numbers.fallback0
-rw-r--r--src/layouts/fi_FI/symbols.fallback0
-rw-r--r--src/layouts/fr_CA/dialpad.fallback0
-rw-r--r--src/layouts/fr_CA/digits.fallback0
-rw-r--r--src/layouts/fr_CA/handwriting.fallback0
-rw-r--r--src/layouts/fr_CA/main.qml213
-rw-r--r--src/layouts/fr_CA/numbers.fallback0
-rw-r--r--src/layouts/fr_CA/symbols.fallback0
-rw-r--r--src/layouts/fr_FR/dialpad.fallback0
-rw-r--r--src/layouts/fr_FR/digits.fallback0
-rw-r--r--src/layouts/fr_FR/handwriting.fallback0
-rw-r--r--src/layouts/fr_FR/main.qml201
-rw-r--r--src/layouts/fr_FR/numbers.fallback0
-rw-r--r--src/layouts/fr_FR/symbols.fallback0
-rw-r--r--src/layouts/he_IL/dialpad.fallback0
-rw-r--r--src/layouts/he_IL/digits.fallback0
-rw-r--r--src/layouts/he_IL/handwriting.qml84
-rw-r--r--src/layouts/he_IL/main.qml402
-rw-r--r--src/layouts/he_IL/numbers.fallback0
-rw-r--r--src/layouts/he_IL/symbols.qml368
-rw-r--r--src/layouts/hi_IN/dialpad.fallback0
-rw-r--r--src/layouts/hi_IN/digits.fallback0
-rw-r--r--src/layouts/hi_IN/handwriting.qml81
-rw-r--r--src/layouts/hi_IN/main.qml209
-rw-r--r--src/layouts/hi_IN/numbers.fallback0
-rw-r--r--src/layouts/hi_IN/symbols.qml378
-rw-r--r--src/layouts/hr_HR/dialpad.fallback0
-rw-r--r--src/layouts/hr_HR/digits.fallback0
-rw-r--r--src/layouts/hr_HR/handwriting.qml82
-rw-r--r--src/layouts/hr_HR/main.qml208
-rw-r--r--src/layouts/hr_HR/numbers.fallback0
-rw-r--r--src/layouts/hr_HR/symbols.fallback0
-rw-r--r--src/layouts/hu_HU/dialpad.fallback0
-rw-r--r--src/layouts/hu_HU/digits.fallback0
-rw-r--r--src/layouts/hu_HU/handwriting.qml82
-rw-r--r--src/layouts/hu_HU/main.qml213
-rw-r--r--src/layouts/hu_HU/numbers.fallback0
-rw-r--r--src/layouts/hu_HU/symbols.fallback0
-rw-r--r--src/layouts/id_ID/dialpad.fallback0
-rw-r--r--src/layouts/id_ID/digits.fallback0
-rw-r--r--src/layouts/id_ID/handwriting.fallback0
-rw-r--r--src/layouts/id_ID/main.fallback0
-rw-r--r--src/layouts/id_ID/numbers.fallback0
-rw-r--r--src/layouts/id_ID/symbols.fallback0
-rw-r--r--src/layouts/it_IT/dialpad.fallback0
-rw-r--r--src/layouts/it_IT/digits.fallback0
-rw-r--r--src/layouts/it_IT/handwriting.fallback0
-rw-r--r--src/layouts/it_IT/main.qml211
-rw-r--r--src/layouts/it_IT/numbers.fallback0
-rw-r--r--src/layouts/it_IT/symbols.fallback0
-rw-r--r--src/layouts/ja_JP/dialpad.fallback0
-rw-r--r--src/layouts/ja_JP/digits.fallback0
-rw-r--r--src/layouts/ja_JP/handwriting.qml84
-rw-r--r--src/layouts/ja_JP/main.qml463
-rw-r--r--src/layouts/ja_JP/numbers.fallback0
-rw-r--r--src/layouts/ja_JP/symbols.qml488
-rw-r--r--src/layouts/ko_KR/dialpad.fallback0
-rw-r--r--src/layouts/ko_KR/digits.fallback0
-rw-r--r--src/layouts/ko_KR/handwriting.qml100
-rw-r--r--src/layouts/ko_KR/main.qml344
-rw-r--r--src/layouts/ko_KR/numbers.fallback0
-rw-r--r--src/layouts/ko_KR/symbols.qml372
-rw-r--r--src/layouts/ms_MY/dialpad.fallback0
-rw-r--r--src/layouts/ms_MY/digits.fallback0
-rw-r--r--src/layouts/ms_MY/handwriting.fallback0
-rw-r--r--src/layouts/ms_MY/main.fallback0
-rw-r--r--src/layouts/ms_MY/numbers.fallback0
-rw-r--r--src/layouts/ms_MY/symbols.fallback0
-rw-r--r--src/layouts/nb_NO/dialpad.fallback0
-rw-r--r--src/layouts/nb_NO/digits.fallback0
-rw-r--r--src/layouts/nb_NO/handwriting.fallback0
-rw-r--r--src/layouts/nb_NO/main.qml220
-rw-r--r--src/layouts/nb_NO/numbers.fallback0
-rw-r--r--src/layouts/nb_NO/symbols.fallback0
-rw-r--r--src/layouts/nl_NL/dialpad.fallback0
-rw-r--r--src/layouts/nl_NL/digits.fallback0
-rw-r--r--src/layouts/nl_NL/handwriting.fallback0
-rw-r--r--src/layouts/nl_NL/main.fallback0
-rw-r--r--src/layouts/nl_NL/numbers.fallback0
-rw-r--r--src/layouts/nl_NL/symbols.fallback0
-rw-r--r--src/layouts/pl_PL/dialpad.fallback0
-rw-r--r--src/layouts/pl_PL/digits.fallback0
-rw-r--r--src/layouts/pl_PL/handwriting.fallback0
-rw-r--r--src/layouts/pl_PL/main.qml215
-rw-r--r--src/layouts/pl_PL/numbers.fallback0
-rw-r--r--src/layouts/pl_PL/symbols.fallback0
-rw-r--r--src/layouts/pt_BR/dialpad.fallback0
-rw-r--r--src/layouts/pt_BR/digits.fallback0
-rw-r--r--src/layouts/pt_BR/handwriting.fallback0
-rw-r--r--src/layouts/pt_BR/main.qml200
-rw-r--r--src/layouts/pt_BR/numbers.fallback0
-rw-r--r--src/layouts/pt_BR/symbols.fallback0
-rw-r--r--src/layouts/pt_PT/dialpad.fallback0
-rw-r--r--src/layouts/pt_PT/digits.fallback0
-rw-r--r--src/layouts/pt_PT/handwriting.fallback0
-rw-r--r--src/layouts/pt_PT/main.qml200
-rw-r--r--src/layouts/pt_PT/numbers.fallback0
-rw-r--r--src/layouts/pt_PT/symbols.fallback0
-rw-r--r--src/layouts/ro_RO/dialpad.fallback0
-rw-r--r--src/layouts/ro_RO/digits.fallback0
-rw-r--r--src/layouts/ro_RO/handwriting.qml82
-rw-r--r--src/layouts/ro_RO/main.qml210
-rw-r--r--src/layouts/ro_RO/numbers.fallback0
-rw-r--r--src/layouts/ro_RO/symbols.fallback0
-rw-r--r--src/layouts/ru_RU/dialpad.fallback0
-rw-r--r--src/layouts/ru_RU/digits.fallback0
-rw-r--r--src/layouts/ru_RU/handwriting.qml84
-rw-r--r--src/layouts/ru_RU/main.qml414
-rw-r--r--src/layouts/ru_RU/numbers.fallback0
-rw-r--r--src/layouts/ru_RU/symbols.fallback0
-rw-r--r--src/layouts/sk_SK/dialpad.fallback0
-rw-r--r--src/layouts/sk_SK/digits.fallback0
-rw-r--r--src/layouts/sk_SK/handwriting.fallback0
-rw-r--r--src/layouts/sk_SK/main.qml220
-rw-r--r--src/layouts/sk_SK/numbers.fallback0
-rw-r--r--src/layouts/sk_SK/symbols.fallback0
-rw-r--r--src/layouts/sl_SI/dialpad.fallback0
-rw-r--r--src/layouts/sl_SI/digits.fallback0
-rw-r--r--src/layouts/sl_SI/handwriting.fallback0
-rw-r--r--src/layouts/sl_SI/main.qml215
-rw-r--r--src/layouts/sl_SI/numbers.fallback0
-rw-r--r--src/layouts/sl_SI/symbols.fallback0
-rw-r--r--src/layouts/sq_AL/dialpad.fallback0
-rw-r--r--src/layouts/sq_AL/digits.fallback0
-rw-r--r--src/layouts/sq_AL/handwriting.fallback0
-rw-r--r--src/layouts/sq_AL/main.qml227
-rw-r--r--src/layouts/sq_AL/numbers.fallback0
-rw-r--r--src/layouts/sq_AL/symbols.fallback0
-rw-r--r--src/layouts/sr_SP/dialpad.fallback0
-rw-r--r--src/layouts/sr_SP/digits.fallback0
-rw-r--r--src/layouts/sr_SP/handwriting.qml84
-rw-r--r--src/layouts/sr_SP/main.qml381
-rw-r--r--src/layouts/sr_SP/numbers.fallback0
-rw-r--r--src/layouts/sr_SP/symbols.fallback0
-rw-r--r--src/layouts/sv_SE/dialpad.fallback0
-rw-r--r--src/layouts/sv_SE/digits.fallback0
-rw-r--r--src/layouts/sv_SE/handwriting.fallback0
-rw-r--r--src/layouts/sv_SE/main.qml214
-rw-r--r--src/layouts/sv_SE/numbers.fallback0
-rw-r--r--src/layouts/sv_SE/symbols.fallback0
-rw-r--r--src/layouts/th_TH/dialpad.fallback0
-rw-r--r--src/layouts/th_TH/digits.fallback0
-rw-r--r--src/layouts/th_TH/handwriting.fallback0
-rw-r--r--src/layouts/th_TH/handwriting.qml84
-rw-r--r--src/layouts/th_TH/main.qml485
-rw-r--r--src/layouts/th_TH/numbers.fallback0
-rw-r--r--src/layouts/th_TH/symbols.qml368
-rw-r--r--src/layouts/tr_TR/dialpad.fallback0
-rw-r--r--src/layouts/tr_TR/digits.fallback0
-rw-r--r--src/layouts/tr_TR/handwriting.fallback0
-rw-r--r--src/layouts/tr_TR/main.qml232
-rw-r--r--src/layouts/tr_TR/numbers.fallback0
-rw-r--r--src/layouts/tr_TR/symbols.fallback0
-rw-r--r--src/layouts/uk_UA/dialpad.fallback0
-rw-r--r--src/layouts/uk_UA/digits.fallback0
-rw-r--r--src/layouts/uk_UA/handwriting.qml84
-rw-r--r--src/layouts/uk_UA/main.qml407
-rw-r--r--src/layouts/uk_UA/numbers.fallback0
-rw-r--r--src/layouts/uk_UA/symbols.fallback0
-rw-r--r--src/layouts/vi_VN/dialpad.fallback0
-rw-r--r--src/layouts/vi_VN/digits.fallback0
-rw-r--r--src/layouts/vi_VN/handwriting.fallback0
-rw-r--r--src/layouts/vi_VN/main.qml217
-rw-r--r--src/layouts/vi_VN/numbers.fallback0
-rw-r--r--src/layouts/vi_VN/symbols.qml368
-rw-r--r--src/layouts/zh_CN/dialpad.fallback0
-rw-r--r--src/layouts/zh_CN/digits.fallback0
-rw-r--r--src/layouts/zh_CN/handwriting.qml100
-rw-r--r--src/layouts/zh_CN/main.qml212
-rw-r--r--src/layouts/zh_CN/numbers.fallback0
-rw-r--r--src/layouts/zh_CN/symbols.qml478
-rw-r--r--src/layouts/zh_TW/dialpad.fallback0
-rw-r--r--src/layouts/zh_TW/digits.fallback0
-rw-r--r--src/layouts/zh_TW/handwriting.qml100
-rw-r--r--src/layouts/zh_TW/main.qml460
-rw-r--r--src/layouts/zh_TW/numbers.fallback0
-rw-r--r--src/layouts/zh_TW/symbols.qml478
260 files changed, 18475 insertions, 0 deletions
diff --git a/src/layouts/CMakeLists.txt b/src/layouts/CMakeLists.txt
new file mode 100644
index 00000000..33d1de9a
--- /dev/null
+++ b/src/layouts/CMakeLists.txt
@@ -0,0 +1,357 @@
+qt_internal_add_qml_module(qtvkblayoutsplugin
+ URI "QtQuick.VirtualKeyboard.Layouts"
+ VERSION "${PROJECT_VERSION}"
+ PAST_MAJOR_VERSIONS 2 1
+ PLUGIN_TARGET qtvkblayoutsplugin
+ NO_PLUGIN_OPTIONAL
+)
+
+set(LAYOUT_FILES
+ fallback/dialpad.qml
+ fallback/digits.qml
+ fallback/main.qml
+ fallback/numbers.qml
+ fallback/symbols.qml
+)
+if (FEATURE_vkb_lang_en_GB)
+ list(APPEND LAYOUT_FILES
+ en_GB/dialpad.fallback
+ en_GB/digits.fallback
+ en_GB/main.fallback
+ en_GB/numbers.fallback
+ en_GB/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_en_US)
+ list(APPEND LAYOUT_FILES
+ en_US/dialpad.fallback
+ en_US/digits.fallback
+ en_US/main.fallback
+ en_US/numbers.fallback
+ en_US/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_ar_AR)
+ list(APPEND LAYOUT_FILES
+ ar_AR/dialpad.fallback
+ ar_AR/digits.qml
+ ar_AR/main.qml
+ ar_AR/numbers.qml
+ ar_AR/symbols.qml
+ )
+endif()
+if(FEATURE_vkb_lang_bg_BG)
+ list(APPEND LAYOUT_FILES
+ bg_BG/dialpad.fallback
+ bg_BG/digits.fallback
+ bg_BG/main.qml
+ bg_BG/numbers.fallback
+ bg_BG/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_cs_CZ)
+ list(APPEND LAYOUT_FILES
+ cs_CZ/dialpad.fallback
+ cs_CZ/digits.fallback
+ cs_CZ/main.qml
+ cs_CZ/numbers.fallback
+ cs_CZ/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_da_DK)
+ list(APPEND LAYOUT_FILES
+ da_DK/dialpad.fallback
+ da_DK/digits.fallback
+ da_DK/main.qml
+ da_DK/numbers.fallback
+ da_DK/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_de_DE)
+ list(APPEND LAYOUT_FILES
+ de_DE/dialpad.fallback
+ de_DE/digits.fallback
+ de_DE/main.qml
+ de_DE/numbers.fallback
+ de_DE/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_el_GR)
+ list(APPEND LAYOUT_FILES
+ el_GR/dialpad.fallback
+ el_GR/digits.fallback
+ el_GR/main.qml
+ el_GR/numbers.fallback
+ el_GR/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_es_ES)
+ list(APPEND LAYOUT_FILES
+ es_ES/dialpad.fallback
+ es_ES/digits.fallback
+ es_ES/main.qml
+ es_ES/numbers.fallback
+ es_ES/symbols.qml
+ )
+endif()
+if(FEATURE_vkb_lang_es_MX)
+ list(APPEND LAYOUT_FILES
+ es_MX/dialpad.fallback
+ es_MX/digits.fallback
+ es_MX/main.qml
+ es_MX/numbers.fallback
+ es_MX/symbols.qml
+ )
+endif()
+if(FEATURE_vkb_lang_et_EE)
+ list(APPEND LAYOUT_FILES
+ et_EE/dialpad.fallback
+ et_EE/digits.fallback
+ et_EE/main.qml
+ et_EE/numbers.fallback
+ et_EE/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_fa_FA)
+ list(APPEND LAYOUT_FILES
+ fa_FA/dialpad.fallback
+ fa_FA/digits.qml
+ fa_FA/main.qml
+ fa_FA/numbers.qml
+ fa_FA/symbols.qml
+ )
+endif()
+if(FEATURE_vkb_lang_fi_FI)
+ list(APPEND LAYOUT_FILES
+ fi_FI/dialpad.fallback
+ fi_FI/digits.fallback
+ fi_FI/main.qml
+ fi_FI/numbers.fallback
+ fi_FI/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_fr_CA)
+ list(APPEND LAYOUT_FILES
+ fr_CA/dialpad.fallback
+ fr_CA/digits.fallback
+ fr_CA/main.qml
+ fr_CA/numbers.fallback
+ fr_CA/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_fr_FR)
+ list(APPEND LAYOUT_FILES
+ fr_FR/dialpad.fallback
+ fr_FR/digits.fallback
+ fr_FR/main.qml
+ fr_FR/numbers.fallback
+ fr_FR/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_he_IL)
+ list(APPEND LAYOUT_FILES
+ he_IL/dialpad.fallback
+ he_IL/digits.fallback
+ he_IL/main.qml
+ he_IL/numbers.fallback
+ he_IL/symbols.qml
+ )
+endif()
+if(FEATURE_vkb_lang_hi_IN)
+ list(APPEND LAYOUT_FILES
+ hi_IN/dialpad.fallback
+ hi_IN/digits.fallback
+ hi_IN/main.qml
+ hi_IN/numbers.fallback
+ hi_IN/symbols.qml
+ )
+endif()
+if(FEATURE_vkb_lang_hr_HR)
+ list(APPEND LAYOUT_FILES
+ hr_HR/dialpad.fallback
+ hr_HR/digits.fallback
+ hr_HR/main.qml
+ hr_HR/numbers.fallback
+ hr_HR/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_hu_HU)
+ list(APPEND LAYOUT_FILES
+ hu_HU/dialpad.fallback
+ hu_HU/digits.fallback
+ hu_HU/main.qml
+ hu_HU/numbers.fallback
+ hu_HU/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_id_ID)
+ list(APPEND LAYOUT_FILES
+ id_ID/dialpad.fallback
+ id_ID/digits.fallback
+ id_ID/main.fallback
+ id_ID/numbers.fallback
+ id_ID/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_it_IT)
+ list(APPEND LAYOUT_FILES
+ it_IT/dialpad.fallback
+ it_IT/digits.fallback
+ it_IT/main.qml
+ it_IT/numbers.fallback
+ it_IT/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_nb_NO)
+ list(APPEND LAYOUT_FILES
+ nb_NO/dialpad.fallback
+ nb_NO/digits.fallback
+ nb_NO/main.qml
+ nb_NO/numbers.fallback
+ nb_NO/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_ms_MY)
+ list(APPEND LAYOUT_FILES
+ ms_MY/dialpad.fallback
+ ms_MY/digits.fallback
+ ms_MY/main.fallback
+ ms_MY/numbers.fallback
+ ms_MY/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_nl_NL)
+ list(APPEND LAYOUT_FILES
+ nl_NL/dialpad.fallback
+ nl_NL/digits.fallback
+ nl_NL/main.fallback
+ nl_NL/numbers.fallback
+ nl_NL/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_pl_PL)
+ list(APPEND LAYOUT_FILES
+ pl_PL/dialpad.fallback
+ pl_PL/digits.fallback
+ pl_PL/main.qml
+ pl_PL/numbers.fallback
+ pl_PL/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_pt_BR)
+ list(APPEND LAYOUT_FILES
+ pt_BR/dialpad.fallback
+ pt_BR/digits.fallback
+ pt_BR/main.qml
+ pt_BR/numbers.fallback
+ pt_BR/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_pt_PT)
+ list(APPEND LAYOUT_FILES
+ pt_PT/dialpad.fallback
+ pt_PT/digits.fallback
+ pt_PT/main.qml
+ pt_PT/numbers.fallback
+ pt_PT/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_ro_RO)
+ list(APPEND LAYOUT_FILES
+ ro_RO/dialpad.fallback
+ ro_RO/digits.fallback
+ ro_RO/main.qml
+ ro_RO/numbers.fallback
+ ro_RO/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_ru_RU)
+ list(APPEND LAYOUT_FILES
+ ru_RU/dialpad.fallback
+ ru_RU/digits.fallback
+ ru_RU/main.qml
+ ru_RU/numbers.fallback
+ ru_RU/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_sk_SK)
+ list(APPEND LAYOUT_FILES
+ sk_SK/dialpad.fallback
+ sk_SK/digits.fallback
+ sk_SK/main.qml
+ sk_SK/numbers.fallback
+ sk_SK/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_sl_SI)
+ list(APPEND LAYOUT_FILES
+ sl_SI/dialpad.fallback
+ sl_SI/digits.fallback
+ sl_SI/main.qml
+ sl_SI/numbers.fallback
+ sl_SI/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_sq_AL)
+ list(APPEND LAYOUT_FILES
+ sq_AL/dialpad.fallback
+ sq_AL/digits.fallback
+ sq_AL/main.qml
+ sq_AL/numbers.fallback
+ sq_AL/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_sr_SP)
+ list(APPEND LAYOUT_FILES
+ sr_SP/dialpad.fallback
+ sr_SP/digits.fallback
+ sr_SP/main.qml
+ sr_SP/numbers.fallback
+ sr_SP/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_sv_SE)
+ list(APPEND LAYOUT_FILES
+ sv_SE/dialpad.fallback
+ sv_SE/digits.fallback
+ sv_SE/main.qml
+ sv_SE/numbers.fallback
+ sv_SE/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_tr_TR)
+ list(APPEND LAYOUT_FILES
+ tr_TR/dialpad.fallback
+ tr_TR/digits.fallback
+ tr_TR/main.qml
+ tr_TR/numbers.fallback
+ tr_TR/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_uk_UA)
+ list(APPEND LAYOUT_FILES
+ uk_UA/dialpad.fallback
+ uk_UA/digits.fallback
+ uk_UA/main.qml
+ uk_UA/numbers.fallback
+ uk_UA/symbols.fallback
+ )
+endif()
+if(FEATURE_vkb_lang_vi_VN)
+ list(APPEND LAYOUT_FILES
+ vi_VN/dialpad.fallback
+ vi_VN/digits.fallback
+ vi_VN/main.qml
+ vi_VN/numbers.fallback
+ vi_VN/symbols.qml
+ )
+endif()
+
+if(QT_FEATURE_vkb_layouts)
+ qt_internal_add_resource(qtvkblayoutsplugin "qmake_virtualkeyboard_layouts"
+ PREFIX
+ "${VKB_LAYOUTS_PREFIX}"
+ FILES
+ ${LAYOUT_FILES}
+ )
+endif()
diff --git a/src/layouts/ar_AR/dialpad.fallback b/src/layouts/ar_AR/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ar_AR/dialpad.fallback
diff --git a/src/layouts/ar_AR/digits.qml b/src/layouts/ar_AR/digits.qml
new file mode 100644
index 00000000..9eb39ac8
--- /dev/null
+++ b/src/layouts/ar_AR/digits.qml
@@ -0,0 +1,123 @@
+/****************************************************************************
+**
+** 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.VirtualKeyboard.Plugins
+
+KeyboardLayout {
+ inputMethod: PlainInputMethod {}
+ inputMode: InputEngine.InputMode.Numeric
+
+ KeyboardColumn {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.alignment: Qt.AlignHCenter
+ Layout.preferredWidth: height
+ KeyboardRow {
+ Key {
+ key: 0x0667
+ text: "\u0667"
+ alternativeKeys: "\u06677"
+ }
+ Key {
+ key: 0x0668
+ text: "\u0668"
+ alternativeKeys: "\u06688"
+ }
+ Key {
+ key: 0x0669
+ text: "\u0669"
+ alternativeKeys: "\u06699"
+ }
+ BackspaceKey {}
+ }
+ KeyboardRow {
+ Key {
+ key: 0x0664
+ text: "\u0664"
+ alternativeKeys: "\u06644"
+ }
+ Key {
+ key: 0x0665
+ text: "\u0665"
+ alternativeKeys: "\u06655"
+ }
+ Key {
+ key: 0x0666
+ text: "\u0666"
+ alternativeKeys: "\u06666"
+ }
+ Key {
+ text: " "
+ displayText: "\u2423"
+ repeat: true
+ showPreview: false
+ key: Qt.Key_Space
+ highlighted: true
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: 0x0661
+ text: "\u0661"
+ alternativeKeys: "\u06611"
+ }
+ Key {
+ key: 0x0662
+ text: "\u0662"
+ alternativeKeys: "\u06622"
+ }
+ Key {
+ key: 0x0663
+ text: "\u0663"
+ alternativeKeys: "\u06633"
+ }
+ HideKeyboardKey {}
+ }
+ KeyboardRow {
+ ChangeLanguageKey {
+ customLayoutsOnly: true
+ }
+ Key {
+ key: 0x0660
+ text: "\u0660"
+ alternativeKeys: "\u06600"
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: "\u066B"
+ alternativeKeys: "\u066B,."
+ }
+ EnterKey {}
+ }
+ }
+}
diff --git a/src/layouts/ar_AR/handwriting.qml b/src/layouts/ar_AR/handwriting.qml
new file mode 100644
index 00000000..8002446b
--- /dev/null
+++ b/src/layouts/ar_AR/handwriting.qml
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+ inputMode: InputEngine.InputMode.Arabic
+ readonly property bool alphabeticInputMode: [InputEngine.InputMode.Latin, InputEngine.InputMode.Dialable].indexOf(InputContext.inputEngine.inputMode) !== -1
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ alphabeticInputMode ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ inputModeNameList: [
+ "ABC", // InputEngine.InputMode.Latin
+ "\u0660\u0661\u0662", // InputEngine.InputMode.Numeric
+ "123", // InputEngine.InputMode.Dialable
+ "", // InputEngine.InputMode.Pinyin
+ "", // InputEngine.InputMode.Cangjie
+ "", // InputEngine.InputMode.Zhuyin
+ "", // InputEngine.InputMode.Hangul
+ "", // InputEngine.InputMode.Hiragana
+ "", // InputEngine.InputMode.Katakana
+ "", // InputEngine.InputMode.FullwidthLatin
+ "", // InputEngine.InputMode.Greek
+ "", // InputEngine.InputMode.Cyrillic
+ "\u0623\u200C\u0628\u200C\u062C", // InputEngine.InputMode.Arabic
+ ]
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: alphabeticInputMode ? "," : "\u060C"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: alphabeticInputMode ? "#%&*/\\\"'=+-_:;,.?!<>()" : "#%&*/\\\"'=+-_:\u061B.\u061F!<>()"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/ar_AR/main.qml b/src/layouts/ar_AR/main.qml
new file mode 100644
index 00000000..b7da450d
--- /dev/null
+++ b/src/layouts/ar_AR/main.qml
@@ -0,0 +1,223 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Arabic
+ keyWeight: 160
+ smallTextVisible: true
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "\u0636"
+ alternativeKeys: "1\u0636\u0661"
+ }
+ Key {
+ id: normalKey
+ text: "\u0635"
+ alternativeKeys: "2\u0635\u0662"
+ }
+ Key {
+ text: "\u062B"
+ alternativeKeys: "3\u062B\u0663"
+ }
+ Key {
+ text: "\u0642"
+ alternativeKeys: "4\u0642\u0664"
+ }
+ Key {
+ text: "\u0641"
+ alternativeKeys: "5\u0641\u0665"
+ }
+ Key {
+ text: "\u063A"
+ alternativeKeys: "6\u063A\u0666"
+ }
+ Key {
+ text: "\u0639"
+ alternativeKeys: "7\u0639\u0667"
+ }
+ Key {
+ text: "\u0647"
+ alternativeKeys: "8\u0647\u0668"
+ }
+ Key {
+ text: "\u062E"
+ alternativeKeys: "9\u062E\u0669"
+ }
+ Key {
+ text: "\u062D"
+ alternativeKeys: "0\u062D\u0660"
+ }
+ Key {
+ text: "\u062C"
+ alternativeKeys: "\u062C\u0686"
+ }
+ Key {
+ text: "\u062F"
+ alternativeKeys: "\u062F\uFDFC"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ text: "\u0634"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ text: "\u0633"
+ }
+ Key {
+ text: "\u064A"
+ }
+ Key {
+ text: "\u0628"
+ alternativeKeys: "\u0628\u067E"
+ }
+ Key {
+ text: "\u0644"
+ alternativeKeys: ["\u0644\u0623", "\u0644\u0622", "\u0644", "\u0644\u0627", "\u0644\u0625"]
+ }
+ Key {
+ text: "\u0627"
+ alternativeKeys: "\u0625\u0627\u0623\u0622"
+ }
+ Key {
+ text: "\u062A"
+ }
+ Key {
+ text: "\u0646"
+ }
+ Key {
+ text: "\u0645"
+ }
+ Key {
+ text: "\u0643"
+ alternativeKeys: "\u0643\u06AF"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ text: "\u0630"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ text: "\u0626"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ text: "\u0621"
+ }
+ Key {
+ text: "\u0624"
+ }
+ Key {
+ text: "\u0631"
+ }
+ Key {
+ text: "\u0649"
+ }
+ Key {
+ text: "\u0629"
+ }
+ Key {
+ text: "\u0648"
+ }
+ Key {
+ text: "\u0632"
+ }
+ Key {
+ text: "\u0637"
+ }
+ Key {
+ text: "\u0638"
+ alternativeKeys: "\u064E\u064C\u0650\u064D\u0651\u0652\u0670\u0653\u0640\u0638\u064B\u064F"
+ smallText: "\u25CC\u0650 "
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ displayText: "\u0661\u0662\u0663\u061F"
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u060C"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!,\u060C\u061B.\u061F"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/ar_AR/numbers.qml b/src/layouts/ar_AR/numbers.qml
new file mode 100644
index 00000000..8cd2c108
--- /dev/null
+++ b/src/layouts/ar_AR/numbers.qml
@@ -0,0 +1,196 @@
+/****************************************************************************
+**
+** 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.VirtualKeyboard.Plugins
+
+KeyboardLayout {
+ inputMethod: PlainInputMethod {}
+ inputMode: InputEngine.InputMode.Numeric
+
+ KeyboardRow {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.alignment: Qt.AlignHCenter
+ KeyboardColumn {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.preferredWidth: parent.height / 4 * 3
+ KeyboardRow {
+ Key {
+ key: Qt.Key_ParenLeft
+ text: "("
+ }
+ Key {
+ key: Qt.Key_ParenRight
+ text: ")"
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_division
+ text: "\u00F7"
+ }
+ Key {
+ key: Qt.Key_multiply
+ text: "\u00D7"
+ }
+ Key {
+ key: Qt.Key_Plus
+ text: "+"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_AsciiCircum
+ text: "^"
+ }
+ Key {
+ key: Qt.Key_Slash
+ text: "/"
+ }
+ Key {
+ key: Qt.Key_Minus
+ text: "-"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: 0x221A
+ text: "√"
+ }
+ Key {
+ key: Qt.Key_Percent
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ }
+ }
+ }
+ KeyboardColumn {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.preferredWidth: parent.height / 8
+ KeyboardRow {
+ FillerKey {}
+ }
+ }
+ KeyboardColumn {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.preferredWidth: parent.height
+ KeyboardRow {
+ Key {
+ key: 0x0667
+ text: "\u0667"
+ alternativeKeys: "\u06677"
+ }
+ Key {
+ key: 0x0668
+ text: "\u0668"
+ alternativeKeys: "\u06688"
+ }
+ Key {
+ key: 0x0669
+ text: "\u0669"
+ alternativeKeys: "\u06699"
+ }
+ BackspaceKey {}
+ }
+ KeyboardRow {
+ Key {
+ key: 0x0664
+ text: "\u0664"
+ alternativeKeys: "\u06644"
+ }
+ Key {
+ key: 0x0665
+ text: "\u0665"
+ alternativeKeys: "\u06655"
+ }
+ Key {
+ key: 0x0666
+ text: "\u0666"
+ alternativeKeys: "\u06666"
+ }
+ Key {
+ text: " "
+ displayText: "\u2423"
+ repeat: true
+ showPreview: false
+ key: Qt.Key_Space
+ highlighted: true
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: 0x0661
+ text: "\u0661"
+ alternativeKeys: "\u06611"
+ }
+ Key {
+ key: 0x0662
+ text: "\u0662"
+ alternativeKeys: "\u06622"
+ }
+ Key {
+ key: 0x0663
+ text: "\u0663"
+ alternativeKeys: "\u06633"
+ }
+ HideKeyboardKey {}
+ }
+ KeyboardRow {
+ ChangeLanguageKey {
+ customLayoutsOnly: true
+ }
+ Key {
+ key: 0x0660
+ text: "\u0660"
+ alternativeKeys: "\u06600"
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: "\u066B"
+ alternativeKeys: "\u066B,."
+ }
+ EnterKey {}
+ }
+ }
+ }
+}
diff --git a/src/layouts/ar_AR/symbols.qml b/src/layouts/ar_AR/symbols.qml
new file mode 100644
index 00000000..fb424437
--- /dev/null
+++ b/src/layouts/ar_AR/symbols.qml
@@ -0,0 +1,383 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ property bool secondPage
+ onVisibleChanged: if (!visible) secondPage = false
+ sourceComponent: secondPage ? page2 : page1
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ smallTextVisible: true
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: 0x0661
+ text: "\u0661"
+ alternativeKeys: "\u06611"
+ }
+ Key {
+ id: normalKey
+ key: 0x0662
+ text: "\u0662"
+ alternativeKeys: "\u06622"
+ }
+ Key {
+ key: 0x0663
+ text: "\u0663"
+ alternativeKeys: "\u06633"
+ }
+ Key {
+ key: 0x0664
+ text: "\u0664"
+ alternativeKeys: "\u06644"
+ }
+ Key {
+ key: 0x0665
+ text: "\u0665"
+ alternativeKeys: "\u06655"
+ }
+ Key {
+ key: 0x0666
+ text: "\u0666"
+ alternativeKeys: "\u06666"
+ }
+ Key {
+ key: 0x0667
+ text: "\u0667"
+ alternativeKeys: "\u06677"
+ }
+ Key {
+ key: 0x0668
+ text: "\u0668"
+ alternativeKeys: "\u06688"
+ }
+ Key {
+ key: 0x0669
+ text: "\u0669"
+ alternativeKeys: "\u06699"
+ }
+ Key {
+ key: 0x0660
+ text: "\u0660"
+ alternativeKeys: "\u06600"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_At
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_NumberSign
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_Percent
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_Ampersand
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_Underscore
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_Minus
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_Plus
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_ParenLeft
+ text: "("
+ }
+ Key {
+ key: Qt.Key_ParenRight
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "1/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_QuoteDbl
+ text: '"'
+ }
+ Key {
+ key: Qt.Key_Less
+ text: "<"
+ }
+ Key {
+ key: Qt.Key_Greater
+ text: ">"
+ }
+ Key {
+ key: Qt.Key_Apostrophe
+ text: "'"
+ }
+ Key {
+ key: Qt.Key_Semicolon
+ text: "\u061B"
+ alternativeKeys: "\u061B;"
+ }
+ Key {
+ key: Qt.Key_Slash
+ text: "/"
+ }
+ Key {
+ key: Qt.Key_Exclam
+ text: "!"
+ }
+ Key {
+ key: Qt.Key_Question
+ text: "\u061F"
+ alternativeKeys: "\u061F?"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "\u0623\u200C\u0628\u200C\u062C"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u060C"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!,\u060C."
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ smallTextVisible: true
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_AsciiTilde
+ text: "~"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_Agrave
+ text: "`"
+ }
+ Key {
+ key: Qt.Key_Bar
+ text: "|"
+ }
+ Key {
+ key: 0x7B
+ text: "·"
+ }
+ Key {
+ key: 0x221A
+ text: "√"
+ }
+ Key {
+ key: Qt.Key_division
+ text: "÷"
+ }
+ Key {
+ key: Qt.Key_multiply
+ text: "×"
+ }
+ Key {
+ key: Qt.Key_onehalf
+ text: "½"
+ alternativeKeys: "¼⅓½¾⅞"
+ }
+ Key {
+ key: Qt.Key_BraceLeft
+ text: "{"
+ }
+ Key {
+ key: Qt.Key_BraceRight
+ text: "}"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Dollar
+ text: "$"
+ }
+ Key {
+ key: 0x20AC
+ text: "€"
+ }
+ Key {
+ key: 0xC2
+ text: "£"
+ }
+ Key {
+ key: 0xA2
+ text: "¢"
+ }
+ Key {
+ key: 0xA5
+ text: "¥"
+ }
+ Key {
+ key: Qt.Key_AsciiCircum
+ text: "^"
+ }
+ Key {
+ key: Qt.Key_Equal
+ text: "="
+ }
+ Key {
+ key: Qt.Key_section
+ text: "§"
+ }
+ Key {
+ key: Qt.Key_BracketLeft
+ text: "["
+ }
+ Key {
+ key: Qt.Key_BracketRight
+ text: "]"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "2/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: 0x2122
+ text: '™'
+ }
+ Key {
+ key: 0x00AE
+ text: '®'
+ }
+ Key {
+ key: Qt.Key_guillemotleft
+ text: '«'
+ }
+ Key {
+ key: Qt.Key_guillemotright
+ text: '»'
+ }
+ Key {
+ key: Qt.Key_Colon
+ text: ":"
+ }
+ Key {
+ key: 0x201C
+ text: '“'
+ }
+ Key {
+ key: 0x201D
+ text: '”'
+ }
+ Key {
+ key: Qt.Key_Backslash
+ text: "\\"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "\u0623\u200C\u0628\u200C\u062C"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u060C"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: 0x2026
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u2026"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/bg_BG/dialpad.fallback b/src/layouts/bg_BG/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/bg_BG/dialpad.fallback
diff --git a/src/layouts/bg_BG/digits.fallback b/src/layouts/bg_BG/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/bg_BG/digits.fallback
diff --git a/src/layouts/bg_BG/handwriting.qml b/src/layouts/bg_BG/handwriting.qml
new file mode 100644
index 00000000..092d746e
--- /dev/null
+++ b/src/layouts/bg_BG/handwriting.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ InputContext.inputEngine.inputMode !== InputEngine.InputMode.Cyrillic ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/bg_BG/main.qml b/src/layouts/bg_BG/main.qml
new file mode 100644
index 00000000..fd392d61
--- /dev/null
+++ b/src/layouts/bg_BG/main.qml
@@ -0,0 +1,383 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayoutLoader {
+ sharedLayouts: ['symbols']
+ sourceComponent: InputContext.inputEngine.inputMode === InputEngine.InputMode.Cyrillic ? cyrillicLayout : latinLayout
+ Component {
+ id: cyrillicLayout
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "я"
+ }
+ Key {
+ id: normalKey
+ text: "в"
+ }
+ Key {
+ text: "е"
+ }
+ Key {
+ text: "р"
+ }
+ Key {
+ text: "т"
+ }
+ Key {
+ text: "ъ"
+ }
+ Key {
+ text: "у"
+ }
+ Key {
+ text: "и"
+ }
+ Key {
+ text: "о"
+ }
+ Key {
+ text: "п"
+ }
+ Key {
+ text: "ч"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "а"
+ }
+ Key {
+ text: "с"
+ }
+ Key {
+ text: "д"
+ }
+ Key {
+ text: "ф"
+ }
+ Key {
+ text: "г"
+ }
+ Key {
+ text: "х"
+ }
+ Key {
+ text: "й"
+ }
+ Key {
+ text: "к"
+ }
+ Key {
+ text: "л"
+ }
+ Key {
+ text: "ш"
+ }
+ Key {
+ text: "щ"
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ text: "з"
+ }
+ Key {
+ text: "ь"
+ }
+ Key {
+ text: "ц"
+ }
+ Key {
+ text: "ж"
+ }
+ Key {
+ text: "б"
+ }
+ Key {
+ text: "н"
+ }
+ Key {
+ text: "м"
+ }
+ Key {
+ text: "ю"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ inputModes: [InputEngine.InputMode.Cyrillic, InputEngine.InputMode.Latin]
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: latinLayout
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "êeëèé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ alternativeKeys: "ŕrř"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ alternativeKeys: "ţtŧť"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ alternativeKeys: "ÿyýŷ"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "űūũûüuùú"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "îïīĩiìí"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "œøõôöòóo"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly)) ? "a@äåãâàá" : "aäåãâàá"
+ smallTextVisible: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly))
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "šsşś"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ alternativeKeys: "dđď"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ alternativeKeys: "ġgģĝğ"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ alternativeKeys: "ĺŀłļľl"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zžż"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "çcċčć"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ alternativeKeys: "ņńnň"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ enabled: !(InputContext.inputMethodHints & Qt.ImhLatinOnly) && inputModeCount > 1
+ inputModes: [InputEngine.InputMode.Cyrillic, InputEngine.InputMode.Latin]
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/bg_BG/numbers.fallback b/src/layouts/bg_BG/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/bg_BG/numbers.fallback
diff --git a/src/layouts/bg_BG/symbols.fallback b/src/layouts/bg_BG/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/bg_BG/symbols.fallback
diff --git a/src/layouts/cs_CZ/dialpad.fallback b/src/layouts/cs_CZ/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/cs_CZ/dialpad.fallback
diff --git a/src/layouts/cs_CZ/digits.fallback b/src/layouts/cs_CZ/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/cs_CZ/digits.fallback
diff --git a/src/layouts/cs_CZ/handwriting.qml b/src/layouts/cs_CZ/handwriting.qml
new file mode 100644
index 00000000..37b158c3
--- /dev/null
+++ b/src/layouts/cs_CZ/handwriting.qml
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+ inputMode: InputEngine.InputMode.Latin
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/cs_CZ/main.qml b/src/layouts/cs_CZ/main.qml
new file mode 100644
index 00000000..989dc792
--- /dev/null
+++ b/src/layouts/cs_CZ/main.qml
@@ -0,0 +1,219 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "eéě"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ alternativeKeys: "rř"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ alternativeKeys: "tť"
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zž"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "uúů"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "ií"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "oóö"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aåäá"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "sš"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ alternativeKeys: "dď"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ alternativeKeys: "yý"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "cćč"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ alternativeKeys: "nń"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/cs_CZ/numbers.fallback b/src/layouts/cs_CZ/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/cs_CZ/numbers.fallback
diff --git a/src/layouts/cs_CZ/symbols.fallback b/src/layouts/cs_CZ/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/cs_CZ/symbols.fallback
diff --git a/src/layouts/da_DK/dialpad.fallback b/src/layouts/da_DK/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/da_DK/dialpad.fallback
diff --git a/src/layouts/da_DK/digits.fallback b/src/layouts/da_DK/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/da_DK/digits.fallback
diff --git a/src/layouts/da_DK/handwriting.fallback b/src/layouts/da_DK/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/da_DK/handwriting.fallback
diff --git a/src/layouts/da_DK/main.qml b/src/layouts/da_DK/main.qml
new file mode 100644
index 00000000..5d8a717d
--- /dev/null
+++ b/src/layouts/da_DK/main.qml
@@ -0,0 +1,220 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "eé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "ií"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "oó"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ Key {
+ key: Qt.Key_Aring
+ text: "å"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aá"
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ Key {
+ key: Qt.Key_AE
+ text: "æ"
+ alternativeKeys: "æǽ"
+ }
+ Key {
+ key: Qt.Key_Ooblique
+ text: "ø"
+ alternativeKeys: "øǿ"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ ShiftKey {
+ weight: 240
+ }
+ FillerKey {
+ weight: 80
+ }
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ weight: 80
+ }
+ BackspaceKey {
+ weight: 240
+ }
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/da_DK/numbers.fallback b/src/layouts/da_DK/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/da_DK/numbers.fallback
diff --git a/src/layouts/da_DK/symbols.fallback b/src/layouts/da_DK/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/da_DK/symbols.fallback
diff --git a/src/layouts/de_DE/dialpad.fallback b/src/layouts/de_DE/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/de_DE/dialpad.fallback
diff --git a/src/layouts/de_DE/digits.fallback b/src/layouts/de_DE/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/de_DE/digits.fallback
diff --git a/src/layouts/de_DE/handwriting.fallback b/src/layouts/de_DE/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/de_DE/handwriting.fallback
diff --git a/src/layouts/de_DE/main.qml b/src/layouts/de_DE/main.qml
new file mode 100644
index 00000000..2e594fea
--- /dev/null
+++ b/src/layouts/de_DE/main.qml
@@ -0,0 +1,215 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ Key {
+ key: Qt.Key_Udiaeresis
+ text: "ü"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "sß"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ Key {
+ key: Qt.Key_Odiaeresis
+ text: "ö"
+ }
+ Key {
+ key: Qt.Key_Adiaeresis
+ text: "ä"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ ShiftKey {
+ weight: 240
+ }
+ FillerKey {
+ weight: 80
+ }
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ weight: 80
+ }
+ BackspaceKey {
+ weight: 240
+ }
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/de_DE/numbers.fallback b/src/layouts/de_DE/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/de_DE/numbers.fallback
diff --git a/src/layouts/de_DE/symbols.fallback b/src/layouts/de_DE/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/de_DE/symbols.fallback
diff --git a/src/layouts/el_GR/dialpad.fallback b/src/layouts/el_GR/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/el_GR/dialpad.fallback
diff --git a/src/layouts/el_GR/digits.fallback b/src/layouts/el_GR/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/el_GR/digits.fallback
diff --git a/src/layouts/el_GR/handwriting.qml b/src/layouts/el_GR/handwriting.qml
new file mode 100644
index 00000000..bdc065ff
--- /dev/null
+++ b/src/layouts/el_GR/handwriting.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ InputContext.inputEngine.inputMode !== InputEngine.InputMode.Greek ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/el_GR/main.qml b/src/layouts/el_GR/main.qml
new file mode 100644
index 00000000..32f2a717
--- /dev/null
+++ b/src/layouts/el_GR/main.qml
@@ -0,0 +1,393 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayoutLoader {
+ sharedLayouts: ['symbols']
+ sourceComponent: InputContext.inputEngine.inputMode === InputEngine.InputMode.Greek ? greekLayout : latinLayout
+ Component {
+ id: greekLayout
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "ς"
+ }
+ Key {
+ id: normalKey
+ text: "ε"
+ alternativeKeys: "εέ"
+ }
+ Key {
+ text: "ρ"
+ }
+ Key {
+ text: "τ"
+ }
+ Key {
+ text: "ψ"
+ }
+ Key {
+ text: "υ"
+ alternativeKeys: "υύϋΰ"
+ }
+ Key {
+ text: "θ"
+ }
+ Key {
+ text: "ι"
+ alternativeKeys: "ιίϊΐ"
+ }
+ Key {
+ text: "ο"
+ alternativeKeys: "οό"
+ }
+ Key {
+ text: "π"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ text: "α"
+ alternativeKeys: "αά"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ text: "σ"
+ }
+ Key {
+ text: "δ"
+ }
+ Key {
+ text: "φ"
+ }
+ Key {
+ text: "γ"
+ }
+ Key {
+ text: "η"
+ alternativeKeys: "ηή"
+ }
+ Key {
+ text: "ξ"
+ }
+ Key {
+ text: "κ"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ text: "λ"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ text: "ζ"
+ }
+ Key {
+ text: "χ"
+ }
+ Key {
+ text: "ψ"
+ }
+ Key {
+ text: "ω"
+ alternativeKeys: "ωώ"
+ }
+ Key {
+ text: "β"
+ }
+ Key {
+ text: "ν"
+ }
+ Key {
+ text: "μ"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ inputModes: [InputEngine.InputMode.Greek, InputEngine.InputMode.Latin]
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: latinLayout
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "êeëèé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ alternativeKeys: "ŕrř"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ alternativeKeys: "ţtŧť"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ alternativeKeys: "ÿyýŷ"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "űūũûüuùú"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "îïīĩiìí"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "œøõôöòóo"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly)) ? "a@äåãâàá" : "aäåãâàá"
+ smallTextVisible: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly))
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "šsşś"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ alternativeKeys: "dđď"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ alternativeKeys: "ġgģĝğ"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ alternativeKeys: "ĺŀłļľl"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zžż"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "çcċčć"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ alternativeKeys: "ņńnň"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ inputModes: [InputEngine.InputMode.Greek, InputEngine.InputMode.Latin]
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/el_GR/numbers.fallback b/src/layouts/el_GR/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/el_GR/numbers.fallback
diff --git a/src/layouts/el_GR/symbols.fallback b/src/layouts/el_GR/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/el_GR/symbols.fallback
diff --git a/src/layouts/en_GB/dialpad.fallback b/src/layouts/en_GB/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/en_GB/dialpad.fallback
diff --git a/src/layouts/en_GB/digits.fallback b/src/layouts/en_GB/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/en_GB/digits.fallback
diff --git a/src/layouts/en_GB/handwriting.fallback b/src/layouts/en_GB/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/en_GB/handwriting.fallback
diff --git a/src/layouts/en_GB/main.fallback b/src/layouts/en_GB/main.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/en_GB/main.fallback
diff --git a/src/layouts/en_GB/numbers.fallback b/src/layouts/en_GB/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/en_GB/numbers.fallback
diff --git a/src/layouts/en_GB/symbols.fallback b/src/layouts/en_GB/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/en_GB/symbols.fallback
diff --git a/src/layouts/en_US/dialpad.fallback b/src/layouts/en_US/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/en_US/dialpad.fallback
diff --git a/src/layouts/en_US/digits.fallback b/src/layouts/en_US/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/en_US/digits.fallback
diff --git a/src/layouts/en_US/handwriting.fallback b/src/layouts/en_US/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/en_US/handwriting.fallback
diff --git a/src/layouts/en_US/main.fallback b/src/layouts/en_US/main.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/en_US/main.fallback
diff --git a/src/layouts/en_US/numbers.fallback b/src/layouts/en_US/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/en_US/numbers.fallback
diff --git a/src/layouts/en_US/symbols.fallback b/src/layouts/en_US/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/en_US/symbols.fallback
diff --git a/src/layouts/es_ES/dialpad.fallback b/src/layouts/es_ES/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/es_ES/dialpad.fallback
diff --git a/src/layouts/es_ES/digits.fallback b/src/layouts/es_ES/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/es_ES/digits.fallback
diff --git a/src/layouts/es_ES/handwriting.qml b/src/layouts/es_ES/handwriting.qml
new file mode 100644
index 00000000..4f212a18
--- /dev/null
+++ b/src/layouts/es_ES/handwriting.qml
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+ inputMode: InputEngine.InputMode.Latin
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.¿?¡!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/es_ES/main.qml b/src/layouts/es_ES/main.qml
new file mode 100644
index 00000000..858f57fd
--- /dev/null
+++ b/src/layouts/es_ES/main.qml
@@ -0,0 +1,204 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "ēęėëeêèé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "üûuùú"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "ïįîiìí"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "öõôoòóº"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "äãaâàáª"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ Key {
+ key: Qt.Key_Ntilde
+ text: "ñ"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "čcçć"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!¿¡.?"
+ smallText: "¡¿"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/es_ES/numbers.fallback b/src/layouts/es_ES/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/es_ES/numbers.fallback
diff --git a/src/layouts/es_ES/symbols.qml b/src/layouts/es_ES/symbols.qml
new file mode 100644
index 00000000..0f13dc0e
--- /dev/null
+++ b/src/layouts/es_ES/symbols.qml
@@ -0,0 +1,370 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ property bool secondPage
+ onVisibleChanged: if (!visible) secondPage = false
+ sourceComponent: secondPage ? page2 : page1
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_At
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_NumberSign
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_Percent
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_Ampersand
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_Underscore
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_Minus
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_Plus
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_ParenLeft
+ text: "("
+ }
+ Key {
+ key: Qt.Key_ParenRight
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "1/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_QuoteDbl
+ text: '"'
+ }
+ Key {
+ key: Qt.Key_Less
+ text: "<"
+ }
+ Key {
+ key: Qt.Key_Greater
+ text: ">"
+ }
+ Key {
+ key: Qt.Key_Apostrophe
+ text: "'"
+ }
+ Key {
+ key: Qt.Key_Colon
+ text: ":"
+ }
+ Key {
+ key: Qt.Key_Slash
+ text: "/"
+ }
+ Key {
+ key: Qt.Key_exclamdown
+ text: "¡"
+ alternativeKeys: "¡!"
+ }
+ Key {
+ key: Qt.Key_questiondown
+ text: "¿"
+ alternativeKeys: "¿?"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_AsciiTilde
+ text: "~"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_Agrave
+ text: "`"
+ }
+ Key {
+ key: Qt.Key_Bar
+ text: "|"
+ }
+ Key {
+ key: 0x7B
+ text: "·"
+ }
+ Key {
+ key: 0x221A
+ text: "√"
+ }
+ Key {
+ key: Qt.Key_division
+ text: "÷"
+ }
+ Key {
+ key: Qt.Key_multiply
+ text: "×"
+ }
+ Key {
+ key: Qt.Key_onehalf
+ text: "½"
+ alternativeKeys: "¼⅓½¾⅞"
+ }
+ Key {
+ key: Qt.Key_BraceLeft
+ text: "{"
+ }
+ Key {
+ key: Qt.Key_BraceRight
+ text: "}"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Dollar
+ text: "$"
+ }
+ Key {
+ key: 0x20AC
+ text: "€"
+ }
+ Key {
+ key: 0xC2
+ text: "£"
+ }
+ Key {
+ key: 0xA2
+ text: "¢"
+ }
+ Key {
+ key: 0xA5
+ text: "¥"
+ }
+ Key {
+ key: Qt.Key_AsciiCircum
+ text: "^"
+ }
+ Key {
+ key: Qt.Key_Equal
+ text: "="
+ }
+ Key {
+ key: Qt.Key_section
+ text: "§"
+ }
+ Key {
+ key: Qt.Key_BracketLeft
+ text: "["
+ }
+ Key {
+ key: Qt.Key_BracketRight
+ text: "]"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "2/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: 0x2122
+ text: '™'
+ }
+ Key {
+ key: 0x00AE
+ text: '®'
+ }
+ Key {
+ key: Qt.Key_guillemotleft
+ text: '«'
+ }
+ Key {
+ key: Qt.Key_guillemotright
+ text: '»'
+ }
+ Key {
+ key: Qt.Key_Semicolon
+ text: ";"
+ }
+ Key {
+ key: 0x201C
+ text: '“'
+ }
+ Key {
+ key: 0x201D
+ text: '”'
+ }
+ Key {
+ key: Qt.Key_Backslash
+ text: "\\"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: InputContext.inputEngine.inputMode === InputEngine.InputMode.Cyrillic ? "АБВ" : "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: 0x2026
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u2026"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/es_MX/dialpad.fallback b/src/layouts/es_MX/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/es_MX/dialpad.fallback
diff --git a/src/layouts/es_MX/digits.fallback b/src/layouts/es_MX/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/es_MX/digits.fallback
diff --git a/src/layouts/es_MX/handwriting.qml b/src/layouts/es_MX/handwriting.qml
new file mode 100644
index 00000000..4f212a18
--- /dev/null
+++ b/src/layouts/es_MX/handwriting.qml
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+ inputMode: InputEngine.InputMode.Latin
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.¿?¡!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/es_MX/main.qml b/src/layouts/es_MX/main.qml
new file mode 100644
index 00000000..858f57fd
--- /dev/null
+++ b/src/layouts/es_MX/main.qml
@@ -0,0 +1,204 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "ēęėëeêèé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "üûuùú"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "ïįîiìí"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "öõôoòóº"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "äãaâàáª"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ Key {
+ key: Qt.Key_Ntilde
+ text: "ñ"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "čcçć"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!¿¡.?"
+ smallText: "¡¿"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/es_MX/numbers.fallback b/src/layouts/es_MX/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/es_MX/numbers.fallback
diff --git a/src/layouts/es_MX/symbols.qml b/src/layouts/es_MX/symbols.qml
new file mode 100644
index 00000000..b261242b
--- /dev/null
+++ b/src/layouts/es_MX/symbols.qml
@@ -0,0 +1,370 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ property bool secondPage
+ onVisibleChanged: if (!visible) secondPage = false
+ sourceComponent: secondPage ? page2 : page1
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_At
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_NumberSign
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_Percent
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_Ampersand
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_Underscore
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_Minus
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_Plus
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_ParenLeft
+ text: "("
+ }
+ Key {
+ key: Qt.Key_ParenRight
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "1/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_QuoteDbl
+ text: '"'
+ }
+ Key {
+ key: Qt.Key_Less
+ text: "<"
+ }
+ Key {
+ key: Qt.Key_Greater
+ text: ">"
+ }
+ Key {
+ key: Qt.Key_Apostrophe
+ text: "'"
+ }
+ Key {
+ key: Qt.Key_Colon
+ text: ":"
+ }
+ Key {
+ key: Qt.Key_Slash
+ text: "/"
+ }
+ Key {
+ key: Qt.Key_exclamdown
+ text: "¡"
+ alternativeKeys: "¡!"
+ }
+ Key {
+ key: Qt.Key_questiondown
+ text: "¿"
+ alternativeKeys: "¿?"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_AsciiTilde
+ text: "~"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_Agrave
+ text: "`"
+ }
+ Key {
+ key: Qt.Key_Bar
+ text: "|"
+ }
+ Key {
+ key: 0x7B
+ text: "·"
+ }
+ Key {
+ key: 0x221A
+ text: "√"
+ }
+ Key {
+ key: Qt.Key_division
+ text: "÷"
+ }
+ Key {
+ key: Qt.Key_multiply
+ text: "×"
+ }
+ Key {
+ key: Qt.Key_onehalf
+ text: "½"
+ alternativeKeys: "¼⅓½¾⅞"
+ }
+ Key {
+ key: Qt.Key_BraceLeft
+ text: "{"
+ }
+ Key {
+ key: Qt.Key_BraceRight
+ text: "}"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Dollar
+ text: "$"
+ }
+ Key {
+ key: 0x20AC
+ text: "€"
+ }
+ Key {
+ key: 0xC2
+ text: "£"
+ }
+ Key {
+ key: 0xA2
+ text: "¢"
+ }
+ Key {
+ key: 0xA5
+ text: "¥"
+ }
+ Key {
+ key: Qt.Key_AsciiCircum
+ text: "^"
+ }
+ Key {
+ key: Qt.Key_Equal
+ text: "="
+ }
+ Key {
+ key: Qt.Key_section
+ text: "§"
+ }
+ Key {
+ key: Qt.Key_BracketLeft
+ text: "["
+ }
+ Key {
+ key: Qt.Key_BracketRight
+ text: "]"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "2/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: 0x2122
+ text: '™'
+ }
+ Key {
+ key: 0x00AE
+ text: '®'
+ }
+ Key {
+ key: Qt.Key_guillemotleft
+ text: '«'
+ }
+ Key {
+ key: Qt.Key_guillemotright
+ text: '»'
+ }
+ Key {
+ key: Qt.Key_Semicolon
+ text: ";"
+ }
+ Key {
+ key: 0x201C
+ text: '“'
+ }
+ Key {
+ key: 0x201D
+ text: '”'
+ }
+ Key {
+ key: Qt.Key_Backslash
+ text: "\\"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: InputContext.inputEngine.inputMode === InputEngine.InputMode.Cyrillic ? "АБВ" : "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: 0x2026
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u2026"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/et_EE/dialpad.fallback b/src/layouts/et_EE/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/et_EE/dialpad.fallback
diff --git a/src/layouts/et_EE/digits.fallback b/src/layouts/et_EE/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/et_EE/digits.fallback
diff --git a/src/layouts/et_EE/handwriting.fallback b/src/layouts/et_EE/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/et_EE/handwriting.fallback
diff --git a/src/layouts/et_EE/main.qml b/src/layouts/et_EE/main.qml
new file mode 100644
index 00000000..6d4f2822
--- /dev/null
+++ b/src/layouts/et_EE/main.qml
@@ -0,0 +1,217 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "óöo"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ Key {
+ key: Qt.Key_Udiaeresis
+ text: "ü"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "sš"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ Key {
+ key: Qt.Key_Otilde
+ text: "õ"
+ }
+ Key {
+ key: Qt.Key_Adiaeresis
+ text: "ä"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ ShiftKey {
+ weight: 240
+ }
+ FillerKey {
+ weight: 80
+ }
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zž"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ weight: 80
+ }
+ BackspaceKey {
+ weight: 240
+ }
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/et_EE/numbers.fallback b/src/layouts/et_EE/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/et_EE/numbers.fallback
diff --git a/src/layouts/et_EE/symbols.fallback b/src/layouts/et_EE/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/et_EE/symbols.fallback
diff --git a/src/layouts/fa_FA/dialpad.fallback b/src/layouts/fa_FA/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fa_FA/dialpad.fallback
diff --git a/src/layouts/fa_FA/digits.qml b/src/layouts/fa_FA/digits.qml
new file mode 100644
index 00000000..8d0940c0
--- /dev/null
+++ b/src/layouts/fa_FA/digits.qml
@@ -0,0 +1,113 @@
+/****************************************************************************
+**
+** 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.VirtualKeyboard.Plugins
+
+KeyboardLayout {
+ inputMethod: PlainInputMethod {}
+ inputMode: InputEngine.InputMode.Numeric
+
+ KeyboardColumn {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.alignment: Qt.AlignHCenter
+ Layout.preferredWidth: height
+ KeyboardRow {
+ Key {
+ text: "\u06F7"
+ alternativeKeys: "\u06F77"
+ }
+ Key {
+ text: "\u06F8"
+ alternativeKeys: "\u06F88"
+ }
+ Key {
+ text: "\u06F9"
+ alternativeKeys: "\u06F99"
+ }
+ BackspaceKey {}
+ }
+ KeyboardRow {
+ Key {
+ text: "\u06F4"
+ alternativeKeys: "\u06F44"
+ }
+ Key {
+ text: "\u06F5"
+ alternativeKeys: "\u06F55"
+ }
+ Key {
+ text: "\u06F6"
+ alternativeKeys: "\u06F66"
+ }
+ Key {
+ text: " "
+ displayText: "\u2423"
+ repeat: true
+ showPreview: false
+ key: Qt.Key_Space
+ highlighted: true
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u06F1"
+ alternativeKeys: "\u06F11"
+ }
+ Key {
+ text: "\u06F2"
+ alternativeKeys: "\u06F22"
+ }
+ Key {
+ text: "\u06F3"
+ alternativeKeys: "\u06F33"
+ }
+ HideKeyboardKey {}
+ }
+ KeyboardRow {
+ ChangeLanguageKey {
+ customLayoutsOnly: true
+ }
+ Key {
+ text: "\u06F0"
+ alternativeKeys: "\u06F00"
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: "\u066B"
+ alternativeKeys: "\u066B,."
+ }
+ EnterKey {}
+ }
+ }
+}
diff --git a/src/layouts/fa_FA/handwriting.qml b/src/layouts/fa_FA/handwriting.qml
new file mode 100644
index 00000000..650a65a7
--- /dev/null
+++ b/src/layouts/fa_FA/handwriting.qml
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+ inputMode: InputEngine.InputMode.Arabic
+ readonly property bool alphabeticInputMode: [InputEngine.InputMode.Latin, InputEngine.InputMode.Dialable].indexOf(InputContext.inputEngine.inputMode) !== -1
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ alphabeticInputMode ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ inputModeNameList: [
+ "ABC", // InputEngine.InputMode.Latin
+ "\u0660\u0661\u0662", // InputEngine.InputMode.Numeric
+ "123", // InputEngine.InputMode.Dialable
+ "", // InputEngine.InputMode.Pinyin
+ "", // InputEngine.InputMode.Cangjie
+ "", // InputEngine.InputMode.Zhuyin
+ "", // InputEngine.InputMode.Hangul
+ "", // InputEngine.InputMode.Hiragana
+ "", // InputEngine.InputMode.Katakana
+ "", // InputEngine.InputMode.FullwidthLatin
+ "", // InputEngine.InputMode.Greek
+ "", // InputEngine.InputMode.Cyrillic
+ "\u0627\u200C\u0628\u200C\u067E", // InputEngine.InputMode.Arabic
+ ]
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: alphabeticInputMode ? "," : "\u060C"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: alphabeticInputMode ? "#%&*/\\\"'=+-_:;,.?!<>()" : "#%&*/\\\"'=+-_:\u061B.\u061F!<>()"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/fa_FA/main.qml b/src/layouts/fa_FA/main.qml
new file mode 100644
index 00000000..b33da21b
--- /dev/null
+++ b/src/layouts/fa_FA/main.qml
@@ -0,0 +1,190 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Arabic
+ keyWeight: 160
+ smallTextVisible: true
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "\u0635"
+ alternativeKeys: "1\u0635\u0636\u0661"
+ smallText: "\u0636\u0661"
+ }
+ Key {
+ id: normalKey
+ text: "\u0642"
+ alternativeKeys: "2\u0642\u0662"
+ }
+ Key {
+ text: "\u0641"
+ alternativeKeys: "3\u0641\u0663"
+ }
+ Key {
+ text: "\u063A"
+ alternativeKeys: "4\u063A\u0664"
+ }
+ Key {
+ text: "\u0639"
+ alternativeKeys: "5\u0639\u0665"
+ }
+ Key {
+ text: "\u0647"
+ alternativeKeys: "6\u0647\u0666"
+ }
+ Key {
+ text: "\u062E"
+ alternativeKeys: "7\u062E\u0667"
+ }
+ Key {
+ text: "\u062D"
+ alternativeKeys: "8\u062D\u0668"
+ }
+ Key {
+ text: "\u062C"
+ alternativeKeys: "9\u062C\u0669"
+ }
+ Key {
+ text: "\u0686"
+ alternativeKeys: "0\u0686\u0660"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u0634"
+ }
+ Key {
+ text: "\u0633"
+ }
+ Key {
+ text: "\u06CC"
+ }
+ Key {
+ text: "\u0628"
+ }
+ Key {
+ text: "\u0644"
+ }
+ Key {
+ text: "\u0627"
+ alternativeKeys: "\u0625\u0627\u0623\u0622"
+ }
+ Key {
+ text: "\u062A"
+ alternativeKeys: "\u062A\u062B"
+ }
+ Key {
+ text: "\u0646"
+ }
+ Key {
+ text: "\u0645"
+ }
+ Key {
+ text: "\u06A9"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u200C"
+ alternativeKeys: "\u200C\u200D"
+ displayText: "\u25C2\u205E\u25B8"
+ displayAlternativeKeys: ["\u25B8\u205E\u25C2"]
+ highlighted: true
+ }
+ Key {
+ text: "\u064E"
+ alternativeKeys: "\u064C\u064E\u064F\u0652\u064B\u064D\u0640\u0651\u0650"
+ smallText: "\u25CC\u064F "
+ }
+ Key {
+ text: "\u0637"
+ alternativeKeys: "\u0637\u0638"
+ }
+ Key {
+ text: "\u0632"
+ alternativeKeys: "\u0632\u0698"
+ }
+ Key {
+ text: "\u0631"
+ }
+ Key {
+ text: "\u0630"
+ }
+ Key {
+ text: "\u062F"
+ }
+ Key {
+ text: "\u0648"
+ alternativeKeys: "\u0624\u0648\u0621"
+ }
+ Key {
+ text: "\u06AF"
+ alternativeKeys: "\u06AF\u067E"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ displayText: "\u0661\u0662\u0663\u061F"
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u060C"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!,\u060C\u061B.\u061F"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/fa_FA/numbers.qml b/src/layouts/fa_FA/numbers.qml
new file mode 100644
index 00000000..6b4d00ad
--- /dev/null
+++ b/src/layouts/fa_FA/numbers.qml
@@ -0,0 +1,186 @@
+/****************************************************************************
+**
+** 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.VirtualKeyboard.Plugins
+
+KeyboardLayout {
+ inputMethod: PlainInputMethod {}
+ inputMode: InputEngine.InputMode.Numeric
+
+ KeyboardRow {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.alignment: Qt.AlignHCenter
+ KeyboardColumn {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.preferredWidth: parent.height / 4 * 3
+ KeyboardRow {
+ Key {
+ key: Qt.Key_ParenLeft
+ text: "("
+ }
+ Key {
+ key: Qt.Key_ParenRight
+ text: ")"
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_division
+ text: "\u00F7"
+ }
+ Key {
+ key: Qt.Key_multiply
+ text: "\u00D7"
+ }
+ Key {
+ key: Qt.Key_Plus
+ text: "+"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_AsciiCircum
+ text: "^"
+ }
+ Key {
+ key: Qt.Key_Slash
+ text: "/"
+ }
+ Key {
+ key: Qt.Key_Minus
+ text: "-"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: 0x221A
+ text: "√"
+ }
+ Key {
+ key: Qt.Key_Percent
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ }
+ }
+ }
+ KeyboardColumn {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.preferredWidth: parent.height / 8
+ KeyboardRow {
+ FillerKey {}
+ }
+ }
+ KeyboardColumn {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.preferredWidth: parent.height
+ KeyboardRow {
+ Key {
+ text: "\u06F7"
+ alternativeKeys: "\u06F77"
+ }
+ Key {
+ text: "\u06F8"
+ alternativeKeys: "\u06F88"
+ }
+ Key {
+ text: "\u06F9"
+ alternativeKeys: "\u06F99"
+ }
+ BackspaceKey {}
+ }
+ KeyboardRow {
+ Key {
+ text: "\u06F4"
+ alternativeKeys: "\u06F44"
+ }
+ Key {
+ text: "\u06F5"
+ alternativeKeys: "\u06F55"
+ }
+ Key {
+ text: "\u06F6"
+ alternativeKeys: "\u06F66"
+ }
+ Key {
+ text: " "
+ displayText: "\u2423"
+ repeat: true
+ showPreview: false
+ key: Qt.Key_Space
+ highlighted: true
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u06F1"
+ alternativeKeys: "\u06F11"
+ }
+ Key {
+ text: "\u06F2"
+ alternativeKeys: "\u06F22"
+ }
+ Key {
+ text: "\u06F3"
+ alternativeKeys: "\u06F33"
+ }
+ HideKeyboardKey {}
+ }
+ KeyboardRow {
+ ChangeLanguageKey {
+ customLayoutsOnly: true
+ }
+ Key {
+ text: "\u06F0"
+ alternativeKeys: "\u06F00"
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: "\u066B"
+ alternativeKeys: "\u066B,."
+ }
+ EnterKey {}
+ }
+ }
+ }
+}
diff --git a/src/layouts/fa_FA/symbols.qml b/src/layouts/fa_FA/symbols.qml
new file mode 100644
index 00000000..13fab8fa
--- /dev/null
+++ b/src/layouts/fa_FA/symbols.qml
@@ -0,0 +1,373 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ property bool secondPage
+ onVisibleChanged: if (!visible) secondPage = false
+ sourceComponent: secondPage ? page2 : page1
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ smallTextVisible: true
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "\u06F1"
+ alternativeKeys: "\u06F11"
+ }
+ Key {
+ id: normalKey
+ text: "\u06F2"
+ alternativeKeys: "\u06F22"
+ }
+ Key {
+ text: "\u06F3"
+ alternativeKeys: "\u06F33"
+ }
+ Key {
+ text: "\u06F4"
+ alternativeKeys: "\u06F44"
+ }
+ Key {
+ text: "\u06F5"
+ alternativeKeys: "\u06F55"
+ }
+ Key {
+ text: "\u06F6"
+ alternativeKeys: "\u06F66"
+ }
+ Key {
+ text: "\u06F7"
+ alternativeKeys: "\u06F77"
+ }
+ Key {
+ text: "\u06F8"
+ alternativeKeys: "\u06F88"
+ }
+ Key {
+ text: "\u06F9"
+ alternativeKeys: "\u06F99"
+ }
+ Key {
+ text: "\u06F0"
+ alternativeKeys: "\u06F00"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_At
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_NumberSign
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_Percent
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_Ampersand
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_Underscore
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_Minus
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_Plus
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_ParenLeft
+ text: "("
+ }
+ Key {
+ key: Qt.Key_ParenRight
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "1/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_QuoteDbl
+ text: '"'
+ }
+ Key {
+ key: Qt.Key_Less
+ text: "<"
+ }
+ Key {
+ key: Qt.Key_Greater
+ text: ">"
+ }
+ Key {
+ key: Qt.Key_Apostrophe
+ text: "'"
+ }
+ Key {
+ key: Qt.Key_Semicolon
+ text: "\u061B"
+ alternativeKeys: "\u061B;"
+ }
+ Key {
+ key: Qt.Key_Slash
+ text: "/"
+ }
+ Key {
+ key: Qt.Key_Exclam
+ text: "!"
+ }
+ Key {
+ key: Qt.Key_Question
+ text: "\u061F"
+ alternativeKeys: "\u061F?"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "\u0627\u200C\u0628\u200C\u067E"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u060C"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!,\u060C."
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ smallTextVisible: true
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_AsciiTilde
+ text: "~"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_Agrave
+ text: "`"
+ }
+ Key {
+ key: Qt.Key_Bar
+ text: "|"
+ }
+ Key {
+ key: 0x7B
+ text: "·"
+ }
+ Key {
+ key: 0x221A
+ text: "√"
+ }
+ Key {
+ key: Qt.Key_division
+ text: "÷"
+ }
+ Key {
+ key: Qt.Key_multiply
+ text: "×"
+ }
+ Key {
+ key: Qt.Key_onehalf
+ text: "½"
+ alternativeKeys: "¼⅓½¾⅞"
+ }
+ Key {
+ key: Qt.Key_BraceLeft
+ text: "{"
+ }
+ Key {
+ key: Qt.Key_BraceRight
+ text: "}"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Dollar
+ text: "$"
+ }
+ Key {
+ key: 0x20AC
+ text: "€"
+ }
+ Key {
+ key: 0xC2
+ text: "£"
+ }
+ Key {
+ key: 0xA2
+ text: "¢"
+ }
+ Key {
+ key: 0xFDFC
+ text: "\uFDFC"
+ }
+ Key {
+ key: Qt.Key_AsciiCircum
+ text: "^"
+ }
+ Key {
+ key: Qt.Key_Equal
+ text: "="
+ }
+ Key {
+ key: Qt.Key_section
+ text: "§"
+ }
+ Key {
+ key: Qt.Key_BracketLeft
+ text: "["
+ }
+ Key {
+ key: Qt.Key_BracketRight
+ text: "]"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "2/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: 0x2122
+ text: '™'
+ }
+ Key {
+ key: 0x00AE
+ text: '®'
+ }
+ Key {
+ key: Qt.Key_guillemotleft
+ text: '«'
+ }
+ Key {
+ key: Qt.Key_guillemotright
+ text: '»'
+ }
+ Key {
+ key: Qt.Key_Colon
+ text: ":"
+ }
+ Key {
+ key: 0x201C
+ text: '“'
+ }
+ Key {
+ key: 0x201D
+ text: '”'
+ }
+ Key {
+ key: Qt.Key_Backslash
+ text: "\\"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "\u0627\u200C\u0628\u200C\u067E"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u060C"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: 0x2026
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u2026"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/fallback/dialpad.qml b/src/layouts/fallback/dialpad.qml
new file mode 100644
index 00000000..c7eb8384
--- /dev/null
+++ b/src/layouts/fallback/dialpad.qml
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.VirtualKeyboard.Plugins
+
+KeyboardLayout {
+ inputMethod: PlainInputMethod {}
+ inputMode: InputEngine.InputMode.Numeric
+
+ KeyboardColumn {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.alignment: Qt.AlignHCenter
+ Layout.preferredWidth: height
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ BackspaceKey {}
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ text: " "
+ displayText: "\u2423"
+ repeat: true
+ showPreview: false
+ key: Qt.Key_Space
+ highlighted: true
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ HideKeyboardKey {}
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ alternativeKeys: "*+"
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ Key {
+ text: "#"
+ key: Qt.Key_NumberSign
+ }
+ EnterKey {}
+ }
+ }
+}
diff --git a/src/layouts/fallback/digits.qml b/src/layouts/fallback/digits.qml
new file mode 100644
index 00000000..1c87f7f7
--- /dev/null
+++ b/src/layouts/fallback/digits.qml
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.VirtualKeyboard.Plugins
+
+KeyboardLayout {
+ inputMethod: PlainInputMethod {}
+ inputMode: InputEngine.InputMode.Numeric
+
+ KeyboardColumn {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.alignment: Qt.AlignHCenter
+ Layout.preferredWidth: height
+ KeyboardRow {
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ BackspaceKey {}
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ text: " "
+ displayText: "\u2423"
+ repeat: true
+ showPreview: false
+ key: Qt.Key_Space
+ highlighted: true
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ HideKeyboardKey {}
+ }
+ KeyboardRow {
+ ChangeLanguageKey {
+ customLayoutsOnly: true
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ Key {
+ // The decimal key, if it is not "," then we fallback to
+ // "." in case it is an unhandled different result
+ key: Qt.locale().decimalPoint === "," ? Qt.Key_Comma : Qt.Key_Period
+ text: Qt.locale().decimalPoint === "," ? "," : "."
+ }
+ EnterKey {}
+ }
+ }
+}
diff --git a/src/layouts/fallback/handwriting.qml b/src/layouts/fallback/handwriting.qml
new file mode 100644
index 00000000..660b40bc
--- /dev/null
+++ b/src/layouts/fallback/handwriting.qml
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/fallback/main.qml b/src/layouts/fallback/main.qml
new file mode 100644
index 00000000..36e708b6
--- /dev/null
+++ b/src/layouts/fallback/main.qml
@@ -0,0 +1,221 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "êeëèé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ alternativeKeys: "ŕrř"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ alternativeKeys: "ţtŧť"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ alternativeKeys: "ÿyýŷ"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "űūũûüuùú"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "îïīĩiìí"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "œøõôöòóo"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aäåãâàá"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "šsşś"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ alternativeKeys: "dđď"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ alternativeKeys: "ġgģĝğ"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ alternativeKeys: "ĺŀłļľl"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zžż"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "çcċčć"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ alternativeKeys: "ņńnň"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/fallback/numbers.qml b/src/layouts/fallback/numbers.qml
new file mode 100644
index 00000000..fddecb63
--- /dev/null
+++ b/src/layouts/fallback/numbers.qml
@@ -0,0 +1,186 @@
+/****************************************************************************
+**
+** 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.VirtualKeyboard.Plugins
+
+KeyboardLayout {
+ inputMethod: PlainInputMethod {}
+ inputMode: InputEngine.InputMode.Numeric
+
+ KeyboardRow {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.alignment: Qt.AlignHCenter
+ KeyboardColumn {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.preferredWidth: parent.height / 4 * 3
+ KeyboardRow {
+ Key {
+ key: Qt.Key_ParenLeft
+ text: "("
+ }
+ Key {
+ key: Qt.Key_ParenRight
+ text: ")"
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_division
+ text: "\u00F7"
+ }
+ Key {
+ key: Qt.Key_multiply
+ text: "\u00D7"
+ }
+ Key {
+ key: Qt.Key_Plus
+ text: "+"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_AsciiCircum
+ text: "^"
+ }
+ Key {
+ key: Qt.Key_Slash
+ text: "/"
+ }
+ Key {
+ key: Qt.Key_Minus
+ text: "-"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: 0x221A
+ text: "√"
+ }
+ Key {
+ key: Qt.Key_Percent
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ }
+ }
+ }
+ KeyboardColumn {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.preferredWidth: parent.height / 8
+ KeyboardRow {
+ FillerKey {}
+ }
+ }
+ KeyboardColumn {
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+ Layout.preferredWidth: parent.height
+ KeyboardRow {
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ BackspaceKey {}
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ text: " "
+ displayText: "\u2423"
+ repeat: true
+ showPreview: false
+ key: Qt.Key_Space
+ highlighted: true
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ HideKeyboardKey {}
+ }
+ KeyboardRow {
+ ChangeLanguageKey {
+ customLayoutsOnly: true
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: ".,"
+ }
+ EnterKey {}
+ }
+ }
+ }
+}
diff --git a/src/layouts/fallback/symbols.qml b/src/layouts/fallback/symbols.qml
new file mode 100644
index 00000000..41facf47
--- /dev/null
+++ b/src/layouts/fallback/symbols.qml
@@ -0,0 +1,368 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ property bool secondPage
+ onVisibleChanged: if (!visible) secondPage = false
+ sourceComponent: secondPage ? page2 : page1
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_At
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_NumberSign
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_Percent
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_Ampersand
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_Underscore
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_Minus
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_Plus
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_ParenLeft
+ text: "("
+ }
+ Key {
+ key: Qt.Key_ParenRight
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "1/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_QuoteDbl
+ text: '"'
+ }
+ Key {
+ key: Qt.Key_Less
+ text: "<"
+ }
+ Key {
+ key: Qt.Key_Greater
+ text: ">"
+ }
+ Key {
+ key: Qt.Key_Apostrophe
+ text: "'"
+ }
+ Key {
+ key: Qt.Key_Colon
+ text: ":"
+ }
+ Key {
+ key: Qt.Key_Slash
+ text: "/"
+ }
+ Key {
+ key: Qt.Key_Exclam
+ text: "!"
+ }
+ Key {
+ key: Qt.Key_Question
+ text: "?"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: InputContext.inputEngine.inputMode === InputEngine.InputMode.Cyrillic ? "АБВ" : "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_AsciiTilde
+ text: "~"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_Agrave
+ text: "`"
+ }
+ Key {
+ key: Qt.Key_Bar
+ text: "|"
+ }
+ Key {
+ key: 0x7B
+ text: "·"
+ }
+ Key {
+ key: 0x221A
+ text: "√"
+ }
+ Key {
+ key: Qt.Key_division
+ text: "÷"
+ }
+ Key {
+ key: Qt.Key_multiply
+ text: "×"
+ }
+ Key {
+ key: Qt.Key_onehalf
+ text: "½"
+ alternativeKeys: "¼⅓½¾⅞"
+ }
+ Key {
+ key: Qt.Key_BraceLeft
+ text: "{"
+ }
+ Key {
+ key: Qt.Key_BraceRight
+ text: "}"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Dollar
+ text: "$"
+ }
+ Key {
+ key: 0x20AC
+ text: "€"
+ }
+ Key {
+ key: 0xC2
+ text: "£"
+ }
+ Key {
+ key: 0xA2
+ text: "¢"
+ }
+ Key {
+ key: 0xA5
+ text: "¥"
+ }
+ Key {
+ key: Qt.Key_AsciiCircum
+ text: "^"
+ }
+ Key {
+ key: Qt.Key_Equal
+ text: "="
+ }
+ Key {
+ key: Qt.Key_section
+ text: "§"
+ }
+ Key {
+ key: Qt.Key_BracketLeft
+ text: "["
+ }
+ Key {
+ key: Qt.Key_BracketRight
+ text: "]"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "2/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: 0x2122
+ text: '™'
+ }
+ Key {
+ key: 0x00AE
+ text: '®'
+ }
+ Key {
+ key: Qt.Key_guillemotleft
+ text: '«'
+ }
+ Key {
+ key: Qt.Key_guillemotright
+ text: '»'
+ }
+ Key {
+ key: Qt.Key_Semicolon
+ text: ";"
+ }
+ Key {
+ key: 0x201C
+ text: '“'
+ }
+ Key {
+ key: 0x201D
+ text: '”'
+ }
+ Key {
+ key: Qt.Key_Backslash
+ text: "\\"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: InputContext.inputEngine.inputMode === InputEngine.InputMode.Cyrillic ? "АБВ" : "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: 0x2026
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u2026"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/fi_FI/dialpad.fallback b/src/layouts/fi_FI/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fi_FI/dialpad.fallback
diff --git a/src/layouts/fi_FI/digits.fallback b/src/layouts/fi_FI/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fi_FI/digits.fallback
diff --git a/src/layouts/fi_FI/handwriting.fallback b/src/layouts/fi_FI/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fi_FI/handwriting.fallback
diff --git a/src/layouts/fi_FI/main.qml b/src/layouts/fi_FI/main.qml
new file mode 100644
index 00000000..8d02cffb
--- /dev/null
+++ b/src/layouts/fi_FI/main.qml
@@ -0,0 +1,214 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ Key {
+ key: Qt.Key_Aring
+ text: "å"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ Key {
+ key: Qt.Key_Odiaeresis
+ text: "ö"
+ }
+ Key {
+ key: Qt.Key_Adiaeresis
+ text: "ä"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ ShiftKey {
+ weight: 240
+ }
+ FillerKey {
+ weight: 80
+ }
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ weight: 80
+ }
+ BackspaceKey {
+ weight: 240
+ }
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/fi_FI/numbers.fallback b/src/layouts/fi_FI/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fi_FI/numbers.fallback
diff --git a/src/layouts/fi_FI/symbols.fallback b/src/layouts/fi_FI/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fi_FI/symbols.fallback
diff --git a/src/layouts/fr_CA/dialpad.fallback b/src/layouts/fr_CA/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fr_CA/dialpad.fallback
diff --git a/src/layouts/fr_CA/digits.fallback b/src/layouts/fr_CA/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fr_CA/digits.fallback
diff --git a/src/layouts/fr_CA/handwriting.fallback b/src/layouts/fr_CA/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fr_CA/handwriting.fallback
diff --git a/src/layouts/fr_CA/main.qml b/src/layouts/fr_CA/main.qml
new file mode 100644
index 00000000..0f29a8d9
--- /dev/null
+++ b/src/layouts/fr_CA/main.qml
@@ -0,0 +1,213 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "éèeêë"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ alternativeKeys: "yÿ"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "ùuûü"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "îiï"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "ôoœ"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aàâæ"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "cç"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/fr_CA/numbers.fallback b/src/layouts/fr_CA/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fr_CA/numbers.fallback
diff --git a/src/layouts/fr_CA/symbols.fallback b/src/layouts/fr_CA/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fr_CA/symbols.fallback
diff --git a/src/layouts/fr_FR/dialpad.fallback b/src/layouts/fr_FR/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fr_FR/dialpad.fallback
diff --git a/src/layouts/fr_FR/digits.fallback b/src/layouts/fr_FR/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fr_FR/digits.fallback
diff --git a/src/layouts/fr_FR/handwriting.fallback b/src/layouts/fr_FR/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fr_FR/handwriting.fallback
diff --git a/src/layouts/fr_FR/main.qml b/src/layouts/fr_FR/main.qml
new file mode 100644
index 00000000..e3fd8a7f
--- /dev/null
+++ b/src/layouts/fr_FR/main.qml
@@ -0,0 +1,201 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aàâæ"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "éèeêë"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ alternativeKeys: "yÿ"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "ùuûü"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "îiï"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "ôoœ"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "cç"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_Apostrophe
+ text: "'"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/fr_FR/numbers.fallback b/src/layouts/fr_FR/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fr_FR/numbers.fallback
diff --git a/src/layouts/fr_FR/symbols.fallback b/src/layouts/fr_FR/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/fr_FR/symbols.fallback
diff --git a/src/layouts/he_IL/dialpad.fallback b/src/layouts/he_IL/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/he_IL/dialpad.fallback
diff --git a/src/layouts/he_IL/digits.fallback b/src/layouts/he_IL/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/he_IL/digits.fallback
diff --git a/src/layouts/he_IL/handwriting.qml b/src/layouts/he_IL/handwriting.qml
new file mode 100644
index 00000000..aba7d6cb
--- /dev/null
+++ b/src/layouts/he_IL/handwriting.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ InputContext.inputEngine.inputMode !== InputEngine.InputMode.Hebrew ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/he_IL/main.qml b/src/layouts/he_IL/main.qml
new file mode 100644
index 00000000..8950a2ad
--- /dev/null
+++ b/src/layouts/he_IL/main.qml
@@ -0,0 +1,402 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayoutLoader {
+ sharedLayouts: ['symbols']
+ sourceComponent: InputContext.inputEngine.inputMode === InputEngine.InputMode.Hebrew ? hebrewLayout : latinLayout
+ Component {
+ id: hebrewLayout
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_Apostrophe
+ text: "'"
+ alternativeKeys: "'\""
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ text: "\u05E7"
+ alternativeKeys: "\u05B3\u05E7\u05B8\u05BB"
+ }
+ Key {
+ text: "\u05E8"
+ }
+ Key {
+ text: "\u05D0"
+ }
+ Key {
+ text: "\u05D8"
+ }
+ Key {
+ text: "\u05D5"
+ alternativeKeys: [ "\u05D5", "\u05D5\u05B9", "\u05D5\u05BC" ]
+ }
+ Key {
+ text: "\u05DF"
+ }
+ Key {
+ text: "\u05DD"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ text: "\u05E4"
+ alternativeKeys: "\u05B2\u05B7\u05E4"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u05E9"
+ alternativeKeys: [ "\u05E9", "\u05B0", "\u05E9\u05C2", "\u05E9\u05C1" ]
+ }
+ Key {
+ id: normalKey
+ text: "\u05D3"
+ alternativeKeys: "\u05D3\u05BC"
+ }
+ Key {
+ text: "\u05D2"
+ alternativeKeys: [ "\u05D2", "\u05D2\u05F3" ]
+ }
+ Key {
+ text: "\u05DB"
+ }
+ Key {
+ text: "\u05E2"
+ }
+ Key {
+ text: "\u05D9"
+ alternativeKeys: [ "\u05D9", "\u05F2\u05B7" ]
+ }
+ Key {
+ text: "\u05D7"
+ alternativeKeys: [ "\u05B9", "\u05D7", "\u05D7\u05F3", "\u05B4" ]
+ }
+ Key {
+ text: "\u05DC"
+ }
+ Key {
+ text: "\u05DA"
+ }
+ Key {
+ text: "\u05E3"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u05D6"
+ alternativeKeys: [ "\u05D6", "\u05D6\u05F3" ]
+ }
+ Key {
+ text: "\u05E1"
+ alternativeKeys: "\u05E1\u05B6\u05B1"
+ }
+ Key {
+ text: "\u05D1"
+ }
+ Key {
+ text: "\u05D4"
+ }
+ Key {
+ text: "\u05E0"
+ }
+ Key {
+ text: "\u05DE"
+ }
+ Key {
+ text: "\u05E6"
+ alternativeKeys: [ "\u05E6", "\u05E6\u05F3", "\u05B5" ]
+ }
+ Key {
+ text: "\u05EA"
+ alternativeKeys: [ "\u05EA", "\u05EA\u05F3" ]
+ }
+ Key {
+ text: "\u05E5"
+ alternativeKeys: [ "\u05E5", "\u05E5\u05F3" ]
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ inputModes: [InputEngine.InputMode.Hebrew, InputEngine.InputMode.Latin]
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: latinLayout
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "êeëèé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ alternativeKeys: "ŕrř"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ alternativeKeys: "ţtŧť"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ alternativeKeys: "ÿyýŷ"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "űūũûüuùú"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "îïīĩiìí"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "œøõôöòóo"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly)) ? "a@äåãâàá" : "aäåãâàá"
+ smallTextVisible: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly))
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "šsşś"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ alternativeKeys: "dđď"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ alternativeKeys: "ġgģĝğ"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ alternativeKeys: "ĺŀłļľl"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zžż"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "çcċčć"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ alternativeKeys: "ņńnň"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ enabled: !(InputContext.inputMethodHints & Qt.ImhLatinOnly) && inputModeCount > 1
+ inputModes: [InputEngine.InputMode.Hebrew, InputEngine.InputMode.Latin]
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/he_IL/numbers.fallback b/src/layouts/he_IL/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/he_IL/numbers.fallback
diff --git a/src/layouts/he_IL/symbols.qml b/src/layouts/he_IL/symbols.qml
new file mode 100644
index 00000000..a7c25afc
--- /dev/null
+++ b/src/layouts/he_IL/symbols.qml
@@ -0,0 +1,368 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ property bool secondPage
+ onVisibleChanged: if (!visible) secondPage = false
+ sourceComponent: secondPage ? page2 : page1
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_At
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_NumberSign
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_Percent
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_Ampersand
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_Underscore
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_Minus
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_Plus
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_ParenLeft
+ text: "("
+ }
+ Key {
+ key: Qt.Key_ParenRight
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "1/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_QuoteDbl
+ text: '"'
+ }
+ Key {
+ key: Qt.Key_Less
+ text: "<"
+ }
+ Key {
+ key: Qt.Key_Greater
+ text: ">"
+ }
+ Key {
+ key: Qt.Key_Apostrophe
+ text: "'"
+ }
+ Key {
+ key: Qt.Key_Colon
+ text: ":"
+ }
+ Key {
+ key: Qt.Key_Slash
+ text: "/"
+ }
+ Key {
+ key: Qt.Key_Exclam
+ text: "!"
+ }
+ Key {
+ key: Qt.Key_Question
+ text: "?"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: InputContext.inputEngine.inputMode === InputEngine.InputMode.Hebrew ? "\u05D0\u05D1\u05D2" : "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_AsciiTilde
+ text: "~"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_Agrave
+ text: "`"
+ }
+ Key {
+ key: Qt.Key_Bar
+ text: "|"
+ }
+ Key {
+ key: 0x7B
+ text: "·"
+ }
+ Key {
+ key: 0x221A
+ text: "√"
+ }
+ Key {
+ key: Qt.Key_division
+ text: "÷"
+ }
+ Key {
+ key: Qt.Key_multiply
+ text: "×"
+ }
+ Key {
+ key: Qt.Key_onehalf
+ text: "½"
+ alternativeKeys: "¼⅓½¾⅞"
+ }
+ Key {
+ key: Qt.Key_BraceLeft
+ text: "{"
+ }
+ Key {
+ key: Qt.Key_BraceRight
+ text: "}"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Dollar
+ text: "$"
+ alternativeKeys: "$¢"
+ }
+ Key {
+ key: 0x20AC
+ text: "€"
+ }
+ Key {
+ key: 0xC2
+ text: "£"
+ }
+ Key {
+ text: "₪"
+ }
+ Key {
+ key: 0xA5
+ text: "¥"
+ }
+ Key {
+ key: Qt.Key_AsciiCircum
+ text: "^"
+ }
+ Key {
+ key: Qt.Key_Equal
+ text: "="
+ }
+ Key {
+ key: Qt.Key_section
+ text: "§"
+ }
+ Key {
+ key: Qt.Key_BracketLeft
+ text: "["
+ }
+ Key {
+ key: Qt.Key_BracketRight
+ text: "]"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "2/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: 0x2122
+ text: '™'
+ }
+ Key {
+ key: 0x00AE
+ text: '®'
+ }
+ Key {
+ key: Qt.Key_guillemotleft
+ text: '«'
+ }
+ Key {
+ key: Qt.Key_guillemotright
+ text: '»'
+ }
+ Key {
+ key: Qt.Key_Semicolon
+ text: ";"
+ }
+ Key {
+ key: 0x201C
+ text: '“'
+ }
+ Key {
+ key: 0x201D
+ text: '”'
+ }
+ Key {
+ key: Qt.Key_Backslash
+ text: "\\"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: InputContext.inputEngine.inputMode === InputEngine.InputMode.Hebrew ? "\u05D0\u05D1\u05D2" : "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: 0x2026
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u2026"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/hi_IN/dialpad.fallback b/src/layouts/hi_IN/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/hi_IN/dialpad.fallback
diff --git a/src/layouts/hi_IN/digits.fallback b/src/layouts/hi_IN/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/hi_IN/digits.fallback
diff --git a/src/layouts/hi_IN/handwriting.qml b/src/layouts/hi_IN/handwriting.qml
new file mode 100644
index 00000000..660b40bc
--- /dev/null
+++ b/src/layouts/hi_IN/handwriting.qml
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/hi_IN/main.qml b/src/layouts/hi_IN/main.qml
new file mode 100644
index 00000000..9d125b0a
--- /dev/null
+++ b/src/layouts/hi_IN/main.qml
@@ -0,0 +1,209 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ smallTextVisible: true
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "\u0914"
+ alternativeKeys: "\u0914\u094C\u0967"
+ }
+ Key {
+ id: normalKey
+ text: "\u0910"
+ alternativeKeys: "\u0910\u0948\u0968"
+ }
+ Key {
+ text: "\u0906"
+ alternativeKeys: "\u0906\u093E\u0969"
+ }
+ Key {
+ text: "\u0908"
+ alternativeKeys: "\u0908\u0940\u096A"
+ }
+ Key {
+ text: "\u090A"
+ alternativeKeys: "\u090A\u0942\u096B"
+ }
+ Key {
+ text: "\u092C"
+ alternativeKeys: "\u092C\u092D\u096C"
+ }
+ Key {
+ text: "\u0939"
+ alternativeKeys: "\u0939\u096D"
+ }
+ Key {
+ text: "\u0917"
+ alternativeKeys: "\u0917\u0918\u096E"
+ }
+ Key {
+ text: "\u0926"
+ alternativeKeys: "\u0926\u0927\u096F"
+ }
+ Key {
+ text: "\u091C"
+ alternativeKeys: "\u0966\u091E\u091D\u091C"
+ }
+ Key {
+ text: "\u0921"
+ alternativeKeys: "\u0921\u0922"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u0913"
+ alternativeKeys: "\u0913\u094B"
+ }
+ Key {
+ text: "\u090F"
+ alternativeKeys: "\u090F\u0947"
+ }
+ Key {
+ text: "\u0905"
+ }
+ Key {
+ text: "\u0907"
+ alternativeKeys: "\u0907\u093F"
+ }
+ Key {
+ text: "\u0909"
+ alternativeKeys: "\u0909\u0941"
+ }
+ Key {
+ text: "\u092A"
+ alternativeKeys: "\u092A\u092B"
+ }
+ Key {
+ text: "\u0930"
+ alternativeKeys: "\u0930\u090B\u0943"
+ }
+ Key {
+ text: "\u0915"
+ alternativeKeys: "\u0915\u0916"
+ }
+ Key {
+ text: "\u0924"
+ alternativeKeys: ["\u0924", "\u0925", "\u0924\u094D\u0930"]
+ }
+ Key {
+ text: "\u091A"
+ alternativeKeys: "\u091A\u091B"
+ }
+ Key {
+ text: "\u091F"
+ alternativeKeys: "\u091F\u0920"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u200C"
+ alternativeKeys: "\u200C\u200D"
+ displayText: "\u25C2\u205E\u25B8"
+ displayAlternativeKeys: ["\u25B8\u205E\u25C2"]
+ highlighted: true
+ }
+ Key {
+ text: "\u0911"
+ alternativeKeys: "\u0911\u0949"
+ }
+ Key {
+ text: "\u094D"
+ alternativeKeys: "\u094D\u0945\u090D"
+ }
+ Key {
+ text: "\u0902"
+ alternativeKeys: "\u093C\u0902\u0903\u0901\u093D"
+ }
+ Key {
+ text: "\u092E"
+ alternativeKeys: "\u092E\u0950"
+ }
+ Key {
+ text: "\u0928"
+ alternativeKeys: "\u0919\u0928\u0923\u091E"
+ }
+ Key {
+ text: "\u0935"
+ }
+ Key {
+ text: "\u0932"
+ alternativeKeys: "\u0932\u0933"
+ }
+ Key {
+ text: "\u0938"
+ alternativeKeys: ["\u0936\u094D\u0930", "\u0938", "\u0936", "\u0937"]
+ }
+ Key {
+ text: "\u092F"
+ alternativeKeys: "\u0943"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ displayText: "&\u0967\u0968\u0969"
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/hi_IN/numbers.fallback b/src/layouts/hi_IN/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/hi_IN/numbers.fallback
diff --git a/src/layouts/hi_IN/symbols.qml b/src/layouts/hi_IN/symbols.qml
new file mode 100644
index 00000000..7ca595a7
--- /dev/null
+++ b/src/layouts/hi_IN/symbols.qml
@@ -0,0 +1,378 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ property bool secondPage
+ onVisibleChanged: if (!visible) secondPage = false
+ sourceComponent: secondPage ? page2 : page1
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "\u0967"
+ alternativeKeys: "\u09671"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_2
+ text: "\u0968"
+ alternativeKeys: "\u09682"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "\u0969"
+ alternativeKeys: "\u09693"
+ }
+ Key {
+ key: Qt.Key_4
+ text: "\u096A"
+ alternativeKeys: "\u096A4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "\u096B"
+ alternativeKeys: "\u096B5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "\u096C"
+ alternativeKeys: "\u096C6"
+ }
+ Key {
+ key: Qt.Key_7
+ text: "\u096D"
+ alternativeKeys: "\u096D7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "\u096E"
+ alternativeKeys: "\u096E8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "\u096F"
+ alternativeKeys: "\u096F9"
+ }
+ Key {
+ key: Qt.Key_0
+ text: "\u0966"
+ alternativeKeys: "\u09660"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_At
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_NumberSign
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_Percent
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_Ampersand
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_Underscore
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_Minus
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_Plus
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_ParenLeft
+ text: "("
+ }
+ Key {
+ key: Qt.Key_ParenRight
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "1/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_QuoteDbl
+ text: '"'
+ }
+ Key {
+ key: Qt.Key_Less
+ text: "<"
+ }
+ Key {
+ key: Qt.Key_Greater
+ text: ">"
+ }
+ Key {
+ key: Qt.Key_Apostrophe
+ text: "'"
+ }
+ Key {
+ key: Qt.Key_Colon
+ text: ":"
+ }
+ Key {
+ key: Qt.Key_Slash
+ text: "/"
+ }
+ Key {
+ key: Qt.Key_Exclam
+ text: "!"
+ }
+ Key {
+ key: Qt.Key_Question
+ text: "?"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "\u0915\u0916\u0917"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_AsciiTilde
+ text: "~"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_Agrave
+ text: "`"
+ }
+ Key {
+ key: Qt.Key_Bar
+ text: "|"
+ }
+ Key {
+ key: 0x7B
+ text: "·"
+ }
+ Key {
+ key: 0x221A
+ text: "√"
+ }
+ Key {
+ key: Qt.Key_division
+ text: "÷"
+ }
+ Key {
+ key: Qt.Key_multiply
+ text: "×"
+ }
+ Key {
+ key: Qt.Key_onehalf
+ text: "½"
+ alternativeKeys: "¼⅓½¾⅞"
+ }
+ Key {
+ key: Qt.Key_BraceLeft
+ text: "{"
+ }
+ Key {
+ key: Qt.Key_BraceRight
+ text: "}"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Dollar
+ text: "$"
+ }
+ Key {
+ key: 0x20AC
+ text: "€"
+ }
+ Key {
+ key: 0xC2
+ text: "£"
+ }
+ Key {
+ key: 0xA2
+ text: "¢"
+ }
+ Key {
+ key: 0x20B9
+ text: "\u20B9"
+ }
+ Key {
+ key: Qt.Key_AsciiCircum
+ text: "^"
+ }
+ Key {
+ key: Qt.Key_Equal
+ text: "="
+ }
+ Key {
+ key: Qt.Key_section
+ text: "§"
+ }
+ Key {
+ key: Qt.Key_BracketLeft
+ text: "["
+ }
+ Key {
+ key: Qt.Key_BracketRight
+ text: "]"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "2/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: 0x2122
+ text: '™'
+ }
+ Key {
+ key: 0x00AE
+ text: '®'
+ }
+ Key {
+ key: Qt.Key_guillemotleft
+ text: '«'
+ }
+ Key {
+ key: Qt.Key_guillemotright
+ text: '»'
+ }
+ Key {
+ key: Qt.Key_Semicolon
+ text: ";"
+ }
+ Key {
+ key: 0x201C
+ text: '“'
+ }
+ Key {
+ key: 0x201D
+ text: '”'
+ }
+ Key {
+ key: Qt.Key_Backslash
+ text: "\\"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "\u0915\u0916\u0917"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: 0x2026
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u2026"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/hr_HR/dialpad.fallback b/src/layouts/hr_HR/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/hr_HR/dialpad.fallback
diff --git a/src/layouts/hr_HR/digits.fallback b/src/layouts/hr_HR/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/hr_HR/digits.fallback
diff --git a/src/layouts/hr_HR/handwriting.qml b/src/layouts/hr_HR/handwriting.qml
new file mode 100644
index 00000000..80b6d45f
--- /dev/null
+++ b/src/layouts/hr_HR/handwriting.qml
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+ inputMode: InputEngine.InputMode.Latin
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/hr_HR/main.qml b/src/layouts/hr_HR/main.qml
new file mode 100644
index 00000000..6f52ed21
--- /dev/null
+++ b/src/layouts/hr_HR/main.qml
@@ -0,0 +1,208 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "oö"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ Key {
+ key: 0x160
+ text: "š"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aåä"
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ Key {
+ key: 0x10C
+ text: "č"
+ }
+ Key {
+ key: 0x106
+ text: "ć"
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ Key {
+ key: 0x110
+ text: "đ"
+ }
+ Key {
+ key: 0x17D
+ text: "ž"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/hr_HR/numbers.fallback b/src/layouts/hr_HR/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/hr_HR/numbers.fallback
diff --git a/src/layouts/hr_HR/symbols.fallback b/src/layouts/hr_HR/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/hr_HR/symbols.fallback
diff --git a/src/layouts/hu_HU/dialpad.fallback b/src/layouts/hu_HU/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/hu_HU/dialpad.fallback
diff --git a/src/layouts/hu_HU/digits.fallback b/src/layouts/hu_HU/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/hu_HU/digits.fallback
diff --git a/src/layouts/hu_HU/handwriting.qml b/src/layouts/hu_HU/handwriting.qml
new file mode 100644
index 00000000..80b6d45f
--- /dev/null
+++ b/src/layouts/hu_HU/handwriting.qml
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+ inputMode: InputEngine.InputMode.Latin
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/hu_HU/main.qml b/src/layouts/hu_HU/main.qml
new file mode 100644
index 00000000..cc3d2d6e
--- /dev/null
+++ b/src/layouts/hu_HU/main.qml
@@ -0,0 +1,213 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "eé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zž"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "úűuü"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "ií"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "óőoö"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aåäá"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "sš"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/hu_HU/numbers.fallback b/src/layouts/hu_HU/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/hu_HU/numbers.fallback
diff --git a/src/layouts/hu_HU/symbols.fallback b/src/layouts/hu_HU/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/hu_HU/symbols.fallback
diff --git a/src/layouts/id_ID/dialpad.fallback b/src/layouts/id_ID/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/id_ID/dialpad.fallback
diff --git a/src/layouts/id_ID/digits.fallback b/src/layouts/id_ID/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/id_ID/digits.fallback
diff --git a/src/layouts/id_ID/handwriting.fallback b/src/layouts/id_ID/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/id_ID/handwriting.fallback
diff --git a/src/layouts/id_ID/main.fallback b/src/layouts/id_ID/main.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/id_ID/main.fallback
diff --git a/src/layouts/id_ID/numbers.fallback b/src/layouts/id_ID/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/id_ID/numbers.fallback
diff --git a/src/layouts/id_ID/symbols.fallback b/src/layouts/id_ID/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/id_ID/symbols.fallback
diff --git a/src/layouts/it_IT/dialpad.fallback b/src/layouts/it_IT/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/it_IT/dialpad.fallback
diff --git a/src/layouts/it_IT/digits.fallback b/src/layouts/it_IT/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/it_IT/digits.fallback
diff --git a/src/layouts/it_IT/handwriting.fallback b/src/layouts/it_IT/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/it_IT/handwriting.fallback
diff --git a/src/layouts/it_IT/main.qml b/src/layouts/it_IT/main.qml
new file mode 100644
index 00000000..97717da4
--- /dev/null
+++ b/src/layouts/it_IT/main.qml
@@ -0,0 +1,211 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "eèé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "uùú"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "iìí"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "oòó"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aàá"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/it_IT/numbers.fallback b/src/layouts/it_IT/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/it_IT/numbers.fallback
diff --git a/src/layouts/it_IT/symbols.fallback b/src/layouts/it_IT/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/it_IT/symbols.fallback
diff --git a/src/layouts/ja_JP/dialpad.fallback b/src/layouts/ja_JP/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ja_JP/dialpad.fallback
diff --git a/src/layouts/ja_JP/digits.fallback b/src/layouts/ja_JP/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ja_JP/digits.fallback
diff --git a/src/layouts/ja_JP/handwriting.qml b/src/layouts/ja_JP/handwriting.qml
new file mode 100644
index 00000000..0b193435
--- /dev/null
+++ b/src/layouts/ja_JP/handwriting.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ InputContext.inputEngine.inputMode !== InputEngine.InputMode.JapaneseHandwriting ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: "、"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "‘’“”~…—《》〈〉「」\",.:;。?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/ja_JP/main.qml b/src/layouts/ja_JP/main.qml
new file mode 100644
index 00000000..577fd2cd
--- /dev/null
+++ b/src/layouts/ja_JP/main.qml
@@ -0,0 +1,463 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayoutLoader {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; JapaneseInputMethod {}', parent, "japaneseInputMethod")
+ }
+ sharedLayouts: ['symbols']
+ sourceComponent: InputContext.inputEngine.inputMode === InputEngine.InputMode.FullwidthLatin ? page2 : page1
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ Layout.preferredWidth: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ Layout.preferredWidth: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ Layout.preferredWidth: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u3001"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ enabled: !(InputContext.inputMethodHints & Qt.ImhLatinOnly) && inputModeCount > 1
+ Layout.preferredWidth: normalKeyWidth
+ Layout.fillWidth: false
+ inputModeNameList: [
+ "半角", // InputEngine.InputMode.Latin
+ "", // InputEngine.InputMode.Numeric
+ "", // InputEngine.InputMode.Dialable
+ "", // InputEngine.InputMode.Pinyin
+ "", // InputEngine.InputMode.Cangjie
+ "", // InputEngine.InputMode.Zhuyin
+ "", // InputEngine.InputMode.Hangul
+ "あ", // InputEngine.InputMode.Hiragana
+ "カ", // InputEngine.InputMode.Katakana
+ "全角", // InputEngine.InputMode.FullwidthLatin
+ ]
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Left
+ Layout.preferredWidth: normalKeyWidth / 2
+ Layout.fillWidth: false
+ displayText: "\u2190"
+ repeat: true
+ noModifier: true
+ functionKey: true
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_Right
+ Layout.preferredWidth: normalKeyWidth / 2
+ Layout.fillWidth: false
+ displayText: "\u2192"
+ repeat: true
+ noModifier: true
+ functionKey: true
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_Period
+ Layout.preferredWidth: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u3002"
+ alternativeKeys: "\u3001\uFF01\u3002\uFF1F,.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "\uFF51"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "\uFF57"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "\uFF45"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "\uFF52"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "\uFF54"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "\uFF59"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "\uFF55"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "\uFF49"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "\uFF4F"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "\uFF50"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "\uFF41"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "\uFF53"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "\uFF44"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "\uFF46"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "\uFF47"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "\uFF48"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "\uFF4A"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "\uFF4B"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "\uFF4C"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "\uFF5A"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "\uFF58"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "\uFF43"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "\uFF56"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "\uFF42"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "\uFF4E"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "\uFF4D"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u3001"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ enabled: !(InputContext.inputMethodHints & Qt.ImhLatinOnly) && inputModeCount > 1
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ inputModeNameList: [
+ "半角", // InputEngine.InputMode.Latin
+ "", // InputEngine.InputMode.Numeric
+ "", // InputEngine.InputMode.Dialable
+ "", // InputEngine.InputMode.Pinyin
+ "", // InputEngine.InputMode.Cangjie
+ "", // InputEngine.InputMode.Zhuyin
+ "", // InputEngine.InputMode.Hangul
+ "あ", // InputEngine.InputMode.Hiragana
+ "カ", // InputEngine.InputMode.Katakana
+ "全角", // InputEngine.InputMode.FullwidthLatin
+ ]
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Left
+ weight: normalKeyWidth / 2
+ Layout.fillWidth: false
+ displayText: "\u2190"
+ repeat: true
+ noModifier: true
+ functionKey: true
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_Right
+ weight: normalKeyWidth / 2
+ Layout.fillWidth: false
+ displayText: "\u2192"
+ repeat: true
+ noModifier: true
+ functionKey: true
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u3002"
+ alternativeKeys: "\u3001\uFF01\u3002\uFF1F,.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/ja_JP/numbers.fallback b/src/layouts/ja_JP/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ja_JP/numbers.fallback
diff --git a/src/layouts/ja_JP/symbols.qml b/src/layouts/ja_JP/symbols.qml
new file mode 100644
index 00000000..96f1f001
--- /dev/null
+++ b/src/layouts/ja_JP/symbols.qml
@@ -0,0 +1,488 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; JapaneseInputMethod {}', parent, "symbols.qml")
+ }
+ sharedLayouts: ['main']
+ property int page
+ readonly property int numPages: 3
+ readonly property string inputModeName: {
+ switch (InputContext.inputEngine.inputMode) {
+ case InputEngine.Katakana:
+ return "アイウ"
+ case InputEngine.Hiragana:
+ return "あいう"
+ default:
+ return "ABC"
+ }
+ }
+ sourceComponent: {
+ switch (page) {
+ case 2: return page3
+ case 1: return page2
+ default: return page1
+ }
+ }
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "("
+ }
+ Key {
+ key: Qt.Key_1
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: (page + 1) + "/" + numPages
+ functionKey: true
+ onClicked: page = (page + 1) % numPages
+ highlighted: true
+ }
+ Key {
+ text: "“"
+ }
+ Key {
+ text: "”"
+ }
+ Key {
+ text: "、"
+ }
+ Key {
+ text: ":"
+ }
+ Key {
+ text: ";"
+ }
+ Key {
+ text: "!"
+ }
+ Key {
+ text: "?"
+ }
+ Key {
+ text: "~"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: inputModeName
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "—"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "½"
+ alternativeKeys: "½¼¾"
+ }
+ Key {
+ id: normalKey
+ text: "'"
+ }
+ Key {
+ text: "/"
+ }
+ Key {
+ text: "\\"
+ }
+ Key {
+ text: "|"
+ }
+ Key {
+ text: "["
+ }
+ Key {
+ text: "]"
+ }
+ Key {
+ text: "{"
+ }
+ Key {
+ text: "}"
+ }
+ Key {
+ text: "·"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "<"
+ }
+ Key {
+ text: ">"
+ }
+ Key {
+ text: ","
+ }
+ Key {
+ text: "."
+ }
+ Key {
+ text: ":"
+ }
+ Key {
+ text: ";"
+ }
+ Key {
+ text: "!"
+ }
+ Key {
+ text: "?"
+ }
+ Key {
+ text: "="
+ }
+ Key {
+ text: "~"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: (page + 1) + "/" + numPages
+ functionKey: true
+ onClicked: page = (page + 1) % numPages
+ highlighted: true
+ }
+ Key {
+ text: "\""
+ }
+ Key {
+ text: "§"
+ }
+ Key {
+ text: "^"
+ }
+ Key {
+ text: "$"
+ }
+ Key {
+ text: "¥"
+ }
+ Key {
+ text: "€"
+ }
+ Key {
+ text: "£"
+ }
+ Key {
+ text: "¢"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: inputModeName
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "。"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page3
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "\"
+ }
+ Key {
+ id: normalKey
+ text: "/"
+ }
+ Key {
+ text: "("
+ }
+ Key {
+ text: ")"
+ }
+ Key {
+ text: "〔"
+ }
+ Key {
+ text: "〕"
+ }
+ Key {
+ text: "〈"
+ }
+ Key {
+ text: "〉"
+ }
+ Key {
+ text: "《"
+ }
+ Key {
+ text: "》"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "→"
+ }
+ Key {
+ text: "←"
+ }
+ Key {
+ text: "↑"
+ }
+ Key {
+ text: "↓"
+ }
+ Key {
+ text: "■"
+ }
+ Key {
+ text: "□"
+ }
+ Key {
+ text: "●"
+ }
+ Key {
+ text: "○"
+ }
+ Key {
+ text: "【"
+ }
+ Key {
+ text: "】"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: (page + 1) + "/" + numPages
+ functionKey: true
+ onClicked: page = (page + 1) % numPages
+ highlighted: true
+ }
+ Key {
+ text: "『"
+ }
+ Key {
+ text: "』"
+ }
+ Key {
+ text: "「"
+ }
+ Key {
+ text: "」"
+ }
+ Key {
+ text: "★"
+ }
+ Key {
+ text: "☆"
+ }
+ Key {
+ text: "◆"
+ }
+ Key {
+ text: "◇"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: inputModeName
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "…"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/ko_KR/dialpad.fallback b/src/layouts/ko_KR/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ko_KR/dialpad.fallback
diff --git a/src/layouts/ko_KR/digits.fallback b/src/layouts/ko_KR/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ko_KR/digits.fallback
diff --git a/src/layouts/ko_KR/handwriting.qml b/src/layouts/ko_KR/handwriting.qml
new file mode 100644
index 00000000..2af59703
--- /dev/null
+++ b/src/layouts/ko_KR/handwriting.qml
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+ inputMode: preferredInputMode()
+
+ Connections {
+ target: InputContext
+ function onInputMethodHintsChanged() {
+ var newInputMode = preferredInputMode()
+ if (InputContext.inputEngine.inputModes.indexOf(newInputMode) !== -1)
+ InputContext.inputEngine.inputMode = newInputMode
+ }
+ }
+
+ function preferredInputMode() {
+ return InputContext.inputMethodHints &
+ (Qt.ImhPreferLatin | Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly |
+ Qt.ImhLatinOnly) ? InputEngine.InputMode.Latin : InputEngine.InputMode.KoreanHandwriting
+ }
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ InputContext.inputEngine.inputMode !== InputEngine.InputMode.KoreanHandwriting ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/ko_KR/main.qml b/src/layouts/ko_KR/main.qml
new file mode 100644
index 00000000..cb8fa3cc
--- /dev/null
+++ b/src/layouts/ko_KR/main.qml
@@ -0,0 +1,344 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayoutLoader {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HangulInputMethod {}', parent, "main.qml")
+ }
+ sourceComponent: InputContext.shiftActive ? page2 : page1
+ sharedLayouts: ['symbols']
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "\u3142"
+ alternativeKeys: "\u3142\u3143"
+ }
+ Key {
+ id: normalKey
+ text: "\u3148"
+ alternativeKeys: "\u3148\u3149"
+ }
+ Key {
+ text: "\u3137"
+ alternativeKeys: "\u3137\u3138"
+ }
+ Key {
+ text: "\u3131"
+ alternativeKeys: "\u3131\u3132"
+ }
+ Key {
+ text: "\u3145"
+ alternativeKeys: "\u3145\u3146"
+ }
+ Key {
+ text: "\u315B"
+ }
+ Key {
+ text: "\u3155"
+ }
+ Key {
+ text: "\u3151"
+ }
+ Key {
+ text: "\u3150"
+ alternativeKeys: "\u3150\u3152"
+ }
+ Key {
+ text: "\u3154"
+ alternativeKeys: "\u3154\u3156"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ text: "\u3141"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ text: "\u3134"
+ }
+ Key {
+ text: "\u3147"
+ }
+ Key {
+ text: "\u3139"
+ }
+ Key {
+ text: "\u314E"
+ }
+ Key {
+ text: "\u3157"
+ }
+ Key {
+ text: "\u3153"
+ }
+ Key {
+ text: "\u314F"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ text: "\u3163"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ text: "\u314B"
+ }
+ Key {
+ text: "\u314C"
+ }
+ Key {
+ text: "\u314A"
+ }
+ Key {
+ text: "\u314D"
+ }
+ Key {
+ text: "\u3160"
+ }
+ Key {
+ text: "\u315C"
+ }
+ Key {
+ text: "\u3161"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "\u3143"
+ }
+ Key {
+ id: normalKey
+ text: "\u3149"
+ }
+ Key {
+ text: "\u3138"
+ }
+ Key {
+ text: "\u3132"
+ }
+ Key {
+ text: "\u3146"
+ }
+ Key {
+ text: "\u315B"
+ }
+ Key {
+ text: "\u3155"
+ }
+ Key {
+ text: "\u3151"
+ }
+ Key {
+ text: "\u3152"
+ }
+ Key {
+ text: "\u3156"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ text: "\u3141"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ text: "\u3134"
+ }
+ Key {
+ text: "\u3147"
+ }
+ Key {
+ text: "\u3139"
+ }
+ Key {
+ text: "\u314E"
+ }
+ Key {
+ text: "\u3157"
+ }
+ Key {
+ text: "\u3153"
+ }
+ Key {
+ text: "\u314F"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ text: "\u3163"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ text: "\u314B"
+ }
+ Key {
+ text: "\u314C"
+ }
+ Key {
+ text: "\u314A"
+ }
+ Key {
+ text: "\u314D"
+ }
+ Key {
+ text: "\u3160"
+ }
+ Key {
+ text: "\u315C"
+ }
+ Key {
+ text: "\u3161"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/ko_KR/numbers.fallback b/src/layouts/ko_KR/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ko_KR/numbers.fallback
diff --git a/src/layouts/ko_KR/symbols.qml b/src/layouts/ko_KR/symbols.qml
new file mode 100644
index 00000000..fc0dfb2f
--- /dev/null
+++ b/src/layouts/ko_KR/symbols.qml
@@ -0,0 +1,372 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HangulInputMethod {}', parent, "symbols.qml")
+ }
+ sharedLayouts: ['main']
+ property bool secondPage
+ onVisibleChanged: if (!visible) secondPage = false
+ sourceComponent: secondPage ? page2 : page1
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_At
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_NumberSign
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_Percent
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_Ampersand
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_Underscore
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_Minus
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_Plus
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_ParenLeft
+ text: "("
+ }
+ Key {
+ key: Qt.Key_ParenRight
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "1/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_QuoteDbl
+ text: '"'
+ }
+ Key {
+ key: Qt.Key_Less
+ text: "<"
+ }
+ Key {
+ key: Qt.Key_Greater
+ text: ">"
+ }
+ Key {
+ key: Qt.Key_Apostrophe
+ text: "'"
+ }
+ Key {
+ key: Qt.Key_Colon
+ text: ":"
+ }
+ Key {
+ key: Qt.Key_Slash
+ text: "/"
+ }
+ Key {
+ key: Qt.Key_Exclam
+ text: "!"
+ }
+ Key {
+ key: Qt.Key_Question
+ text: "?"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "\uD55C\uAE00"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_AsciiTilde
+ text: "~"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_Agrave
+ text: "`"
+ }
+ Key {
+ key: Qt.Key_Bar
+ text: "|"
+ }
+ Key {
+ key: 0x7B
+ text: "·"
+ }
+ Key {
+ key: 0x221A
+ text: "√"
+ }
+ Key {
+ key: Qt.Key_division
+ text: "÷"
+ }
+ Key {
+ key: Qt.Key_multiply
+ text: "×"
+ }
+ Key {
+ key: Qt.Key_onehalf
+ text: "½"
+ alternativeKeys: "¼⅓½¾⅞"
+ }
+ Key {
+ key: Qt.Key_BraceLeft
+ text: "{"
+ }
+ Key {
+ key: Qt.Key_BraceRight
+ text: "}"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Dollar
+ text: "$"
+ }
+ Key {
+ key: 0x20AC
+ text: "€"
+ }
+ Key {
+ key: 0xC2
+ text: "£"
+ }
+ Key {
+ key: 0x20A9
+ text: "\u20A9"
+ }
+ Key {
+ key: 0xA5
+ text: "¥"
+ }
+ Key {
+ key: Qt.Key_AsciiCircum
+ text: "^"
+ }
+ Key {
+ key: Qt.Key_Equal
+ text: "="
+ }
+ Key {
+ key: Qt.Key_section
+ text: "§"
+ }
+ Key {
+ key: Qt.Key_BracketLeft
+ text: "["
+ }
+ Key {
+ key: Qt.Key_BracketRight
+ text: "]"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "2/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: 0x2122
+ text: '™'
+ }
+ Key {
+ key: 0x00AE
+ text: '®'
+ }
+ Key {
+ key: Qt.Key_guillemotleft
+ text: '«'
+ }
+ Key {
+ key: Qt.Key_guillemotright
+ text: '»'
+ }
+ Key {
+ key: Qt.Key_Semicolon
+ text: ";"
+ }
+ Key {
+ key: 0x201C
+ text: '“'
+ }
+ Key {
+ key: 0x201D
+ text: '”'
+ }
+ Key {
+ key: Qt.Key_Backslash
+ text: "\\"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "\uD55C\uAE00"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: 0x2026
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u2026"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/ms_MY/dialpad.fallback b/src/layouts/ms_MY/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ms_MY/dialpad.fallback
diff --git a/src/layouts/ms_MY/digits.fallback b/src/layouts/ms_MY/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ms_MY/digits.fallback
diff --git a/src/layouts/ms_MY/handwriting.fallback b/src/layouts/ms_MY/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ms_MY/handwriting.fallback
diff --git a/src/layouts/ms_MY/main.fallback b/src/layouts/ms_MY/main.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ms_MY/main.fallback
diff --git a/src/layouts/ms_MY/numbers.fallback b/src/layouts/ms_MY/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ms_MY/numbers.fallback
diff --git a/src/layouts/ms_MY/symbols.fallback b/src/layouts/ms_MY/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ms_MY/symbols.fallback
diff --git a/src/layouts/nb_NO/dialpad.fallback b/src/layouts/nb_NO/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/nb_NO/dialpad.fallback
diff --git a/src/layouts/nb_NO/digits.fallback b/src/layouts/nb_NO/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/nb_NO/digits.fallback
diff --git a/src/layouts/nb_NO/handwriting.fallback b/src/layouts/nb_NO/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/nb_NO/handwriting.fallback
diff --git a/src/layouts/nb_NO/main.qml b/src/layouts/nb_NO/main.qml
new file mode 100644
index 00000000..3c127710
--- /dev/null
+++ b/src/layouts/nb_NO/main.qml
@@ -0,0 +1,220 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "eéèê"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "uü"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "oöóòô"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ Key {
+ key: Qt.Key_Aring
+ text: "å"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aäâá"
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ Key {
+ key: Qt.Key_Ooblique
+ text: "ø"
+ alternativeKeys: "øö"
+ }
+ Key {
+ key: Qt.Key_AE
+ text: "æ"
+ alternativeKeys: "æä"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ ShiftKey {
+ weight: 240
+ }
+ FillerKey {
+ weight: 80
+ }
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ weight: 80
+ }
+ BackspaceKey {
+ weight: 240
+ }
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/nb_NO/numbers.fallback b/src/layouts/nb_NO/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/nb_NO/numbers.fallback
diff --git a/src/layouts/nb_NO/symbols.fallback b/src/layouts/nb_NO/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/nb_NO/symbols.fallback
diff --git a/src/layouts/nl_NL/dialpad.fallback b/src/layouts/nl_NL/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/nl_NL/dialpad.fallback
diff --git a/src/layouts/nl_NL/digits.fallback b/src/layouts/nl_NL/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/nl_NL/digits.fallback
diff --git a/src/layouts/nl_NL/handwriting.fallback b/src/layouts/nl_NL/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/nl_NL/handwriting.fallback
diff --git a/src/layouts/nl_NL/main.fallback b/src/layouts/nl_NL/main.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/nl_NL/main.fallback
diff --git a/src/layouts/nl_NL/numbers.fallback b/src/layouts/nl_NL/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/nl_NL/numbers.fallback
diff --git a/src/layouts/nl_NL/symbols.fallback b/src/layouts/nl_NL/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/nl_NL/symbols.fallback
diff --git a/src/layouts/pl_PL/dialpad.fallback b/src/layouts/pl_PL/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pl_PL/dialpad.fallback
diff --git a/src/layouts/pl_PL/digits.fallback b/src/layouts/pl_PL/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pl_PL/digits.fallback
diff --git a/src/layouts/pl_PL/handwriting.fallback b/src/layouts/pl_PL/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pl_PL/handwriting.fallback
diff --git a/src/layouts/pl_PL/main.qml b/src/layouts/pl_PL/main.qml
new file mode 100644
index 00000000..cbf074fb
--- /dev/null
+++ b/src/layouts/pl_PL/main.qml
@@ -0,0 +1,215 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "eę"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "oó"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aą"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "sś"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ alternativeKeys: "lł"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zźż"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ alternativeKeys: "xź"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "cć"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ alternativeKeys: "nń"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/pl_PL/numbers.fallback b/src/layouts/pl_PL/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pl_PL/numbers.fallback
diff --git a/src/layouts/pl_PL/symbols.fallback b/src/layouts/pl_PL/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pl_PL/symbols.fallback
diff --git a/src/layouts/pt_BR/dialpad.fallback b/src/layouts/pt_BR/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pt_BR/dialpad.fallback
diff --git a/src/layouts/pt_BR/digits.fallback b/src/layouts/pt_BR/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pt_BR/digits.fallback
diff --git a/src/layouts/pt_BR/handwriting.fallback b/src/layouts/pt_BR/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pt_BR/handwriting.fallback
diff --git a/src/layouts/pt_BR/main.qml b/src/layouts/pt_BR/main.qml
new file mode 100644
index 00000000..e5d2cb0d
--- /dev/null
+++ b/src/layouts/pt_BR/main.qml
@@ -0,0 +1,200 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "ēęėëeêèé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "üûuùú"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "ïįîiìí"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "öõôoòó"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "äãaâàá"
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ Key {
+ key: Qt.Key_Ccedilla
+ text: "ç"
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "čcć"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/pt_BR/numbers.fallback b/src/layouts/pt_BR/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pt_BR/numbers.fallback
diff --git a/src/layouts/pt_BR/symbols.fallback b/src/layouts/pt_BR/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pt_BR/symbols.fallback
diff --git a/src/layouts/pt_PT/dialpad.fallback b/src/layouts/pt_PT/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pt_PT/dialpad.fallback
diff --git a/src/layouts/pt_PT/digits.fallback b/src/layouts/pt_PT/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pt_PT/digits.fallback
diff --git a/src/layouts/pt_PT/handwriting.fallback b/src/layouts/pt_PT/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pt_PT/handwriting.fallback
diff --git a/src/layouts/pt_PT/main.qml b/src/layouts/pt_PT/main.qml
new file mode 100644
index 00000000..e5d2cb0d
--- /dev/null
+++ b/src/layouts/pt_PT/main.qml
@@ -0,0 +1,200 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "ēęėëeêèé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "üûuùú"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "ïįîiìí"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "öõôoòó"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "äãaâàá"
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ Key {
+ key: Qt.Key_Ccedilla
+ text: "ç"
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "čcć"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/pt_PT/numbers.fallback b/src/layouts/pt_PT/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pt_PT/numbers.fallback
diff --git a/src/layouts/pt_PT/symbols.fallback b/src/layouts/pt_PT/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/pt_PT/symbols.fallback
diff --git a/src/layouts/ro_RO/dialpad.fallback b/src/layouts/ro_RO/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ro_RO/dialpad.fallback
diff --git a/src/layouts/ro_RO/digits.fallback b/src/layouts/ro_RO/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ro_RO/digits.fallback
diff --git a/src/layouts/ro_RO/handwriting.qml b/src/layouts/ro_RO/handwriting.qml
new file mode 100644
index 00000000..80b6d45f
--- /dev/null
+++ b/src/layouts/ro_RO/handwriting.qml
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+ inputMode: InputEngine.InputMode.Latin
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/ro_RO/main.qml b/src/layouts/ro_RO/main.qml
new file mode 100644
index 00000000..4bb7478c
--- /dev/null
+++ b/src/layouts/ro_RO/main.qml
@@ -0,0 +1,210 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ alternativeKeys: "tț"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "iî"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aâă"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "sș"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/ro_RO/numbers.fallback b/src/layouts/ro_RO/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ro_RO/numbers.fallback
diff --git a/src/layouts/ro_RO/symbols.fallback b/src/layouts/ro_RO/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ro_RO/symbols.fallback
diff --git a/src/layouts/ru_RU/dialpad.fallback b/src/layouts/ru_RU/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ru_RU/dialpad.fallback
diff --git a/src/layouts/ru_RU/digits.fallback b/src/layouts/ru_RU/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ru_RU/digits.fallback
diff --git a/src/layouts/ru_RU/handwriting.qml b/src/layouts/ru_RU/handwriting.qml
new file mode 100644
index 00000000..092d746e
--- /dev/null
+++ b/src/layouts/ru_RU/handwriting.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ InputContext.inputEngine.inputMode !== InputEngine.InputMode.Cyrillic ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/ru_RU/main.qml b/src/layouts/ru_RU/main.qml
new file mode 100644
index 00000000..91b0415a
--- /dev/null
+++ b/src/layouts/ru_RU/main.qml
@@ -0,0 +1,414 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayoutLoader {
+ sharedLayouts: ['symbols']
+ sourceComponent: InputContext.inputEngine.inputMode === InputEngine.InputMode.Cyrillic ? cyrillicLayout : latinLayout
+ Component {
+ id: cyrillicLayout
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: 0x0419
+ text: "й"
+ }
+ Key {
+ id: normalKey
+ key: 0x0426
+ text: "ц"
+ }
+ Key {
+ key: 0x0423
+ text: "у"
+ }
+ Key {
+ key: 0x041A
+ text: "к"
+ }
+ Key {
+ key: 0x0415
+ text: "е"
+ alternativeKeys: "её"
+ }
+ Key {
+ key: 0x041D
+ text: "н"
+ }
+ Key {
+ key: 0x0413
+ text: "г"
+ }
+ Key {
+ key: 0x0428
+ text: "ш"
+ }
+ Key {
+ key: 0x0429
+ text: "щ"
+ }
+ Key {
+ key: 0x0417
+ text: "з"
+ }
+ Key {
+ key: 0x0425
+ text: "х"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: 0x0424
+ text: "ф"
+ }
+ Key {
+ key: 0x042B
+ text: "ы"
+ }
+ Key {
+ key: 0x0412
+ text: "в"
+ }
+ Key {
+ key: 0x0410
+ text: "а"
+ }
+ Key {
+ key: 0x041F
+ text: "п"
+ }
+ Key {
+ key: 0x0420
+ text: "р"
+ }
+ Key {
+ key: 0x041E
+ text: "о"
+ }
+ Key {
+ key: 0x041B
+ text: "л"
+ }
+ Key {
+ key: 0x0414
+ text: "д"
+ }
+ Key {
+ key: 0x0416
+ text: "ж"
+ }
+ Key {
+ key: 0x042D
+ text: "э"
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ }
+ Key {
+ key: 0x042F
+ text: "я"
+ }
+ Key {
+ key: 0x0427
+ text: "ч"
+ }
+ Key {
+ key: 0x0421
+ text: "с"
+ }
+ Key {
+ key: 0x041C
+ text: "м"
+ }
+ Key {
+ key: 0x0418
+ text: "и"
+ }
+ Key {
+ key: 0x0422
+ text: "т"
+ }
+ Key {
+ key: 0x042C
+ text: "ь"
+ alternativeKeys: "ьъ"
+ }
+ Key {
+ key: 0x0411
+ text: "б"
+ }
+ Key {
+ key: 0x042E
+ text: "ю"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ inputModes: [InputEngine.InputMode.Cyrillic, InputEngine.InputMode.Latin]
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: latinLayout
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "êeëèé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ alternativeKeys: "ŕrř"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ alternativeKeys: "ţtŧť"
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zž"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "űūũûüuùú"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "îïīĩiìí"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "œøõôöòóo"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly)) ? "a@äåãâàá" : "aäåãâàá"
+ smallTextVisible: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly))
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "šsşś"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ alternativeKeys: "dđď"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ alternativeKeys: "ġgģĝğ"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ alternativeKeys: "ĺŀłļľl"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "çcċčć"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ alternativeKeys: "ņńnň"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ enabled: !(InputContext.inputMethodHints & Qt.ImhLatinOnly) && inputModeCount > 1
+ inputModes: [InputEngine.InputMode.Cyrillic, InputEngine.InputMode.Latin]
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/ru_RU/numbers.fallback b/src/layouts/ru_RU/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ru_RU/numbers.fallback
diff --git a/src/layouts/ru_RU/symbols.fallback b/src/layouts/ru_RU/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/ru_RU/symbols.fallback
diff --git a/src/layouts/sk_SK/dialpad.fallback b/src/layouts/sk_SK/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sk_SK/dialpad.fallback
diff --git a/src/layouts/sk_SK/digits.fallback b/src/layouts/sk_SK/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sk_SK/digits.fallback
diff --git a/src/layouts/sk_SK/handwriting.fallback b/src/layouts/sk_SK/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sk_SK/handwriting.fallback
diff --git a/src/layouts/sk_SK/main.qml b/src/layouts/sk_SK/main.qml
new file mode 100644
index 00000000..7a4631bb
--- /dev/null
+++ b/src/layouts/sk_SK/main.qml
@@ -0,0 +1,220 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "eé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ alternativeKeys: "rŕ"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ alternativeKeys: "tť"
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zž"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "uú"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "ií"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "oóöô"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aåäá"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "sš"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ alternativeKeys: "dď"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ alternativeKeys: "lĺľ"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ alternativeKeys: "yý"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "cč"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ alternativeKeys: "nň"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/sk_SK/numbers.fallback b/src/layouts/sk_SK/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sk_SK/numbers.fallback
diff --git a/src/layouts/sk_SK/symbols.fallback b/src/layouts/sk_SK/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sk_SK/symbols.fallback
diff --git a/src/layouts/sl_SI/dialpad.fallback b/src/layouts/sl_SI/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sl_SI/dialpad.fallback
diff --git a/src/layouts/sl_SI/digits.fallback b/src/layouts/sl_SI/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sl_SI/digits.fallback
diff --git a/src/layouts/sl_SI/handwriting.fallback b/src/layouts/sl_SI/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sl_SI/handwriting.fallback
diff --git a/src/layouts/sl_SI/main.qml b/src/layouts/sl_SI/main.qml
new file mode 100644
index 00000000..d08dac49
--- /dev/null
+++ b/src/layouts/sl_SI/main.qml
@@ -0,0 +1,215 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "eèêëé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zž"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "uúü"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "ií"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "òôöoó"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aåäáà"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "sš"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ alternativeKeys: "dđ"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "cćč"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/sl_SI/numbers.fallback b/src/layouts/sl_SI/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sl_SI/numbers.fallback
diff --git a/src/layouts/sl_SI/symbols.fallback b/src/layouts/sl_SI/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sl_SI/symbols.fallback
diff --git a/src/layouts/sq_AL/dialpad.fallback b/src/layouts/sq_AL/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sq_AL/dialpad.fallback
diff --git a/src/layouts/sq_AL/digits.fallback b/src/layouts/sq_AL/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sq_AL/digits.fallback
diff --git a/src/layouts/sq_AL/handwriting.fallback b/src/layouts/sq_AL/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sq_AL/handwriting.fallback
diff --git a/src/layouts/sq_AL/main.qml b/src/layouts/sq_AL/main.qml
new file mode 100644
index 00000000..4a00858d
--- /dev/null
+++ b/src/layouts/sq_AL/main.qml
@@ -0,0 +1,227 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ readonly property real functionKeyWidth2: mapFromItem(normalKey, normalKey.width, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ Key {
+ key: Qt.Key_Ccedilla
+ text: "ç"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_Ediaeresis
+ text: "ë"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth2
+ Layout.fillWidth: false
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth2
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/sq_AL/numbers.fallback b/src/layouts/sq_AL/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sq_AL/numbers.fallback
diff --git a/src/layouts/sq_AL/symbols.fallback b/src/layouts/sq_AL/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sq_AL/symbols.fallback
diff --git a/src/layouts/sr_SP/dialpad.fallback b/src/layouts/sr_SP/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sr_SP/dialpad.fallback
diff --git a/src/layouts/sr_SP/digits.fallback b/src/layouts/sr_SP/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sr_SP/digits.fallback
diff --git a/src/layouts/sr_SP/handwriting.qml b/src/layouts/sr_SP/handwriting.qml
new file mode 100644
index 00000000..092d746e
--- /dev/null
+++ b/src/layouts/sr_SP/handwriting.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ InputContext.inputEngine.inputMode !== InputEngine.InputMode.Cyrillic ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/sr_SP/main.qml b/src/layouts/sr_SP/main.qml
new file mode 100644
index 00000000..461c426a
--- /dev/null
+++ b/src/layouts/sr_SP/main.qml
@@ -0,0 +1,381 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayoutLoader {
+ sharedLayouts: ['symbols']
+ sourceComponent: InputContext.inputEngine.inputMode === InputEngine.InputMode.Cyrillic ? cyrillicLayout : latinLayout
+ Component {
+ id: cyrillicLayout
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "љ"
+ }
+ Key {
+ id: normalKey
+ text: "њ"
+ }
+ Key {
+ text: "е"
+ }
+ Key {
+ text: "р"
+ }
+ Key {
+ text: "т"
+ }
+ Key {
+ text: "з"
+ }
+ Key {
+ text: "у"
+ }
+ Key {
+ text: "и"
+ }
+ Key {
+ text: "о"
+ }
+ Key {
+ text: "п"
+ }
+ Key {
+ text: "ш"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "а"
+ }
+ Key {
+ text: "с"
+ }
+ Key {
+ text: "д"
+ }
+ Key {
+ text: "ф"
+ }
+ Key {
+ text: "г"
+ }
+ Key {
+ text: "х"
+ }
+ Key {
+ text: "ј"
+ }
+ Key {
+ text: "к"
+ }
+ Key {
+ text: "л"
+ }
+ Key {
+ text: "ч"
+ }
+ Key {
+ text: "ћ"
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ }
+ Key {
+ text: "ѕ"
+ }
+ Key {
+ text: "џ"
+ }
+ Key {
+ text: "ц"
+ }
+ Key {
+ text: "в"
+ }
+ Key {
+ text: "б"
+ }
+ Key {
+ text: "н"
+ }
+ Key {
+ text: "м"
+ }
+ Key {
+ text: "ђ"
+ }
+ Key {
+ text: "ж"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ inputModes: [InputEngine.InputMode.Cyrillic, InputEngine.InputMode.Latin]
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: latinLayout
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "êeëèé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ alternativeKeys: "ŕrř"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ alternativeKeys: "ţtŧť"
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zž"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "űūũûüuùú"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "îïīĩiìí"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "œøõôöòóo"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly)) ? "a@äåãâàá" : "aäåãâàá"
+ smallTextVisible: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly))
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "šsşś"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ alternativeKeys: "dđď"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ alternativeKeys: "ġgģĝğ"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ alternativeKeys: "ĺŀłļľl"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "çcċčć"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ alternativeKeys: "ņńnň"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ enabled: !(InputContext.inputMethodHints & Qt.ImhLatinOnly) && inputModeCount > 1
+ inputModes: [InputEngine.InputMode.Cyrillic, InputEngine.InputMode.Latin]
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/sr_SP/numbers.fallback b/src/layouts/sr_SP/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sr_SP/numbers.fallback
diff --git a/src/layouts/sr_SP/symbols.fallback b/src/layouts/sr_SP/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sr_SP/symbols.fallback
diff --git a/src/layouts/sv_SE/dialpad.fallback b/src/layouts/sv_SE/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sv_SE/dialpad.fallback
diff --git a/src/layouts/sv_SE/digits.fallback b/src/layouts/sv_SE/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sv_SE/digits.fallback
diff --git a/src/layouts/sv_SE/handwriting.fallback b/src/layouts/sv_SE/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sv_SE/handwriting.fallback
diff --git a/src/layouts/sv_SE/main.qml b/src/layouts/sv_SE/main.qml
new file mode 100644
index 00000000..8d02cffb
--- /dev/null
+++ b/src/layouts/sv_SE/main.qml
@@ -0,0 +1,214 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ Key {
+ key: Qt.Key_Aring
+ text: "å"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ Key {
+ key: Qt.Key_Odiaeresis
+ text: "ö"
+ }
+ Key {
+ key: Qt.Key_Adiaeresis
+ text: "ä"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ ShiftKey {
+ weight: 240
+ }
+ FillerKey {
+ weight: 80
+ }
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ weight: 80
+ }
+ BackspaceKey {
+ weight: 240
+ }
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/sv_SE/numbers.fallback b/src/layouts/sv_SE/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sv_SE/numbers.fallback
diff --git a/src/layouts/sv_SE/symbols.fallback b/src/layouts/sv_SE/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/sv_SE/symbols.fallback
diff --git a/src/layouts/th_TH/dialpad.fallback b/src/layouts/th_TH/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/th_TH/dialpad.fallback
diff --git a/src/layouts/th_TH/digits.fallback b/src/layouts/th_TH/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/th_TH/digits.fallback
diff --git a/src/layouts/th_TH/handwriting.fallback b/src/layouts/th_TH/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/th_TH/handwriting.fallback
diff --git a/src/layouts/th_TH/handwriting.qml b/src/layouts/th_TH/handwriting.qml
new file mode 100644
index 00000000..8cf4301c
--- /dev/null
+++ b/src/layouts/th_TH/handwriting.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ InputContext.inputEngine.inputMode !== InputEngine.InputMode.Thai ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/th_TH/main.qml b/src/layouts/th_TH/main.qml
new file mode 100644
index 00000000..41f104d3
--- /dev/null
+++ b/src/layouts/th_TH/main.qml
@@ -0,0 +1,485 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ inputMode: InputEngine.InputMode.Latin
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; ThaiInputMethod {}', parent, "main.qml")
+ }
+ sharedLayouts: [ "symbols" ]
+ sourceComponent: InputContext.shiftActive ? page2 : page1
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ smallTextVisible: true
+ KeyboardColumn {
+ KeyboardRow {
+ Key {
+ text: "ๅ"
+ alternativeKeys: "ๅ1๑"
+ }
+ Key {
+ id: normalKey
+ text: "/"
+ alternativeKeys: "/2๒"
+ }
+ Key {
+ text: "_"
+ alternativeKeys: "_3๓"
+ }
+ Key {
+ text: "ภ"
+ alternativeKeys: "ภ4๔"
+ }
+ Key {
+ text: "ถ"
+ alternativeKeys: "ถ5๕"
+ }
+ Key {
+ text: "\u0E38"
+ displayText: " \u0E38"
+ alternativeKeys: [ "\u0E38", " \u0E39" ]
+ }
+ Key {
+ text: "\u0E36"
+ displayText: " \u0E36"
+ }
+ Key {
+ text: "ค"
+ alternativeKeys: "ค6๖"
+ }
+ Key {
+ text: "ต"
+ alternativeKeys: "ต7๗"
+ }
+ Key {
+ text: "จ"
+ alternativeKeys: "จ8๘"
+ }
+ Key {
+ text: "ข"
+ alternativeKeys: "๙ข9"
+ }
+ Key {
+ text: "ช"
+ alternativeKeys: "๐ช0"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "ๆ"
+ }
+ Key {
+ text: "ไ"
+ alternativeKeys: "ไ\""
+ }
+ Key {
+ text: " ำ"
+ alternativeKeys: " ำฎ"
+ }
+ Key {
+ text: "พ"
+ alternativeKeys: "พฑ"
+ }
+ Key {
+ text: "ะ"
+ alternativeKeys: "ะธ"
+ }
+ Key {
+ text: "\u0E31"
+ displayText: " \u0E31"
+ alternativeKeys: "\u0E31。"
+ }
+ Key {
+ text: "\u0E35"
+ displayText: " \u0E35"
+ alternativeKeys: [ "\u0E35", " \u0E4A" ]
+ }
+ Key {
+ text: "ร"
+ alternativeKeys: "รณ"
+ }
+ Key {
+ text: "น"
+ alternativeKeys: "นฯ"
+ }
+ Key {
+ text: "ย"
+ alternativeKeys: "ยญ"
+ }
+ Key {
+ text: "บ"
+ alternativeKeys: "บฐ"
+ }
+ Key {
+ text: "ล"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "ฟ"
+ alternativeKeys: "ฟฤ"
+ }
+ Key {
+ text: "ห"
+ alternativeKeys: "หฆ"
+ }
+ Key {
+ text: "ก"
+ alternativeKeys: "กฏ"
+ }
+ Key {
+ text: "ด"
+ alternativeKeys: "ดโ"
+ }
+ Key {
+ text: "เ"
+ alternativeKeys: "เฌ"
+ }
+ Key {
+ text: "\u0E49"
+ displayText: " \u0E49"
+ alternativeKeys: [ "\u0E49", " \u0E47" ]
+ }
+ Key {
+ text: "\u0E48"
+ displayText: " \u0E48"
+ alternativeKeys: [ "\u0E48", " \u0E4B" ]
+ }
+ Key {
+ text: "า"
+ alternativeKeys: "าษ"
+ }
+ Key {
+ text: "ส"
+ alternativeKeys: "สศ"
+ }
+ Key {
+ text: "ว"
+ }
+ Key {
+ text: "ง"
+ }
+ Key {
+ text: "ซ"
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ }
+ Key {
+ text: "ผ"
+ }
+ Key {
+ text: "ป"
+ }
+ Key {
+ text: "แ"
+ alternativeKeys: "แฉ"
+ }
+ Key {
+ text: "อ"
+ alternativeKeys: "อฮ"
+ }
+ Key {
+ text: "\u0E34"
+ displayText: " \u0E34"
+ alternativeKeys: [ "\u0E34", " \u0E3A" ]
+ }
+ Key {
+ text: "\u0E37"
+ displayText: " \u0E37"
+ alternativeKeys: [ "\u0E37", " \u0E4C" ]
+ }
+ Key {
+ text: "ท"
+ }
+ Key {
+ text: "ม"
+ alternativeKeys: "มฒ"
+ }
+ Key {
+ text: "ใ"
+ alternativeKeys: "ใฬ"
+ }
+ Key {
+ text: "ฝ"
+ alternativeKeys: "ฝฦ"
+ }
+ BackspaceKey {
+ }
+ }
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ smallTextVisible: true
+ KeyboardColumn {
+ KeyboardRow {
+ Key {
+ text: "+"
+ }
+ Key {
+ id: normalKey
+ text: "๑"
+ }
+ Key {
+ text: "๒"
+ }
+ Key {
+ text: "๓"
+ }
+ Key {
+ text: "๔"
+ }
+ Key {
+ text: "\u0E39"
+ displayText: " \u0E39"
+ }
+ Key {
+ text: "฿"
+ }
+ Key {
+ text: "๕"
+ }
+ Key {
+ text: "๖"
+ }
+ Key {
+ text: "๗"
+ }
+ Key {
+ text: "๘"
+ }
+ Key {
+ text: "๙"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "๐"
+ }
+ Key {
+ text: "\""
+ }
+ Key {
+ text: "ฎ"
+ }
+ Key {
+ text: "ฑ"
+ }
+ Key {
+ text: "ธ"
+ }
+ Key {
+ text: "。"
+ }
+ Key {
+ text: "\u0E4A"
+ displayText: " \u0E4A"
+ }
+ Key {
+ text: "ณ"
+ }
+ Key {
+ text: "ฯ"
+ }
+ Key {
+ text: "ญ"
+ }
+ Key {
+ text: "ฐ"
+ }
+ Key {
+ text: ","
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "ฤ"
+ }
+ Key {
+ text: "ฆ"
+ }
+ Key {
+ text: "ฏ"
+ }
+ Key {
+ text: "โ"
+ }
+ Key {
+ text: "ฌ"
+ }
+ Key {
+ text: "\u0E47"
+ displayText: " \u0E47"
+ }
+ Key {
+ text: "\u0E4B"
+ displayText: " \u0E4B"
+ }
+ Key {
+ text: "ษ"
+ }
+ Key {
+ text: "ศ"
+ }
+ Key {
+ text: "ซ"
+ }
+ Key {
+ text: "."
+ }
+ Key {
+ text: "ฅ"
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ }
+ Key {
+ text: "("
+ }
+ Key {
+ text: ")"
+ }
+ Key {
+ text: "ฉ"
+ }
+ Key {
+ text: "ฮ"
+ }
+ Key {
+ text: "\u0E3A"
+ displayText: " \u0E3A"
+ }
+ Key {
+ text: "\u0E4C"
+ displayText: " \u0E4C"
+ }
+ Key {
+ text: "?"
+ }
+ Key {
+ text: "ฒ"
+ }
+ Key {
+ text: "ฬ"
+ }
+ Key {
+ text: "ฦ"
+ }
+ BackspaceKey {
+ }
+ }
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/th_TH/numbers.fallback b/src/layouts/th_TH/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/th_TH/numbers.fallback
diff --git a/src/layouts/th_TH/symbols.qml b/src/layouts/th_TH/symbols.qml
new file mode 100644
index 00000000..fbe3c801
--- /dev/null
+++ b/src/layouts/th_TH/symbols.qml
@@ -0,0 +1,368 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ property bool secondPage
+ onVisibleChanged: if (!visible) secondPage = false
+ sourceComponent: secondPage ? page2 : page1
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_At
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_NumberSign
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_Percent
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_Ampersand
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_Underscore
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_Minus
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_Plus
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_ParenLeft
+ text: "("
+ }
+ Key {
+ key: Qt.Key_ParenRight
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "1/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_QuoteDbl
+ text: '"'
+ }
+ Key {
+ key: Qt.Key_Less
+ text: "<"
+ }
+ Key {
+ key: Qt.Key_Greater
+ text: ">"
+ }
+ Key {
+ key: Qt.Key_Apostrophe
+ text: "'"
+ }
+ Key {
+ key: Qt.Key_Colon
+ text: ":"
+ }
+ Key {
+ key: Qt.Key_Slash
+ text: "/"
+ }
+ Key {
+ key: Qt.Key_Exclam
+ text: "!"
+ }
+ Key {
+ key: Qt.Key_Question
+ text: "?"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "กขค"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_AsciiTilde
+ text: "~"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_Agrave
+ text: "`"
+ }
+ Key {
+ key: Qt.Key_Bar
+ text: "|"
+ }
+ Key {
+ key: 0x7B
+ text: "·"
+ }
+ Key {
+ key: 0x221A
+ text: "√"
+ }
+ Key {
+ key: Qt.Key_division
+ text: "÷"
+ }
+ Key {
+ key: Qt.Key_multiply
+ text: "×"
+ }
+ Key {
+ key: Qt.Key_onehalf
+ text: "½"
+ alternativeKeys: "¼⅓½¾⅞"
+ }
+ Key {
+ key: Qt.Key_BraceLeft
+ text: "{"
+ }
+ Key {
+ key: Qt.Key_BraceRight
+ text: "}"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Dollar
+ text: "$"
+ alternativeKeys: "$¢"
+ }
+ Key {
+ key: 0x20AC
+ text: "€"
+ }
+ Key {
+ key: 0xC2
+ text: "£"
+ }
+ Key {
+ text: "฿"
+ }
+ Key {
+ key: 0xA5
+ text: "¥"
+ }
+ Key {
+ key: Qt.Key_AsciiCircum
+ text: "^"
+ }
+ Key {
+ key: Qt.Key_Equal
+ text: "="
+ }
+ Key {
+ key: Qt.Key_section
+ text: "§"
+ }
+ Key {
+ key: Qt.Key_BracketLeft
+ text: "["
+ }
+ Key {
+ key: Qt.Key_BracketRight
+ text: "]"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "2/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: 0x2122
+ text: '™'
+ }
+ Key {
+ key: 0x00AE
+ text: '®'
+ }
+ Key {
+ key: Qt.Key_guillemotleft
+ text: '«'
+ }
+ Key {
+ key: Qt.Key_guillemotright
+ text: '»'
+ }
+ Key {
+ key: Qt.Key_Semicolon
+ text: ";"
+ }
+ Key {
+ key: 0x201C
+ text: '“'
+ }
+ Key {
+ key: 0x201D
+ text: '”'
+ }
+ Key {
+ key: Qt.Key_Backslash
+ text: "\\"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "กขค"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: 0x2026
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u2026"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/tr_TR/dialpad.fallback b/src/layouts/tr_TR/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/tr_TR/dialpad.fallback
diff --git a/src/layouts/tr_TR/digits.fallback b/src/layouts/tr_TR/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/tr_TR/digits.fallback
diff --git a/src/layouts/tr_TR/handwriting.fallback b/src/layouts/tr_TR/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/tr_TR/handwriting.fallback
diff --git a/src/layouts/tr_TR/main.qml b/src/layouts/tr_TR/main.qml
new file mode 100644
index 00000000..ff097e1c
--- /dev/null
+++ b/src/layouts/tr_TR/main.qml
@@ -0,0 +1,232 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ }
+ Key {
+ text: "\u0131"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ Key {
+ text: "ğ"
+ }
+ Key {
+ key: Qt.Key_Udiaeresis
+ text: "ü"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aåä"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "sš"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ }
+ Key {
+ text: "ş"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zž"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ alternativeKeys: "$¢x₺€¥£"
+ smallTextVisible: true
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ Key {
+ key: Qt.Key_Odiaeresis
+ text: "ö"
+ }
+ Key {
+ key: Qt.Key_Ccedilla
+ text: "ç"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/tr_TR/numbers.fallback b/src/layouts/tr_TR/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/tr_TR/numbers.fallback
diff --git a/src/layouts/tr_TR/symbols.fallback b/src/layouts/tr_TR/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/tr_TR/symbols.fallback
diff --git a/src/layouts/uk_UA/dialpad.fallback b/src/layouts/uk_UA/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/uk_UA/dialpad.fallback
diff --git a/src/layouts/uk_UA/digits.fallback b/src/layouts/uk_UA/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/uk_UA/digits.fallback
diff --git a/src/layouts/uk_UA/handwriting.qml b/src/layouts/uk_UA/handwriting.qml
new file mode 100644
index 00000000..092d746e
--- /dev/null
+++ b/src/layouts/uk_UA/handwriting.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ InputContext.inputEngine.inputMode !== InputEngine.InputMode.Cyrillic ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "."
+ alternativeKeys: "<>()/\\\"'=+-_:;.?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/uk_UA/main.qml b/src/layouts/uk_UA/main.qml
new file mode 100644
index 00000000..48f1507f
--- /dev/null
+++ b/src/layouts/uk_UA/main.qml
@@ -0,0 +1,407 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayoutLoader {
+ sharedLayouts: ['symbols']
+ sourceComponent: InputContext.inputEngine.inputMode === InputEngine.InputMode.Cyrillic ? cyrillicLayout : latinLayout
+ Component {
+ id: cyrillicLayout
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "й"
+ }
+ Key {
+ id: normalKey
+ text: "ц"
+ }
+ Key {
+ text: "у"
+ }
+ Key {
+ text: "к"
+ }
+ Key {
+ text: "е"
+ }
+ Key {
+ text: "н"
+ }
+ Key {
+ text: "г"
+ }
+ Key {
+ text: "ш"
+ }
+ Key {
+ text: "щ"
+ }
+ Key {
+ text: "з"
+ }
+ Key {
+ text: "х"
+ }
+ Key {
+ text: "ї"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ text: "ф"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ text: "і"
+ }
+ Key {
+ text: "в"
+ }
+ Key {
+ text: "а"
+ }
+ Key {
+ text: "п"
+ }
+ Key {
+ text: "р"
+ }
+ Key {
+ text: "о"
+ }
+ Key {
+ text: "л"
+ }
+ Key {
+ text: "д"
+ }
+ Key {
+ text: "ж"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ text: "є"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ }
+ Key {
+ text: "ґ"
+ }
+ Key {
+ text: "я"
+ alternativeKeys: "$¢я₴€¥£"
+ smallTextVisible: true
+ }
+ Key {
+ text: "ч"
+ }
+ Key {
+ text: "с"
+ }
+ Key {
+ text: "м"
+ }
+ Key {
+ text: "и"
+ }
+ Key {
+ text: "т"
+ }
+ Key {
+ text: "ь"
+ }
+ Key {
+ text: "б"
+ }
+ Key {
+ text: "ю"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ inputModes: [InputEngine.InputMode.Cyrillic, InputEngine.InputMode.Latin]
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: latinLayout
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "êeëèé"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ alternativeKeys: "ŕrř"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ alternativeKeys: "ţtŧť"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "űūũûüuùú"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "îïīĩiìí"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "œøõôöòóo"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly)) ? "a@äåãâàá" : "aäåãâàá"
+ smallTextVisible: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly))
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "šsşś"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ alternativeKeys: "dđď"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ alternativeKeys: "ġgģĝğ"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ alternativeKeys: "ĺŀłļľl"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zž"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ alternativeKeys: "$¢x₴€¥£"
+ smallTextVisible: true
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ alternativeKeys: "çcċčć"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ alternativeKeys: "ņńnň"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ enabled: !(InputContext.inputMethodHints & Qt.ImhLatinOnly) && inputModeCount > 1
+ inputModes: [InputEngine.InputMode.Cyrillic, InputEngine.InputMode.Latin]
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/uk_UA/numbers.fallback b/src/layouts/uk_UA/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/uk_UA/numbers.fallback
diff --git a/src/layouts/uk_UA/symbols.fallback b/src/layouts/uk_UA/symbols.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/uk_UA/symbols.fallback
diff --git a/src/layouts/vi_VN/dialpad.fallback b/src/layouts/vi_VN/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/vi_VN/dialpad.fallback
diff --git a/src/layouts/vi_VN/digits.fallback b/src/layouts/vi_VN/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/vi_VN/digits.fallback
diff --git a/src/layouts/vi_VN/handwriting.fallback b/src/layouts/vi_VN/handwriting.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/vi_VN/handwriting.fallback
diff --git a/src/layouts/vi_VN/main.qml b/src/layouts/vi_VN/main.qml
new file mode 100644
index 00000000..05efb1ca
--- /dev/null
+++ b/src/layouts/vi_VN/main.qml
@@ -0,0 +1,217 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+import QtQuick.Layouts
+
+KeyboardLayout {
+ inputMode: InputEngine.InputMode.Latin
+ sharedLayouts: ["numbers", "digits"]
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ alternativeKeys: "eèéẻẽẹêềếểễệ"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ alternativeKeys: "yỳýỷỹỵ"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ alternativeKeys: "ưừứửữựuùúủũụ"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ alternativeKeys: "iìíỉĩị"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ alternativeKeys: "ơờớởỡợòóỏõọoôồốổỗộ"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ alternativeKeys: "aàáảãạăằắẳẵặâầấẩẫậ"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ alternativeKeys: "sš"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ alternativeKeys: "dđ"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ShiftKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ alternativeKeys: "zž"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ alternativeKeys: "nñ"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ alternativeKeys: "!.?"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/vi_VN/numbers.fallback b/src/layouts/vi_VN/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/vi_VN/numbers.fallback
diff --git a/src/layouts/vi_VN/symbols.qml b/src/layouts/vi_VN/symbols.qml
new file mode 100644
index 00000000..d315b9d0
--- /dev/null
+++ b/src/layouts/vi_VN/symbols.qml
@@ -0,0 +1,368 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ property bool secondPage
+ onVisibleChanged: if (!visible) secondPage = false
+ sourceComponent: secondPage ? page2 : page1
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_At
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_NumberSign
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_Percent
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_Ampersand
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_Asterisk
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_Underscore
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_Minus
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_Plus
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_ParenLeft
+ text: "("
+ }
+ Key {
+ key: Qt.Key_ParenRight
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "1/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: Qt.Key_QuoteDbl
+ text: '"'
+ }
+ Key {
+ key: Qt.Key_Less
+ text: "<"
+ }
+ Key {
+ key: Qt.Key_Greater
+ text: ">"
+ }
+ Key {
+ key: Qt.Key_Apostrophe
+ text: "'"
+ }
+ Key {
+ key: Qt.Key_Colon
+ text: ":"
+ }
+ Key {
+ key: Qt.Key_Slash
+ text: "/"
+ }
+ Key {
+ key: Qt.Key_Exclam
+ text: "!"
+ }
+ Key {
+ key: Qt.Key_Question
+ text: "?"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "."
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_AsciiTilde
+ text: "~"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_Agrave
+ text: "`"
+ }
+ Key {
+ key: Qt.Key_Bar
+ text: "|"
+ }
+ Key {
+ key: 0x7B
+ text: "·"
+ }
+ Key {
+ key: 0x221A
+ text: "√"
+ }
+ Key {
+ key: Qt.Key_division
+ text: "÷"
+ }
+ Key {
+ key: Qt.Key_multiply
+ text: "×"
+ }
+ Key {
+ key: Qt.Key_onehalf
+ text: "½"
+ alternativeKeys: "¼⅓½¾⅞"
+ }
+ Key {
+ key: Qt.Key_BraceLeft
+ text: "{"
+ }
+ Key {
+ key: Qt.Key_BraceRight
+ text: "}"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Dollar
+ text: "$"
+ }
+ Key {
+ key: 0x20AC
+ text: "€"
+ }
+ Key {
+ key: 0xC2
+ text: "£"
+ }
+ Key {
+ key: 0xA2
+ text: "¢"
+ }
+ Key {
+ key: 0x20AB
+ text: "₫"
+ }
+ Key {
+ key: Qt.Key_AsciiCircum
+ text: "^"
+ }
+ Key {
+ key: Qt.Key_Equal
+ text: "="
+ }
+ Key {
+ key: Qt.Key_section
+ text: "§"
+ }
+ Key {
+ key: Qt.Key_BracketLeft
+ text: "["
+ }
+ Key {
+ key: Qt.Key_BracketRight
+ text: "]"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: "2/2"
+ functionKey: true
+ onClicked: secondPage = !secondPage
+ highlighted: true
+ }
+ Key {
+ key: 0x2122
+ text: '™'
+ }
+ Key {
+ key: 0x00AE
+ text: '®'
+ }
+ Key {
+ key: Qt.Key_guillemotleft
+ text: '«'
+ }
+ Key {
+ key: Qt.Key_guillemotright
+ text: '»'
+ }
+ Key {
+ key: Qt.Key_Semicolon
+ text: ";"
+ }
+ Key {
+ key: 0x201C
+ text: '“'
+ }
+ Key {
+ key: 0x201D
+ text: '”'
+ }
+ Key {
+ key: Qt.Key_Backslash
+ text: "\\"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: 0x2026
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\u2026"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/zh_CN/dialpad.fallback b/src/layouts/zh_CN/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/zh_CN/dialpad.fallback
diff --git a/src/layouts/zh_CN/digits.fallback b/src/layouts/zh_CN/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/zh_CN/digits.fallback
diff --git a/src/layouts/zh_CN/handwriting.qml b/src/layouts/zh_CN/handwriting.qml
new file mode 100644
index 00000000..f365bd15
--- /dev/null
+++ b/src/layouts/zh_CN/handwriting.qml
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+ inputMode: preferredInputMode()
+
+ Connections {
+ target: InputContext
+ function onInputMethodHintsChanged() {
+ var newInputMode = preferredInputMode()
+ if (InputContext.inputEngine.inputModes.indexOf(newInputMode) !== -1)
+ InputContext.inputEngine.inputMode = newInputMode
+ }
+ }
+
+ function preferredInputMode() {
+ return InputContext.inputMethodHints &
+ (Qt.ImhPreferLatin | Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly |
+ Qt.ImhLatinOnly) ? InputEngine.InputMode.Latin : InputEngine.InputMode.ChineseHandwriting
+ }
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ InputContext.inputEngine.inputMode !== InputEngine.InputMode.ChineseHandwriting ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: "、"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "。"
+ alternativeKeys: "¥‘’“”~…—《》〈〉「」\",.:;。?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/zh_CN/main.qml b/src/layouts/zh_CN/main.qml
new file mode 100644
index 00000000..717d451f
--- /dev/null
+++ b/src/layouts/zh_CN/main.qml
@@ -0,0 +1,212 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; PinyinInputMethod {}', parent, "main.qml")
+ }
+ sharedLayouts: ['symbols']
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_Q
+ text: "q"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_W
+ text: "w"
+ }
+ Key {
+ key: Qt.Key_E
+ text: "e"
+ }
+ Key {
+ key: Qt.Key_R
+ text: "r"
+ }
+ Key {
+ key: Qt.Key_T
+ text: "t"
+ }
+ Key {
+ key: Qt.Key_Y
+ text: "y"
+ }
+ Key {
+ key: Qt.Key_U
+ text: "u"
+ }
+ Key {
+ key: Qt.Key_I
+ text: "i"
+ }
+ Key {
+ key: Qt.Key_O
+ text: "o"
+ }
+ Key {
+ key: Qt.Key_P
+ text: "p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ key: Qt.Key_A
+ text: "a"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ key: Qt.Key_S
+ text: "s"
+ }
+ Key {
+ key: Qt.Key_D
+ text: "d"
+ }
+ Key {
+ key: Qt.Key_F
+ text: "f"
+ }
+ Key {
+ key: Qt.Key_G
+ text: "g"
+ }
+ Key {
+ key: Qt.Key_H
+ text: "h"
+ }
+ Key {
+ key: Qt.Key_J
+ text: "j"
+ }
+ Key {
+ key: Qt.Key_K
+ text: "k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ key: Qt.Key_L
+ text: "l"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ Key {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ enabled: InputContext.preeditText.length > 0
+ key: Qt.Key_Apostrophe
+ text: "'"
+ }
+ Key {
+ key: Qt.Key_Z
+ text: "z"
+ }
+ Key {
+ key: Qt.Key_X
+ text: "x"
+ }
+ Key {
+ key: Qt.Key_C
+ text: "c"
+ }
+ Key {
+ key: Qt.Key_V
+ text: "v"
+ }
+ Key {
+ key: Qt.Key_B
+ text: "b"
+ }
+ Key {
+ key: Qt.Key_N
+ text: "n"
+ }
+ Key {
+ key: Qt.Key_M
+ text: "m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\uFF0C"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\uFF0E"
+ alternativeKeys: "\uFF1B\u3001\uFF0E\uFF1A\u3002?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/src/layouts/zh_CN/numbers.fallback b/src/layouts/zh_CN/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/zh_CN/numbers.fallback
diff --git a/src/layouts/zh_CN/symbols.qml b/src/layouts/zh_CN/symbols.qml
new file mode 100644
index 00000000..7ffcdb43
--- /dev/null
+++ b/src/layouts/zh_CN/symbols.qml
@@ -0,0 +1,478 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; PinyinInputMethod {}', parent, "symbols.qml")
+ }
+ sharedLayouts: ['main']
+ property int page
+ readonly property int numPages: 3
+ sourceComponent: {
+ switch (page) {
+ case 2: return page3
+ case 1: return page2
+ default: return page1
+ }
+ }
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "("
+ }
+ Key {
+ key: Qt.Key_1
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: (page + 1) + "/" + numPages
+ functionKey: true
+ onClicked: page = (page + 1) % numPages
+ highlighted: true
+ }
+ Key {
+ text: "“"
+ }
+ Key {
+ text: "”"
+ }
+ Key {
+ text: "、"
+ }
+ Key {
+ text: ":"
+ }
+ Key {
+ text: ";"
+ }
+ Key {
+ text: "!"
+ }
+ Key {
+ text: "?"
+ }
+ Key {
+ text: "~"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "—"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "½"
+ alternativeKeys: "½¼¾"
+ }
+ Key {
+ id: normalKey
+ text: "'"
+ }
+ Key {
+ text: "/"
+ }
+ Key {
+ text: "\\"
+ }
+ Key {
+ text: "|"
+ }
+ Key {
+ text: "["
+ }
+ Key {
+ text: "]"
+ }
+ Key {
+ text: "{"
+ }
+ Key {
+ text: "}"
+ }
+ Key {
+ text: "·"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "<"
+ }
+ Key {
+ text: ">"
+ }
+ Key {
+ text: ","
+ }
+ Key {
+ text: "."
+ }
+ Key {
+ text: ":"
+ }
+ Key {
+ text: ";"
+ }
+ Key {
+ text: "!"
+ }
+ Key {
+ text: "?"
+ }
+ Key {
+ text: "="
+ }
+ Key {
+ text: "~"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: (page + 1) + "/" + numPages
+ functionKey: true
+ onClicked: page = (page + 1) % numPages
+ highlighted: true
+ }
+ Key {
+ text: "\""
+ }
+ Key {
+ text: "§"
+ }
+ Key {
+ text: "^"
+ }
+ Key {
+ text: "$"
+ }
+ Key {
+ text: "¥"
+ }
+ Key {
+ text: "€"
+ }
+ Key {
+ text: "£"
+ }
+ Key {
+ text: "¢"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "。"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page3
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "\"
+ }
+ Key {
+ id: normalKey
+ text: "/"
+ }
+ Key {
+ text: "("
+ }
+ Key {
+ text: ")"
+ }
+ Key {
+ text: "〔"
+ }
+ Key {
+ text: "〕"
+ }
+ Key {
+ text: "〈"
+ }
+ Key {
+ text: "〉"
+ }
+ Key {
+ text: "《"
+ }
+ Key {
+ text: "》"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "→"
+ }
+ Key {
+ text: "←"
+ }
+ Key {
+ text: "↑"
+ }
+ Key {
+ text: "↓"
+ }
+ Key {
+ text: "■"
+ }
+ Key {
+ text: "□"
+ }
+ Key {
+ text: "●"
+ }
+ Key {
+ text: "○"
+ }
+ Key {
+ text: "【"
+ }
+ Key {
+ text: "】"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: (page + 1) + "/" + numPages
+ functionKey: true
+ onClicked: page = (page + 1) % numPages
+ highlighted: true
+ }
+ Key {
+ text: "『"
+ }
+ Key {
+ text: "』"
+ }
+ Key {
+ text: "「"
+ }
+ Key {
+ text: "」"
+ }
+ Key {
+ text: "★"
+ }
+ Key {
+ text: "☆"
+ }
+ Key {
+ text: "◆"
+ }
+ Key {
+ text: "◇"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "…"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/zh_TW/dialpad.fallback b/src/layouts/zh_TW/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/zh_TW/dialpad.fallback
diff --git a/src/layouts/zh_TW/digits.fallback b/src/layouts/zh_TW/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/zh_TW/digits.fallback
diff --git a/src/layouts/zh_TW/handwriting.qml b/src/layouts/zh_TW/handwriting.qml
new file mode 100644
index 00000000..f365bd15
--- /dev/null
+++ b/src/layouts/zh_TW/handwriting.qml
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+ inputMode: preferredInputMode()
+
+ Connections {
+ target: InputContext
+ function onInputMethodHintsChanged() {
+ var newInputMode = preferredInputMode()
+ if (InputContext.inputEngine.inputModes.indexOf(newInputMode) !== -1)
+ InputContext.inputEngine.inputMode = newInputMode
+ }
+ }
+
+ function preferredInputMode() {
+ return InputContext.inputMethodHints &
+ (Qt.ImhPreferLatin | Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly |
+ Qt.ImhLatinOnly) ? InputEngine.InputMode.Latin : InputEngine.InputMode.ChineseHandwriting
+ }
+
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ InputContext.inputEngine.inputMode !== InputEngine.InputMode.ChineseHandwriting ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ Layout.preferredHeight: 1
+ keyWeight: 160
+ ShiftKey {
+ weight: 240
+ }
+ InputModeKey {
+ }
+ Key {
+ key: Qt.Key_Comma
+ text: "、"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ weight: 10 * 160 - 4 * 160 - 2 * 240
+ }
+ Key {
+ key: Qt.Key_Period
+ text: "。"
+ alternativeKeys: "¥‘’“”~…—《》〈〉「」\",.:;。?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ weight: 240
+ }
+ }
+}
diff --git a/src/layouts/zh_TW/main.qml b/src/layouts/zh_TW/main.qml
new file mode 100644
index 00000000..fde17ff2
--- /dev/null
+++ b/src/layouts/zh_TW/main.qml
@@ -0,0 +1,460 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; TCInputMethod {}', parent, "main.qml")
+ }
+ sharedLayouts: ['symbols']
+ sourceComponent: InputContext.inputEngine.inputMode === InputEngine.InputMode.Cangjie ? pageCangjie : pageZhuyin
+ Component {
+ id: pageCangjie
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ smallTextVisible: true
+ KeyboardRow {
+ Key {
+ text: "\u624B"
+ alternativeKeys: "\u624Bq"
+ }
+ Key {
+ id: normalKey
+ text: "\u7530"
+ alternativeKeys: "\u7530w"
+ }
+ Key {
+ text: "\u6C34"
+ alternativeKeys: "\u6C34e"
+ }
+ Key {
+ text: "\u53E3"
+ alternativeKeys: "\u53E3r"
+ }
+ Key {
+ text: "\u5EFF"
+ alternativeKeys: "\u5EFFt"
+ }
+ Key {
+ text: "\u535C"
+ alternativeKeys: "\u535Cy"
+ }
+ Key {
+ text: "\u5C71"
+ alternativeKeys: "\u5C71u"
+ }
+ Key {
+ text: "\u6208"
+ alternativeKeys: "\u6208i"
+ }
+ Key {
+ text: "\u4EBA"
+ alternativeKeys: "\u4EBAo"
+ }
+ Key {
+ text: "\u5FC3"
+ alternativeKeys: "\u5FC3p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ text: "\u65E5"
+ alternativeKeys: "\u65E5a"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ text: "\u5C38"
+ alternativeKeys: "\u5C38s"
+ }
+ Key {
+ text: "\u6728"
+ alternativeKeys: "\u6728d"
+ }
+ Key {
+ text: "\u706B"
+ alternativeKeys: "\u706Bf"
+ }
+ Key {
+ text: "\u571F"
+ alternativeKeys: "\u571Fg"
+ }
+ Key {
+ text: "\u7AF9"
+ alternativeKeys: "\u7AF9h"
+ }
+ Key {
+ text: "\u5341"
+ alternativeKeys: "\u5341j"
+ }
+ Key {
+ text: "\u5927"
+ alternativeKeys: "\u5927k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ text: "\u4E2D"
+ alternativeKeys: "\u4E2Dl"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ModeKey {
+ id: simplifiedModeKey
+ key: Qt.Key_Mode_switch
+ displayText: "速成"
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ Component.onCompleted: updateBinding()
+ Connections {
+ target: InputContext.inputEngine
+ function onInputMethodChanged() { simplifiedModeKey.updateBinding() }
+ }
+ function updateBinding() {
+ if (InputContext.inputEngine.inputMethod && InputContext.inputEngine.inputMethod.hasOwnProperty("simplified")) {
+ simplifiedModeKey.mode = InputContext.inputEngine.inputMethod.simplified
+ InputContext.inputEngine.inputMethod.simplified = Qt.binding(function() { return simplifiedModeKey.mode })
+ }
+ }
+ }
+ Key {
+ text: "\u91CD"
+ alternativeKeys: "\u91CDz"
+ }
+ Key {
+ text: "\u96E3"
+ alternativeKeys: "\u96E3x"
+ }
+ Key {
+ text: "\u91D1"
+ alternativeKeys: "\u91D1c"
+ }
+ Key {
+ text: "\u5973"
+ alternativeKeys: "\u5973v"
+ }
+ Key {
+ text: "\u6708"
+ alternativeKeys: "\u6708b"
+ }
+ Key {
+ text: "\u5F13"
+ alternativeKeys: "\u5F13n"
+ }
+ Key {
+ text: "\u4E00"
+ alternativeKeys: "\u4E00m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\uFF0C"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ visible: InputContext.inputEngine.inputModes.indexOf(InputEngine.InputMode.Zhuyin) !== -1
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\uFF0E"
+ alternativeKeys: "\uFF1B\u3001\uFF0E\uFF1A\u3002?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: pageZhuyin
+ KeyboardLayout {
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ smallTextVisible: true
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ KeyboardColumn {
+ KeyboardRow {
+ Key {
+ text: "\u3105"
+ alternativeKeys: "\u31051"
+ }
+ Key {
+ id: normalKey
+ text: "\u3109"
+ alternativeKeys: "\u31092"
+ }
+ Key {
+ text: "\u02C7"
+ alternativeKeys: "\u02C73"
+ }
+ Key {
+ text: "\u02CB"
+ alternativeKeys: "\u02CB4"
+ displayText: "`"
+ }
+ Key {
+ text: "\u3113"
+ alternativeKeys: "\u31135"
+ }
+ Key {
+ text: "\u02CA"
+ alternativeKeys: "\u02CA6"
+ displayText: "´"
+ }
+ Key {
+ text: "\u02D9"
+ alternativeKeys: "\u02D97"
+ }
+ Key {
+ text: "\u311A"
+ alternativeKeys: "\u311A8"
+ }
+ Key {
+ text: "\u311E"
+ alternativeKeys: "\u311E9"
+ }
+ Key {
+ text: "\u3122"
+ alternativeKeys: "\u31220"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u3106"
+ alternativeKeys: "\u3106q"
+ }
+ Key {
+ text: "\u310A"
+ alternativeKeys: "\u310Aw"
+ }
+ Key {
+ text: "\u310D"
+ alternativeKeys: "\u310De"
+ }
+ Key {
+ text: "\u3110"
+ alternativeKeys: "\u3110r"
+ }
+ Key {
+ text: "\u3114"
+ alternativeKeys: "\u3114t"
+ }
+ Key {
+ text: "\u3117"
+ alternativeKeys: "\u3117y"
+ }
+ Key {
+ text: "\u3127"
+ alternativeKeys: "\u3127u"
+ }
+ Key {
+ text: "\u311B"
+ alternativeKeys: "\u311Bi"
+ }
+ Key {
+ text: "\u311F"
+ alternativeKeys: "\u311Fo"
+ }
+ Key {
+ text: "\u3123"
+ alternativeKeys: "\u3123p"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u3107"
+ alternativeKeys: "\u3107a"
+ }
+ Key {
+ text: "\u310B"
+ alternativeKeys: "\u310Bs"
+ }
+ Key {
+ text: "\u310E"
+ alternativeKeys: "\u310Ed"
+ }
+ Key {
+ text: "\u3111"
+ alternativeKeys: "\u3111f"
+ }
+ Key {
+ text: "\u3115"
+ alternativeKeys: "\u3115g"
+ }
+ Key {
+ text: "\u3118"
+ alternativeKeys: "\u3118h"
+ }
+ Key {
+ text: "\u3128"
+ alternativeKeys: "\u3128j"
+ }
+ Key {
+ text: "\u311C"
+ alternativeKeys: "\u311Ck"
+ }
+ Key {
+ text: "\u3120"
+ alternativeKeys: "\u3120l"
+ }
+ Key {
+ text: "\u3124"
+ alternativeKeys: "\u3124…"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u3108"
+ alternativeKeys: "\u3108z"
+ }
+ Key {
+ text: "\u310C"
+ alternativeKeys: "\u310Cx"
+ }
+ Key {
+ text: "\u310F"
+ alternativeKeys: "\u310Fc"
+ }
+ Key {
+ text: "\u3112"
+ alternativeKeys: "\u3112v"
+ }
+ Key {
+ text: "\u3116"
+ alternativeKeys: "\u3116b"
+ }
+ Key {
+ text: "\u3119"
+ alternativeKeys: "\u3119n"
+ }
+ Key {
+ text: "\u3129"
+ alternativeKeys: "\u3129m"
+ }
+ Key {
+ text: "\u311D"
+ alternativeKeys: "、\u311D,"
+ }
+ Key {
+ text: "\u3121"
+ alternativeKeys: "。\u3121."
+ }
+ Key {
+ text: "\u3125"
+ alternativeKeys: ";\u3125:"
+ }
+ }
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\uFF0C"
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ InputModeKey {
+ visible: InputContext.inputEngine.inputModes.indexOf(InputEngine.InputMode.Zhuyin) !== -1
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\uFF0E"
+ alternativeKeys: "\uFF1B\u3001\uFF0E\uFF1A\u3002?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/zh_TW/numbers.fallback b/src/layouts/zh_TW/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/zh_TW/numbers.fallback
diff --git a/src/layouts/zh_TW/symbols.qml b/src/layouts/zh_TW/symbols.qml
new file mode 100644
index 00000000..291622db
--- /dev/null
+++ b/src/layouts/zh_TW/symbols.qml
@@ -0,0 +1,478 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 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
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; TCInputMethod {}', parent, "symbols.qml")
+ }
+ sharedLayouts: ['main']
+ property int page
+ readonly property int numPages: 3
+ sourceComponent: {
+ switch (page) {
+ case 2: return page3
+ case 1: return page2
+ default: return page1
+ }
+ }
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "("
+ }
+ Key {
+ key: Qt.Key_1
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: (page + 1) + "/" + numPages
+ functionKey: true
+ onClicked: page = (page + 1) % numPages
+ highlighted: true
+ }
+ Key {
+ text: "“"
+ }
+ Key {
+ text: "”"
+ }
+ Key {
+ text: "、"
+ }
+ Key {
+ text: ":"
+ }
+ Key {
+ text: ";"
+ }
+ Key {
+ text: "!"
+ }
+ Key {
+ text: "?"
+ }
+ Key {
+ text: "~"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "—"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "½"
+ alternativeKeys: "½¼¾"
+ }
+ Key {
+ id: normalKey
+ text: "'"
+ }
+ Key {
+ text: "/"
+ }
+ Key {
+ text: "\\"
+ }
+ Key {
+ text: "|"
+ }
+ Key {
+ text: "["
+ }
+ Key {
+ text: "]"
+ }
+ Key {
+ text: "{"
+ }
+ Key {
+ text: "}"
+ }
+ Key {
+ text: "·"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "<"
+ }
+ Key {
+ text: ">"
+ }
+ Key {
+ text: ","
+ }
+ Key {
+ text: "."
+ }
+ Key {
+ text: ":"
+ }
+ Key {
+ text: ";"
+ }
+ Key {
+ text: "!"
+ }
+ Key {
+ text: "?"
+ }
+ Key {
+ text: "="
+ }
+ Key {
+ text: "~"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: (page + 1) + "/" + numPages
+ functionKey: true
+ onClicked: page = (page + 1) % numPages
+ highlighted: true
+ }
+ Key {
+ text: "\""
+ }
+ Key {
+ text: "§"
+ }
+ Key {
+ text: "^"
+ }
+ Key {
+ text: "$"
+ }
+ Key {
+ text: "¥"
+ }
+ Key {
+ text: "€"
+ }
+ Key {
+ text: "£"
+ }
+ Key {
+ text: "¢"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "。"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page3
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "\"
+ }
+ Key {
+ id: normalKey
+ text: "/"
+ }
+ Key {
+ text: "("
+ }
+ Key {
+ text: ")"
+ }
+ Key {
+ text: "〔"
+ }
+ Key {
+ text: "〕"
+ }
+ Key {
+ text: "〈"
+ }
+ Key {
+ text: "〉"
+ }
+ Key {
+ text: "《"
+ }
+ Key {
+ text: "》"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "→"
+ }
+ Key {
+ text: "←"
+ }
+ Key {
+ text: "↑"
+ }
+ Key {
+ text: "↓"
+ }
+ Key {
+ text: "■"
+ }
+ Key {
+ text: "□"
+ }
+ Key {
+ text: "●"
+ }
+ Key {
+ text: "○"
+ }
+ Key {
+ text: "【"
+ }
+ Key {
+ text: "】"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: (page + 1) + "/" + numPages
+ functionKey: true
+ onClicked: page = (page + 1) % numPages
+ highlighted: true
+ }
+ Key {
+ text: "『"
+ }
+ Key {
+ text: "』"
+ }
+ Key {
+ text: "「"
+ }
+ Key {
+ text: "」"
+ }
+ Key {
+ text: "★"
+ }
+ Key {
+ text: "☆"
+ }
+ Key {
+ text: "◆"
+ }
+ Key {
+ text: "◇"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "ABC"
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: true
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "…"
+ highlighted: true
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}