aboutsummaryrefslogtreecommitdiffstats
path: root/src/styles
diff options
context:
space:
mode:
Diffstat (limited to 'src/styles')
-rw-r--r--src/styles/CMakeLists.txt59
-rw-r--r--src/styles/builtin/CMakeLists.txt89
-rw-r--r--src/styles/builtin/default/images/backspace-fff.svg23
-rw-r--r--src/styles/builtin/default/images/check-fff.svg8
-rw-r--r--src/styles/builtin/default/images/enter-fff.svg13
-rw-r--r--src/styles/builtin/default/images/globe-fff.svg26
-rw-r--r--src/styles/builtin/default/images/handwriting-fff.svg62
-rw-r--r--src/styles/builtin/default/images/hidekeyboard-fff.svg55
-rw-r--r--src/styles/builtin/default/images/search-fff.svg14
-rw-r--r--src/styles/builtin/default/images/selectionhandle-bottom.svg201
-rw-r--r--src/styles/builtin/default/images/settings-fff.svg61
-rw-r--r--src/styles/builtin/default/images/shift-80c342.svg12
-rw-r--r--src/styles/builtin/default/images/shift-c5d6b6.svg12
-rw-r--r--src/styles/builtin/default/images/shift-fff.svg12
-rw-r--r--src/styles/builtin/default/images/textmode-fff.svg80
-rw-r--r--src/styles/builtin/default/style.qml1241
-rw-r--r--src/styles/builtin/qtquickvirtualkeyboardbstylesbuiltinplugin.cpp48
-rw-r--r--src/styles/builtin/qtquickvirtualkeyboardbstylesbuiltinplugin.h49
-rw-r--r--src/styles/builtin/retro/images/backspace-c5a96f.svg23
-rw-r--r--src/styles/builtin/retro/images/check-c5a96f.svg8
-rw-r--r--src/styles/builtin/retro/images/enter-c5a96f.svg13
-rw-r--r--src/styles/builtin/retro/images/globe-110b05.svg26
-rw-r--r--src/styles/builtin/retro/images/globe-c5a96f.svg26
-rw-r--r--src/styles/builtin/retro/images/globe-fff.svg26
-rw-r--r--src/styles/builtin/retro/images/handwriting-110b05.svg62
-rw-r--r--src/styles/builtin/retro/images/handwriting-c5a96f.svg62
-rw-r--r--src/styles/builtin/retro/images/handwriting-fff.svg62
-rw-r--r--src/styles/builtin/retro/images/hidekeyboard-110b05.svg55
-rw-r--r--src/styles/builtin/retro/images/hidekeyboard-c5a96f.svg55
-rw-r--r--src/styles/builtin/retro/images/hidekeyboard-fff.svg55
-rw-r--r--src/styles/builtin/retro/images/key154px_black.pngbin0 -> 9977 bytes
-rw-r--r--src/styles/builtin/retro/images/key154px_black.svg19
-rw-r--r--src/styles/builtin/retro/images/key154px_black_long.pngbin0 -> 11828 bytes
-rw-r--r--src/styles/builtin/retro/images/key154px_capslock.pngbin0 -> 21410 bytes
-rw-r--r--src/styles/builtin/retro/images/key154px_capslock_long.pngbin0 -> 24503 bytes
-rw-r--r--src/styles/builtin/retro/images/key154px_colorA.pngbin0 -> 16911 bytes
-rw-r--r--src/styles/builtin/retro/images/key154px_colorA.svg19
-rw-r--r--src/styles/builtin/retro/images/key154px_colorA_long.pngbin0 -> 21161 bytes
-rw-r--r--src/styles/builtin/retro/images/key154px_colorB.pngbin0 -> 17447 bytes
-rw-r--r--src/styles/builtin/retro/images/key154px_shiftcase.pngbin0 -> 9675 bytes
-rw-r--r--src/styles/builtin/retro/images/key154px_shiftcase_long.pngbin0 -> 10444 bytes
-rw-r--r--src/styles/builtin/retro/images/key156px_black_long.pngbin0 -> 10931 bytes
-rw-r--r--src/styles/builtin/retro/images/key156px_black_medium_long.pngbin0 -> 11989 bytes
-rw-r--r--src/styles/builtin/retro/images/key156px_colorA.pngbin0 -> 17049 bytes
-rw-r--r--src/styles/builtin/retro/images/key156px_colorB.pngbin0 -> 17462 bytes
-rw-r--r--src/styles/builtin/retro/images/key160px_black.pngbin0 -> 10165 bytes
-rw-r--r--src/styles/builtin/retro/images/key160px_colorA.pngbin0 -> 17575 bytes
-rw-r--r--src/styles/builtin/retro/images/key160px_colorB.pngbin0 -> 18291 bytes
-rw-r--r--src/styles/builtin/retro/images/key_preview.pngbin0 -> 14779 bytes
-rw-r--r--src/styles/builtin/retro/images/search-c5a96f.svg14
-rw-r--r--src/styles/builtin/retro/images/selectionhandle-bottom.svg9
-rw-r--r--src/styles/builtin/retro/images/shift-c5a96f.svg12
-rw-r--r--src/styles/builtin/retro/images/shift-cd8865.svg12
-rw-r--r--src/styles/builtin/retro/images/shift-dc4f28.svg12
-rw-r--r--src/styles/builtin/retro/images/textmode-110b05.svg80
-rw-r--r--src/styles/builtin/retro/images/textmode-c5a96f.svg80
-rw-r--r--src/styles/builtin/retro/images/textmode-fff.svg80
-rw-r--r--src/styles/builtin/retro/images/triangle_black.pngbin0 -> 2249 bytes
-rw-r--r--src/styles/builtin/retro/images/triangle_highlight.pngbin0 -> 2120 bytes
-rw-r--r--src/styles/builtin/retro/style.qml1274
-rw-r--r--src/styles/plugins.qmltypes570
-rw-r--r--src/styles/qmldir5
-rw-r--r--src/styles/qtquickvirtualkeyboardstylesplugin.cpp42
-rw-r--r--src/styles/qtquickvirtualkeyboardstylesplugin.h2
64 files changed, 4130 insertions, 638 deletions
diff --git a/src/styles/CMakeLists.txt b/src/styles/CMakeLists.txt
index 2650d44e..6e14f976 100644
--- a/src/styles/CMakeLists.txt
+++ b/src/styles/CMakeLists.txt
@@ -1,21 +1,38 @@
+set(styles_imports)
+if(NOT QT_FEATURE_vkb_no_builtin_style)
+ add_subdirectory(builtin)
+ list(APPEND styles_imports QtQuick.VirtualKeyboard.Styles.Builtin/auto)
+endif()
+
#####################################################################
-## qtquickvirtualkeyboardstylesplugin Plugin:
+## QtQuick.VirtualKeyboard.Styles
#####################################################################
-qt_internal_add_qml_module(qtquickvirtualkeyboardstylesplugin
+qt_internal_add_qml_module(qtvkbstylesplugin
URI "QtQuick.VirtualKeyboard.Styles"
- VERSION "2.${PROJECT_VERSION_MINOR}"
- CLASS_NAME QtQuickVirtualKeyboardStylesPlugin
- PLUGIN_TARGET qtquickvirtualkeyboardstylesplugin
+ VERSION "${PROJECT_VERSION}"
+ PAST_MAJOR_VERSIONS 2 1
+ PLUGIN_TARGET qtvkbstylesplugin
+ # Note: The plugin source is defined manually because it uses an
+ # image provider. Once the image provider doesn't need an
+ # engine anymore, we can auto-generate the plugin.
NO_GENERATE_PLUGIN_SOURCE
NO_PLUGIN_OPTIONAL
- NO_GENERATE_QMLTYPES
- INSTALL_SOURCE_QMLTYPES "plugins.qmltypes"
DEPENDENCIES
- QtQuick/2.0
+ QtQuick/auto
+ IMPORTS
+ ${styles_imports}
SOURCES
qtquickvirtualkeyboardstylesplugin.cpp qtquickvirtualkeyboardstylesplugin.h
svgimageprovider.cpp svgimageprovider.h
+ QML_FILES
+ KeyboardStyle.qml
+ KeyIcon.qml
+ KeyPanel.qml
+ SelectionListItem.qml
+ TraceInputKeyPanel.qml
+ TraceCanvas.qml
+ TraceUtils.js
DEFINES
QT_ASCII_CAST_WARNINGS
QT_NO_CAST_FROM_ASCII
@@ -27,30 +44,4 @@ qt_internal_add_qml_module(qtquickvirtualkeyboardstylesplugin
Qt::Qml
Qt::Quick
Qt::Svg
- Qt::VirtualKeyboardPrivate
-)
-
-# Resources:
-set(styles_resource_files
- "KeyIcon.qml"
- "KeyPanel.qml"
- "KeyboardStyle.qml"
- "SelectionListItem.qml"
- "TraceCanvas.qml"
- "TraceInputKeyPanel.qml"
- "TraceUtils.js"
-)
-
-qt_internal_add_resource(qtquickvirtualkeyboardstylesplugin "styles"
- PREFIX
- "/QtQuick/VirtualKeyboard/Styles/content"
- FILES
- ${styles_resource_files}
)
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:styles.pro:WIN32:
-# QMAKE_TARGET_DESCRIPTION = "Virtual Keyboard for Qt."
-# QMAKE_TARGET_PRODUCT = "Qt Virtual Keyboard (Qt $$QT_VERSION)"
diff --git a/src/styles/builtin/CMakeLists.txt b/src/styles/builtin/CMakeLists.txt
new file mode 100644
index 00000000..1ef540e6
--- /dev/null
+++ b/src/styles/builtin/CMakeLists.txt
@@ -0,0 +1,89 @@
+qt_internal_add_qml_module(qtvkbbuiltinstylesplugin
+ URI "QtQuick.VirtualKeyboard.Styles.Builtin"
+ VERSION "${PROJECT_VERSION}"
+ PLUGIN_TARGET qtvkbbuiltinstylesplugin
+ NO_PLUGIN_OPTIONAL
+ NO_GENERATE_PLUGIN_SOURCE
+ SOURCES
+ qtquickvirtualkeyboardbstylesbuiltinplugin.cpp qtquickvirtualkeyboardbstylesbuiltinplugin.h
+)
+
+# Resources:
+set(virtualkeyboard_default_style_resource_files
+ "default/images/backspace-fff.svg"
+ "default/images/check-fff.svg"
+ "default/images/enter-fff.svg"
+ "default/images/globe-fff.svg"
+ "default/images/handwriting-fff.svg"
+ "default/images/hidekeyboard-fff.svg"
+ "default/images/search-fff.svg"
+ "default/images/selectionhandle-bottom.svg"
+ "default/images/shift-80c342.svg"
+ "default/images/shift-fff.svg"
+ "default/images/shift-c5d6b6.svg"
+ "default/images/textmode-fff.svg"
+ "default/images/settings-fff.svg"
+ "default/style.qml"
+)
+
+qt_internal_add_resource(qtvkbbuiltinstylesplugin "virtualkeyboard_default_style"
+ PREFIX
+ "/qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/Builtin/default"
+ BASE
+ "default"
+ FILES
+ ${virtualkeyboard_default_style_resource_files}
+)
+set(virtualkeyboard_retro_style_resource_files
+ "retro/images/backspace-c5a96f.svg"
+ "retro/images/check-c5a96f.svg"
+ "retro/images/enter-c5a96f.svg"
+ "retro/images/globe-110b05.svg"
+ "retro/images/globe-c5a96f.svg"
+ "retro/images/globe-fff.svg"
+ "retro/images/handwriting-110b05.svg"
+ "retro/images/handwriting-c5a96f.svg"
+ "retro/images/handwriting-fff.svg"
+ "retro/images/hidekeyboard-110b05.svg"
+ "retro/images/hidekeyboard-c5a96f.svg"
+ "retro/images/hidekeyboard-fff.svg"
+ "retro/images/key154px_black.png"
+ "retro/images/key154px_black.svg"
+ "retro/images/key154px_black_long.png"
+ "retro/images/key154px_capslock.png"
+ "retro/images/key154px_capslock_long.png"
+ "retro/images/key154px_colorA.png"
+ "retro/images/key154px_colorA.svg"
+ "retro/images/key154px_colorA_long.png"
+ "retro/images/key154px_colorB.png"
+ "retro/images/key154px_shiftcase.png"
+ "retro/images/key154px_shiftcase_long.png"
+ "retro/images/key156px_black_long.png"
+ "retro/images/key156px_black_medium_long.png"
+ "retro/images/key156px_colorA.png"
+ "retro/images/key156px_colorB.png"
+ "retro/images/key160px_black.png"
+ "retro/images/key160px_colorA.png"
+ "retro/images/key160px_colorB.png"
+ "retro/images/key_preview.png"
+ "retro/images/search-c5a96f.svg"
+ "retro/images/selectionhandle-bottom.svg"
+ "retro/images/shift-c5a96f.svg"
+ "retro/images/shift-cd8865.svg"
+ "retro/images/shift-dc4f28.svg"
+ "retro/images/textmode-110b05.svg"
+ "retro/images/textmode-c5a96f.svg"
+ "retro/images/textmode-fff.svg"
+ "retro/images/triangle_black.png"
+ "retro/images/triangle_highlight.png"
+ "retro/style.qml"
+)
+
+qt_internal_add_resource(qtvkbbuiltinstylesplugin "virtualkeyboard_retro_style"
+ PREFIX
+ "/qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/Builtin/retro"
+ BASE
+ "retro"
+ FILES
+ ${virtualkeyboard_retro_style_resource_files}
+)
diff --git a/src/styles/builtin/default/images/backspace-fff.svg b/src/styles/builtin/default/images/backspace-fff.svg
new file mode 100644
index 00000000..e3dac14a
--- /dev/null
+++ b/src/styles/builtin/default/images/backspace-fff.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="159px" height="88px" viewBox="0 0 159 88" enable-background="new 0 0 159 88" xml:space="preserve">
+<g>
+ <rect fill="none" width="159" height="88"/>
+ <g>
+ <g>
+ <path fill="#fff" d="M158.8,88H44L0,44L44,0h114.8V88z M48.7,76.7h98.8V11.3H48.7L16,44L48.7,76.7z"/>
+ </g>
+ <g>
+ <g>
+
+ <rect x="87.3" y="16.2" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 127.5895 140.8497)" fill="#fff" width="11.3" height="55.7"/>
+ </g>
+ <g>
+
+ <rect x="65.1" y="38.4" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 127.5954 140.8499)" fill="#fff" width="55.7" height="11.3"/>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/default/images/check-fff.svg b/src/styles/builtin/default/images/check-fff.svg
new file mode 100644
index 00000000..9e5ebb00
--- /dev/null
+++ b/src/styles/builtin/default/images/check-fff.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="170px" height="119px" viewBox="0 0 170 119" enable-background="new 0 0 170 119" xml:space="preserve">
+<g>
+ <polygon fill="#fff" points="62.3,119 0,56.7 11.3,45.3 62.3,96.3 158.7,0 170,11.3 "/>
+</g>
+</svg>
diff --git a/src/styles/builtin/default/images/enter-fff.svg b/src/styles/builtin/default/images/enter-fff.svg
new file mode 100644
index 00000000..3a400341
--- /dev/null
+++ b/src/styles/builtin/default/images/enter-fff.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="211px" height="80px" viewBox="0 0 211 80" enable-background="new 0 0 211 80" xml:space="preserve">
+<g>
+ <rect fill="none" width="211" height="80"/>
+ <g>
+ <rect x="9.2" y="33.8" fill="#fff" width="201.8" height="12.3"/>
+ <rect x="198.7" y="10.7" fill="#fff" width="12.3" height="35.3"/>
+ <polygon fill="#fff" points="44.5,0 44.5,79.8 0,40.7 "/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/default/images/globe-fff.svg b/src/styles/builtin/default/images/globe-fff.svg
new file mode 100644
index 00000000..e865b9fd
--- /dev/null
+++ b/src/styles/builtin/default/images/globe-fff.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="144px" viewBox="0 0 144 144" enable-background="new 0 0 144 144" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="144"/>
+ <g>
+ <path fill="#fff" d="M72,144c-39.5,0-71.8-32.1-72-71.6C-0.2,32.7,31.9,0.2,71.6,0h0.7c19.1,0.1,37.1,7.6,50.6,21.1
+ s21,31.5,21.1,50.5c0.1,19.2-7.3,37.4-20.8,51c-13.5,13.7-31.6,21.3-50.8,21.4C72.2,144,72.1,144,72,144z M76.3,101.3v32.3
+ c9-8.1,16-17.9,20.6-28.7C90.2,102.9,83.3,101.7,76.3,101.3z M47,104.9c3.2,7.4,7.5,14.3,12.8,20.6c2.4,2.9,5.1,5.6,7.9,8.1v-32.3
+ C60.7,101.7,53.8,102.9,47,104.9z M105.2,107.9c-3.9,9.2-9.2,17.6-15.9,25.1c10.4-2.9,19.9-8.5,27.8-16.4c0.5-0.5,1-1.1,1.6-1.6
+ C114.3,112.1,109.8,109.8,105.2,107.9z M25.5,114.9c7.8,8.5,17.9,14.8,29.3,18c-0.5-0.6-1.1-1.2-1.6-1.8
+ c-6-7.1-10.8-14.9-14.3-23.3C34.2,109.8,29.8,112.1,25.5,114.9z M108.1,99.7c5.5,2.3,10.8,5.1,15.9,8.4
+ c6.5-9.4,10.4-20.3,11.2-31.8h-22.9c-0.1,1.2-0.1,2.4-0.2,3.7C111.4,86.8,110.1,93.4,108.1,99.7z M8.8,76.3
+ C9.6,88.1,13.6,99,20,108.1c5.1-3.3,10.4-6.1,15.8-8.4c-2.4-7.5-3.7-15.4-4.1-23.4L8.8,76.3L8.8,76.3z M40.4,76.3
+ c0.3,7,1.5,13.8,3.6,20.4c7.7-2.4,15.7-3.8,23.7-4.1V76.3H40.4z M76.3,92.6c8,0.4,15.9,1.7,23.6,4.1c1.7-5.6,2.9-11.5,3.4-17.5
+ c0.1-1,0.1-2,0.2-2.9H76.3V92.6z M112.2,67.7h23c-0.8-11.5-4.6-22.4-11.2-31.8c-5.1,3.4-10.5,6.2-16.1,8.5
+ C110.4,51.9,111.8,59.7,112.2,67.7z M76.3,67.7h27.2c-0.4-7-1.6-13.8-3.7-20.4c-7.7,2.4-15.5,3.7-23.5,4.1V67.7z M40.5,67.7h27.2
+ V51.4c-7.9-0.4-15.8-1.7-23.4-4.1c-1.8,5.8-3,11.9-3.6,18.1C40.6,66.2,40.5,66.9,40.5,67.7z M8.8,67.7h23c0.1-1,0.1-2,0.2-3
+ c0.6-7,2-13.8,4-20.3c-5.5-2.3-10.9-5.1-16-8.5C13.6,45,9.6,55.9,8.8,67.7z M76.3,11.1v31.6c6.9-0.3,13.7-1.5,20.4-3.5
+ c-3.1-7.1-7.3-13.9-12.5-20C81.8,16.3,79.1,13.6,76.3,11.1z M47.3,39.2c6.7,2,13.5,3.2,20.4,3.5V11.1C58.8,19,51.9,28.6,47.3,39.2
+ z M88.4,10.8c0.8,0.9,1.6,1.8,2.4,2.8c5.9,6.9,10.6,14.6,14.1,22.7c4.7-2,9.3-4.3,13.7-7.2c-0.6-0.6-1.2-1.2-1.8-1.9
+ C108.8,19.2,99,13.6,88.4,10.8z M25.5,29.1c4.4,2.8,8.9,5.2,13.6,7.1c4-9.3,9.5-17.9,16.5-25.4C43.8,14,33.5,20.4,25.5,29.1z"/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/default/images/handwriting-fff.svg b/src/styles/builtin/default/images/handwriting-fff.svg
new file mode 100644
index 00000000..cc74e1d5
--- /dev/null
+++ b/src/styles/builtin/default/images/handwriting-fff.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="156"
+ height="156"
+ viewBox="0 0 156 156"
+ enable-background="new 0 0 156 104"
+ xml:space="preserve"
+ sodipodi:docname="handwriting-868482.svg"
+ inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"><metadata
+ id="metadata15"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs13" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1055"
+ id="namedview11"
+ showgrid="false"
+ inkscape:zoom="6.6858974"
+ inkscape:cx="78"
+ inkscape:cy="52"
+ inkscape:window-x="-7"
+ inkscape:window-y="-7"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" />
+<g
+ id="g8"
+ transform="translate(0,26.023835)">
+ <rect
+ fill="none"
+ width="156"
+ height="104"
+ id="rect2"
+ x="0"
+ y="0" />
+ <g
+ id="g6">
+ <path
+ fill="#ffffff"
+ d="M 37.6,103.3 C 27.5,103.3 18.7,98.3 14.5,89.7 4.4,68.7 19.9,52.3 36.2,35 37.4,33.8 38.6,32.5 39.8,31.2 45.1,25.5 45,19.7 43.3,16.4 41.5,13 37.8,11.5 33.1,12.2 16.6,14.8 11.9,38.6 11.9,38.8 L 0,36.6 C 0.3,35.3 6.4,4.3 31.2,0.3 41,-1.3 49.7,2.7 53.9,10.7 c 4.7,8.9 2.6,20.1 -5.3,28.6 -1.2,1.3 -2.4,2.6 -3.6,3.8 -16.7,17.8 -25.9,28.5 -19.6,41.4 3.3,6.8 11.1,7.6 16.9,6.3 C 51.5,88.7 62.1,79.7 62,61.3 61.8,33.2 78.2,19.5 92.2,16.4 c 14.5,-3.2 28.4,3.6 34.7,17 1.3,2.8 2.3,5.4 3.1,8.1 13.3,0.7 25.5,4.3 26,4.4 l -3.4,11.5 c -0.1,0 -9.7,-2.8 -20.6,-3.8 0.5,16.5 -8.6,28.9 -20.1,34.7 -11.9,6 -24,3.8 -28.9,-5.2 -3.1,-5.6 -1.9,-14.7 2.9,-22.5 7.9,-13 21.3,-17.4 31.5,-18.8 C 117,40.6 116.5,39.4 116,38.4 112.1,30.1 103.8,26 94.9,28 c -9.7,2.2 -21,12.1 -20.8,33.1 0.2,25.5 -15.6,38.1 -29,41.3 -2.6,0.6 -5.1,0.9 -7.5,0.9 z m 82.2,-49.6 c -14,1.5 -20.6,8.5 -23.4,12.9 -3.3,5.2 -3.4,9.8 -2.9,10.9 1.6,2.9 7.3,3 13,0.2 10.8,-5.5 13.8,-15.1 13.3,-24 z"
+ id="path4" />
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/default/images/hidekeyboard-fff.svg b/src/styles/builtin/default/images/hidekeyboard-fff.svg
new file mode 100644
index 00000000..a4f0b9b3
--- /dev/null
+++ b/src/styles/builtin/default/images/hidekeyboard-fff.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="127px" viewBox="0 0 144 127" enable-background="new 0 0 144 127" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="127"/>
+ <g>
+ <g>
+ <path fill="#fff" d="M144,90.3H0V0h144V90.3z M10.9,79.4h122.2V10.9H10.9V79.4z"/>
+ </g>
+ <g>
+ <rect x="19.5" y="20.2" fill="#fff" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="38.1" y="20.2" fill="#fff" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="56.8" y="20.2" fill="#fff" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="75.5" y="20.2" fill="#fff" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="94.2" y="20.2" fill="#fff" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="112.9" y="20.2" fill="#fff" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="19.5" y="39.7" fill="#fff" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="38.1" y="39.7" fill="#fff" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="56.8" y="39.7" fill="#fff" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="75.5" y="39.7" fill="#fff" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="94.2" y="39.7" fill="#fff" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="112.9" y="39.7" fill="#fff" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="38.1" y="59.2" fill="#fff" width="67.7" height="11.7"/>
+ </g>
+ <g>
+ <polygon fill="#fff" points="72,115.2 62.2,108.2 45.9,108.2 72,126.9 98.1,108.2 81.8,108.2 "/>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/default/images/search-fff.svg b/src/styles/builtin/default/images/search-fff.svg
new file mode 100644
index 00000000..9c21e291
--- /dev/null
+++ b/src/styles/builtin/default/images/search-fff.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="148px" height="148px" viewBox="0 0 148 148" enable-background="new 0 0 148 148" xml:space="preserve">
+<g>
+ <rect fill="none" width="148" height="148"/>
+ <g>
+ <path fill="#fff" d="M146.8,132.7c1.6,1.6,1.6,4.1,0,5.7l-8.5,8.5c-1.6,1.6-4.1,1.6-5.7,0l-44.6-44.6c-1.6-1.6-1.6-4.1,0-5.7
+ l8.5-8.5c1.6-1.6,4.1-1.6,5.7,0L146.8,132.7z"/>
+ <path fill="#fff" d="M58,12c25.4,0,46,20.6,46,46s-20.6,46-46,46c-25.4,0-46-20.6-46-46S32.6,12,58,12 M58,0C26,0,0,26,0,58
+ s26,58,58,58c32,0,58-26,58-58S90,0,58,0L58,0z"/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/default/images/selectionhandle-bottom.svg b/src/styles/builtin/default/images/selectionhandle-bottom.svg
new file mode 100644
index 00000000..312e3ab5
--- /dev/null
+++ b/src/styles/builtin/default/images/selectionhandle-bottom.svg
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="405.39487"
+ height="603.25201"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="selectionhandle-bottom.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3964">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3966" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3968" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3825"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3827" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3797">
+ <stop
+ style="stop-color:#a7a7a7;stop-opacity:1;"
+ offset="0"
+ id="stop3799" />
+ <stop
+ style="stop-color:#959595;stop-opacity:1;"
+ offset="1"
+ id="stop3801" />
+ </linearGradient>
+ <filter
+ id="filter3991"
+ inkscape:label="Drop Shadow"
+ color-interpolation-filters="sRGB">
+ <feFlood
+ id="feFlood3993"
+ flood-opacity="0.9"
+ flood-color="rgb(0,0,0)"
+ result="flood" />
+ <feComposite
+ id="feComposite3995"
+ in2="SourceGraphic"
+ in="flood"
+ operator="in"
+ result="composite1" />
+ <feGaussianBlur
+ id="feGaussianBlur3997"
+ stdDeviation="9"
+ result="blur" />
+ <feOffset
+ id="feOffset3999"
+ dx="-4"
+ dy="-4"
+ result="offset" />
+ <feComposite
+ id="feComposite4001"
+ in2="offset"
+ in="SourceGraphic"
+ operator="over"
+ result="fbSourceGraphic" />
+ <feColorMatrix
+ result="fbSourceGraphicAlpha"
+ in="fbSourceGraphic"
+ values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
+ id="feColorMatrix4003" />
+ <feFlood
+ id="feFlood4005"
+ flood-opacity="0.9"
+ flood-color="rgb(0,0,0)"
+ result="flood"
+ in="fbSourceGraphic" />
+ <feComposite
+ id="feComposite4007"
+ in2="fbSourceGraphic"
+ in="flood"
+ operator="in"
+ result="composite1" />
+ <feGaussianBlur
+ id="feGaussianBlur4009"
+ stdDeviation="9"
+ result="blur" />
+ <feOffset
+ id="feOffset4011"
+ dx="-4"
+ dy="-4"
+ result="offset" />
+ <feComposite
+ id="feComposite4013"
+ in2="offset"
+ in="fbSourceGraphic"
+ operator="over"
+ result="composite2" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ id="filter3941"
+ x="-0.31598809"
+ width="1.6319762"
+ y="-0.21141379"
+ height="1.4228276"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="52.664682"
+ id="feGaussianBlur3943" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3964"
+ id="linearGradient3970"
+ x1="77.14286"
+ y1="559.86218"
+ x2="477.14285"
+ y2="559.86218"
+ gradientUnits="userSpaceOnUse" />
+ <filter
+ inkscape:collect="always"
+ id="filter4040"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.49892857"
+ id="feGaussianBlur4042" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.83834513"
+ inkscape:cx="219.23008"
+ inkscape:cy="314.00438"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1176"
+ inkscape:window-height="719"
+ inkscape:window-x="188"
+ inkscape:window-y="121"
+ inkscape:window-maximized="0"
+ fit-margin-top="1"
+ fit-margin-left="1"
+ fit-margin-right="1"
+ fit-margin-bottom="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Lag"
+ style="display:inline"
+ transform="translate(-125.874,-261.09332)" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-125.874,-261.09332)">
+ <path
+ style="fill:#bfbfbf;fill-opacity:1;stroke:url(#linearGradient3970);filter:url(#filter4040)"
+ d="m 477.14286,660.93361 0,-400 -400.000003,0 0,400 200.714283,197.85714 z"
+ id="path2987"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc"
+ transform="matrix(-1,0,0,-1,605.71429,1122.5815)" />
+ </g>
+</svg>
diff --git a/src/styles/builtin/default/images/settings-fff.svg b/src/styles/builtin/default/images/settings-fff.svg
new file mode 100644
index 00000000..fdda82fa
--- /dev/null
+++ b/src/styles/builtin/default/images/settings-fff.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="16.303936mm"
+ height="16.548409mm"
+ viewBox="0 0 16.303937 16.548409"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.1-alpha (b0f32e08fc, 2021-03-07)"
+ sodipodi:docname="settings.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ objecttolerance="10.0"
+ gridtolerance="10.0"
+ guidetolerance="10.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="4.2532751"
+ inkscape:cx="-41.732546"
+ inkscape:cy="41.967659"
+ inkscape:window-width="1848"
+ inkscape:window-height="1016"
+ inkscape:window-x="72"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1"
+ inkscape:snap-others="false"
+ fit-margin-top="0.1"
+ fit-margin-right="0.1"
+ fit-margin-bottom="0.1"
+ fit-margin-left="0.1" />
+ <defs
+ id="defs2" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline"
+ transform="translate(-86.699353,-53.971583)">
+ <path
+ id="path914"
+ style="fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ inkscape:transform-center-y="-7.0565799"
+ d="M 93.952921,54.071633 93.755,55.875142 a 6.4693593,6.4693593 0 0 0 -1.75028,0.583427 l -1.230934,-1.354439 -1.454174,1.056783 0.904854,1.584399 a 6.4693593,6.4693593 0 0 0 -1.094507,1.488797 l -1.775084,-0.368969 -0.555522,1.708941 1.647444,0.743106 a 6.4693593,6.4693593 0 0 0 -0.08165,0.932243 6.4693593,6.4693593 0 0 0 0.08113,0.925523 l -1.646928,0.742075 0.555522,1.709457 1.771467,-0.367938 a 6.4693593,6.4693593 0 0 0 1.095539,1.492933 l -0.902269,1.579231 1.454174,1.056267 1.225764,-1.348237 a 6.4693593,6.4693593 0 0 0 1.755966,0.58601 l 0.197405,1.79524 h 1.797304 l 0.197406,-1.798341 a 6.4693593,6.4693593 0 0 0 1.731161,-0.58756 l 0.0186,-0.0021 1.231966,1.355471 1.453666,-1.056783 -0.907963,-1.590082 0.01447,-0.03152 A 6.4693593,6.4693593 0 0 0 100.537,65.270404 l 0.0181,-0.01654 1.79317,0.372586 0.55501,-1.708941 -1.66967,-0.752925 -0.007,-0.03359 a 6.4693593,6.4693593 0 0 0 0.077,-0.8816 6.4693593,6.4693593 0 0 0 -0.0692,-0.922941 l 1.66864,-0.751893 -0.55501,-1.709457 -1.7911,0.372071 a 6.4693593,6.4693593 0 0 0 -1.080039,-1.489832 l 0.906399,-1.586466 -1.454168,-1.056266 -1.225765,1.347721 a 6.4693593,6.4693593 0 0 0 -1.754933,-0.575159 l -0.198438,-1.805575 z m 0.8816,3.507798 a 4.6701392,4.6701392 0 0 1 4.669999,4.669999 4.6701392,4.6701392 0 0 1 -4.669999,4.670515 4.6701392,4.6701392 0 0 1 -4.669999,-4.670515 4.6701392,4.6701392 0 0 1 4.669999,-4.669999 z" />
+ <circle
+ style="display:inline;fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.529167;stroke-linejoin:round;stroke-opacity:1"
+ id="circle12597"
+ cx="94.834518"
+ cy="62.249687"
+ r="1.7568086" />
+ </g>
+</svg>
diff --git a/src/styles/builtin/default/images/shift-80c342.svg b/src/styles/builtin/default/images/shift-80c342.svg
new file mode 100644
index 00000000..d39a2230
--- /dev/null
+++ b/src/styles/builtin/default/images/shift-80c342.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="134px" viewBox="0 0 144 134" enable-background="new 0 0 144 134" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="134"/>
+ <g>
+ <path fill="#80C342" d="M103.6,134H40.2V77.5H0L71.9,0l71.9,77.5h-40.2V134L103.6,134z M51.7,122.5h40.5V66.1h25.4L71.9,16.8
+ L26.2,66.1h25.4L51.7,122.5L51.7,122.5z"/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/default/images/shift-c5d6b6.svg b/src/styles/builtin/default/images/shift-c5d6b6.svg
new file mode 100644
index 00000000..22f9d5de
--- /dev/null
+++ b/src/styles/builtin/default/images/shift-c5d6b6.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="134px" viewBox="0 0 144 134" enable-background="new 0 0 144 134" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="134"/>
+ <g>
+ <path fill="#C5D6B6" d="M103.6,134H40.2V77.5H0L71.9,0l71.9,77.5h-40.2V134L103.6,134z M51.7,122.5h40.5V66.1h25.4L71.9,16.8
+ L26.2,66.1h25.4L51.7,122.5L51.7,122.5z"/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/default/images/shift-fff.svg b/src/styles/builtin/default/images/shift-fff.svg
new file mode 100644
index 00000000..ff65317b
--- /dev/null
+++ b/src/styles/builtin/default/images/shift-fff.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="134px" viewBox="0 0 144 134" enable-background="new 0 0 144 134" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="134"/>
+ <g>
+ <path fill="#fff" d="M103.6,134H40.2V77.5H0L71.9,0l71.9,77.5h-40.2V134L103.6,134z M51.7,122.5h40.5V66.1h25.4L71.9,16.8
+ L26.2,66.1h25.4L51.7,122.5L51.7,122.5z"/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/default/images/textmode-fff.svg b/src/styles/builtin/default/images/textmode-fff.svg
new file mode 100644
index 00000000..bdb144cd
--- /dev/null
+++ b/src/styles/builtin/default/images/textmode-fff.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="124"
+ height="124"
+ viewBox="0 0 124 124"
+ enable-background="new 0 0 124 96"
+ xml:space="preserve"
+ sodipodi:docname="textmode-868482.svg"
+ inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"><metadata
+ id="metadata25"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs23" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1055"
+ id="namedview21"
+ showgrid="false"
+ inkscape:zoom="8.4112903"
+ inkscape:cx="62"
+ inkscape:cy="48"
+ inkscape:window-x="-7"
+ inkscape:window-y="-7"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" />
+<g
+ id="g18"
+ transform="translate(0,14)">
+ <g
+ id="g14">
+ <g
+ id="g6">
+ <path
+ fill="#ffffff"
+ d="M 55.4,70.8 46.9,49 H 19.4 L 11,70.8 H 2.9 L 30,2 h 6.7 l 27,68.8 z m -11,-29 -8,-21.2 c -1,-2.7 -2.1,-6 -3.2,-9.9 -0.7,3 -1.7,6.3 -3,9.9 l -8.1,21.2 z"
+ id="path2" />
+ <path
+ fill="#ffffff"
+ d="M 66.6,72.8 H 54.1 L 45.5,51 H 20.8 L 12.4,72.8 H 0 L 28.7,0 h 9.4 z m -9.8,-4 h 4 L 35.4,4 h -1.9 l 1.7,6.2 c 1.1,3.8 2.1,7.1 3.1,9.7 l 9,24 h -28 L 28.4,20 c 1.2,-3.5 2.2,-6.7 2.9,-9.6 L 32.8,4 H 31.4 L 5.9,68.8 H 9.7 L 18.1,47 h 30.2 z m -31.7,-29 h 16.4 l -7,-18.5 c -0.4,-1.1 -0.8,-2.2 -1.2,-3.4 -0.4,1.1 -0.7,2.2 -1.2,3.4 z"
+ id="path4" />
+ </g>
+ <g
+ id="g12">
+ <path
+ fill="#ffffff"
+ d="m 116.2,70.8 -1.5,-7.3 h -0.4 c -2.6,3.2 -5.1,5.4 -7.7,6.5 -2.6,1.1 -5.7,1.7 -9.5,1.7 -5.1,0 -9.1,-1.3 -12,-3.9 -2.9,-2.6 -4.3,-6.4 -4.3,-11.2 0,-10.4 8.3,-15.8 24.9,-16.3 l 8.7,-0.3 v -3.2 c 0,-4 -0.9,-7 -2.6,-8.9 C 110.1,26 107.3,25 103.5,25 99.2,25 94.4,26.3 89,28.9 l -2.4,-6 c 2.5,-1.4 5.3,-2.5 8.3,-3.2 3,-0.7 6,-1.2 9.1,-1.2 6.1,0 10.7,1.4 13.6,4.1 2.9,2.7 4.4,7.1 4.4,13.1 V 70.8 Z M 98.7,65.3 c 4.8,0 8.6,-1.3 11.4,-4 2.8,-2.7 4.1,-6.4 4.1,-11.2 v -4.6 l -7.8,0.3 C 100.2,46 95.8,47 93,48.7 c -2.8,1.7 -4,4.4 -4,8 0,2.8 0.9,5 2.6,6.4 1.7,1.4 4,2.2 7.1,2.2 z"
+ id="path8" />
+ <path
+ fill="#ffffff"
+ d="m 97.1,73.8 c -5.6,0 -10.1,-1.5 -13.3,-4.5 -3.3,-3 -5,-7.3 -5,-12.7 0,-11.6 9,-17.8 26.8,-18.3 l 6.8,-0.2 v -1.3 c 0,-3.5 -0.7,-6.1 -2.1,-7.6 -1.3,-1.5 -3.6,-2.2 -6.8,-2.2 -4,0 -8.6,1.3 -13.7,3.7 l -1.9,0.9 -3.9,-9.5 1.6,-0.8 c 2.7,-1.4 5.6,-2.6 8.8,-3.4 3.2,-0.8 6.4,-1.2 9.6,-1.2 6.6,0 11.7,1.6 15,4.6 3.4,3.1 5.1,8 5.1,14.5 v 37.1 h -9.4 l -1.1,-5.3 c -2,2 -4,3.5 -6,4.4 -2.9,1.1 -6.4,1.8 -10.5,1.8 z M 103.5,23 c 4.4,0 7.7,1.2 9.8,3.5 2.1,2.3 3.1,5.7 3.1,10.3 V 42 l -10.7,0.3 c -23,0.7 -23,10.9 -23,14.3 0,4.3 1.2,7.5 3.7,9.7 2.5,2.3 6.1,3.4 10.6,3.4 3.5,0 6.4,-0.5 8.7,-1.5 2.2,-1 4.6,-3 6.9,-6 l 0.6,-0.8 h 2.6 l 0.7,1.6 1.2,5.7 h 2.1 V 35.8 c 0,-5.4 -1.3,-9.3 -3.8,-11.6 -2.6,-2.4 -6.7,-3.5 -12.3,-3.5 -2.8,0 -5.7,0.4 -8.6,1.1 -2.2,0.6 -4.3,1.3 -6.3,2.3 l 0.9,2.3 C 94.9,24.1 99.4,23 103.5,23 Z m -4.8,44.3 c -3.5,0 -6.4,-0.9 -8.5,-2.7 C 88,62.8 87,60.1 87,56.7 c 0,-4.3 1.7,-7.6 5,-9.6 3.1,-1.9 7.8,-3 14.4,-3.2 l 9.9,-0.4 v 6.7 c 0,5.3 -1.6,9.6 -4.8,12.6 -3.2,3 -7.5,4.5 -12.8,4.5 z m 13.5,-19.7 -5.7,0.2 c -5.8,0.2 -10,1.1 -12.4,2.6 -2.1,1.4 -3.1,3.4 -3.1,6.3 0,2.2 0.6,3.8 1.9,4.9 1.3,1.1 3.3,1.7 5.8,1.7 4.3,0 7.6,-1.1 10,-3.4 2.4,-2.3 3.5,-5.5 3.5,-9.7 z"
+ id="path10" />
+ </g>
+ </g>
+ <rect
+ y="88"
+ fill="#ffffff"
+ width="124"
+ height="8"
+ id="rect16"
+ x="0" />
+</g>
+</svg>
diff --git a/src/styles/builtin/default/style.qml b/src/styles/builtin/default/style.qml
new file mode 100644
index 00000000..3bb0f739
--- /dev/null
+++ b/src/styles/builtin/default/style.qml
@@ -0,0 +1,1241 @@
+/****************************************************************************
+**
+** 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.Styles
+
+KeyboardStyle {
+ id: currentStyle
+ readonly property bool compactSelectionList: [InputEngine.InputMode.Pinyin, InputEngine.InputMode.Cangjie, InputEngine.InputMode.Zhuyin].indexOf(InputContext.inputEngine.inputMode) !== -1
+ readonly property string fontFamily: "Sans"
+ readonly property real keyBackgroundMargin: Math.round(8 * scaleHint)
+ readonly property real keyContentMargin: Math.round(40 * scaleHint)
+ readonly property real keyIconScale: scaleHint * 0.8
+ readonly property string resourcePrefix: "qrc:/qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/Builtin/default/"
+
+ readonly property string inputLocale: InputContext.locale
+ property color primaryColor: "#263238"
+ property color primaryLightColor: "#4f5b62"
+ property color primaryDarkColor: "#000a12"
+ property color textOnPrimaryColor: "#ffffff"
+ property color secondaryColor: "#01579b"
+ property color secondaryLightColor: "#4f83cc"
+ property color secondaryDarkColor: "#002f6c"
+ property color textOnSecondaryColor: "#ffffff"
+
+ property color keyboardBackgroundColor: primaryColor
+ property color normalKeyBackgroundColor: primaryDarkColor
+ property color highlightedKeyBackgroundColor: primaryLightColor
+ property color capsLockKeyAccentColor: secondaryColor
+ property color modeKeyAccentColor: textOnPrimaryColor
+ property color keyTextColor: textOnPrimaryColor
+ property color keySmallTextColor: textOnPrimaryColor
+ property color popupBackgroundColor: secondaryColor
+ property color popupBorderColor: secondaryLightColor
+ property color popupTextColor: textOnSecondaryColor
+ property color popupHighlightColor: secondaryLightColor
+ property color selectionListTextColor: textOnPrimaryColor
+ property color selectionListSeparatorColor: primaryLightColor
+ property color selectionListBackgroundColor: primaryColor
+ property color navigationHighlightColor: "yellow"
+
+ property real inputLocaleIndicatorOpacity: 1.0
+ property Timer inputLocaleIndicatorHighlightTimer: Timer {
+ interval: 1000
+ onTriggered: inputLocaleIndicatorOpacity = 0.5
+ }
+ onInputLocaleChanged: {
+ inputLocaleIndicatorOpacity = 1.0
+ inputLocaleIndicatorHighlightTimer.restart()
+ }
+
+ property Component component_settingsIcon: Component {
+ Image {
+ sourceSize.width: 80 * keyIconScale
+ sourceSize.height: 80 * keyIconScale
+ smooth: false
+ source: resourcePrefix + "images/settings-fff.svg"
+ }
+ }
+
+ keyboardDesignWidth: 2560
+ keyboardDesignHeight: 800
+ keyboardRelativeLeftMargin: 6 / keyboardDesignWidth
+ keyboardRelativeRightMargin: 6 / keyboardDesignWidth
+ keyboardRelativeTopMargin: 6 / keyboardDesignHeight
+ keyboardRelativeBottomMargin: 6 / keyboardDesignHeight
+
+ keyboardBackground: Rectangle {
+ color: keyboardBackgroundColor
+ }
+
+ keyPanel: KeyPanel {
+ id: keyPanel
+ Rectangle {
+ id: keyBackground
+ radius: 5
+ color: control && control.highlighted ? highlightedKeyBackgroundColor : normalKeyBackgroundColor
+ anchors.fill: keyPanel
+ anchors.margins: keyBackgroundMargin
+ Text {
+ id: keySmallText
+ text: control.smallText
+ visible: control.smallTextVisible
+ color: keySmallTextColor
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.margins: keyContentMargin / 3
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 60 * scaleHint
+ capitalization: control.uppercased ? Font.AllUppercase : Font.MixedCase
+ }
+ }
+ Loader {
+ id: loader_settingsIcon
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.margins: keyContentMargin / 3
+ }
+ Text {
+ id: keyText
+ text: control.displayText
+ color: keyTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: control.displayText.length > 1 ? Text.AlignVCenter : Text.AlignBottom
+ anchors.fill: parent
+ anchors.leftMargin: keyContentMargin
+ anchors.topMargin: keyContentMargin
+ anchors.rightMargin: keyContentMargin
+ anchors.bottomMargin: keyContentMargin
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 60 * scaleHint
+ capitalization: control.uppercased ? Font.AllUppercase : Font.MixedCase
+ }
+ }
+ states: [
+ State {
+ when: control.smallText === "\u2699"
+ PropertyChanges {
+ target: keySmallText
+ visible: false
+ }
+ PropertyChanges {
+ target: loader_settingsIcon
+ sourceComponent: component_settingsIcon
+ }
+ }
+ ]
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: keyBackground
+ opacity: 0.75
+ }
+ PropertyChanges {
+ target: keyText
+ opacity: 0.5
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: keyBackground
+ opacity: 0.75
+ }
+ PropertyChanges {
+ target: keyText
+ opacity: 0.05
+ }
+ }
+ ]
+ }
+
+ backspaceKeyPanel: KeyPanel {
+ id: backspaceKeyPanel
+ Rectangle {
+ id: backspaceKeyBackground
+ radius: 5
+ color: control && control.highlighted ? highlightedKeyBackgroundColor : normalKeyBackgroundColor
+ anchors.fill: backspaceKeyPanel
+ anchors.margins: keyBackgroundMargin
+ Image {
+ id: backspaceKeyIcon
+ anchors.centerIn: parent
+ sourceSize.height: 88 * keyIconScale
+ smooth: false
+ source: resourcePrefix + "images/backspace-fff.svg"
+ }
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: backspaceKeyBackground
+ opacity: 0.80
+ }
+ PropertyChanges {
+ target: backspaceKeyIcon
+ opacity: 0.6
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: backspaceKeyBackground
+ opacity: 0.8
+ }
+ PropertyChanges {
+ target: backspaceKeyIcon
+ opacity: 0.2
+ }
+ }
+ ]
+ }
+
+ languageKeyPanel: KeyPanel {
+ id: languageKeyPanel
+ Rectangle {
+ id: languageKeyBackground
+ radius: 5
+ color: control && control.highlighted ? highlightedKeyBackgroundColor : normalKeyBackgroundColor
+ anchors.fill: languageKeyPanel
+ anchors.margins: keyBackgroundMargin
+ Image {
+ id: languageKeyIcon
+ anchors.centerIn: parent
+ sourceSize.height: 127 * keyIconScale
+ smooth: false
+ source: resourcePrefix + "images/globe-fff.svg"
+ }
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: languageKeyBackground
+ opacity: 0.80
+ }
+ PropertyChanges {
+ target: languageKeyIcon
+ opacity: 0.75
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: languageKeyBackground
+ opacity: 0.8
+ }
+ PropertyChanges {
+ target: languageKeyIcon
+ opacity: 0.2
+ }
+ }
+ ]
+ }
+
+ enterKeyPanel: KeyPanel {
+ id: enterKeyPanel
+ Rectangle {
+ id: enterKeyBackground
+ radius: 5
+ color: control && control.highlighted ? highlightedKeyBackgroundColor : normalKeyBackgroundColor
+ anchors.fill: enterKeyPanel
+ anchors.margins: keyBackgroundMargin
+ Image {
+ id: enterKeyIcon
+ visible: enterKeyText.text.length === 0
+ anchors.centerIn: parent
+ readonly property size enterKeyIconSize: {
+ switch (control.actionId) {
+ case EnterKeyAction.Go:
+ case EnterKeyAction.Send:
+ case EnterKeyAction.Next:
+ case EnterKeyAction.Done:
+ return Qt.size(170, 119)
+ case EnterKeyAction.Search:
+ return Qt.size(148, 148)
+ default:
+ return Qt.size(211, 80)
+ }
+ }
+ sourceSize.height: enterKeyIconSize.height * keyIconScale
+ smooth: false
+ source: {
+ switch (control.actionId) {
+ case EnterKeyAction.Go:
+ case EnterKeyAction.Send:
+ case EnterKeyAction.Next:
+ case EnterKeyAction.Done:
+ return resourcePrefix + "images/check-fff.svg"
+ case EnterKeyAction.Search:
+ return resourcePrefix + "images/search-fff.svg"
+ default:
+ return resourcePrefix + "images/enter-fff.svg"
+ }
+ }
+ }
+ Text {
+ id: enterKeyText
+ visible: text.length !== 0
+ text: control.actionId !== EnterKeyAction.None ? control.displayText : ""
+ clip: true
+ fontSizeMode: Text.HorizontalFit
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ color: keyTextColor
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 50 * scaleHint
+ capitalization: Font.AllUppercase
+ }
+ anchors.fill: parent
+ anchors.margins: Math.round(42 * scaleHint)
+ }
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: enterKeyBackground
+ opacity: 0.80
+ }
+ PropertyChanges {
+ target: enterKeyIcon
+ opacity: 0.6
+ }
+ PropertyChanges {
+ target: enterKeyText
+ opacity: 0.6
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: enterKeyBackground
+ opacity: 0.8
+ }
+ PropertyChanges {
+ target: enterKeyIcon
+ opacity: 0.2
+ }
+ PropertyChanges {
+ target: enterKeyText
+ opacity: 0.2
+ }
+ }
+ ]
+ }
+
+ hideKeyPanel: KeyPanel {
+ id: hideKeyPanel
+ Rectangle {
+ id: hideKeyBackground
+ radius: 5
+ color: control && control.highlighted ? highlightedKeyBackgroundColor : normalKeyBackgroundColor
+ anchors.fill: hideKeyPanel
+ anchors.margins: keyBackgroundMargin
+ Image {
+ id: hideKeyIcon
+ anchors.centerIn: parent
+ sourceSize.height: 127 * keyIconScale
+ smooth: false
+ source: resourcePrefix + "images/hidekeyboard-fff.svg"
+ }
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: hideKeyBackground
+ opacity: 0.80
+ }
+ PropertyChanges {
+ target: hideKeyIcon
+ opacity: 0.6
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: hideKeyBackground
+ opacity: 0.8
+ }
+ PropertyChanges {
+ target: hideKeyIcon
+ opacity: 0.2
+ }
+ }
+ ]
+ }
+
+ shiftKeyPanel: KeyPanel {
+ id: shiftKeyPanel
+ Rectangle {
+ id: shiftKeyBackground
+ radius: 5
+ color: control && control.highlighted ? highlightedKeyBackgroundColor : normalKeyBackgroundColor
+ anchors.fill: shiftKeyPanel
+ anchors.margins: keyBackgroundMargin
+ Image {
+ id: shiftKeyIcon
+ anchors.centerIn: parent
+ sourceSize.height: 134 * keyIconScale
+ smooth: false
+ source: resourcePrefix + "images/shift-fff.svg"
+ }
+ states: [
+ State {
+ name: "capsLockActive"
+ when: InputContext.capsLockActive
+ PropertyChanges {
+ target: shiftKeyBackground
+ color: capsLockKeyAccentColor
+ }
+ PropertyChanges {
+ target: shiftKeyIcon
+ source: resourcePrefix + "images/shift-c5d6b6.svg"
+ }
+ },
+ State {
+ name: "shiftActive"
+ when: InputContext.shiftActive
+ PropertyChanges {
+ target: shiftKeyIcon
+ source: resourcePrefix + "images/shift-80c342.svg"
+ }
+ }
+ ]
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: shiftKeyBackground
+ opacity: 0.80
+ }
+ PropertyChanges {
+ target: shiftKeyIcon
+ opacity: 0.6
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: shiftKeyBackground
+ opacity: 0.8
+ }
+ PropertyChanges {
+ target: shiftKeyIcon
+ opacity: 0.2
+ }
+ }
+ ]
+ }
+
+ spaceKeyPanel: KeyPanel {
+ id: spaceKeyPanel
+ Rectangle {
+ id: spaceKeyBackground
+ radius: 5
+ color: control && control.highlighted ? highlightedKeyBackgroundColor : normalKeyBackgroundColor
+ anchors.fill: spaceKeyPanel
+ anchors.margins: keyBackgroundMargin
+ Text {
+ id: spaceKeyText
+ text: Qt.locale(InputContext.locale).nativeLanguageName
+ color: keyTextColor
+ opacity: inputLocaleIndicatorOpacity
+ Behavior on opacity { PropertyAnimation { duration: 250 } }
+ anchors.centerIn: parent
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 60 * scaleHint
+ }
+ }
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: spaceKeyBackground
+ opacity: 0.80
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: spaceKeyBackground
+ opacity: 0.8
+ }
+ }
+ ]
+ }
+
+ symbolKeyPanel: KeyPanel {
+ id: symbolKeyPanel
+ Rectangle {
+ id: symbolKeyBackground
+ radius: 5
+ color: control && control.highlighted ? highlightedKeyBackgroundColor : normalKeyBackgroundColor
+ anchors.fill: symbolKeyPanel
+ anchors.margins: keyBackgroundMargin
+ Text {
+ id: symbolKeyText
+ text: control.displayText
+ color: keyTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ anchors.fill: parent
+ anchors.margins: keyContentMargin
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 60 * scaleHint
+ capitalization: Font.AllUppercase
+ }
+ }
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: symbolKeyBackground
+ opacity: 0.80
+ }
+ PropertyChanges {
+ target: symbolKeyText
+ opacity: 0.6
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: symbolKeyBackground
+ opacity: 0.8
+ }
+ PropertyChanges {
+ target: symbolKeyText
+ opacity: 0.2
+ }
+ }
+ ]
+ }
+
+ modeKeyPanel: KeyPanel {
+ id: modeKeyPanel
+ Rectangle {
+ id: modeKeyBackground
+ radius: 5
+ color: control && control.highlighted ? highlightedKeyBackgroundColor : normalKeyBackgroundColor
+ anchors.fill: modeKeyPanel
+ anchors.margins: keyBackgroundMargin
+ Text {
+ id: modeKeyText
+ text: control.displayText
+ color: keyTextColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ anchors.fill: parent
+ anchors.margins: keyContentMargin
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 60 * scaleHint
+ capitalization: Font.AllUppercase
+ }
+ }
+ Rectangle {
+ id: modeKeyIndicator
+ implicitHeight: parent.height * 0.1
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ anchors.leftMargin: parent.width * 0.4
+ anchors.rightMargin: parent.width * 0.4
+ anchors.bottomMargin: parent.height * 0.12
+ color: modeKeyAccentColor
+ radius: 3
+ visible: control.mode
+ }
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: modeKeyBackground
+ opacity: 0.80
+ }
+ PropertyChanges {
+ target: modeKeyText
+ opacity: 0.6
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: modeKeyBackground
+ opacity: 0.8
+ }
+ PropertyChanges {
+ target: modeKeyText
+ opacity: 0.2
+ }
+ }
+ ]
+ }
+
+ handwritingKeyPanel: KeyPanel {
+ id: handwritingKeyPanel
+ Rectangle {
+ id: hwrKeyBackground
+ radius: 5
+ color: control && control.highlighted ? highlightedKeyBackgroundColor : normalKeyBackgroundColor
+ anchors.fill: handwritingKeyPanel
+ anchors.margins: keyBackgroundMargin
+ Image {
+ id: hwrKeyIcon
+ anchors.centerIn: parent
+ sourceSize.height: 127 * keyIconScale
+ smooth: false
+ source: resourcePrefix + (keyboard.handwritingMode ? "images/textmode-fff.svg" : "images/handwriting-fff.svg")
+ }
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: hwrKeyBackground
+ opacity: 0.80
+ }
+ PropertyChanges {
+ target: hwrKeyIcon
+ opacity: 0.6
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: hwrKeyBackground
+ opacity: 0.8
+ }
+ PropertyChanges {
+ target: hwrKeyIcon
+ opacity: 0.2
+ }
+ }
+ ]
+ }
+
+ characterPreviewMargin: 0
+ characterPreviewDelegate: Item {
+ property string text
+ property string flickLeft
+ property string flickTop
+ property string flickRight
+ property string flickBottom
+ readonly property bool flickKeysSet: flickLeft || flickTop || flickRight || flickBottom
+ readonly property bool flickKeysVisible: text && flickKeysSet &&
+ text !== flickLeft && text !== flickTop && text !== flickRight && text !== flickBottom
+ id: characterPreview
+ Rectangle {
+ id: characterPreviewBackground
+ anchors.fill: parent
+ color: popupBackgroundColor
+ radius: 5
+ readonly property int largeTextHeight: Math.round(height / 3 * 2)
+ readonly property int smallTextHeight: Math.round(height / 3)
+ readonly property int smallTextMargin: Math.round(3 * scaleHint)
+ Text {
+ id: characterPreviewText
+ color: popupTextColor
+ text: characterPreview.text
+ fontSizeMode: Text.VerticalFit
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ height: characterPreviewBackground.largeTextHeight
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 82 * scaleHint
+ }
+ }
+ Text {
+ color: popupTextColor
+ text: characterPreview.flickLeft
+ visible: characterPreview.flickKeysVisible
+ opacity: 0.8
+ fontSizeMode: Text.VerticalFit
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ anchors.left: parent.left
+ anchors.leftMargin: characterPreviewBackground.smallTextMargin
+ anchors.verticalCenter: parent.verticalCenter
+ height: characterPreviewBackground.smallTextHeight
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 62 * scaleHint
+ }
+ }
+ Text {
+ color: popupTextColor
+ text: characterPreview.flickTop
+ visible: characterPreview.flickKeysVisible
+ opacity: 0.8
+ fontSizeMode: Text.VerticalFit
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ anchors.top: parent.top
+ anchors.topMargin: characterPreviewBackground.smallTextMargin
+ anchors.horizontalCenter: parent.horizontalCenter
+ height: characterPreviewBackground.smallTextHeight
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 62 * scaleHint
+ }
+ }
+ Text {
+ color: popupTextColor
+ text: characterPreview.flickRight
+ visible: characterPreview.flickKeysVisible
+ opacity: 0.8
+ fontSizeMode: Text.VerticalFit
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ anchors.right: parent.right
+ anchors.rightMargin: characterPreviewBackground.smallTextMargin
+ anchors.verticalCenter: parent.verticalCenter
+ height: characterPreviewBackground.smallTextHeight
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 62 * scaleHint
+ }
+ }
+ Text {
+ color: popupTextColor
+ text: characterPreview.flickBottom
+ visible: characterPreview.flickKeysVisible
+ opacity: 0.8
+ fontSizeMode: Text.VerticalFit
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: characterPreviewBackground.smallTextMargin
+ anchors.horizontalCenter: parent.horizontalCenter
+ height: characterPreviewBackground.smallTextHeight
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 62 * scaleHint
+ }
+ }
+ states: State {
+ name: "flickKeysVisible"
+ when: characterPreview.flickKeysVisible
+ PropertyChanges {
+ target: characterPreviewText
+ height: characterPreviewBackground.smallTextHeight
+ }
+ }
+ }
+ }
+
+ alternateKeysListItemWidth: 120 * scaleHint
+ alternateKeysListItemHeight: 170 * scaleHint
+ alternateKeysListDelegate: Item {
+ id: alternateKeysListItem
+ width: alternateKeysListItemWidth
+ height: alternateKeysListItemHeight
+ Text {
+ id: listItemText
+ text: model.text
+ color: popupTextColor
+ opacity: 0.8
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 60 * scaleHint
+ }
+ anchors.centerIn: parent
+ }
+ states: State {
+ name: "current"
+ when: alternateKeysListItem.ListView.isCurrentItem
+ PropertyChanges {
+ target: listItemText
+ opacity: 1
+ }
+ }
+ }
+ alternateKeysListHighlight: Rectangle {
+ color: popupHighlightColor
+ radius: 5
+ }
+ alternateKeysListBackground: Item {
+ Rectangle {
+ readonly property real margin: 20 * scaleHint
+ x: -margin
+ y: -margin
+ width: parent.width + 2 * margin
+ height: parent.height + 2 * margin
+ radius: 5
+ color: popupBackgroundColor
+ border {
+ width: 1
+ color: popupBorderColor
+ }
+ }
+ }
+
+ selectionListHeight: 85 * scaleHint
+ selectionListDelegate: SelectionListItem {
+ id: selectionListItem
+ width: Math.round(selectionListLabel.width + selectionListLabel.anchors.leftMargin * 2)
+ Text {
+ id: selectionListLabel
+ anchors.left: parent.left
+ anchors.leftMargin: Math.round((compactSelectionList ? 50 : 140) * scaleHint)
+ anchors.verticalCenter: parent.verticalCenter
+ text: decorateText(display, wordCompletionLength)
+ color: selectionListTextColor
+ opacity: 0.9
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 44 * scaleHint
+ }
+ function decorateText(text, wordCompletionLength) {
+ if (wordCompletionLength > 0) {
+ return text.slice(0, -wordCompletionLength) + '<u>' + text.slice(-wordCompletionLength) + '</u>'
+ }
+ return text
+ }
+ }
+ Rectangle {
+ id: selectionListSeparator
+ width: 4 * scaleHint
+ height: 36 * scaleHint
+ radius: 2
+ color: selectionListSeparatorColor
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.left
+ }
+ states: State {
+ name: "current"
+ when: selectionListItem.ListView.isCurrentItem
+ PropertyChanges {
+ target: selectionListLabel
+ opacity: 1
+ }
+ }
+ }
+ selectionListBackground: Rectangle {
+ color: selectionListBackgroundColor
+ }
+ selectionListAdd: Transition {
+ NumberAnimation { property: "y"; from: wordCandidateView.height; duration: 200 }
+ NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200 }
+ }
+ selectionListRemove: Transition {
+ NumberAnimation { property: "y"; to: -wordCandidateView.height; duration: 200 }
+ NumberAnimation { property: "opacity"; to: 0; duration: 200 }
+ }
+
+ navigationHighlight: Rectangle {
+ color: "transparent"
+ border.color: navigationHighlightColor
+ border.width: 5
+ }
+
+ traceInputKeyPanelDelegate: TraceInputKeyPanel {
+ id: traceInputKeyPanel
+ traceMargins: keyBackgroundMargin
+ Rectangle {
+ id: traceInputKeyPanelBackground
+ radius: 5
+ color: normalKeyBackgroundColor
+ anchors.fill: traceInputKeyPanel
+ anchors.margins: keyBackgroundMargin
+ Text {
+ id: hwrInputModeIndicator
+ visible: control.patternRecognitionMode === InputEngine.PatternRecognitionMode.Handwriting
+ text: {
+ switch (InputContext.inputEngine.inputMode) {
+ case InputEngine.InputMode.Numeric:
+ if (["ar", "fa"].indexOf(InputContext.locale.substring(0, 2)) !== -1)
+ return "\u0660\u0661\u0662"
+ // Fallthrough
+ case InputEngine.InputMode.Dialable:
+ return "123"
+ case InputEngine.InputMode.Greek:
+ return "ΑΒΓ"
+ case InputEngine.InputMode.Cyrillic:
+ return "АБВ"
+ case InputEngine.InputMode.Arabic:
+ if (InputContext.locale.substring(0, 2) === "fa")
+ return "\u0627\u200C\u0628\u200C\u067E"
+ return "\u0623\u200C\u0628\u200C\u062C"
+ case InputEngine.InputMode.Hebrew:
+ return "\u05D0\u05D1\u05D2"
+ case InputEngine.InputMode.ChineseHandwriting:
+ return "中文"
+ case InputEngine.InputMode.JapaneseHandwriting:
+ return "日本語"
+ case InputEngine.InputMode.KoreanHandwriting:
+ return "한국어"
+ case InputEngine.InputMode.Thai:
+ return "กขค"
+ default:
+ return "Abc"
+ }
+ }
+ color: keyTextColor
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.margins: keyContentMargin
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 44 * scaleHint
+ capitalization: {
+ if (InputContext.capsLockActive)
+ return Font.AllUppercase
+ if (InputContext.shiftActive)
+ return Font.MixedCase
+ return Font.AllLowercase
+ }
+ }
+ }
+ }
+ Canvas {
+ id: traceInputKeyGuideLines
+ anchors.fill: traceInputKeyPanelBackground
+ opacity: 0.1
+ onPaint: {
+ var ctx = getContext("2d")
+ ctx.lineWidth = 1
+ ctx.strokeStyle = Qt.rgba(0xFF, 0xFF, 0xFF)
+ ctx.clearRect(0, 0, width, height)
+ var i
+ var margin = Math.round(30 * scaleHint)
+ if (control.horizontalRulers) {
+ for (i = 0; i < control.horizontalRulers.length; i++) {
+ ctx.beginPath()
+ var y = Math.round(control.horizontalRulers[i])
+ var rightMargin = Math.round(width - margin)
+ if (i + 1 === control.horizontalRulers.length) {
+ ctx.moveTo(margin, y)
+ ctx.lineTo(rightMargin, y)
+ } else {
+ var dashLen = Math.round(20 * scaleHint)
+ for (var dash = margin, dashCount = 0;
+ dash < rightMargin; dash += dashLen, dashCount++) {
+ if ((dashCount & 1) === 0) {
+ ctx.moveTo(dash, y)
+ ctx.lineTo(Math.min(dash + dashLen, rightMargin), y)
+ }
+ }
+ }
+ ctx.stroke()
+ }
+ }
+ if (control.verticalRulers) {
+ for (i = 0; i < control.verticalRulers.length; i++) {
+ ctx.beginPath()
+ ctx.moveTo(control.verticalRulers[i], margin)
+ ctx.lineTo(control.verticalRulers[i], Math.round(height - margin))
+ ctx.stroke()
+ }
+ }
+ }
+ Connections {
+ target: control
+ function onHorizontalRulersChanged() { traceInputKeyGuideLines.requestPaint() }
+ function onVerticalRulersChanged() { traceInputKeyGuideLines.requestPaint() }
+ }
+ }
+ }
+
+ traceCanvasDelegate: TraceCanvas {
+ id: traceCanvas
+ onAvailableChanged: {
+ if (!available)
+ return
+ var ctx = getContext("2d")
+ if (parent.canvasType === "fullscreen") {
+ ctx.lineWidth = 10
+ ctx.strokeStyle = Qt.rgba(0, 0, 0)
+ } else {
+ ctx.lineWidth = 10 * scaleHint
+ ctx.strokeStyle = Qt.rgba(0xFF, 0xFF, 0xFF)
+ }
+ ctx.lineCap = "round"
+ ctx.fillStyle = ctx.strokeStyle
+ }
+ autoDestroyDelay: 800
+ onTraceChanged: if (trace === null) opacity = 0
+ Behavior on opacity { PropertyAnimation { easing.type: Easing.OutCubic; duration: 150 } }
+ }
+
+ popupListDelegate: SelectionListItem {
+ property real cursorAnchor: popupListLabel.x + popupListLabel.width
+ id: popupListItem
+ width: popupListLabel.width + popupListLabel.anchors.leftMargin * 2
+ height: popupListLabel.height + popupListLabel.anchors.topMargin * 2
+ Text {
+ id: popupListLabel
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.leftMargin: popupListLabel.height / 2
+ anchors.topMargin: popupListLabel.height / 3
+ text: decorateText(display, wordCompletionLength)
+ color: popupTextColor
+ opacity: 0.8
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: Qt.inputMethod.cursorRectangle.height * 0.8
+ }
+ function decorateText(text, wordCompletionLength) {
+ if (wordCompletionLength > 0) {
+ return text.slice(0, -wordCompletionLength) + '<u>' + text.slice(-wordCompletionLength) + '</u>'
+ }
+ return text
+ }
+ }
+ states: State {
+ name: "current"
+ when: popupListItem.ListView.isCurrentItem
+ PropertyChanges {
+ target: popupListLabel
+ opacity: 1.0
+ }
+ }
+ }
+
+ popupListBackground: Item {
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ color: popupBackgroundColor
+ border {
+ width: 1
+ color: popupBorderColor
+ }
+ }
+ }
+
+ popupListAdd: Transition {
+ NumberAnimation { property: "opacity"; from: 0; to: 1.0; duration: 200 }
+ }
+
+ popupListRemove: Transition {
+ NumberAnimation { property: "opacity"; to: 0; duration: 200 }
+ }
+
+ languagePopupListEnabled: true
+
+ languageListDelegate: SelectionListItem {
+ id: languageListItem
+ width: languageNameTextMetrics.width * 17
+ height: languageNameTextMetrics.height + languageListLabel.anchors.topMargin + languageListLabel.anchors.bottomMargin
+ Text {
+ id: languageListLabel
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.leftMargin: languageNameTextMetrics.height / 2
+ anchors.rightMargin: anchors.leftMargin
+ anchors.topMargin: languageNameTextMetrics.height / 3
+ anchors.bottomMargin: anchors.topMargin
+ text: languageNameFormatter.elidedText
+ color: popupTextColor
+ opacity: 0.8
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 44 * scaleHint
+ }
+ }
+ TextMetrics {
+ id: languageNameTextMetrics
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 44 * scaleHint
+ }
+ text: "X"
+ }
+ TextMetrics {
+ id: languageNameFormatter
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 44 * scaleHint
+ }
+ elide: Text.ElideRight
+ elideWidth: languageListItem.width - languageListLabel.anchors.leftMargin - languageListLabel.anchors.rightMargin
+ text: displayName
+ }
+ states: State {
+ name: "current"
+ when: languageListItem.ListView.isCurrentItem
+ PropertyChanges {
+ target: languageListLabel
+ opacity: 1
+ }
+ }
+ }
+
+ languageListHighlight: Rectangle {
+ color: popupHighlightColor
+ radius: 5
+ }
+
+ languageListBackground: Rectangle {
+ color: popupBackgroundColor
+ border {
+ width: 1
+ color: popupBorderColor
+ }
+ }
+
+ languageListAdd: Transition {
+ NumberAnimation { property: "opacity"; from: 0; to: 1.0; duration: 200 }
+ }
+
+ languageListRemove: Transition {
+ NumberAnimation { property: "opacity"; to: 0; duration: 200 }
+ }
+
+ selectionHandle: Image {
+ sourceSize.width: 20
+ source: resourcePrefix + "images/selectionhandle-bottom.svg"
+ }
+
+ fullScreenInputContainerBackground: Rectangle {
+ color: "#FFF"
+ }
+
+ fullScreenInputBackground: Rectangle {
+ color: "#FFF"
+ }
+
+ fullScreenInputMargins: Math.round(15 * scaleHint)
+
+ fullScreenInputPadding: Math.round(30 * scaleHint)
+
+ fullScreenInputCursor: Rectangle {
+ width: 1
+ color: "#000"
+ visible: parent.blinkStatus
+ }
+
+ fullScreenInputFont.pixelSize: 58 * scaleHint
+
+ functionPopupListDelegate: Item {
+ id: functionPopupListItem
+ readonly property real iconMargin: 40 * scaleHint
+ readonly property real iconWidth: 144 * keyIconScale
+ readonly property real iconHeight: 144 * keyIconScale
+ width: iconWidth + 2 * iconMargin
+ height: iconHeight + 2 * iconMargin
+ Image {
+ id: functionIcon
+ anchors.centerIn: parent
+ sourceSize.height: iconHeight
+ smooth: false
+ source: {
+ switch (keyboardFunction) {
+ case QtVirtualKeyboard.HideInputPanel:
+ return resourcePrefix + "images/hidekeyboard-fff.svg"
+ case QtVirtualKeyboard.ChangeLanguage:
+ return resourcePrefix + "images/globe-fff.svg"
+ case QtVirtualKeyboard.ToggleHandwritingMode:
+ return resourcePrefix + (keyboard.handwritingMode ? "images/textmode-fff.svg" : "images/handwriting-fff.svg")
+ }
+ }
+ }
+ }
+
+ functionPopupListBackground: Item {
+ Rectangle {
+ readonly property real backgroundMargin: 20 * scaleHint
+ x: -backgroundMargin
+ y: -backgroundMargin
+ width: parent.width + 2 * backgroundMargin
+ height: parent.height + 2 * backgroundMargin
+ radius: 5
+ color: popupBackgroundColor
+ border {
+ width: 1
+ color: popupBorderColor
+ }
+ }
+ }
+
+ functionPopupListHighlight: Rectangle {
+ color: popupHighlightColor
+ radius: 5
+ }
+}
diff --git a/src/styles/builtin/qtquickvirtualkeyboardbstylesbuiltinplugin.cpp b/src/styles/builtin/qtquickvirtualkeyboardbstylesbuiltinplugin.cpp
new file mode 100644
index 00000000..8ece6549
--- /dev/null
+++ b/src/styles/builtin/qtquickvirtualkeyboardbstylesbuiltinplugin.cpp
@@ -0,0 +1,48 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 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$
+**
+****************************************************************************/
+
+#include "qtquickvirtualkeyboardbstylesbuiltinplugin.h"
+
+QT_BEGIN_NAMESPACE
+
+extern void qml_register_types_QtQuick_VirtualKeyboard_Styles_Builtin();
+Q_GHS_KEEP_REFERENCE(qml_register_types_QtQuick_VirtualKeyboard_Styles_Builtin);
+
+QtQuickVirtualKeyboardStylesBuiltinPlugin::QtQuickVirtualKeyboardStylesBuiltinPlugin(QObject *parent) :
+ QQmlEngineExtensionPlugin(parent)
+{
+ volatile auto registration = &qml_register_types_QtQuick_VirtualKeyboard_Styles_Builtin;
+ Q_UNUSED(registration);
+#if defined(QT_STATICPLUGIN)
+ Q_INIT_RESOURCE(virtualkeyboard_default_style);
+ Q_INIT_RESOURCE(virtualkeyboard_retro_style);
+#endif
+}
+
+QT_END_NAMESPACE
diff --git a/src/styles/builtin/qtquickvirtualkeyboardbstylesbuiltinplugin.h b/src/styles/builtin/qtquickvirtualkeyboardbstylesbuiltinplugin.h
new file mode 100644
index 00000000..e937ee52
--- /dev/null
+++ b/src/styles/builtin/qtquickvirtualkeyboardbstylesbuiltinplugin.h
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (C) 2022 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$
+**
+****************************************************************************/
+
+#ifndef QTQUICKVIRTUALKEYBOARDSTYLESBUILTINPLUGIN_H
+#define QTQUICKVIRTUALKEYBOARDSTYLESBUILTINPLUGIN_H
+
+#include <QQmlEngineExtensionPlugin>
+
+QT_BEGIN_NAMESPACE
+
+class QtQuickVirtualKeyboardStylesBuiltinPlugin : public QQmlEngineExtensionPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
+
+public:
+ QtQuickVirtualKeyboardStylesBuiltinPlugin(QObject *parent = nullptr);
+};
+
+QT_END_NAMESPACE
+
+#endif // QTQUICKVIRTUALKEYBOARDSTYLESBUILTINPLUGIN_H
+
diff --git a/src/styles/builtin/retro/images/backspace-c5a96f.svg b/src/styles/builtin/retro/images/backspace-c5a96f.svg
new file mode 100644
index 00000000..a242531a
--- /dev/null
+++ b/src/styles/builtin/retro/images/backspace-c5a96f.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="159px" height="88px" viewBox="0 0 159 88" enable-background="new 0 0 159 88" xml:space="preserve">
+<g>
+ <rect fill="none" width="159" height="88"/>
+ <g>
+ <g>
+ <path fill="#C5A96F" d="M158.8,88H44L0,44L44,0h114.8V88z M48.7,76.7h98.8V11.3H48.7L16,44L48.7,76.7z"/>
+ </g>
+ <g>
+ <g>
+
+ <rect x="87.3" y="16.2" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 127.5895 140.8497)" fill="#C5A96F" width="11.3" height="55.7"/>
+ </g>
+ <g>
+
+ <rect x="65.1" y="38.4" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 127.5954 140.8499)" fill="#C5A96F" width="55.7" height="11.3"/>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/check-c5a96f.svg b/src/styles/builtin/retro/images/check-c5a96f.svg
new file mode 100644
index 00000000..e45b41ab
--- /dev/null
+++ b/src/styles/builtin/retro/images/check-c5a96f.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="170px" height="119px" viewBox="0 0 170 119" enable-background="new 0 0 170 119" xml:space="preserve">
+<g>
+ <polygon fill="#C5A96F" points="62.3,119 0,56.7 11.3,45.3 62.3,96.3 158.7,0 170,11.3 "/>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/enter-c5a96f.svg b/src/styles/builtin/retro/images/enter-c5a96f.svg
new file mode 100644
index 00000000..ddbd86e8
--- /dev/null
+++ b/src/styles/builtin/retro/images/enter-c5a96f.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="211px" height="80px" viewBox="0 0 211 80" enable-background="new 0 0 211 80" xml:space="preserve">
+<g>
+ <rect fill="none" width="211" height="80"/>
+ <g>
+ <rect x="9.2" y="33.8" fill="#C5A96F" width="201.8" height="12.3"/>
+ <rect x="198.7" y="10.7" fill="#C5A96F" width="12.3" height="35.3"/>
+ <polygon fill="#C5A96F" points="44.5,0 44.5,79.8 0,40.7 "/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/globe-110b05.svg b/src/styles/builtin/retro/images/globe-110b05.svg
new file mode 100644
index 00000000..591ab50f
--- /dev/null
+++ b/src/styles/builtin/retro/images/globe-110b05.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="144px" viewBox="0 0 144 144" enable-background="new 0 0 144 144" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="144"/>
+ <g>
+ <path fill="#110B05" d="M72,144c-39.5,0-71.8-32.1-72-71.6C-0.2,32.7,31.9,0.2,71.6,0h0.7c19.1,0.1,37.1,7.6,50.6,21.1
+ s21,31.5,21.1,50.5c0.1,19.2-7.3,37.4-20.8,51c-13.5,13.7-31.6,21.3-50.8,21.4C72.2,144,72.1,144,72,144z M76.3,101.3v32.3
+ c9-8.1,16-17.9,20.6-28.7C90.2,102.9,83.3,101.7,76.3,101.3z M47,104.9c3.2,7.4,7.5,14.3,12.8,20.6c2.4,2.9,5.1,5.6,7.9,8.1v-32.3
+ C60.7,101.7,53.8,102.9,47,104.9z M105.2,107.9c-3.9,9.2-9.2,17.6-15.9,25.1c10.4-2.9,19.9-8.5,27.8-16.4c0.5-0.5,1-1.1,1.6-1.6
+ C114.3,112.1,109.8,109.8,105.2,107.9z M25.5,114.9c7.8,8.5,17.9,14.8,29.3,18c-0.5-0.6-1.1-1.2-1.6-1.8
+ c-6-7.1-10.8-14.9-14.3-23.3C34.2,109.8,29.8,112.1,25.5,114.9z M108.1,99.7c5.5,2.3,10.8,5.1,15.9,8.4
+ c6.5-9.4,10.4-20.3,11.2-31.8h-22.9c-0.1,1.2-0.1,2.4-0.2,3.7C111.4,86.8,110.1,93.4,108.1,99.7z M8.8,76.3
+ C9.6,88.1,13.6,99,20,108.1c5.1-3.3,10.4-6.1,15.8-8.4c-2.4-7.5-3.7-15.4-4.1-23.4L8.8,76.3L8.8,76.3z M40.4,76.3
+ c0.3,7,1.5,13.8,3.6,20.4c7.7-2.4,15.7-3.8,23.7-4.1V76.3H40.4z M76.3,92.6c8,0.4,15.9,1.7,23.6,4.1c1.7-5.6,2.9-11.5,3.4-17.5
+ c0.1-1,0.1-2,0.2-2.9H76.3V92.6z M112.2,67.7h23c-0.8-11.5-4.6-22.4-11.2-31.8c-5.1,3.4-10.5,6.2-16.1,8.5
+ C110.4,51.9,111.8,59.7,112.2,67.7z M76.3,67.7h27.2c-0.4-7-1.6-13.8-3.7-20.4c-7.7,2.4-15.5,3.7-23.5,4.1V67.7z M40.5,67.7h27.2
+ V51.4c-7.9-0.4-15.8-1.7-23.4-4.1c-1.8,5.8-3,11.9-3.6,18.1C40.6,66.2,40.5,66.9,40.5,67.7z M8.8,67.7h23c0.1-1,0.1-2,0.2-3
+ c0.6-7,2-13.8,4-20.3c-5.5-2.3-10.9-5.1-16-8.5C13.6,45,9.6,55.9,8.8,67.7z M76.3,11.1v31.6c6.9-0.3,13.7-1.5,20.4-3.5
+ c-3.1-7.1-7.3-13.9-12.5-20C81.8,16.3,79.1,13.6,76.3,11.1z M47.3,39.2c6.7,2,13.5,3.2,20.4,3.5V11.1C58.8,19,51.9,28.6,47.3,39.2
+ z M88.4,10.8c0.8,0.9,1.6,1.8,2.4,2.8c5.9,6.9,10.6,14.6,14.1,22.7c4.7-2,9.3-4.3,13.7-7.2c-0.6-0.6-1.2-1.2-1.8-1.9
+ C108.8,19.2,99,13.6,88.4,10.8z M25.5,29.1c4.4,2.8,8.9,5.2,13.6,7.1c4-9.3,9.5-17.9,16.5-25.4C43.8,14,33.5,20.4,25.5,29.1z"/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/globe-c5a96f.svg b/src/styles/builtin/retro/images/globe-c5a96f.svg
new file mode 100644
index 00000000..68025577
--- /dev/null
+++ b/src/styles/builtin/retro/images/globe-c5a96f.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="144px" viewBox="0 0 144 144" enable-background="new 0 0 144 144" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="144"/>
+ <g>
+ <path fill="#C5A96F" d="M72,144c-39.5,0-71.8-32.1-72-71.6C-0.2,32.7,31.9,0.2,71.6,0h0.7c19.1,0.1,37.1,7.6,50.6,21.1
+ s21,31.5,21.1,50.5c0.1,19.2-7.3,37.4-20.8,51c-13.5,13.7-31.6,21.3-50.8,21.4C72.2,144,72.1,144,72,144z M76.3,101.3v32.3
+ c9-8.1,16-17.9,20.6-28.7C90.2,102.9,83.3,101.7,76.3,101.3z M47,104.9c3.2,7.4,7.5,14.3,12.8,20.6c2.4,2.9,5.1,5.6,7.9,8.1v-32.3
+ C60.7,101.7,53.8,102.9,47,104.9z M105.2,107.9c-3.9,9.2-9.2,17.6-15.9,25.1c10.4-2.9,19.9-8.5,27.8-16.4c0.5-0.5,1-1.1,1.6-1.6
+ C114.3,112.1,109.8,109.8,105.2,107.9z M25.5,114.9c7.8,8.5,17.9,14.8,29.3,18c-0.5-0.6-1.1-1.2-1.6-1.8
+ c-6-7.1-10.8-14.9-14.3-23.3C34.2,109.8,29.8,112.1,25.5,114.9z M108.1,99.7c5.5,2.3,10.8,5.1,15.9,8.4
+ c6.5-9.4,10.4-20.3,11.2-31.8h-22.9c-0.1,1.2-0.1,2.4-0.2,3.7C111.4,86.8,110.1,93.4,108.1,99.7z M8.8,76.3
+ C9.6,88.1,13.6,99,20,108.1c5.1-3.3,10.4-6.1,15.8-8.4c-2.4-7.5-3.7-15.4-4.1-23.4L8.8,76.3L8.8,76.3z M40.4,76.3
+ c0.3,7,1.5,13.8,3.6,20.4c7.7-2.4,15.7-3.8,23.7-4.1V76.3H40.4z M76.3,92.6c8,0.4,15.9,1.7,23.6,4.1c1.7-5.6,2.9-11.5,3.4-17.5
+ c0.1-1,0.1-2,0.2-2.9H76.3V92.6z M112.2,67.7h23c-0.8-11.5-4.6-22.4-11.2-31.8c-5.1,3.4-10.5,6.2-16.1,8.5
+ C110.4,51.9,111.8,59.7,112.2,67.7z M76.3,67.7h27.2c-0.4-7-1.6-13.8-3.7-20.4c-7.7,2.4-15.5,3.7-23.5,4.1V67.7z M40.5,67.7h27.2
+ V51.4c-7.9-0.4-15.8-1.7-23.4-4.1c-1.8,5.8-3,11.9-3.6,18.1C40.6,66.2,40.5,66.9,40.5,67.7z M8.8,67.7h23c0.1-1,0.1-2,0.2-3
+ c0.6-7,2-13.8,4-20.3c-5.5-2.3-10.9-5.1-16-8.5C13.6,45,9.6,55.9,8.8,67.7z M76.3,11.1v31.6c6.9-0.3,13.7-1.5,20.4-3.5
+ c-3.1-7.1-7.3-13.9-12.5-20C81.8,16.3,79.1,13.6,76.3,11.1z M47.3,39.2c6.7,2,13.5,3.2,20.4,3.5V11.1C58.8,19,51.9,28.6,47.3,39.2
+ z M88.4,10.8c0.8,0.9,1.6,1.8,2.4,2.8c5.9,6.9,10.6,14.6,14.1,22.7c4.7-2,9.3-4.3,13.7-7.2c-0.6-0.6-1.2-1.2-1.8-1.9
+ C108.8,19.2,99,13.6,88.4,10.8z M25.5,29.1c4.4,2.8,8.9,5.2,13.6,7.1c4-9.3,9.5-17.9,16.5-25.4C43.8,14,33.5,20.4,25.5,29.1z"/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/globe-fff.svg b/src/styles/builtin/retro/images/globe-fff.svg
new file mode 100644
index 00000000..f45af34a
--- /dev/null
+++ b/src/styles/builtin/retro/images/globe-fff.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="144px" viewBox="0 0 144 144" enable-background="new 0 0 144 144" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="144"/>
+ <g>
+ <path fill="#FFF" d="M72,144c-39.5,0-71.8-32.1-72-71.6C-0.2,32.7,31.9,0.2,71.6,0h0.7c19.1,0.1,37.1,7.6,50.6,21.1
+ s21,31.5,21.1,50.5c0.1,19.2-7.3,37.4-20.8,51c-13.5,13.7-31.6,21.3-50.8,21.4C72.2,144,72.1,144,72,144z M76.3,101.3v32.3
+ c9-8.1,16-17.9,20.6-28.7C90.2,102.9,83.3,101.7,76.3,101.3z M47,104.9c3.2,7.4,7.5,14.3,12.8,20.6c2.4,2.9,5.1,5.6,7.9,8.1v-32.3
+ C60.7,101.7,53.8,102.9,47,104.9z M105.2,107.9c-3.9,9.2-9.2,17.6-15.9,25.1c10.4-2.9,19.9-8.5,27.8-16.4c0.5-0.5,1-1.1,1.6-1.6
+ C114.3,112.1,109.8,109.8,105.2,107.9z M25.5,114.9c7.8,8.5,17.9,14.8,29.3,18c-0.5-0.6-1.1-1.2-1.6-1.8
+ c-6-7.1-10.8-14.9-14.3-23.3C34.2,109.8,29.8,112.1,25.5,114.9z M108.1,99.7c5.5,2.3,10.8,5.1,15.9,8.4
+ c6.5-9.4,10.4-20.3,11.2-31.8h-22.9c-0.1,1.2-0.1,2.4-0.2,3.7C111.4,86.8,110.1,93.4,108.1,99.7z M8.8,76.3
+ C9.6,88.1,13.6,99,20,108.1c5.1-3.3,10.4-6.1,15.8-8.4c-2.4-7.5-3.7-15.4-4.1-23.4L8.8,76.3L8.8,76.3z M40.4,76.3
+ c0.3,7,1.5,13.8,3.6,20.4c7.7-2.4,15.7-3.8,23.7-4.1V76.3H40.4z M76.3,92.6c8,0.4,15.9,1.7,23.6,4.1c1.7-5.6,2.9-11.5,3.4-17.5
+ c0.1-1,0.1-2,0.2-2.9H76.3V92.6z M112.2,67.7h23c-0.8-11.5-4.6-22.4-11.2-31.8c-5.1,3.4-10.5,6.2-16.1,8.5
+ C110.4,51.9,111.8,59.7,112.2,67.7z M76.3,67.7h27.2c-0.4-7-1.6-13.8-3.7-20.4c-7.7,2.4-15.5,3.7-23.5,4.1V67.7z M40.5,67.7h27.2
+ V51.4c-7.9-0.4-15.8-1.7-23.4-4.1c-1.8,5.8-3,11.9-3.6,18.1C40.6,66.2,40.5,66.9,40.5,67.7z M8.8,67.7h23c0.1-1,0.1-2,0.2-3
+ c0.6-7,2-13.8,4-20.3c-5.5-2.3-10.9-5.1-16-8.5C13.6,45,9.6,55.9,8.8,67.7z M76.3,11.1v31.6c6.9-0.3,13.7-1.5,20.4-3.5
+ c-3.1-7.1-7.3-13.9-12.5-20C81.8,16.3,79.1,13.6,76.3,11.1z M47.3,39.2c6.7,2,13.5,3.2,20.4,3.5V11.1C58.8,19,51.9,28.6,47.3,39.2
+ z M88.4,10.8c0.8,0.9,1.6,1.8,2.4,2.8c5.9,6.9,10.6,14.6,14.1,22.7c4.7-2,9.3-4.3,13.7-7.2c-0.6-0.6-1.2-1.2-1.8-1.9
+ C108.8,19.2,99,13.6,88.4,10.8z M25.5,29.1c4.4,2.8,8.9,5.2,13.6,7.1c4-9.3,9.5-17.9,16.5-25.4C43.8,14,33.5,20.4,25.5,29.1z"/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/handwriting-110b05.svg b/src/styles/builtin/retro/images/handwriting-110b05.svg
new file mode 100644
index 00000000..2093bb6d
--- /dev/null
+++ b/src/styles/builtin/retro/images/handwriting-110b05.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="156"
+ height="156"
+ viewBox="0 0 156 156"
+ enable-background="new 0 0 156 104"
+ xml:space="preserve"
+ sodipodi:docname="handwriting-110b05.svg"
+ inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"><metadata
+ id="metadata15"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs13" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1055"
+ id="namedview11"
+ showgrid="false"
+ inkscape:zoom="6.6858974"
+ inkscape:cx="78"
+ inkscape:cy="69.948226"
+ inkscape:window-x="-7"
+ inkscape:window-y="-7"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" />
+<g
+ id="g8"
+ transform="translate(0,26.023835)">
+ <rect
+ fill="none"
+ width="156"
+ height="104"
+ id="rect2"
+ x="0"
+ y="0" />
+ <g
+ id="g6">
+ <path
+ fill="#110b05"
+ d="M 37.6,103.3 C 27.5,103.3 18.7,98.3 14.5,89.7 4.4,68.7 19.9,52.3 36.2,35 37.4,33.8 38.6,32.5 39.8,31.2 45.1,25.5 45,19.7 43.3,16.4 41.5,13 37.8,11.5 33.1,12.2 16.6,14.8 11.9,38.6 11.9,38.8 L 0,36.6 C 0.3,35.3 6.4,4.3 31.2,0.3 41,-1.3 49.7,2.7 53.9,10.7 c 4.7,8.9 2.6,20.1 -5.3,28.6 -1.2,1.3 -2.4,2.6 -3.6,3.8 -16.7,17.8 -25.9,28.5 -19.6,41.4 3.3,6.8 11.1,7.6 16.9,6.3 C 51.5,88.7 62.1,79.7 62,61.3 61.8,33.2 78.2,19.5 92.2,16.4 c 14.5,-3.2 28.4,3.6 34.7,17 1.3,2.8 2.3,5.4 3.1,8.1 13.3,0.7 25.5,4.3 26,4.4 l -3.4,11.5 c -0.1,0 -9.7,-2.8 -20.6,-3.8 0.5,16.5 -8.6,28.9 -20.1,34.7 -11.9,6 -24,3.8 -28.9,-5.2 -3.1,-5.6 -1.9,-14.7 2.9,-22.5 7.9,-13 21.3,-17.4 31.5,-18.8 C 117,40.6 116.5,39.4 116,38.4 112.1,30.1 103.8,26 94.9,28 c -9.7,2.2 -21,12.1 -20.8,33.1 0.2,25.5 -15.6,38.1 -29,41.3 -2.6,0.6 -5.1,0.9 -7.5,0.9 z m 82.2,-49.6 c -14,1.5 -20.6,8.5 -23.4,12.9 -3.3,5.2 -3.4,9.8 -2.9,10.9 1.6,2.9 7.3,3 13,0.2 10.8,-5.5 13.8,-15.1 13.3,-24 z"
+ id="path4" />
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/handwriting-c5a96f.svg b/src/styles/builtin/retro/images/handwriting-c5a96f.svg
new file mode 100644
index 00000000..f23fe5e0
--- /dev/null
+++ b/src/styles/builtin/retro/images/handwriting-c5a96f.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="156"
+ height="156"
+ viewBox="0 0 156 156"
+ enable-background="new 0 0 156 104"
+ xml:space="preserve"
+ sodipodi:docname="handwriting-c5a96f.svg"
+ inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"><metadata
+ id="metadata15"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs13" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1055"
+ id="namedview11"
+ showgrid="false"
+ inkscape:zoom="6.6858974"
+ inkscape:cx="78"
+ inkscape:cy="52"
+ inkscape:window-x="-7"
+ inkscape:window-y="-7"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" />
+<g
+ id="g8"
+ transform="translate(0,26.023835)">
+ <rect
+ fill="none"
+ width="156"
+ height="104"
+ id="rect2"
+ x="0"
+ y="0" />
+ <g
+ id="g6">
+ <path
+ fill="#c5a96f"
+ d="M 37.6,103.3 C 27.5,103.3 18.7,98.3 14.5,89.7 4.4,68.7 19.9,52.3 36.2,35 37.4,33.8 38.6,32.5 39.8,31.2 45.1,25.5 45,19.7 43.3,16.4 41.5,13 37.8,11.5 33.1,12.2 16.6,14.8 11.9,38.6 11.9,38.8 L 0,36.6 C 0.3,35.3 6.4,4.3 31.2,0.3 41,-1.3 49.7,2.7 53.9,10.7 c 4.7,8.9 2.6,20.1 -5.3,28.6 -1.2,1.3 -2.4,2.6 -3.6,3.8 -16.7,17.8 -25.9,28.5 -19.6,41.4 3.3,6.8 11.1,7.6 16.9,6.3 C 51.5,88.7 62.1,79.7 62,61.3 61.8,33.2 78.2,19.5 92.2,16.4 c 14.5,-3.2 28.4,3.6 34.7,17 1.3,2.8 2.3,5.4 3.1,8.1 13.3,0.7 25.5,4.3 26,4.4 l -3.4,11.5 c -0.1,0 -9.7,-2.8 -20.6,-3.8 0.5,16.5 -8.6,28.9 -20.1,34.7 -11.9,6 -24,3.8 -28.9,-5.2 -3.1,-5.6 -1.9,-14.7 2.9,-22.5 7.9,-13 21.3,-17.4 31.5,-18.8 C 117,40.6 116.5,39.4 116,38.4 112.1,30.1 103.8,26 94.9,28 c -9.7,2.2 -21,12.1 -20.8,33.1 0.2,25.5 -15.6,38.1 -29,41.3 -2.6,0.6 -5.1,0.9 -7.5,0.9 z m 82.2,-49.6 c -14,1.5 -20.6,8.5 -23.4,12.9 -3.3,5.2 -3.4,9.8 -2.9,10.9 1.6,2.9 7.3,3 13,0.2 10.8,-5.5 13.8,-15.1 13.3,-24 z"
+ id="path4" />
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/handwriting-fff.svg b/src/styles/builtin/retro/images/handwriting-fff.svg
new file mode 100644
index 00000000..8c169421
--- /dev/null
+++ b/src/styles/builtin/retro/images/handwriting-fff.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="156"
+ height="156"
+ viewBox="0 0 156 156"
+ enable-background="new 0 0 156 104"
+ xml:space="preserve"
+ sodipodi:docname="handwriting-fff.svg"
+ inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"><metadata
+ id="metadata15"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs13" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1055"
+ id="namedview11"
+ showgrid="false"
+ inkscape:zoom="6.6858974"
+ inkscape:cx="78"
+ inkscape:cy="52"
+ inkscape:window-x="-7"
+ inkscape:window-y="-7"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" />
+<g
+ id="g8"
+ transform="translate(0,26.023835)">
+ <rect
+ fill="none"
+ width="156"
+ height="104"
+ id="rect2"
+ x="0"
+ y="0" />
+ <g
+ id="g6">
+ <path
+ fill="#ffffff"
+ d="M 37.6,103.3 C 27.5,103.3 18.7,98.3 14.5,89.7 4.4,68.7 19.9,52.3 36.2,35 37.4,33.8 38.6,32.5 39.8,31.2 45.1,25.5 45,19.7 43.3,16.4 41.5,13 37.8,11.5 33.1,12.2 16.6,14.8 11.9,38.6 11.9,38.8 L 0,36.6 C 0.3,35.3 6.4,4.3 31.2,0.3 41,-1.3 49.7,2.7 53.9,10.7 c 4.7,8.9 2.6,20.1 -5.3,28.6 -1.2,1.3 -2.4,2.6 -3.6,3.8 -16.7,17.8 -25.9,28.5 -19.6,41.4 3.3,6.8 11.1,7.6 16.9,6.3 C 51.5,88.7 62.1,79.7 62,61.3 61.8,33.2 78.2,19.5 92.2,16.4 c 14.5,-3.2 28.4,3.6 34.7,17 1.3,2.8 2.3,5.4 3.1,8.1 13.3,0.7 25.5,4.3 26,4.4 l -3.4,11.5 c -0.1,0 -9.7,-2.8 -20.6,-3.8 0.5,16.5 -8.6,28.9 -20.1,34.7 -11.9,6 -24,3.8 -28.9,-5.2 -3.1,-5.6 -1.9,-14.7 2.9,-22.5 7.9,-13 21.3,-17.4 31.5,-18.8 C 117,40.6 116.5,39.4 116,38.4 112.1,30.1 103.8,26 94.9,28 c -9.7,2.2 -21,12.1 -20.8,33.1 0.2,25.5 -15.6,38.1 -29,41.3 -2.6,0.6 -5.1,0.9 -7.5,0.9 z m 82.2,-49.6 c -14,1.5 -20.6,8.5 -23.4,12.9 -3.3,5.2 -3.4,9.8 -2.9,10.9 1.6,2.9 7.3,3 13,0.2 10.8,-5.5 13.8,-15.1 13.3,-24 z"
+ id="path4" />
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/hidekeyboard-110b05.svg b/src/styles/builtin/retro/images/hidekeyboard-110b05.svg
new file mode 100644
index 00000000..9debcac6
--- /dev/null
+++ b/src/styles/builtin/retro/images/hidekeyboard-110b05.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="127px" viewBox="0 0 144 127" enable-background="new 0 0 144 127" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="127"/>
+ <g>
+ <g>
+ <path fill="#110b05" d="M144,90.3H0V0h144V90.3z M10.9,79.4h122.2V10.9H10.9V79.4z"/>
+ </g>
+ <g>
+ <rect x="19.5" y="20.2" fill="#110b05" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="38.1" y="20.2" fill="#110b05" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="56.8" y="20.2" fill="#110b05" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="75.5" y="20.2" fill="#110b05" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="94.2" y="20.2" fill="#110b05" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="112.9" y="20.2" fill="#110b05" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="19.5" y="39.7" fill="#110b05" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="38.1" y="39.7" fill="#110b05" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="56.8" y="39.7" fill="#110b05" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="75.5" y="39.7" fill="#110b05" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="94.2" y="39.7" fill="#110b05" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="112.9" y="39.7" fill="#110b05" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="38.1" y="59.2" fill="#110b05" width="67.7" height="11.7"/>
+ </g>
+ <g>
+ <polygon fill="#110b05" points="72,115.2 62.2,108.2 45.9,108.2 72,126.9 98.1,108.2 81.8,108.2 "/>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/hidekeyboard-c5a96f.svg b/src/styles/builtin/retro/images/hidekeyboard-c5a96f.svg
new file mode 100644
index 00000000..a4019bf3
--- /dev/null
+++ b/src/styles/builtin/retro/images/hidekeyboard-c5a96f.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="127px" viewBox="0 0 144 127" enable-background="new 0 0 144 127" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="127"/>
+ <g>
+ <g>
+ <path fill="#C5A96F" d="M144,90.3H0V0h144V90.3z M10.9,79.4h122.2V10.9H10.9V79.4z"/>
+ </g>
+ <g>
+ <rect x="19.5" y="20.2" fill="#C5A96F" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="38.1" y="20.2" fill="#C5A96F" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="56.8" y="20.2" fill="#C5A96F" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="75.5" y="20.2" fill="#C5A96F" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="94.2" y="20.2" fill="#C5A96F" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="112.9" y="20.2" fill="#C5A96F" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="19.5" y="39.7" fill="#C5A96F" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="38.1" y="39.7" fill="#C5A96F" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="56.8" y="39.7" fill="#C5A96F" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="75.5" y="39.7" fill="#C5A96F" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="94.2" y="39.7" fill="#C5A96F" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="112.9" y="39.7" fill="#C5A96F" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="38.1" y="59.2" fill="#C5A96F" width="67.7" height="11.7"/>
+ </g>
+ <g>
+ <polygon fill="#C5A96F" points="72,115.2 62.2,108.2 45.9,108.2 72,126.9 98.1,108.2 81.8,108.2 "/>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/hidekeyboard-fff.svg b/src/styles/builtin/retro/images/hidekeyboard-fff.svg
new file mode 100644
index 00000000..eb81f0b9
--- /dev/null
+++ b/src/styles/builtin/retro/images/hidekeyboard-fff.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="127px" viewBox="0 0 144 127" enable-background="new 0 0 144 127" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="127"/>
+ <g>
+ <g>
+ <path fill="#FFF" d="M144,90.3H0V0h144V90.3z M10.9,79.4h122.2V10.9H10.9V79.4z"/>
+ </g>
+ <g>
+ <rect x="19.5" y="20.2" fill="#FFF" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="38.1" y="20.2" fill="#FFF" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="56.8" y="20.2" fill="#FFF" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="75.5" y="20.2" fill="#FFF" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="94.2" y="20.2" fill="#FFF" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="112.9" y="20.2" fill="#FFF" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="19.5" y="39.7" fill="#FFF" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="38.1" y="39.7" fill="#FFF" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="56.8" y="39.7" fill="#FFF" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="75.5" y="39.7" fill="#FFF" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="94.2" y="39.7" fill="#FFF" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="112.9" y="39.7" fill="#FFF" width="11.7" height="11.7"/>
+ </g>
+ <g>
+ <rect x="38.1" y="59.2" fill="#FFF" width="67.7" height="11.7"/>
+ </g>
+ <g>
+ <polygon fill="#FFF" points="72,115.2 62.2,108.2 45.9,108.2 72,126.9 98.1,108.2 81.8,108.2 "/>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/key154px_black.png b/src/styles/builtin/retro/images/key154px_black.png
new file mode 100644
index 00000000..d9bf8e72
--- /dev/null
+++ b/src/styles/builtin/retro/images/key154px_black.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key154px_black.svg b/src/styles/builtin/retro/images/key154px_black.svg
new file mode 100644
index 00000000..635dd9a3
--- /dev/null
+++ b/src/styles/builtin/retro/images/key154px_black.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 154 154" enable-background="new 0 0 154 154" xml:space="preserve">
+<g>
+ <radialGradient id="SVGID_1_" cx="77" cy="77" r="73" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#0C0C0B"/>
+ <stop offset="1" style="stop-color:#2C2C2C"/>
+ </radialGradient>
+ <path fill="url(#SVGID_1_)" d="M77,150c-40.3,0-73-32.7-73-73C4,36.7,36.7,4,77,4c40.3,0,73,32.7,73,73C150,117.3,117.3,150,77,150
+ z"/>
+ <path fill="#C2B49B" d="M77,8c38,0,69,31,69,69s-31,69-69,69S8,115,8,77S39,8,77,8 M77,0C34.5,0,0,34.5,0,77s34.5,77,77,77
+ s77-34.5,77-77S119.5,0,77,0L77,0z"/>
+</g>
+<g opacity="8.000000e-02">
+ <path d="M77,16c33.6,0,61,27.4,61,61s-27.4,61-61,61s-61-27.4-61-61S43.4,16,77,16 M77,8C38.9,8,8,38.9,8,77s30.9,69,69,69
+ s69-30.9,69-69S115.1,8,77,8L77,8z"/>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/key154px_black_long.png b/src/styles/builtin/retro/images/key154px_black_long.png
new file mode 100644
index 00000000..492c718a
--- /dev/null
+++ b/src/styles/builtin/retro/images/key154px_black_long.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key154px_capslock.png b/src/styles/builtin/retro/images/key154px_capslock.png
new file mode 100644
index 00000000..7cb0bd4a
--- /dev/null
+++ b/src/styles/builtin/retro/images/key154px_capslock.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key154px_capslock_long.png b/src/styles/builtin/retro/images/key154px_capslock_long.png
new file mode 100644
index 00000000..429d4bb5
--- /dev/null
+++ b/src/styles/builtin/retro/images/key154px_capslock_long.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key154px_colorA.png b/src/styles/builtin/retro/images/key154px_colorA.png
new file mode 100644
index 00000000..778384cd
--- /dev/null
+++ b/src/styles/builtin/retro/images/key154px_colorA.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key154px_colorA.svg b/src/styles/builtin/retro/images/key154px_colorA.svg
new file mode 100644
index 00000000..13af8a63
--- /dev/null
+++ b/src/styles/builtin/retro/images/key154px_colorA.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 154 154" enable-background="new 0 0 154 154" xml:space="preserve">
+<g>
+ <radialGradient id="SVGID_1_" cx="77" cy="77" r="73" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#CFBE90"/>
+ <stop offset="1" style="stop-color:#B2945A"/>
+ </radialGradient>
+ <path fill="url(#SVGID_1_)" d="M77,150c-40.3,0-73-32.7-73-73C4,36.7,36.7,4,77,4c40.3,0,73,32.7,73,73C150,117.3,117.3,150,77,150
+ z"/>
+ <path fill="#C2B49B" d="M77,8c38,0,69,31,69,69s-31,69-69,69S8,115,8,77S39,8,77,8 M77,0C34.5,0,0,34.5,0,77s34.5,77,77,77
+ s77-34.5,77-77S119.5,0,77,0L77,0z"/>
+</g>
+<g opacity="8.000000e-02">
+ <path d="M77,16c33.6,0,61,27.4,61,61s-27.4,61-61,61s-61-27.4-61-61S43.4,16,77,16 M77,8C38.9,8,8,38.9,8,77s30.9,69,69,69
+ s69-30.9,69-69S115.1,8,77,8L77,8z"/>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/key154px_colorA_long.png b/src/styles/builtin/retro/images/key154px_colorA_long.png
new file mode 100644
index 00000000..e1b6e5b8
--- /dev/null
+++ b/src/styles/builtin/retro/images/key154px_colorA_long.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key154px_colorB.png b/src/styles/builtin/retro/images/key154px_colorB.png
new file mode 100644
index 00000000..cef9fd29
--- /dev/null
+++ b/src/styles/builtin/retro/images/key154px_colorB.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key154px_shiftcase.png b/src/styles/builtin/retro/images/key154px_shiftcase.png
new file mode 100644
index 00000000..58bf8282
--- /dev/null
+++ b/src/styles/builtin/retro/images/key154px_shiftcase.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key154px_shiftcase_long.png b/src/styles/builtin/retro/images/key154px_shiftcase_long.png
new file mode 100644
index 00000000..bfcba5fd
--- /dev/null
+++ b/src/styles/builtin/retro/images/key154px_shiftcase_long.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key156px_black_long.png b/src/styles/builtin/retro/images/key156px_black_long.png
new file mode 100644
index 00000000..a22109bd
--- /dev/null
+++ b/src/styles/builtin/retro/images/key156px_black_long.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key156px_black_medium_long.png b/src/styles/builtin/retro/images/key156px_black_medium_long.png
new file mode 100644
index 00000000..8c92d3b1
--- /dev/null
+++ b/src/styles/builtin/retro/images/key156px_black_medium_long.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key156px_colorA.png b/src/styles/builtin/retro/images/key156px_colorA.png
new file mode 100644
index 00000000..6da57d60
--- /dev/null
+++ b/src/styles/builtin/retro/images/key156px_colorA.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key156px_colorB.png b/src/styles/builtin/retro/images/key156px_colorB.png
new file mode 100644
index 00000000..af0912e3
--- /dev/null
+++ b/src/styles/builtin/retro/images/key156px_colorB.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key160px_black.png b/src/styles/builtin/retro/images/key160px_black.png
new file mode 100644
index 00000000..565c4bf7
--- /dev/null
+++ b/src/styles/builtin/retro/images/key160px_black.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key160px_colorA.png b/src/styles/builtin/retro/images/key160px_colorA.png
new file mode 100644
index 00000000..e2125cf8
--- /dev/null
+++ b/src/styles/builtin/retro/images/key160px_colorA.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key160px_colorB.png b/src/styles/builtin/retro/images/key160px_colorB.png
new file mode 100644
index 00000000..9b543b05
--- /dev/null
+++ b/src/styles/builtin/retro/images/key160px_colorB.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/key_preview.png b/src/styles/builtin/retro/images/key_preview.png
new file mode 100644
index 00000000..3e9e9557
--- /dev/null
+++ b/src/styles/builtin/retro/images/key_preview.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/search-c5a96f.svg b/src/styles/builtin/retro/images/search-c5a96f.svg
new file mode 100644
index 00000000..a1f7c903
--- /dev/null
+++ b/src/styles/builtin/retro/images/search-c5a96f.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="148px" height="148px" viewBox="0 0 148 148" enable-background="new 0 0 148 148" xml:space="preserve">
+<g>
+ <rect fill="none" width="148" height="148"/>
+ <g>
+ <path fill="#C5A96F" d="M146.8,132.7c1.6,1.6,1.6,4.1,0,5.7l-8.5,8.5c-1.6,1.6-4.1,1.6-5.7,0l-44.6-44.6c-1.6-1.6-1.6-4.1,0-5.7
+ l8.5-8.5c1.6-1.6,4.1-1.6,5.7,0L146.8,132.7z"/>
+ <path fill="#C5A96F" d="M58,12c25.4,0,46,20.6,46,46s-20.6,46-46,46c-25.4,0-46-20.6-46-46S32.6,12,58,12 M58,0C26,0,0,26,0,58
+ s26,58,58,58c32,0,58-26,58-58S90,0,58,0L58,0z"/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/selectionhandle-bottom.svg b/src/styles/builtin/retro/images/selectionhandle-bottom.svg
new file mode 100644
index 00000000..1a45a736
--- /dev/null
+++ b/src/styles/builtin/retro/images/selectionhandle-bottom.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="54px" height="94px" viewBox="0 0 54 94" enable-background="new 0 0 54 94" xml:space="preserve">
+<rect x="24" y="0" opacity="0.85" fill="#37260B" width="6" height="55"/>
+<path opacity="0.85" fill="#37260B" d="M54,67c0,14.912-12.088,27-27,27S0,81.912,0,67c0-19.758,27-30,27-30S54,47.25,54,67z"/>
+<rect x="24" y="0" fill="#B57C47" width="6" height="55"/>
+<path fill="#B57C47" d="M54,63c0,14.912-12.088,27-27,27S0,77.912,0,63c0-19.758,27-30,27-30S54,43.25,54,63z"/>
+</svg>
diff --git a/src/styles/builtin/retro/images/shift-c5a96f.svg b/src/styles/builtin/retro/images/shift-c5a96f.svg
new file mode 100644
index 00000000..3da185d2
--- /dev/null
+++ b/src/styles/builtin/retro/images/shift-c5a96f.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="134px" viewBox="0 0 144 134" enable-background="new 0 0 144 134" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="134"/>
+ <g>
+ <path fill="#C5A96F" d="M103.6,134H40.2V77.5H0L71.9,0l71.9,77.5h-40.2V134L103.6,134z M51.7,122.5h40.5V66.1h25.4L71.9,16.8
+ L26.2,66.1h25.4L51.7,122.5L51.7,122.5z"/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/shift-cd8865.svg b/src/styles/builtin/retro/images/shift-cd8865.svg
new file mode 100644
index 00000000..09eba7cd
--- /dev/null
+++ b/src/styles/builtin/retro/images/shift-cd8865.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="134px" viewBox="0 0 144 134" enable-background="new 0 0 144 134" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="134"/>
+ <g>
+ <path fill="#CD8865" d="M103.6,134H40.2V77.5H0L71.9,0l71.9,77.5h-40.2V134L103.6,134z M51.7,122.5h40.5V66.1h25.4L71.9,16.8
+ L26.2,66.1h25.4L51.7,122.5L51.7,122.5z"/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/shift-dc4f28.svg b/src/styles/builtin/retro/images/shift-dc4f28.svg
new file mode 100644
index 00000000..d1a5d5ee
--- /dev/null
+++ b/src/styles/builtin/retro/images/shift-dc4f28.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="144px" height="134px" viewBox="0 0 144 134" enable-background="new 0 0 144 134" xml:space="preserve">
+<g>
+ <rect fill="none" width="144" height="134"/>
+ <g>
+ <path fill="#DC4F28" d="M103.6,134H40.2V77.5H0L71.9,0l71.9,77.5h-40.2L103.6,134L103.6,134z M51.7,122.5h40.5V66.1h25.4
+ L71.9,16.8L26.2,66.1h25.4L51.7,122.5L51.7,122.5z"/>
+ </g>
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/textmode-110b05.svg b/src/styles/builtin/retro/images/textmode-110b05.svg
new file mode 100644
index 00000000..c5bfd98d
--- /dev/null
+++ b/src/styles/builtin/retro/images/textmode-110b05.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="124"
+ height="124"
+ viewBox="0 0 124 124"
+ enable-background="new 0 0 124 96"
+ xml:space="preserve"
+ sodipodi:docname="textmode-110b05.svg"
+ inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"><metadata
+ id="metadata25"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs23" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1055"
+ id="namedview21"
+ showgrid="false"
+ inkscape:zoom="8.4112903"
+ inkscape:cx="62"
+ inkscape:cy="48"
+ inkscape:window-x="-7"
+ inkscape:window-y="-7"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" />
+<g
+ id="g18"
+ transform="translate(-0.05,14)">
+ <g
+ id="g14">
+ <g
+ id="g6">
+ <path
+ fill="#110b05"
+ d="M 55.4,70.8 46.9,49 H 19.4 L 11,70.8 H 2.9 L 30,2 h 6.7 l 27,68.8 z m -11,-29 -8,-21.2 c -1,-2.7 -2.1,-6 -3.2,-9.9 -0.7,3 -1.7,6.3 -3,9.9 l -8.1,21.2 z"
+ id="path2" />
+ <path
+ fill="#110b05"
+ d="M 66.6,72.8 H 54.1 L 45.5,51 H 20.8 L 12.4,72.8 H 0 L 28.7,0 h 9.4 z m -9.8,-4 h 4 L 35.4,4 h -1.9 l 1.7,6.2 c 1.1,3.8 2.1,7.1 3.1,9.7 l 9,24 h -28 L 28.4,20 c 1.2,-3.5 2.2,-6.7 2.9,-9.6 L 32.8,4 H 31.4 L 5.9,68.8 H 9.7 L 18.1,47 h 30.2 z m -31.7,-29 h 16.4 l -7,-18.5 c -0.4,-1.1 -0.8,-2.2 -1.2,-3.4 -0.4,1.1 -0.7,2.2 -1.2,3.4 z"
+ id="path4" />
+ </g>
+ <g
+ id="g12">
+ <path
+ fill="#110b05"
+ d="m 116.2,70.8 -1.5,-7.3 h -0.4 c -2.6,3.2 -5.1,5.4 -7.7,6.5 -2.6,1.1 -5.7,1.7 -9.5,1.7 -5.1,0 -9.1,-1.3 -12,-3.9 -2.9,-2.6 -4.3,-6.4 -4.3,-11.2 0,-10.4 8.3,-15.8 24.9,-16.3 l 8.7,-0.3 v -3.2 c 0,-4 -0.9,-7 -2.6,-8.9 C 110.1,26 107.3,25 103.5,25 99.2,25 94.4,26.3 89,28.9 l -2.4,-6 c 2.5,-1.4 5.3,-2.5 8.3,-3.2 3,-0.7 6,-1.2 9.1,-1.2 6.1,0 10.7,1.4 13.6,4.1 2.9,2.7 4.4,7.1 4.4,13.1 V 70.8 Z M 98.7,65.3 c 4.8,0 8.6,-1.3 11.4,-4 2.8,-2.7 4.1,-6.4 4.1,-11.2 v -4.6 l -7.8,0.3 C 100.2,46 95.8,47 93,48.7 c -2.8,1.7 -4,4.4 -4,8 0,2.8 0.9,5 2.6,6.4 1.7,1.4 4,2.2 7.1,2.2 z"
+ id="path8" />
+ <path
+ fill="#110b05"
+ d="m 97.1,73.8 c -5.6,0 -10.1,-1.5 -13.3,-4.5 -3.3,-3 -5,-7.3 -5,-12.7 0,-11.6 9,-17.8 26.8,-18.3 l 6.8,-0.2 v -1.3 c 0,-3.5 -0.7,-6.1 -2.1,-7.6 -1.3,-1.5 -3.6,-2.2 -6.8,-2.2 -4,0 -8.6,1.3 -13.7,3.7 l -1.9,0.9 -3.9,-9.5 1.6,-0.8 c 2.7,-1.4 5.6,-2.6 8.8,-3.4 3.2,-0.8 6.4,-1.2 9.6,-1.2 6.6,0 11.7,1.6 15,4.6 3.4,3.1 5.1,8 5.1,14.5 v 37.1 h -9.4 l -1.1,-5.3 c -2,2 -4,3.5 -6,4.4 -2.9,1.1 -6.4,1.8 -10.5,1.8 z M 103.5,23 c 4.4,0 7.7,1.2 9.8,3.5 2.1,2.3 3.1,5.7 3.1,10.3 V 42 l -10.7,0.3 c -23,0.7 -23,10.9 -23,14.3 0,4.3 1.2,7.5 3.7,9.7 2.5,2.3 6.1,3.4 10.6,3.4 3.5,0 6.4,-0.5 8.7,-1.5 2.2,-1 4.6,-3 6.9,-6 l 0.6,-0.8 h 2.6 l 0.7,1.6 1.2,5.7 h 2.1 V 35.8 c 0,-5.4 -1.3,-9.3 -3.8,-11.6 -2.6,-2.4 -6.7,-3.5 -12.3,-3.5 -2.8,0 -5.7,0.4 -8.6,1.1 -2.2,0.6 -4.3,1.3 -6.3,2.3 l 0.9,2.3 C 94.9,24.1 99.4,23 103.5,23 Z m -4.8,44.3 c -3.5,0 -6.4,-0.9 -8.5,-2.7 C 88,62.8 87,60.1 87,56.7 c 0,-4.3 1.7,-7.6 5,-9.6 3.1,-1.9 7.8,-3 14.4,-3.2 l 9.9,-0.4 v 6.7 c 0,5.3 -1.6,9.6 -4.8,12.6 -3.2,3 -7.5,4.5 -12.8,4.5 z m 13.5,-19.7 -5.7,0.2 c -5.8,0.2 -10,1.1 -12.4,2.6 -2.1,1.4 -3.1,3.4 -3.1,6.3 0,2.2 0.6,3.8 1.9,4.9 1.3,1.1 3.3,1.7 5.8,1.7 4.3,0 7.6,-1.1 10,-3.4 2.4,-2.3 3.5,-5.5 3.5,-9.7 z"
+ id="path10" />
+ </g>
+ </g>
+ <rect
+ y="88"
+ fill="#110b05"
+ width="124"
+ height="8"
+ id="rect16"
+ x="0" />
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/textmode-c5a96f.svg b/src/styles/builtin/retro/images/textmode-c5a96f.svg
new file mode 100644
index 00000000..e6340558
--- /dev/null
+++ b/src/styles/builtin/retro/images/textmode-c5a96f.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="124"
+ height="124"
+ viewBox="0 0 124 124"
+ enable-background="new 0 0 124 96"
+ xml:space="preserve"
+ sodipodi:docname="textmode-c5a96f.svg"
+ inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"><metadata
+ id="metadata25"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs23" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1055"
+ id="namedview21"
+ showgrid="false"
+ inkscape:zoom="8.4112903"
+ inkscape:cx="62"
+ inkscape:cy="48"
+ inkscape:window-x="-7"
+ inkscape:window-y="-7"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" />
+<g
+ id="g18"
+ transform="translate(-0.05,14)">
+ <g
+ id="g14">
+ <g
+ id="g6">
+ <path
+ fill="#c5a96f"
+ d="M 55.4,70.8 46.9,49 H 19.4 L 11,70.8 H 2.9 L 30,2 h 6.7 l 27,68.8 z m -11,-29 -8,-21.2 c -1,-2.7 -2.1,-6 -3.2,-9.9 -0.7,3 -1.7,6.3 -3,9.9 l -8.1,21.2 z"
+ id="path2" />
+ <path
+ fill="#c5a96f"
+ d="M 66.6,72.8 H 54.1 L 45.5,51 H 20.8 L 12.4,72.8 H 0 L 28.7,0 h 9.4 z m -9.8,-4 h 4 L 35.4,4 h -1.9 l 1.7,6.2 c 1.1,3.8 2.1,7.1 3.1,9.7 l 9,24 h -28 L 28.4,20 c 1.2,-3.5 2.2,-6.7 2.9,-9.6 L 32.8,4 H 31.4 L 5.9,68.8 H 9.7 L 18.1,47 h 30.2 z m -31.7,-29 h 16.4 l -7,-18.5 c -0.4,-1.1 -0.8,-2.2 -1.2,-3.4 -0.4,1.1 -0.7,2.2 -1.2,3.4 z"
+ id="path4" />
+ </g>
+ <g
+ id="g12">
+ <path
+ fill="#c5a96f"
+ d="m 116.2,70.8 -1.5,-7.3 h -0.4 c -2.6,3.2 -5.1,5.4 -7.7,6.5 -2.6,1.1 -5.7,1.7 -9.5,1.7 -5.1,0 -9.1,-1.3 -12,-3.9 -2.9,-2.6 -4.3,-6.4 -4.3,-11.2 0,-10.4 8.3,-15.8 24.9,-16.3 l 8.7,-0.3 v -3.2 c 0,-4 -0.9,-7 -2.6,-8.9 C 110.1,26 107.3,25 103.5,25 99.2,25 94.4,26.3 89,28.9 l -2.4,-6 c 2.5,-1.4 5.3,-2.5 8.3,-3.2 3,-0.7 6,-1.2 9.1,-1.2 6.1,0 10.7,1.4 13.6,4.1 2.9,2.7 4.4,7.1 4.4,13.1 V 70.8 Z M 98.7,65.3 c 4.8,0 8.6,-1.3 11.4,-4 2.8,-2.7 4.1,-6.4 4.1,-11.2 v -4.6 l -7.8,0.3 C 100.2,46 95.8,47 93,48.7 c -2.8,1.7 -4,4.4 -4,8 0,2.8 0.9,5 2.6,6.4 1.7,1.4 4,2.2 7.1,2.2 z"
+ id="path8" />
+ <path
+ fill="#c5a96f"
+ d="m 97.1,73.8 c -5.6,0 -10.1,-1.5 -13.3,-4.5 -3.3,-3 -5,-7.3 -5,-12.7 0,-11.6 9,-17.8 26.8,-18.3 l 6.8,-0.2 v -1.3 c 0,-3.5 -0.7,-6.1 -2.1,-7.6 -1.3,-1.5 -3.6,-2.2 -6.8,-2.2 -4,0 -8.6,1.3 -13.7,3.7 l -1.9,0.9 -3.9,-9.5 1.6,-0.8 c 2.7,-1.4 5.6,-2.6 8.8,-3.4 3.2,-0.8 6.4,-1.2 9.6,-1.2 6.6,0 11.7,1.6 15,4.6 3.4,3.1 5.1,8 5.1,14.5 v 37.1 h -9.4 l -1.1,-5.3 c -2,2 -4,3.5 -6,4.4 -2.9,1.1 -6.4,1.8 -10.5,1.8 z M 103.5,23 c 4.4,0 7.7,1.2 9.8,3.5 2.1,2.3 3.1,5.7 3.1,10.3 V 42 l -10.7,0.3 c -23,0.7 -23,10.9 -23,14.3 0,4.3 1.2,7.5 3.7,9.7 2.5,2.3 6.1,3.4 10.6,3.4 3.5,0 6.4,-0.5 8.7,-1.5 2.2,-1 4.6,-3 6.9,-6 l 0.6,-0.8 h 2.6 l 0.7,1.6 1.2,5.7 h 2.1 V 35.8 c 0,-5.4 -1.3,-9.3 -3.8,-11.6 -2.6,-2.4 -6.7,-3.5 -12.3,-3.5 -2.8,0 -5.7,0.4 -8.6,1.1 -2.2,0.6 -4.3,1.3 -6.3,2.3 l 0.9,2.3 C 94.9,24.1 99.4,23 103.5,23 Z m -4.8,44.3 c -3.5,0 -6.4,-0.9 -8.5,-2.7 C 88,62.8 87,60.1 87,56.7 c 0,-4.3 1.7,-7.6 5,-9.6 3.1,-1.9 7.8,-3 14.4,-3.2 l 9.9,-0.4 v 6.7 c 0,5.3 -1.6,9.6 -4.8,12.6 -3.2,3 -7.5,4.5 -12.8,4.5 z m 13.5,-19.7 -5.7,0.2 c -5.8,0.2 -10,1.1 -12.4,2.6 -2.1,1.4 -3.1,3.4 -3.1,6.3 0,2.2 0.6,3.8 1.9,4.9 1.3,1.1 3.3,1.7 5.8,1.7 4.3,0 7.6,-1.1 10,-3.4 2.4,-2.3 3.5,-5.5 3.5,-9.7 z"
+ id="path10" />
+ </g>
+ </g>
+ <rect
+ y="88"
+ fill="#c5a96f"
+ width="124"
+ height="8"
+ id="rect16"
+ x="0" />
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/textmode-fff.svg b/src/styles/builtin/retro/images/textmode-fff.svg
new file mode 100644
index 00000000..e14961dc
--- /dev/null
+++ b/src/styles/builtin/retro/images/textmode-fff.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="124"
+ height="124"
+ viewBox="0 0 124 124"
+ enable-background="new 0 0 124 96"
+ xml:space="preserve"
+ sodipodi:docname="textmode-fff.svg"
+ inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"><metadata
+ id="metadata25"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs23" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1055"
+ id="namedview21"
+ showgrid="false"
+ inkscape:zoom="8.4112903"
+ inkscape:cx="62"
+ inkscape:cy="48"
+ inkscape:window-x="-7"
+ inkscape:window-y="-7"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" />
+<g
+ id="g18"
+ transform="translate(-0.05,14)">
+ <g
+ id="g14">
+ <g
+ id="g6">
+ <path
+ fill="#ffffff"
+ d="M 55.4,70.8 46.9,49 H 19.4 L 11,70.8 H 2.9 L 30,2 h 6.7 l 27,68.8 z m -11,-29 -8,-21.2 c -1,-2.7 -2.1,-6 -3.2,-9.9 -0.7,3 -1.7,6.3 -3,9.9 l -8.1,21.2 z"
+ id="path2" />
+ <path
+ fill="#ffffff"
+ d="M 66.6,72.8 H 54.1 L 45.5,51 H 20.8 L 12.4,72.8 H 0 L 28.7,0 h 9.4 z m -9.8,-4 h 4 L 35.4,4 h -1.9 l 1.7,6.2 c 1.1,3.8 2.1,7.1 3.1,9.7 l 9,24 h -28 L 28.4,20 c 1.2,-3.5 2.2,-6.7 2.9,-9.6 L 32.8,4 H 31.4 L 5.9,68.8 H 9.7 L 18.1,47 h 30.2 z m -31.7,-29 h 16.4 l -7,-18.5 c -0.4,-1.1 -0.8,-2.2 -1.2,-3.4 -0.4,1.1 -0.7,2.2 -1.2,3.4 z"
+ id="path4" />
+ </g>
+ <g
+ id="g12">
+ <path
+ fill="#ffffff"
+ d="m 116.2,70.8 -1.5,-7.3 h -0.4 c -2.6,3.2 -5.1,5.4 -7.7,6.5 -2.6,1.1 -5.7,1.7 -9.5,1.7 -5.1,0 -9.1,-1.3 -12,-3.9 -2.9,-2.6 -4.3,-6.4 -4.3,-11.2 0,-10.4 8.3,-15.8 24.9,-16.3 l 8.7,-0.3 v -3.2 c 0,-4 -0.9,-7 -2.6,-8.9 C 110.1,26 107.3,25 103.5,25 99.2,25 94.4,26.3 89,28.9 l -2.4,-6 c 2.5,-1.4 5.3,-2.5 8.3,-3.2 3,-0.7 6,-1.2 9.1,-1.2 6.1,0 10.7,1.4 13.6,4.1 2.9,2.7 4.4,7.1 4.4,13.1 V 70.8 Z M 98.7,65.3 c 4.8,0 8.6,-1.3 11.4,-4 2.8,-2.7 4.1,-6.4 4.1,-11.2 v -4.6 l -7.8,0.3 C 100.2,46 95.8,47 93,48.7 c -2.8,1.7 -4,4.4 -4,8 0,2.8 0.9,5 2.6,6.4 1.7,1.4 4,2.2 7.1,2.2 z"
+ id="path8" />
+ <path
+ fill="#ffffff"
+ d="m 97.1,73.8 c -5.6,0 -10.1,-1.5 -13.3,-4.5 -3.3,-3 -5,-7.3 -5,-12.7 0,-11.6 9,-17.8 26.8,-18.3 l 6.8,-0.2 v -1.3 c 0,-3.5 -0.7,-6.1 -2.1,-7.6 -1.3,-1.5 -3.6,-2.2 -6.8,-2.2 -4,0 -8.6,1.3 -13.7,3.7 l -1.9,0.9 -3.9,-9.5 1.6,-0.8 c 2.7,-1.4 5.6,-2.6 8.8,-3.4 3.2,-0.8 6.4,-1.2 9.6,-1.2 6.6,0 11.7,1.6 15,4.6 3.4,3.1 5.1,8 5.1,14.5 v 37.1 h -9.4 l -1.1,-5.3 c -2,2 -4,3.5 -6,4.4 -2.9,1.1 -6.4,1.8 -10.5,1.8 z M 103.5,23 c 4.4,0 7.7,1.2 9.8,3.5 2.1,2.3 3.1,5.7 3.1,10.3 V 42 l -10.7,0.3 c -23,0.7 -23,10.9 -23,14.3 0,4.3 1.2,7.5 3.7,9.7 2.5,2.3 6.1,3.4 10.6,3.4 3.5,0 6.4,-0.5 8.7,-1.5 2.2,-1 4.6,-3 6.9,-6 l 0.6,-0.8 h 2.6 l 0.7,1.6 1.2,5.7 h 2.1 V 35.8 c 0,-5.4 -1.3,-9.3 -3.8,-11.6 -2.6,-2.4 -6.7,-3.5 -12.3,-3.5 -2.8,0 -5.7,0.4 -8.6,1.1 -2.2,0.6 -4.3,1.3 -6.3,2.3 l 0.9,2.3 C 94.9,24.1 99.4,23 103.5,23 Z m -4.8,44.3 c -3.5,0 -6.4,-0.9 -8.5,-2.7 C 88,62.8 87,60.1 87,56.7 c 0,-4.3 1.7,-7.6 5,-9.6 3.1,-1.9 7.8,-3 14.4,-3.2 l 9.9,-0.4 v 6.7 c 0,5.3 -1.6,9.6 -4.8,12.6 -3.2,3 -7.5,4.5 -12.8,4.5 z m 13.5,-19.7 -5.7,0.2 c -5.8,0.2 -10,1.1 -12.4,2.6 -2.1,1.4 -3.1,3.4 -3.1,6.3 0,2.2 0.6,3.8 1.9,4.9 1.3,1.1 3.3,1.7 5.8,1.7 4.3,0 7.6,-1.1 10,-3.4 2.4,-2.3 3.5,-5.5 3.5,-9.7 z"
+ id="path10" />
+ </g>
+ </g>
+ <rect
+ y="88"
+ fill="#ffffff"
+ width="124"
+ height="8"
+ id="rect16"
+ x="0" />
+</g>
+</svg>
diff --git a/src/styles/builtin/retro/images/triangle_black.png b/src/styles/builtin/retro/images/triangle_black.png
new file mode 100644
index 00000000..a45e733b
--- /dev/null
+++ b/src/styles/builtin/retro/images/triangle_black.png
Binary files differ
diff --git a/src/styles/builtin/retro/images/triangle_highlight.png b/src/styles/builtin/retro/images/triangle_highlight.png
new file mode 100644
index 00000000..34853263
--- /dev/null
+++ b/src/styles/builtin/retro/images/triangle_highlight.png
Binary files differ
diff --git a/src/styles/builtin/retro/style.qml b/src/styles/builtin/retro/style.qml
new file mode 100644
index 00000000..fc610163
--- /dev/null
+++ b/src/styles/builtin/retro/style.qml
@@ -0,0 +1,1274 @@
+/****************************************************************************
+**
+** 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.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Styles
+
+KeyboardStyle {
+ id: currentStyle
+ readonly property bool compactSelectionList: [InputEngine.InputMode.Pinyin, InputEngine.InputMode.Cangjie, InputEngine.InputMode.Zhuyin].indexOf(InputContext.inputEngine.inputMode) !== -1
+ readonly property string fontFamily: "Courier"
+ readonly property real keyBackgroundMargin: Math.round(9 * scaleHint)
+ readonly property real keyContentMargin: Math.round(30 * scaleHint)
+ readonly property real keyIconScale: scaleHint * 0.6
+ readonly property string resourcePath: "qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/Builtin/retro/"
+ readonly property string resourcePrefix: "qrc:/" + resourcePath
+
+ readonly property string inputLocale: InputContext.locale
+ property real inputLocaleIndicatorOpacity: 1.0
+ property Timer inputLocaleIndicatorHighlightTimer: Timer {
+ interval: 1000
+ onTriggered: inputLocaleIndicatorOpacity = 0.8
+ }
+ onInputLocaleChanged: {
+ inputLocaleIndicatorOpacity = 1.0
+ inputLocaleIndicatorHighlightTimer.restart()
+ }
+
+ keyboardDesignWidth: 2560
+ keyboardDesignHeight: 800
+ keyboardRelativeLeftMargin: 114 / keyboardDesignWidth
+ keyboardRelativeRightMargin: 114 / keyboardDesignWidth
+ keyboardRelativeTopMargin: 9 / keyboardDesignHeight
+ keyboardRelativeBottomMargin: 88 / keyboardDesignHeight
+
+ keyboardBackground: Rectangle {
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#272727" }
+ GradientStop { position: 1.0; color: "black" }
+ }
+ }
+
+ keyPanel: KeyPanel {
+ id: keyPanel
+ Image {
+ id: keyBackground
+ source: resourcePrefix + "images/key154px_colorA.png"
+ fillMode: Image.PreserveAspectFit
+ anchors.fill: keyPanel
+ anchors.margins: keyBackgroundMargin
+ states: [
+ State {
+ name: "key154px_colorB"
+ when: ['q', 'r', 'y', 'p', 's', 'd', 'j', 'l', 'v', 'b', '\'',
+ '1', '4', '6', '0', '#', '%', '+', ')', '>',
+ '~', '·', '÷', '}', '€', '£', '§', ']', '«', '»'].indexOf(control.displayText.toLowerCase()) >= 0
+ PropertyChanges {
+ target: keyBackground
+ source: resourcePrefix + "images/key154px_colorB.png"
+ }
+ },
+ State {
+ name: "key154px_black"
+ when: control.highlighted
+ PropertyChanges {
+ target: keyBackground
+ source: resourcePrefix + "images/key154px_black.png"
+ }
+ }
+ ]
+ }
+ Text {
+ id: keyText
+ text: control.displayText
+ color: "#110b05"
+ anchors.fill: keyPanel
+ anchors.margins: keyContentMargin
+ fontSizeMode: Text.Fit
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ font {
+ family: fontFamily
+ weight: Font.Bold
+ pixelSize: 82 * scaleHint
+ capitalization: control.uppercased ? Font.AllUppercase : Font.MixedCase
+ }
+ states: [
+ State {
+ name: "fontB"
+ when: control.highlighted
+ PropertyChanges {
+ target: keyText
+ color: "#c5a96f"
+ font.pixelSize: 74 * scaleHint
+ font.letterSpacing: -5 * scaleHint
+ }
+ }
+ ]
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: keyBackground
+ opacity: 0.70
+ }
+ PropertyChanges {
+ target: keyText
+ opacity: 0.75
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: keyBackground
+ opacity: 0.30
+ }
+ PropertyChanges {
+ target: keyText
+ opacity: 0.50
+ }
+ }
+ ]
+ }
+
+ backspaceKeyPanel: KeyPanel {
+ id: backspaceKeyPanel
+ BorderImage {
+ id: backspaceKeyBackground
+ source: resourcePrefix + "images/key154px_black.png"
+ width: (parent.width - 2 * keyBackgroundMargin) / scale
+ height: sourceSize.height
+ anchors.centerIn: backspaceKeyPanel
+ border.left: 76
+ border.top: 76
+ border.right: 76
+ border.bottom: 76
+ horizontalTileMode: BorderImage.Stretch
+ scale: (parent.height - 2 * keyBackgroundMargin) / sourceSize.height
+ }
+ Image {
+ id: backspaceKeyIcon
+ anchors.centerIn: backspaceKeyPanel
+ sourceSize.width: 159 * keyIconScale
+ sourceSize.height: 88 * keyIconScale
+ smooth: false
+ source: resourcePrefix + "images/backspace-c5a96f.svg"
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: backspaceKeyBackground
+ opacity: 0.70
+ }
+ PropertyChanges {
+ target: backspaceKeyIcon
+ opacity: 0.70
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: backspaceKeyBackground
+ opacity: 0.20
+ }
+ PropertyChanges {
+ target: backspaceKeyIcon
+ opacity: 0.20
+ }
+ }
+ ]
+ }
+
+ languageKeyPanel: KeyPanel {
+ id: languageKeyPanel
+ Image {
+ id: languageKeyBackground
+ source: resourcePrefix + "images/key154px_colorB.png"
+ fillMode: Image.PreserveAspectFit
+ anchors.fill: languageKeyPanel
+ anchors.margins: keyBackgroundMargin
+ }
+ Image {
+ id: languageKeyIcon
+ anchors.centerIn: languageKeyPanel
+ sourceSize.width: 127 * keyIconScale
+ sourceSize.height: 127 * keyIconScale
+ smooth: false
+ source: resourcePrefix + "images/globe-110b05.svg"
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: languageKeyBackground
+ opacity: 0.70
+ }
+ PropertyChanges {
+ target: languageKeyIcon
+ opacity: 0.30
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: languageKeyBackground
+ opacity: 0.75
+ }
+ PropertyChanges {
+ target: languageKeyIcon
+ opacity: 0.50
+ }
+ }
+ ]
+ }
+
+ enterKeyPanel: KeyPanel {
+ id: enterKeyPanel
+ BorderImage {
+ id: enterKeyBackground
+ source: resourcePrefix + "images/key154px_black.png"
+ width: (parent.width - 2 * keyBackgroundMargin) / scale
+ height: sourceSize.height
+ anchors.centerIn: enterKeyPanel
+ border.left: 76
+ border.top: 76
+ border.right: 76
+ border.bottom: 76
+ horizontalTileMode: BorderImage.Stretch
+ scale: (parent.height - 2 * keyBackgroundMargin) / sourceSize.height
+ }
+ Image {
+ id: enterKeyIcon
+ visible: enterKeyText.text.length === 0
+ anchors.centerIn: enterKeyPanel
+ readonly property size enterKeyIconSize: {
+ switch (control.actionId) {
+ case EnterKeyAction.Go:
+ case EnterKeyAction.Send:
+ case EnterKeyAction.Next:
+ case EnterKeyAction.Done:
+ return Qt.size(170, 119)
+ case EnterKeyAction.Search:
+ return Qt.size(148, 148)
+ default:
+ return Qt.size(211, 80)
+ }
+ }
+ sourceSize.width: enterKeyIconSize.width * keyIconScale
+ sourceSize.height: enterKeyIconSize.height * keyIconScale
+ smooth: false
+ source: {
+ switch (control.actionId) {
+ case EnterKeyAction.Go:
+ case EnterKeyAction.Send:
+ case EnterKeyAction.Next:
+ case EnterKeyAction.Done:
+ return resourcePrefix + "images/check-c5a96f.svg"
+ case EnterKeyAction.Search:
+ return resourcePrefix + "images/search-c5a96f.svg"
+ default:
+ return resourcePrefix + "images/enter-c5a96f.svg"
+ }
+ }
+ }
+ Text {
+ id: enterKeyText
+ visible: text.length !== 0
+ text: control.actionId !== EnterKeyAction.None ? control.displayText : ""
+ clip: true
+ fontSizeMode: Text.HorizontalFit
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ anchors.fill: enterKeyPanel
+ anchors.leftMargin: keyContentMargin
+ anchors.topMargin: Math.round(50 * scaleHint)
+ anchors.rightMargin: keyContentMargin
+ anchors.bottomMargin: Math.round(30 * scaleHint)
+ color: "#c5a96f"
+ font {
+ family: fontFamily
+ weight: Font.Bold
+ pixelSize: 74 * scaleHint
+ capitalization: Font.AllUppercase
+ }
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: enterKeyBackground
+ opacity: 0.70
+ }
+ PropertyChanges {
+ target: enterKeyIcon
+ opacity: 0.70
+ }
+ PropertyChanges {
+ target: enterKeyText
+ opacity: 0.70
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: enterKeyBackground
+ opacity: 0.20
+ }
+ PropertyChanges {
+ target: enterKeyIcon
+ opacity: 0.20
+ }
+ PropertyChanges {
+ target: enterKeyText
+ opacity: 0.20
+ }
+ }
+ ]
+ }
+
+ hideKeyPanel: KeyPanel {
+ id: hideKeyPanel
+ BorderImage {
+ id: hideKeyBackground
+ source: resourcePrefix + "images/key154px_black.png"
+ width: (parent.width - 2 * keyBackgroundMargin) / scale
+ height: sourceSize.height
+ anchors.centerIn: hideKeyPanel
+ border.left: 76
+ border.top: 76
+ border.right: 76
+ border.bottom: 76
+ horizontalTileMode: BorderImage.Stretch
+ scale: (parent.height - 2 * keyBackgroundMargin) / sourceSize.height
+ }
+ Image {
+ id: hideKeyIcon
+ anchors.centerIn: hideKeyPanel
+ sourceSize.width: 127 * keyIconScale
+ sourceSize.height: 127 * keyIconScale
+ smooth: false
+ source: resourcePrefix + "images/hidekeyboard-c5a96f.svg"
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: hideKeyBackground
+ opacity: 0.70
+ }
+ PropertyChanges {
+ target: hideKeyIcon
+ opacity: 0.70
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: hideKeyBackground
+ opacity: 0.20
+ }
+ PropertyChanges {
+ target: hideKeyIcon
+ opacity: 0.20
+ }
+ }
+ ]
+ }
+
+ shiftKeyPanel: KeyPanel {
+ id: shiftKeyPanel
+ BorderImage {
+ id: shiftKeyBackground
+ source: resourcePrefix + "images/key154px_black.png"
+ width: (parent.width - 2 * keyBackgroundMargin) / scale
+ height: sourceSize.height
+ anchors.centerIn: shiftKeyPanel
+ border.left: 76
+ border.top: 76
+ border.right: 76
+ border.bottom: 76
+ horizontalTileMode: BorderImage.Stretch
+ scale: (parent.height - 2 * keyBackgroundMargin) / sourceSize.height
+ states: [
+ State {
+ name: "capsLockActive"
+ when: InputContext.capsLockActive
+ PropertyChanges {
+ target: shiftKeyBackground
+ source: resourcePrefix + "images/key154px_capslock.png"
+ }
+ PropertyChanges {
+ target: shiftKeyIcon
+ source: resourcePrefix + "images/shift-cd8865.svg"
+ }
+ },
+ State {
+ name: "shiftActive"
+ when: InputContext.shiftActive
+ PropertyChanges {
+ target: shiftKeyBackground
+ source: resourcePrefix + "images/key154px_shiftcase.png"
+ }
+ PropertyChanges {
+ target: shiftKeyIcon
+ source: resourcePrefix + "images/shift-dc4f28.svg"
+ }
+ }
+ ]
+ }
+ Image {
+ id: shiftKeyIcon
+ anchors.centerIn: shiftKeyPanel
+ sourceSize.width: 144 * keyIconScale
+ sourceSize.height: 134 * keyIconScale
+ smooth: false
+ source: resourcePrefix + "images/shift-c5a96f.svg"
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: shiftKeyBackground
+ opacity: 0.70
+ }
+ PropertyChanges {
+ target: shiftKeyIcon
+ opacity: 0.70
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: shiftKeyBackground
+ opacity: 0.20
+ }
+ PropertyChanges {
+ target: shiftKeyIcon
+ opacity: 0.20
+ }
+ }
+ ]
+ }
+
+ spaceKeyPanel: KeyPanel {
+ id: spaceKeyPanel
+ BorderImage {
+ id: spaceKeyBackground
+ source: resourcePrefix + "images/key154px_black.png"
+ width: (parent.width - 2 * keyBackgroundMargin) / scale
+ height: sourceSize.height
+ anchors.centerIn: spaceKeyPanel
+ border.left: 76
+ border.top: 76
+ border.right: 76
+ border.bottom: 76
+ horizontalTileMode: BorderImage.Stretch
+ scale: (parent.height - 2 * keyBackgroundMargin) / sourceSize.height
+ }
+ Text {
+ id: spaceKeyText
+ text: Qt.locale(InputContext.locale).nativeLanguageName
+ color: "#c5a96f"
+ opacity: inputLocaleIndicatorOpacity
+ Behavior on opacity { PropertyAnimation { duration: 250 } }
+ anchors.centerIn: spaceKeyPanel
+ font {
+ family: fontFamily
+ weight: Font.Bold
+ pixelSize: 72 * scaleHint
+ }
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: spaceKeyBackground
+ opacity: 0.70
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: spaceKeyBackground
+ opacity: 0.30
+ }
+ }
+ ]
+ }
+
+ symbolKeyPanel: KeyPanel {
+ id: symbolKeyPanel
+ BorderImage {
+ id: symbolKeyBackground
+ source: resourcePrefix + "images/key154px_black.png"
+ width: (parent.width - 2 * keyBackgroundMargin) / scale
+ height: sourceSize.height
+ anchors.centerIn: symbolKeyPanel
+ border.left: 76
+ border.top: 76
+ border.right: 76
+ border.bottom: 76
+ horizontalTileMode: BorderImage.Stretch
+ scale: (parent.height - 2 * keyBackgroundMargin) / sourceSize.height
+ }
+ Text {
+ id: symbolKeyText
+ text: control.displayText
+ color: "#c5a96f"
+ anchors.centerIn: symbolKeyPanel
+ font {
+ family: fontFamily
+ weight: Font.DemiBold
+ pixelSize: 74 * scaleHint
+ letterSpacing: -5 * scaleHint
+ capitalization: Font.AllUppercase
+ }
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: symbolKeyBackground
+ opacity: 0.70
+ }
+ PropertyChanges {
+ target: symbolKeyText
+ opacity: 0.70
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: symbolKeyBackground
+ opacity: 0.20
+ }
+ PropertyChanges {
+ target: symbolKeyText
+ opacity: 0.20
+ }
+ }
+ ]
+ }
+
+ modeKeyPanel: KeyPanel {
+ id: modeKeyPanel
+ BorderImage {
+ id: modeKeyBackground
+ source: resourcePrefix + "images/key154px_black.png"
+ width: (parent.width - 2 * keyBackgroundMargin) / scale
+ height: sourceSize.height
+ anchors.centerIn: modeKeyPanel
+ border.left: 76
+ border.top: 76
+ border.right: 76
+ border.bottom: 76
+ horizontalTileMode: BorderImage.Stretch
+ scale: (parent.height - 2 * keyBackgroundMargin) / sourceSize.height
+ states: [
+ State {
+ name: "mode"
+ when: control.mode
+ PropertyChanges {
+ target: modeKeyBackground
+ source: resourcePrefix + "images/key154px_capslock.png"
+ }
+ }
+ ]
+ }
+ Text {
+ id: modeKeyText
+ text: control.displayText
+ color: "#c5a96f"
+ anchors.fill: modeKeyPanel
+ anchors.margins: keyContentMargin
+ fontSizeMode: Text.Fit
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ font {
+ family: fontFamily
+ weight: Font.DemiBold
+ pixelSize: 74 * scaleHint
+ letterSpacing: -5 * scaleHint
+ capitalization: Font.AllUppercase
+ }
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: modeKeyBackground
+ opacity: 0.70
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: modeKeyBackground
+ opacity: 0.20
+ }
+ }
+ ]
+ }
+
+ handwritingKeyPanel: KeyPanel {
+ id: handwritingKeyPanel
+ BorderImage {
+ id: hwrKeyBackground
+ source: resourcePrefix + "images/key154px_black.png"
+ width: (parent.width - 2 * hwrKeyBackground) / scale
+ height: sourceSize.height
+ anchors.centerIn: handwritingKeyPanel
+ border.left: 76
+ border.top: 76
+ border.right: 76
+ border.bottom: 76
+ horizontalTileMode: BorderImage.Stretch
+ scale: (parent.height - 2 * keyBackgroundMargin) / sourceSize.height
+ }
+ Image {
+ id: hwrKeyIcon
+ anchors.centerIn: handwritingKeyPanel
+ sourceSize.width: 127 * keyIconScale
+ sourceSize.height: 127 * keyIconScale
+ smooth: false
+ source: resourcePrefix + (keyboard.handwritingMode ? "images/textmode-c5a96f.svg" : "images/handwriting-c5a96f.svg")
+ }
+ states: [
+ State {
+ name: "pressed"
+ when: control.pressed
+ PropertyChanges {
+ target: hwrKeyBackground
+ opacity: 0.70
+ }
+ PropertyChanges {
+ target: hwrKeyIcon
+ opacity: 0.70
+ }
+ },
+ State {
+ name: "disabled"
+ when: !control.enabled
+ PropertyChanges {
+ target: hwrKeyBackground
+ opacity: 0.20
+ }
+ PropertyChanges {
+ target: hwrKeyIcon
+ opacity: 0.20
+ }
+ }
+ ]
+ }
+
+ characterPreviewMargin: Math.round(20 * scaleHint)
+ characterPreviewDelegate: Item {
+ property string text
+ id: characterPreview
+ Image {
+ id: characterPreviewBackground
+ source: resourcePrefix + "images/key_preview.png"
+ fillMode: Image.PreserveAspectFit
+ anchors.fill: parent
+ }
+ Text {
+ id: characterPreviewText
+ color: "#c5a96f"
+ text: characterPreview.text
+ anchors.centerIn: characterPreviewBackground
+ font {
+ family: fontFamily
+ weight: Font.Bold
+ pixelSize: 85 * scaleHint
+ }
+ states: [
+ State {
+ name: "fit"
+ when: text.length > 1
+ PropertyChanges {
+ target: characterPreviewText
+ font.letterSpacing: -5 * scaleHint
+ }
+ }
+ ]
+ }
+ }
+
+ alternateKeysListItemWidth: Math.round(111 * scaleHint)
+ alternateKeysListItemHeight: Math.round(154 * scaleHint)
+ alternateKeysListBottomMargin: Math.round(15 * scaleHint)
+ alternateKeysListLeftMargin: Math.round(79 * scaleHint)
+ alternateKeysListRightMargin: Math.round(79 * scaleHint)
+ alternateKeysListDelegate: Item {
+ id: alternateKeysListItem
+ width: alternateKeysListItemWidth
+ height: alternateKeysListItemHeight
+ Text {
+ id: listItemText
+ text: model.text
+ color: "#868482"
+ font {
+ family: fontFamily
+ weight: Font.DemiBold
+ pixelSize: 52 * scaleHint
+ letterSpacing: -6 * scaleHint
+ }
+ anchors.centerIn: parent
+ }
+ states: State {
+ name: "current"
+ when: alternateKeysListItem.ListView.isCurrentItem
+ PropertyChanges {
+ target: listItemText
+ color: "white"
+ }
+ }
+ }
+ alternateKeysListHighlight: Item {
+ Rectangle {
+ anchors.fill: parent
+ anchors.topMargin: Math.round(8 * scaleHint)
+ anchors.bottomMargin: Math.round(8 * scaleHint)
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#64462a" }
+ GradientStop { position: 0.18; color: "#a37648" }
+ GradientStop { position: 0.5; color: "#c4a47c" }
+ GradientStop { position: 0.82; color: "#a37648" }
+ GradientStop { position: 1.0; color: "#64462a" }
+ }
+ }
+ }
+ alternateKeysListBackground: Item {
+ property real currentItemOffset
+ property bool currentItemHighlight: false
+ BorderImage {
+ cache: false
+ source: resourcePrefix + "images/key160px_black.png"
+ width: sourceSize.width + parent.width / scale
+ height: sourceSize.height
+ anchors.centerIn: parent
+ border.left: 79
+ border.top: 79
+ border.right: 79
+ border.bottom: 79
+ horizontalTileMode: BorderImage.Stretch
+ scale: parent.height / sourceSize.height
+ }
+ Image {
+ visible: currentItemOffset !== undefined
+ source: currentItemHighlight ? resourcePrefix + "images/triangle_highlight.png" : resourcePrefix + "images/triangle_black.png"
+ fillMode: Image.PreserveAspectFit
+ width: sourceSize.width * scaleHint
+ height: sourceSize.height * scaleHint
+ anchors.top: parent.bottom
+ anchors.topMargin: Math.round(-8 * scaleHint)
+ anchors.left: parent.left
+ anchors.leftMargin: Math.round(currentItemOffset - width / 2)
+ }
+ }
+
+ selectionListHeight: 85 * scaleHint
+ selectionListDelegate: SelectionListItem {
+ id: selectionListItem
+ width: Math.round(selectionListLabel.width + selectionListLabel.anchors.leftMargin * 2)
+ Text {
+ id: selectionListLabel
+ anchors.left: parent.left
+ anchors.leftMargin: Math.round((compactSelectionList ? 50 : 140) * scaleHint)
+ anchors.verticalCenter: parent.verticalCenter
+ text: decorateText(display, wordCompletionLength)
+ color: "white"
+ font {
+ family: fontFamily
+ weight: Font.Bold
+ pixelSize: 44 * scaleHint
+ }
+ function decorateText(text, wordCompletionLength) {
+ if (wordCompletionLength > 0) {
+ return text.slice(0, -wordCompletionLength) + '<u>' + text.slice(-wordCompletionLength) + '</u>'
+ }
+ return text
+ }
+ }
+ Rectangle {
+ id: selectionListSeparator
+ width: 4 * scaleHint
+ height: 36 * scaleHint
+ color: "#35322f"
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.left
+ }
+ states: State {
+ name: "current"
+ when: selectionListItem.ListView.isCurrentItem
+ PropertyChanges {
+ target: selectionListLabel
+ color: "#c5a96f"
+ }
+ }
+ }
+ selectionListBackground: Rectangle {
+ color: "#222222"
+ }
+ selectionListAdd: Transition {
+ NumberAnimation { property: "y"; from: wordCandidateView.height; duration: 200 }
+ NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200 }
+ }
+ selectionListRemove: Transition {
+ NumberAnimation { property: "y"; to: -wordCandidateView.height; duration: 200 }
+ NumberAnimation { property: "opacity"; to: 0; duration: 200 }
+ }
+
+ navigationHighlight: Rectangle {
+ color: "transparent"
+ border.color: "yellow"
+ border.width: 5
+ }
+
+ traceInputKeyPanelDelegate: TraceInputKeyPanel {
+ traceMargins: keyBackgroundMargin
+ BorderImage {
+ id: traceInputKeyPanelBackground
+ readonly property int traceInputKeyPanelSvgImageHeight: Math.round(height / 12)
+ readonly property real traceInputKeyPanelSvgImageScale: traceInputKeyPanelSvgImageHeight / 154
+ source: "image://qtvkbsvg/%1/images/key154px_colorA.svg?height=%2".arg(resourcePath).arg(traceInputKeyPanelSvgImageHeight)
+ anchors.fill: parent
+ anchors.margins: keyBackgroundMargin
+ border.left: 76 * traceInputKeyPanelSvgImageScale
+ border.top: 76 * traceInputKeyPanelSvgImageScale
+ border.right: 78 * traceInputKeyPanelSvgImageScale
+ border.bottom: 78 * traceInputKeyPanelSvgImageScale
+ horizontalTileMode: BorderImage.Stretch
+ verticalTileMode: BorderImage.Stretch
+ }
+ Text {
+ id: hwrInputModeIndicator
+ visible: control.patternRecognitionMode === InputEngine.PatternRecognitionMode.Handwriting
+ text: {
+ switch (InputContext.inputEngine.inputMode) {
+ case InputEngine.InputMode.Numeric:
+ if (["ar", "fa"].indexOf(InputContext.locale.substring(0, 2)) !== -1)
+ return "\u0660\u0661\u0662"
+ // Fallthrough
+ case InputEngine.InputMode.Dialable:
+ return "123"
+ case InputEngine.InputMode.Greek:
+ return "ΑΒΓ"
+ case InputEngine.InputMode.Cyrillic:
+ return "АБВ"
+ case InputEngine.InputMode.Arabic:
+ if (InputContext.locale.substring(0, 2) === "fa")
+ return "\u0627\u200C\u0628\u200C\u067E"
+ return "\u0623\u200C\u0628\u200C\u062C"
+ case InputEngine.InputMode.Hebrew:
+ return "\u05D0\u05D1\u05D2"
+ case InputEngine.InputMode.ChineseHandwriting:
+ return "中文"
+ case InputEngine.InputMode.JapaneseHandwriting:
+ return "日本語"
+ case InputEngine.InputMode.KoreanHandwriting:
+ return "한국어"
+ case InputEngine.InputMode.Thai:
+ return "กขค"
+ default:
+ return "Abc"
+ }
+ }
+ color: "black"
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.margins: keyContentMargin * 1.5
+ font {
+ family: fontFamily
+ weight: Font.Bold
+ pixelSize: 72 * scaleHint
+ capitalization: {
+ if (InputContext.capsLockActive)
+ return Font.AllUppercase
+ if (InputContext.shiftActive)
+ return Font.MixedCase
+ return Font.AllLowercase
+ }
+ }
+ }
+ Canvas {
+ id: traceInputKeyGuideLines
+ anchors.fill: traceInputKeyPanelBackground
+ opacity: 0.4
+ onPaint: {
+ var ctx = getContext("2d")
+ ctx.lineWidth = 1
+ ctx.strokeStyle = Qt.rgba(0, 0, 0)
+ ctx.clearRect(0, 0, width, height)
+ var i
+ var margin = Math.round(30 * scaleHint)
+ if (control.horizontalRulers) {
+ for (i = 0; i < control.horizontalRulers.length; i++) {
+ ctx.beginPath()
+ var y = Math.round(control.horizontalRulers[i])
+ var rightMargin = Math.round(width - margin)
+ if (i + 1 === control.horizontalRulers.length) {
+ ctx.moveTo(margin, y)
+ ctx.lineTo(rightMargin, y)
+ } else {
+ var dashLen = Math.round(20 * scaleHint)
+ for (var dash = margin, dashCount = 0;
+ dash < rightMargin; dash += dashLen, dashCount++) {
+ if ((dashCount & 1) === 0) {
+ ctx.moveTo(dash, y)
+ ctx.lineTo(Math.min(dash + dashLen, rightMargin), y)
+ }
+ }
+ }
+ ctx.stroke()
+ }
+ }
+ if (control.verticalRulers) {
+ for (i = 0; i < control.verticalRulers.length; i++) {
+ ctx.beginPath()
+ ctx.moveTo(control.verticalRulers[i], 0)
+ ctx.lineTo(control.verticalRulers[i], height)
+ ctx.stroke()
+ }
+ }
+ }
+ Connections {
+ target: control
+ function onHorizontalRulersChanged() { traceInputKeyGuideLines.requestPaint() }
+ function onVerticalRulersChanged() { traceInputKeyGuideLines.requestPaint() }
+ }
+ }
+ }
+
+ traceCanvasDelegate: TraceCanvas {
+ id: traceCanvas
+ onAvailableChanged: {
+ if (!available)
+ return
+ var ctx = getContext("2d")
+ ctx.lineWidth = parent.canvasType === "fullscreen" ? 10 : 10 * scaleHint
+ ctx.lineCap = "round"
+ ctx.strokeStyle = Qt.rgba(0, 0, 0)
+ ctx.fillStyle = ctx.strokeStyle
+ }
+ autoDestroyDelay: 800
+ onTraceChanged: if (trace === null) opacity = 0
+ Behavior on opacity { PropertyAnimation { easing.type: Easing.OutCubic; duration: 150 } }
+ }
+
+ popupListDelegate: SelectionListItem {
+ property real cursorAnchor: popupListLabel.x + popupListLabel.width
+ id: popupListItem
+ width: popupListLabel.width + popupListLabel.anchors.leftMargin * 2
+ height: popupListLabel.height + popupListLabel.anchors.topMargin * 2
+ Text {
+ id: popupListLabel
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.leftMargin: popupListLabel.height / 2
+ anchors.topMargin: popupListLabel.height / 3
+ text: decorateText(display, wordCompletionLength)
+ color: "#110b05"
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: Qt.inputMethod.cursorRectangle.height * 0.8
+ }
+ function decorateText(text, wordCompletionLength) {
+ if (wordCompletionLength > 0) {
+ return text.slice(0, -wordCompletionLength) + '<u>' + text.slice(-wordCompletionLength) + '</u>'
+ }
+ return text
+ }
+ }
+ states: State {
+ name: "current"
+ when: popupListItem.ListView.isCurrentItem
+ PropertyChanges {
+ target: popupListLabel
+ color: "black"
+ }
+ }
+ }
+
+ popupListBackground: Item {
+ BorderImage {
+ readonly property int popupListBackgroundSvgImageHeight: Math.round(height / 8)
+ readonly property real popupListBackgroundSvgImageScale: popupListBackgroundSvgImageHeight / 154
+ readonly property real backgroundMargin: 0 * scaleHint
+ x: -backgroundMargin
+ y: -backgroundMargin
+ width: parent.width + 2 * backgroundMargin
+ height: parent.height + 2 * backgroundMargin
+ source: "image://qtvkbsvg/%1/images/key154px_colorA.svg?height=%2".arg(resourcePath).arg(popupListBackgroundSvgImageHeight)
+ border.left: 76 * popupListBackgroundSvgImageScale
+ border.top: 76 * popupListBackgroundSvgImageScale
+ border.right: 76 * popupListBackgroundSvgImageScale
+ border.bottom: 76 * popupListBackgroundSvgImageScale
+ horizontalTileMode: BorderImage.Stretch
+ verticalTileMode: BorderImage.Stretch
+ }
+ }
+
+ popupListAdd: Transition {
+ NumberAnimation { property: "opacity"; from: 0; to: 1.0; duration: 200 }
+ }
+
+ popupListRemove: Transition {
+ NumberAnimation { property: "opacity"; to: 0; duration: 200 }
+ }
+
+ languagePopupListEnabled: true
+
+ languageListDelegate: SelectionListItem {
+ id: languageListItem
+ width: languageNameTextMetrics.width * 20
+ height: languageNameTextMetrics.height + languageListLabel.anchors.topMargin + languageListLabel.anchors.bottomMargin
+ Text {
+ id: languageListLabel
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.leftMargin: languageNameTextMetrics.height / 2
+ anchors.rightMargin: anchors.leftMargin
+ anchors.topMargin: languageNameTextMetrics.height / 3
+ anchors.bottomMargin: anchors.topMargin
+ text: languageNameFormatter.elidedText
+ color: "#c5a96f"
+ opacity: 0.8
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 44 * scaleHint
+ }
+ }
+ TextMetrics {
+ id: languageNameTextMetrics
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 44 * scaleHint
+ }
+ text: "X"
+ }
+ TextMetrics {
+ id: languageNameFormatter
+ font {
+ family: fontFamily
+ weight: Font.Normal
+ pixelSize: 44 * scaleHint
+ }
+ elide: Text.ElideRight
+ elideWidth: languageListItem.width - languageListLabel.anchors.leftMargin - languageListLabel.anchors.rightMargin
+ text: displayName
+ }
+ states: State {
+ name: "current"
+ when: languageListItem.ListView.isCurrentItem
+ PropertyChanges {
+ target: languageListLabel
+ color: "white"
+ }
+ }
+ }
+
+ languageListHighlight: Item {
+ Rectangle {
+ anchors.fill: parent
+ anchors.topMargin: Math.round(8 * scaleHint)
+ anchors.bottomMargin: Math.round(8 * scaleHint)
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#64462a" }
+ GradientStop { position: 0.18; color: "#a37648" }
+ GradientStop { position: 0.5; color: "#c4a47c" }
+ GradientStop { position: 0.82; color: "#a37648" }
+ GradientStop { position: 1.0; color: "#64462a" }
+ }
+ }
+ }
+
+ languageListBackground: Item {
+ BorderImage {
+ readonly property int languageListBackgroundSvgImageHeight: Math.round(height / 3)
+ readonly property real languageListBackgroundSvgImageScale: languageListBackgroundSvgImageHeight / 154
+ readonly property real backgroundMargin: 40 * scaleHint
+ x: -backgroundMargin
+ y: -backgroundMargin
+ width: parent.width + 2 * backgroundMargin
+ height: parent.height + 2 * backgroundMargin
+ source: "image://qtvkbsvg/%1/images/key154px_black.svg?height=%2".arg(resourcePath).arg(languageListBackgroundSvgImageHeight)
+ border.left: 76 * languageListBackgroundSvgImageScale
+ border.top: 76 * languageListBackgroundSvgImageScale
+ border.right: 78 * languageListBackgroundSvgImageScale
+ border.bottom: 78 * languageListBackgroundSvgImageScale
+ horizontalTileMode: BorderImage.Stretch
+ verticalTileMode: BorderImage.Stretch
+ }
+ }
+
+ languageListAdd: Transition {
+ NumberAnimation { property: "opacity"; from: 0; to: 1.0; duration: 200 }
+ }
+
+ languageListRemove: Transition {
+ NumberAnimation { property: "opacity"; to: 0; duration: 200 }
+ }
+
+ selectionHandle: Image {
+ sourceSize.width: 20
+ source: resourcePrefix + "images/selectionhandle-bottom.svg"
+ }
+
+ fullScreenInputContainerBackground: Rectangle {
+ color: "#FFF"
+ }
+
+ fullScreenInputBackground: Rectangle {
+ color: "#FFF"
+ }
+
+ fullScreenInputMargins: Math.round(15 * scaleHint)
+
+ fullScreenInputPadding: Math.round(30 * scaleHint)
+
+ fullScreenInputCursor: Rectangle {
+ width: 1
+ color: "#000"
+ visible: parent.blinkStatus
+ }
+
+ fullScreenInputFont.pixelSize: 58 * scaleHint
+
+ fullScreenInputPasswordCharacter: "*"
+
+ fullScreenInputSelectionColor: "#B57C47"
+
+ functionPopupListDelegate: Item {
+ id: functionPopupListItem
+ readonly property real iconMargin: 40 * scaleHint
+ readonly property real iconWidth: 144 * keyIconScale
+ readonly property real iconHeight: 144 * keyIconScale
+ width: iconWidth + 2 * iconMargin
+ height: iconHeight + 2 * iconMargin
+ Image {
+ id: functionIcon
+ anchors.centerIn: parent
+ sourceSize.width: iconWidth
+ sourceSize.height: iconHeight
+ smooth: false
+ source: {
+ switch (keyboardFunction) {
+ case QtVirtualKeyboard.HideInputPanel:
+ return resourcePrefix + "images/hidekeyboard-c5a96f.svg"
+ case QtVirtualKeyboard.ChangeLanguage:
+ return resourcePrefix + "images/globe-c5a96f.svg"
+ case QtVirtualKeyboard.ToggleHandwritingMode:
+ return resourcePrefix + (keyboard.handwritingMode ? "images/textmode-c5a96f.svg" : "images/handwriting-c5a96f.svg")
+ }
+ }
+ states: State {
+ when: functionPopupListItem.ListView.isCurrentItem
+ PropertyChanges {
+ target: functionIcon
+ source: {
+ switch (keyboardFunction) {
+ case QtVirtualKeyboard.HideInputPanel:
+ return resourcePrefix + "images/hidekeyboard-fff.svg"
+ case QtVirtualKeyboard.ChangeLanguage:
+ return resourcePrefix + "images/globe-fff.svg"
+ case QtVirtualKeyboard.ToggleHandwritingMode:
+ return resourcePrefix + (keyboard.handwritingMode ? "images/textmode-fff.svg" : "images/handwriting-fff.svg")
+ }
+ }
+ }
+ }
+ }
+ }
+
+ functionPopupListBackground: Item {
+ property ListView view
+ property real currentItemOffset: {
+ if (view.count > 0) {
+ var highlightItem = view.itemAtIndex(0)
+ return view.mapFromItem(highlightItem, highlightItem.width / 2, 0).x
+ }
+ return 0
+ }
+ property bool currentItemHighlight: view.currentIndex === 0
+ BorderImage {
+ cache: false
+ source: resourcePrefix + "images/key160px_black.png"
+ width: sourceSize.width + parent.width / scale
+ height: sourceSize.height
+ anchors.centerIn: parent
+ border.left: 79
+ border.top: 79
+ border.right: 79
+ border.bottom: 79
+ horizontalTileMode: BorderImage.Stretch
+ scale: parent.height / sourceSize.height
+ }
+ Image {
+ visible: currentItemOffset !== undefined
+ source: currentItemHighlight ? resourcePrefix + "images/triangle_highlight.png" : resourcePrefix + "images/triangle_black.png"
+ fillMode: Image.PreserveAspectFit
+ width: sourceSize.width * scaleHint
+ height: sourceSize.height * scaleHint
+ anchors.top: parent.bottom
+ anchors.topMargin: Math.round(-8 * scaleHint)
+ anchors.left: parent.left
+ anchors.leftMargin: Math.round(currentItemOffset - width / 2)
+ }
+ }
+
+ functionPopupListHighlight: Item {
+ Rectangle {
+ anchors.fill: parent
+ anchors.topMargin: Math.round(8 * scaleHint)
+ anchors.bottomMargin: Math.round(8 * scaleHint)
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#64462a" }
+ GradientStop { position: 0.18; color: "#a37648" }
+ GradientStop { position: 0.5; color: "#c4a47c" }
+ GradientStop { position: 0.82; color: "#a37648" }
+ GradientStop { position: 1.0; color: "#64462a" }
+ }
+ }
+ }
+}
diff --git a/src/styles/plugins.qmltypes b/src/styles/plugins.qmltypes
deleted file mode 100644
index 2aecdcb7..00000000
--- a/src/styles/plugins.qmltypes
+++ /dev/null
@@ -1,570 +0,0 @@
-import QtQuick.tooling 1.2
-
-// This file describes the plugin-supplied types contained in the library.
-// It is used for QML tooling purposes only.
-//
-// This file was auto-generated by:
-// 'qmlplugindump -nonrelocatable QtQuick.VirtualKeyboard.Styles 2.14'
-
-Module {
- dependencies: ["QtQuick 2.0"]
- Component {
- prototype: "QQuickItem"
- name: "QtQuick.VirtualKeyboard.Styles/KeyIcon 1.0"
- exports: ["QtQuick.VirtualKeyboard.Styles/KeyIcon 1.0"]
- exportMetaObjectRevisions: [0]
- isComposite: true
- defaultProperty: "data"
- Property { name: "color"; type: "QColor" }
- Property { name: "source"; type: "QUrl" }
- }
- Component {
- prototype: "QQuickItem"
- name: "QtQuick.VirtualKeyboard.Styles/KeyIcon 2.0"
- exports: ["QtQuick.VirtualKeyboard.Styles/KeyIcon 2.0"]
- exportMetaObjectRevisions: [0]
- isComposite: true
- defaultProperty: "data"
- Property { name: "color"; type: "QColor" }
- Property { name: "source"; type: "QUrl" }
- }
- Component {
- prototype: "QQuickItem"
- name: "QtQuick.VirtualKeyboard.Styles/KeyPanel 1.0"
- exports: ["QtQuick.VirtualKeyboard.Styles/KeyPanel 1.0"]
- exportMetaObjectRevisions: [0]
- isComposite: true
- defaultProperty: "data"
- Property { name: "control"; type: "QQuickItem"; isPointer: true }
- Property { name: "soundEffect"; type: "QUrl" }
- }
- Component {
- prototype: "QQuickItem"
- name: "QtQuick.VirtualKeyboard.Styles/KeyPanel 2.0"
- exports: ["QtQuick.VirtualKeyboard.Styles/KeyPanel 2.0"]
- exportMetaObjectRevisions: [0]
- isComposite: true
- defaultProperty: "data"
- Property { name: "control"; type: "QQuickItem"; isPointer: true }
- Property { name: "soundEffect"; type: "QUrl" }
- }
- Component {
- prototype: "QObject"
- name: "QtQuick.VirtualKeyboard.Styles/KeyboardStyle 1.0"
- exports: ["QtQuick.VirtualKeyboard.Styles/KeyboardStyle 1.0"]
- exportMetaObjectRevisions: [0]
- isComposite: true
- Property { name: "keyboardHeight"; type: "double" }
- Property { name: "keyboardDesignWidth"; type: "double" }
- Property { name: "keyboardDesignHeight"; type: "double" }
- Property { name: "scaleHint"; type: "double"; isReadonly: true }
- Property { name: "keyboardRelativeLeftMargin"; type: "double" }
- Property { name: "keyboardRelativeRightMargin"; type: "double" }
- Property { name: "keyboardRelativeTopMargin"; type: "double" }
- Property { name: "keyboardRelativeBottomMargin"; type: "double" }
- Property { name: "keyboardBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "keyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "backspaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "enterKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "hideKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "shiftKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "spaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "symbolKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "modeKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "handwritingKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "characterPreviewMargin"; type: "double" }
- Property { name: "characterPreviewDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListItemWidth"; type: "double" }
- Property { name: "alternateKeysListItemHeight"; type: "double" }
- Property { name: "alternateKeysListTopMargin"; type: "double" }
- Property { name: "alternateKeysListBottomMargin"; type: "double" }
- Property { name: "alternateKeysListLeftMargin"; type: "double" }
- Property { name: "alternateKeysListRightMargin"; type: "double" }
- Property { name: "alternateKeysListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHeight"; type: "double" }
- Property { name: "selectionListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "navigationHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceInputKeyPanelDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceCanvasDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "popupListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languagePopupListEnabled"; type: "bool" }
- Property { name: "languageListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languageListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionHandle"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputContainerBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputMargins"; type: "double" }
- Property { name: "fullScreenInputPadding"; type: "double" }
- Property { name: "fullScreenInputCursor"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputFont"; type: "QFont" }
- Property { name: "fullScreenInputPasswordCharacter"; type: "string" }
- Property { name: "fullScreenInputColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectionColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectedTextColor"; type: "QColor" }
- }
- Component {
- prototype: "QObject"
- name: "QtQuick.VirtualKeyboard.Styles/KeyboardStyle 1.1"
- exports: ["QtQuick.VirtualKeyboard.Styles/KeyboardStyle 1.1"]
- exportMetaObjectRevisions: [1]
- isComposite: true
- Property { name: "keyboardHeight"; type: "double" }
- Property { name: "keyboardDesignWidth"; type: "double" }
- Property { name: "keyboardDesignHeight"; type: "double" }
- Property { name: "scaleHint"; type: "double"; isReadonly: true }
- Property { name: "keyboardRelativeLeftMargin"; type: "double" }
- Property { name: "keyboardRelativeRightMargin"; type: "double" }
- Property { name: "keyboardRelativeTopMargin"; type: "double" }
- Property { name: "keyboardRelativeBottomMargin"; type: "double" }
- Property { name: "keyboardBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "keyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "backspaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "enterKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "hideKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "shiftKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "spaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "symbolKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "modeKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "handwritingKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "characterPreviewMargin"; type: "double" }
- Property { name: "characterPreviewDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListItemWidth"; type: "double" }
- Property { name: "alternateKeysListItemHeight"; type: "double" }
- Property { name: "alternateKeysListTopMargin"; type: "double" }
- Property { name: "alternateKeysListBottomMargin"; type: "double" }
- Property { name: "alternateKeysListLeftMargin"; type: "double" }
- Property { name: "alternateKeysListRightMargin"; type: "double" }
- Property { name: "alternateKeysListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHeight"; type: "double" }
- Property { name: "selectionListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "navigationHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceInputKeyPanelDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceCanvasDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "popupListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languagePopupListEnabled"; type: "bool" }
- Property { name: "languageListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languageListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionHandle"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputContainerBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputMargins"; type: "double" }
- Property { name: "fullScreenInputPadding"; type: "double" }
- Property { name: "fullScreenInputCursor"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputFont"; type: "QFont" }
- Property { name: "fullScreenInputPasswordCharacter"; type: "string" }
- Property { name: "fullScreenInputColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectionColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectedTextColor"; type: "QColor" }
- }
- Component {
- prototype: "QObject"
- name: "QtQuick.VirtualKeyboard.Styles/KeyboardStyle 1.2"
- exports: ["QtQuick.VirtualKeyboard.Styles/KeyboardStyle 1.2"]
- exportMetaObjectRevisions: [2]
- isComposite: true
- Property { name: "keyboardHeight"; type: "double" }
- Property { name: "keyboardDesignWidth"; type: "double" }
- Property { name: "keyboardDesignHeight"; type: "double" }
- Property { name: "scaleHint"; type: "double"; isReadonly: true }
- Property { name: "keyboardRelativeLeftMargin"; type: "double" }
- Property { name: "keyboardRelativeRightMargin"; type: "double" }
- Property { name: "keyboardRelativeTopMargin"; type: "double" }
- Property { name: "keyboardRelativeBottomMargin"; type: "double" }
- Property { name: "keyboardBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "keyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "backspaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "enterKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "hideKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "shiftKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "spaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "symbolKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "modeKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "handwritingKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "characterPreviewMargin"; type: "double" }
- Property { name: "characterPreviewDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListItemWidth"; type: "double" }
- Property { name: "alternateKeysListItemHeight"; type: "double" }
- Property { name: "alternateKeysListTopMargin"; type: "double" }
- Property { name: "alternateKeysListBottomMargin"; type: "double" }
- Property { name: "alternateKeysListLeftMargin"; type: "double" }
- Property { name: "alternateKeysListRightMargin"; type: "double" }
- Property { name: "alternateKeysListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHeight"; type: "double" }
- Property { name: "selectionListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "navigationHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceInputKeyPanelDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceCanvasDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "popupListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languagePopupListEnabled"; type: "bool" }
- Property { name: "languageListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languageListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionHandle"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputContainerBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputMargins"; type: "double" }
- Property { name: "fullScreenInputPadding"; type: "double" }
- Property { name: "fullScreenInputCursor"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputFont"; type: "QFont" }
- Property { name: "fullScreenInputPasswordCharacter"; type: "string" }
- Property { name: "fullScreenInputColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectionColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectedTextColor"; type: "QColor" }
- }
- Component {
- prototype: "QObject"
- name: "QtQuick.VirtualKeyboard.Styles/KeyboardStyle 1.3"
- exports: ["QtQuick.VirtualKeyboard.Styles/KeyboardStyle 1.3"]
- exportMetaObjectRevisions: [3]
- isComposite: true
- Property { name: "keyboardHeight"; type: "double" }
- Property { name: "keyboardDesignWidth"; type: "double" }
- Property { name: "keyboardDesignHeight"; type: "double" }
- Property { name: "scaleHint"; type: "double"; isReadonly: true }
- Property { name: "keyboardRelativeLeftMargin"; type: "double" }
- Property { name: "keyboardRelativeRightMargin"; type: "double" }
- Property { name: "keyboardRelativeTopMargin"; type: "double" }
- Property { name: "keyboardRelativeBottomMargin"; type: "double" }
- Property { name: "keyboardBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "keyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "backspaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "enterKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "hideKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "shiftKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "spaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "symbolKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "modeKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "handwritingKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "characterPreviewMargin"; type: "double" }
- Property { name: "characterPreviewDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListItemWidth"; type: "double" }
- Property { name: "alternateKeysListItemHeight"; type: "double" }
- Property { name: "alternateKeysListTopMargin"; type: "double" }
- Property { name: "alternateKeysListBottomMargin"; type: "double" }
- Property { name: "alternateKeysListLeftMargin"; type: "double" }
- Property { name: "alternateKeysListRightMargin"; type: "double" }
- Property { name: "alternateKeysListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHeight"; type: "double" }
- Property { name: "selectionListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "navigationHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceInputKeyPanelDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceCanvasDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "popupListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languagePopupListEnabled"; type: "bool" }
- Property { name: "languageListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languageListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionHandle"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputContainerBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputMargins"; type: "double" }
- Property { name: "fullScreenInputPadding"; type: "double" }
- Property { name: "fullScreenInputCursor"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputFont"; type: "QFont" }
- Property { name: "fullScreenInputPasswordCharacter"; type: "string" }
- Property { name: "fullScreenInputColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectionColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectedTextColor"; type: "QColor" }
- }
- Component {
- prototype: "QObject"
- name: "QtQuick.VirtualKeyboard.Styles/KeyboardStyle 2.0"
- exports: ["QtQuick.VirtualKeyboard.Styles/KeyboardStyle 2.0"]
- exportMetaObjectRevisions: [0]
- isComposite: true
- Property { name: "keyboardHeight"; type: "double" }
- Property { name: "keyboardDesignWidth"; type: "double" }
- Property { name: "keyboardDesignHeight"; type: "double" }
- Property { name: "scaleHint"; type: "double"; isReadonly: true }
- Property { name: "keyboardRelativeLeftMargin"; type: "double" }
- Property { name: "keyboardRelativeRightMargin"; type: "double" }
- Property { name: "keyboardRelativeTopMargin"; type: "double" }
- Property { name: "keyboardRelativeBottomMargin"; type: "double" }
- Property { name: "keyboardBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "keyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "backspaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "enterKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "hideKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "shiftKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "spaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "symbolKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "modeKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "handwritingKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "characterPreviewMargin"; type: "double" }
- Property { name: "characterPreviewDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListItemWidth"; type: "double" }
- Property { name: "alternateKeysListItemHeight"; type: "double" }
- Property { name: "alternateKeysListTopMargin"; type: "double" }
- Property { name: "alternateKeysListBottomMargin"; type: "double" }
- Property { name: "alternateKeysListLeftMargin"; type: "double" }
- Property { name: "alternateKeysListRightMargin"; type: "double" }
- Property { name: "alternateKeysListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHeight"; type: "double" }
- Property { name: "selectionListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "navigationHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceInputKeyPanelDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceCanvasDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "popupListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languagePopupListEnabled"; type: "bool" }
- Property { name: "languageListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languageListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionHandle"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputContainerBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputMargins"; type: "double" }
- Property { name: "fullScreenInputPadding"; type: "double" }
- Property { name: "fullScreenInputCursor"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputFont"; type: "QFont" }
- Property { name: "fullScreenInputPasswordCharacter"; type: "string" }
- Property { name: "fullScreenInputColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectionColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectedTextColor"; type: "QColor" }
- }
- Component {
- prototype: "QObject"
- name: "QtQuick.VirtualKeyboard.Styles/KeyboardStyle 2.1"
- exports: ["QtQuick.VirtualKeyboard.Styles/KeyboardStyle 2.1"]
- exportMetaObjectRevisions: [1]
- isComposite: true
- Property { name: "keyboardHeight"; type: "double" }
- Property { name: "keyboardDesignWidth"; type: "double" }
- Property { name: "keyboardDesignHeight"; type: "double" }
- Property { name: "scaleHint"; type: "double"; isReadonly: true }
- Property { name: "keyboardRelativeLeftMargin"; type: "double" }
- Property { name: "keyboardRelativeRightMargin"; type: "double" }
- Property { name: "keyboardRelativeTopMargin"; type: "double" }
- Property { name: "keyboardRelativeBottomMargin"; type: "double" }
- Property { name: "keyboardBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "keyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "backspaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "enterKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "hideKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "shiftKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "spaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "symbolKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "modeKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "handwritingKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "characterPreviewMargin"; type: "double" }
- Property { name: "characterPreviewDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListItemWidth"; type: "double" }
- Property { name: "alternateKeysListItemHeight"; type: "double" }
- Property { name: "alternateKeysListTopMargin"; type: "double" }
- Property { name: "alternateKeysListBottomMargin"; type: "double" }
- Property { name: "alternateKeysListLeftMargin"; type: "double" }
- Property { name: "alternateKeysListRightMargin"; type: "double" }
- Property { name: "alternateKeysListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHeight"; type: "double" }
- Property { name: "selectionListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "navigationHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceInputKeyPanelDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceCanvasDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "popupListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languagePopupListEnabled"; type: "bool" }
- Property { name: "languageListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languageListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionHandle"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputContainerBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputMargins"; type: "double" }
- Property { name: "fullScreenInputPadding"; type: "double" }
- Property { name: "fullScreenInputCursor"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputFont"; type: "QFont" }
- Property { name: "fullScreenInputPasswordCharacter"; type: "string" }
- Property { name: "fullScreenInputColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectionColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectedTextColor"; type: "QColor" }
- }
- Component {
- prototype: "QObject"
- name: "QtQuick.VirtualKeyboard.Styles/KeyboardStyle 2.2"
- exports: ["QtQuick.VirtualKeyboard.Styles/KeyboardStyle 2.2"]
- exportMetaObjectRevisions: [2]
- isComposite: true
- Property { name: "keyboardHeight"; type: "double" }
- Property { name: "keyboardDesignWidth"; type: "double" }
- Property { name: "keyboardDesignHeight"; type: "double" }
- Property { name: "scaleHint"; type: "double"; isReadonly: true }
- Property { name: "keyboardRelativeLeftMargin"; type: "double" }
- Property { name: "keyboardRelativeRightMargin"; type: "double" }
- Property { name: "keyboardRelativeTopMargin"; type: "double" }
- Property { name: "keyboardRelativeBottomMargin"; type: "double" }
- Property { name: "keyboardBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "keyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "backspaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "enterKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "hideKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "shiftKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "spaceKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "symbolKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "modeKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "handwritingKeyPanel"; type: "QQmlComponent"; isPointer: true }
- Property { name: "characterPreviewMargin"; type: "double" }
- Property { name: "characterPreviewDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListItemWidth"; type: "double" }
- Property { name: "alternateKeysListItemHeight"; type: "double" }
- Property { name: "alternateKeysListTopMargin"; type: "double" }
- Property { name: "alternateKeysListBottomMargin"; type: "double" }
- Property { name: "alternateKeysListLeftMargin"; type: "double" }
- Property { name: "alternateKeysListRightMargin"; type: "double" }
- Property { name: "alternateKeysListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "alternateKeysListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHeight"; type: "double" }
- Property { name: "selectionListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "selectionListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "navigationHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceInputKeyPanelDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "traceCanvasDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "popupListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "popupListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languagePopupListEnabled"; type: "bool" }
- Property { name: "languageListDelegate"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListHighlight"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "languageListAdd"; type: "QQuickTransition"; isPointer: true }
- Property { name: "languageListRemove"; type: "QQuickTransition"; isPointer: true }
- Property { name: "selectionHandle"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputContainerBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputBackground"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputMargins"; type: "double" }
- Property { name: "fullScreenInputPadding"; type: "double" }
- Property { name: "fullScreenInputCursor"; type: "QQmlComponent"; isPointer: true }
- Property { name: "fullScreenInputFont"; type: "QFont" }
- Property { name: "fullScreenInputPasswordCharacter"; type: "string" }
- Property { name: "fullScreenInputColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectionColor"; type: "QColor" }
- Property { name: "fullScreenInputSelectedTextColor"; type: "QColor" }
- }
- Component {
- prototype: "QQuickItem"
- name: "QtQuick.VirtualKeyboard.Styles/SelectionListItem 1.0"
- exports: ["QtQuick.VirtualKeyboard.Styles/SelectionListItem 1.0"]
- exportMetaObjectRevisions: [0]
- isComposite: true
- defaultProperty: "data"
- Property { name: "soundEffect"; type: "QUrl" }
- }
- Component {
- prototype: "QQuickItem"
- name: "QtQuick.VirtualKeyboard.Styles/SelectionListItem 2.0"
- exports: ["QtQuick.VirtualKeyboard.Styles/SelectionListItem 2.0"]
- exportMetaObjectRevisions: [0]
- isComposite: true
- defaultProperty: "data"
- Property { name: "soundEffect"; type: "QUrl" }
- }
- Component {
- prototype: "QQuickCanvasItem"
- name: "QtQuick.VirtualKeyboard.Styles/TraceCanvas 2.0"
- exports: ["QtQuick.VirtualKeyboard.Styles/TraceCanvas 2.0"]
- exportMetaObjectRevisions: [0]
- isComposite: true
- defaultProperty: "data"
- Property { name: "trace"; type: "QVariant" }
- Property { name: "autoDestroy"; type: "bool" }
- Property { name: "autoDestroyDelay"; type: "int" }
- Property { name: "renderFunction"; type: "QVariant" }
- Property { name: "__renderPos"; type: "int" }
- Property { name: "__renderingEnabled"; type: "bool" }
- Method { name: "renderSmoothedLine"; type: "QVariant" }
- }
- Component {
- prototype: "QQuickItem"
- name: "QtQuick.VirtualKeyboard.Styles/TraceInputKeyPanel 2.0"
- exports: ["QtQuick.VirtualKeyboard.Styles/TraceInputKeyPanel 2.0"]
- exportMetaObjectRevisions: [0]
- isComposite: true
- defaultProperty: "data"
- Property { name: "control"; type: "QQuickItem"; isPointer: true }
- Property { name: "traceMargins"; type: "double" }
- }
-}
diff --git a/src/styles/qmldir b/src/styles/qmldir
deleted file mode 100644
index 6f4705fc..00000000
--- a/src/styles/qmldir
+++ /dev/null
@@ -1,5 +0,0 @@
-module QtQuick.VirtualKeyboard.Styles
-plugin qtquickvirtualkeyboardstylesplugin
-classname QtQuickVirtualKeyboardStylesPlugin
-typeinfo plugins.qmltypes
-depends QtQuick 2.0
diff --git a/src/styles/qtquickvirtualkeyboardstylesplugin.cpp b/src/styles/qtquickvirtualkeyboardstylesplugin.cpp
index 4a1316a2..d6f4350c 100644
--- a/src/styles/qtquickvirtualkeyboardstylesplugin.cpp
+++ b/src/styles/qtquickvirtualkeyboardstylesplugin.cpp
@@ -30,14 +30,16 @@
#include "qtquickvirtualkeyboardstylesplugin.h"
#include "svgimageprovider.h"
-#include <qqml.h>
+#include <QtQml/qqml.h>
#include <QtCore/QLibraryInfo>
-#include <QtVirtualKeyboard/private/qvirtualkeyboard_staticplugin_p.h>
QT_BEGIN_NAMESPACE
+extern void qml_register_types_QtQuick_VirtualKeyboard_Styles();
+Q_GHS_KEEP_REFERENCE(qml_register_types_QtQuick_VirtualKeyboard_Styles);
+
/*!
- \qmlmodule QtQuick.VirtualKeyboard.Styles 2.\QtMinorVersion
+ \qmlmodule QtQuick.VirtualKeyboard.Styles
\title Qt Quick Virtual Keyboard Styles QML Types
\ingroup qmlmodules
@@ -47,36 +49,20 @@ QT_BEGIN_NAMESPACE
import statements in your .qml file:
\qml \QtMinorVersion
- import QtQuick.VirtualKeyboard.Styles 2.\1
+ import QtQuick.VirtualKeyboard.Styles
\endqml
*/
-void QtQuickVirtualKeyboardStylesPlugin::registerTypes(const char *uri)
+QtQuickVirtualKeyboardStylesPlugin::QtQuickVirtualKeyboardStylesPlugin(QObject *parent) :
+ QQmlExtensionPlugin(parent)
{
-#if defined(QT_STATICPLUGIN)
- Q_VKB_IMPORT_PLUGIN(QtQuick2Plugin)
-#endif
-
- const QString path(QStringLiteral("qrc:///QtQuick/VirtualKeyboard/Styles/content/"));
- qmlRegisterType(QUrl(path + QLatin1String("KeyboardStyle.qml")), uri, 1, 0, "KeyboardStyle");
- qmlRegisterType(QUrl(path + QLatin1String("KeyboardStyle.qml")), uri, 1, 1, "KeyboardStyle");
- qmlRegisterType(QUrl(path + QLatin1String("KeyboardStyle.qml")), uri, 1, 2, "KeyboardStyle");
- qmlRegisterType(QUrl(path + QLatin1String("KeyboardStyle.qml")), uri, 1, 3, "KeyboardStyle");
- qmlRegisterType(QUrl(path + QLatin1String("KeyboardStyle.qml")), uri, 2, 0, "KeyboardStyle");
- qmlRegisterType(QUrl(path + QLatin1String("KeyboardStyle.qml")), uri, 2, 1, "KeyboardStyle");
- qmlRegisterType(QUrl(path + QLatin1String("KeyboardStyle.qml")), uri, 2, 2, "KeyboardStyle");
- qmlRegisterType(QUrl(path + QLatin1String("KeyIcon.qml")), uri, 1, 0, "KeyIcon");
- qmlRegisterType(QUrl(path + QLatin1String("KeyIcon.qml")), uri, 2, 0, "KeyIcon");
- qmlRegisterType(QUrl(path + QLatin1String("KeyPanel.qml")), uri, 1, 0, "KeyPanel");
- qmlRegisterType(QUrl(path + QLatin1String("KeyPanel.qml")), uri, 2, 0, "KeyPanel");
- qmlRegisterType(QUrl(path + QLatin1String("SelectionListItem.qml")), uri, 1, 0, "SelectionListItem");
- qmlRegisterType(QUrl(path + QLatin1String("SelectionListItem.qml")), uri, 2, 0, "SelectionListItem");
- qmlRegisterType(QUrl(path + QLatin1String("TraceInputKeyPanel.qml")), uri, 2, 0, "TraceInputKeyPanel");
- qmlRegisterType(QUrl(path + QLatin1String("TraceCanvas.qml")), uri, 2, 0, "TraceCanvas");
+ volatile auto registration = &qml_register_types_QtQuick_VirtualKeyboard_Styles;
+ Q_UNUSED(registration);
+}
- // The minor version used to be the current Qt 5 minor. For compatibility it is the last
- // Qt 5 release.
- qmlRegisterModule(uri, 2, 15);
+void QtQuickVirtualKeyboardStylesPlugin::registerTypes(const char *uri)
+{
+ Q_UNUSED(uri);
}
void QtQuickVirtualKeyboardStylesPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
diff --git a/src/styles/qtquickvirtualkeyboardstylesplugin.h b/src/styles/qtquickvirtualkeyboardstylesplugin.h
index 1d467332..b65537e9 100644
--- a/src/styles/qtquickvirtualkeyboardstylesplugin.h
+++ b/src/styles/qtquickvirtualkeyboardstylesplugin.h
@@ -40,7 +40,7 @@ class QtQuickVirtualKeyboardStylesPlugin : public QQmlExtensionPlugin
Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
public:
- QtQuickVirtualKeyboardStylesPlugin(QObject *parent = nullptr) : QQmlExtensionPlugin(parent) { }
+ QtQuickVirtualKeyboardStylesPlugin(QObject *parent = nullptr);
void registerTypes(const char *uri) override;
void initializeEngine(QQmlEngine *engine, const char *uri) override;
};