aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/CMakeLists.txt10
-rw-r--r--examples/README4
-rw-r--r--examples/core/permissions/CMakeLists.txt57
-rw-r--r--examples/core/permissions/Info.plist59
-rw-r--r--examples/core/permissions/Main.qml99
-rw-r--r--examples/core/permissions/android/AndroidManifest.xml46
-rw-r--r--examples/core/permissions/main.cpp21
-rw-r--r--examples/examples.pro1
-rw-r--r--examples/platforms/CMakeLists.txt6
-rw-r--r--examples/platforms/android/.gitignore10
-rw-r--r--examples/platforms/android/CMakeLists.txt6
-rw-r--r--examples/platforms/android/doc/images/portrait_java.pngbin0 -> 43786 bytes
-rw-r--r--examples/platforms/android/doc/src/qml_in_android_studio_projects.qdoc209
-rw-r--r--examples/platforms/android/qml_in_android_view/CMakeLists.txt32
-rw-r--r--examples/platforms/android/qml_in_android_view/Main.qml87
-rw-r--r--examples/platforms/android/qml_in_android_view/main.cpp11
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/CMakeLists.txt18
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/build.gradle56
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/AndroidManifest.xml27
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/Colors.java35
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java183
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/drawable/ic_launcher_background.xml74
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/drawable/ic_launcher_foreground.xml31
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/layout/activity_main.xml165
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml6
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml6
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher.webpbin0 -> 4118 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webpbin0 -> 8980 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_round.webpbin0 -> 6056 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher.webpbin0 -> 2650 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webpbin0 -> 5556 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_round.webpbin0 -> 3680 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher.webpbin0 -> 5924 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webpbin0 -> 13218 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webpbin0 -> 8836 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher.webpbin0 -> 10144 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webpbin0 -> 25688 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webpbin0 -> 14828 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webpbin0 -> 14820 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webpbin0 -> 41052 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webpbin0 -> 21224 bytes
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/colors.xml11
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/strings.xml13
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/styles.xml6
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/themes.xml16
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/xml/backup_rules.xml10
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/xml/data_extraction_rules.xml10
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/build.gradle4
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/gradle.properties22
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/gradle/wrapper/gradle-wrapper.properties6
-rw-r--r--examples/platforms/android/qml_in_java_based_android_project/settings.gradle17
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/CMakeLists.txt18
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/build.gradle64
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/AndroidManifest.xml26
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/Colors.kt31
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt168
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/drawable/ic_launcher_background.xml74
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/drawable/ic_launcher_foreground.xml30
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/layout/activity_main.xml164
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml6
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml6
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher.webpbin0 -> 4118 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webpbin0 -> 8980 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_round.webpbin0 -> 6056 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher.webpbin0 -> 2650 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webpbin0 -> 5556 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_round.webpbin0 -> 3680 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher.webpbin0 -> 5924 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webpbin0 -> 13218 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webpbin0 -> 8836 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher.webpbin0 -> 10144 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webpbin0 -> 25688 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webpbin0 -> 14828 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webpbin0 -> 14820 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webpbin0 -> 41052 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webpbin0 -> 21224 bytes
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/colors.xml10
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/strings.xml12
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/styles.xml6
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/themes.xml16
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/xml/backup_rules.xml13
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/xml/data_extraction_rules.xml19
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/build.gradle5
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/gradle.properties23
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/gradle/wrapper/gradle-wrapper.properties6
-rw-r--r--examples/platforms/android/qml_in_kotlin_based_android_project/settings.gradle17
-rw-r--r--examples/qml/CMakeLists.txt15
-rw-r--r--examples/qml/doc/src/qml-extending.qdoc339
-rw-r--r--examples/qml/dynamicscene/CMakeLists.txt52
-rw-r--r--examples/qml/dynamicscene/GenericSceneItem.qml12
-rw-r--r--examples/qml/dynamicscene/PaletteItem.qml22
-rw-r--r--examples/qml/dynamicscene/PerspectiveItem.qml27
-rw-r--r--examples/qml/dynamicscene/Sun.qml36
-rw-r--r--examples/qml/dynamicscene/doc/images/qml-dynamicscene-example.pngbin32286 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/doc/src/dynamicscene.qdoc10
-rw-r--r--examples/qml/dynamicscene/dynamicscene.pro9
-rw-r--r--examples/qml/dynamicscene/dynamicscene.qml237
-rw-r--r--examples/qml/dynamicscene/dynamicscene.qmlproject16
-rw-r--r--examples/qml/dynamicscene/dynamicscene.qrc18
-rw-r--r--examples/qml/dynamicscene/images/NOTE1
-rw-r--r--examples/qml/dynamicscene/images/face-smile.pngbin15408 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/images/moon.pngbin1757 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/images/rabbit_brown.pngbin1245 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/images/rabbit_bw.pngbin1759 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/images/star.pngbin259 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/images/sun.pngbin8110 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/images/tree_s.pngbin3406 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/itemCreation.js62
-rw-r--r--examples/qml/dynamicscene/main.cpp4
-rw-r--r--examples/qml/locale/locale.qml101
-rw-r--r--examples/qml/networkaccessmanagerfactory/CMakeLists.txt44
-rw-r--r--examples/qml/networkaccessmanagerfactory/doc/src/networkaccessmanagerfactory.qdoc15
-rw-r--r--examples/qml/networkaccessmanagerfactory/main.cpp97
-rw-r--r--examples/qml/networkaccessmanagerfactory/networkaccessmanagerfactory.pro8
-rw-r--r--examples/qml/networkaccessmanagerfactory/networkaccessmanagerfactory.qmlproject14
-rw-r--r--examples/qml/networkaccessmanagerfactory/networkaccessmanagerfactory.qrc5
-rw-r--r--examples/qml/networkaccessmanagerfactory/view.qml10
-rw-r--r--examples/qml/qml-i18n/CMakeLists.txt51
-rw-r--r--examples/qml/qml-i18n/Main.qml (renamed from examples/qml/qml-i18n/qml-i18n.qml)0
-rw-r--r--examples/qml/qml-i18n/doc/src/i18n.qdoc5
-rw-r--r--examples/qml/qml-i18n/i18n/base.ts4
-rw-r--r--examples/qml/qml-i18n/i18n/qml_en_AU.ts4
-rw-r--r--examples/qml/qml-i18n/i18n/qml_fr.ts4
-rw-r--r--examples/qml/qml-i18n/main.cpp14
-rw-r--r--examples/qml/qml-i18n/qml-i18n.pro1
-rw-r--r--examples/qml/qml-i18n/qml-i18n.qrc5
-rw-r--r--examples/qml/qml-i18n/qmldir5
-rw-r--r--examples/qml/qml.pro17
-rw-r--r--examples/qml/qmldom/CMakeLists.txt37
-rw-r--r--examples/qml/qmldom/qmldomloadeditwrite.cpp500
-rw-r--r--examples/qml/qmlextensionplugins/CMakeLists.txt61
-rw-r--r--examples/qml/qmlextensionplugins/doc/images/qml-plugins-example.pngbin15773 -> 0 bytes
-rw-r--r--examples/qml/qmlextensionplugins/doc/src/qmlpluginex.qdoc43
-rw-r--r--examples/qml/qmlextensionplugins/imports/TimeExample/Clock.qml51
-rw-r--r--examples/qml/qmlextensionplugins/imports/TimeExample/center.pngbin765 -> 0 bytes
-rw-r--r--examples/qml/qmlextensionplugins/imports/TimeExample/clock.pngbin20653 -> 0 bytes
-rw-r--r--examples/qml/qmlextensionplugins/imports/TimeExample/hour.pngbin518 -> 0 bytes
-rw-r--r--examples/qml/qmlextensionplugins/imports/TimeExample/minute.pngbin528 -> 0 bytes
-rw-r--r--examples/qml/qmlextensionplugins/imports/TimeExample/qmldir3
-rw-r--r--examples/qml/qmlextensionplugins/plugin.cpp15
-rw-r--r--examples/qml/qmlextensionplugins/plugins.qml16
-rw-r--r--examples/qml/qmlextensionplugins/plugins.qmlproject18
-rw-r--r--examples/qml/qmlextensionplugins/qmlextensionplugins.pro46
-rw-r--r--examples/qml/qmlextensionplugins/timemodel.cpp51
-rw-r--r--examples/qml/qmlextensionplugins/timemodel.h64
-rw-r--r--examples/qml/referenceexamples/CMakeLists.txt18
-rw-r--r--examples/qml/referenceexamples/adding/CMakeLists.txt42
-rw-r--r--examples/qml/referenceexamples/adding/adding.pro13
-rw-r--r--examples/qml/referenceexamples/adding/adding.qrc5
-rw-r--r--examples/qml/referenceexamples/adding/example.qml11
-rw-r--r--examples/qml/referenceexamples/adding/main.cpp26
-rw-r--r--examples/qml/referenceexamples/adding/person.cpp27
-rw-r--r--examples/qml/referenceexamples/adding/person.h32
-rw-r--r--examples/qml/referenceexamples/attached/CMakeLists.txt44
-rw-r--r--examples/qml/referenceexamples/attached/attached.pro15
-rw-r--r--examples/qml/referenceexamples/attached/attached.qrc5
-rw-r--r--examples/qml/referenceexamples/attached/birthdayparty.cpp45
-rw-r--r--examples/qml/referenceexamples/attached/birthdayparty.h57
-rw-r--r--examples/qml/referenceexamples/attached/example.qml32
-rw-r--r--examples/qml/referenceexamples/attached/main.cpp48
-rw-r--r--examples/qml/referenceexamples/attached/person.cpp59
-rw-r--r--examples/qml/referenceexamples/attached/person.h75
-rw-r--r--examples/qml/referenceexamples/binding/CMakeLists.txt45
-rw-r--r--examples/qml/referenceexamples/binding/binding.pro17
-rw-r--r--examples/qml/referenceexamples/binding/binding.qrc5
-rw-r--r--examples/qml/referenceexamples/binding/birthdayparty.cpp66
-rw-r--r--examples/qml/referenceexamples/binding/birthdayparty.h67
-rw-r--r--examples/qml/referenceexamples/binding/example.qml41
-rw-r--r--examples/qml/referenceexamples/binding/happybirthdaysong.cpp47
-rw-r--r--examples/qml/referenceexamples/binding/happybirthdaysong.h40
-rw-r--r--examples/qml/referenceexamples/binding/main.cpp48
-rw-r--r--examples/qml/referenceexamples/binding/person.cpp79
-rw-r--r--examples/qml/referenceexamples/binding/person.h84
-rw-r--r--examples/qml/referenceexamples/coercion/CMakeLists.txt43
-rw-r--r--examples/qml/referenceexamples/coercion/birthdayparty.cpp29
-rw-r--r--examples/qml/referenceexamples/coercion/birthdayparty.h34
-rw-r--r--examples/qml/referenceexamples/coercion/coercion.pro15
-rw-r--r--examples/qml/referenceexamples/coercion/coercion.qrc5
-rw-r--r--examples/qml/referenceexamples/coercion/example.qml18
-rw-r--r--examples/qml/referenceexamples/coercion/main.cpp35
-rw-r--r--examples/qml/referenceexamples/coercion/person.cpp24
-rw-r--r--examples/qml/referenceexamples/coercion/person.h54
-rw-r--r--examples/qml/referenceexamples/default/CMakeLists.txt43
-rw-r--r--examples/qml/referenceexamples/default/birthdayparty.cpp30
-rw-r--r--examples/qml/referenceexamples/default/birthdayparty.h35
-rw-r--r--examples/qml/referenceexamples/default/default.pro15
-rw-r--r--examples/qml/referenceexamples/default/default.qrc5
-rw-r--r--examples/qml/referenceexamples/default/example.qml17
-rw-r--r--examples/qml/referenceexamples/default/main.cpp34
-rw-r--r--examples/qml/referenceexamples/default/person.cpp24
-rw-r--r--examples/qml/referenceexamples/default/person.h45
-rw-r--r--examples/qml/referenceexamples/extended/CMakeLists.txt44
-rw-r--r--examples/qml/referenceexamples/extended/example.qml10
-rw-r--r--examples/qml/referenceexamples/extended/extended.pro13
-rw-r--r--examples/qml/referenceexamples/extended/extended.qrc5
-rw-r--r--examples/qml/referenceexamples/extended/lineedit.cpp71
-rw-r--r--examples/qml/referenceexamples/extended/lineedit.h47
-rw-r--r--examples/qml/referenceexamples/extended/main.cpp27
-rw-r--r--examples/qml/referenceexamples/grouped/CMakeLists.txt44
-rw-r--r--examples/qml/referenceexamples/grouped/birthdayparty.cpp29
-rw-r--r--examples/qml/referenceexamples/grouped/birthdayparty.h34
-rw-r--r--examples/qml/referenceexamples/grouped/example.qml41
-rw-r--r--examples/qml/referenceexamples/grouped/grouped.pro15
-rw-r--r--examples/qml/referenceexamples/grouped/grouped.qrc5
-rw-r--r--examples/qml/referenceexamples/grouped/main.cpp42
-rw-r--r--examples/qml/referenceexamples/grouped/person.cpp59
-rw-r--r--examples/qml/referenceexamples/grouped/person.h77
-rw-r--r--examples/qml/referenceexamples/methods/CMakeLists.txt43
-rw-r--r--examples/qml/referenceexamples/methods/birthdayparty.cpp39
-rw-r--r--examples/qml/referenceexamples/methods/birthdayparty.h36
-rw-r--r--examples/qml/referenceexamples/methods/example.qml21
-rw-r--r--examples/qml/referenceexamples/methods/main.cpp29
-rw-r--r--examples/qml/referenceexamples/methods/methods.pro15
-rw-r--r--examples/qml/referenceexamples/methods/methods.qrc5
-rw-r--r--examples/qml/referenceexamples/methods/person.cpp24
-rw-r--r--examples/qml/referenceexamples/methods/person.h30
-rw-r--r--examples/qml/referenceexamples/properties/CMakeLists.txt43
-rw-r--r--examples/qml/referenceexamples/properties/birthdayparty.cpp87
-rw-r--r--examples/qml/referenceexamples/properties/birthdayparty.h52
-rw-r--r--examples/qml/referenceexamples/properties/example.qml18
-rw-r--r--examples/qml/referenceexamples/properties/main.cpp28
-rw-r--r--examples/qml/referenceexamples/properties/person.cpp24
-rw-r--r--examples/qml/referenceexamples/properties/person.h30
-rw-r--r--examples/qml/referenceexamples/properties/properties.pro15
-rw-r--r--examples/qml/referenceexamples/properties/properties.qrc5
-rw-r--r--examples/qml/referenceexamples/referenceexamples.pro17
-rw-r--r--examples/qml/referenceexamples/referenceexamples.qmlproject14
-rw-r--r--examples/qml/referenceexamples/signal/CMakeLists.txt44
-rw-r--r--examples/qml/referenceexamples/signal/birthdayparty.cpp51
-rw-r--r--examples/qml/referenceexamples/signal/birthdayparty.h57
-rw-r--r--examples/qml/referenceexamples/signal/example.qml36
-rw-r--r--examples/qml/referenceexamples/signal/main.cpp47
-rw-r--r--examples/qml/referenceexamples/signal/person.cpp59
-rw-r--r--examples/qml/referenceexamples/signal/person.h75
-rw-r--r--examples/qml/referenceexamples/signal/signal.pro15
-rw-r--r--examples/qml/referenceexamples/signal/signal.qrc5
-rw-r--r--examples/qml/referenceexamples/valuesource/CMakeLists.txt45
-rw-r--r--examples/qml/referenceexamples/valuesource/birthdayparty.cpp60
-rw-r--r--examples/qml/referenceexamples/valuesource/birthdayparty.h64
-rw-r--r--examples/qml/referenceexamples/valuesource/example.qml40
-rw-r--r--examples/qml/referenceexamples/valuesource/happybirthdaysong.cpp43
-rw-r--r--examples/qml/referenceexamples/valuesource/happybirthdaysong.h44
-rw-r--r--examples/qml/referenceexamples/valuesource/main.cpp48
-rw-r--r--examples/qml/referenceexamples/valuesource/person.cpp59
-rw-r--r--examples/qml/referenceexamples/valuesource/person.h77
-rw-r--r--examples/qml/referenceexamples/valuesource/valuesource.pro17
-rw-r--r--examples/qml/referenceexamples/valuesource/valuesource.qrc5
-rw-r--r--examples/qml/shell/CMakeLists.txt47
-rw-r--r--examples/qml/shell/main.cpp116
-rw-r--r--examples/qml/shell/shell.pro9
-rw-r--r--examples/qml/tutorials/CMakeLists.txt4
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/CMakeLists.txt12
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/CMakeLists.txt50
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/Main.qml16
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/baseproject.pro13
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/baseproject.qrc6
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/birthdayparty.cpp99
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/birthdayparty.h48
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/main.cpp32
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/person.cpp30
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/person.h34
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/qmldir.in4
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/CMakeLists.txt50
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/Main.qml16
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/birthdayparty.cpp99
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/birthdayparty.h48
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/coercion.pro12
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/coercion.qrc6
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/main.cpp37
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/person.cpp30
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/person.h51
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/qmldir.in4
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/CMakeLists.txt50
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/Main.qml15
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/birthdayparty.cpp99
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/birthdayparty.h49
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/default.pro12
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/default.qrc6
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/main.cpp37
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/person.cpp30
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/person.h51
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/qmldir.in4
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/CMakeLists.txt49
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/Main.qml33
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/birthdayparty.cpp99
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/birthdayparty.h49
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/grouped.pro12
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/grouped.qrc6
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/main.cpp45
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/person.cpp96
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/person.h98
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/qmldir.in5
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/CMakeLists.txt49
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/Main.qml23
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/attached.pro12
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/attached.qrc6
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/birthdayparty.cpp117
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/birthdayparty.h72
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/main.cpp48
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/person.cpp96
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/person.h98
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/qmldir.in5
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/CMakeLists.txt50
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/Main.qml38
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/birthdayparty.cpp137
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/birthdayparty.h82
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/happybirthdaysong.cpp45
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/happybirthdaysong.h39
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/main.cpp49
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/person.cpp96
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/person.h98
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/qmldir.in5
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/valuesource.pro14
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/valuesource.qrc6
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/CMakeLists.txt63
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/Main.qml43
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/application.pro26
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/birthdayparty.cpp150
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/birthdayparty.h90
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/foreign.pro7
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/foreign.qrc6
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/foreigndisplay.h20
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/happybirthdaysong.cpp45
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/happybirthdaysong.h39
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/CMakeLists.txt17
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/ThirdPartyDisplay.cpp45
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/ThirdPartyDisplay.h36
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/library.pro8
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/main.cpp50
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/person.cpp96
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/person.h98
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/qmldir.in5
-rw-r--r--examples/qml/tutorials/extending-qml-advanced/extending-qml-advanced.pro10
-rw-r--r--examples/qml/tutorials/extending-qml/CMakeLists.txt2
-rw-r--r--examples/qml/tutorials/extending-qml/chapter1-basics/App.qml (renamed from examples/qml/tutorials/extending-qml/chapter1-basics/app.qml)0
-rw-r--r--examples/qml/tutorials/extending-qml/chapter1-basics/CMakeLists.txt38
-rw-r--r--examples/qml/tutorials/extending-qml/chapter1-basics/chapter1-basics.qrc5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter1-basics/main.cpp2
-rw-r--r--examples/qml/tutorials/extending-qml/chapter1-basics/qmldir6
-rw-r--r--examples/qml/tutorials/extending-qml/chapter2-methods/App.qml (renamed from examples/qml/tutorials/extending-qml/chapter2-methods/app.qml)0
-rw-r--r--examples/qml/tutorials/extending-qml/chapter2-methods/CMakeLists.txt38
-rw-r--r--examples/qml/tutorials/extending-qml/chapter2-methods/chapter2-methods.qrc5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter2-methods/main.cpp2
-rw-r--r--examples/qml/tutorials/extending-qml/chapter2-methods/qmldir6
-rw-r--r--examples/qml/tutorials/extending-qml/chapter3-bindings/App.qml (renamed from examples/qml/tutorials/extending-qml/chapter3-bindings/app.qml)0
-rw-r--r--examples/qml/tutorials/extending-qml/chapter3-bindings/CMakeLists.txt38
-rw-r--r--examples/qml/tutorials/extending-qml/chapter3-bindings/chapter3-bindings.qrc5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter3-bindings/main.cpp2
-rw-r--r--examples/qml/tutorials/extending-qml/chapter3-bindings/qmldir6
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/App.qml (renamed from examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/app.qml)0
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/CMakeLists.txt37
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/chapter4-customPropertyTypes.qrc5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/main.cpp2
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/qmldir6
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/App.qml (renamed from examples/qml/tutorials/extending-qml/chapter5-listproperties/app.qml)0
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/CMakeLists.txt38
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/chapter5-listproperties.qrc5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/main.cpp2
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/qmldir6
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/App.qml (renamed from examples/qml/tutorials/extending-qml/chapter6-plugins/app.qml)0
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt37
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/CMakeLists.txt42
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/qmldir5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/app.qrc5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/main.cpp4
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/qmldir3
-rw-r--r--examples/qml/xmlhttprequest/CMakeLists.txt44
-rw-r--r--examples/qml/xmlhttprequest/data.xml5
-rw-r--r--examples/qml/xmlhttprequest/doc/images/qml-xmlhttprequest-example.pngbin20934 -> 0 bytes
-rw-r--r--examples/qml/xmlhttprequest/doc/src/xmlhttprequest.qdoc20
-rw-r--r--examples/qml/xmlhttprequest/main.cpp26
-rw-r--r--examples/qml/xmlhttprequest/methods.js34
-rw-r--r--examples/qml/xmlhttprequest/xmlhttprequest.pro15
-rw-r--r--examples/qml/xmlhttprequest/xmlhttprequest.qml28
-rw-r--r--examples/qml/xmlhttprequest/xmlhttprequest.qmlproject16
-rw-r--r--examples/qml/xmlhttprequest/xmlhttprequest.qrc7
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter1/CMakeLists.txt22
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter1/helloplugin.cpp19
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter1/helloplugin.h21
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter1/plugin.json13
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter1/test.qml24
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter2/CMakeLists.txt22
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter2/helloplugin.cpp56
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter2/helloplugin.h21
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter2/plugin.json13
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter2/test.qml24
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter3/CMakeLists.txt22
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter3/helloplugin.cpp64
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter3/helloplugin.h21
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter3/plugin.json13
-rw-r--r--examples/qmlcompiler/tutorials/helloworld/chapter3/test.qml26
-rw-r--r--examples/qmltest/CMakeLists.txt1
-rw-r--r--examples/qmltest/qmltest.pro2
-rw-r--r--examples/qmltest/qmltest/CMakeLists.txt53
-rw-r--r--examples/qmltest/qmltest/qmltest.pro26
-rw-r--r--examples/qmltest/qmltest/tst_basic.qml41
-rw-r--r--examples/qmltest/qmltest/tst_item.qml20
-rw-r--r--examples/qmltest/qmltest/tst_qmltest.cpp5
-rw-r--r--examples/quick/CMakeLists.txt21
-rw-r--r--examples/quick/animation/CMakeLists.txt34
-rw-r--r--examples/quick/animation/behaviors/tvtennis.qml77
-rw-r--r--examples/quick/animation/behaviors/wigglytext.qml16
-rw-r--r--examples/quick/animation/doc/src/animation.qdoc2
-rw-r--r--examples/quick/animation/easing/easing.qml4
-rw-r--r--examples/quick/animation/pathanimation/pathanimation.qml4
-rw-r--r--examples/quick/animation/pathinterpolator/pathinterpolator.qml4
-rw-r--r--examples/quick/animation/states/states.qml1
-rw-r--r--examples/quick/canvas/CMakeLists.txt34
-rw-r--r--examples/quick/canvas/LabeledSlider.qml23
-rw-r--r--examples/quick/canvas/bezierCurve/bezierCurve.qml143
-rw-r--r--examples/quick/canvas/canvas.qml25
-rw-r--r--examples/quick/canvas/clip/clip.qml175
-rw-r--r--examples/quick/canvas/doc/src/canvas.qdoc1
-rw-r--r--examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml153
-rw-r--r--examples/quick/canvas/roundedrect/roundedrect.qml130
-rw-r--r--examples/quick/canvas/smile/smile.qml143
-rw-r--r--examples/quick/canvas/squircle/squircle.qml166
-rw-r--r--examples/quick/canvas/tiger/tiger.qml131
-rw-r--r--examples/quick/customitems/CMakeLists.txt3
-rw-r--r--examples/quick/customitems/customitems.pro3
-rw-r--r--examples/quick/customitems/dialcontrol/CMakeLists.txt43
-rw-r--r--examples/quick/customitems/dialcontrol/Dial.qml2
-rw-r--r--examples/quick/customitems/dialcontrol/QuitButton.qml1
-rw-r--r--examples/quick/customitems/dialcontrol/dialcontrol.qml2
-rw-r--r--examples/quick/customitems/dialcontrol/doc/src/dialcontrol.qdoc1
-rw-r--r--examples/quick/customitems/flipable/CMakeLists.txt36
-rw-r--r--examples/quick/customitems/flipable/doc/src/flipable.qdoc1
-rw-r--r--examples/quick/customitems/maskedmousearea/CMakeLists.txt50
-rw-r--r--examples/quick/customitems/maskedmousearea/images/cloud_1.pngbin49395 -> 0 bytes
-rw-r--r--examples/quick/customitems/maskedmousearea/images/cloud_2.pngbin32288 -> 0 bytes
-rw-r--r--examples/quick/customitems/maskedmousearea/images/moon.pngbin13263 -> 0 bytes
-rw-r--r--examples/quick/customitems/maskedmousearea/main.cpp17
-rw-r--r--examples/quick/customitems/maskedmousearea/maskedmousearea.cpp104
-rw-r--r--examples/quick/customitems/maskedmousearea/maskedmousearea.h62
-rw-r--r--examples/quick/customitems/maskedmousearea/maskedmousearea.pro17
-rw-r--r--examples/quick/customitems/maskedmousearea/maskedmousearea.qml95
-rw-r--r--examples/quick/customitems/maskedmousearea/maskedmousearea.qmlproject16
-rw-r--r--examples/quick/customitems/maskedmousearea/maskedmousearea.qrc8
-rw-r--r--examples/quick/customitems/painteditem/CMakeLists.txt40
-rw-r--r--examples/quick/customitems/painteditem/TextBalloon/CMakeLists.txt23
-rw-r--r--examples/quick/customitems/painteditem/doc/src/textballoons.qdoc1
-rw-r--r--examples/quick/customitems/painteditem/textballoons.qml8
-rw-r--r--examples/quick/delegatechooser/CMakeLists.txt43
-rw-r--r--examples/quick/delegatechooser/delegatechooser.pro8
-rw-r--r--examples/quick/delegatechooser/delegatechooser.qml99
-rw-r--r--examples/quick/delegatechooser/main.cpp4
-rw-r--r--examples/quick/delegatechooser/qml.qrc5
-rw-r--r--examples/quick/draganddrop/CMakeLists.txt35
-rw-r--r--examples/quick/draganddrop/doc/src/draganddrop.qdoc1
-rw-r--r--examples/quick/draganddrop/draganddrop.qml5
-rw-r--r--examples/quick/draganddrop/draganddrop.qrc1
-rw-r--r--examples/quick/draganddrop/external/externaldraganddrop.qml84
-rw-r--r--examples/quick/draganddrop/tiles/DragTile.qml25
-rw-r--r--examples/quick/draganddrop/tiles/DropTile.qml15
-rw-r--r--examples/quick/draganddrop/tiles/tiles.qml32
-rw-r--r--examples/quick/draganddrop/views/Icon.qml6
-rw-r--r--examples/quick/draganddrop/views/gridview.qml17
-rw-r--r--examples/quick/embeddedinwidgets/CMakeLists.txt36
-rw-r--r--examples/quick/embeddedinwidgets/Main.qml (renamed from examples/quick/embeddedinwidgets/main.qml)0
-rw-r--r--examples/quick/embeddedinwidgets/doc/images/qml-embeddedinwidgets-example.jpgbin0 -> 27138 bytes
-rw-r--r--examples/quick/embeddedinwidgets/doc/src/embeddedinwidgets.qdoc46
-rw-r--r--examples/quick/embeddedinwidgets/embeddedinwidgets.pro11
-rw-r--r--examples/quick/embeddedinwidgets/embeddedinwidgets.qrc6
-rw-r--r--examples/quick/embeddedinwidgets/main.cpp4
-rw-r--r--examples/quick/embeddedinwidgets/qmldir4
-rw-r--r--examples/quick/embeddedinwidgets/reflect.frag3
-rw-r--r--examples/quick/externaldraganddrop/CMakeLists.txt42
-rw-r--r--examples/quick/externaldraganddrop/DragAndDropTextItem.qml67
-rw-r--r--examples/quick/externaldraganddrop/doc/images/qml-dnd2-example.pngbin48666 -> 0 bytes
-rw-r--r--examples/quick/externaldraganddrop/doc/src/externaldraganddrop.qdoc20
-rw-r--r--examples/quick/externaldraganddrop/externaldraganddrop.pro12
-rw-r--r--examples/quick/externaldraganddrop/externaldraganddrop.qml43
-rw-r--r--examples/quick/externaldraganddrop/externaldraganddrop.qmlproject16
-rw-r--r--examples/quick/externaldraganddrop/externaldraganddrop.qrc6
-rw-r--r--examples/quick/externaldraganddrop/main.cpp4
-rw-r--r--examples/quick/imageelements/BorderImageSelector.qml10
-rw-r--r--examples/quick/imageelements/CMakeLists.txt34
-rw-r--r--examples/quick/imageelements/ImageCell.qml8
-rw-r--r--examples/quick/imageelements/MyBorderImage.qml31
-rw-r--r--examples/quick/imageelements/ShadowRectangle.qml20
-rw-r--r--examples/quick/imageelements/animatedimage.qml7
-rw-r--r--examples/quick/imageelements/animatedsprite.qml13
-rw-r--r--examples/quick/imageelements/borderimage.qml88
-rw-r--r--examples/quick/imageelements/doc/src/imageelements.qdoc1
-rw-r--r--examples/quick/imageelements/framestepping.qml6
-rw-r--r--examples/quick/imageelements/image.qml7
-rw-r--r--examples/quick/imageelements/imageelements.qml17
-rw-r--r--examples/quick/imageelements/multiframeborderimage.qml8
-rw-r--r--examples/quick/imageelements/shadows.qml15
-rw-r--r--examples/quick/imageelements/spritesequence.qml26
-rw-r--r--examples/quick/imageprovider/CMakeLists.txt37
-rw-r--r--examples/quick/imageprovider/doc/src/imageprovider.qdoc1
-rw-r--r--examples/quick/imageresponseprovider/CMakeLists.txt26
-rw-r--r--examples/quick/imageresponseprovider/doc/src/imageresponseprovider.qdoc1
-rw-r--r--examples/quick/itemvariablerefreshrate/CMakeLists.txt32
-rw-r--r--examples/quick/itemvariablerefreshrate/doc/src/itemvariablerefreshrate.qdoc1
-rw-r--r--examples/quick/keyinteraction/CMakeLists.txt34
-rw-r--r--examples/quick/keyinteraction/ContextMenu.qml9
-rw-r--r--examples/quick/keyinteraction/GridMenu.qml52
-rw-r--r--examples/quick/keyinteraction/ListMenu.qml82
-rw-r--r--examples/quick/keyinteraction/ListViewDelegate.qml30
-rw-r--r--examples/quick/keyinteraction/TabMenu.qml45
-rw-r--r--examples/quick/keyinteraction/doc/src/keyinteraction.qdoc1
-rw-r--r--examples/quick/keyinteraction/focus.qml40
-rw-r--r--examples/quick/layouts/CMakeLists.txt34
-rw-r--r--examples/quick/layouts/doc/src/qtquicklayouts-examples.qdoc1
-rw-r--r--examples/quick/layouts/layouts.qml35
-rw-r--r--examples/quick/layouts/layouts.qmlproject16
-rw-r--r--examples/quick/localstorage/CMakeLists.txt34
-rw-r--r--examples/quick/localstorage/Database.js20
-rw-r--r--examples/quick/localstorage/Header.qml36
-rw-r--r--examples/quick/localstorage/MyDelegate.qml14
-rw-r--r--examples/quick/localstorage/doc/src/localstorage.qdoc1
-rw-r--r--examples/quick/localstorage/localstorage.qml49
-rw-r--r--examples/quick/models/CMakeLists.txt2
-rw-r--r--examples/quick/models/abstractitemmodel/CMakeLists.txt34
-rw-r--r--examples/quick/models/abstractitemmodel/doc/src/abstractitemmodel-example.qdoc1
-rw-r--r--examples/quick/models/abstractitemmodel/model.h6
-rw-r--r--examples/quick/models/objectlistmodel/CMakeLists.txt34
-rw-r--r--examples/quick/models/objectlistmodel/doc/src/objectlistmodel-example.qdoc1
-rw-r--r--examples/quick/models/stringlistmodel/CMakeLists.txt34
-rw-r--r--examples/quick/models/stringlistmodel/doc/src/stringlistmodel-example.qdoc1
-rw-r--r--examples/quick/mousearea/CMakeLists.txt34
-rw-r--r--examples/quick/mousearea/doc/src/mousearea.qdoc1
-rw-r--r--examples/quick/mousearea/mousearea-wheel-example.qml14
-rw-r--r--examples/quick/mousearea/mousearea.qml127
-rw-r--r--examples/quick/multieffect/CMakeLists.txt2
-rw-r--r--examples/quick/multieffect/itemswitcher/CMakeLists.txt36
-rw-r--r--examples/quick/multieffect/itemswitcher/doc/images/qml-multieffectitemswitcher-example.jpgbin0 -> 69659 bytes
-rw-r--r--examples/quick/multieffect/itemswitcher/doc/src/itemswitcher.qdoc16
-rw-r--r--examples/quick/multieffect/testbed/CMakeLists.txt42
-rw-r--r--examples/quick/multieffect/testbed/doc/images/qml-multieffecttestbed-example.jpgbin0 -> 59436 bytes
-rw-r--r--examples/quick/multieffect/testbed/doc/src/testbed.qdoc16
-rw-r--r--examples/quick/multieffect/testbed/qml.qrc6
-rw-r--r--examples/quick/multieffect/testbed/qml/CustomMultiEffect/BlurHelper.qml66
-rw-r--r--examples/quick/multieffect/testbed/qml/CustomMultiEffect/CustomMultiEffect.qep383
-rw-r--r--examples/quick/multieffect/testbed/qml/CustomMultiEffect/CustomMultiEffect.qml97
-rw-r--r--examples/quick/multieffect/testbed/qml/CustomMultiEffect/bluritems.frag.qsbbin0 -> 1563 bytes
-rw-r--r--examples/quick/multieffect/testbed/qml/CustomMultiEffect/bluritems.vert.qsbbin0 -> 1934 bytes
-rw-r--r--examples/quick/multieffect/testbed/qml/CustomMultiEffect/custommultieffect.frag.qsbbin0 -> 6495 bytes
-rw-r--r--examples/quick/multieffect/testbed/qml/CustomMultiEffect/custommultieffect.vert.qsbbin0 -> 5369 bytes
-rw-r--r--examples/quick/multieffect/testbed/qml/Settings.qml1
-rw-r--r--examples/quick/multieffect/testbed/qml/SettingsView.qml7
-rw-r--r--examples/quick/multieffect/testbed/qml/WarningsView.qml7
-rw-r--r--examples/quick/multieffect/testbed/qml/main.qml37
-rw-r--r--examples/quick/particles/CMakeLists.txt3
-rw-r--r--examples/quick/particles/affectors/CMakeLists.txt34
-rw-r--r--examples/quick/particles/affectors/GreyButton.qml2
-rw-r--r--examples/quick/particles/affectors/attractor.qml1
-rw-r--r--examples/quick/particles/affectors/doc/src/affectors.qdoc1
-rw-r--r--examples/quick/particles/affectors/spritegoal.qml3
-rw-r--r--examples/quick/particles/affectors/turbulence.qml1
-rw-r--r--examples/quick/particles/affectors/wander.qml6
-rw-r--r--examples/quick/particles/emitters/CMakeLists.txt34
-rw-r--r--examples/quick/particles/emitters/customemitter.qml6
-rw-r--r--examples/quick/particles/emitters/doc/src/emitters.qdoc1
-rw-r--r--examples/quick/particles/emitters/velocityfrommotion.qml12
-rw-r--r--examples/quick/particles/imageparticle/CMakeLists.txt34
-rw-r--r--examples/quick/particles/imageparticle/doc/src/imageparticle.qdoc1
-rw-r--r--examples/quick/particles/itemparticle/CMakeLists.txt50
-rw-r--r--examples/quick/particles/itemparticle/delegates.qml58
-rw-r--r--examples/quick/particles/itemparticle/images/rocket.pngbin7315 -> 0 bytes
-rw-r--r--examples/quick/particles/itemparticle/itemparticle.pro10
-rw-r--r--examples/quick/particles/itemparticle/itemparticle.qml262
-rw-r--r--examples/quick/particles/itemparticle/itemparticle.qrc8
-rw-r--r--examples/quick/particles/itemparticle/main.cpp4
-rw-r--r--examples/quick/particles/itemparticle/script.js27
-rw-r--r--examples/quick/particles/particles.pro1
-rw-r--r--examples/quick/particles/system/CMakeLists.txt34
-rw-r--r--examples/quick/particles/system/doc/src/system.qdoc1
-rw-r--r--examples/quick/particles/system/dynamiccomparison.qml25
-rw-r--r--examples/quick/particles/system/dynamicemitters.qml40
-rw-r--r--examples/quick/particles/system/multiplepainters.qml15
-rw-r--r--examples/quick/particles/system/startstop.qml11
-rw-r--r--examples/quick/pointerhandlers/CMakeLists.txt43
-rw-r--r--examples/quick/pointerhandlers/components/CorkPanel.qml118
-rw-r--r--examples/quick/pointerhandlers/components/FlashAnimation.qml8
-rw-r--r--examples/quick/pointerhandlers/components/MouseFeedbackSprite.qml13
-rw-r--r--examples/quick/pointerhandlers/components/QuadPieMenu.qml7
-rw-r--r--examples/quick/pointerhandlers/components/ScrollBar.qml4
-rw-r--r--examples/quick/pointerhandlers/components/images/cork.jpg (renamed from examples/quick/touchinteraction/flickable/cork.jpg)bin149337 -> 149337 bytes
-rw-r--r--examples/quick/pointerhandlers/components/images/note-yellow.png (renamed from examples/quick/touchinteraction/flickable/note-yellow.png)bin54283 -> 54283 bytes
-rw-r--r--examples/quick/pointerhandlers/components/images/tack.png (renamed from examples/quick/touchinteraction/flickable/tack.png)bin7282 -> 7282 bytes
-rw-r--r--examples/quick/pointerhandlers/corkboards.qml51
-rw-r--r--examples/quick/pointerhandlers/doc/images/pointerhandlers-example-fakeflickable.jpgbin0 -> 104984 bytes
-rw-r--r--examples/quick/pointerhandlers/doc/images/pointerhandlers-example-fling.webpbin0 -> 48514 bytes
-rw-r--r--examples/quick/pointerhandlers/doc/images/pointerhandlers-example-joystick.jpgbin0 -> 81973 bytes
-rw-r--r--examples/quick/pointerhandlers/doc/images/pointerhandlers-example-map.webpbin0 -> 424394 bytes
-rw-r--r--examples/quick/pointerhandlers/doc/images/pointerhandlers-example-mixer.webpbin0 -> 185554 bytes
-rw-r--r--examples/quick/pointerhandlers/doc/images/pointerhandlers-example-multibutton.webpbin0 -> 620084 bytes
-rw-r--r--examples/quick/pointerhandlers/doc/images/pointerhandlers-example-piemenu.webpbin0 -> 40846 bytes
-rw-r--r--examples/quick/pointerhandlers/doc/images/pointerhandlers-example-pinchhandler.webpbin0 -> 999018 bytes
-rw-r--r--examples/quick/pointerhandlers/doc/images/pointerhandlers-example-pointhandler.webpbin0 -> 286790 bytes
-rw-r--r--examples/quick/pointerhandlers/doc/images/pointerhandlers-example-taphandler.webpbin0 -> 155468 bytes
-rw-r--r--examples/quick/pointerhandlers/doc/src/pointerhandlers.qdoc171
-rw-r--r--examples/quick/pointerhandlers/images/blur-circle.png (renamed from examples/quick/touchinteraction/multipointtouch/blur-circle.png)bin4279 -> 4279 bytes
-rw-r--r--examples/quick/pointerhandlers/multiflame.qml69
-rw-r--r--examples/quick/pointerhandlers/pointerhandlers.qml6
-rw-r--r--examples/quick/pointerhandlers/qml.qrc9
-rw-r--r--examples/quick/pointerhandlers/tapHandler.qml34
-rw-r--r--examples/quick/positioners/CMakeLists.txt34
-rw-r--r--examples/quick/positioners/doc/src/positioners.qdoc1
-rw-r--r--examples/quick/positioners/positioners-attachedproperties.qml32
-rw-r--r--examples/quick/positioners/positioners-transitions.qml222
-rw-r--r--examples/quick/positioners/positioners.qml4
-rw-r--r--examples/quick/quick-accessibility/CMakeLists.txt34
-rw-r--r--examples/quick/quick-accessibility/doc/src/accessibility.qdoc1
-rw-r--r--examples/quick/quick.pro11
-rw-r--r--examples/quick/quickshapes/CMakeLists.txt18
-rw-r--r--examples/quick/quickshapes/quickshapes.pro2
-rw-r--r--examples/quick/quickshapes/shapes/CMakeLists.txt73
-rw-r--r--examples/quick/quickshapes/shapes/arcDirection.qml59
-rw-r--r--examples/quick/quickshapes/shapes/arcRotation.qml82
-rw-r--r--examples/quick/quickshapes/shapes/capStyles.qml62
-rw-r--r--examples/quick/quickshapes/shapes/clippedtigers.qml110
-rw-r--r--examples/quick/quickshapes/shapes/cubicCurve.qml164
-rw-r--r--examples/quick/quickshapes/shapes/dashPattern.qml43
-rw-r--r--examples/quick/quickshapes/shapes/doc/images/qml-shapes-example.png (renamed from examples/quick/shapes/doc/images/qml-shapes-example.png)bin49261 -> 49261 bytes
-rw-r--r--examples/quick/quickshapes/shapes/doc/src/shapes.qdoc16
-rw-r--r--examples/quick/quickshapes/shapes/ellipticalArcs.qml93
-rw-r--r--examples/quick/quickshapes/shapes/fillItem.qml50
-rw-r--r--examples/quick/quickshapes/shapes/fillRules.qml62
-rw-r--r--examples/quick/quickshapes/shapes/fillTransform.qml46
-rw-r--r--examples/quick/quickshapes/shapes/gradientSpreadModes.qml102
-rw-r--r--examples/quick/quickshapes/shapes/interactive.qml247
-rw-r--r--examples/quick/quickshapes/shapes/joinStyles.qml56
-rw-r--r--examples/quick/quickshapes/shapes/largeOrSmallArc.qml52
-rw-r--r--examples/quick/quickshapes/shapes/linearGradient.qml90
-rw-r--r--examples/quick/quickshapes/shapes/main.cpp4
-rw-r--r--examples/quick/quickshapes/shapes/main.qml20
-rw-r--r--examples/quick/quickshapes/shapes/quadraticCurve.qml57
-rw-r--r--examples/quick/quickshapes/shapes/radialGradient.qml113
-rw-r--r--examples/quick/quickshapes/shapes/rectangle.qml57
-rw-r--r--examples/quick/quickshapes/shapes/sampling.qml257
-rw-r--r--examples/quick/quickshapes/shapes/shapegallery.qml196
-rw-r--r--examples/quick/quickshapes/shapes/shapes.pro10
-rw-r--r--examples/quick/quickshapes/shapes/shapes.qrc30
-rw-r--r--examples/quick/quickshapes/shapes/strokeOrFill.qml120
-rw-r--r--examples/quick/quickshapes/shapes/tapableTriangle.qml76
-rw-r--r--examples/quick/quickshapes/shapes/text.qml32
-rw-r--r--examples/quick/quickshapes/shapes/tiger.qml3670
-rw-r--r--examples/quick/quickshapes/shapes/tigerLoader.qml32
-rw-r--r--examples/quick/quickshapes/shapes/zoomtiger.qml152
-rw-r--r--examples/quick/quickshapes/weatherforecast/BouncyShape.qml33
-rw-r--r--examples/quick/quickshapes/weatherforecast/CMakeLists.txt84
-rw-r--r--examples/quick/quickshapes/weatherforecast/Cloud.qml5
-rw-r--r--examples/quick/quickshapes/weatherforecast/CloudWithLightning.qml5
-rw-r--r--examples/quick/quickshapes/weatherforecast/CloudWithLightningAndRain_generated.qml140
-rw-r--r--examples/quick/quickshapes/weatherforecast/CloudWithLightning_generated.qml142
-rw-r--r--examples/quick/quickshapes/weatherforecast/CloudWithRain.qml5
-rw-r--r--examples/quick/quickshapes/weatherforecast/CloudWithRain_generated.qml114
-rw-r--r--examples/quick/quickshapes/weatherforecast/CloudWithSnow.qml5
-rw-r--r--examples/quick/quickshapes/weatherforecast/CloudWithSnow_generated.qml74
-rw-r--r--examples/quick/quickshapes/weatherforecast/Cloud_generated.qml59
-rw-r--r--examples/quick/quickshapes/weatherforecast/DemoShape.qml12
-rw-r--r--examples/quick/quickshapes/weatherforecast/Europe.qml176
-rw-r--r--examples/quick/quickshapes/weatherforecast/Europe_generated.qml647
-rw-r--r--examples/quick/quickshapes/weatherforecast/Gear.qml5
-rw-r--r--examples/quick/quickshapes/weatherforecast/Gear_generated.qml36
-rw-r--r--examples/quick/quickshapes/weatherforecast/MapLabel.qml65
-rw-r--r--examples/quick/quickshapes/weatherforecast/SettingsDrawer.qml117
-rw-r--r--examples/quick/quickshapes/weatherforecast/Sun.qml5
-rw-r--r--examples/quick/quickshapes/weatherforecast/SunBehindCloud.qml5
-rw-r--r--examples/quick/quickshapes/weatherforecast/SunBehindCloud_generated.qml90
-rw-r--r--examples/quick/quickshapes/weatherforecast/SunBehindLargeCloud_generated.qml90
-rw-r--r--examples/quick/quickshapes/weatherforecast/SunBehindRainCloud.qml5
-rw-r--r--examples/quick/quickshapes/weatherforecast/SunBehindRainCloud_generated.qml138
-rw-r--r--examples/quick/quickshapes/weatherforecast/SunBehindSmallCloud.qml5
-rw-r--r--examples/quick/quickshapes/weatherforecast/SunBehindSmallCloud_generated.qml106
-rw-r--r--examples/quick/quickshapes/weatherforecast/Sun_generated.qml119
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/Europe.svg395
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/OFL.txt93
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/WorkSans-Regular.ttfbin0 -> 191916 bytes
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/apache.txt201
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/attribution.txt10
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/cloud-svgrepo-com.svg54
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/cloud-with-lightning-and-rain-svgrepo-com.svg2
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/cloud-with-lightning-svgrepo-com.svg108
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/cloud-with-rain-svgrepo-com.svg2
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/cloud-with-snow-svgrepo-com.svg2
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/gear-alt-stroke.svg40
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/sun-behind-cloud-svgrepo-com.svg2
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/sun-behind-large-cloud-svgrepo-com.svg2
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/sun-behind-rain-cloud-svgrepo-com.svg2
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/sun-behind-small-cloud-svgrepo-com.svg2
-rw-r--r--examples/quick/quickshapes/weatherforecast/assets/sun-svgrepo-com.svg89
-rw-r--r--examples/quick/quickshapes/weatherforecast/doc/images/qml-weatherforecast-example.pngbin0 -> 219725 bytes
-rw-r--r--examples/quick/quickshapes/weatherforecast/doc/images/settings.pngbin0 -> 232654 bytes
-rw-r--r--examples/quick/quickshapes/weatherforecast/doc/images/zoomed.pngbin0 -> 173748 bytes
-rw-r--r--examples/quick/quickshapes/weatherforecast/doc/src/weatherforecast.qdoc125
-rw-r--r--examples/quick/quickshapes/weatherforecast/main.cpp25
-rw-r--r--examples/quick/quickshapes/weatherforecast/main.qml358
-rw-r--r--examples/quick/quickshapes/weatherforecast/qt_attribution.json55
-rw-r--r--examples/quick/quickshapes/weatherforecast/qtquickcontrols2.conf (renamed from examples/quickcontrols/sidepanel/qtquickcontrols2.conf)0
-rw-r--r--examples/quick/quickshapes/weatherforecast/weatherforecast.pro10
-rw-r--r--examples/quick/quickshapes/weatherforecast/weatherforecast.qrc33
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt35
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc1
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp2
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag3
-rw-r--r--examples/quick/quickwidgets/quickwidget/CMakeLists.txt35
-rw-r--r--examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc2
-rw-r--r--examples/quick/quickwidgets/quickwidget/main.cpp25
-rw-r--r--examples/quick/quickwidgets/quickwidget/rotatingsquare.qml2
-rw-r--r--examples/quick/rendercontrol/CMakeLists.txt5
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/CMakeLists.txt34
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/demo.qml2
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/doc/src/rendercontrol_d3d11.qdoc2
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/quad.frag3
-rw-r--r--examples/quick/rendercontrol/rendercontrol_opengl/CMakeLists.txt36
-rw-r--r--examples/quick/rendercontrol/rendercontrol_opengl/cuberenderer.cpp2
-rw-r--r--examples/quick/rendercontrol/rendercontrol_opengl/demo.qml2
-rw-r--r--examples/quick/rendercontrol/rendercontrol_opengl/doc/src/rendercontrol_opengl.qdoc2
-rw-r--r--examples/quick/rendercontrol/rendercontrol_rhi/CMakeLists.txt44
-rw-r--r--examples/quick/rendercontrol/rendercontrol_rhi/demo.qml156
-rw-r--r--examples/quick/rendercontrol/rendercontrol_rhi/doc/images/rendercontrol-rhi-example.jpgbin0 -> 117091 bytes
-rw-r--r--examples/quick/rendercontrol/rendercontrol_rhi/doc/src/rendercontrol_rhi.qdoc140
-rw-r--r--examples/quick/rendercontrol/rendercontrol_rhi/main.cpp640
-rw-r--r--examples/quick/rendercontrol/rendercontrol_rhi/rendercontrol_rhi.pro10
-rw-r--r--examples/quick/rendercontrol/rendercontrol_rhi/rendercontrol_rhi.qrc5
-rw-r--r--examples/quick/responsivelayouts/CMakeLists.txt47
-rw-r--r--examples/quick/responsivelayouts/doc/images/qtquicklayouts-example-responsivelayouts.pngbin0 -> 34381 bytes
-rw-r--r--examples/quick/responsivelayouts/doc/src/qtquickresponsiveLayouts-examples.qdoc67
-rw-r--r--examples/quick/responsivelayouts/icons/grid.svg4
-rw-r--r--examples/quick/responsivelayouts/icons/settings.svg4
-rw-r--r--examples/quick/responsivelayouts/icons/text.svg4
-rw-r--r--examples/quick/responsivelayouts/main.cpp15
-rw-r--r--examples/quick/responsivelayouts/responsivelayouts.pro14
-rw-r--r--examples/quick/responsivelayouts/responsivelayouts.qml160
-rw-r--r--examples/quick/responsivelayouts/responsivelayouts.qrc8
-rw-r--r--examples/quick/righttoleft/CMakeLists.txt48
-rw-r--r--examples/quick/righttoleft/doc/images/qml-righttoleft-example.pngbin35323 -> 0 bytes
-rw-r--r--examples/quick/righttoleft/doc/src/righttoleft.qdoc24
-rw-r--r--examples/quick/righttoleft/layoutdirection/layoutdirection.qml218
-rw-r--r--examples/quick/righttoleft/layoutdirection/layoutdirection.qmlproject16
-rw-r--r--examples/quick/righttoleft/layoutmirroring/layoutmirroring.qml166
-rw-r--r--examples/quick/righttoleft/layoutmirroring/layoutmirroring.qmlproject16
-rw-r--r--examples/quick/righttoleft/main.cpp4
-rw-r--r--examples/quick/righttoleft/righttoleft.pro10
-rw-r--r--examples/quick/righttoleft/righttoleft.qml19
-rw-r--r--examples/quick/righttoleft/righttoleft.qmlproject16
-rw-r--r--examples/quick/righttoleft/righttoleft.qrc8
-rw-r--r--examples/quick/righttoleft/textalignment/textalignment.qml421
-rw-r--r--examples/quick/righttoleft/textalignment/textalignment.qmlproject16
-rw-r--r--examples/quick/scenegraph/CMakeLists.txt5
-rw-r--r--examples/quick/scenegraph/customgeometry/CMakeLists.txt29
-rw-r--r--examples/quick/scenegraph/customgeometry/doc/src/customgeometry.qdoc34
-rw-r--r--examples/quick/scenegraph/custommaterial/CMakeLists.txt31
-rw-r--r--examples/quick/scenegraph/custommaterial/doc/src/custommaterial.qdoc1
-rw-r--r--examples/quick/scenegraph/custommaterial/shaders/mandelbrot.frag22
-rw-r--r--examples/quick/scenegraph/custommaterial/shaders/mandelbrot.frag.qsbbin2538 -> 2603 bytes
-rw-r--r--examples/quick/scenegraph/custommaterial/shaders/mandelbrot.vert.qsbbin1547 -> 1521 bytes
-rw-r--r--examples/quick/scenegraph/customrendernode/CMakeLists.txt33
-rw-r--r--examples/quick/scenegraph/customrendernode/customrender.cpp189
-rw-r--r--examples/quick/scenegraph/customrendernode/customrender.h7
-rw-r--r--examples/quick/scenegraph/customrendernode/doc/images/customrendernode-example.gifbin44088 -> 0 bytes
-rw-r--r--examples/quick/scenegraph/customrendernode/doc/images/customrendernode-example.jpgbin0 -> 38552 bytes
-rw-r--r--examples/quick/scenegraph/customrendernode/doc/src/customrendernode.qdoc128
-rw-r--r--examples/quick/scenegraph/customrendernode/main.cpp28
-rw-r--r--examples/quick/scenegraph/customrendernode/main.qml16
-rw-r--r--examples/quick/scenegraph/customrendernode/shaders/customrender.frag3
-rw-r--r--examples/quick/scenegraph/d3d11underqml/CMakeLists.txt31
-rw-r--r--examples/quick/scenegraph/d3d11underqml/doc/src/d3d11underqml.qdoc1
-rw-r--r--examples/quick/scenegraph/d3d11underqml/squircle.frag3
-rw-r--r--examples/quick/scenegraph/fboitem/CMakeLists.txt46
-rw-r--r--examples/quick/scenegraph/fboitem/doc/images/fboitem-example.jpgbin25863 -> 0 bytes
-rw-r--r--examples/quick/scenegraph/fboitem/doc/src/fboitem.qdoc12
-rw-r--r--examples/quick/scenegraph/fboitem/fboinsgrenderer.cpp38
-rw-r--r--examples/quick/scenegraph/fboitem/fboinsgrenderer.h19
-rw-r--r--examples/quick/scenegraph/fboitem/fboitem.pro20
-rw-r--r--examples/quick/scenegraph/fboitem/fboitem.qrc6
-rw-r--r--examples/quick/scenegraph/fboitem/main.cpp22
-rw-r--r--examples/quick/scenegraph/fboitem/main.qml82
-rw-r--r--examples/quick/scenegraph/fboitem/shaders/checker.frag22
-rw-r--r--examples/quick/scenegraph/fboitem/shaders/checker.frag.qsbbin953 -> 0 bytes
-rw-r--r--examples/quick/scenegraph/graph/CMakeLists.txt29
-rw-r--r--examples/quick/scenegraph/graph/doc/src/graph.qdoc1
-rw-r--r--examples/quick/scenegraph/graph/main.cpp2
-rw-r--r--examples/quick/scenegraph/graph/main.qml12
-rw-r--r--examples/quick/scenegraph/graph/shaders/line.frag3
-rw-r--r--examples/quick/scenegraph/graph/shaders/noisy.frag5
-rw-r--r--examples/quick/scenegraph/graph/shaders/noisy.frag.qsbbin1763 -> 1760 bytes
-rw-r--r--examples/quick/scenegraph/graph/shaders/noisy.vert4
-rw-r--r--examples/quick/scenegraph/graph/shaders/noisy.vert.qsbbin1650 -> 1646 bytes
-rw-r--r--examples/quick/scenegraph/metaltextureimport/CMakeLists.txt31
-rw-r--r--examples/quick/scenegraph/metaltextureimport/doc/src/metaltextureimport.qdoc6
-rw-r--r--examples/quick/scenegraph/metaltextureimport/squircle.frag3
-rw-r--r--examples/quick/scenegraph/metalunderqml/CMakeLists.txt31
-rw-r--r--examples/quick/scenegraph/metalunderqml/doc/src/metalunderqml.qdoc1
-rw-r--r--examples/quick/scenegraph/metalunderqml/squircle.frag3
-rw-r--r--examples/quick/scenegraph/openglunderqml/CMakeLists.txt31
-rw-r--r--examples/quick/scenegraph/openglunderqml/doc/src/openglunderqml.qdoc2
-rw-r--r--examples/quick/scenegraph/openglunderqml/squircle.cpp30
-rw-r--r--examples/quick/scenegraph/openglunderqml/squircle.h2
-rw-r--r--examples/quick/scenegraph/rhitextureitem/CMakeLists.txt77
-rw-r--r--examples/quick/scenegraph/rhitextureitem/SettingsDrawer.qml117
-rw-r--r--examples/quick/scenegraph/rhitextureitem/doc/images/rhitextureitem-example.jpgbin0 -> 96428 bytes
-rw-r--r--examples/quick/scenegraph/rhitextureitem/doc/src/rhitextureitem.qdoc106
-rw-r--r--examples/quick/scenegraph/rhitextureitem/icon_settings.pngbin0 -> 3175 bytes
-rw-r--r--examples/quick/scenegraph/rhitextureitem/icon_settings@2x.pngbin0 -> 6616 bytes
-rw-r--r--examples/quick/scenegraph/rhitextureitem/icon_settings@3x.pngbin0 -> 10083 bytes
-rw-r--r--examples/quick/scenegraph/rhitextureitem/icon_settings@4x.pngbin0 -> 13502 bytes
-rw-r--r--examples/quick/scenegraph/rhitextureitem/main.cpp18
-rw-r--r--examples/quick/scenegraph/rhitextureitem/main.qml259
-rw-r--r--examples/quick/scenegraph/rhitextureitem/prebuilts_for_qmake/checker.frag.qsbbin0 -> 1611 bytes
-rw-r--r--examples/quick/scenegraph/rhitextureitem/prebuilts_for_qmake/color.frag.qsbbin0 -> 853 bytes
-rw-r--r--examples/quick/scenegraph/rhitextureitem/prebuilts_for_qmake/color.vert.qsbbin0 -> 1256 bytes
-rw-r--r--examples/quick/scenegraph/rhitextureitem/rhitextureitem.cpp141
-rw-r--r--examples/quick/scenegraph/rhitextureitem/rhitextureitem.h57
-rw-r--r--examples/quick/scenegraph/rhitextureitem/rhitextureitem.pro16
-rw-r--r--examples/quick/scenegraph/rhitextureitem/rhitextureitem.qrc8
-rw-r--r--examples/quick/scenegraph/rhitextureitem/shaders/checker.frag26
-rw-r--r--examples/quick/scenegraph/rhitextureitem/shaders/color.frag13
-rw-r--r--examples/quick/scenegraph/rhitextureitem/shaders/color.vert16
-rw-r--r--examples/quick/scenegraph/rhiunderqml/CMakeLists.txt61
-rw-r--r--examples/quick/scenegraph/rhiunderqml/doc/images/rhiunderqml-example.jpgbin0 -> 35984 bytes
-rw-r--r--examples/quick/scenegraph/rhiunderqml/doc/src/rhiunderqml.qdoc236
-rw-r--r--examples/quick/scenegraph/rhiunderqml/main.cpp17
-rw-r--r--examples/quick/scenegraph/rhiunderqml/main.qml39
-rw-r--r--examples/quick/scenegraph/rhiunderqml/prebuilts_for_qmake/squircle_rhi.frag.qsbbin0 -> 1537 bytes
-rw-r--r--examples/quick/scenegraph/rhiunderqml/prebuilts_for_qmake/squircle_rhi.vert.qsbbin0 -> 1214 bytes
-rw-r--r--examples/quick/scenegraph/rhiunderqml/rhisquircle.cpp224
-rw-r--r--examples/quick/scenegraph/rhiunderqml/rhisquircle.h43
-rw-r--r--examples/quick/scenegraph/rhiunderqml/rhiunderqml.pro11
-rw-r--r--examples/quick/scenegraph/rhiunderqml/rhiunderqml.qrc7
-rw-r--r--examples/quick/scenegraph/scenegraph.pro7
-rw-r--r--examples/quick/scenegraph/shared/logorenderer.cpp219
-rw-r--r--examples/quick/scenegraph/shared/logorenderer.h41
-rw-r--r--examples/quick/scenegraph/shared/squircle_rhi.frag14
-rw-r--r--examples/quick/scenegraph/shared/squircle_rhi.vert7
-rw-r--r--examples/quick/scenegraph/threadedanimation/CMakeLists.txt31
-rw-r--r--examples/quick/scenegraph/threadedanimation/doc/images/threadedanimation-example.jpgbin0 -> 37409 bytes
-rw-r--r--examples/quick/scenegraph/threadedanimation/doc/src/threadedanimation.qdoc33
-rw-r--r--examples/quick/scenegraph/twotextureproviders/CMakeLists.txt31
-rw-r--r--examples/quick/scenegraph/twotextureproviders/doc/src/twotextureproviders.qdoc1
-rw-r--r--examples/quick/scenegraph/twotextureproviders/shaders/checker.frag3
-rw-r--r--examples/quick/scenegraph/twotextureproviders/shaders/xorblender.frag3
-rw-r--r--examples/quick/scenegraph/vulkantextureimport/CMakeLists.txt31
-rw-r--r--examples/quick/scenegraph/vulkantextureimport/doc/src/vulkantextureimport.qdoc3
-rw-r--r--examples/quick/scenegraph/vulkanunderqml/CMakeLists.txt31
-rw-r--r--examples/quick/scenegraph/vulkanunderqml/doc/src/vulkanunderqml.qdoc88
-rw-r--r--examples/quick/shadereffects/CMakeLists.txt34
-rw-r--r--examples/quick/shadereffects/content/shaders/blur.frag3
-rw-r--r--examples/quick/shadereffects/content/shaders/colorize.frag3
-rw-r--r--examples/quick/shadereffects/content/shaders/outline.frag3
-rw-r--r--examples/quick/shadereffects/content/shaders/shadow.frag3
-rw-r--r--examples/quick/shadereffects/content/shaders/wobble.frag3
-rw-r--r--examples/quick/shadereffects/doc/src/shadereffects.qdoc1
-rw-r--r--examples/quick/shadereffects/shadereffects.qml8
-rw-r--r--examples/quick/shapes/CMakeLists.txt69
-rw-r--r--examples/quick/shapes/arcDirection.qml52
-rw-r--r--examples/quick/shapes/arcRotation.qml68
-rw-r--r--examples/quick/shapes/capStyles.qml47
-rw-r--r--examples/quick/shapes/clippedtigers.qml90
-rw-r--r--examples/quick/shapes/cubicCurve.qml129
-rw-r--r--examples/quick/shapes/dashPattern.qml53
-rw-r--r--examples/quick/shapes/doc/src/shapes.qdoc15
-rw-r--r--examples/quick/shapes/ellipticalArcs.qml70
-rw-r--r--examples/quick/shapes/fillRules.qml44
-rw-r--r--examples/quick/shapes/gradientSpreadModes.qml68
-rw-r--r--examples/quick/shapes/interactive.qml214
-rw-r--r--examples/quick/shapes/joinStyles.qml50
-rw-r--r--examples/quick/shapes/largeOrSmallArc.qml46
-rw-r--r--examples/quick/shapes/linearGradient.qml41
-rw-r--r--examples/quick/shapes/main.cpp4
-rw-r--r--examples/quick/shapes/main.qml19
-rw-r--r--examples/quick/shapes/quadraticCurve.qml55
-rw-r--r--examples/quick/shapes/radialGradient.qml44
-rw-r--r--examples/quick/shapes/sampling.qml139
-rw-r--r--examples/quick/shapes/shapegallery.qml153
-rw-r--r--examples/quick/shapes/shapes.pro10
-rw-r--r--examples/quick/shapes/shapes.qrc27
-rw-r--r--examples/quick/shapes/strokeOrFill.qml107
-rw-r--r--examples/quick/shapes/tapableTriangle.qml54
-rw-r--r--examples/quick/shapes/text.qml26
-rw-r--r--examples/quick/shapes/tiger.qml3667
-rw-r--r--examples/quick/shapes/tigerLoader.qml32
-rw-r--r--examples/quick/shared/CMakeLists.txt24
-rw-r--r--examples/quick/shared/FlickrRssModel.qml45
-rw-r--r--examples/quick/shared/LauncherList.qml16
-rw-r--r--examples/quick/shared/QtBundleQmlModuleForMacOS.cmake32
-rw-r--r--examples/quick/shared/SimpleLauncherDelegate.qml73
-rw-r--r--examples/quick/shared/qmldir1
-rw-r--r--examples/quick/shared/shared.qrc1
-rw-r--r--examples/quick/tableview/gameoflife/CMakeLists.txt42
-rw-r--r--examples/quick/tableview/gameoflife/doc/src/gameoflife.qdoc1
-rw-r--r--examples/quick/tableview/gameoflife/main.qml3
-rw-r--r--examples/quick/tableview/pixelator/CMakeLists.txt42
-rw-r--r--examples/quick/tableview/pixelator/doc/src/pixelator.qdoc1
-rw-r--r--examples/quick/text/CMakeLists.txt39
-rw-r--r--examples/quick/text/doc/src/text.qdoc1
-rw-r--r--examples/quick/text/fonts/availableFonts.qml7
-rw-r--r--examples/quick/text/fonts/banner.qml31
-rw-r--r--examples/quick/text/fonts/fonts.qml51
-rw-r--r--examples/quick/text/fonts/hello.qml29
-rw-r--r--examples/quick/text/styledtext-layout.qml12
-rw-r--r--examples/quick/text/text.qml13
-rw-r--r--examples/quick/text/text.qrc5
-rw-r--r--examples/quick/text/textselection/pics/endHandle.pngbin90 -> 0 bytes
-rw-r--r--examples/quick/text/textselection/pics/endHandle.sci5
-rw-r--r--examples/quick/text/textselection/pics/startHandle.pngbin88 -> 0 bytes
-rw-r--r--examples/quick/text/textselection/pics/startHandle.sci5
-rw-r--r--examples/quick/text/textselection/textselection.qml178
-rw-r--r--examples/quick/threading/CMakeLists.txt52
-rw-r--r--examples/quick/threading/doc/images/qml-threading-example.pngbin22778 -> 0 bytes
-rw-r--r--examples/quick/threading/doc/src/threading.qdoc44
-rw-r--r--examples/quick/threading/main.cpp4
-rw-r--r--examples/quick/threading/threadedlistmodel/dataloader.mjs12
-rw-r--r--examples/quick/threading/threadedlistmodel/doc/src/threadedlistmodel.qdoc13
-rw-r--r--examples/quick/threading/threadedlistmodel/threadedlistmodel.qmlproject19
-rw-r--r--examples/quick/threading/threadedlistmodel/timedisplay.qml42
-rw-r--r--examples/quick/threading/threading.pro10
-rw-r--r--examples/quick/threading/threading.qml18
-rw-r--r--examples/quick/threading/threading.qmlproject17
-rw-r--r--examples/quick/threading/threading.qrc10
-rw-r--r--examples/quick/threading/workerscript/Spinner.qml51
-rw-r--r--examples/quick/threading/workerscript/workerscript.mjs27
-rw-r--r--examples/quick/threading/workerscript/workerscript.qml62
-rw-r--r--examples/quick/threading/workerscript/workerscript.qmlproject19
-rw-r--r--examples/quick/touchinteraction/CMakeLists.txt70
-rw-r--r--examples/quick/touchinteraction/doc/images/qml-touchinteraction-example.pngbin35860 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/doc/src/touchinteraction.qdoc55
-rw-r--r--examples/quick/touchinteraction/flickable/Panel.qml113
-rw-r--r--examples/quick/touchinteraction/flickable/basic-flickable.qml33
-rw-r--r--examples/quick/touchinteraction/flickable/corkboards.qml51
-rw-r--r--examples/quick/touchinteraction/main.cpp4
-rw-r--r--examples/quick/touchinteraction/multipointtouch/AugmentedTouchPoint.qml35
-rw-r--r--examples/quick/touchinteraction/multipointtouch/Bear0.pngbin14359 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/Bear1.pngbin99378 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/Bear2.pngbin80759 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/Bear3.pngbin21122 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/BearB.pngbin16505 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/BearWhackParticleSystem.qml146
-rw-r--r--examples/quick/touchinteraction/multipointtouch/ParticleFlame.qml33
-rw-r--r--examples/quick/touchinteraction/multipointtouch/bearwhack.qml97
-rw-r--r--examples/quick/touchinteraction/multipointtouch/blur-circle3.pngbin5148 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/heart-blur.pngbin5406 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/multiflame.qml57
-rw-r--r--examples/quick/touchinteraction/multipointtouch/title.pngbin76389 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/pincharea/flickresize.qml62
-rw-r--r--examples/quick/touchinteraction/pincharea/qt-logo.jpgbin40886 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/touchinteraction.pro10
-rw-r--r--examples/quick/touchinteraction/touchinteraction.qml21
-rw-r--r--examples/quick/touchinteraction/touchinteraction.qmlproject17
-rw-r--r--examples/quick/touchinteraction/touchinteraction.qrc27
-rw-r--r--examples/quick/tutorials/dynamicview/CMakeLists.txt2
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview1/CMakeLists.txt34
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview1/PetsModel.qml54
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview1/dynamicview.qml21
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview2/CMakeLists.txt34
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview2/PetsModel.qml54
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview2/dynamicview.qml46
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview3/CMakeLists.txt34
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview3/PetsModel.qml54
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview3/dynamicview.qml53
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview4/CMakeLists.txt34
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview4/ListSelector.qml40
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview4/PetsModel.qml54
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview4/dynamicview.qml76
-rw-r--r--examples/quick/tutorials/samegame/CMakeLists.txt2
-rw-r--r--examples/quick/tutorials/samegame/samegame1/CMakeLists.txt34
-rw-r--r--examples/quick/tutorials/samegame/samegame2/CMakeLists.txt34
-rw-r--r--examples/quick/tutorials/samegame/samegame3/CMakeLists.txt34
-rw-r--r--examples/quick/tutorials/samegame/samegame4/CMakeLists.txt34
-rw-r--r--examples/quick/tutorials/samegame/samegame4/samegame.js11
-rw-r--r--examples/quick/views/CMakeLists.txt42
-rw-r--r--examples/quick/views/delegatemodel/delegatemodel.qmlproject17
-rw-r--r--examples/quick/views/delegatemodel/dragselection.qml116
-rw-r--r--examples/quick/views/delegatemodel/flipable.pro9
-rw-r--r--examples/quick/views/delegatemodel/flipable.qrc9
-rw-r--r--examples/quick/views/delegatemodel/main.cpp4
-rw-r--r--examples/quick/views/delegatemodel/slideshow.qml121
-rw-r--r--examples/quick/views/doc/src/views.qdoc8
-rw-r--r--examples/quick/views/gridview/gridview-example.qml23
-rw-r--r--examples/quick/views/listview/content/PressAndHoldButton.qml2
-rw-r--r--examples/quick/views/listview/content/SmallText.qml2
-rw-r--r--examples/quick/views/listview/displaymargin.qml6
-rw-r--r--examples/quick/views/listview/dynamiclist.qml100
-rw-r--r--examples/quick/views/listview/expandingdelegates.qml77
-rw-r--r--examples/quick/views/listview/highlight.qml44
-rw-r--r--examples/quick/views/listview/highlightranges.qml63
-rw-r--r--examples/quick/views/listview/sections.qml101
-rw-r--r--examples/quick/views/objectmodel/objectmodel.qml62
-rw-r--r--examples/quick/views/package/Delegate.qml43
-rw-r--r--examples/quick/views/package/view.qml20
-rw-r--r--examples/quick/views/pathview/pathview-example.qml84
-rw-r--r--examples/quick/views/views.qml3
-rw-r--r--examples/quick/views/views.qrc2
-rw-r--r--examples/quick/window/CMakeLists.txt34
-rw-r--r--examples/quick/window/Splash.qml19
-rw-r--r--examples/quick/window/doc/src/window.qdoc1
-rw-r--r--examples/quick/window/window.qml46
-rw-r--r--examples/quick/window/window.qrc2
-rw-r--r--examples/quickcontrols/CMakeLists.txt14
-rw-r--r--examples/quickcontrols/attachedstyleproperties/CMakeLists.txt38
-rw-r--r--examples/quickcontrols/attachedstyleproperties/MyStyle/CMakeLists.txt22
-rw-r--r--examples/quickcontrols/attachedstyleproperties/MyStyle/Label.qml3
-rw-r--r--examples/quickcontrols/attachedstyleproperties/MyStyle/Popup.qml3
-rw-r--r--examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp2
-rw-r--r--examples/quickcontrols/attachedstyleproperties/attachedstyleproperties.qml9
-rw-r--r--examples/quickcontrols/attachedstyleproperties/doc/src/qtquickcontrols-attachedstyleproperties.qdoc1
-rw-r--r--examples/quickcontrols/chattutorial/CMakeLists.txt12
-rw-r--r--examples/quickcontrols/chattutorial/chapter1/CMakeLists.txt37
-rw-r--r--examples/quickcontrols/chattutorial/chapter1/Main.qml23
-rw-r--r--examples/quickcontrols/chattutorial/chapter1/chapter1.pro7
-rw-r--r--examples/quickcontrols/chattutorial/chapter1/main.cpp4
-rw-r--r--examples/quickcontrols/chattutorial/chapter1/main.qml23
-rw-r--r--examples/quickcontrols/chattutorial/chapter1/qmldir2
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/CMakeLists.txt37
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/Main.qml50
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/chapter2.pro6
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/main.cpp4
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/main.qml45
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/qmldir2
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/CMakeLists.txt37
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/ContactPage.qml10
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/ConversationPage.qml22
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/Main.qml18
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/chapter3.pro6
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/main.cpp4
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/main.qml19
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/qmldir4
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/CMakeLists.txt39
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/ContactPage.qml14
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/ConversationPage.qml40
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/Main.qml18
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/chapter4.pro11
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/main.cpp10
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/main.qml19
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/qmldir5
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.cpp4
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.h6
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.cpp2
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.h4
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/+Material/ChatToolBar.qml2
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/CMakeLists.txt39
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/ChatToolBar.qml2
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/ContactPage.qml14
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/ConversationPage.qml38
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/Main.qml18
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/chapter5.pro11
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/main.cpp10
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/main.qml19
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/qmldir6
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.cpp4
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.h6
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.cpp2
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.h4
-rw-r--r--examples/quickcontrols/chattutorial/doc/src/qtquickcontrols-chattutorial.qdoc111
-rw-r--r--examples/quickcontrols/contactlist/CMakeLists.txt37
-rw-r--r--examples/quickcontrols/contactlist/ContactDelegate.ui.qml17
-rw-r--r--examples/quickcontrols/contactlist/ContactDialog.qml8
-rw-r--r--examples/quickcontrols/contactlist/ContactForm.ui.qml2
-rw-r--r--examples/quickcontrols/contactlist/ContactList.qml70
-rw-r--r--examples/quickcontrols/contactlist/ContactView.ui.qml9
-rw-r--r--examples/quickcontrols/contactlist/SectionDelegate.ui.qml6
-rw-r--r--examples/quickcontrols/contactlist/contactlist.pro15
-rw-r--r--examples/quickcontrols/contactlist/contactlist.qml70
-rw-r--r--examples/quickcontrols/contactlist/contactmodel.cpp2
-rw-r--r--examples/quickcontrols/contactlist/contactmodel.h4
-rw-r--r--examples/quickcontrols/contactlist/designer/Backend/ContactModel.qml2
-rw-r--r--examples/quickcontrols/contactlist/doc/src/qtquickcontrols-contactlist.qdoc2
-rw-r--r--examples/quickcontrols/contactlist/main.cpp8
-rw-r--r--examples/quickcontrols/contactlist/qmldir8
-rw-r--r--examples/quickcontrols/eventcalendar/CMakeLists.txt31
-rw-r--r--examples/quickcontrols/eventcalendar/doc/src/qtquickcontrols-eventcalendar.qdoc1
-rw-r--r--examples/quickcontrols/eventcalendar/eventmodel.cpp2
-rw-r--r--examples/quickcontrols/eventcalendar/eventmodel.h2
-rw-r--r--examples/quickcontrols/eventcalendar/sqleventdatabase.cpp2
-rw-r--r--examples/quickcontrols/eventcalendar/sqleventdatabase.h2
-rw-r--r--examples/quickcontrols/filesystemexplorer/CMakeLists.txt84
-rw-r--r--examples/quickcontrols/filesystemexplorer/Main.qml184
-rw-r--r--examples/quickcontrols/filesystemexplorer/doc/images/qtquickcontrols-filesystemexplorer.webpbin0 -> 47416 bytes
-rw-r--r--examples/quickcontrols/filesystemexplorer/doc/src/qtquickcontrols-filesystemexplorer.qdoc123
-rw-r--r--examples/quickcontrols/filesystemexplorer/filesystemexplorer.pro60
-rw-r--r--examples/quickcontrols/filesystemexplorer/filesystemmodel.cpp89
-rw-r--r--examples/quickcontrols/filesystemexplorer/filesystemmodel.h40
-rw-r--r--examples/quickcontrols/filesystemexplorer/icons/app_icon.svg2
-rw-r--r--examples/quickcontrols/filesystemexplorer/icons/folder_closed.svg38
-rw-r--r--examples/quickcontrols/filesystemexplorer/icons/folder_open.svg38
-rw-r--r--examples/quickcontrols/filesystemexplorer/icons/generic_file.svg38
-rw-r--r--examples/quickcontrols/filesystemexplorer/icons/globe.svg38
-rw-r--r--examples/quickcontrols/filesystemexplorer/icons/info_sign.svg38
-rw-r--r--examples/quickcontrols/filesystemexplorer/icons/light_bulb.svg43
-rw-r--r--examples/quickcontrols/filesystemexplorer/icons/qt_logo.svg26
-rw-r--r--examples/quickcontrols/filesystemexplorer/icons/read.svg38
-rw-r--r--examples/quickcontrols/filesystemexplorer/icons/resize.svg6
-rw-r--r--examples/quickcontrols/filesystemexplorer/linenumbermodel.cpp58
-rw-r--r--examples/quickcontrols/filesystemexplorer/linenumbermodel.h32
-rw-r--r--examples/quickcontrols/filesystemexplorer/main.cpp43
-rw-r--r--examples/quickcontrols/filesystemexplorer/qml/About.qml93
-rw-r--r--examples/quickcontrols/filesystemexplorer/qml/Colors.qml23
-rw-r--r--examples/quickcontrols/filesystemexplorer/qml/Editor.qml161
-rw-r--r--examples/quickcontrols/filesystemexplorer/qml/FileSystemView.qml156
-rw-r--r--examples/quickcontrols/filesystemexplorer/qml/MyMenu.qml45
-rw-r--r--examples/quickcontrols/filesystemexplorer/qml/MyMenuBar.qml177
-rw-r--r--examples/quickcontrols/filesystemexplorer/qml/ResizeButton.qml23
-rw-r--r--examples/quickcontrols/filesystemexplorer/qml/Sidebar.qml140
-rw-r--r--examples/quickcontrols/filesystemexplorer/qml/WindowDragHandler.qml16
-rw-r--r--examples/quickcontrols/filesystemexplorer/qmldir12
-rw-r--r--examples/quickcontrols/flatstyle/CMakeLists.txt33
-rw-r--r--examples/quickcontrols/flatstyle/MainForm.ui.qml1
-rw-r--r--examples/quickcontrols/flatstyle/doc/src/qtquickcontrols-flatstyle.qdoc1
-rw-r--r--examples/quickcontrols/gallery/CMakeLists.txt33
-rw-r--r--examples/quickcontrols/gallery/doc/src/qtquickcontrols-gallery.qdoc17
-rw-r--r--examples/quickcontrols/gallery/gallery.qml128
-rw-r--r--examples/quickcontrols/gallery/images/qt-logo.pngbin1301 -> 2849 bytes
-rw-r--r--examples/quickcontrols/gallery/images/qt-logo@2x.pngbin2611 -> 4936 bytes
-rw-r--r--examples/quickcontrols/gallery/images/qt-logo@3x.pngbin4155 -> 7254 bytes
-rw-r--r--examples/quickcontrols/gallery/images/qt-logo@4x.pngbin5916 -> 9505 bytes
-rw-r--r--examples/quickcontrols/gallery/pages/BusyIndicatorPage.qml6
-rw-r--r--examples/quickcontrols/gallery/pages/ButtonPage.qml10
-rw-r--r--examples/quickcontrols/gallery/pages/CheckBoxPage.qml10
-rw-r--r--examples/quickcontrols/gallery/pages/ComboBoxPage.qml21
-rw-r--r--examples/quickcontrols/gallery/pages/DelayButtonPage.qml6
-rw-r--r--examples/quickcontrols/gallery/pages/DelegatePage.qml262
-rw-r--r--examples/quickcontrols/gallery/pages/DialPage.qml4
-rw-r--r--examples/quickcontrols/gallery/pages/DialogPage.qml44
-rw-r--r--examples/quickcontrols/gallery/pages/FramePage.qml8
-rw-r--r--examples/quickcontrols/gallery/pages/GroupBoxPage.qml10
-rw-r--r--examples/quickcontrols/gallery/pages/PageIndicatorPage.qml2
-rw-r--r--examples/quickcontrols/gallery/pages/ProgressBarPage.qml4
-rw-r--r--examples/quickcontrols/gallery/pages/RadioButtonPage.qml10
-rw-r--r--examples/quickcontrols/gallery/pages/RangeSliderPage.qml2
-rw-r--r--examples/quickcontrols/gallery/pages/ScrollBarPage.qml4
-rw-r--r--examples/quickcontrols/gallery/pages/ScrollIndicatorPage.qml4
-rw-r--r--examples/quickcontrols/gallery/pages/SliderPage.qml2
-rw-r--r--examples/quickcontrols/gallery/pages/SpinBoxPage.qml4
-rw-r--r--examples/quickcontrols/gallery/pages/StackViewPage.qml17
-rw-r--r--examples/quickcontrols/gallery/pages/SwipeViewPage.qml8
-rw-r--r--examples/quickcontrols/gallery/pages/SwitchPage.qml10
-rw-r--r--examples/quickcontrols/gallery/pages/TabBarPage.qml14
-rw-r--r--examples/quickcontrols/gallery/pages/TextAreaPage.qml6
-rw-r--r--examples/quickcontrols/gallery/pages/TextFieldPage.qml4
-rw-r--r--examples/quickcontrols/gallery/pages/ToolTipPage.qml6
-rw-r--r--examples/quickcontrols/gallery/pages/TumblerPage.qml2
-rw-r--r--examples/quickcontrols/imagine/automotive/CMakeLists.txt31
-rw-r--r--examples/quickcontrols/imagine/automotive/doc/src/qtquickcontrols-automotive.qdoc1
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered.pngbin2532 -> 2144 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered@2x.pngbin4629 -> 3784 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-pressed.pngbin1271 -> 1178 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-pressed@2x.pngbin3230 -> 2475 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-background.pngbin1037 -> 1014 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-background@2x.pngbin2817 -> 2182 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/qml/automotive.qml51
-rw-r--r--examples/quickcontrols/imagine/automotive/qtquickcontrols2.conf8
-rw-r--r--examples/quickcontrols/imagine/musicplayer/CMakeLists.txt187
-rw-r--r--examples/quickcontrols/imagine/musicplayer/doc/images/qtquickcontrols-musicplayer.pngbin1457884 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/doc/src/qtquickcontrols-musicplayer.qdoc35
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/icons.qrc40
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/bluetooth.pngbin556 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/cart.pngbin425 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/cloud.pngbin525 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/favorite.pngbin379 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/filter.pngbin441 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/folder.pngbin279 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/message.pngbin466 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/music.pngbin454 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/next.pngbin201 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/pause.pngbin141 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/power.pngbin710 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/previous.pngbin203 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/repeat.pngbin328 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/save.pngbin419 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/settings.pngbin499 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/shuffle.pngbin366 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/stop.pngbin157 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/bluetooth.pngbin1202 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/cart.pngbin782 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/cloud.pngbin1003 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/favorite.pngbin744 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/filter.pngbin872 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/folder.pngbin437 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/grid.pngbin177 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/message.pngbin850 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/music.pngbin842 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/next.pngbin354 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/pause.pngbin163 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/power.pngbin1329 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/previous.pngbin436 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/repeat.pngbin634 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/save.pngbin496 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/settings.pngbin960 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/shuffle.pngbin724 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/stop.pngbin242 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/icons.svg648
-rw-r--r--examples/quickcontrols/imagine/musicplayer/icons/musicplayer/index.theme14
-rw-r--r--examples/quickcontrols/imagine/musicplayer/images/album-cover.jpgbin917863 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/applicationwindow-background.pngbin82 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked-hovered.9.pngbin1446 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked-hovered@2x.9.pngbin4150 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked.9.pngbin1353 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked@2x.9.pngbin4049 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-disabled.9.pngbin543 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-disabled@2x.9.pngbin1509 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-hovered.9.pngbin1444 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-hovered@2x.9.pngbin3855 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-pressed.9.pngbin1437 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-pressed@2x.9.pngbin4048 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background.9.pngbin1368 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background@2x.9.pngbin3813 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-hovered.9.pngbin4220 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-hovered@2x.9.pngbin15135 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-open.9.pngbin4197 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-open@2x.9.pngbin14766 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-pressed.9.pngbin4254 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-pressed@2x.9.pngbin14995 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background.9.pngbin4283 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background@2x.9.pngbin14357 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-hovered.pngbin390 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-hovered@2x.pngbin961 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-open.pngbin415 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-open@2x.pngbin929 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-pressed.pngbin373 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-pressed@2x.pngbin955 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator.pngbin381 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator@2x.pngbin970 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-popup.9.pngbin2437 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-popup@2x.9.pngbin5349 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-hovered.pngbin11658 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-hovered@2x.pngbin36836 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-pressed.pngbin12061 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-pressed@2x.pngbin39021 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background.pngbin10640 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background@2x.pngbin34791 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle-pressed.pngbin408 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle-pressed@2x.pngbin963 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle.pngbin360 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle@2x.pngbin736 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/frame-background.9.pngbin236 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/frame-background@2x.9.pngbin419 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/imagine-assets.qrc113
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-checked.9.pngbin1121 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-checked@2x.9.pngbin3119 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-disabled.9.pngbin127 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-disabled@2x.9.pngbin144 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-hovered.9.pngbin1120 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-hovered@2x.9.pngbin2579 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-pressed.9.pngbin1116 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-pressed@2x.9.pngbin3140 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background.9.pngbin127 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background@2x.9.pngbin144 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked-hovered.pngbin1643 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked-hovered@2x.pngbin4863 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked.pngbin1506 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked@2x.pngbin4389 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-disabled.pngbin955 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-disabled@2x.pngbin2197 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-hovered.pngbin1470 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-hovered@2x.pngbin4373 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-pressed.pngbin1502 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-pressed@2x.pngbin4450 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background.pngbin1415 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background@2x.pngbin4224 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-hovered.pngbin82 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-hovered@2x.pngbin83 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-pressed.pngbin82 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-pressed@2x.pngbin83 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive.pngbin82 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive@2x.pngbin83 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal-disabled.9.pngbin222 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal-disabled@2x.9.pngbin470 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal.9.pngbin235 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal@2x.9.pngbin489 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical-disabled.9.pngbin239 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical-disabled@2x.9.pngbin447 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical.9.pngbin226 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical@2x.9.pngbin475 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-disabled.pngbin523 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-disabled@2x.pngbin947 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-hovered.pngbin1066 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-hovered@2x.pngbin2866 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle.pngbin1048 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle@2x.pngbin2852 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-horizontal.9.pngbin235 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-horizontal@2x.9.pngbin489 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical-disabled.9.pngbin226 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical-disabled@2x.9.pngbin475 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical.9.pngbin226 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical@2x.9.pngbin475 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background-disabled.9.pngbin252 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background-disabled@2x.9.pngbin445 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background.9.pngbin256 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background@2x.9.pngbin481 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbar-background.9.pngbin240 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbar-background@2x.9.pngbin483 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked-hovered.9.pngbin1174 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked-hovered@2x.9.pngbin3156 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked.9.pngbin1106 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked@2x.9.pngbin3141 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-hovered.9.pngbin1077 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-hovered@2x.9.pngbin3026 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-pressed.9.pngbin1137 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-pressed@2x.9.pngbin3158 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background.9.pngbin1079 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background@2x.9.pngbin2737 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/tooltip-background.9.pngbin2413 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/imagine-assets/tooltip-background@2x.9.pngbin4677 -> 0 bytes
-rw-r--r--examples/quickcontrols/imagine/musicplayer/musicplayer.cpp24
-rw-r--r--examples/quickcontrols/imagine/musicplayer/musicplayer.pro16
-rw-r--r--examples/quickcontrols/imagine/musicplayer/musicplayer.qml420
-rw-r--r--examples/quickcontrols/imagine/musicplayer/qtquickcontrols2.conf10
-rw-r--r--examples/quickcontrols/ios/todolist/AppSettings.qml2
-rw-r--r--examples/quickcontrols/ios/todolist/CMakeLists.txt21
-rw-r--r--examples/quickcontrols/ios/todolist/Database.qml2
-rw-r--r--examples/quickcontrols/ios/todolist/FontSizePage.qml2
-rw-r--r--examples/quickcontrols/ios/todolist/HomePage.qml5
-rw-r--r--examples/quickcontrols/ios/todolist/MaxTasksPage.qml3
-rw-r--r--examples/quickcontrols/ios/todolist/NavBar.qml2
-rw-r--r--examples/quickcontrols/ios/todolist/ProjectPage.qml5
-rw-r--r--examples/quickcontrols/ios/todolist/SettingsPage.qml4
-rw-r--r--examples/quickcontrols/ios/todolist/ToggleCompletedTasksPage.qml3
-rw-r--r--examples/quickcontrols/ios/todolist/main.qml2
-rw-r--r--examples/quickcontrols/ios/todolist/src/main.cpp2
-rw-r--r--examples/quickcontrols/quickcontrols.pro9
-rw-r--r--examples/quickcontrols/sidepanel/CMakeLists.txt46
-rw-r--r--examples/quickcontrols/sidepanel/doc/images/qtquickcontrols-sidepanel-landscape.pngbin55216 -> 0 bytes
-rw-r--r--examples/quickcontrols/sidepanel/doc/images/qtquickcontrols-sidepanel-portrait.pngbin32060 -> 0 bytes
-rw-r--r--examples/quickcontrols/sidepanel/doc/src/qtquickcontrols-sidepanel.qdoc59
-rw-r--r--examples/quickcontrols/sidepanel/images/qt-logo.pngbin1301 -> 0 bytes
-rw-r--r--examples/quickcontrols/sidepanel/images/qt-logo@2x.pngbin2611 -> 0 bytes
-rw-r--r--examples/quickcontrols/sidepanel/images/qt-logo@3x.pngbin4155 -> 0 bytes
-rw-r--r--examples/quickcontrols/sidepanel/images/qt-logo@4x.pngbin5916 -> 0 bytes
-rw-r--r--examples/quickcontrols/sidepanel/sidepanel.cpp17
-rw-r--r--examples/quickcontrols/sidepanel/sidepanel.pro19
-rw-r--r--examples/quickcontrols/sidepanel/sidepanel.qml132
-rw-r--r--examples/quickcontrols/spreadsheets/CMakeLists.txt46
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/CMakeLists.txt47
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/HeaderToolBar.qml96
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/HelpDialog.qml111
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/Main.qml846
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/TableCell.qml41
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/datamodel.cpp266
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/datamodel.h63
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/copy.svg6
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/cut.svg6
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/help.svg5
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/hide.svg4
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_column_left.svg3
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_column_right.svg3
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_row_above.svg3
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_row_below.svg3
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/pan.svg4
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/paste.svg6
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/remove_column.svg3
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/remove_row.svg3
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/reset_reordering.svg3
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/icons/show.svg3
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/spreadcell.cpp69
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/spreadcell.h26
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/spreadformula.cpp74
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/spreadformula.h43
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/spreadkey.h23
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/spreadmimedataprovider.cpp88
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/spreadmimedataprovider.h39
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/spreadmodel.cpp730
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/spreadmodel.h154
-rw-r--r--examples/quickcontrols/spreadsheets/Spreadsheets/spreadrole.h23
-rw-r--r--examples/quickcontrols/spreadsheets/main.cpp24
-rw-r--r--examples/quickcontrols/spreadsheets/spreadsheet.svg32
-rw-r--r--examples/quickcontrols/swipetoremove/CMakeLists.txt40
-rw-r--r--examples/quickcontrols/swipetoremove/doc/images/qtquickcontrols-swipetoremove.gifbin371365 -> 0 bytes
-rw-r--r--examples/quickcontrols/swipetoremove/doc/images/qtquickcontrols-swipetoremove.pngbin22511 -> 0 bytes
-rw-r--r--examples/quickcontrols/swipetoremove/doc/src/qtquickcontrols-swipetoremove.qdoc42
-rw-r--r--examples/quickcontrols/swipetoremove/fonts/LICENSE.txt12
-rw-r--r--examples/quickcontrols/swipetoremove/fonts/fontello.ttfbin5164 -> 0 bytes
-rw-r--r--examples/quickcontrols/swipetoremove/swipetoremove.cpp20
-rw-r--r--examples/quickcontrols/swipetoremove/swipetoremove.pro10
-rw-r--r--examples/quickcontrols/swipetoremove/swipetoremove.qml130
-rw-r--r--examples/quickcontrols/texteditor/CMakeLists.txt40
-rw-r--r--examples/quickcontrols/texteditor/doc/src/qtquickcontrols-texteditor.qdoc181
-rw-r--r--examples/quickcontrols/texteditor/documenthandler.cpp348
-rw-r--r--examples/quickcontrols/texteditor/documenthandler.h121
-rw-r--r--examples/quickcontrols/texteditor/example.md10
-rw-r--r--examples/quickcontrols/texteditor/fonts/fontello.ttfbin10208 -> 19044 bytes
-rw-r--r--examples/quickcontrols/texteditor/images/qt-logo.pngbin4039 -> 3255 bytes
-rw-r--r--examples/quickcontrols/texteditor/qml/+touch/texteditor.qml130
-rw-r--r--examples/quickcontrols/texteditor/qml/texteditor.qml349
-rw-r--r--examples/quickcontrols/texteditor/texteditor.cpp12
-rw-r--r--examples/quickcontrols/texteditor/texteditor.html27
-rw-r--r--examples/quickcontrols/texteditor/texteditor.pro7
-rw-r--r--examples/quickcontrols/wearable/CMakeLists.txt220
-rw-r--r--examples/quickcontrols/wearable/Wearable/AlarmsPage.qml172
-rw-r--r--examples/quickcontrols/wearable/Wearable/AppSettings.qml14
-rw-r--r--examples/quickcontrols/wearable/Wearable/CMakeLists.txt152
-rw-r--r--examples/quickcontrols/wearable/Wearable/Clock.qml248
-rw-r--r--examples/quickcontrols/wearable/Wearable/DemoMode.qml174
-rw-r--r--examples/quickcontrols/wearable/Wearable/DemoModeIndicator.qml57
-rw-r--r--examples/quickcontrols/wearable/Wearable/FitnessPage.qml283
-rw-r--r--examples/quickcontrols/wearable/Wearable/LauncherPage.qml185
-rw-r--r--examples/quickcontrols/wearable/Wearable/ListHeaderItem.qml83
-rw-r--r--examples/quickcontrols/wearable/Wearable/ListItem.qml26
-rw-r--r--examples/quickcontrols/wearable/Wearable/Main.qml125
-rw-r--r--examples/quickcontrols/wearable/Wearable/MenuHeader.qml92
-rw-r--r--examples/quickcontrols/wearable/Wearable/NavigationFallbackPage.qml100
-rw-r--r--examples/quickcontrols/wearable/Wearable/NavigationPage.qml228
-rw-r--r--examples/quickcontrols/wearable/Wearable/NotificationsPage.qml77
-rw-r--r--examples/quickcontrols/wearable/Wearable/RouteElement.qml70
-rw-r--r--examples/quickcontrols/wearable/Wearable/SettingsPage.qml136
-rw-r--r--examples/quickcontrols/wearable/Wearable/SwipeViewPage.qml (renamed from examples/quickcontrols/wearable/qml/SwipeViewPage.qml)0
-rw-r--r--examples/quickcontrols/wearable/Wearable/WeatherPage.qml330
-rw-r--r--examples/quickcontrols/wearable/Wearable/WorldClockPage.qml59
-rw-r--r--examples/quickcontrols/wearable/Wearable/fallbackroute.json78
-rw-r--r--examples/quickcontrols/wearable/Wearable/fitness.js34
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/back-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/back-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/bearleft-dark.svg7
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/bearleft-light.svg7
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/bearright-dark.svg7
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/bearright-light.svg7
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/bell-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/bell-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/bluetooth-dark.svg3
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/bluetooth-light.svg3
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/clock-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/clock-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/darkmode-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/darkmode-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/demomode-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/demomode-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/drop-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/drop-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/forward-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/forward-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/hearth-dark.svg3
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/hearth-light.svg3
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/left-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/left-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/lightleft-dark.svg3
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/lightleft-light.svg3
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/lightright-dark.svg3
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/lightright-light.svg3
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/maps-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/maps-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/notification-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/notification-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/plus-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/plus-light.svg5
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/pressure-dark.svg9
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/pressure-light.svg9
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/right-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/right-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/settings-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/settings-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/sun-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/sun-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/sunrise-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/sunrise-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/sunset-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/sunset-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/thermometer-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/thermometer-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/uturnleft-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/uturnleft-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/uturnright-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/uturnright-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-dark.svg10
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-few-clouds-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-few-clouds-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-fog-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-fog-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-haze-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-haze-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-icy-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-icy-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-light.svg10
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-overcast-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-overcast-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-showers-dark.svg6
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-showers-light.svg6
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-showers-scattered-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-showers-scattered-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-sleet-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-sleet-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-snow-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-snow-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-storm-dark.svg6
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-storm-light.svg6
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-sunny-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-sunny-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-sunny-very-few-clouds-dark.svg10
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-sunny-very-few-clouds-light.svg10
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-thundershower-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/weather-thundershower-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/wifi-dark.svg3
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/wifi-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/wind-dark.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/wind-light.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/icons/yellowsun.svg4
-rw-r--r--examples/quickcontrols/wearable/Wearable/images/fallbackmap.pngbin0 -> 143664 bytes
-rw-r--r--examples/quickcontrols/wearable/Wearable/images/fitness-man-running-dark.svg3
-rw-r--r--examples/quickcontrols/wearable/Wearable/images/fitness-man-running-light.svg3
-rw-r--r--examples/quickcontrols/wearable/Wearable/images/fitness-man-walking-dark.svg3
-rw-r--r--examples/quickcontrols/wearable/Wearable/images/fitness-man-walking-light.svg3
-rw-r--r--examples/quickcontrols/wearable/Wearable/navigation.js119
-rw-r--r--examples/quickcontrols/wearable/Wearable/notifications.js28
-rw-r--r--examples/quickcontrols/wearable/Wearable/qmldir19
-rw-r--r--examples/quickcontrols/wearable/Wearable/weather.js51
-rw-r--r--examples/quickcontrols/wearable/Wearable/weather.json (renamed from examples/quickcontrols/wearable/qml/Weather/weather.json)0
-rw-r--r--examples/quickcontrols/wearable/WearableSettings/CMakeLists.txt45
-rw-r--r--examples/quickcontrols/wearable/WearableSettings/WearableSettings.qml14
-rw-r--r--examples/quickcontrols/wearable/WearableSettings/qmldir5
-rw-r--r--examples/quickcontrols/wearable/WearableStyle/CMakeLists.txt51
-rw-r--r--examples/quickcontrols/wearable/WearableStyle/PageIndicator.qml42
-rw-r--r--examples/quickcontrols/wearable/WearableStyle/Slider.qml59
-rw-r--r--examples/quickcontrols/wearable/WearableStyle/Switch.qml54
-rw-r--r--examples/quickcontrols/wearable/WearableStyle/UIStyle.qml114
-rw-r--r--examples/quickcontrols/wearable/WearableStyle/fonts/OFL.txt93
-rw-r--r--examples/quickcontrols/wearable/WearableStyle/fonts/TitilliumWeb-Bold.ttfbin0 -> 53896 bytes
-rw-r--r--examples/quickcontrols/wearable/WearableStyle/fonts/TitilliumWeb-Regular.ttfbin0 -> 57392 bytes
-rw-r--r--examples/quickcontrols/wearable/WearableStyle/fonts/TitilliumWeb-SemiBold.ttfbin0 -> 56752 bytes
-rw-r--r--examples/quickcontrols/wearable/WearableStyle/qmldir8
-rw-r--r--examples/quickcontrols/wearable/doc/images/qtquickcontrols-wearable.pngbin108926 -> 28479 bytes
-rw-r--r--examples/quickcontrols/wearable/doc/src/qtquickcontrols-wearable.qdoc136
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36/alarms.pngbin510 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36/fitness.pngbin443 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36/navigation.pngbin474 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36/notifications.pngbin559 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36/settings.pngbin544 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36/weather.pngbin427 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36/worldclock.pngbin470 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36@2/alarms.pngbin871 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36@2/fitness.pngbin743 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36@2/navigation.pngbin803 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36@2/notifications.pngbin1016 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36@2/settings.pngbin802 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36@2/weather.pngbin747 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/36x36@2/worldclock.pngbin817 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/icons/wearable/index.theme14
-rw-r--r--examples/quickcontrols/wearable/images/back.pngbin834 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/images/back@2x.pngbin528 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/images/back@3x.pngbin788 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/images/back@4x.pngbin1002 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/images/background-dark.pngbin28157 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/images/background-light.pngbin343879 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/images/home.pngbin856 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/images/home@2x.pngbin653 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/images/home@3x.pngbin909 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/images/home@4x.pngbin1167 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Alarms/AlarmsPage.qml67
-rw-r--r--examples/quickcontrols/wearable/qml/DemoMode.qml211
-rw-r--r--examples/quickcontrols/wearable/qml/DemoModeIndicator.qml47
-rw-r--r--examples/quickcontrols/wearable/qml/Fitness/FitnessPage.qml84
-rw-r--r--examples/quickcontrols/wearable/qml/Fitness/fitness.js18
-rw-r--r--examples/quickcontrols/wearable/qml/Fitness/images/man-running-dark.pngbin1400 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Fitness/images/man-running-dark@2x.pngbin2260 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Fitness/images/man-running-light.pngbin1216 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Fitness/images/man-running-light@2x.pngbin2473 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Fitness/images/man-walking-dark.pngbin1408 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Fitness/images/man-walking-dark@2x.pngbin2215 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Fitness/images/man-walking-light.pngbin1231 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Fitness/images/man-walking-light@2x.pngbin2308 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/LauncherPage.qml142
-rw-r--r--examples/quickcontrols/wearable/qml/NaviButton.qml36
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/NavigationPage.qml73
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/RouteElement.qml48
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/end.pngbin1515 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/end@2x.pngbin1383 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/leftturn-dark.pngbin1670 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/leftturn-dark@2x.pngbin1191 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/leftturn-light.pngbin1280 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/leftturn-light@2x.pngbin1191 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/marker.pngbin1515 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/navigation-dark.pngbin474 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/navigation-dark@2x.pngbin802 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/navigation-light.pngbin474 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/navigation-light@2x.pngbin803 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/rightturn-dark.pngbin1670 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/rightturn-dark@2x.pngbin1176 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/rightturn-light.pngbin1246 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/rightturn-light@2x.pngbin1176 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/start.pngbin1515 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/start@2x.pngbin1364 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/straight-dark.pngbin1112 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/straight-dark@2x.pngbin654 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/straight-light.pngbin896 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/straight-light@2x.pngbin654 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/uturn.pngbin1833 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/images/uturn@2x.pngbin4780 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/navigation.js84
-rw-r--r--examples/quickcontrols/wearable/qml/Navigation/walk_route.json1
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/NotificationsPage.qml65
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/images/avatarf-dark.pngbin1848 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/images/avatarf-dark@2x.pngbin1540 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/images/avatarf-light.pngbin1565 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/images/avatarf-light@2x.pngbin1540 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/images/avatarm-dark.pngbin1622 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/images/avatarm-dark@2x.pngbin1367 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/images/avatarm-light.pngbin1367 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/images/avatarm-light@2x.pngbin1367 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/images/missedcall-dark.pngbin1994 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/images/missedcall-dark@2x.pngbin1374 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/images/missedcall-light.pngbin1976 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/images/missedcall-light@2x.pngbin1374 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Notifications/notifications.js25
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/SettingsPage.qml129
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/bluetooth-dark.pngbin793 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/bluetooth-dark@2x.pngbin2668 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/bluetooth-light.pngbin1678 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/bluetooth-light@2x.pngbin2718 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/brightness-dark.pngbin1276 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/brightness-dark@2x.pngbin1127 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/brightness-light.pngbin1277 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/brightness-light@2x.pngbin1127 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/demo-mode-dark.pngbin797 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/demo-mode-dark@2x.pngbin1154 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/demo-mode-light.pngbin797 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/demo-mode-light@2x.pngbin1150 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/demo-mode-white.pngbin576 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/demo-mode-white@2x.pngbin1069 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/demo-mode.svg93
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/theme-dark.pngbin1129 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/theme-dark@2x.pngbin2002 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/theme-light.pngbin1138 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/theme-light@2x.pngbin2004 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/theme.svg84
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/wifi-dark.pngbin1476 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/wifi-dark@2x.pngbin1072 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/wifi-light.pngbin1477 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Settings/images/wifi-light@2x.pngbin1072 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Style/PageIndicator.qml42
-rw-r--r--examples/quickcontrols/wearable/qml/Style/Slider.qml39
-rw-r--r--examples/quickcontrols/wearable/qml/Style/Switch.qml39
-rw-r--r--examples/quickcontrols/wearable/qml/Style/UIStyle.qml60
-rw-r--r--examples/quickcontrols/wearable/qml/Style/qmldir1
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/WeatherPage.qml250
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/humidity-dark.pngbin1673 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/humidity-dark@2x.pngbin1440 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/humidity-light.pngbin1619 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/humidity-light@2x.pngbin1440 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/pressure-dark.pngbin1506 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/pressure-dark@2x.pngbin1542 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/pressure-light.pngbin1508 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/pressure-light@2x.pngbin1543 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/sunrise-dark.pngbin1813 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/sunrise-dark@2x.pngbin1235 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/sunrise-light.pngbin1703 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/sunrise-light@2x.pngbin1235 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/sunset-dark.pngbin1809 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/sunset-dark@2x.pngbin1267 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/sunset-light.pngbin1755 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/sunset-light@2x.pngbin1267 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/temperature-dark.pngbin1232 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/temperature-dark@2x.pngbin939 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/temperature-light.pngbin1147 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/temperature-light@2x.pngbin939 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/wind-dark.pngbin1715 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/wind-dark@2x.pngbin1106 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/wind-light.pngbin1609 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/images/wind-light@2x.pngbin1106 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/Weather/weather.js30
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/Clock.qml141
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/WorldClockPage.qml60
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/center.pngbin691 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/center@2x.pngbin1796 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/clock-night.pngbin24236 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/clock-night@2x.pngbin64764 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/clock.pngbin11173 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/second.pngbin158 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/second@2x.pngbin115 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/swissdaydial.pngbin5078 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/swissdaydial@2x.pngbin10146 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/swissdayhour.pngbin181 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/swissdayhour@2x.pngbin269 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/swissdayminute.pngbin187 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/swissdayminute@2x.pngbin371 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/swissnightdial.pngbin4970 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/swissnightdial@2x.pngbin13594 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/swissnighthour.pngbin260 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/swissnighthour@2x.pngbin492 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/swissnightminute.pngbin187 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/swissnightminute@2x.pngbin365 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/qml/WorldClock/images/swissseconds.pngbin1120 -> 0 bytes
-rw-r--r--examples/quickcontrols/wearable/wearable.cpp16
-rw-r--r--examples/quickcontrols/wearable/wearable.pro7
-rw-r--r--examples/quickcontrols/wearable/wearable.qml93
-rw-r--r--examples/quickcontrols/wearable/wearable.qrc284
1677 files changed, 35149 insertions, 24961 deletions
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 57d9fa87d2..6e3573b1be 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -1,16 +1,14 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_examples_build_begin(EXTERNAL_BUILD)
add_subdirectory(qml)
-if(TARGET Qt::QuickTest)
- add_subdirectory(qmltest)
-endif()
-if(TARGET Qt::Quick)
+if(TARGET Qt6::Quick)
add_subdirectory(quick)
+ add_subdirectory(platforms)
endif()
-if(TARGET Qt::QuickTemplates2)
+if(TARGET Qt6::QuickTemplates2)
add_subdirectory(quickcontrols)
endif()
diff --git a/examples/README b/examples/README
index f4567ab1d2..a8ec653023 100644
--- a/examples/README
+++ b/examples/README
@@ -6,8 +6,8 @@ designers to actually implement their UI vision. QML UIs can integrate
with C++ code in many ways, including being loaded as a part of a C++ UI
and loading data models from C++ and interacting with them.
-Mostof these examples can be viewed directly with the
+Most of these examples can be viewed directly with the
QML viewer utility, without requiring compilation.
-Documentation for these examples can be found via the Examples
+Documentation for these examples can be found via the Examples and Tutorials
link in the main Qt documentation.
diff --git a/examples/core/permissions/CMakeLists.txt b/examples/core/permissions/CMakeLists.txt
new file mode 100644
index 0000000000..d09acc335a
--- /dev/null
+++ b/examples/core/permissions/CMakeLists.txt
@@ -0,0 +1,57 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(permissions LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2)
+qt_standard_project_setup(REQUIRES 6.6)
+
+qt_add_executable(permissions
+ main.cpp
+)
+
+qt_add_qml_module(permissions
+ URI PermissionsExample
+ QML_FILES
+ "Main.qml"
+)
+
+target_link_libraries(permissions PUBLIC
+ Qt::Core
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::Quick
+ Qt::QuickControls2
+)
+
+if(UNIX AND NOT APPLE AND CMAKE_CROSSCOMPILING)
+ find_package(Qt6 REQUIRED COMPONENTS QuickTemplates2)
+
+ # Work around QTBUG-86533
+ target_link_libraries(permissions PRIVATE Qt::QuickTemplates2)
+endif()
+
+set_target_properties(permissions PROPERTIES
+ MACOSX_BUNDLE TRUE
+ MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist"
+ MACOSX_BUNDLE_GUI_IDENTIFIER "io.qt.examples.qmlpermissions"
+ QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android"
+)
+
+install(TARGETS permissions
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET permissions
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/core/permissions/Info.plist b/examples/core/permissions/Info.plist
new file mode 100644
index 0000000000..a02adecbb0
--- /dev/null
+++ b/examples/core/permissions/Info.plist
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+
+ <key>CFBundleName</key>
+ <string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
+ <key>CFBundleExecutable</key>
+ <string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
+
+ <key>CFBundleVersion</key>
+ <string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
+ <key>CFBundleShortVersionString</key>
+ <string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
+
+ <key>LSMinimumSystemVersion</key>
+ <string>${CMAKE_OSX_DEPLOYMENT_TARGET}</string>
+
+ <key>NSHumanReadableCopyright</key>
+ <string>${MACOSX_BUNDLE_COPYRIGHT}</string>
+
+ <key>CFBundleIconFile</key>
+ <string>${MACOSX_BUNDLE_ICON_FILE}</string>
+
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+
+ <key>NSSupportsAutomaticGraphicsSwitching</key>
+ <true/>
+
+ <key>NSBluetoothAlwaysUsageDescription</key>
+ <string>Testing BluetoothAlways</string>
+ <key>NSCalendarsUsageDescription</key>
+ <string>Testing Calendars</string>
+ <key>NSCameraUsageDescription</key>
+ <string>Testing Camera</string>
+ <key>NSContactsUsageDescription</key>
+ <string>Testing Contacts</string>
+ <key>NSHealthShareUsageDescription</key>
+ <string>Testing HealthShare</string>
+ <key>NSHealthUpdateUsageDescription</key>
+ <string>Testing HealthUpdate</string>
+ <key>NSLocationUsageDescription</key>
+ <string>Testing Location on macOS</string>
+ <key>NSLocationWhenInUseUsageDescription</key>
+ <string>Testing Location when in use on iOS</string>
+ <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
+ <string>Testing Location always and when in use on iOS</string>
+ <key>NSMicrophoneUsageDescription</key>
+ <string>Testing Microphone</string>
+
+</dict>
+</plist> \ No newline at end of file
diff --git a/examples/core/permissions/Main.qml b/examples/core/permissions/Main.qml
new file mode 100644
index 0000000000..5d2aeaa16f
--- /dev/null
+++ b/examples/core/permissions/Main.qml
@@ -0,0 +1,99 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtCore
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+
+Window {
+ id: window
+ visible: true
+ title: qsTr("Qt QML Permissions")
+
+ readonly property int margin: 11
+
+ width: layout.implicitWidth + 2 * margin
+ height: layout.implicitHeight + 2 * margin
+
+ Rectangle {
+ anchors.fill: parent
+ color: locationPermission.status === Qt.Granted ? "green" :
+ locationPermission.status === Qt.Denied ? "red" : "blue"
+
+ LocationPermission {
+ id: locationPermission
+
+ // If any of the properties of the permission are changed,
+ // checkPermision is used to check, and the status will
+ // update accordingly. For example, upgrading from Approximate
+ // to Precise would either result in Undetermined, if we
+ // can still request Precise, or Denied, if we already did,
+ // or it's not possible to upgrade the permission.
+ accuracy: accuracyCombo.currentValue === qsTr("Precise") ? LocationPermission.Precise
+ : LocationPermission.Approximate
+ availability: availabilityCombo.currentValue === qsTr("Always") ? LocationPermission.Always
+ : LocationPermission.WhenInUse
+ // However, the permission will not be affected by other
+ // permissions of the same type. In other words, a more
+ // extensive permission being granted does not reflect
+ // in this permission. Nor does losing an already granted
+ // permission, for example due to the user updating their
+ // system settings.
+ onStatusChanged: console.log("Status: " + status)
+ onAccuracyChanged: console.log("Accuracy: " + accuracy)
+ onAvailabilityChanged: console.log("Availability: " + availability)
+ }
+
+ ColumnLayout {
+ id: layout
+
+ anchors.fill: parent
+ anchors.margins: window.margin
+
+ Text {
+ readonly property string statusAsString: locationPermission.status === Qt.Granted ? qsTr("Granted") :
+ locationPermission.status === Qt.Undetermined ? qsTr("Undetermined")
+ : qsTr("Denied")
+ text: qsTr(`Location services, status: ${statusAsString}`)
+
+ font.bold: true
+ font.pointSize: 16
+ color: locationPermission.status === Qt.Undetermined ? "white" : "black"
+
+ Layout.alignment: Qt.AlignHCenter
+ }
+
+ RowLayout {
+ ComboBox {
+ id: accuracyCombo
+
+ model: ["Precise", "Approximate"]
+ implicitContentWidthPolicy: ComboBox.WidestText
+ Layout.fillWidth: true
+ }
+ ComboBox {
+ id: availabilityCombo
+
+ model: ["Always", "When in use"]
+
+ implicitContentWidthPolicy: ComboBox.WidestText
+ Layout.fillWidth: true
+ }
+ }
+
+ Button {
+ text: qsTr("Request location permissions")
+ enabled: locationPermission.status !== Qt.Denied
+ Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: false
+
+ onClicked: locationPermission.request()
+ }
+ }
+
+ Component.onCompleted: {
+ console.log(locationPermission.status)
+ }
+ }
+}
diff --git a/examples/core/permissions/android/AndroidManifest.xml b/examples/core/permissions/android/AndroidManifest.xml
new file mode 100644
index 0000000000..ac84e78bee
--- /dev/null
+++ b/examples/core/permissions/android/AndroidManifest.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="org.qtproject.example"
+ android:installLocation="auto"
+ android:versionCode="-- %%INSERT_VERSION_CODE%% --"
+ android:versionName="-- %%INSERT_VERSION_NAME%% --">
+ <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+ <!-- %%INSERT_PERMISSIONS -->
+ <!-- %%INSERT_FEATURES -->
+ <supports-screens
+ android:anyDensity="true"
+ android:largeScreens="true"
+ android:normalScreens="true"
+ android:smallScreens="true" />
+ <application
+ android:name="org.qtproject.qt.android.bindings.QtApplication"
+ android:hardwareAccelerated="true"
+ android:label="-- %%INSERT_APP_NAME%% --"
+ android:requestLegacyExternalStorage="true"
+ android:allowNativeHeapPointerTagging="false"
+ android:allowBackup="true"
+ android:fullBackupOnly="false">
+ <activity
+ android:name="org.qtproject.qt.android.bindings.QtActivity"
+ android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density"
+ android:label="-- %%INSERT_APP_NAME%% --"
+ android:launchMode="singleTop"
+ android:screenOrientation="unspecified"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+
+ <meta-data
+ android:name="android.app.lib_name"
+ android:value="-- %%INSERT_APP_LIB_NAME%% --" />
+
+ <meta-data
+ android:name="android.app.extract_android_style"
+ android:value="minimal" />
+ </activity>
+ </application>
+</manifest>
diff --git a/examples/core/permissions/main.cpp b/examples/core/permissions/main.cpp
new file mode 100644
index 0000000000..6635362871
--- /dev/null
+++ b/examples/core/permissions/main.cpp
@@ -0,0 +1,21 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+
+int main(int argc, char **argv)
+{
+ QT_USE_NAMESPACE
+ QGuiApplication::setApplicationName("Permissions");
+ QGuiApplication::setOrganizationName("QtProject");
+
+ QGuiApplication app(argc, argv);
+
+ QQmlApplicationEngine engine;
+ engine.loadFromModule("PermissionsExample", "Main");
+ if (engine.rootObjects().isEmpty())
+ return -1;
+
+ return app.exec();
+}
diff --git a/examples/examples.pro b/examples/examples.pro
index a106166f20..b73064e0c7 100644
--- a/examples/examples.pro
+++ b/examples/examples.pro
@@ -1,5 +1,4 @@
TEMPLATE = subdirs
-qtHaveModule(qmltest): SUBDIRS += qmltest
SUBDIRS += qml
qtHaveModule(quick): SUBDIRS += quick quickcontrols
diff --git a/examples/platforms/CMakeLists.txt b/examples/platforms/CMakeLists.txt
new file mode 100644
index 0000000000..78fb09f4f6
--- /dev/null
+++ b/examples/platforms/CMakeLists.txt
@@ -0,0 +1,6 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+if(ANDROID)
+ add_subdirectory(android)
+endif()
diff --git a/examples/platforms/android/.gitignore b/examples/platforms/android/.gitignore
new file mode 100644
index 0000000000..e1bb0d95b4
--- /dev/null
+++ b/examples/platforms/android/.gitignore
@@ -0,0 +1,10 @@
+*.user
+build/
+**/.idea/
+**/.gradle/
+**/local.properties
+**/app/libs/
+**/app/src/main/res/xml/qtprovider_paths.xml
+**/app/src/main/res/values/libs.xml
+**/app/assets/android_rcc_bundle.rcc
+
diff --git a/examples/platforms/android/CMakeLists.txt b/examples/platforms/android/CMakeLists.txt
new file mode 100644
index 0000000000..7ed54f821d
--- /dev/null
+++ b/examples/platforms/android/CMakeLists.txt
@@ -0,0 +1,6 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+qt_internal_add_example(qml_in_android_view)
+qt_internal_add_example(qml_in_java_based_android_project)
+qt_internal_add_example(qml_in_kotlin_based_android_project)
diff --git a/examples/platforms/android/doc/images/portrait_java.png b/examples/platforms/android/doc/images/portrait_java.png
new file mode 100644
index 0000000000..266f0a2709
--- /dev/null
+++ b/examples/platforms/android/doc/images/portrait_java.png
Binary files differ
diff --git a/examples/platforms/android/doc/src/qml_in_android_studio_projects.qdoc b/examples/platforms/android/doc/src/qml_in_android_studio_projects.qdoc
new file mode 100644
index 0000000000..5cd38b68ef
--- /dev/null
+++ b/examples/platforms/android/doc/src/qml_in_android_studio_projects.qdoc
@@ -0,0 +1,209 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qml-in-android-studio-projects-example.html
+ \title QML in Android Studio Projects
+ \brief Uses a \l {Qt Quick View Android Class}{QtQuickView}
+ to embed a QML component into Android projects.
+ \ingroup qtquickexamples
+
+ \section1 Overview
+
+ This example contains a QML project that you can import into Android Studio
+ with the \l {Qt Tools for Android Studio} plugin
+ and Java and Kotlin projects that use the QML project as a View by
+ utilizing the \l {Qt Quick View Android Class}{QtQuickView} API.
+
+ For more information on how QML works, see the \l {Qt Qml}. This
+ documentation will focus on how a QML component is embedded into
+ Java- and Kotlin-based Android applications.
+
+ \image portrait_java.png
+
+ First, we look at the \c MainActivity's onCreate() method of the Java
+ and Kotlin projects.
+
+ For a Java-based project:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java onCreate
+
+ For a Kotlin-based project:
+
+ \snippet android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt onCreate
+
+ \note in the Kotlin project we use \l {Android: View binding}{View binding}
+ to access the UI components of the application:
+
+ \snippet android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt binding
+
+ Inside the \c onCreate() method, a previously declared variable
+ \c m_qtQuickView is initialized with a new
+ \l {Qt Quick View Android Class}{QtQuickView}.
+ This new instance of \l {Qt Quick View Android Class}{QtQuickView}
+ is created by giving it the Context of the Java/Kotlin Activity as
+ an argument.
+
+ For a Java-based project:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java m_qtQuickView
+
+ For a Kotlin-based project:
+
+ \snippet android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt m_qtQuickView
+
+ Previously declared variable m_mainQmlComponent is
+ initialized with new Main() object. Main is a Java class extending
+ QtQmlComponent, generated from the imported QML project.
+ This is the QML component we will be interacting with.
+
+ For a Java-based project:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java qmlComponent
+
+ For a Kotlin-based project (initialized when declared):
+
+ \snippet android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt qmlComponent
+
+ The \c m_mainQmlComponent is loaded into the \c m_qtQuickView through the
+ \c QtQuickView.loadComponent() method, which takes \c QtQmlComponent as an
+ argument.
+
+ For a Java-based project:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java loadComponent
+
+ For a Kotlin-based project:
+
+ \snippet android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt loadComponent
+
+ The \c m_qtQuickView is added to Android FrameLayout ViewGroup with
+ appropriate layout parameters.
+
+ For a Java-based project:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java layoutParams
+
+ For a Kotlin-based project:
+
+ \snippet android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt layoutParams
+
+ \section1 Interacting with the QML component
+
+ To interact with the embedded QML component we implement the
+ \c QtQmlStatusChangeListener interface and override the onStatusChanged
+ method to get the loading status of the QtQmlComponent currently being
+ loaded into the \c m_qtQuickView.
+
+ For a Java-based project:
+
+ \code
+ public class MainActivity extends AppCompatActivity implements
+ QtQmlStatusChangeListener{
+ ...
+ }
+ \endcode
+
+ For a Kotlin-based project:
+
+ \code
+ class MainActivity : AppCompatActivity(), QtQmlStatusChangeListener{
+ ...
+ }
+ \endcode
+
+ OnstatusChanged implementation.
+
+ For a Java-based project:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java onStatusChanged
+
+ For a Kotlin-based project:
+
+ \snippet android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt onStatusChanged
+
+ The onStatusChanged method is then set as the statusChangeListener of
+ the \c QtQmlComponent with QtQmlComponent.setStatusChangeListener(
+ QtQmlStatusChangeListener onStatusChanged()).
+
+ For a Java-based project:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java setStatusChangeListener
+
+ For a Kotlin-based project:
+
+ \snippet android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt setStatusChangeListener
+
+ The overridden callback function \c onStatusChanged() receives
+ \c StatusChanged() signal containing the current
+ status (public Enum QtQmlStatus) of the loading of the current
+ QtQmlComponent into the \c m_qtQuickView. If this \c QtQmlStatus
+ is confirmed to be \c QtQmlStatus.READY, we can start interacting
+ with the QML view.
+
+ \section1 Getting and setting QML component property values
+
+ Getting and setting QML component property values happens through the
+ methods described in the \c Main.java class. In this case we use the
+ \c m_mainQmlComponent.setColorStringProperty() and
+ \c m_mainQmlComponent.getColorStringProperty() methods. These methods are
+ generated according to what properties the QML component includes.
+
+ For a Java-based project:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java onClickListener
+
+ For a Kotlin-based project:
+
+ \snippet android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt onClickListener
+
+ With the \c m_mainQmlComponent.setColorStringProperty()
+ method we set the \c colorStringFormat property value of the
+ \c m_mainQmlComponent a random color value that is fetched from the
+ \c Colors.java class.
+
+ The \c m_mainQmlComponent.getColorStringProperty()
+ method is used here to fetch the current background color of the root
+ object of the m_mainQmlComponent and then show it to the user on the
+ Java/Kotlin Android side of the application.
+
+ \section1 Signal listeners
+
+ The \c QtQmlComponent class offers a
+ \c connectSignalListener() and \c disconnectSignalListener() methods which
+ are used to connect and disconnect a signal listener/s between a signal/s
+ that is/are declared in the QML component root object.
+ The \c QtQmlComponent.connectSignalListener()
+ returns a unique signal listener id which we store and use later to
+ identify and disconnect the listener.
+
+ Here we connect a signal listener to the \c onClicked() signal of the
+ QML component.
+
+ For a Java-based project:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java qml signal listener
+
+ For a Kotlin-based project:
+
+ \snippet android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt qml signal listener
+
+ The \c onClicked() signal is emitted every time the button on the
+ QML component is clicked.
+ That signal is then received by this listener and the background
+ color of the layout holding the Android side of the application is set to
+ a random color value fetched from the \c Colors.java class.
+
+ Next, the signal listener is disconnected using the
+ \c QtQmlComponent.disconnectSignalListener()
+ method by giving it the unique signal listener id.
+
+ For a Java-based project:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java disconnect qml signal listener
+
+ For a Kotlin-based project:
+
+ \snippet android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt disconnect qml signal listener
+
+*/
diff --git a/examples/platforms/android/qml_in_android_view/CMakeLists.txt b/examples/platforms/android/qml_in_android_view/CMakeLists.txt
new file mode 100644
index 0000000000..86d3c6243f
--- /dev/null
+++ b/examples/platforms/android/qml_in_android_view/CMakeLists.txt
@@ -0,0 +1,32 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+cmake_minimum_required(VERSION 3.16)
+
+project(qml_in_android_view VERSION 0.1 LANGUAGES CXX)
+
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+find_package(Qt6 6.7 REQUIRED COMPONENTS Quick)
+
+qt_standard_project_setup(REQUIRES 6.6)
+
+qt_add_executable(qml_in_android_view
+ main.cpp
+)
+
+qt_add_qml_module(qml_in_android_view
+ URI qmlModule
+ VERSION 1.0
+ QML_FILES Main.qml
+)
+
+target_link_libraries(qml_in_android_view
+ PRIVATE Qt6::Quick
+)
+
+install(TARGETS qml_in_android_view
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
diff --git a/examples/platforms/android/qml_in_android_view/Main.qml b/examples/platforms/android/qml_in_android_view/Main.qml
new file mode 100644
index 0000000000..3ed2b6f58b
--- /dev/null
+++ b/examples/platforms/android/qml_in_android_view/Main.qml
@@ -0,0 +1,87 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+import QtQuick
+import QtQuick.Controls
+
+Rectangle {
+ id: mainRectangle
+
+ property string colorStringFormat: "#1CB669"
+
+ signal onClicked()
+
+ color: colorStringFormat
+
+ Text {
+ id: helloText
+
+ text: "QML"
+ color: "white"
+ font.pixelSize: 72
+ fontSizeMode: Text.VerticalFit
+ // Height is calculated based on display orientation
+ // from Screen height, dividing numbers are based on what what seem
+ // to look good on most displays
+ height: Screen.width > Screen.height ? Screen.height / 8 : (Screen.height / 2) / 8
+ font.bold: true
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top
+ anchors.topMargin: 5
+ horizontalAlignment: Text.AlignHCenter
+ }
+
+
+ Text {
+ id: changeColorText
+
+ text: "Tap button to change Java view background color"
+ wrapMode: Text.Wrap
+ color: "white"
+ font.pixelSize: 58
+ fontSizeMode: Text.Fit
+ // Height and width are calculated based on display orientation
+ // from Screen height and width, dividing numbers are based on what seem to
+ // look good on most displays
+ height: Screen.width > Screen.height ? Screen.height / 8 : (Screen.height / 2) / 8
+ width: Screen.width > Screen.height ? (Screen.width / 2) / 2 : Screen.width / 2
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: helloText.bottom
+ anchors.topMargin: Screen.height / 10
+ horizontalAlignment: Text.AlignHCenter
+ }
+
+ Button {
+ id: button
+ // Width is calculated from changeColorText which is calculated from Screen size
+ // dividing numbers are base on what seems to look good on most displays
+ width: changeColorText.width / 1.6
+ height: changeColorText.height * 1.2
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: changeColorText.bottom
+ anchors.topMargin: height / 5
+
+ onClicked: mainRectangle.onClicked()
+
+ background: Rectangle {
+ id: buttonBackground
+
+ radius: 14
+ color: "#6200EE"
+ opacity: button.down ? 0.6 : 1
+ scale: button.down ? 0.9 : 1
+ }
+ contentItem: Text {
+ id: buttonText
+
+ text: "CHANGE COLOR"
+ color: "white"
+ font.pixelSize: 58
+ minimumPixelSize: 10
+ fontSizeMode: Text.Fit
+ font.bold: true
+ wrapMode: Text.Wrap
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+}
diff --git a/examples/platforms/android/qml_in_android_view/main.cpp b/examples/platforms/android/qml_in_android_view/main.cpp
new file mode 100644
index 0000000000..c195699a0f
--- /dev/null
+++ b/examples/platforms/android/qml_in_android_view/main.cpp
@@ -0,0 +1,11 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#include <QGuiApplication>
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ return app.exec();
+}
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/CMakeLists.txt b/examples/platforms/android/qml_in_java_based_android_project/CMakeLists.txt
new file mode 100644
index 0000000000..ed5212d564
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/CMakeLists.txt
@@ -0,0 +1,18 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+cmake_minimum_required(VERSION 3.16)
+
+project(qml_in_java_based_android_project VERSION 0.1 LANGUAGES CXX)
+
+install(DIRECTORY
+ gradle
+ app
+ DESTINATION .
+)
+install(FILES
+ settings.gradle
+ gradle.properties
+ build.gradle
+ CMakeLists.txt
+ DESTINATION .
+)
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/build.gradle b/examples/platforms/android/qml_in_java_based_android_project/app/build.gradle
new file mode 100644
index 0000000000..ab25257151
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/build.gradle
@@ -0,0 +1,56 @@
+plugins {
+ id 'com.android.application'
+}
+
+android {
+ namespace 'com.example.qml_in_java_based_android_project'
+ compileSdk 34
+
+ defaultConfig {
+ applicationId "com.example.qml_in_java_based_android_project"
+ minSdk 28
+ targetSdk 34
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ packagingOptions {
+ jniLibs {
+ useLegacyPackaging true
+ }
+ }
+ sourceSets {
+ main {
+ assets {
+ srcDirs 'assets'
+ }
+ jniLibs {
+ srcDirs 'libs'
+ }
+ }
+ }
+}
+
+dependencies {
+
+ implementation 'androidx.appcompat:appcompat:1.6.1'
+ implementation 'com.google.android.material:material:1.9.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+ implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
+}
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/AndroidManifest.xml b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..f058a307fb
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/AndroidManifest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <application
+ android:allowBackup="true"
+ android:dataExtractionRules="@xml/data_extraction_rules"
+ android:fullBackupContent="@xml/backup_rules"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:roundIcon="@mipmap/ic_launcher_round"
+ android:supportsRtl="true"
+ android:theme="@style/Theme.MyApplication"
+ tools:targetApi="34">
+ <activity
+ android:name=".MainActivity"
+ android:exported="true"
+ android:configChanges="orientation|screenLayout|screenSize">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER"/>
+ </intent-filter>
+ </activity>
+ </application>
+
+</manifest>
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/Colors.java b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/Colors.java
new file mode 100644
index 0000000000..ba2a9265f9
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/Colors.java
@@ -0,0 +1,35 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+package com.example.qml_in_java_based_android_project;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Stack;
+
+class Colors {
+ private final Stack<Integer> recycle;
+ private final Stack<Integer> colors;
+
+ public Colors() {
+ colors = new Stack<>();
+ recycle = new Stack<>();
+ recycle.addAll(Arrays.asList(
+ 0xff1CB669, 0xff00414A, 0xff27138B,
+ 0xffB5C10E, 0xff373F26, 0xffAF93DF,
+ 0xff817505
+ )
+ );
+ }
+
+ public String getColor() {
+ if (colors.size()==0) {
+ while (!recycle.isEmpty())
+ colors.push(recycle.pop());
+ Collections.shuffle(colors);
+ }
+ int color = colors.pop();
+ recycle.push(color);
+ return String.format("#%06X", (0xFFFFFF & color));
+ }
+}
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java
new file mode 100644
index 0000000000..0a7b8325e0
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java
@@ -0,0 +1,183 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+package com.example.qml_in_java_based_android_project;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.SwitchCompat;
+import android.content.res.Configuration;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import org.qtproject.qt.android.QtQmlStatus;
+import org.qtproject.qt.android.QtQmlStatusChangeListener;
+import org.qtproject.qt.android.QtQuickView;
+import org.qtproject.example.qml_in_android_view.QmlModule.Main;
+import java.util.HashMap;
+import java.util.Map;
+
+// Implement QtQuickView StatusChangeListener interface to get status updates
+// from the underlying QQuickView
+public class MainActivity extends AppCompatActivity implements QtQmlStatusChangeListener {
+
+ private static final String TAG = "myTag";
+ private final Colors m_colors = new Colors();
+ private final Map<QtQmlStatus, String> m_statusNames = new HashMap<QtQmlStatus, String>() {{
+ put(QtQmlStatus.READY, " READY");
+ put(QtQmlStatus.LOADING, " LOADING");
+ put(QtQmlStatus.ERROR, " ERROR");
+ put(QtQmlStatus.NULL, " NULL");
+ }};
+ private int m_qmlButtonSignalListenerId;
+ private LinearLayout m_mainLinear;
+ private FrameLayout m_qmlFrameLayout;
+ private QtQuickView m_qtQuickView;
+ private Main m_mainQmlComponent;
+ private LinearLayout m_androidControlsLayout;
+ private TextView m_getPropertyValueText;
+ private TextView m_qmlStatus;
+ private SwitchCompat m_switch;
+ private View m_box;
+
+ //! [onCreate]
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ m_mainLinear = findViewById(R.id.mainLinear);
+ m_getPropertyValueText = findViewById(R.id.getPropertyValueText);
+ m_qmlStatus = findViewById(R.id.qmlStatusText);
+ m_androidControlsLayout = findViewById(R.id.javaLinear);
+ m_box = findViewById(R.id.qmlColorBox);
+ m_switch = findViewById(R.id.disconnectQmlListenerSwitch);
+ m_switch.setOnClickListener(view -> switchListener());
+ //! [qmlComponent]
+ m_mainQmlComponent = new Main();
+ //! [qmlComponent]
+ //! [m_qtQuickView]
+ m_qtQuickView = new QtQuickView(this);
+ //! [m_qtQuickView]
+
+ // Set status change listener for m_qmlView
+ // listener implemented below in OnStatusChanged
+ //! [setStatusChangeListener]
+ m_mainQmlComponent.setStatusChangeListener(this);
+ //! [setStatusChangeListener]
+ //! [layoutParams]
+ ViewGroup.LayoutParams params = new FrameLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+ m_qmlFrameLayout = findViewById(R.id.qmlFrame);
+ m_qmlFrameLayout.addView(m_qtQuickView, params);
+ //! [layoutParams]
+ //! [loadComponent]
+ m_qtQuickView.loadComponent(m_mainQmlComponent);
+ //! [loadComponent]
+
+ findViewById(R.id.changeQmlColorButton).setOnClickListener(view -> onClickListener());
+
+ // Check target device orientation on launch
+ handleOrientationChanges();
+ }
+
+ //! [onCreate]
+ @Override
+ public void onConfigurationChanged(@NonNull Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ handleOrientationChanges();
+ }
+
+ private void handleOrientationChanges() {
+ // When specific target device display configurations (listed in AndroidManifest.xml
+ // android:configChanges) change, get display metrics and make needed changes to UI
+ DisplayMetrics displayMetrics = new DisplayMetrics();
+ getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
+ ViewGroup.LayoutParams qmlFrameLayoutParams = m_qmlFrameLayout.getLayoutParams();
+ ViewGroup.LayoutParams linearLayoutParams = m_androidControlsLayout.getLayoutParams();
+
+ if (displayMetrics.heightPixels > displayMetrics.widthPixels) {
+ m_mainLinear.setOrientation(LinearLayout.VERTICAL);
+ qmlFrameLayoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
+ qmlFrameLayoutParams.height = 0;
+ linearLayoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
+ linearLayoutParams.height = 0;
+ } else {
+ m_mainLinear.setOrientation(LinearLayout.HORIZONTAL);
+ qmlFrameLayoutParams.width = 0;
+ qmlFrameLayoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
+ linearLayoutParams.width = 0;
+ linearLayoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
+ }
+ m_qmlFrameLayout.setLayoutParams(qmlFrameLayoutParams);
+ m_androidControlsLayout.setLayoutParams(linearLayoutParams);
+ }
+
+ //! [onClickListener]
+ public void onClickListener() {
+ // Set the QML view root object property "colorStringFormat" value to
+ // color from Colors.getColor()
+ m_mainQmlComponent.setColorStringFormat(m_colors.getColor());
+
+ String qmlBackgroundColor = m_mainQmlComponent.getColorStringFormat();
+
+ // Display the QML View background color code
+ m_getPropertyValueText.setText(qmlBackgroundColor);
+
+ // Display the QML View background color in a view
+ m_box.setBackgroundColor(Color.parseColor(qmlBackgroundColor));
+ }
+ //! [onClickListener]
+
+ public void switchListener() {
+ TextView text = findViewById(R.id.switchText);
+ // Disconnect QML button signal listener if switch is On using the saved signal listener Id
+ // and connect it again if switch is turned off
+ if (m_switch.isChecked()) {
+ Log.i(TAG, "QML button onClicked signal listener disconnected");
+ text.setText(R.string.connect_qml_button_signal_listener);
+ //! [disconnect qml signal listener]
+ m_mainQmlComponent.disconnectSignalListener(m_qmlButtonSignalListenerId);
+ //! [disconnect qml signal listener]
+ } else {
+ Log.i(TAG, "QML button onClicked signal listener connected");
+ text.setText(R.string.disconnect_qml_button_signal_listener);
+ m_qmlButtonSignalListenerId = m_mainQmlComponent.connectOnClickedListener(
+ (String name, Void v) -> {
+ Log.i(TAG, "QML button clicked");
+ m_androidControlsLayout.setBackgroundColor(Color.parseColor(m_colors.getColor()));
+ });
+ }
+ }
+ //! [onStatusChanged]
+ @Override
+ public void onStatusChanged(QtQmlStatus qtQmlStatus) {
+ Log.i(TAG, "Status of QtQuickView: " + qtQmlStatus);
+
+ final String qmlStatus = getResources().getString(R.string.qml_view_status)
+ + m_statusNames.get(qtQmlStatus);
+
+ // Show current QML View status in a textview
+ m_qmlStatus.setText(qmlStatus);
+
+ // Connect signal listener to "onClicked" signal from main.qml
+ // addSignalListener returns int which can be used later to identify the listener
+ //! [qml signal listener]
+ if (qtQmlStatus == QtQmlStatus.READY && !m_switch.isChecked()) {
+ m_qmlButtonSignalListenerId = m_mainQmlComponent.connectOnClickedListener(
+ (String name, Void v) -> {
+ Log.i(TAG, "QML button clicked");
+ m_androidControlsLayout.setBackgroundColor(Color.parseColor(m_colors.getColor()));
+ });
+
+ }
+ //! [qml signal listener]
+ }
+ //! [onStatusChanged]
+}
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/drawable/ic_launcher_background.xml b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000000..ca3826a46c
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector
+ android:height="108dp"
+ android:width="108dp"
+ android:viewportHeight="108"
+ android:viewportWidth="108"
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="#3DDC84"
+ android:pathData="M0,0h108v108h-108z"/>
+ <path android:fillColor="#00000000" android:pathData="M9,0L9,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,0L19,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M29,0L29,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M39,0L39,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M49,0L49,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M59,0L59,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M69,0L69,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M79,0L79,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M89,0L89,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M99,0L99,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,9L108,9"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,19L108,19"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,29L108,29"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,39L108,39"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,49L108,49"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,59L108,59"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,69L108,69"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,79L108,79"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,89L108,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,99L108,99"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,29L89,29"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,39L89,39"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,49L89,49"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,59L89,59"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,69L89,69"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,79L89,79"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M29,19L29,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M39,19L39,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M49,19L49,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M59,19L59,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M69,19L69,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M79,19L79,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+</vector>
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/drawable/ic_launcher_foreground.xml b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 0000000000..9a5435b534
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,31 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:aapt="http://schemas.android.com/aapt"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
+ <aapt:attr name="android:fillColor">
+ <gradient
+ android:endX="85.84757"
+ android:endY="92.4963"
+ android:startX="42.9492"
+ android:startY="49.59793"
+ android:type="linear">
+ <item
+ android:color="#44000000"
+ android:offset="0.0" />
+ <item
+ android:color="#00000000"
+ android:offset="1.0" />
+ </gradient>
+ </aapt:attr>
+ </path>
+ <path
+ android:fillColor="#FFFFFF"
+ android:fillType="nonZero"
+ android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
+ android:strokeWidth="1"
+ android:strokeColor="#00000000" />
+</vector>
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/layout/activity_main.xml b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000000..69a55e9242
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/mainLinear"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".MainActivity"
+ android:orientation="vertical"
+ android:baselineAligned="false">
+
+ <FrameLayout
+ android:id="@+id/qmlFrame"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1">
+
+ </FrameLayout>
+
+ <LinearLayout
+ android:id="@+id/javaLinear"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:background="@color/lilac"
+ android:orientation="vertical">
+
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="8dp"
+ android:gravity="center_horizontal"
+ android:includeFontPadding="false"
+ android:text="@string/java"
+ android:textColor="@color/white"
+ android:textSize="24sp"
+ android:textStyle="bold" />
+
+ <TextView
+ android:id="@+id/qmlStatusText"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="16dp"
+ android:gravity="center_horizontal"
+ android:text="@string/qml_view_status"
+ android:textColor="@color/white"/>
+
+ <LinearLayout
+ android:id="@+id/buttonAndSwitchLayout"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:orientation="horizontal"
+ android:layout_marginTop="16dp">
+
+ <LinearLayout
+ android:id="@+id/buttonLinearLayout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:layout_weight="1">
+
+ <TextView
+ android:id="@+id/changeColorText"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:maxLines="3"
+ android:text="@string/change_qml_background"
+ android:textColor="@color/white" />
+
+ <Button
+ android:id="@+id/changeQmlColorButton"
+ android:layout_width="100dp"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="8dp"
+ android:text="@string/button"
+ android:textSize="14sp" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/switchLinearLayout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:layout_weight="1">
+
+ <TextView
+ android:id="@+id/switchText"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:maxLines="3"
+ android:text="@string/disconnect_qml_button_signal_listener"
+ android:textColor="@color/white" />
+
+ <androidx.appcompat.widget.SwitchCompat
+ android:id="@+id/disconnectQmlListenerSwitch"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="8dp"
+ app:showText="true"
+ app:switchTextAppearance="@style/switchStyle"
+ android:switchTextAppearance="@android:style/TextAppearance.Small"
+ android:textOff="@string/off"
+ android:textOn="@string/on"
+ tools:ignore="UseSwitchCompatOrMaterialXml" />
+ </LinearLayout>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/qmlColorLinear"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:padding="10dp">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:layout_weight="1">
+
+ <TextView
+ android:id="@+id/qmlViewBackgroundText"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:maxLines="2"
+ android:text="@string/qml_view_background_color"
+ android:textColor="@color/white" />
+
+ <TextView
+ android:id="@+id/getPropertyValueText"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:textColor="@color/white" />
+ </LinearLayout>
+
+ <View
+ android:id="@+id/qmlColorBox"
+ android:layout_width="100dp"
+ android:layout_height="50dp"
+ android:layout_gravity="center_horizontal"
+ android:background="@android:color/transparent"
+ android:layout_weight="0"/>
+ </LinearLayout>
+
+ </LinearLayout>
+
+</LinearLayout>
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000000..3ff874648d
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background"/>
+ <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon>
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000000..3ff874648d
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background"/>
+ <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon>
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 0000000000..f043b66984
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000000..53e483046c
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000..5646cd4957
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 0000000000..8121c6f7c2
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000000..da81ab2c05
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000..d68eb57118
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 0000000000..818fa2b2dc
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000000..57d6591183
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000..cf05b107f0
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 0000000000..30855a994a
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000000..385517a7eb
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000..10ec83e5f4
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 0000000000..5a9dab1d44
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000000..62d203c390
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000..52d2c11162
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/colors.xml b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000000..30d00eda0f
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/colors.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="purple_500">#FF6200EE</color>
+ <color name="purple_700">#FF3700B3</color>
+ <color name="teal_200">#FF03DAC5</color>
+ <color name="teal_700">#FF018786</color>
+ <color name="black">#FF000000</color>
+ <color name="white">#FFFFFFFF</color>
+ <color name="lilac">#AF93DF</color>
+</resources>
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/strings.xml b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..67d301c48c
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/strings.xml
@@ -0,0 +1,13 @@
+<resources>
+ <string name="app_name">qml_in_java_based_android_project</string>
+ <string name="button">Change color</string>
+ <string name="java">Java</string>
+ <string name="change_qml_background">Tap button to change QML view background color</string>
+ <string name="disconnect_qml_button_signal_listener">Tap switch to disconnect QML button signal listener</string>
+ <string name="connect_qml_button_signal_listener">Tap switch to connect QML button signal listener</string>
+ <string name="on">On</string>
+ <string name="off">Off</string>
+ <string name="qml_view_status">QML view status: </string>
+ <string name="qml_view_background_color">QML view background color:</string>
+</resources>
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/styles.xml b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000000..bce864063a
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/styles.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <style name="switchStyle">
+ <item name="android:textSize">12sp</item>
+ </style>
+</resources>
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/themes.xml b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/themes.xml
new file mode 100644
index 0000000000..515cb95981
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/values/themes.xml
@@ -0,0 +1,16 @@
+<resources xmlns:tools="http://schemas.android.com/tools">
+ <!-- Base application theme. -->
+ <style name="Theme.MyApplication" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
+ <!-- Primary brand color. -->
+ <item name="colorPrimary">@color/purple_500</item>
+ <item name="colorPrimaryVariant">@color/purple_700</item>
+ <item name="colorOnPrimary">@color/white</item>
+ <!-- Secondary brand color. -->
+ <item name="colorSecondary">@color/teal_200</item>
+ <item name="colorSecondaryVariant">@color/teal_700</item>
+ <item name="colorOnSecondary">@color/black</item>
+ <!-- Status bar color. -->
+ <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
+ <!-- Customize your theme here. -->
+ </style>
+</resources>
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/xml/backup_rules.xml b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/xml/backup_rules.xml
new file mode 100644
index 0000000000..04dd1acfe3
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/xml/backup_rules.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Sample backup rules file; uncomment and customize as necessary.
+ See https://developer.android.com/guide/topics/data/autobackup
+ for details.
+ Note: This file is ignored for devices older that API 31
+ See https://developer.android.com/about/versions/12/backup-restore
+-->
+<full-backup-content>
+</full-backup-content>
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/xml/data_extraction_rules.xml b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/xml/data_extraction_rules.xml
new file mode 100644
index 0000000000..9840b57766
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/app/src/main/res/xml/data_extraction_rules.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Sample data extraction rules file; uncomment and customize as necessary.
+ See https://developer.android.com/about/versions/12/backup-restore#xml-changes
+ for details.
+-->
+<data-extraction-rules>
+ <cloud-backup>
+ </cloud-backup>
+</data-extraction-rules>
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/build.gradle b/examples/platforms/android/qml_in_java_based_android_project/build.gradle
new file mode 100644
index 0000000000..b92d690313
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/build.gradle
@@ -0,0 +1,4 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+id 'com.android.application' version '7.4.1' apply false
+}
diff --git a/examples/platforms/android/qml_in_java_based_android_project/gradle.properties b/examples/platforms/android/qml_in_java_based_android_project/gradle.properties
new file mode 100644
index 0000000000..dacb776f4a
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/gradle.properties
@@ -0,0 +1,22 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Enables namespacing of each library's R class so that its R class includes only the
+# resources declared in the library itself and none from the library's dependencies,
+# thereby reducing the size of the R class for that library
+android.nonTransitiveRClass=true
+
diff --git a/examples/platforms/android/qml_in_java_based_android_project/gradle/wrapper/gradle-wrapper.properties b/examples/platforms/android/qml_in_java_based_android_project/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000..e94b8a6800
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Thu Feb 08 15:14:57 EET 2024
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/examples/platforms/android/qml_in_java_based_android_project/settings.gradle b/examples/platforms/android/qml_in_java_based_android_project/settings.gradle
new file mode 100644
index 0000000000..80a48f7b1a
--- /dev/null
+++ b/examples/platforms/android/qml_in_java_based_android_project/settings.gradle
@@ -0,0 +1,17 @@
+pluginManagement {
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+rootProject.name = "qml_in_java_based_android_project"
+include ':app'
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/CMakeLists.txt b/examples/platforms/android/qml_in_kotlin_based_android_project/CMakeLists.txt
new file mode 100644
index 0000000000..efa2575b8f
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/CMakeLists.txt
@@ -0,0 +1,18 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+cmake_minimum_required(VERSION 3.16)
+
+project(qml_in_kotlin_based_android_project VERSION 0.1 LANGUAGES CXX)
+
+install(DIRECTORY
+ gradle
+ app
+ DESTINATION .
+)
+install(FILES
+ settings.gradle
+ gradle.properties
+ build.gradle
+ CMakeLists.txt
+ DESTINATION .
+)
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/build.gradle b/examples/platforms/android/qml_in_kotlin_based_android_project/app/build.gradle
new file mode 100644
index 0000000000..18c5756657
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/build.gradle
@@ -0,0 +1,64 @@
+plugins {
+ id 'com.android.application'
+ id 'org.jetbrains.kotlin.android'
+}
+
+android {
+ namespace 'com.example.qml_in_kotlin_based_android_project'
+ compileSdk 34
+
+ defaultConfig {
+ applicationId "com.example.qml_in_kotlin_based_android_project"
+ minSdk 28
+ targetSdk 34
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildFeatures {
+ viewBinding = true
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+ packagingOptions {
+ jniLibs {
+ useLegacyPackaging true
+ }
+ }
+ sourceSets {
+ main {
+ assets {
+ srcDirs 'assets'
+ }
+ jniLibs {
+ srcDirs 'libs'
+ }
+ }
+ }
+}
+
+dependencies {
+
+ implementation 'androidx.core:core-ktx:1.10.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
+ implementation 'com.google.android.material:material:1.11.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+ implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
+}
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/AndroidManifest.xml b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..fb183e2d79
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/AndroidManifest.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <application
+ android:allowBackup="true"
+ android:dataExtractionRules="@xml/data_extraction_rules"
+ android:fullBackupContent="@xml/backup_rules"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:roundIcon="@mipmap/ic_launcher_round"
+ android:supportsRtl="true"
+ android:theme="@style/Theme.Qml_in_kotlin_based_android_project"
+ tools:targetApi="34">
+ <activity
+ android:name=".MainActivity"
+ android:exported="true"
+ android:configChanges="screenSize|screenLayout|orientation">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER"/>
+ </intent-filter>
+ </activity>
+ </application>
+
+</manifest>
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/Colors.kt b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/Colors.kt
new file mode 100644
index 0000000000..7770497796
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/Colors.kt
@@ -0,0 +1,31 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+package com.example.qml_in_kotlin_based_android_project
+
+import java.util.Collections
+import java.util.Stack
+
+internal class Colors {
+ private val recycle: Stack<Int> = Stack()
+ private val colors: Stack<Int> = Stack()
+
+ init {
+ recycle.addAll(
+ mutableListOf(
+ -0xe34997, -0xffbeb6, -0xd8ec75,
+ -0x4a3ef2, -0xc8c0da, -0x506c21,
+ -0x7e8afb
+ )
+ )
+ }
+
+ fun getColor(): String {
+ if (colors.size == 0) {
+ while (!recycle.isEmpty()) colors.push(recycle.pop())
+ Collections.shuffle(colors)
+ }
+ val color = colors.pop()
+ recycle.push(color)
+ return String.format("#%06X", 0xFFFFFF and color)
+ }
+}
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt
new file mode 100644
index 0000000000..6c631822f4
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/java/com/example/qml_in_kotlin_based_android_project/MainActivity.kt
@@ -0,0 +1,168 @@
+package com.example.qml_in_kotlin_based_android_project
+
+import android.content.res.Configuration
+import android.graphics.Color
+import android.os.Bundle
+import android.util.DisplayMetrics
+import android.util.Log
+import android.view.ViewGroup
+import android.widget.FrameLayout
+import android.widget.LinearLayout
+import androidx.appcompat.app.AppCompatActivity
+import com.example.qml_in_kotlin_based_android_project.databinding.ActivityMainBinding
+import org.qtproject.example.qml_in_android_view.QmlModule.Main
+import org.qtproject.qt.android.QtQmlStatus
+import org.qtproject.qt.android.QtQmlStatusChangeListener
+import org.qtproject.qt.android.QtQuickView
+
+class MainActivity : AppCompatActivity(), QtQmlStatusChangeListener {
+
+ private val TAG = "myTag"
+ private val m_colors: Colors = Colors()
+ private lateinit var m_binding: ActivityMainBinding
+ private var m_qmlButtonSignalListenerId = 0
+ private var m_qtQuickView: QtQuickView? = null
+ //! [qmlComponent]
+ private var m_mainQmlComponent: Main = Main()
+ //! [qmlComponent]
+ private val m_statusNames = hashMapOf(
+ QtQmlStatus.READY to "READY",
+ QtQmlStatus.LOADING to "LOADING",
+ QtQmlStatus.ERROR to "ERROR",
+ QtQmlStatus.NULL to "NULL"
+ )
+ //! [onCreate]
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ //! [binding]
+ m_binding = ActivityMainBinding.inflate(layoutInflater)
+ val view = m_binding.root
+ setContentView(view)
+ //! [binding]
+
+ m_binding.signalSwitch.setOnClickListener { switchListener() }
+
+ //! [m_qtQuickView]
+ m_qtQuickView = QtQuickView(this)
+ //! [m_qtQuickView]
+
+ // Set status change listener for m_qmlView
+ // listener implemented below in OnStatusChanged
+ //! [setStatusChangeListener]
+ m_mainQmlComponent.setStatusChangeListener(this)
+ //! [setStatusChangeListener]
+
+ //! [layoutParams]
+ val params: ViewGroup.LayoutParams = FrameLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT
+ )
+ m_binding.qmlFrame.addView(m_qtQuickView, params)
+ //! [layoutParams]
+ //! [loadComponent]
+ m_qtQuickView!!.loadComponent(m_mainQmlComponent)
+ //! [loadComponent]
+
+ m_binding.changeColorButton.setOnClickListener { onClickListener() }
+
+ // Check target device orientation on launch
+ handleOrientationChanges()
+ }
+ //! [onCreate]
+ override fun onConfigurationChanged(newConfig: Configuration) {
+ super.onConfigurationChanged(newConfig)
+ handleOrientationChanges()
+ }
+
+ private fun handleOrientationChanges() {
+ // When specific target device display configurations (listed in AndroidManifest.xml
+ // android:configChanges) change, get display metrics and make needed changes to UI
+ val displayMetrics = DisplayMetrics()
+ windowManager.defaultDisplay.getMetrics(displayMetrics)
+ val qmlFrameLayoutParams = m_binding.qmlFrame.layoutParams
+ val linearLayoutParams = m_binding.kotlinLinear.layoutParams
+
+ if (displayMetrics.heightPixels > displayMetrics.widthPixels) {
+ m_binding.mainLinear.orientation = LinearLayout.VERTICAL
+ qmlFrameLayoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT
+ qmlFrameLayoutParams.height = 0
+ linearLayoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT
+ linearLayoutParams.height = 0
+ } else {
+ m_binding.mainLinear.orientation = LinearLayout.HORIZONTAL
+ qmlFrameLayoutParams.width = 0
+ qmlFrameLayoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT
+ linearLayoutParams.width = 0
+ linearLayoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT
+ }
+ m_binding.qmlFrame.layoutParams = qmlFrameLayoutParams
+ m_binding.kotlinLinear.layoutParams = linearLayoutParams
+ }
+
+ //! [onClickListener]
+ private fun onClickListener() {
+ // Set the QML view root object property "colorStringFormat" value to
+ // color from Colors.getColor()
+ m_mainQmlComponent.colorStringFormat = m_colors.getColor()
+
+ val qmlBackgroundColor = m_mainQmlComponent.colorStringFormat
+
+ // Display the QML View background color code
+ m_binding.getPropertyValueText.text = qmlBackgroundColor
+
+ // Display the QML View background color in a view
+ m_binding.colorBox.setBackgroundColor(Color.parseColor(qmlBackgroundColor))
+ }
+ //! [onClickListener]
+
+ private fun switchListener() {
+ // Disconnect QML button signal listener if switch is On using the saved signal listener Id
+ // and connect it again if switch is turned off
+ if (m_binding.signalSwitch.isChecked) {
+ Log.v(TAG, "QML button onClicked signal listener disconnected")
+ m_binding.switchText.setText(R.string.connect_qml_button_signal_listener)
+ //! [disconnect qml signal listener]
+ m_mainQmlComponent.disconnectSignalListener(m_qmlButtonSignalListenerId)
+ //! [disconnect qml signal listener]
+ } else {
+ Log.v(TAG, "QML button onClicked signal listener connected")
+ m_binding.switchText.setText(R.string.disconnect_qml_button_signal_listener)
+ m_qmlButtonSignalListenerId =
+ m_mainQmlComponent.connectOnClickedListener { _: String, _: Void? ->
+ Log.i(TAG, "QML button clicked")
+ m_binding.kotlinLinear.setBackgroundColor(
+ Color.parseColor(
+ m_colors.getColor()
+ )
+ )
+ }
+ }
+ }
+
+ //! [onStatusChanged]
+ override fun onStatusChanged(status: QtQmlStatus?) {
+ Log.v(TAG, "Status of QtQuickView: $status")
+
+ val qmlStatus = (resources.getString(R.string.qml_view_status)
+ + m_statusNames[status])
+
+ // Show current QML View status in a textview
+ m_binding.qmlStatus.text = qmlStatus
+
+ // Connect signal listener to "onClicked" signal from main.qml
+ // addSignalListener returns int which can be used later to identify the listener
+ //! [qml signal listener]
+ if (status == QtQmlStatus.READY && !m_binding.signalSwitch.isChecked) {
+ m_qmlButtonSignalListenerId =
+ m_mainQmlComponent.connectOnClickedListener { _: String, _: Void? ->
+ Log.i(TAG, "QML button clicked")
+ m_binding.kotlinLinear.setBackgroundColor(
+ Color.parseColor(
+ m_colors.getColor()
+ )
+ )
+ }
+ }
+ //! [qml signal listener]
+ }
+ //! [onStatusChanged]
+}
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/drawable/ic_launcher_background.xml b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000000..ca3826a46c
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector
+ android:height="108dp"
+ android:width="108dp"
+ android:viewportHeight="108"
+ android:viewportWidth="108"
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="#3DDC84"
+ android:pathData="M0,0h108v108h-108z"/>
+ <path android:fillColor="#00000000" android:pathData="M9,0L9,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,0L19,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M29,0L29,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M39,0L39,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M49,0L49,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M59,0L59,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M69,0L69,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M79,0L79,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M89,0L89,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M99,0L99,108"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,9L108,9"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,19L108,19"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,29L108,29"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,39L108,39"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,49L108,49"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,59L108,59"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,69L108,69"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,79L108,79"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,89L108,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M0,99L108,99"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,29L89,29"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,39L89,39"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,49L89,49"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,59L89,59"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,69L89,69"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M19,79L89,79"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M29,19L29,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M39,19L39,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M49,19L49,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M59,19L59,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M69,19L69,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+ <path android:fillColor="#00000000" android:pathData="M79,19L79,89"
+ android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+</vector>
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/drawable/ic_launcher_foreground.xml b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 0000000000..7706ab9e6d
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:aapt="http://schemas.android.com/aapt"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
+ <aapt:attr name="android:fillColor">
+ <gradient
+ android:endX="85.84757"
+ android:endY="92.4963"
+ android:startX="42.9492"
+ android:startY="49.59793"
+ android:type="linear">
+ <item
+ android:color="#44000000"
+ android:offset="0.0" />
+ <item
+ android:color="#00000000"
+ android:offset="1.0" />
+ </gradient>
+ </aapt:attr>
+ </path>
+ <path
+ android:fillColor="#FFFFFF"
+ android:fillType="nonZero"
+ android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
+ android:strokeWidth="1"
+ android:strokeColor="#00000000" />
+</vector>
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/layout/activity_main.xml b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000000..03f01fdd25
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/mainLinear"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".MainActivity"
+ android:orientation="vertical"
+ android:baselineAligned="false">
+
+ <FrameLayout
+ android:id="@+id/qmlFrame"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1">
+
+ </FrameLayout>
+
+ <LinearLayout
+ android:id="@+id/kotlinLinear"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:background="@color/lilac"
+ android:orientation="vertical">
+
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="8dp"
+ android:gravity="center_horizontal"
+ android:includeFontPadding="false"
+ android:text="@string/kotlin"
+ android:textColor="@color/white"
+ android:textSize="24sp"
+ android:textStyle="bold" />
+
+ <TextView
+ android:id="@+id/qmlStatus"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="16dp"
+ android:gravity="center_horizontal"
+ android:text="@string/qml_view_status"
+ android:textColor="@color/white"/>
+
+ <LinearLayout
+ android:id="@+id/buttonAndSwitchLayout"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:orientation="horizontal"
+ android:layout_marginTop="16dp">
+
+ <LinearLayout
+ android:id="@+id/buttonLinearLayout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:layout_weight="1">
+
+ <TextView
+ android:id="@+id/changeColorText"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:maxLines="3"
+ android:text="@string/change_qml_background"
+ android:textColor="@color/white" />
+
+ <Button
+ android:id="@+id/changeColorButton"
+ android:layout_width="100dp"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="8dp"
+ android:text="@string/button"
+ android:textSize="14sp" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/switchLinearLayout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:layout_weight="1">
+
+ <TextView
+ android:id="@+id/switchText"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:maxLines="3"
+ android:text="@string/disconnect_qml_button_signal_listener"
+ android:textColor="@color/white" />
+
+ <androidx.appcompat.widget.SwitchCompat
+ android:id="@+id/signalSwitch"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="8dp"
+ android:switchTextAppearance="@android:style/TextAppearance.Small"
+ android:textOff="@string/off"
+ android:textOn="@string/on"
+ app:switchTextAppearance="@style/switchStyle"
+ app:showText="true"
+ tools:ignore="UseSwitchCompatOrMaterialXml" />
+ </LinearLayout>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/qmlColorLinear"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:padding="10dp">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:layout_weight="1">
+
+ <TextView
+ android:id="@+id/qmlViewBackgroundText"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:maxLines="2"
+ android:text="@string/qml_view_background_color"
+ android:textColor="@color/white" />
+
+ <TextView
+ android:id="@+id/getPropertyValueText"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:textColor="@color/white" />
+ </LinearLayout>
+
+ <View
+ android:id="@+id/colorBox"
+ android:layout_width="100dp"
+ android:layout_height="50dp"
+ android:layout_gravity="center_horizontal"
+ android:background="@android:color/transparent"
+ android:layout_weight="0"/>
+ </LinearLayout>
+
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000000..3ff874648d
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background"/>
+ <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon>
+
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000000..3ff874648d
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background"/>
+ <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon>
+
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 0000000000..f043b66984
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000000..53e483046c
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000..5646cd4957
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 0000000000..8121c6f7c2
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000000..da81ab2c05
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000..d68eb57118
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 0000000000..818fa2b2dc
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000000..57d6591183
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000..cf05b107f0
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 0000000000..30855a994a
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000000..385517a7eb
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000..10ec83e5f4
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 0000000000..5a9dab1d44
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
new file mode 100644
index 0000000000..62d203c390
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000000..52d2c11162
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/colors.xml b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000000..d38e4ce6b3
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/colors.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="purple_500">#FF6200EE</color>
+ <color name="purple_700">#FF3700B3</color>
+ <color name="teal_200">#FF03DAC5</color>
+ <color name="teal_700">#FF018786</color>
+ <color name="black">#FF000000</color>
+ <color name="white">#FFFFFFFF</color>
+ <color name="lilac">#AF93DF</color>
+</resources>
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/strings.xml b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..12661a6334
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/strings.xml
@@ -0,0 +1,12 @@
+<resources>
+ <string name="app_name">qml_in_kotlin_based_android_project</string>
+ <string name="button">Change color</string>
+ <string name="kotlin">Kotlin</string>
+ <string name="change_qml_background">Tap button to change QML view background color</string>
+ <string name="disconnect_qml_button_signal_listener">Tap switch to disconnect QML button signal listener</string>
+ <string name="connect_qml_button_signal_listener">Tap switch to connect QML button signal listener</string>
+ <string name="on">On</string>
+ <string name="off">Off</string>
+ <string name="qml_view_status">QML view status: </string>
+ <string name="qml_view_background_color">QML view background color:</string>
+</resources>
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/styles.xml b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000000..bce864063a
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/styles.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <style name="switchStyle">
+ <item name="android:textSize">12sp</item>
+ </style>
+</resources>
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/themes.xml b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/themes.xml
new file mode 100644
index 0000000000..b501d7b323
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/values/themes.xml
@@ -0,0 +1,16 @@
+<resources xmlns:tools="http://schemas.android.com/tools">
+ <!-- Base application theme. -->
+ <style name="Theme.Qml_in_kotlin_based_android_project" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
+ <!-- Primary brand color. -->
+ <item name="colorPrimary">@color/purple_500</item>
+ <item name="colorPrimaryVariant">@color/purple_700</item>
+ <item name="colorOnPrimary">@color/white</item>
+ <!-- Secondary brand color. -->
+ <item name="colorSecondary">@color/teal_200</item>
+ <item name="colorSecondaryVariant">@color/teal_700</item>
+ <item name="colorOnSecondary">@color/black</item>
+ <!-- Status bar color. -->
+ <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
+ <!-- Customize your theme here. -->
+ </style>
+</resources>
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/xml/backup_rules.xml b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/xml/backup_rules.xml
new file mode 100644
index 0000000000..148c18b659
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/xml/backup_rules.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Sample backup rules file; uncomment and customize as necessary.
+ See https://developer.android.com/guide/topics/data/autobackup
+ for details.
+ Note: This file is ignored for devices older that API 31
+ See https://developer.android.com/about/versions/12/backup-restore
+-->
+<full-backup-content>
+ <!--
+ <include domain="sharedpref" path="."/>
+ <exclude domain="sharedpref" path="device.xml"/>
+-->
+</full-backup-content>
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/xml/data_extraction_rules.xml b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/xml/data_extraction_rules.xml
new file mode 100644
index 0000000000..0c4f95cab9
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/app/src/main/res/xml/data_extraction_rules.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Sample data extraction rules file; uncomment and customize as necessary.
+ See https://developer.android.com/about/versions/12/backup-restore#xml-changes
+ for details.
+-->
+<data-extraction-rules>
+ <cloud-backup>
+ <!-- TODO: Use <include> and <exclude> to control what is backed up.
+ <include .../>
+ <exclude .../>
+ -->
+ </cloud-backup>
+ <!--
+ <device-transfer>
+ <include .../>
+ <exclude .../>
+ </device-transfer>
+ -->
+</data-extraction-rules>
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/build.gradle b/examples/platforms/android/qml_in_kotlin_based_android_project/build.gradle
new file mode 100644
index 0000000000..97e3f23ff2
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/build.gradle
@@ -0,0 +1,5 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+id 'com.android.application' version '8.2.2' apply false
+ id 'org.jetbrains.kotlin.android' version '1.9.22' apply false
+}
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/gradle.properties b/examples/platforms/android/qml_in_kotlin_based_android_project/gradle.properties
new file mode 100644
index 0000000000..2cbd6d19d3
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/gradle.properties
@@ -0,0 +1,23 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Kotlin code style for this project: "official" or "obsolete":
+kotlin.code.style=official
+# Enables namespacing of each library's R class so that its R class includes only the
+# resources declared in the library itself and none from the library's dependencies,
+# thereby reducing the size of the R class for that library
+android.nonTransitiveRClass=true
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/gradle/wrapper/gradle-wrapper.properties b/examples/platforms/android/qml_in_kotlin_based_android_project/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000..a3353773cb
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Thu Mar 21 11:14:46 EET 2024
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/examples/platforms/android/qml_in_kotlin_based_android_project/settings.gradle b/examples/platforms/android/qml_in_kotlin_based_android_project/settings.gradle
new file mode 100644
index 0000000000..a30bfe06d0
--- /dev/null
+++ b/examples/platforms/android/qml_in_kotlin_based_android_project/settings.gradle
@@ -0,0 +1,17 @@
+pluginManagement {
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+rootProject.name = "qml_in_kotlin_based_android_project"
+include ':app'
diff --git a/examples/qml/CMakeLists.txt b/examples/qml/CMakeLists.txt
index 7bc4cb2625..e5dc00d0fd 100644
--- a/examples/qml/CMakeLists.txt
+++ b/examples/qml/CMakeLists.txt
@@ -1,17 +1,10 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-add_subdirectory(referenceexamples)
add_subdirectory(tutorials)
-qt_internal_add_example(shell)
-if(TARGET Qt::Quick)
- qt_internal_add_example(qmlextensionplugins)
- qt_internal_add_example(xmlhttprequest)
- if (TARGET Qt::lupdate)
+if(TARGET Qt6::Quick)
+ if (TARGET Qt6::lupdate)
qt_internal_add_example(qml-i18n)
endif()
- qt_internal_add_example(dynamicscene)
-endif()
-if(QT_FEATURE_qml_network AND TARGET Qt::Quick)
- qt_internal_add_example(networkaccessmanagerfactory)
endif()
+
diff --git a/examples/qml/doc/src/qml-extending.qdoc b/examples/qml/doc/src/qml-extending.qdoc
deleted file mode 100644
index 5d92f0a51c..0000000000
--- a/examples/qml/doc/src/qml-extending.qdoc
+++ /dev/null
@@ -1,339 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
-\example referenceexamples/adding
-\title Extending QML - Adding Types Example
-\brief Exporting C++ Classes.
-\ingroup qmlextendingexamples
-
-The Adding Types Example shows how to add a new object type, \c Person, to QML.
-The \c Person type can be used from QML like this:
-
-\snippet referenceexamples/adding/example.qml 0
-
-\section1 Declare the Person Class
-
-All QML types map to C++ types. Here we declare a basic C++ Person class
-with the two properties we want accessible on the QML type - name and shoeSize.
-Although in this example we use the same name for the C++ class as the QML
-type, the C++ class can be named differently, or appear in a namespace.
-
-\snippet referenceexamples/adding/person.h 0
-
-\section1 Define the Person Class
-
-\snippet referenceexamples/adding/person.cpp 0
-
-The Person class implementation is quite basic. The property accessors simply
-return members of the object instance.
-
-\section1 Running the Example
-
-The main.cpp file in the example includes a simple shell application that
-loads and runs the QML snippet shown at the beginning of this page.
-*/
-
-/*!
-\example referenceexamples/extended
-\title Extending QML - Extension Objects Example
-\brief Extension Objects.
-\ingroup qmlextendingexamples
-
-This example builds on:
-\list
-\li \l {Extending QML - Adding Types Example}
-\endlist
-
-Shows how to use \l {QML_EXTENDED} to provide an
-\l {Registering Extension Objects}{extension object} to a \l QLineEdit without modifying or
-subclassing it.
-
-Firstly, the LineEditExtension class is registered with the QML system as an
-extension of QLineEdit. We declare a foreign type to do this as we cannot modify
-Qt's internal QLineEdit class.
-
-\snippet referenceexamples/extended/lineedit.h 0
-
-Note the usage of \l QML_NAMED_ELEMENT() instead of \l QML_ELEMENT.
-QML_ELEMENT uses the name of the containing type by default, "LineEditExtension" in this case.
-As the class being an extension class is an implementation detail, we choose the more natural name "LineEdit" instead
-
-The QML engine then instantiates a \l QLineEdit:
-
-\snippet referenceexamples/extended/main.cpp 1
-
-In QML, a property is set on the line edit that only exists in the LineEditExtension class:
-
-\snippet referenceexamples/extended/example.qml 0
-
-The extension type performs calls on the \l QLineEdit that otherwise will
-not be accessible to the QML engine.
-*/
-
-/*!
-\example referenceexamples/properties
-\title Extending QML - Object and List Property Types Example
-\brief Exporting C++ Properties.
-\ingroup qmlextendingexamples
-
-This example builds on:
-\list
-\li \l {Extending QML - Adding Types Example}
-\endlist
-
-The Object and List Property Types example shows how to add object and list
-properties in QML. This example adds a BirthdayParty type that specifies
-a birthday party, consisting of a celebrant and a list of guests. People are
-specified using the People QML type built in the previous example.
-
-\snippet referenceexamples/properties/example.qml 0
-
-\section1 Declare the BirthdayParty
-
-The BirthdayParty class is declared like this:
-
-\snippet referenceexamples/properties/birthdayparty.h 0
-\snippet referenceexamples/properties/birthdayparty.h 1
-\snippet referenceexamples/properties/birthdayparty.h 2
-\snippet referenceexamples/properties/birthdayparty.h 3
-
-The class contains a member to store the celebrant object, and also a
-QList<Person *> member.
-
-In QML, the type of a list properties - and the guests property is a list of
-people - are all of type QQmlListProperty<T>. QQmlListProperty is simple value
-type that contains a set of function pointers. QML calls these function
-pointers whenever it needs to read from, write to or otherwise interact with
-the list. In addition to concrete lists like the people list used in this
-example, the use of QQmlListProperty allows for "virtual lists" and other advanced
-scenarios.
-
-\section2 Define the BirthdayParty
-
-The implementation of BirthdayParty property accessors is straight forward.
-
-\snippet referenceexamples/properties/birthdayparty.cpp 0
-
-\section1 Running the Example
-
-The main.cpp file in the example includes a simple shell application that
-loads and runs the QML snippet shown at the beginning of this page.
-*/
-
-/*!
-\example referenceexamples/coercion
-\title Extending QML - Inheritance and Coercion Example
-\brief C++ Inheritance and Coercion.
-\ingroup qmlextendingexamples
-
-This example builds on:
-\list
-\li \l {Extending QML - Object and List Property Types Example}
-\li \l {Extending QML - Adding Types Example}
-\endlist
-
-The Inheritance and Coercion Example shows how to use base classes to assign
-types of more than one type to a property. It specializes the Person type
-developed in the previous examples into two types - a \c Boy and a \c Girl.
-
-\snippet referenceexamples/coercion/example.qml 0
-
-\section1 Declare Boy and Girl
-
-\snippet referenceexamples/coercion/person.h 1
-
-The Person class remains unaltered in this example and the Boy and Girl C++
-classes are trivial extensions of it. The types and their QML name are
-registered with the QML engine.
-
-As an example, the inheritance used here is a little contrived, but in real
-applications it is likely that the two extensions would add additional
-properties or modify the Person classes behavior.
-
-\section2 Define People as a Base Class
-
-The implementation of the People class itself has not changed since the
-previous example. However, as we have repurposed the People class as a common
-base for Boy and Girl, we want to prevent it from being instantiated from QML
-directly - an explicit Boy or Girl should be instantiated instead.
-
-\snippet referenceexamples/coercion/person.h 0
-
-While we want to disallow instantiating Person from within QML, it still needs
-to be registered with the QML engine, so that it can be used as a property type
-and other types can be coerced to it. This is what the QML_UNCREATABLE macro
-does.
-
-\section1 Running the Example
-
-The BirthdayParty type has not changed since the previous example. The
-celebrant and guests property still use the People type.
-
-\snippet referenceexamples/coercion/birthdayparty.h 0
-
-However, as all three types, Person, Boy and Girl, have been registered with the
-QML system, on assignment QML automatically (and type-safely) converts the Boy
-and Girl objects into a Person.
-
-The main.cpp file in the example includes a simple shell application that
-loads and runs the QML snippet shown at the beginning of this page.
-*/
-
-/*!
-\example referenceexamples/default
-\title Extending QML - Default Property Example
-\brief Default Property.
-\ingroup qmlextendingexamples
-
-This example builds on:
-\list
-\li \l {Extending QML - Inheritance and Coercion Example}
-\li \l {Extending QML - Object and List Property Types Example}
-\li \l {Extending QML - Adding Types Example}
-\endlist
-
-The Default Property Example is a minor modification of the
-\l {Extending QML - Inheritance and Coercion Example} that simplifies the
-specification of a BirthdayParty through the use of a default property.
-
-\snippet referenceexamples/default/example.qml 0
-
-\section1 Declaring the BirthdayParty Class
-
-The only difference between this example and the last, is the addition of the
-\c DefaultProperty class info annotation.
-
-\snippet referenceexamples/default/birthdayparty.h 0
-
-The default property specifies the property to assign to whenever an explicit
-property is not specified, in the case of the BirthdayParty type the guest
-property. It is purely a syntactic simplification, the behavior is identical
-to specifying the property by name, but it can add a more natural feel in many
-situations. The default property must be either an object or list property.
-
-\section1 Running the Example
-
-The main.cpp file in the example includes a simple shell application that
-loads and runs the QML snippet shown at the beginning of this page.
-*/
-
-/*!
-\example referenceexamples/grouped
-\title Extending QML - Grouped Properties Example
-\brief Grouped Properties.
-\ingroup qmlextendingexamples
-
-This example builds on:
-\list
-\li \l {Extending QML - Default Property Example}
-\li \l {Extending QML - Inheritance and Coercion Example}
-\li \l {Extending QML - Object and List Property Types Example}
-\li \l {Extending QML - Adding Types Example}
-\endlist
-
-*/
-
-/*!
-\example referenceexamples/attached
-\title Extending QML - Attached Properties Example
-\brief Attached Properties.
-\ingroup qmlextendingexamples
-
-This example demonstrates how to create custom
-\l {Attached Properties and Attached Signal Handlers} {attached properties}.
-For a more in-depth description on how one can create attached properties,
-see \l {Providing Attached Properties}.
-
-
-This example builds on:
-\list
-\li \l {Extending QML - Grouped Properties Example}
-\li \l {Extending QML - Default Property Example}
-\li \l {Extending QML - Inheritance and Coercion Example}
-\li \l {Extending QML - Object and List Property Types Example}
-\li \l {Extending QML - Adding Types Example}
-\endlist
-
-*/
-
-/*!
-\example referenceexamples/signal
-\title Extending QML - Signal Support Example
-\brief Signal Support.
-\ingroup qmlextendingexamples
-
-This example builds on:
-\list
-\li \l {Extending QML - Attached Properties Example}
-\li \l {Extending QML - Grouped Properties Example}
-\li \l {Extending QML - Default Property Example}
-\li \l {Extending QML - Inheritance and Coercion Example}
-\li \l {Extending QML - Object and List Property Types Example}
-\li \l {Extending QML - Adding Types Example}
-\endlist
-
-*/
-
-/*!
-\example referenceexamples/methods
-\title Extending QML - Methods Example
-\brief Methods Support.
-\ingroup qmlextendingexamples
-
-This example builds on:
-\list
-\li \l {Extending QML - Inheritance and Coercion Example}
-\li \l {Extending QML - Object and List Property Types Example}
-\li \l {Extending QML - Adding Types Example}
-\endlist
-
-The Methods Example has an additional method in the \c BirthdayParty class: \c invite().
-\c invite() is declared with \l Q_INVOKABLE so that it can be
-called from QML.
-
-\snippet referenceexamples/methods/birthdayparty.h 0
-
-In \c example.qml, the \c invite() method is called in the \l [QML]{QtQml::Component::completed()}{Component.onCompleted} signal handler:
-
-\snippet referenceexamples/methods/example.qml 0
-*/
-
-/*!
-\example referenceexamples/valuesource
-\title Extending QML - Property Value Source Example
-\brief Property Value Source.
-\ingroup qmlextendingexamples
-
-This example builds on:
-\list
-\li \l {Extending QML - Signal Support Example}
-\li \l {Extending QML - Attached Properties Example}
-\li \l {Extending QML - Grouped Properties Example}
-\li \l {Extending QML - Default Property Example}
-\li \l {Extending QML - Inheritance and Coercion Example}
-\li \l {Extending QML - Object and List Property Types Example}
-\li \l {Extending QML - Adding Types Example}
-\endlist
-
-*/
-
-/*!
-\example referenceexamples/binding
-\title Extending QML - Binding Example
-\brief Binding.
-\ingroup qmlextendingexamples
-
-This example builds on:
-\list
-\li \l {Extending QML - Property Value Source Example}
-\li \l {Extending QML - Signal Support Example}
-\li \l {Extending QML - Attached Properties Example}
-\li \l {Extending QML - Grouped Properties Example}
-\li \l {Extending QML - Default Property Example}
-\li \l {Extending QML - Inheritance and Coercion Example}
-\li \l {Extending QML - Object and List Property Types Example}
-\li \l {Extending QML - Adding Types Example}
-\endlist
-
-*/
diff --git a/examples/qml/dynamicscene/CMakeLists.txt b/examples/qml/dynamicscene/CMakeLists.txt
deleted file mode 100644
index b91ed5aca7..0000000000
--- a/examples/qml/dynamicscene/CMakeLists.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(dynamicscene LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/dynamicscene")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-
-qt_add_executable(dynamicsceneexample WIN32 MACOSX_BUNDLE main.cpp)
-
-target_link_libraries(dynamicsceneexample PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-qt_add_qml_module(dynamicsceneexample
- URI dynamicscene
- AUTO_RESOURCE_PREFIX
- QML_FILES
- "GenericSceneItem.qml"
- "PaletteItem.qml"
- "PerspectiveItem.qml"
- "Sun.qml"
- "dynamicscene.qml"
- "itemCreation.js"
- RESOURCES
- "images/NOTE"
- "images/face-smile.png"
- "images/moon.png"
- "images/rabbit_brown.png"
- "images/rabbit_bw.png"
- "images/star.png"
- "images/sun.png"
- "images/tree_s.png"
-)
-
-install(TARGETS dynamicsceneexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/dynamicscene/GenericSceneItem.qml b/examples/qml/dynamicscene/GenericSceneItem.qml
deleted file mode 100644
index 5ff3760bb7..0000000000
--- a/examples/qml/dynamicscene/GenericSceneItem.qml
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Image {
- property bool created: false
- property string image
-
- source: image
-
-}
diff --git a/examples/qml/dynamicscene/PaletteItem.qml b/examples/qml/dynamicscene/PaletteItem.qml
deleted file mode 100644
index ef03b8ce38..0000000000
--- a/examples/qml/dynamicscene/PaletteItem.qml
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import "itemCreation.js" as Code
-
-Image {
- id: paletteItem
-
- property string componentFile
- property string image
-
- source: image
-
- MouseArea {
- anchors.fill: parent
-
- onPressed: (mouse)=> Code.startDrag(mouse);
- onPositionChanged: (mouse)=> Code.continueDrag(mouse);
- onReleased: (mouse)=> Code.endDrag(mouse);
- }
-}
diff --git a/examples/qml/dynamicscene/PerspectiveItem.qml b/examples/qml/dynamicscene/PerspectiveItem.qml
deleted file mode 100644
index 8857b92376..0000000000
--- a/examples/qml/dynamicscene/PerspectiveItem.qml
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Image {
- id: rootItem
-
- property bool created: false
- property string image
-
- property double scaledBottom: y + (height + height*scale) / 2
- property bool onLand: scaledBottom > (window.height / 2 + window.centerOffset)
-
- source: image
- opacity: onLand ? 1 : 0.25
- scale: Math.max((y + height - 250) * 0.01, 0.3)
-
- onCreatedChanged: {
- if (created && !onLand)
- rootItem.destroy();
- else
- z = scaledBottom;
- }
-
- onYChanged: z = scaledBottom;
-}
diff --git a/examples/qml/dynamicscene/Sun.qml b/examples/qml/dynamicscene/Sun.qml
deleted file mode 100644
index e755563eba..0000000000
--- a/examples/qml/dynamicscene/Sun.qml
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Image {
- id: sun
-
- property bool created: false
- property string image: "images/sun.png"
-
- source: image
- onCreatedChanged: {
- if (created) {
- sun.z = 1; // above the sky but below the ground layer
- window.activeSuns++;
- // once item is created, start moving offscreen
- dropYAnim.duration = (window.height + window.centerOffset - sun.y) * 16;
- dropAnim.running = true;
- } else {
- window.activeSuns--;
- }
- }
-
- SequentialAnimation on y{
- id: dropAnim
- running: false
- NumberAnimation {
- id: dropYAnim
- to: (window.height / 2) + window.centerOffset
- }
- ScriptAction {
- script: { sun.created = false; sun.destroy() }
- }
- }
-}
diff --git a/examples/qml/dynamicscene/doc/images/qml-dynamicscene-example.png b/examples/qml/dynamicscene/doc/images/qml-dynamicscene-example.png
deleted file mode 100644
index 38260a7d3f..0000000000
--- a/examples/qml/dynamicscene/doc/images/qml-dynamicscene-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/doc/src/dynamicscene.qdoc b/examples/qml/dynamicscene/doc/src/dynamicscene.qdoc
deleted file mode 100644
index a7a3351fdc..0000000000
--- a/examples/qml/dynamicscene/doc/src/dynamicscene.qdoc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-/*!
- \title QML Example - Dynamic Scene
- \example dynamicscene
- \brief This example demonstrates creating components dynamically.
- \image qml-dynamicscene-example.png
-*/
-
-
diff --git a/examples/qml/dynamicscene/dynamicscene.pro b/examples/qml/dynamicscene/dynamicscene.pro
deleted file mode 100644
index 29a3fa97e2..0000000000
--- a/examples/qml/dynamicscene/dynamicscene.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-
-RESOURCES += dynamicscene.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/dynamicscene
-INSTALLS += target
diff --git a/examples/qml/dynamicscene/dynamicscene.qml b/examples/qml/dynamicscene/dynamicscene.qml
deleted file mode 100644
index 62795703c5..0000000000
--- a/examples/qml/dynamicscene/dynamicscene.qml
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Particles
-import QtQuick.Controls
-
-Item {
- id: window
-
- property int activeSuns: 0
- property int centerOffset: 72
-
- height: 480; width: 320
-
-
- MouseArea {
- anchors.fill: parent
- onClicked: window.focus = false;
- }
-
- //This is the message box that pops up when there's an error
- Rectangle {
- id: dialog
-
- opacity: 0
- anchors.centerIn: parent
- width: dialogText.width + 6; height: dialogText.height + 6
- border.color: 'black'
- color: 'lightsteelblue'
- z: 65535 //Arbitrary number chosen to be above all the items, including the scaled perspective ones.
-
- function show(str){
- dialogText.text = str;
- dialogAnim.start();
- }
-
- Label {
- id: dialogText
- x: 3; y: 3
- font.pixelSize: 14
- }
-
- SequentialAnimation {
- id: dialogAnim
- NumberAnimation { target: dialog; property:"opacity"; to: 1; duration: 1000 }
- PauseAnimation { duration: 5000 }
- NumberAnimation { target: dialog; property:"opacity"; to: 0; duration: 1000 }
- }
- }
-
- Item {
- id: scene
- anchors { top: sky.top; bottom: ground.bottom; left: parent.left; right: parent.right}
- z: 10
- }
-
- // sky
- Rectangle {
- id: sky
- anchors { left: parent.left; top: toolbox.bottom; right: parent.right; bottomMargin: -window.centerOffset; bottom: parent.verticalCenter }
- gradient: Gradient {
- GradientStop { id: gradientStopA; position: 0.0; color: "#0E1533" }
- GradientStop { id: gradientStopB; position: 1.0; color: "#437284" }
- }
- }
-
- // stars (when there's no sun)
- ParticleSystem {
- id: particlesystem
- anchors.fill: sky
-
- ImageParticle {
- id: stars
- source: "images/star.png"
- groups: ["stars"]
- opacity: .5
- }
-
- Emitter {
- id: starsemitter
- anchors.fill: parent
- emitRate: parent.width / 50
- lifeSpan: 5000
- group: "stars"
- }
- }
-
- // ground
- Rectangle {
- id: ground
- z: 2 // just above the sun so that the sun can set behind it
- anchors { left: parent.left; top: parent.verticalCenter; topMargin: window.centerOffset; right: parent.right; bottom: parent.bottom }
- gradient: Gradient {
- GradientStop { position: 0.0; color: "ForestGreen" }
- GradientStop { position: 1.0; color: "DarkGreen" }
- }
- }
-
- // top panel
- Rectangle {
- id: toolbox
-
- height: window.centerOffset * 2
- color: "white"
- anchors { right: parent.right; top: parent.top; left: parent.left}
-
- Column {
- anchors.centerIn: parent
- spacing: 8
-
- Label { text: "Drag an item into the scene." }
-
- Rectangle {
- width: palette.width + 10; height: palette.height + 10
- border.color: "black"
-
- Row {
- id: palette
- anchors.centerIn: parent
- spacing: 8
-
- PaletteItem {
- anchors.verticalCenter: parent.verticalCenter
- componentFile: "Sun.qml"
- source: "images/sun.png"
- image: "images/sun.png"
- }
- PaletteItem {
- anchors.verticalCenter: parent.verticalCenter
- componentFile: "GenericSceneItem.qml"
- source: "images/moon.png"
- image: "images/moon.png"
- }
- PaletteItem {
- anchors.verticalCenter: parent.verticalCenter
- componentFile: "PerspectiveItem.qml"
- source: "images/tree_s.png"
- image: "images/tree_s.png"
- }
- PaletteItem {
- anchors.verticalCenter: parent.verticalCenter
- componentFile: "PerspectiveItem.qml"
- source: "images/rabbit_brown.png"
- image: "images/rabbit_brown.png"
- }
- PaletteItem {
- anchors.verticalCenter: parent.verticalCenter
- componentFile: "PerspectiveItem.qml"
- source: "images/rabbit_bw.png"
- image: "images/rabbit_bw.png"
- }
- }
- }
-
- Label { text: "Active Suns: " + window.activeSuns }
- }
- }
-
- //Popup toolbox down the bottom
- Rectangle {
- id: popupToolbox
- z: 1000
- width: parent.width
- height: popupColumn.height + 16
- color: "white"
-
- property bool poppedUp: false
- property int downY: window.height - (createButton.height + 16)
- property int upY: window.height - (popupColumn.height + 16)
- y: poppedUp ? upY : downY
- Behavior on y { NumberAnimation {}}
-
- Column {
- id: popupColumn
- y: 8
- spacing: 8
-
- Row {
- height: createButton.height
- spacing: 8
- Label { text: "Custom QML:"; anchors.verticalCenter: parent.verticalCenter }
- Button {
- id: popupButton
- text: popupToolbox.poppedUp ? "Hide" : "Show"
- onClicked: popupToolbox.poppedUp = !popupToolbox.poppedUp
- }
- Button {
- id: createButton
- text: "Create"
- onClicked: {
- try {
- Qt.createQmlObject(qmlText.text, scene, 'CustomObject');
- } catch(err) {
- dialog.show('Error on line ' + err.qmlErrors[0].lineNumber + '\n' + err.qmlErrors[0].message);
- }
- }
- }
-
- }
-
- Rectangle {
- width: 360; height: 240
-
- TextArea {
- id: qmlText
- anchors.fill: parent; anchors.margins: 5
- readOnly: false
- font.pixelSize: 14
- selectByMouse: true
- wrapMode: TextEdit.WordWrap
-
- text: "import QtQuick\nImage {\n id: smile\n x: 360 * Math.random()\n y: 40 * Math.random() \n source: 'images/face-smile.png'\n NumberAnimation on opacity { \n to: 0; duration: 1500\n }\n Component.onCompleted: smile.destroy(1500);\n}"
- }
- }
- }
- }
-
- //Day state, for when a sun is added to the scene
- states: State {
- name: "Day"
- when: window.activeSuns > 0
-
- PropertyChanges {
- gradientStopA.color: "DeepSkyBlue"
- gradientStopB.color: "SkyBlue"
- stars.opacity: 0
- }
- }
-
- //! [top-level transitions]
- transitions: Transition {
- PropertyAnimation { duration: 3000 }
- ColorAnimation { duration: 3000 }
- }
- //! [top-level transitions]
-}
diff --git a/examples/qml/dynamicscene/dynamicscene.qmlproject b/examples/qml/dynamicscene/dynamicscene.qmlproject
deleted file mode 100644
index 52ac474383..0000000000
--- a/examples/qml/dynamicscene/dynamicscene.qmlproject
+++ /dev/null
@@ -1,16 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "dynamicscene.qml"
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/qml/dynamicscene/dynamicscene.qrc b/examples/qml/dynamicscene/dynamicscene.qrc
deleted file mode 100644
index f354fc469a..0000000000
--- a/examples/qml/dynamicscene/dynamicscene.qrc
+++ /dev/null
@@ -1,18 +0,0 @@
-<RCC>
- <qresource prefix="/qt/qml/dynamicscene">
- <file>dynamicscene.qml</file>
- <file>images/face-smile.png</file>
- <file>images/moon.png</file>
- <file>images/NOTE</file>
- <file>images/rabbit_brown.png</file>
- <file>images/rabbit_bw.png</file>
- <file>images/star.png</file>
- <file>images/sun.png</file>
- <file>images/tree_s.png</file>
- <file>GenericSceneItem.qml</file>
- <file>itemCreation.js</file>
- <file>PaletteItem.qml</file>
- <file>PerspectiveItem.qml</file>
- <file>Sun.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/qml/dynamicscene/images/NOTE b/examples/qml/dynamicscene/images/NOTE
deleted file mode 100644
index fcd87f9132..0000000000
--- a/examples/qml/dynamicscene/images/NOTE
+++ /dev/null
@@ -1 +0,0 @@
-Images (except star.png) are from the KDE project.
diff --git a/examples/qml/dynamicscene/images/face-smile.png b/examples/qml/dynamicscene/images/face-smile.png
deleted file mode 100644
index 3d66d72578..0000000000
--- a/examples/qml/dynamicscene/images/face-smile.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/images/moon.png b/examples/qml/dynamicscene/images/moon.png
deleted file mode 100644
index 1c0d6066a8..0000000000
--- a/examples/qml/dynamicscene/images/moon.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/images/rabbit_brown.png b/examples/qml/dynamicscene/images/rabbit_brown.png
deleted file mode 100644
index ebfdeed332..0000000000
--- a/examples/qml/dynamicscene/images/rabbit_brown.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/images/rabbit_bw.png b/examples/qml/dynamicscene/images/rabbit_bw.png
deleted file mode 100644
index 7bff9b92ca..0000000000
--- a/examples/qml/dynamicscene/images/rabbit_bw.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/images/star.png b/examples/qml/dynamicscene/images/star.png
deleted file mode 100644
index bdcd36909d..0000000000
--- a/examples/qml/dynamicscene/images/star.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/images/sun.png b/examples/qml/dynamicscene/images/sun.png
deleted file mode 100644
index c5fd36ed39..0000000000
--- a/examples/qml/dynamicscene/images/sun.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/images/tree_s.png b/examples/qml/dynamicscene/images/tree_s.png
deleted file mode 100644
index 6eac35a729..0000000000
--- a/examples/qml/dynamicscene/images/tree_s.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/itemCreation.js b/examples/qml/dynamicscene/itemCreation.js
deleted file mode 100644
index 2829a83410..0000000000
--- a/examples/qml/dynamicscene/itemCreation.js
+++ /dev/null
@@ -1,62 +0,0 @@
-var itemComponent = null;
-var draggedItem = null;
-var startingMouse;
-var posnInWindow;
-
-function startDrag(mouse)
-{
- posnInWindow = paletteItem.mapToItem(window, 0, 0);
- startingMouse = { x: mouse.x, y: mouse.y }
- loadComponent();
-}
-
-//Creation is split into two functions due to an asynchronous wait while
-//possible external files are loaded.
-
-function loadComponent() {
- if (itemComponent != null) { // component has been previously loaded
- createItem();
- return;
- }
-
- itemComponent = Qt.createComponent(paletteItem.componentFile);
- if (itemComponent.status == Component.Loading) //Depending on the content, it can be ready or error immediately
- component.statusChanged.connect(createItem);
- else
- createItem();
-}
-
-function createItem() {
- if (itemComponent.status == Component.Ready && draggedItem == null) {
- draggedItem = itemComponent.createObject(window, {"image": paletteItem.image, "x": posnInWindow.x, "y": posnInWindow.y, "z": 3});
- // make sure created item is above the ground layer
- } else if (itemComponent.status == Component.Error) {
- draggedItem = null;
- console.log("error creating component");
- console.log(itemComponent.errorString());
- }
-}
-
-function continueDrag(mouse)
-{
- if (draggedItem == null)
- return;
-
- draggedItem.x = mouse.x + posnInWindow.x - startingMouse.x;
- draggedItem.y = mouse.y + posnInWindow.y - startingMouse.y;
-}
-
-function endDrag(mouse)
-{
- if (draggedItem == null)
- return;
-
- if (draggedItem.y < toolbox.height) { //Don't drop it in the toolbox
- draggedItem.destroy();
- draggedItem = null;
- } else {
- draggedItem.created = true;
- draggedItem = null;
- }
-}
-
diff --git a/examples/qml/dynamicscene/main.cpp b/examples/qml/dynamicscene/main.cpp
deleted file mode 100644
index e46981848a..0000000000
--- a/examples/qml/dynamicscene/main.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (C) 2020 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include "../../quick/shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(dynamicscene/dynamicscene)
diff --git a/examples/qml/locale/locale.qml b/examples/qml/locale/locale.qml
deleted file mode 100644
index 4308dd0c82..0000000000
--- a/examples/qml/locale/locale.qml
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Rectangle {
- id: root
- width: 320
- height: 480
- color: "lightgray"
-
- component LocaleDelegate: Text {
- required property var modelData
- required property int index
-
- property string locale: modelData
- height: 30
- width: view.width
- text: `${Qt.locale(modelData).name} (${Qt.locale(modelData).nativeCountryName}/${Qt.locale(modelData).nativeLanguageName})`
- MouseArea {
- anchors.fill: parent
- onClicked: view.currentIndex = parent.index
- }
- }
-
- property string locale: (view.currentItem as LocaleDelegate).locale
-
- Text {
- id: title
- text: "Select locale:"
- }
-
- Rectangle {
- id: chooser
- anchors.top: title.bottom
- anchors.topMargin: 5
- width: parent.width-10
- x: 5
- height: parent.height/2 - 10
- color: "#40300030"
- ListView {
- id: view
- clip: true
- focus: true
- anchors.fill: parent
- model: [
- "en_US",
- "en_GB",
- "fi_FI",
- "de_DE",
- "ar_SA",
- "hi_IN",
- "zh_CN",
- "th_TH",
- "fr_FR",
- "nb_NO",
- "sv_SE"
- ]
-
- delegate: LocaleDelegate {}
- highlight: Rectangle {
- height: 30
- color: "#60300030"
- }
- }
- }
-
- Rectangle {
- color: "white"
- anchors.top: chooser.bottom
- anchors.topMargin: 5
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 5
- x: 5; width: parent.width - 10
-
- Column {
- anchors.fill: parent
- spacing: 5
- Text {
- property var date: new Date()
- text: "Date: " + date.toLocaleDateString(Qt.locale(root.locale))
- }
- Text {
- property var date: new Date()
- text: "Time: " + date.toLocaleTimeString(Qt.locale(root.locale))
- }
- Text {
- property var dow: Qt.locale(root.locale).firstDayOfWeek
- text: "First day of week: " + Qt.locale(root.locale).standaloneDayName(dow)
- }
- Text {
- property var num: 10023823
- text: "Number: " + num.toLocaleString(Qt.locale(root.locale))
- }
- Text {
- property var num: 10023823
- text: "Currency: " + num.toLocaleCurrencyString(Qt.locale(root.locale))
- }
- }
- }
-}
diff --git a/examples/qml/networkaccessmanagerfactory/CMakeLists.txt b/examples/qml/networkaccessmanagerfactory/CMakeLists.txt
deleted file mode 100644
index e50a97ab8c..0000000000
--- a/examples/qml/networkaccessmanagerfactory/CMakeLists.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(networkaccessmanagerfactory LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/networkaccessmanagerfactory")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Network Qml Quick)
-
-qt_add_executable(networkaccessmanagerfactory
- main.cpp
-)
-
-set_target_properties(networkaccessmanagerfactory PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(networkaccessmanagerfactory PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Network
- Qt::Qml
- Qt::Quick
-)
-
-qt_add_qml_module(networkaccessmanagerfactory
- URI Example
- QML_FILES view.qml
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS networkaccessmanagerfactory
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/networkaccessmanagerfactory/doc/src/networkaccessmanagerfactory.qdoc b/examples/qml/networkaccessmanagerfactory/doc/src/networkaccessmanagerfactory.qdoc
deleted file mode 100644
index 7c46fd0cf7..0000000000
--- a/examples/qml/networkaccessmanagerfactory/doc/src/networkaccessmanagerfactory.qdoc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example networkaccessmanagerfactory
- \title C++ Extensions: Network Access Manager Factory Example
- \brief Implements a custom network access manager for the QML engine.
-
- This example shows how to use QQmlNetworkAccessManagerFactory to create a QNetworkAccessManager
- with a proxy.
-
- Usage:
- networkaccessmanagerfactory [-host <proxy> -port <port>] [file]
-*/
-
diff --git a/examples/qml/networkaccessmanagerfactory/main.cpp b/examples/qml/networkaccessmanagerfactory/main.cpp
deleted file mode 100644
index dc00d88abe..0000000000
--- a/examples/qml/networkaccessmanagerfactory/main.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include <QCommandLineParser>
-#include <QGuiApplication>
-#include <QNetworkAccessManager>
-#include <QNetworkProxy>
-
-#include <QQmlEngine>
-#include <QQmlNetworkAccessManagerFactory>
-#include <QtQuick/QQuickView>
-
-
-/*
- This example illustrates using a QQmlNetworkAccessManagerFactory to
- create a QNetworkAccessManager with a proxy.
-
- Usage:
- networkaccessmanagerfactory [-host <proxy> -port <port>] [file]
-*/
-
-#if QT_CONFIG(networkproxy)
-static QString proxyHost;
-static int proxyPort = 0;
-#endif // networkproxy
-
-class MyNetworkAccessManagerFactory : public QQmlNetworkAccessManagerFactory
-{
-public:
- QNetworkAccessManager *create(QObject *parent) override;
-};
-
-QNetworkAccessManager *MyNetworkAccessManagerFactory::create(QObject *parent)
-{
- QNetworkAccessManager *nam = new QNetworkAccessManager(parent);
-#if QT_CONFIG(networkproxy)
- if (!proxyHost.isEmpty()) {
- qDebug() << "Created QNetworkAccessManager using proxy" << (proxyHost + ":" + QString::number(proxyPort));
- QNetworkProxy proxy(QNetworkProxy::HttpCachingProxy, proxyHost, proxyPort);
- nam->setProxy(proxy);
- }
-#endif // networkproxy
-
- return nam;
-}
-
-int main(int argc, char ** argv)
-{
- QUrl source("qrc:view.qml");
-
- QGuiApplication app(argc, argv);
-
- QCommandLineParser parser;
-#if QT_CONFIG(networkproxy)
- QCommandLineOption proxyHostOption("host", "The proxy host to use.", "host");
- parser.addOption(proxyHostOption);
- QCommandLineOption proxyPortOption("port", "The proxy port to use.", "port", "0");
- parser.addOption(proxyPortOption);
-#endif // networkproxy
- parser.addPositionalArgument("file", "The file to use.");
- QCommandLineOption helpOption = parser.addHelpOption();
- parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
- QStringList arguments = QCoreApplication::arguments();
- if (!parser.parse(arguments)) {
- qWarning() << parser.helpText() << '\n' << parser.errorText();
- exit(1);
- }
- if (parser.isSet(helpOption)) {
- qWarning() << parser.helpText();
- exit(0);
- }
-#if QT_CONFIG(networkproxy)
- if (parser.isSet(proxyHostOption))
- proxyHost = parser.value(proxyHostOption);
- if (parser.isSet(proxyPortOption)) {
- bool ok = true;
- proxyPort = parser.value(proxyPortOption).toInt(&ok);
- if (!ok || proxyPort < 1 || proxyPort > 65535) {
- qWarning() << parser.helpText() << "\nNo valid port given. It should\
- be a number between 1 and 65535";
- exit(1);
- }
- }
-#endif // networkproxy
- if (parser.positionalArguments().count() == 1)
- source = QUrl::fromLocalFile(parser.positionalArguments().first());
-
- QQuickView view;
- MyNetworkAccessManagerFactory networkManagerFactory;
- view.engine()->setNetworkAccessManagerFactory(&networkManagerFactory);
-
- view.setSource(source);
- view.show();
-
- return app.exec();
-}
-
diff --git a/examples/qml/networkaccessmanagerfactory/networkaccessmanagerfactory.pro b/examples/qml/networkaccessmanagerfactory/networkaccessmanagerfactory.pro
deleted file mode 100644
index b4d6d827fd..0000000000
--- a/examples/qml/networkaccessmanagerfactory/networkaccessmanagerfactory.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-TEMPLATE = app
-QT += qml quick network
-
-SOURCES += main.cpp
-RESOURCES += networkaccessmanagerfactory.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/networkaccessmanagerfactory
-INSTALLS = target
diff --git a/examples/qml/networkaccessmanagerfactory/networkaccessmanagerfactory.qmlproject b/examples/qml/networkaccessmanagerfactory/networkaccessmanagerfactory.qmlproject
deleted file mode 100644
index 2bb4016996..0000000000
--- a/examples/qml/networkaccessmanagerfactory/networkaccessmanagerfactory.qmlproject
+++ /dev/null
@@ -1,14 +0,0 @@
-import QmlProject 1.0
-
-Project {
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/qml/networkaccessmanagerfactory/networkaccessmanagerfactory.qrc b/examples/qml/networkaccessmanagerfactory/networkaccessmanagerfactory.qrc
deleted file mode 100644
index 17e9301471..0000000000
--- a/examples/qml/networkaccessmanagerfactory/networkaccessmanagerfactory.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
- <file>view.qml</file>
-</qresource>
-</RCC>
diff --git a/examples/qml/networkaccessmanagerfactory/view.qml b/examples/qml/networkaccessmanagerfactory/view.qml
deleted file mode 100644
index f3c845fabd..0000000000
--- a/examples/qml/networkaccessmanagerfactory/view.qml
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Image {
- width: 200
- height: 100
- source: "http://doc.qt.io/qt-6/images/logo.png"
-}
diff --git a/examples/qml/qml-i18n/CMakeLists.txt b/examples/qml/qml-i18n/CMakeLists.txt
index 83bec4d11b..fd242d3678 100644
--- a/examples/qml/qml-i18n/CMakeLists.txt
+++ b/examples/qml/qml-i18n/CMakeLists.txt
@@ -1,46 +1,45 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(qml-i18n LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/qmli18n")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick Qml LinguistTools)
+qt_standard_project_setup(REQUIRES 6.5 I18N_TRANSLATED_LANGUAGES en en_AU fr)
+
qt_add_executable(qmli18n WIN32 MACOSX_BUNDLE main.cpp)
target_link_libraries(qmli18n PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(qmli18n
- URI i18n
+ URI Translated
QML_FILES
- qml-i18n.qml
- NO_RESOURCE_TARGET_PATH
+ Main.qml
)
qt_add_translations(qmli18n
- TS_FILES
- i18n/base.ts
- i18n/qml_en.ts
- i18n/qml_en_AU.ts
- i18n/qml_fr.ts
+ RESOURCE_PREFIX /qt/qml/Translated/i18n
+ TS_FILE_BASE qml
+ TS_FILE_DIR i18n
)
install(TARGETS qmli18n
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET qmli18n
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/qml-i18n/qml-i18n.qml b/examples/qml/qml-i18n/Main.qml
index 8d414348dd..8d414348dd 100644
--- a/examples/qml/qml-i18n/qml-i18n.qml
+++ b/examples/qml/qml-i18n/Main.qml
diff --git a/examples/qml/qml-i18n/doc/src/i18n.qdoc b/examples/qml/qml-i18n/doc/src/i18n.qdoc
index 3ea56f6518..6096aa3383 100644
--- a/examples/qml/qml-i18n/doc/src/i18n.qdoc
+++ b/examples/qml/qml-i18n/doc/src/i18n.qdoc
@@ -2,6 +2,7 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick I18N
+ \examplecategory {User Interface Components}
\example qml-i18n
\image qml-i18n-example.png
\ingroup examples-linguist
@@ -13,10 +14,10 @@
\section1 Marking Text as Translatable
- In the \c qml-i18n.qml file, use the \c qsTr command to mark UI text as
+ In the \c Main.qml file, use the \c qsTr command to mark UI text as
translatable:
- \quotefromfile qml-i18n/qml-i18n.qml
+ \quotefromfile qml-i18n/Main.qml
\skipto }
\skipto Text
\printuntil )
diff --git a/examples/qml/qml-i18n/i18n/base.ts b/examples/qml/qml-i18n/i18n/base.ts
index 99ceeeb016..17564620e3 100644
--- a/examples/qml/qml-i18n/i18n/base.ts
+++ b/examples/qml/qml-i18n/i18n/base.ts
@@ -2,9 +2,9 @@
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en">
<context>
- <name>qml-i18n</name>
+ <name>Main</name>
<message>
- <location filename="../qml-i18n.qml" line="68"/>
+ <location filename="../Main.qml" line="21"/>
<source>Hello</source>
<translation type="unfinished"></translation>
</message>
diff --git a/examples/qml/qml-i18n/i18n/qml_en_AU.ts b/examples/qml/qml-i18n/i18n/qml_en_AU.ts
index feb4f9e9c0..98e1d8649f 100644
--- a/examples/qml/qml-i18n/i18n/qml_en_AU.ts
+++ b/examples/qml/qml-i18n/i18n/qml_en_AU.ts
@@ -2,9 +2,9 @@
<!DOCTYPE TS>
<TS version="2.1" language="en_AU" sourcelanguage="en">
<context>
- <name>qml-i18n</name>
+ <name>Main</name>
<message>
- <location filename="../qml-i18n.qml" line="68"/>
+ <location filename="../Main.qml" line="21"/>
<source>Hello</source>
<translation>G&apos;day</translation>
</message>
diff --git a/examples/qml/qml-i18n/i18n/qml_fr.ts b/examples/qml/qml-i18n/i18n/qml_fr.ts
index c4872e63d0..73c525e535 100644
--- a/examples/qml/qml-i18n/i18n/qml_fr.ts
+++ b/examples/qml/qml-i18n/i18n/qml_fr.ts
@@ -2,9 +2,9 @@
<!DOCTYPE TS>
<TS version="2.1" language="fr" sourcelanguage="en">
<context>
- <name>qml-i18n</name>
+ <name>Main</name>
<message>
- <location filename="../qml-i18n.qml" line="68"/>
+ <location filename="../Main.qml" line="21"/>
<source>Hello</source>
<translation>Bonjour</translation>
</message>
diff --git a/examples/qml/qml-i18n/main.cpp b/examples/qml/qml-i18n/main.cpp
index d03cb05aed..fe20802d3d 100644
--- a/examples/qml/qml-i18n/main.cpp
+++ b/examples/qml/qml-i18n/main.cpp
@@ -1,5 +1,6 @@
-// Copyright (C) 2020 The Qt Company Ltd.
+// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#include <QGuiApplication>
#include <QQmlApplicationEngine>
@@ -7,14 +8,11 @@ int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
- const QUrl url(QStringLiteral("qrc:/qml-i18n.qml"));
- QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
- &app, [url](QObject *obj, const QUrl &objUrl) {
- if (!obj && url == objUrl)
- QCoreApplication::exit(-1);
- }, Qt::QueuedConnection);
- engine.load(url);
+ QObject::connect(&engine, &QQmlApplicationEngine::objectCreationFailed,
+ &app, []() { QCoreApplication::exit(-1); },
+ Qt::QueuedConnection);
+ engine.loadFromModule("Translated", "Main");
return app.exec();
}
diff --git a/examples/qml/qml-i18n/qml-i18n.pro b/examples/qml/qml-i18n/qml-i18n.pro
index 847c741b00..0ecfbc01e5 100644
--- a/examples/qml/qml-i18n/qml-i18n.pro
+++ b/examples/qml/qml-i18n/qml-i18n.pro
@@ -8,6 +8,7 @@ RESOURCES += qml-i18n.qrc
target.path = $$[QT_INSTALL_EXAMPLES]/qml/qml-i18n
INSTALLS += target
+QM_FILES_RESOURCE_PREFIX = /qt/qml/Translated/i18n/
CONFIG += lrelease embed_translations
TRANSLATIONS += \
diff --git a/examples/qml/qml-i18n/qml-i18n.qrc b/examples/qml/qml-i18n/qml-i18n.qrc
index 3a505b1665..79ec649894 100644
--- a/examples/qml/qml-i18n/qml-i18n.qrc
+++ b/examples/qml/qml-i18n/qml-i18n.qrc
@@ -1,5 +1,6 @@
<RCC>
- <qresource prefix="/">
- <file>qml-i18n.qml</file>
+ <qresource prefix="/qt/qml/Translated">
+ <file>Main.qml</file>
+ <file>qmldir</file>
</qresource>
</RCC>
diff --git a/examples/qml/qml-i18n/qmldir b/examples/qml/qml-i18n/qmldir
new file mode 100644
index 0000000000..b4773af30e
--- /dev/null
+++ b/examples/qml/qml-i18n/qmldir
@@ -0,0 +1,5 @@
+module Translated
+typeinfo qml-i18n.qmltypes
+depends QtQuick
+prefer :/qt/qml/Translated/
+Main 254.0 Main.qml
diff --git a/examples/qml/qml.pro b/examples/qml/qml.pro
index df73fe0200..f1652820a6 100644
--- a/examples/qml/qml.pro
+++ b/examples/qml/qml.pro
@@ -1,21 +1,8 @@
TEMPLATE = subdirs
QT_FOR_CONFIG += qml
-qtHaveModule(quick) {
- SUBDIRS += \
- qmlextensionplugins \
- xmlhttprequest
-
- qtConfig(qml-network): \
- SUBDIRS += networkaccessmanagerfactory
-}
-
SUBDIRS += \
- referenceexamples \
- tutorials \
- shell
+ tutorials
EXAMPLE_FILES = \
- dynamicscene \
- qml-i18n \
- locale
+ qml-i18n
diff --git a/examples/qml/qmldom/CMakeLists.txt b/examples/qml/qmldom/CMakeLists.txt
deleted file mode 100644
index 1bd1ad0807..0000000000
--- a/examples/qml/qmldom/CMakeLists.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.18)
-project(qmldomloadeditwrite LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/qmldomloadeditwrite")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Network Qml)
-
-add_compile_definitions(
- QT_QMLTEST_DATADIR="${CMAKE_CURRENT_SOURCE_DIR}/../../../tests/auto/qmldom/domdata"
-)
-
-add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../../../src/qmldom/standalone qmldom)
-
-qt_add_executable(qmldomloadeditwrite
- qmldomloadeditwrite.cpp
-)
-
-target_link_libraries(qmldomloadeditwrite PUBLIC
- Qt::Core
- Qt::Qml
- qmldomlib
-)
-
-install(TARGETS qmldomloadeditwrite
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/qmldom/qmldomloadeditwrite.cpp b/examples/qml/qmldom/qmldomloadeditwrite.cpp
deleted file mode 100644
index 7c7609651b..0000000000
--- a/examples/qml/qmldom/qmldomloadeditwrite.cpp
+++ /dev/null
@@ -1,500 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-// common declarations
-#include "qmldom/qqmldomitem_p.h"
-// comparisons of two DomItems
-#include "qmldom/qqmldomcompare_p.h"
-// field filters to compare only selected fields (ignore for example location changes)
-#include "qmldom/qqmldomfieldfilter_p.h"
-// needed to edit and cast to concrete type (PropertyDefinition, ScriptExpression,...)
-#include "qmldom/qqmldomelements_p.h"
-// cast of the top level items (DomEnvironments,...)
-#include "qmldom/qqmldomtop_p.h"
-
-#include <QtTest/QtTest>
-#include <QCborValue>
-#include <QDebug>
-#include <QLatin1String>
-#include <QLatin1Char>
-#include <QLibraryInfo>
-#include <QDir>
-
-#include <memory>
-
-// everything is in the QQmlJS::Dom namespace
-using namespace QQmlJS::Dom;
-
-int main()
-{
- QString baseDir = QLatin1String(QT_QMLTEST_DATADIR) + QLatin1String("/reformatter");
- QStringList qmltypeDirs =
- QStringList({ baseDir, QLibraryInfo::path(QLibraryInfo::Qml2ImportsPath) });
-
- qDebug() << "Creating an environment loading qml from the directories" << qmltypeDirs;
- qDebug() << "single threaded, no dependencies";
- DomItem env =
- DomEnvironment::create(qmltypeDirs,
- QQmlJS::Dom::DomEnvironment::Option::SingleThreaded
- | QQmlJS::Dom::DomEnvironment::Option::NoDependencies);
-
- QString testFilePath = baseDir + QLatin1String("/file1.qml");
- DomItem tFile; // place where to store the loaded file
- // env.loadBuiltins();
-
- qDebug() << "loading the file" << testFilePath;
- env.loadFile(
- testFilePath, QString(),
- [&tFile](Path, const DomItem &, const DomItem &newIt) {
- tFile = newIt; // callback called when everything is loaded that receives the loaded
- // external file pair (path, oldValue, newValue)
- },
- LoadOption::DefaultLoad);
-
- // trigger the load
- env.loadPendingDependencies();
-
- // # Read only API: DomItem is a generic pointer for read only access to Dom Itmes :)
- {
- // ## declarative json like API
- DomItem qmlFile = tFile.field(Fields::currentItem);
- DomItem imports = qmlFile.field(Fields::imports);
- DomItem qmlObj = qmlFile.field(Fields::components)
- .key(QString())
- .index(0)
- .field(Fields::objects)
- .index(0);
-
- // ### Dump
- // any DomItem can be dumped
- qDebug() << "writing to QDebug dumps that element:" << imports;
- // often the dump is too verbose, and one might want it to a separate file
- QString dumpFilePath =
- QDir(QDir::tempPath())
- .filePath(QFileInfo(testFilePath).baseName() + QLatin1String(".dump.json"));
- qmlFile.dump(dumpFilePath, FieldFilter::defaultFilter());
- qDebug() << "dumped file to" << dumpFilePath;
-
- // ### Paths
- qDebug() << "To identify a DomItem a canonical path can be used:"
- << imports.canonicalPath();
- // a path can be converted to/from strings
- QString pString = imports.canonicalPath().toString();
- Path importsPath = Path::fromString(pString);
- // and loaded again using the .path(somePath) method
- DomItem imports2 = env.path(importsPath);
- Q_ASSERT(imports == imports2);
- // the canonical path is absolute, but you can have relative paths
- Path first = Path::Index(0);
- DomItem firstImport = imports.path(first);
- // an existing path can also be extended
- Path firstImportPath = importsPath.index(0);
- Q_ASSERT(firstImportPath == firstImport.canonicalPath());
- // the normal elements of a path are index, key, field
- // Uppercase static method creates one, lowercase appends to an existing path.
- Path mainComponentPath = Path::Field(Fields::components).key("").index(0);
- DomItem mainComponent = qmlFile.path(mainComponentPath);
- // DomItems have the same methods to access their elements
- DomItem mainComponent2 = qmlFile.field(Fields::components).key("").index(0);
- // two other special ements are root (root element for absolute paths)
- Path topPath = Path::Root(PathRoot::Top);
- Q_ASSERT(topPath == importsPath[0]);
- // the current element performs an operation (tipically a lookup or iteration) at the
- // current path location (not handled here)
- Path lookupPath = Path::Current(PathCurrent::Lookup);
-
- // there are various visit methods to iterate/visit DomItems in particular visitTree
- // which is quite flexible.
- // They normally use callbacks that can return false to stop the iteration.
- // Still often the DomKind specific for loop presentated later are clearer and more
- // convenient
- {
- QDebug dbg = qDebug().noquote().nospace();
- imports.visitTree(
- Path(),
- [&dbg](Path p, const DomItem &el, bool adopted) {
- dbg << QStringLiteral(u" ").repeated(p.length()) << "*" << p.last() << " "
- << domKindToString(el.domKind()) << "(" << el.internalKindStr()
- << ")\n";
- // returning false here stops the whole iteration
- return true;
- },
- VisitOption::Default, // we want a recursive visit visiting also the top and
- // adopted
- [&dbg](Path p, const DomItem &, bool canonicalChild) {
- // returning false here skips that branch
- if (!canonicalChild) {
- dbg << QStringLiteral(u" ").repeated(p.length()) << "+" << p.last()
- << " (adopted, will not recurse)\n";
- } else if (p && p.headIndex(0) % 2 == 1) {
- dbg << QStringLiteral(u" ").repeated(p.length()) << "-" << p.last()
- << " *recursive visit skipped*\n";
- return false; // we skip odd entries in lists;
- } else {
- dbg << QStringLiteral(u" ").repeated(p.length()) << "+" << p.last()
- << "\n";
- }
- return true;
- },
- [&dbg](Path p, const DomItem &, bool) {
- dbg << QStringLiteral(u" ").repeated(p.length()) << "=" << p.last() << "\n";
- return true;
- });
- }
-
- // ### DomKind
- // any DomItem belongs to one of 5 fundamental types
-
- // 1. Object (a C++ object)
- Q_ASSERT(qmlFile.domKind() == DomKind::Object);
- // The underlying type of the c++ object can be found with .internalKind()
- Q_ASSERT(qmlFile.internalKind() == DomType::QmlFile);
- // .initernalKindStr() is a convenience string version of it
- Q_ASSERT(qmlFile.internalKindStr() == u"QmlFile");
- // the object attributes (fields) can be reached using .field(u"filedName")
- // normally one should not use a string, but the Fields:: constant
- DomItem qmlFile2 = tFile.field(Fields::currentItem);
- // all the available fields can be listed via fields()
- qDebug() << "The" << qmlObj.internalKindStr() << "at" << qmlObj.canonicalPath()
- << "has the following fields:" << qmlObj.fields();
- // we can access the underlying C++ object with as<>
- if (const QmlFile *qmlFilePtr = qmlFile.as<QmlFile>())
- qDebug() << "The QmlFile lives at the address" << qmlFilePtr;
- // We can get the shared pointer of the owner type (which for the file is the QmlFile itself
- if (std::shared_ptr<QmlFile> qmlFilePtr = qmlFile.ownerAs<QmlFile>())
- qDebug() << "QmlFile uses shared pointers as ownership method, the underlying address "
- "is the same"
- << qmlFilePtr.get();
-
- // 2. a (Cbor-) Value, i.e a string, number,...
- DomItem fPath = qmlFile.field(Fields::canonicalFilePath);
- Q_ASSERT(fPath.domKind() == DomKind::Value);
- // the Cbor representation of a value can be extracted with .value(), and in this case we
- // can then call toString
- qDebug() << "The filePath DomItem is " << fPath << " and it still 'knows' its path "
- << fPath.canonicalPath() << " but can have it also as value:" << fPath.value()
- << "or even better as string." << fPath.value().toString(QLatin1String("*none*"));
- // a DomItem might have a valid value() even if it is not of type DomKind::Value, indeed
- // CBor maps and lists are mapped to DomKind::Map and DomKind::List, and can be traversed
- // thought that but also have a valid value().
-
- // 3. a list
- Q_ASSERT(imports.domKind() == DomKind::List);
- // the number of elements can be sound with .indexes() and with .index(n) we access each
- // element
- qDebug() << "We have " << imports.indexes() << " imports, and the first is "
- << imports.index(0);
- // If we want to just loop on the elements .values() is the most convenient way
- // technically values *always* works even for objects and maps, iterating on the values
- for (DomItem import : imports.values()) {
- if (const Import *importPtr = import.as<Import>()) {
- if (importPtr->implicit)
- qDebug() << importPtr->uri.toString() << importPtr->version.stringValue();
- }
- }
-
- // 4. a map
- DomItem bindings = qmlObj.field(Fields::bindings);
- Q_ASSERT(bindings.domKind() == DomKind::Map);
- // The keys of the map can be reached either with .keys() or .sortedKeys(), each element
- // with .key(k)
- qDebug() << "bindings";
- for (QString k : bindings.sortedKeys()) {
- for (DomItem b : bindings.key(k).values()) {
- qDebug() << k << ":" << b;
- }
- }
-
- // 5 The empty element
- DomItem empty;
- Q_ASSERT(empty.domKind() == DomKind::Empty);
- // The empty element is the only DomItem that casted to bool returns false, so checking for
- // it can be just an implicit cast to bool
- Q_ASSERT(bindings && !empty);
- // the empty element supports all the previus operations so that one can traverse a non
- // existing path without checking at every element, but only check the result
- DomItem nonExisting = qmlFile.field(u"no-existing").key(u"a").index(0);
- Q_ASSERT(!nonExisting);
-
- // the index operator [] can be used instead of .index/.key/.field, it might be slightly
- // less efficient but works
-
- // find type
- // access type
-
- // ### write out
- // it is possible to write out a qmlFile (actually also parts of it), which will
- // automatically reformat it
- QString reformattedFilePath =
- QDir(QDir::tempPath())
- .filePath(QFileInfo(testFilePath).baseName() + QLatin1String(".qml"));
- DomItem newFile = qmlFile.writeOut(reformattedFilePath);
- qDebug() << "reformatted written at " << reformattedFilePath;
-
- // ## Jumping around
- // ### Generic Methods
- // from a DomItem you do no have just deeper in the tree, you can also go up the hierarch
- // toward the root .container() just goes up one step in the canonicalPath of the object
- Q_ASSERT(imports == firstImport.container());
- // .containingObject() goes up to the containing DomKind::Object, skipping over all Maps and
- // Lists
- Q_ASSERT(qmlFile == firstImport.containingObject());
- // .owner() returns the shared pointer based "owner" object, qmlFile and ScriptExpression
- // are owningItems
- Q_ASSERT(qmlFile == bindings.owner());
- // .top() goes to the top of the tree, i.e the environment (or the universe)
- Q_ASSERT(env == bindings.top());
- // environment is normally the same as top, but making sure it is a actually a
- // DomEnvironment
- Q_ASSERT(env = bindings.environment());
- // the universe is a cache of loaded files which for each file keeps two versions: the
- // latest and the latest valid it can be reached with .universe(), from the universe you
- // cannot get back to the environment.
- Q_ASSERT(env.universe().internalKind() == DomType::DomUniverse);
-
- // ## QML Oriented Methods
- // The Dom model is not for generic json-like structures, so there are methods tailored for
- // Qml and its structure
- // The methods can succeed if there is a clearly defined unique result.
- // sometime there is an obivious, but not necessarily unique choice (tipically going up the
- // hierarchy), for example given a qml file the obvious choice for a component is the root
- // component, but the file might contain other inline components, and for an object with
- // different version exposed (C++ property versioning) the latest version is the natural
- // choice, but other might be available. In these case passing GoTo::MostLikely as argument
- // makes the method to this obivious choice (or possibly even only choice if no other
- // versions/components are actually defined), instead of refusing any potentially ambiguous
- // situation and returning the empty element.
-
- // .fileObject() goes to the object representing the whole file
- // (from either the external object returned by load or from inside the file)
- DomItem fileObject = tFile.fileObject();
- DomItem fileObject2 = imports.fileObject();
- Q_ASSERT(fileObject == fileObject2 && fileObject.internalKind() == DomType::QmlFile);
- // .component() goes to the component object.
- Q_ASSERT(qmlObj.component() == qmlFile.component(GoTo::MostLikely));
- // .pragmas gives access to the pragmas of the current component
- Q_ASSERT(qmlFile.pragmas() == qmlFile.field(Fields::pragmas));
-
- // QmlObject
- // QmlObject if the main to represent the type information (methods, bindings,
- // properties,...) of qml. Please note that QmlObject -> component operation is potentially
- // lossy, when multiple version are exposed, so we represent a type through its root object,
- // not through a component.
-
- // .qmlObject() goes to the current QmlObject
- Q_ASSERT(qmlObj == bindings.qmlObject());
-
- // Given the centrality of QmlObject several of its attributes have convenience methods
- // to access them:
-
- // .children() makes subObjects contained inside a QmlObject accessible
- // note that it is possible to add objects also by directly binding the children or data
- // attribute, those children are not listed here, this accesses only those listed inside
- // the QmlObject
- Q_ASSERT(qmlObj.children() == qmlObj.field(Fields::children));
- DomItem subObj0 = qmlObj.children().index(0);
- // .child(<i>) is a shortcut for .children.index(<i>)
- Q_ASSERT(subObj0 == qmlObj.child(0));
- // rootQmlObject goes to the root qmlObject (unless one reaches an empty element)
- Q_ASSERT(!subObj0 || subObj0.rootQmlObject() == qmlObj);
- // .bindings() returns the bindings defined in the current object
- Q_ASSERT(bindings == qmlObj.bindings());
- DomItem mCompObj = qmlObj.child(0)
- .child(0)
- .bindings()
- .key(u"delegate")
- .index(0)
- .field(Fields::value)
- .child(1);
- // .methods() gives methods definitions and signals
- DomItem methods = mCompObj.methods();
- qDebug() << "mCompObj methods:";
- for (QString methodName : methods.sortedKeys()) {
- for (DomItem method : methods.key(methodName).values()) {
- if (const MethodInfo *methodPtr = method.as<MethodInfo>()) {
- Q_ASSERT(methodName == methodPtr->name);
- qDebug() << " " << methodPtr->name << methodPtr->methodType;
- }
- }
- }
- qDebug() << "mCompObj propertyDefs:";
- // .propertyDefs() returns the properties defined in the current object
- DomItem pDefs = mCompObj.propertyDefs();
- for (QString pDefName : pDefs.sortedKeys()) {
- for (DomItem pDef : pDefs.key(pDefName).values()) {
- if (const PropertyDefinition *pDefPtr = pDef.as<PropertyDefinition>()) {
- Q_ASSERT(pDefName == pDefPtr->name);
- qDebug() << " " << pDefPtr->name << pDefPtr->typeName;
- }
- }
- }
- // binding and property definitions are about the ones defined in the current object
- // often one is interested also to the inherited properties.
- // Here PropertyInfo helps, it list all the definitions and bindings for a given property
- // in the inheritance order (local definitions, parent definitions, parent parent
- // definitions,...)
- // .propertyInfos() gives access in the usual way (through a DomItem)
- DomItem propertyInfos = mCompObj.propertyInfos();
- // .propertyInfoWithName(<name>) directly accesses one
- PropertyInfo pInfo = mCompObj.propertyInfoWithName(QStringLiteral(u"a"));
- qDebug() << "bindings" << pInfo.bindings;
- // .propertyInfoNames() gives the names of the properties
- Q_ASSERT(propertyInfos.keys() == mCompObj.propertyInfoNames());
-
- // .globalScope() goes to the globa scope object
- Q_ASSERT(qmlObj.globalScope().internalKind() == DomType::GlobalScope);
- // and scope to the containing scope
- Q_ASSERT(bindings.scope() == qmlObj);
- }
- // mutate & edit
- {
- // DomItem handles read-only access, but if one wants to change something it cannot be used.
- // MutableDomItem can be initialized with a DomItem, and provides also the methods to modify
- // the item. It keeps the OwningItem and the path to the current item.
- // Mutability can invalidate pointers to non owning items (and thus DomItem).
- // For this reason one should not modify something that other code can have a DomItem
- // pointer to, the best practice is to make shared object immutable and never change them.
- // One should modify only a copy that is used only by a single thread, and
- // do not shared untils all modifications are done.
- // A MutableItem stays valid (or becomes Empty), but stays safe to use
- //
- // Assuming one guarantees that editing is ok, doing it in practice is just about using
- // MutableDomItem instead of DomItem
- // It is possible to simply initialize a mutable item with a DomItem
- DomItem origFile = tFile.fileObject();
- MutableDomItem myFile0(origFile);
- // Normally it is better to have a separate environment. Is possible to avoid re-reading
- // the files already read by sharing the Universe between two environments.
- // But normally it is better and just as safe to work on a copy, so that one can be sure
- // that no DomItem is kept by other code gets invalidated. The .makeCopy creates a deep
- // copy, and by default (DomItem::CopyOption::EnvConnected) creates an environment which to
- // takes all non local elements from the current environment (its parent environment) but
- // replaces the file object with the copy. When finished one can replace the file object of
- // the parent with the new one using .commitToBase().
- MutableDomItem myFile = origFile.makeCopy();
- Q_ASSERT(myFile.ownerAs<QmlFile>()
- && myFile.ownerAs<QmlFile>() != myFile0.ownerAs<QmlFile>());
- Q_ASSERT(myFile.environment().ownerAs<DomEnvironment>()
- && myFile.environment().ownerAs<DomEnvironment>()
- != myFile0.environment().ownerAs<DomEnvironment>());
- // we can check that the two files are really identical (.item() give back the DomItem of
- // a MutableDomItem
- Q_ASSERT(domCompareStrList(origFile, myFile, FieldFilter::compareFilter()).isEmpty());
- // MutableDomItem has the same methods as DomItem
- MutableDomItem qmlObj = myFile.qmlObject(GoTo::MostLikely);
- MutableDomItem qmlObj2 = myFile.field(Fields::components)
- .key(QString())
- .index(0)
- .field(Fields::objects)
- .index(0);
- Q_ASSERT(qmlObj && qmlObj == qmlObj2);
- qDebug() << "mutable qmlObj has canonicalPath " << qmlObj.canonicalPath();
- // but it adds methods to add
- // * new PropertyDefinitions
- PropertyDefinition b;
- b.name = QLatin1String("xx");
- b.typeName = QLatin1String("int");
- // if we make t true we also have to give a value...
- MutableDomItem addedPDef = qmlObj.addPropertyDef(b);
- qDebug() << "added property definition at:" << addedPDef.pathFromOwner();
- // * new bindings
- MutableDomItem addedBinding0 = qmlObj.addBinding(
- Binding("height",
- std::shared_ptr<ScriptExpression>(new ScriptExpression(
- QStringLiteral(u"243"),
- ScriptExpression::ExpressionType::BindingExpression))));
- // by default addBinding, addPropertyDef and addMethod have the AddOption::Override
- // to make it more difficult to create invalid documents, so that only the
- // following binding remains (where we use the convenience constructor that constucts
- // the ScriptExpression internally
- MutableDomItem addedBinding = qmlObj.addBinding(Binding("height", QStringLiteral(u"242")));
- qDebug() << "added binding at:" << addedBinding.pathFromOwner();
- // * new methods
- MethodInfo mInfo;
- mInfo.name = QLatin1String("foo2");
- MethodParameter param;
- param.name = QLatin1String("x");
- mInfo.parameters.append(param);
- mInfo.setCode(QLatin1String("return 4*10+2 - x"));
- // we can change the added binding
- addedBinding.setCode(QLatin1String("245"));
- MutableDomItem addedMethod = qmlObj.addMethod(mInfo);
- qDebug() << "added method at:" << addedMethod.pathFromOwner();
- // * new QmlObjects
- QmlObject subObj;
- subObj.setName(QLatin1String("Item"));
- MutableDomItem addedSubObj = qmlObj.addChild(subObj);
- qDebug() << "added subObject at:" << addedMethod.pathFromOwner();
- // It is possible to modify the content of objects, using the mutableAs method
- if (PropertyDefinition *addedPDefPtr = addedPDef.mutableAs<PropertyDefinition>()) {
- addedPDefPtr->isRequired = true;
- }
- MutableDomItem firstChild = qmlObj.child(0);
- qDebug() << "firstChild:" << firstChild;
- // It is possible remove objects
- if (QmlObject *qmlObjPtr = qmlObj.mutableAs<QmlObject>()) {
- QList<QmlObject> children = qmlObjPtr->children();
- children.removeAt(0);
- qmlObjPtr->setChildren(children);
- }
- // But as MutableDomItem does not keep the identity, just the same position, the addedSubObj
- // becomes invalid (and firstChild changes)
- qDebug() << "after removal firstChild:" << firstChild;
- qDebug() << "addedSubObj becomes invalid:" << addedSubObj;
- qDebug() << "But the last object is the added one:"
- << qmlObj.child(qmlObj.children().indexes() - 1);
-
- // now origFile are different
- Q_ASSERT(!domCompareStrList(origFile, myFile, FieldFilter::compareFilter()).isEmpty());
- // and we can look at the places where they differ
- qDebug().noquote().nospace()
- << "Edits introduced the following diffs (ignoring file locations"
- << " and thus whitespace/reformatting changes):\n"
- << domCompareStrList(origFile, myFile, FieldFilter::noLocationFilter(),
- DomCompareStrList::AllDiffs)
- .join(QString());
-
- QString reformattedFilePath =
- QDir(QDir::tempPath())
- .filePath(QStringLiteral(u"edited") + QFileInfo(testFilePath).baseName()
- + QLatin1String(".qml"));
- MutableDomItem reformattedEditedFile = myFile.writeOut(reformattedFilePath);
- // the reformatted edited file might be different from the edited file
- // but the differences are just in file location/formatting
- Q_ASSERT(domCompareStrList(myFile, reformattedEditedFile, FieldFilter::noLocationFilter())
- .isEmpty());
-
- qDebug() << "The edited file was written at " << reformattedFilePath;
- QString dumpFilePath =
- QDir(QDir::tempPath())
- .filePath(QStringLiteral(u"edited0") + QFileInfo(testFilePath).baseName()
- + QLatin1String(".dump.json"));
- myFile.dump(dumpFilePath);
- qDebug() << "The non reformatted edited file was dumped at " << dumpFilePath;
- QString reformattedDumpFilePath =
- QDir(QDir::tempPath())
- .filePath(QStringLiteral(u"edited") + QFileInfo(testFilePath).baseName()
- + QLatin1String(".dump.json"));
- reformattedEditedFile.dump(reformattedDumpFilePath);
- qDebug() << "The edited file was dumped at " << reformattedDumpFilePath;
- // The top environment still contains the original loaded file
- Q_ASSERT(origFile.ownerAs<QmlFile>() != reformattedEditedFile.ownerAs<QmlFile>());
- Q_ASSERT(tFile.fileObject().refreshed().ownerAs<QmlFile>());
- Q_ASSERT(tFile.fileObject().refreshed().ownerAs<QmlFile>() == origFile.ownerAs<QmlFile>());
- Q_ASSERT(tFile.fileObject().ownerAs<QmlFile>() == origFile.ownerAs<QmlFile>());
- Q_ASSERT(tFile.fileObject().refreshed().ownerAs<QmlFile>()
- != reformattedEditedFile.ownerAs<QmlFile>());
- // we can commit the reformatted file
- if (!reformattedEditedFile.commitToBase()) {
- qWarning() << "No reformatted file to commit";
- }
- // myFile might not be the same (If and updated check is requested, not the case here)
- if (myFile.ownerAs<QmlFile>() != reformattedEditedFile.ownerAs<QmlFile>()
- && !myFile.commitToBase()) {
- qWarning() << "Could not commit edited file";
- }
- // but refreshing it (looking up its canonical path) we always find the updated file
- Q_ASSERT(myFile.refreshed().ownerAs<QmlFile>() == reformattedEditedFile.ownerAs<QmlFile>());
- Q_ASSERT(tFile.fileObject().refreshed().ownerAs<QmlFile>()
- == reformattedEditedFile.ownerAs<QmlFile>());
- }
-}
diff --git a/examples/qml/qmlextensionplugins/CMakeLists.txt b/examples/qml/qmlextensionplugins/CMakeLists.txt
deleted file mode 100644
index 753f05b173..0000000000
--- a/examples/qml/qmlextensionplugins/CMakeLists.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(qmlqtimeexample LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/qmlextensionplugins/imports/TimeExample")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml)
-
-#![0]
-set(qml_files
- imports/TimeExample/Clock.qml
-)
-
-set(images
- imports/TimeExample/center.png
- imports/TimeExample/clock.png
- imports/TimeExample/hour.png
- imports/TimeExample/minute.png
-)
-#![0]
-
-foreach(file IN LISTS qml_files images)
- get_filename_component(filename ${file} NAME)
- set_source_files_properties(${file} PROPERTIES QT_RESOURCE_ALIAS ${filename})
-endforeach()
-
-#![1]
-qt_add_qml_module(qmlqtimeexample
- OUTPUT_DIRECTORY imports/TimeExample
- URI "TimeExample"
- SOURCES timemodel.cpp timemodel.h
- AUTO_RESOURCE_PREFIX
- QML_FILES ${qml_files}
- RESOURCES ${images}
-)
-#![1]
-
-set_target_properties(qmlqtimeexample PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(qmlqtimeexample PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
-)
-
-install(TARGETS qmlqtimeexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/qmlextensionplugins/doc/images/qml-plugins-example.png b/examples/qml/qmlextensionplugins/doc/images/qml-plugins-example.png
deleted file mode 100644
index c2d4886ea2..0000000000
--- a/examples/qml/qmlextensionplugins/doc/images/qml-plugins-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/qmlextensionplugins/doc/src/qmlpluginex.qdoc b/examples/qml/qmlextensionplugins/doc/src/qmlpluginex.qdoc
deleted file mode 100644
index 80f39e36ce..0000000000
--- a/examples/qml/qmlextensionplugins/doc/src/qmlpluginex.qdoc
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \title QML Plugin Example
- \example qmlextensionplugins
-
- \brief This example creates a C++ plugin extension by subclassing QQmlEngineExtensionPlugin.
-
- \image qml-plugins-example.png
-
- To run this example, use the following commands on the prompt:
-
- \if defined(onlinedocs)
- \tab {build-qt-app}{tab-cmake}{CMake}{checked}
- \tab {build-qt-app}{tab-qmake}{qmake}{}
- \tabcontent {tab-cmake}
- \else
- \section1 Using CMake
- \endif
- \badcode \QtVersion
- cmake -DCMAKE_PREFIX_PATH=path/to/Qt/\1/your_platform -S <source-dir> -B <build-dir> -G Ninja
- cd path/to/build/dir
- ninja
- qml -I imports plugins.qml
- \endcode
- For more information about building on the command line using CMake,
- see \l {Building projects on the command line}.
- \if defined(onlinedocs)
- \endtabcontent
- \tabcontent {tab-qmake}
- \else
- \section1 Using qmake
- \endif
- \badcode
- qmake
- make
- qml -I imports plugins.qml
- \endcode
- \if defined(onlinedocs)
- \endtabcontent
- \endif
-*/
diff --git a/examples/qml/qmlextensionplugins/imports/TimeExample/Clock.qml b/examples/qml/qmlextensionplugins/imports/TimeExample/Clock.qml
deleted file mode 100644
index b071e2e031..0000000000
--- a/examples/qml/qmlextensionplugins/imports/TimeExample/Clock.qml
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Rectangle {
- id: clock
- width: 200; height: 200; color: "gray"
-
- property alias city: cityLabel.text
- property variant hours
- property variant minutes
- property variant shift : 0
-
- Image { id: background; source: "clock.png" }
-
- Image {
- x: 92.5; y: 27
- source: "hour.png"
- transform: Rotation {
- id: hourRotation
- origin.x: 7.5; origin.y: 73;
- angle: (clock.hours * 30) + (clock.minutes * 0.5)
- Behavior on angle {
- SpringAnimation{ spring: 2; damping: 0.2; modulus: 360 }
- }
- }
- }
-
- Image {
- x: 93.5; y: 17
- source: "minute.png"
- transform: Rotation {
- id: minuteRotation
- origin.x: 6.5; origin.y: 83;
- angle: clock.minutes * 6
- Behavior on angle {
- SpringAnimation{ spring: 2; damping: 0.2; modulus: 360 }
- }
- }
- }
-
- Image {
- anchors.centerIn: background; source: "center.png"
- }
-
- Text {
- id: cityLabel; font.bold: true; font.pixelSize: 14; y:200; color: "white"
- anchors.horizontalCenter: parent.horizontalCenter
- }
-}
diff --git a/examples/qml/qmlextensionplugins/imports/TimeExample/center.png b/examples/qml/qmlextensionplugins/imports/TimeExample/center.png
deleted file mode 100644
index 7fbd802a44..0000000000
--- a/examples/qml/qmlextensionplugins/imports/TimeExample/center.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/qmlextensionplugins/imports/TimeExample/clock.png b/examples/qml/qmlextensionplugins/imports/TimeExample/clock.png
deleted file mode 100644
index 462edacc0e..0000000000
--- a/examples/qml/qmlextensionplugins/imports/TimeExample/clock.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/qmlextensionplugins/imports/TimeExample/hour.png b/examples/qml/qmlextensionplugins/imports/TimeExample/hour.png
deleted file mode 100644
index 9f33fc5d48..0000000000
--- a/examples/qml/qmlextensionplugins/imports/TimeExample/hour.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/qmlextensionplugins/imports/TimeExample/minute.png b/examples/qml/qmlextensionplugins/imports/TimeExample/minute.png
deleted file mode 100644
index e2f216c897..0000000000
--- a/examples/qml/qmlextensionplugins/imports/TimeExample/minute.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/qmlextensionplugins/imports/TimeExample/qmldir b/examples/qml/qmlextensionplugins/imports/TimeExample/qmldir
deleted file mode 100644
index 252e662e12..0000000000
--- a/examples/qml/qmlextensionplugins/imports/TimeExample/qmldir
+++ /dev/null
@@ -1,3 +0,0 @@
-module TimeExample
-Clock 1.0 Clock.qml
-plugin qmlqtimeexampleplugin
diff --git a/examples/qml/qmlextensionplugins/plugin.cpp b/examples/qml/qmlextensionplugins/plugin.cpp
deleted file mode 100644
index 066d284a5e..0000000000
--- a/examples/qml/qmlextensionplugins/plugin.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include <QtQml/QQmlEngineExtensionPlugin>
-#include <qdebug.h>
-
-//![plugin]
-class QExampleQmlPlugin : public QQmlEngineExtensionPlugin
-{
- Q_OBJECT
- Q_PLUGIN_METADATA(IID QQmlEngineExtensionInterface_iid)
-};
-//![plugin]
-
-#include "plugin.moc"
diff --git a/examples/qml/qmlextensionplugins/plugins.qml b/examples/qml/qmlextensionplugins/plugins.qml
deleted file mode 100644
index 55e8903400..0000000000
--- a/examples/qml/qmlextensionplugins/plugins.qml
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-//![0]
-import TimeExample // import types from the plugin
-
-Clock { // this class is defined in QML (imports/TimeExample/Clock.qml)
-
- Time { // this class is defined in C++ (plugin.cpp)
- id: time
- }
-
- hours: time.hour
- minutes: time.minute
-
-}
-//![0]
diff --git a/examples/qml/qmlextensionplugins/plugins.qmlproject b/examples/qml/qmlextensionplugins/plugins.qmlproject
deleted file mode 100644
index c2de5f5703..0000000000
--- a/examples/qml/qmlextensionplugins/plugins.qmlproject
+++ /dev/null
@@ -1,18 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "plugins.qml"
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-
- importPaths: [ "imports" ]
-}
diff --git a/examples/qml/qmlextensionplugins/qmlextensionplugins.pro b/examples/qml/qmlextensionplugins/qmlextensionplugins.pro
deleted file mode 100644
index c074b8d671..0000000000
--- a/examples/qml/qmlextensionplugins/qmlextensionplugins.pro
+++ /dev/null
@@ -1,46 +0,0 @@
-TEMPLATE = lib
-CONFIG += plugin qmltypes
-QT += qml
-
-QML_IMPORT_NAME = TimeExample
-QML_IMPORT_MAJOR_VERSION = 1
-
-DESTDIR = imports/$$QML_IMPORT_NAME
-TARGET = qmlqtimeexampleplugin
-QMLTYPES_FILENAME = $$DESTDIR/plugins.qmltypes
-
-SOURCES += \
- plugin.cpp \
- timemodel.cpp
-
-HEADERS += \
- timemodel.h
-
-PLUGINFILES = \
- imports/$$QML_IMPORT_NAME/qmldir \
- imports/$$QML_IMPORT_NAME/center.png \
- imports/$$QML_IMPORT_NAME/clock.png \
- imports/$$QML_IMPORT_NAME/Clock.qml \
- imports/$$QML_IMPORT_NAME/hour.png \
- imports/$$QML_IMPORT_NAME/minute.png
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/qmlextensionplugins/imports/$$QML_IMPORT_NAME
-
-pluginfiles_copy.files = $$PLUGINFILES
-pluginfiles_copy.path = $$DESTDIR
-
-pluginfiles_install.files = $$PLUGINFILES $$OUT_PWD/$$DESTDIR/plugins.qmltypes
-pluginfiles_install.path = $$[QT_INSTALL_EXAMPLES]/qml/qmlextensionplugins/imports/$$QML_IMPORT_NAME
-
-qml_copy.files = plugins.qml plugins.qmlproject
-qml_copy.path = $$OUT_PWD
-
-qml_install.files = plugins.qml plugins.qmlproject
-qml_install.path = $$[QT_INSTALL_EXAMPLES]/qml/qmlextensionplugins
-
-INSTALLS += target qml_install pluginfiles_install
-COPIES += qml_copy pluginfiles_copy
-
-OTHER_FILES += $$PLUGINFILES plugins.qml
-
-CONFIG += install_ok # Do not cargo-cult this!
diff --git a/examples/qml/qmlextensionplugins/timemodel.cpp b/examples/qml/qmlextensionplugins/timemodel.cpp
deleted file mode 100644
index a94a7e773d..0000000000
--- a/examples/qml/qmlextensionplugins/timemodel.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "timemodel.h"
-
-int TimeModel::instances=0;
-MinuteTimer *TimeModel::timer=nullptr;
-
-void MinuteTimer::start()
-{
- if (!timer.isActive()) {
- time = QTime::currentTime();
- timer.start(60000-time.second()*1000, this);
- }
-}
-
-void MinuteTimer::stop()
-{
- timer.stop();
-}
-
-void MinuteTimer::timerEvent(QTimerEvent *)
-{
- QTime now = QTime::currentTime();
- if (now.second() == 59 && now.minute() == time.minute() && now.hour() == time.hour()) {
- // just missed time tick over, force it, wait extra 0.5 seconds
- time = time.addSecs(60);
- timer.start(60500, this);
- } else {
- time = now;
- timer.start(60000-time.second()*1000, this);
- }
- emit timeChanged();
-}
-
-TimeModel::TimeModel(QObject *parent) : QObject(parent)
-{
- if (++instances == 1) {
- if (!timer)
- timer = new MinuteTimer(QCoreApplication::instance());
- connect(timer, &MinuteTimer::timeChanged, this, &TimeModel::timeChanged);
- timer->start();
- }
-}
-
-TimeModel::~TimeModel()
-{
- if (--instances == 0) {
- timer->stop();
- }
-}
diff --git a/examples/qml/qmlextensionplugins/timemodel.h b/examples/qml/qmlextensionplugins/timemodel.h
deleted file mode 100644
index 2c27a6dada..0000000000
--- a/examples/qml/qmlextensionplugins/timemodel.h
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef TIMEMODEL_H
-#define TIMEMODEL_H
-
-#include <QtQml/qqml.h>
-#include <QtCore/qdatetime.h>
-#include <QtCore/qbasictimer.h>
-#include <QtCore/qcoreapplication.h>
-
-// Implements a "TimeModel" class with hour and minute properties
-// that change on-the-minute yet efficiently sleep the rest
-// of the time.
-
-class MinuteTimer : public QObject
-{
- Q_OBJECT
-public:
- MinuteTimer(QObject *parent) : QObject(parent) {}
-
- void start();
- void stop();
-
- int hour() const { return time.hour(); }
- int minute() const { return time.minute(); }
-
-signals:
- void timeChanged();
-
-protected:
- void timerEvent(QTimerEvent *) override;
-
-private:
- QTime time;
- QBasicTimer timer;
-};
-
-//![0]
-class TimeModel : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(int hour READ hour NOTIFY timeChanged)
- Q_PROPERTY(int minute READ minute NOTIFY timeChanged)
- QML_NAMED_ELEMENT(Time)
-//![0]
-
-public:
- TimeModel(QObject *parent=nullptr);
- ~TimeModel() override;
-
- int minute() const { return timer->minute(); }
- int hour() const { return timer->hour(); }
-
-signals:
- void timeChanged();
-
-private:
- QTime t;
- static MinuteTimer *timer;
- static int instances;
-};
-
-#endif // TIMEMODEL_H
diff --git a/examples/qml/referenceexamples/CMakeLists.txt b/examples/qml/referenceexamples/CMakeLists.txt
deleted file mode 100644
index 88908ec9a0..0000000000
--- a/examples/qml/referenceexamples/CMakeLists.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-qt_internal_add_example(adding)
-qt_internal_add_example(coercion)
-qt_internal_add_example(default)
-qt_internal_add_example(properties)
-qt_internal_add_example(methods)
-if(TARGET Qt::Widgets)
- qt_internal_add_example(extended)
-endif()
-if(TARGET Qt::Quick)
- qt_internal_add_example(attached)
- qt_internal_add_example(binding)
- qt_internal_add_example(grouped)
- qt_internal_add_example(signal)
- qt_internal_add_example(valuesource)
-endif()
diff --git a/examples/qml/referenceexamples/adding/CMakeLists.txt b/examples/qml/referenceexamples/adding/CMakeLists.txt
deleted file mode 100644
index f1d3fc6eac..0000000000
--- a/examples/qml/referenceexamples/adding/CMakeLists.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(adding LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/adding")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Qml)
-
-qt_add_executable(adding
- main.cpp
- person.cpp person.h
-)
-
-set_target_properties(adding PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(adding PUBLIC
- Qt::Core
- Qt::Qml
-)
-
-qt_add_qml_module(adding
- URI People
- QML_FILES example.qml
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS adding
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/referenceexamples/adding/adding.pro b/examples/qml/referenceexamples/adding/adding.pro
deleted file mode 100644
index a4a677c3c4..0000000000
--- a/examples/qml/referenceexamples/adding/adding.pro
+++ /dev/null
@@ -1,13 +0,0 @@
-QT = core qml
-CONFIG += qmltypes
-
-QML_IMPORT_NAME = People
-QML_IMPORT_MAJOR_VERSION = 1
-
-SOURCES += main.cpp \
- person.cpp
-HEADERS += person.h
-RESOURCES += adding.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/referenceexamples/adding
-INSTALLS += target
diff --git a/examples/qml/referenceexamples/adding/adding.qrc b/examples/qml/referenceexamples/adding/adding.qrc
deleted file mode 100644
index e2fa01d5e7..0000000000
--- a/examples/qml/referenceexamples/adding/adding.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
- <file>example.qml</file>
-</qresource>
-</RCC>
diff --git a/examples/qml/referenceexamples/adding/example.qml b/examples/qml/referenceexamples/adding/example.qml
deleted file mode 100644
index 068352bc35..0000000000
--- a/examples/qml/referenceexamples/adding/example.qml
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-// ![0]
-import People
-
-Person {
- name: "Bob Jones"
- shoeSize: 12
-}
-// ![0]
diff --git a/examples/qml/referenceexamples/adding/main.cpp b/examples/qml/referenceexamples/adding/main.cpp
deleted file mode 100644
index 319217da56..0000000000
--- a/examples/qml/referenceexamples/adding/main.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include <QCoreApplication>
-#include <QQmlEngine>
-#include <QQmlComponent>
-#include <QDebug>
-#include "person.h"
-
-int main(int argc, char ** argv)
-{
- QCoreApplication app(argc, argv);
-
- QQmlEngine engine;
- QQmlComponent component(&engine, QUrl("qrc:example.qml"));
- auto *person = qobject_cast<Person *>(component.create());
- if (!person) {
- qWarning() << component.errors();
- return EXIT_FAILURE;
- }
-
- qInfo() << "The person's name is" << person->name()
- << "\nThey wear a" << person->shoeSize() << "sized shoe";
-
- return EXIT_SUCCESS;
-}
diff --git a/examples/qml/referenceexamples/adding/person.cpp b/examples/qml/referenceexamples/adding/person.cpp
deleted file mode 100644
index 5b6ce4b9d6..0000000000
--- a/examples/qml/referenceexamples/adding/person.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "person.h"
-
-// ![0]
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- m_name = n;
-}
-
-int Person::shoeSize() const
-{
- return m_shoeSize;
-}
-
-void Person::setShoeSize(int s)
-{
- m_shoeSize = s;
-}
-
-// ![0]
diff --git a/examples/qml/referenceexamples/adding/person.h b/examples/qml/referenceexamples/adding/person.h
deleted file mode 100644
index 867927ee2b..0000000000
--- a/examples/qml/referenceexamples/adding/person.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef PERSON_H
-#define PERSON_H
-
-#include <QObject>
-#include <QtQml/qqml.h>
-
-//![0]
-class Person : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
- QML_ELEMENT
-public:
- using QObject::QObject;
-
- QString name() const;
- void setName(const QString &);
-
- int shoeSize() const;
- void setShoeSize(int);
-
-private:
- QString m_name;
- int m_shoeSize = 0;
-};
-//![0]
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/attached/CMakeLists.txt b/examples/qml/referenceexamples/attached/CMakeLists.txt
deleted file mode 100644
index ce4ff3e80f..0000000000
--- a/examples/qml/referenceexamples/attached/CMakeLists.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(attached LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/attached")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml)
-
-qt_add_executable(attached
- birthdayparty.cpp birthdayparty.h
- main.cpp
- person.cpp person.h
-)
-
-set_target_properties(attached PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(attached PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
-)
-
-qt_add_qml_module(attached
- URI People
- QML_FILES example.qml
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS attached
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/referenceexamples/attached/attached.pro b/examples/qml/referenceexamples/attached/attached.pro
deleted file mode 100644
index 8c66b189f7..0000000000
--- a/examples/qml/referenceexamples/attached/attached.pro
+++ /dev/null
@@ -1,15 +0,0 @@
-QT += qml
-CONFIG += qmltypes
-
-QML_IMPORT_NAME = People
-QML_IMPORT_MAJOR_VERSION = 1
-
-SOURCES += main.cpp \
- person.cpp \
- birthdayparty.cpp
-HEADERS += person.h \
- birthdayparty.h
-RESOURCES += attached.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/referenceexamples/attached
-INSTALLS += target
diff --git a/examples/qml/referenceexamples/attached/attached.qrc b/examples/qml/referenceexamples/attached/attached.qrc
deleted file mode 100644
index e2fa01d5e7..0000000000
--- a/examples/qml/referenceexamples/attached/attached.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
- <file>example.qml</file>
-</qresource>
-</RCC>
diff --git a/examples/qml/referenceexamples/attached/birthdayparty.cpp b/examples/qml/referenceexamples/attached/birthdayparty.cpp
deleted file mode 100644
index a76b0f55cb..0000000000
--- a/examples/qml/referenceexamples/attached/birthdayparty.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "birthdayparty.h"
-
-QDate BirthdayPartyAttached::rsvp() const
-{
- return m_rsvp;
-}
-
-void BirthdayPartyAttached::setRsvp(QDate d)
-{
- m_rsvp = d;
-}
-
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-qsizetype BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(qsizetype index) const
-{
- return m_guests.at(index);
-}
-
-BirthdayPartyAttached *BirthdayParty::qmlAttachedProperties(QObject *object)
-{
- return new BirthdayPartyAttached(object);
-}
-
diff --git a/examples/qml/referenceexamples/attached/birthdayparty.h b/examples/qml/referenceexamples/attached/birthdayparty.h
deleted file mode 100644
index 7eb6508869..0000000000
--- a/examples/qml/referenceexamples/attached/birthdayparty.h
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef BIRTHDAYPARTY_H
-#define BIRTHDAYPARTY_H
-
-#include <QObject>
-#include <QDate>
-#include <qqml.h>
-#include "person.h"
-
-class BirthdayPartyAttached : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp)
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- QDate rsvp() const;
- void setRsvp(QDate);
-
-private:
- QDate m_rsvp;
-};
-
-class BirthdayParty : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(Person *host READ host WRITE setHost)
- Q_PROPERTY(QQmlListProperty<Person> guests READ guests)
- Q_CLASSINFO("DefaultProperty", "guests")
- QML_ELEMENT
-
-//! [declare attached]
- QML_ATTACHED(BirthdayPartyAttached)
-//! [declare attached]
-
-public:
- using QObject::QObject;
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- qsizetype guestCount() const;
- Person *guest(qsizetype) const;
-
- //! [static attached]
- static BirthdayPartyAttached *qmlAttachedProperties(QObject *);
- //! [static attached]
-private:
- Person *m_host = nullptr;
- QList<Person *> m_guests;
-};
-
-#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/referenceexamples/attached/example.qml b/examples/qml/referenceexamples/attached/example.qml
deleted file mode 100644
index a4e675fe51..0000000000
--- a/examples/qml/referenceexamples/attached/example.qml
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import People
-import QtQuick // For QColor
-
-//! [begin]
-BirthdayParty {
-//! [begin]
-
-//! [rsvp]
- Boy {
- name: "Robert Campbell"
- BirthdayParty.rsvp: "2009-07-01"
- }
-//! [rsvp]
- // ![1]
- Boy {
- name: "Leo Hodges"
- shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
-
- BirthdayParty.rsvp: "2009-07-06"
- }
- // ![1]
- host: Boy {
- name: "Jack Smith"
- shoe { size: 8; color: "blue"; brand: "Puma"; price: 19.95 }
- }
-//! [end]
-}
-//! [end]
-
diff --git a/examples/qml/referenceexamples/attached/main.cpp b/examples/qml/referenceexamples/attached/main.cpp
deleted file mode 100644
index cfe0a1b9b2..0000000000
--- a/examples/qml/referenceexamples/attached/main.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include <QCoreApplication>
-#include <QQmlEngine>
-#include <QQmlComponent>
-#include <QDebug>
-#include "birthdayparty.h"
-#include "person.h"
-
-int main(int argc, char ** argv)
-{
- QCoreApplication app(argc, argv);
-
- QQmlEngine engine;
- QQmlComponent component(&engine, QUrl("qrc:example.qml"));
- auto *party = qobject_cast<BirthdayParty *>(component.create());
-
- if (party && party->host()) {
- qInfo() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qInfo() << "He is inviting:";
- else
- qInfo() << "She is inviting:";
-
- for (qsizetype ii = 0; ii < party->guestCount(); ++ii) {
- Person *guest = party->guest(ii);
-
- //! [query rsvp]
- QDate rsvpDate;
- QObject *attached = qmlAttachedPropertiesObject<BirthdayParty>(guest, false);
-
- if (attached)
- rsvpDate = attached->property("rsvp").toDate();
- //! [query rsvp]
- if (rsvpDate.isNull())
- qInfo() << " " << guest->name() << "RSVP date: Hasn't RSVP'd";
- else
- qInfo() << " " << guest->name() << "RSVP date:" << rsvpDate.toString();
- }
-
- return EXIT_SUCCESS;
- }
-
- qWarning() << component.errors();
- return EXIT_FAILURE;
-}
diff --git a/examples/qml/referenceexamples/attached/person.cpp b/examples/qml/referenceexamples/attached/person.cpp
deleted file mode 100644
index 358fbf0ed8..0000000000
--- a/examples/qml/referenceexamples/attached/person.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "person.h"
-
-int ShoeDescription::size() const
-{
- return m_size;
-}
-
-void ShoeDescription::setSize(int s)
-{
- m_size = s;
-}
-
-QColor ShoeDescription::color() const
-{
- return m_color;
-}
-
-void ShoeDescription::setColor(const QColor &c)
-{
- m_color = c;
-}
-
-QString ShoeDescription::brand() const
-{
- return m_brand;
-}
-
-void ShoeDescription::setBrand(const QString &b)
-{
- m_brand = b;
-}
-
-qreal ShoeDescription::price() const
-{
- return m_price;
-}
-
-void ShoeDescription::setPrice(qreal p)
-{
- m_price = p;
-}
-
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- m_name = n;
-}
-
-ShoeDescription *Person::shoe()
-{
- return &m_shoe;
-}
diff --git a/examples/qml/referenceexamples/attached/person.h b/examples/qml/referenceexamples/attached/person.h
deleted file mode 100644
index 9c617ee9ab..0000000000
--- a/examples/qml/referenceexamples/attached/person.h
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef PERSON_H
-#define PERSON_H
-
-#include <QObject>
-#include <QColor>
-#include <QtQml/qqml.h>
-
-class ShoeDescription : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(int size READ size WRITE setSize)
- Q_PROPERTY(QColor color READ color WRITE setColor)
- Q_PROPERTY(QString brand READ brand WRITE setBrand)
- Q_PROPERTY(qreal price READ price WRITE setPrice)
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- int size() const;
- void setSize(int);
-
- QColor color() const;
- void setColor(const QColor &);
-
- QString brand() const;
- void setBrand(const QString &);
-
- qreal price() const;
- void setPrice(qreal);
-
-private:
- int m_size = 0;
- QColor m_color;
- QString m_brand;
- qreal m_price = 0;
-};
-
-class Person : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(ShoeDescription *shoe READ shoe)
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- QString name() const;
- void setName(const QString &);
-
- ShoeDescription *shoe();
-private:
- QString m_name;
- ShoeDescription m_shoe;
-};
-
-class Boy : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/binding/CMakeLists.txt b/examples/qml/referenceexamples/binding/CMakeLists.txt
deleted file mode 100644
index 83ad8001e8..0000000000
--- a/examples/qml/referenceexamples/binding/CMakeLists.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(binding LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/binding")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml)
-
-qt_add_executable(binding
- birthdayparty.cpp birthdayparty.h
- happybirthdaysong.cpp happybirthdaysong.h
- main.cpp
- person.cpp person.h
-)
-
-set_target_properties(binding PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(binding PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
-)
-
-qt_add_qml_module(binding
- URI People
- QML_FILES example.qml
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS binding
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/referenceexamples/binding/binding.pro b/examples/qml/referenceexamples/binding/binding.pro
deleted file mode 100644
index dce780d0a2..0000000000
--- a/examples/qml/referenceexamples/binding/binding.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-QT += qml
-
-CONFIG += qmltypes
-QML_IMPORT_NAME = People
-QML_IMPORT_MAJOR_VERSION = 1
-
-SOURCES += main.cpp \
- person.cpp \
- birthdayparty.cpp \
- happybirthdaysong.cpp
-HEADERS += person.h \
- birthdayparty.h \
- happybirthdaysong.h
-RESOURCES += binding.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/referenceexamples/binding
-INSTALLS += target
diff --git a/examples/qml/referenceexamples/binding/binding.qrc b/examples/qml/referenceexamples/binding/binding.qrc
deleted file mode 100644
index e2fa01d5e7..0000000000
--- a/examples/qml/referenceexamples/binding/binding.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
- <file>example.qml</file>
-</qresource>
-</RCC>
diff --git a/examples/qml/referenceexamples/binding/birthdayparty.cpp b/examples/qml/referenceexamples/binding/birthdayparty.cpp
deleted file mode 100644
index a98b5fbdfb..0000000000
--- a/examples/qml/referenceexamples/binding/birthdayparty.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "birthdayparty.h"
-
-QDate BirthdayPartyAttached::rsvp() const
-{
- return m_rsvp;
-}
-
-void BirthdayPartyAttached::setRsvp(QDate d)
-{
- if (d != m_rsvp) {
- m_rsvp = d;
- emit rsvpChanged();
- }
-}
-
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- if (c == m_host) return;
- m_host = c;
- emit hostChanged();
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return QQmlListProperty<Person>(this, &m_guests);
-}
-
-qsizetype BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(qsizetype index) const
-{
- return m_guests.at(index);
-}
-
-void BirthdayParty::startParty()
-{
- QTime time = QTime::currentTime();
- emit partyStarted(time);
-}
-
-QString BirthdayParty::announcement() const
-{
- return QString();
-}
-
-void BirthdayParty::setAnnouncement(const QString &speak)
-{
- qWarning().noquote() << speak;
-}
-
-BirthdayPartyAttached *BirthdayParty::qmlAttachedProperties(QObject *object)
-{
- return new BirthdayPartyAttached(object);
-}
-
diff --git a/examples/qml/referenceexamples/binding/birthdayparty.h b/examples/qml/referenceexamples/binding/birthdayparty.h
deleted file mode 100644
index 3b4c92cae3..0000000000
--- a/examples/qml/referenceexamples/binding/birthdayparty.h
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef BIRTHDAYPARTY_H
-#define BIRTHDAYPARTY_H
-
-#include <QObject>
-#include <QDate>
-#include <QDebug>
-#include <qqml.h>
-#include "person.h"
-
-class BirthdayPartyAttached : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp NOTIFY rsvpChanged)
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- QDate rsvp() const;
- void setRsvp(QDate);
-
-signals:
- void rsvpChanged();
-
-private:
- QDate m_rsvp;
-};
-
-class BirthdayParty : public QObject
-{
- Q_OBJECT
-// ![0]
- Q_PROPERTY(Person *host READ host WRITE setHost NOTIFY hostChanged)
-// ![0]
- Q_PROPERTY(QQmlListProperty<Person> guests READ guests)
- Q_PROPERTY(QString announcement READ announcement WRITE setAnnouncement)
- Q_CLASSINFO("DefaultProperty", "guests")
- QML_ELEMENT
- QML_ATTACHED(BirthdayPartyAttached)
-public:
- using QObject::QObject;
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- qsizetype guestCount() const;
- Person *guest(qsizetype) const;
-
- QString announcement() const;
- void setAnnouncement(const QString &);
-
- static BirthdayPartyAttached *qmlAttachedProperties(QObject *);
-
- void startParty();
-signals:
- void partyStarted(QTime time);
- void hostChanged();
-
-private:
- Person *m_host = nullptr;
- QList<Person *> m_guests;
-};
-
-#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/referenceexamples/binding/example.qml b/examples/qml/referenceexamples/binding/example.qml
deleted file mode 100644
index 262d667903..0000000000
--- a/examples/qml/referenceexamples/binding/example.qml
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import People
-import QtQuick // For QColor
-
-// ![0]
-BirthdayParty {
- id: theParty
-
- HappyBirthdaySong on announcement { name: theParty.host.name }
-
- host: Boy {
- name: "Bob Jones"
- shoe { size: 12; color: "white"; brand: "Nike"; price: 90.0 }
- }
-// ![0]
- onPartyStarted: (time) => { console.log("This party started rockin' at " + time); }
-
-
- Boy {
- name: "Leo Hodges"
- BirthdayParty.rsvp: "2009-07-06"
- shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
- }
- Boy {
- name: "Jack Smith"
- shoe { size: 8; color: "blue"; brand: "Puma"; price: 19.95 }
- }
- Girl {
- name: "Anne Brown"
- BirthdayParty.rsvp: "2009-07-01"
- shoe.size: 7
- shoe.color: "red"
- shoe.brand: "Marc Jacobs"
- shoe.price: 699.99
- }
-
-// ![1]
-}
-// ![1]
diff --git a/examples/qml/referenceexamples/binding/happybirthdaysong.cpp b/examples/qml/referenceexamples/binding/happybirthdaysong.cpp
deleted file mode 100644
index cf71a7f213..0000000000
--- a/examples/qml/referenceexamples/binding/happybirthdaysong.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include "happybirthdaysong.h"
-#include <QTimer>
-
-HappyBirthdaySong::HappyBirthdaySong(QObject *parent) :
- QObject(parent)
-{
- auto *timer = new QTimer(this);
- QObject::connect(timer, &QTimer::timeout, this, &HappyBirthdaySong::advance);
- timer->start(1000);
-}
-
-void HappyBirthdaySong::setTarget(const QQmlProperty &p)
-{
- m_target = p;
-}
-
-QString HappyBirthdaySong::name() const
-{
- return m_name;
-}
-
-void HappyBirthdaySong::setName(const QString &name)
-{
- if (m_name == name)
- return;
-
- m_name = name;
-
- m_lyrics.clear();
- m_lyrics << "Happy birthday to you,";
- m_lyrics << "Happy birthday to you,";
- m_lyrics << "Happy birthday dear " + m_name + ",";
- m_lyrics << "Happy birthday to you!";
- m_lyrics << "";
-
- emit nameChanged();
-}
-
-void HappyBirthdaySong::advance()
-{
- m_line = (m_line + 1) % m_lyrics.count();
-
- m_target.write(m_lyrics.at(m_line));
-}
-
diff --git a/examples/qml/referenceexamples/binding/happybirthdaysong.h b/examples/qml/referenceexamples/binding/happybirthdaysong.h
deleted file mode 100644
index 8705abfa83..0000000000
--- a/examples/qml/referenceexamples/binding/happybirthdaysong.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#ifndef HAPPYBIRTHDAYSONG_H
-#define HAPPYBIRTHDAYSONG_H
-
-#include <QQmlPropertyValueSource>
-#include <QQmlProperty>
-#include <qqml.h>
-
-#include <QStringList>
-#include <qqml.h>
-
-class HappyBirthdaySong : public QObject, public QQmlPropertyValueSource
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
- Q_INTERFACES(QQmlPropertyValueSource)
- QML_ELEMENT
-public:
- explicit HappyBirthdaySong(QObject *parent = nullptr);
-
- void setTarget(const QQmlProperty &) override;
-
- QString name() const;
- void setName(const QString &);
-
-private slots:
- void advance();
-
-signals:
- void nameChanged();
-private:
- qsizetype m_line = -1;
- QStringList m_lyrics;
- QQmlProperty m_target;
- QString m_name;
-};
-
-#endif // HAPPYBIRTHDAYSONG_H
-
diff --git a/examples/qml/referenceexamples/binding/main.cpp b/examples/qml/referenceexamples/binding/main.cpp
deleted file mode 100644
index 716deeccda..0000000000
--- a/examples/qml/referenceexamples/binding/main.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include <QCoreApplication>
-#include <QQmlEngine>
-#include <QQmlComponent>
-#include <QDebug>
-#include "birthdayparty.h"
-#include "happybirthdaysong.h"
-#include "person.h"
-
-int main(int argc, char ** argv)
-{
- QCoreApplication app(argc, argv);
-
- QQmlEngine engine;
- QQmlComponent component(&engine, QUrl("qrc:example.qml"));
- auto *party = qobject_cast<BirthdayParty *>(component.create());
-
- if (party && party->host()) {
- qInfo() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qInfo() << "He is inviting:";
- else
- qInfo() << "She is inviting:";
-
- for (qsizetype ii = 0; ii < party->guestCount(); ++ii) {
- Person *guest = party->guest(ii);
-
- QDate rsvpDate;
- QObject *attached =
- qmlAttachedPropertiesObject<BirthdayParty>(guest, false);
- if (attached)
- rsvpDate = attached->property("rsvp").toDate();
-
- if (rsvpDate.isNull())
- qInfo() << " " << guest->name() << "RSVP date: Hasn't RSVP'd";
- else
- qInfo() << " " << guest->name() << "RSVP date:" << rsvpDate.toString();
- }
-
- party->startParty();
- return QCoreApplication::exec();
- }
-
- qWarning() << component.errors();
- return EXIT_FAILURE;
-}
diff --git a/examples/qml/referenceexamples/binding/person.cpp b/examples/qml/referenceexamples/binding/person.cpp
deleted file mode 100644
index a4c26679d6..0000000000
--- a/examples/qml/referenceexamples/binding/person.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "person.h"
-
-int ShoeDescription::size() const
-{
- return m_size;
-}
-
-void ShoeDescription::setSize(int s)
-{
- if (m_size == s)
- return;
-
- m_size = s;
- emit shoeChanged();
-}
-
-QColor ShoeDescription::color() const
-{
- return m_color;
-}
-
-void ShoeDescription::setColor(const QColor &c)
-{
- if (m_color == c)
- return;
-
- m_color = c;
- emit shoeChanged();
-}
-
-QString ShoeDescription::brand() const
-{
- return m_brand;
-}
-
-void ShoeDescription::setBrand(const QString &b)
-{
- if (m_brand == b)
- return;
-
- m_brand = b;
- emit shoeChanged();
-}
-
-qreal ShoeDescription::price() const
-{
- return m_price;
-}
-
-void ShoeDescription::setPrice(qreal p)
-{
- if (m_price == p)
- return;
-
- m_price = p;
- emit shoeChanged();
-}
-
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- if (m_name == n)
- return;
-
- m_name = n;
- emit nameChanged();
-}
-
-ShoeDescription *Person::shoe()
-{
- return &m_shoe;
-}
diff --git a/examples/qml/referenceexamples/binding/person.h b/examples/qml/referenceexamples/binding/person.h
deleted file mode 100644
index 8314348bdf..0000000000
--- a/examples/qml/referenceexamples/binding/person.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef PERSON_H
-#define PERSON_H
-
-#include <QObject>
-#include <QColor>
-#include <QtQml/qqml.h>
-
-class ShoeDescription : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(int size READ size WRITE setSize NOTIFY shoeChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY shoeChanged)
- Q_PROPERTY(QString brand READ brand WRITE setBrand NOTIFY shoeChanged)
- Q_PROPERTY(qreal price READ price WRITE setPrice NOTIFY shoeChanged)
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- int size() const;
- void setSize(int);
-
- QColor color() const;
- void setColor(const QColor &);
-
- QString brand() const;
- void setBrand(const QString &);
-
- qreal price() const;
- void setPrice(qreal);
-
-signals:
- void shoeChanged();
-
-private:
- int m_size = 0;
- QColor m_color;
- QString m_brand;
- qreal m_price = 0;
-};
-
-class Person : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
-// ![0]
- Q_PROPERTY(ShoeDescription *shoe READ shoe CONSTANT)
-// ![0]
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- QString name() const;
- void setName(const QString &);
-
- ShoeDescription *shoe();
-
-signals:
- void nameChanged();
-
-private:
- QString m_name;
- ShoeDescription m_shoe;
-};
-
-class Boy : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/coercion/CMakeLists.txt b/examples/qml/referenceexamples/coercion/CMakeLists.txt
deleted file mode 100644
index 495b266f2f..0000000000
--- a/examples/qml/referenceexamples/coercion/CMakeLists.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(coercion LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/coercion")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Qml)
-
-qt_add_executable(coercion
- birthdayparty.cpp birthdayparty.h
- main.cpp
- person.cpp person.h
-)
-
-set_target_properties(coercion PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(coercion PUBLIC
- Qt::Core
- Qt::Qml
-)
-
-qt_add_qml_module(coercion
- URI People
- QML_FILES example.qml
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS coercion
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/referenceexamples/coercion/birthdayparty.cpp b/examples/qml/referenceexamples/coercion/birthdayparty.cpp
deleted file mode 100644
index 6cf8a608e7..0000000000
--- a/examples/qml/referenceexamples/coercion/birthdayparty.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "birthdayparty.h"
-
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-qsizetype BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(qsizetype index) const
-{
- return m_guests.at(index);
-}
diff --git a/examples/qml/referenceexamples/coercion/birthdayparty.h b/examples/qml/referenceexamples/coercion/birthdayparty.h
deleted file mode 100644
index 79508ff9c1..0000000000
--- a/examples/qml/referenceexamples/coercion/birthdayparty.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef BIRTHDAYPARTY_H
-#define BIRTHDAYPARTY_H
-
-#include <QObject>
-#include <QQmlListProperty>
-#include "person.h"
-
-class BirthdayParty : public QObject
-{
- Q_OBJECT
-// ![0]
- Q_PROPERTY(Person *host READ host WRITE setHost)
- Q_PROPERTY(QQmlListProperty<Person> guests READ guests)
- QML_ELEMENT
-// ![0]
-public:
- using QObject::QObject;
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- qsizetype guestCount() const;
- Person *guest(qsizetype) const;
-
-private:
- Person *m_host = nullptr;
- QList<Person *> m_guests;
-};
-
-#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/referenceexamples/coercion/coercion.pro b/examples/qml/referenceexamples/coercion/coercion.pro
deleted file mode 100644
index 225fd13e08..0000000000
--- a/examples/qml/referenceexamples/coercion/coercion.pro
+++ /dev/null
@@ -1,15 +0,0 @@
-QT = core qml
-
-CONFIG += qmltypes
-QML_IMPORT_NAME = People
-QML_IMPORT_MAJOR_VERSION = 1
-
-SOURCES += main.cpp \
- person.cpp \
- birthdayparty.cpp
-HEADERS += person.h \
- birthdayparty.h
-RESOURCES += coercion.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/referenceexamples/coercion
-INSTALLS += target
diff --git a/examples/qml/referenceexamples/coercion/coercion.qrc b/examples/qml/referenceexamples/coercion/coercion.qrc
deleted file mode 100644
index e2fa01d5e7..0000000000
--- a/examples/qml/referenceexamples/coercion/coercion.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
- <file>example.qml</file>
-</qresource>
-</RCC>
diff --git a/examples/qml/referenceexamples/coercion/example.qml b/examples/qml/referenceexamples/coercion/example.qml
deleted file mode 100644
index 99469bec57..0000000000
--- a/examples/qml/referenceexamples/coercion/example.qml
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import People
-
-// ![0]
-BirthdayParty {
- host: Boy {
- name: "Bob Jones"
- shoeSize: 12
- }
- guests: [
- Boy { name: "Leo Hodges" },
- Boy { name: "Jack Smith" },
- Girl { name: "Anne Brown" }
- ]
-}
-// ![0]
diff --git a/examples/qml/referenceexamples/coercion/main.cpp b/examples/qml/referenceexamples/coercion/main.cpp
deleted file mode 100644
index 5bcd9681e3..0000000000
--- a/examples/qml/referenceexamples/coercion/main.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include <QCoreApplication>
-#include <QQmlEngine>
-#include <QQmlComponent>
-#include <QDebug>
-#include "birthdayparty.h"
-#include "person.h"
-
-int main(int argc, char ** argv)
-{
- QCoreApplication app(argc, argv);
-
- QQmlEngine engine;
- QQmlComponent component(&engine, QUrl("qrc:example.qml"));
- auto *party = qobject_cast<BirthdayParty *>(component.create());
-
- if (party && party->host()) {
- qInfo() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qInfo() << "He is inviting:";
- else
- qInfo() << "She is inviting:";
-
- for (qsizetype ii = 0; ii < party->guestCount(); ++ii)
- qInfo() << " " << party->guest(ii)->name();
-
- return EXIT_SUCCESS;
- }
-
- qWarning() << component.errors();
- return EXIT_FAILURE;
-}
diff --git a/examples/qml/referenceexamples/coercion/person.cpp b/examples/qml/referenceexamples/coercion/person.cpp
deleted file mode 100644
index ab7aefcbee..0000000000
--- a/examples/qml/referenceexamples/coercion/person.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "person.h"
-
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- m_name = n;
-}
-
-int Person::shoeSize() const
-{
- return m_shoeSize;
-}
-
-void Person::setShoeSize(int s)
-{
- m_shoeSize = s;
-}
diff --git a/examples/qml/referenceexamples/coercion/person.h b/examples/qml/referenceexamples/coercion/person.h
deleted file mode 100644
index ea9ff970b4..0000000000
--- a/examples/qml/referenceexamples/coercion/person.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef PERSON_H
-#define PERSON_H
-
-#include <QObject>
-#include <QtQml/qqml.h>
-
-class Person : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
- //![0]
- QML_ELEMENT
- QML_UNCREATABLE("Person is an abstract base class.")
- //![0]
-public:
- using QObject::QObject;
-
- QString name() const;
- void setName(const QString &);
-
- int shoeSize() const;
- void setShoeSize(int);
-
-private:
- QString m_name;
- int m_shoeSize = 0;
-};
-
-// ![1]
-class Boy : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-
-//! [girl class]
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-//! [girl class]
-
-// ![1]
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/default/CMakeLists.txt b/examples/qml/referenceexamples/default/CMakeLists.txt
deleted file mode 100644
index 681085f386..0000000000
--- a/examples/qml/referenceexamples/default/CMakeLists.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(default LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/default")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Qml)
-
-qt_add_executable(default
- birthdayparty.cpp birthdayparty.h
- main.cpp
- person.cpp person.h
-)
-
-set_target_properties(default PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(default PUBLIC
- Qt::Core
- Qt::Qml
-)
-
-qt_add_qml_module(default
- URI People
- QML_FILES example.qml
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS default
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/referenceexamples/default/birthdayparty.cpp b/examples/qml/referenceexamples/default/birthdayparty.cpp
deleted file mode 100644
index 5a9f38d9f3..0000000000
--- a/examples/qml/referenceexamples/default/birthdayparty.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "birthdayparty.h"
-
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-qsizetype BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(qsizetype index) const
-{
- return m_guests.at(index);
-}
-
diff --git a/examples/qml/referenceexamples/default/birthdayparty.h b/examples/qml/referenceexamples/default/birthdayparty.h
deleted file mode 100644
index ce5106ef99..0000000000
--- a/examples/qml/referenceexamples/default/birthdayparty.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef BIRTHDAYPARTY_H
-#define BIRTHDAYPARTY_H
-
-#include <QObject>
-#include <QQmlListProperty>
-#include "person.h"
-
-// ![0]
-class BirthdayParty : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(Person *host READ host WRITE setHost)
- Q_PROPERTY(QQmlListProperty<Person> guests READ guests)
- Q_CLASSINFO("DefaultProperty", "guests")
- QML_ELEMENT
-public:
- using QObject::QObject;
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- qsizetype guestCount() const;
- Person *guest(qsizetype) const;
-
-private:
- Person *m_host = nullptr;
- QList<Person *> m_guests;
-};
-// ![0]
-
-#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/referenceexamples/default/default.pro b/examples/qml/referenceexamples/default/default.pro
deleted file mode 100644
index f52f749ddd..0000000000
--- a/examples/qml/referenceexamples/default/default.pro
+++ /dev/null
@@ -1,15 +0,0 @@
-QT = core qml
-
-CONFIG += qmltypes
-QML_IMPORT_NAME = People
-QML_IMPORT_MAJOR_VERSION = 1
-
-SOURCES += main.cpp \
- person.cpp \
- birthdayparty.cpp
-HEADERS += person.h \
- birthdayparty.h
-RESOURCES += default.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/referenceexamples/default
-INSTALLS += target
diff --git a/examples/qml/referenceexamples/default/default.qrc b/examples/qml/referenceexamples/default/default.qrc
deleted file mode 100644
index e2fa01d5e7..0000000000
--- a/examples/qml/referenceexamples/default/default.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
- <file>example.qml</file>
-</qresource>
-</RCC>
diff --git a/examples/qml/referenceexamples/default/example.qml b/examples/qml/referenceexamples/default/example.qml
deleted file mode 100644
index addc74dfb5..0000000000
--- a/examples/qml/referenceexamples/default/example.qml
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import People
-
-// ![0]
-BirthdayParty {
- host: Boy {
- name: "Bob Jones"
- shoeSize: 12
- }
-
- Boy { name: "Leo Hodges" }
- Boy { name: "Jack Smith" }
- Girl { name: "Anne Brown" }
-}
-// ![0]
diff --git a/examples/qml/referenceexamples/default/main.cpp b/examples/qml/referenceexamples/default/main.cpp
deleted file mode 100644
index 5e7e711ada..0000000000
--- a/examples/qml/referenceexamples/default/main.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include <QCoreApplication>
-#include <QQmlEngine>
-#include <QQmlComponent>
-#include <QDebug>
-#include "birthdayparty.h"
-#include "person.h"
-
-int main(int argc, char ** argv)
-{
- QCoreApplication app(argc, argv);
-
- QQmlEngine engine;
- QQmlComponent component(&engine, QUrl("qrc:example.qml"));
- auto *party = qobject_cast<BirthdayParty *>(component.create());
-
- if (party && party->host()) {
- qInfo() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qInfo() << "He is inviting:";
- else
- qInfo() << "She is inviting:";
-
- for (qsizetype ii = 0; ii < party->guestCount(); ++ii)
- qInfo() << " " << party->guest(ii)->name();
-
- return EXIT_SUCCESS;
- }
-
- qWarning() << component.errors();
- return EXIT_FAILURE;
-}
diff --git a/examples/qml/referenceexamples/default/person.cpp b/examples/qml/referenceexamples/default/person.cpp
deleted file mode 100644
index ab7aefcbee..0000000000
--- a/examples/qml/referenceexamples/default/person.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "person.h"
-
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- m_name = n;
-}
-
-int Person::shoeSize() const
-{
- return m_shoeSize;
-}
-
-void Person::setShoeSize(int s)
-{
- m_shoeSize = s;
-}
diff --git a/examples/qml/referenceexamples/default/person.h b/examples/qml/referenceexamples/default/person.h
deleted file mode 100644
index 04ab53696d..0000000000
--- a/examples/qml/referenceexamples/default/person.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef PERSON_H
-#define PERSON_H
-
-#include <QObject>
-#include <QtQml/qqml.h>
-
-class Person : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- QString name() const;
- void setName(const QString &);
-
- int shoeSize() const;
- void setShoeSize(int);
-private:
- QString m_name;
- int m_shoeSize = 0;
-};
-
-class Boy : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/extended/CMakeLists.txt b/examples/qml/referenceexamples/extended/CMakeLists.txt
deleted file mode 100644
index 6ecff60d0c..0000000000
--- a/examples/qml/referenceexamples/extended/CMakeLists.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(extended LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/extended")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Widgets)
-
-qt_add_executable(extended
- lineedit.cpp lineedit.h
- main.cpp
-)
-
-set_target_properties(extended PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(extended PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Widgets
-)
-
-qt_add_qml_module(extended
- URI People
- QML_FILES example.qml
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS extended
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/referenceexamples/extended/example.qml b/examples/qml/referenceexamples/extended/example.qml
deleted file mode 100644
index 8a0b3193d8..0000000000
--- a/examples/qml/referenceexamples/extended/example.qml
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import People
-
-// ![0]
-QLineEdit {
- leftMargin: 20
-}
-// ![0]
diff --git a/examples/qml/referenceexamples/extended/extended.pro b/examples/qml/referenceexamples/extended/extended.pro
deleted file mode 100644
index 094e5201ca..0000000000
--- a/examples/qml/referenceexamples/extended/extended.pro
+++ /dev/null
@@ -1,13 +0,0 @@
-QT += qml widgets
-
-CONFIG += qmltypes
-QML_IMPORT_NAME = People
-QML_IMPORT_MAJOR_VERSION = 1
-
-SOURCES += main.cpp \
- lineedit.cpp
-HEADERS += lineedit.h
-RESOURCES += extended.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/referenceexamples/extended
-INSTALLS += target
diff --git a/examples/qml/referenceexamples/extended/extended.qrc b/examples/qml/referenceexamples/extended/extended.qrc
deleted file mode 100644
index e2fa01d5e7..0000000000
--- a/examples/qml/referenceexamples/extended/extended.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
- <file>example.qml</file>
-</qresource>
-</RCC>
diff --git a/examples/qml/referenceexamples/extended/lineedit.cpp b/examples/qml/referenceexamples/extended/lineedit.cpp
deleted file mode 100644
index 802f47ef03..0000000000
--- a/examples/qml/referenceexamples/extended/lineedit.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include "lineedit.h"
-#include <qqml.h>
-
-LineEditExtension::LineEditExtension(QObject *object)
-: QObject(object), m_lineedit(qobject_cast<QLineEdit *>(object))
-{
-}
-
-int LineEditExtension::leftMargin() const
-{
- return m_lineedit->textMargins().left();
-}
-
-void LineEditExtension::setLeftMargin(int l)
-{
- QMargins m = m_lineedit->textMargins();
- if (m.left() != l) {
- m.setLeft(l);
- m_lineedit->setTextMargins(m);
- emit marginsChanged();
- }
-}
-
-int LineEditExtension::rightMargin() const
-{
- return m_lineedit->textMargins().right();
-}
-
-void LineEditExtension::setRightMargin(int r)
-{
- QMargins m = m_lineedit->textMargins();
- if (m.right() != r) {
- m.setRight(r);
- m_lineedit->setTextMargins(m);
- emit marginsChanged();
- }
-}
-
-int LineEditExtension::topMargin() const
-{
- return m_lineedit->textMargins().top();
-}
-
-void LineEditExtension::setTopMargin(int t)
-{
- QMargins m = m_lineedit->textMargins();
- if (m.top() != t) {
- m.setTop(t);
- m_lineedit->setTextMargins(m);
- emit marginsChanged();
- }
-}
-
-int LineEditExtension::bottomMargin() const
-{
- return m_lineedit->textMargins().bottom();
-}
-
-void LineEditExtension::setBottomMargin(int b)
-{
- QMargins m = m_lineedit->textMargins();
- if (m.bottom() != b) {
- m.setBottom(b);
- m_lineedit->setTextMargins(m);
- emit marginsChanged();
- }
-}
-
-
diff --git a/examples/qml/referenceexamples/extended/lineedit.h b/examples/qml/referenceexamples/extended/lineedit.h
deleted file mode 100644
index 44bb9fe72d..0000000000
--- a/examples/qml/referenceexamples/extended/lineedit.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#ifndef LINEEDIT_H
-#define LINEEDIT_H
-
-#include <QLineEdit>
-#include <qqml.h>
-
-class LineEditExtension : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(int leftMargin READ leftMargin WRITE setLeftMargin NOTIFY marginsChanged)
- Q_PROPERTY(int rightMargin READ rightMargin WRITE setRightMargin NOTIFY marginsChanged)
- Q_PROPERTY(int topMargin READ topMargin WRITE setTopMargin NOTIFY marginsChanged)
- Q_PROPERTY(int bottomMargin READ bottomMargin WRITE setBottomMargin NOTIFY marginsChanged)
-public:
- LineEditExtension(QObject *);
-
- int leftMargin() const;
- void setLeftMargin(int);
-
- int rightMargin() const;
- void setRightMargin(int);
-
- int topMargin() const;
- void setTopMargin(int);
-
- int bottomMargin() const;
- void setBottomMargin(int);
-signals:
- void marginsChanged();
-
-private:
- QLineEdit *m_lineedit;
-};
-
-// ![0]
-struct QLineEditForeign
-{
- Q_GADGET
- QML_FOREIGN(QLineEdit)
- QML_NAMED_ELEMENT(QLineEdit)
- QML_EXTENDED(LineEditExtension)
-};
-// ![0]
-
-#endif // LINEEDIT_H
diff --git a/examples/qml/referenceexamples/extended/main.cpp b/examples/qml/referenceexamples/extended/main.cpp
deleted file mode 100644
index 7861acf707..0000000000
--- a/examples/qml/referenceexamples/extended/main.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include <QApplication>
-#include <QQmlEngine>
-#include <QQmlComponent>
-#include <QDebug>
-#include <QLineEdit>
-#include "lineedit.h"
-
-int main(int argc, char ** argv)
-{
- QApplication app(argc, argv);
-
-// ![1]
- QQmlEngine engine;
- QQmlComponent component(&engine, QUrl("qrc:example.qml"));
- auto *edit = qobject_cast<QLineEdit *>(component.create());
-// ![1]
-
- if (edit) {
- edit->show();
- return QApplication::exec();
- }
-
- qWarning() << component.errors();
- return EXIT_FAILURE;
-}
diff --git a/examples/qml/referenceexamples/grouped/CMakeLists.txt b/examples/qml/referenceexamples/grouped/CMakeLists.txt
deleted file mode 100644
index b1c7587b58..0000000000
--- a/examples/qml/referenceexamples/grouped/CMakeLists.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(grouped LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/grouped")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml)
-
-qt_add_executable(grouped
- birthdayparty.cpp birthdayparty.h
- main.cpp
- person.cpp person.h
-)
-
-set_target_properties(grouped PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(grouped PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
-)
-
-qt_add_qml_module(grouped
- URI People
- QML_FILES example.qml
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS grouped
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/referenceexamples/grouped/birthdayparty.cpp b/examples/qml/referenceexamples/grouped/birthdayparty.cpp
deleted file mode 100644
index 6cf8a608e7..0000000000
--- a/examples/qml/referenceexamples/grouped/birthdayparty.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "birthdayparty.h"
-
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-qsizetype BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(qsizetype index) const
-{
- return m_guests.at(index);
-}
diff --git a/examples/qml/referenceexamples/grouped/birthdayparty.h b/examples/qml/referenceexamples/grouped/birthdayparty.h
deleted file mode 100644
index 7f011ca95f..0000000000
--- a/examples/qml/referenceexamples/grouped/birthdayparty.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef BIRTHDAYPARTY_H
-#define BIRTHDAYPARTY_H
-
-#include <QObject>
-#include <QQmlListProperty>
-#include "person.h"
-
-class BirthdayParty : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(Person *host READ host WRITE setHost)
- Q_PROPERTY(QQmlListProperty<Person> guests READ guests)
- Q_CLASSINFO("DefaultProperty", "guests")
- QML_ELEMENT
-public:
- using QObject::QObject;
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- qsizetype guestCount() const;
- Person *guest(qsizetype) const;
-
-private:
- Person *m_host;
- QList<Person *> m_guests;
-};
-
-
-#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/referenceexamples/grouped/example.qml b/examples/qml/referenceexamples/grouped/example.qml
deleted file mode 100644
index 31d122e647..0000000000
--- a/examples/qml/referenceexamples/grouped/example.qml
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import People
-import QtQuick // For QColor
-
-// ![0]
-BirthdayParty {
- host: Boy {
- name: "Bob Jones"
- shoe { size: 12; color: "white"; brand: "Bikey"; price: 90.0 }
- }
-
- Boy {
- name: "Leo Hodges"
-//![grouped]
- shoe { size: 10; color: "black"; brand: "Thebok"; price: 59.95 }
-//![grouped]
- }
- // ![1]
- Boy {
- name: "Jack Smith"
- shoe {
- size: 8
- color: "blue"
- brand: "Luma"
- price: 19.95
- }
- }
- // ![1]
- Girl {
- name: "Anne Brown"
-//![ungrouped]
- shoe.size: 7
- shoe.color: "red"
- shoe.brand: "Job Macobs"
- shoe.price: 699.99
-//![ungrouped]
- }
-}
-// ![0]
diff --git a/examples/qml/referenceexamples/grouped/grouped.pro b/examples/qml/referenceexamples/grouped/grouped.pro
deleted file mode 100644
index 1513ac552d..0000000000
--- a/examples/qml/referenceexamples/grouped/grouped.pro
+++ /dev/null
@@ -1,15 +0,0 @@
-QT += qml
-
-CONFIG += qmltypes
-QML_IMPORT_NAME = People
-QML_IMPORT_MAJOR_VERSION = 1
-
-SOURCES += main.cpp \
- person.cpp \
- birthdayparty.cpp
-HEADERS += person.h \
- birthdayparty.h
-RESOURCES += grouped.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/referenceexamples/grouped
-INSTALLS += target
diff --git a/examples/qml/referenceexamples/grouped/grouped.qrc b/examples/qml/referenceexamples/grouped/grouped.qrc
deleted file mode 100644
index e2fa01d5e7..0000000000
--- a/examples/qml/referenceexamples/grouped/grouped.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
- <file>example.qml</file>
-</qresource>
-</RCC>
diff --git a/examples/qml/referenceexamples/grouped/main.cpp b/examples/qml/referenceexamples/grouped/main.cpp
deleted file mode 100644
index 16f17262a2..0000000000
--- a/examples/qml/referenceexamples/grouped/main.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include <QCoreApplication>
-#include <QQmlEngine>
-#include <QQmlComponent>
-#include <QDebug>
-#include "birthdayparty.h"
-#include "person.h"
-
-int main(int argc, char ** argv)
-{
- QCoreApplication app(argc, argv);
-
- QQmlEngine engine;
- QQmlComponent component(&engine, QUrl("qrc:example.qml"));
- auto *party = qobject_cast<BirthdayParty *>(component.create());
-
- if (party && party->host()) {
- qInfo() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qInfo() << "He is inviting:";
- else
- qInfo() << "She is inviting:";
-
- Person *bestShoe = nullptr;
- for (qsizetype ii = 0; ii < party->guestCount(); ++ii) {
- Person *guest = party->guest(ii);
- qInfo() << " " << guest->name();
-
- if (!bestShoe || bestShoe->shoe()->price() < guest->shoe()->price())
- bestShoe = guest;
- }
- if (bestShoe)
- qInfo() << bestShoe->name() << "is wearing the best shoes!";
-
- return EXIT_SUCCESS;
- }
-
- qWarning() << component.errors();
- return EXIT_FAILURE;
-}
diff --git a/examples/qml/referenceexamples/grouped/person.cpp b/examples/qml/referenceexamples/grouped/person.cpp
deleted file mode 100644
index 358fbf0ed8..0000000000
--- a/examples/qml/referenceexamples/grouped/person.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "person.h"
-
-int ShoeDescription::size() const
-{
- return m_size;
-}
-
-void ShoeDescription::setSize(int s)
-{
- m_size = s;
-}
-
-QColor ShoeDescription::color() const
-{
- return m_color;
-}
-
-void ShoeDescription::setColor(const QColor &c)
-{
- m_color = c;
-}
-
-QString ShoeDescription::brand() const
-{
- return m_brand;
-}
-
-void ShoeDescription::setBrand(const QString &b)
-{
- m_brand = b;
-}
-
-qreal ShoeDescription::price() const
-{
- return m_price;
-}
-
-void ShoeDescription::setPrice(qreal p)
-{
- m_price = p;
-}
-
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- m_name = n;
-}
-
-ShoeDescription *Person::shoe()
-{
- return &m_shoe;
-}
diff --git a/examples/qml/referenceexamples/grouped/person.h b/examples/qml/referenceexamples/grouped/person.h
deleted file mode 100644
index b5fa469025..0000000000
--- a/examples/qml/referenceexamples/grouped/person.h
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef PERSON_H
-#define PERSON_H
-
-#include <QObject>
-#include <QColor>
-#include <QtQml/qqml.h>
-
-class ShoeDescription : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(int size READ size WRITE setSize)
- Q_PROPERTY(QColor color READ color WRITE setColor)
- Q_PROPERTY(QString brand READ brand WRITE setBrand)
- Q_PROPERTY(qreal price READ price WRITE setPrice)
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- int size() const;
- void setSize(int);
-
- QColor color() const;
- void setColor(const QColor &);
-
- QString brand() const;
- void setBrand(const QString &);
-
- qreal price() const;
- void setPrice(qreal);
-
-private:
- int m_size = 0;
- QColor m_color;
- QString m_brand;
- qreal m_price = 0;
-};
-
-class Person : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
-// ![1]
- Q_PROPERTY(ShoeDescription *shoe READ shoe)
-// ![1]
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- QString name() const;
- void setName(const QString &);
-
- ShoeDescription *shoe();
-private:
- QString m_name;
- ShoeDescription m_shoe;
-};
-
-class Boy : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/methods/CMakeLists.txt b/examples/qml/referenceexamples/methods/CMakeLists.txt
deleted file mode 100644
index 57c0733723..0000000000
--- a/examples/qml/referenceexamples/methods/CMakeLists.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(methods LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/methods")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Qml)
-
-qt_add_executable(methods
- birthdayparty.cpp birthdayparty.h
- main.cpp
- person.cpp person.h
-)
-
-set_target_properties(methods PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(methods PUBLIC
- Qt::Core
- Qt::Qml
-)
-
-qt_add_qml_module(methods
- URI People
- QML_FILES example.qml
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS methods
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/referenceexamples/methods/birthdayparty.cpp b/examples/qml/referenceexamples/methods/birthdayparty.cpp
deleted file mode 100644
index 35ae42f779..0000000000
--- a/examples/qml/referenceexamples/methods/birthdayparty.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "birthdayparty.h"
-
-// ![0]
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-qsizetype BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(qsizetype index) const
-{
- return m_guests.at(index);
-}
-
-void BirthdayParty::invite(const QString &name)
-{
- auto *person = new Person(this);
- person->setName(name);
- m_guests.append(person);
-}
-// ![0]
-
diff --git a/examples/qml/referenceexamples/methods/birthdayparty.h b/examples/qml/referenceexamples/methods/birthdayparty.h
deleted file mode 100644
index 796464c333..0000000000
--- a/examples/qml/referenceexamples/methods/birthdayparty.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef BIRTHDAYPARTY_H
-#define BIRTHDAYPARTY_H
-
-#include <QObject>
-#include <QQmlListProperty>
-#include "person.h"
-
-class BirthdayParty : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(Person *host READ host WRITE setHost)
- Q_PROPERTY(QQmlListProperty<Person> guests READ guests)
- QML_ELEMENT
-public:
- using QObject::QObject;
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- qsizetype guestCount() const;
- Person *guest(qsizetype) const;
-
-// ![0]
- Q_INVOKABLE void invite(const QString &name);
-// ![0]
-
-private:
- Person *m_host = nullptr;
- QList<Person *> m_guests;
-};
-
-#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/referenceexamples/methods/example.qml b/examples/qml/referenceexamples/methods/example.qml
deleted file mode 100644
index 41d053edd2..0000000000
--- a/examples/qml/referenceexamples/methods/example.qml
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-// ![0]
-import QtQuick
-import People
-
-BirthdayParty {
- host: Person {
- name: "Bob Jones"
- shoeSize: 12
- }
- guests: [
- Person { name: "Leo Hodges" },
- Person { name: "Jack Smith" },
- Person { name: "Anne Brown" }
- ]
-
- Component.onCompleted: invite("William Green")
-}
-// ![0]
diff --git a/examples/qml/referenceexamples/methods/main.cpp b/examples/qml/referenceexamples/methods/main.cpp
deleted file mode 100644
index dd9b03566b..0000000000
--- a/examples/qml/referenceexamples/methods/main.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include <QCoreApplication>
-#include <QQmlEngine>
-#include <QQmlComponent>
-#include <QDebug>
-#include "birthdayparty.h"
-#include "person.h"
-
-int main(int argc, char ** argv)
-{
- QCoreApplication app(argc, argv);
-
- QQmlEngine engine;
- QQmlComponent component(&engine, QUrl("qrc:example.qml"));
- auto *party = qobject_cast<BirthdayParty *>(component.create());
-
- if (party && party->host()) {
- qInfo() << party->host()->name() << "is having a birthday!"
- << "\nThey are inviting:";
- for (qsizetype ii = 0; ii < party->guestCount(); ++ii)
- qInfo() << " " << party->guest(ii)->name();
- return EXIT_SUCCESS;
- }
-
- qWarning() << component.errors();
- return EXIT_FAILURE;
-}
diff --git a/examples/qml/referenceexamples/methods/methods.pro b/examples/qml/referenceexamples/methods/methods.pro
deleted file mode 100644
index 2a5f3cff41..0000000000
--- a/examples/qml/referenceexamples/methods/methods.pro
+++ /dev/null
@@ -1,15 +0,0 @@
-QT = core qml
-
-CONFIG += qmltypes
-QML_IMPORT_NAME = People
-QML_IMPORT_MAJOR_VERSION = 1
-
-SOURCES += main.cpp \
- person.cpp \
- birthdayparty.cpp
-HEADERS += person.h \
- birthdayparty.h
-RESOURCES += methods.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/referenceexamples/methods
-INSTALLS += target
diff --git a/examples/qml/referenceexamples/methods/methods.qrc b/examples/qml/referenceexamples/methods/methods.qrc
deleted file mode 100644
index e2fa01d5e7..0000000000
--- a/examples/qml/referenceexamples/methods/methods.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
- <file>example.qml</file>
-</qresource>
-</RCC>
diff --git a/examples/qml/referenceexamples/methods/person.cpp b/examples/qml/referenceexamples/methods/person.cpp
deleted file mode 100644
index ab7aefcbee..0000000000
--- a/examples/qml/referenceexamples/methods/person.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "person.h"
-
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- m_name = n;
-}
-
-int Person::shoeSize() const
-{
- return m_shoeSize;
-}
-
-void Person::setShoeSize(int s)
-{
- m_shoeSize = s;
-}
diff --git a/examples/qml/referenceexamples/methods/person.h b/examples/qml/referenceexamples/methods/person.h
deleted file mode 100644
index d8d4941183..0000000000
--- a/examples/qml/referenceexamples/methods/person.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef PERSON_H
-#define PERSON_H
-
-#include <QObject>
-#include <QtQml/qqml.h>
-
-class Person : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
- QML_ELEMENT
-public:
- using QObject::QObject;
-
- QString name() const;
- void setName(const QString &);
-
- int shoeSize() const;
- void setShoeSize(int);
-
-private:
- QString m_name;
- int m_shoeSize = 0;
-};
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/properties/CMakeLists.txt b/examples/qml/referenceexamples/properties/CMakeLists.txt
deleted file mode 100644
index dbe521d17d..0000000000
--- a/examples/qml/referenceexamples/properties/CMakeLists.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(properties LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/properties")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Qml)
-
-qt_add_executable(properties
- birthdayparty.cpp birthdayparty.h
- main.cpp
- person.cpp person.h
-)
-
-set_target_properties(properties PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(properties PUBLIC
- Qt::Core
- Qt::Qml
-)
-
-qt_add_qml_module(properties
- URI People
- QML_FILES example.qml
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS properties
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/referenceexamples/properties/birthdayparty.cpp b/examples/qml/referenceexamples/properties/birthdayparty.cpp
deleted file mode 100644
index 2f97634abc..0000000000
--- a/examples/qml/referenceexamples/properties/birthdayparty.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "birthdayparty.h"
-
-// ![0]
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, this,
- &BirthdayParty::appendGuest,
- &BirthdayParty::guestCount,
- &BirthdayParty::guest,
- &BirthdayParty::clearGuests,
- &BirthdayParty::replaceGuest,
- &BirthdayParty::removeLastGuest};
-}
-
-void BirthdayParty::appendGuest(Person *p)
-{
- m_guests.append(p);
-}
-
-qsizetype BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(qsizetype index) const
-{
- return m_guests.at(index);
-}
-
-void BirthdayParty::clearGuests() {
- m_guests.clear();
-}
-
-void BirthdayParty::replaceGuest(qsizetype index, Person *p)
-{
- m_guests[index] = p;
-}
-
-void BirthdayParty::removeLastGuest()
-{
- m_guests.removeLast();
-}
-
-// ![0]
-
-void BirthdayParty::appendGuest(QQmlListProperty<Person> *list, Person *p)
-{
- reinterpret_cast< BirthdayParty *>(list->data)->appendGuest(p);
-}
-
-void BirthdayParty::clearGuests(QQmlListProperty<Person>* list)
-{
- reinterpret_cast< BirthdayParty *>(list->data)->clearGuests();
-}
-
-void BirthdayParty::replaceGuest(QQmlListProperty<Person> *list, qsizetype i, Person *p)
-{
- reinterpret_cast< BirthdayParty* >(list->data)->replaceGuest(i, p);
-}
-
-void BirthdayParty::removeLastGuest(QQmlListProperty<Person> *list)
-{
- reinterpret_cast< BirthdayParty* >(list->data)->removeLastGuest();
-}
-
-Person* BirthdayParty::guest(QQmlListProperty<Person> *list, qsizetype i)
-{
- return reinterpret_cast< BirthdayParty* >(list->data)->guest(i);
-}
-
-qsizetype BirthdayParty::guestCount(QQmlListProperty<Person> *list)
-{
- return reinterpret_cast< BirthdayParty* >(list->data)->guestCount();
-}
diff --git a/examples/qml/referenceexamples/properties/birthdayparty.h b/examples/qml/referenceexamples/properties/birthdayparty.h
deleted file mode 100644
index 239626da17..0000000000
--- a/examples/qml/referenceexamples/properties/birthdayparty.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef BIRTHDAYPARTY_H
-#define BIRTHDAYPARTY_H
-
-#include <QObject>
-#include <QList>
-#include <QQmlListProperty>
-#include "person.h"
-
-// ![0]
-class BirthdayParty : public QObject
-{
- Q_OBJECT
-// ![0]
-// ![1]
- Q_PROPERTY(Person *host READ host WRITE setHost)
-// ![1]
-// ![2]
- Q_PROPERTY(QQmlListProperty<Person> guests READ guests)
-// ![2]
-// ![3]
- QML_ELEMENT
-public:
- using QObject::QObject;
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- void appendGuest(Person *);
- qsizetype guestCount() const;
- Person *guest(qsizetype) const;
- void clearGuests();
- void replaceGuest(qsizetype, Person *);
- void removeLastGuest();
-
-private:
- static void appendGuest(QQmlListProperty<Person> *, Person *);
- static qsizetype guestCount(QQmlListProperty<Person> *);
- static Person* guest(QQmlListProperty<Person> *, qsizetype);
- static void clearGuests(QQmlListProperty<Person> *);
- static void replaceGuest(QQmlListProperty<Person> *, qsizetype, Person *);
- static void removeLastGuest(QQmlListProperty<Person> *);
-
- Person *m_host = nullptr;
- QList<Person *> m_guests;
-};
-// ![3]
-
-#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/referenceexamples/properties/example.qml b/examples/qml/referenceexamples/properties/example.qml
deleted file mode 100644
index 52fb3344f0..0000000000
--- a/examples/qml/referenceexamples/properties/example.qml
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import People
-
-// ![0]
-BirthdayParty {
- host: Person {
- name: "Bob Jones"
- shoeSize: 12
- }
- guests: [
- Person { name: "Leo Hodges" },
- Person { name: "Jack Smith" },
- Person { name: "Anne Brown" }
- ]
-}
-// ![0]
diff --git a/examples/qml/referenceexamples/properties/main.cpp b/examples/qml/referenceexamples/properties/main.cpp
deleted file mode 100644
index f381686dbc..0000000000
--- a/examples/qml/referenceexamples/properties/main.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include <QCoreApplication>
-#include <QQmlEngine>
-#include <QQmlComponent>
-#include <QDebug>
-#include "birthdayparty.h"
-#include "person.h"
-
-int main(int argc, char ** argv)
-{
- QCoreApplication app(argc, argv);
-
- QQmlEngine engine;
- QQmlComponent component(&engine, QUrl("qrc:example.qml"));
- auto *party = qobject_cast<BirthdayParty *>(component.create());
-
- if (party && party->host()) {
- qInfo() << party->host()->name() << "is having a birthday!\n"
- "They are inviting:";
- for (qsizetype ii = 0; ii < party->guestCount(); ++ii)
- qInfo() << " " << party->guest(ii)->name();
- return EXIT_SUCCESS;
- }
-
- qWarning() << component.errors();
- return EXIT_FAILURE;
-}
diff --git a/examples/qml/referenceexamples/properties/person.cpp b/examples/qml/referenceexamples/properties/person.cpp
deleted file mode 100644
index ab7aefcbee..0000000000
--- a/examples/qml/referenceexamples/properties/person.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "person.h"
-
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- m_name = n;
-}
-
-int Person::shoeSize() const
-{
- return m_shoeSize;
-}
-
-void Person::setShoeSize(int s)
-{
- m_shoeSize = s;
-}
diff --git a/examples/qml/referenceexamples/properties/person.h b/examples/qml/referenceexamples/properties/person.h
deleted file mode 100644
index d8d4941183..0000000000
--- a/examples/qml/referenceexamples/properties/person.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef PERSON_H
-#define PERSON_H
-
-#include <QObject>
-#include <QtQml/qqml.h>
-
-class Person : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize)
- QML_ELEMENT
-public:
- using QObject::QObject;
-
- QString name() const;
- void setName(const QString &);
-
- int shoeSize() const;
- void setShoeSize(int);
-
-private:
- QString m_name;
- int m_shoeSize = 0;
-};
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/properties/properties.pro b/examples/qml/referenceexamples/properties/properties.pro
deleted file mode 100644
index 6697afa2c5..0000000000
--- a/examples/qml/referenceexamples/properties/properties.pro
+++ /dev/null
@@ -1,15 +0,0 @@
-QT = core qml
-
-CONFIG += qmltypes
-QML_IMPORT_NAME = People
-QML_IMPORT_MAJOR_VERSION = 1
-
-SOURCES += main.cpp \
- person.cpp \
- birthdayparty.cpp
-HEADERS += person.h \
- birthdayparty.h
-RESOURCES += properties.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/referenceexamples/properties
-INSTALLS += target
diff --git a/examples/qml/referenceexamples/properties/properties.qrc b/examples/qml/referenceexamples/properties/properties.qrc
deleted file mode 100644
index e2fa01d5e7..0000000000
--- a/examples/qml/referenceexamples/properties/properties.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
- <file>example.qml</file>
-</qresource>
-</RCC>
diff --git a/examples/qml/referenceexamples/referenceexamples.pro b/examples/qml/referenceexamples/referenceexamples.pro
deleted file mode 100644
index 3f4bbcf75d..0000000000
--- a/examples/qml/referenceexamples/referenceexamples.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-TEMPLATE = subdirs
-
-SUBDIRS += \
- adding \
- coercion \
- default \
- properties \
- methods
-
-qtHaveModule(widgets): SUBDIRS += extended
-
-qtHaveModule(quick): SUBDIRS += \
- attached \
- binding \
- grouped \
- signal \
- valuesource
diff --git a/examples/qml/referenceexamples/referenceexamples.qmlproject b/examples/qml/referenceexamples/referenceexamples.qmlproject
deleted file mode 100644
index 2bb4016996..0000000000
--- a/examples/qml/referenceexamples/referenceexamples.qmlproject
+++ /dev/null
@@ -1,14 +0,0 @@
-import QmlProject 1.0
-
-Project {
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/qml/referenceexamples/signal/CMakeLists.txt b/examples/qml/referenceexamples/signal/CMakeLists.txt
deleted file mode 100644
index ce196f3a38..0000000000
--- a/examples/qml/referenceexamples/signal/CMakeLists.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(signal LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/signal")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml)
-
-qt_add_executable(signal
- birthdayparty.cpp birthdayparty.h
- main.cpp
- person.cpp person.h
-)
-
-set_target_properties(signal PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(signal PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
-)
-
-qt_add_qml_module(signal
- URI People
- QML_FILES example.qml
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS signal
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/referenceexamples/signal/birthdayparty.cpp b/examples/qml/referenceexamples/signal/birthdayparty.cpp
deleted file mode 100644
index b2cc131597..0000000000
--- a/examples/qml/referenceexamples/signal/birthdayparty.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "birthdayparty.h"
-
-QDate BirthdayPartyAttached::rsvp() const
-{
- return m_rsvp;
-}
-
-void BirthdayPartyAttached::setRsvp(QDate d)
-{
- m_rsvp = d;
-}
-
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-qsizetype BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(qsizetype index) const
-{
- return m_guests.at(index);
-}
-
-void BirthdayParty::startParty()
-{
- QTime time = QTime::currentTime();
- emit partyStarted(time);
-}
-
-BirthdayPartyAttached *BirthdayParty::qmlAttachedProperties(QObject *object)
-{
- return new BirthdayPartyAttached(object);
-}
-
diff --git a/examples/qml/referenceexamples/signal/birthdayparty.h b/examples/qml/referenceexamples/signal/birthdayparty.h
deleted file mode 100644
index 22f3bdf9da..0000000000
--- a/examples/qml/referenceexamples/signal/birthdayparty.h
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#ifndef BIRTHDAYPARTY_H
-#define BIRTHDAYPARTY_H
-
-#include <QObject>
-#include <QDate>
-#include <qqml.h>
-#include "person.h"
-
-class BirthdayPartyAttached : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp)
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- QDate rsvp() const;
- void setRsvp(QDate);
-
-private:
- QDate m_rsvp;
-};
-
-class BirthdayParty : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(Person *host READ host WRITE setHost)
- Q_PROPERTY(QQmlListProperty<Person> guests READ guests)
- Q_CLASSINFO("DefaultProperty", "guests")
- QML_ELEMENT
- QML_ATTACHED(BirthdayPartyAttached)
-public:
- using QObject::QObject;
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- qsizetype guestCount() const;
- Person *guest(qsizetype) const;
-
- static BirthdayPartyAttached *qmlAttachedProperties(QObject *);
-
- void startParty();
-// ![0]
-signals:
- void partyStarted(QTime time);
-// ![0]
-
-private:
- Person *m_host = nullptr;
- QList<Person *> m_guests;
-};
-
-#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/referenceexamples/signal/example.qml b/examples/qml/referenceexamples/signal/example.qml
deleted file mode 100644
index c35db2fe46..0000000000
--- a/examples/qml/referenceexamples/signal/example.qml
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import People
-import QtQuick // For QColor
-
-BirthdayParty {
-// ![0]
- onPartyStarted: (time) => { console.log("This party started rockin' at " + time); }
-// ![0]
-
- host: Boy {
- name: "Bob Jones"
- shoe { size: 12; color: "white"; brand: "Nike"; price: 90.0 }
- }
-
- Boy {
- name: "Leo Hodges"
- BirthdayParty.rsvp: "2009-07-06"
- shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
- }
- Boy {
- name: "Jack Smith"
- shoe { size: 8; color: "blue"; brand: "Puma"; price: 19.95 }
- }
- Girl {
- name: "Anne Brown"
- BirthdayParty.rsvp: "2009-07-01"
- shoe.size: 7
- shoe.color: "red"
- shoe.brand: "Marc Jacobs"
- shoe.price: 699.99
- }
-// ![1]
-}
-// ![1]
diff --git a/examples/qml/referenceexamples/signal/main.cpp b/examples/qml/referenceexamples/signal/main.cpp
deleted file mode 100644
index f99ddeb6c7..0000000000
--- a/examples/qml/referenceexamples/signal/main.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include <QCoreApplication>
-#include <QQmlEngine>
-#include <QQmlComponent>
-#include <QDebug>
-#include "birthdayparty.h"
-#include "person.h"
-
-int main(int argc, char ** argv)
-{
- QCoreApplication app(argc, argv);
-
- QQmlEngine engine;
- QQmlComponent component(&engine, QUrl("qrc:example.qml"));
- auto *party = qobject_cast<BirthdayParty *>(component.create());
-
- if (party && party->host()) {
- qInfo() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qInfo() << "He is inviting:";
- else
- qInfo() << "She is inviting:";
-
- for (qsizetype ii = 0; ii < party->guestCount(); ++ii) {
- Person *guest = party->guest(ii);
-
- QDate rsvpDate;
- QObject *attached =
- qmlAttachedPropertiesObject<BirthdayParty>(guest, false);
- if (attached)
- rsvpDate = attached->property("rsvp").toDate();
-
- if (rsvpDate.isNull())
- qInfo() << " " << guest->name() << "RSVP date: Hasn't RSVP'd";
- else
- qInfo() << " " << guest->name() << "RSVP date:" << rsvpDate.toString();
- }
-
- party->startParty();
- return EXIT_SUCCESS;
- }
-
- qWarning() << component.errors();
- return EXIT_FAILURE;
-}
diff --git a/examples/qml/referenceexamples/signal/person.cpp b/examples/qml/referenceexamples/signal/person.cpp
deleted file mode 100644
index 358fbf0ed8..0000000000
--- a/examples/qml/referenceexamples/signal/person.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "person.h"
-
-int ShoeDescription::size() const
-{
- return m_size;
-}
-
-void ShoeDescription::setSize(int s)
-{
- m_size = s;
-}
-
-QColor ShoeDescription::color() const
-{
- return m_color;
-}
-
-void ShoeDescription::setColor(const QColor &c)
-{
- m_color = c;
-}
-
-QString ShoeDescription::brand() const
-{
- return m_brand;
-}
-
-void ShoeDescription::setBrand(const QString &b)
-{
- m_brand = b;
-}
-
-qreal ShoeDescription::price() const
-{
- return m_price;
-}
-
-void ShoeDescription::setPrice(qreal p)
-{
- m_price = p;
-}
-
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- m_name = n;
-}
-
-ShoeDescription *Person::shoe()
-{
- return &m_shoe;
-}
diff --git a/examples/qml/referenceexamples/signal/person.h b/examples/qml/referenceexamples/signal/person.h
deleted file mode 100644
index 9c617ee9ab..0000000000
--- a/examples/qml/referenceexamples/signal/person.h
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef PERSON_H
-#define PERSON_H
-
-#include <QObject>
-#include <QColor>
-#include <QtQml/qqml.h>
-
-class ShoeDescription : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(int size READ size WRITE setSize)
- Q_PROPERTY(QColor color READ color WRITE setColor)
- Q_PROPERTY(QString brand READ brand WRITE setBrand)
- Q_PROPERTY(qreal price READ price WRITE setPrice)
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- int size() const;
- void setSize(int);
-
- QColor color() const;
- void setColor(const QColor &);
-
- QString brand() const;
- void setBrand(const QString &);
-
- qreal price() const;
- void setPrice(qreal);
-
-private:
- int m_size = 0;
- QColor m_color;
- QString m_brand;
- qreal m_price = 0;
-};
-
-class Person : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(ShoeDescription *shoe READ shoe)
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- QString name() const;
- void setName(const QString &);
-
- ShoeDescription *shoe();
-private:
- QString m_name;
- ShoeDescription m_shoe;
-};
-
-class Boy : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/signal/signal.pro b/examples/qml/referenceexamples/signal/signal.pro
deleted file mode 100644
index 3c31234b3c..0000000000
--- a/examples/qml/referenceexamples/signal/signal.pro
+++ /dev/null
@@ -1,15 +0,0 @@
-QT += qml
-
-CONFIG += qmltypes
-QML_IMPORT_NAME = People
-QML_IMPORT_MAJOR_VERSION = 1
-
-SOURCES += main.cpp \
- person.cpp \
- birthdayparty.cpp
-HEADERS += person.h \
- birthdayparty.h
-RESOURCES += signal.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/referenceexamples/signal
-INSTALLS += target
diff --git a/examples/qml/referenceexamples/signal/signal.qrc b/examples/qml/referenceexamples/signal/signal.qrc
deleted file mode 100644
index e2fa01d5e7..0000000000
--- a/examples/qml/referenceexamples/signal/signal.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
- <file>example.qml</file>
-</qresource>
-</RCC>
diff --git a/examples/qml/referenceexamples/valuesource/CMakeLists.txt b/examples/qml/referenceexamples/valuesource/CMakeLists.txt
deleted file mode 100644
index 266bb2b754..0000000000
--- a/examples/qml/referenceexamples/valuesource/CMakeLists.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(valuesource LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/valuesource")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml)
-
-qt_add_executable(valuesource
- birthdayparty.cpp birthdayparty.h
- happybirthdaysong.cpp happybirthdaysong.h
- main.cpp
- person.cpp person.h
-)
-
-set_target_properties(valuesource PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(valuesource PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
-)
-
-qt_add_qml_module(valuesource
- URI People
- QML_FILES example.qml
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS valuesource
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/referenceexamples/valuesource/birthdayparty.cpp b/examples/qml/referenceexamples/valuesource/birthdayparty.cpp
deleted file mode 100644
index ba8b8829e7..0000000000
--- a/examples/qml/referenceexamples/valuesource/birthdayparty.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "birthdayparty.h"
-
-QDate BirthdayPartyAttached::rsvp() const
-{
- return m_rsvp;
-}
-
-void BirthdayPartyAttached::setRsvp(QDate d)
-{
- m_rsvp = d;
-}
-
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-qsizetype BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(qsizetype index) const
-{
- return m_guests.at(index);
-}
-
-void BirthdayParty::startParty()
-{
- QTime time = QTime::currentTime();
- emit partyStarted(time);
-}
-
-QString BirthdayParty::announcement() const
-{
- return QString();
-}
-
-void BirthdayParty::setAnnouncement(const QString &speak)
-{
- qInfo().noquote() << speak;
-}
-
-BirthdayPartyAttached *BirthdayParty::qmlAttachedProperties(QObject *object)
-{
- return new BirthdayPartyAttached(object);
-}
diff --git a/examples/qml/referenceexamples/valuesource/birthdayparty.h b/examples/qml/referenceexamples/valuesource/birthdayparty.h
deleted file mode 100644
index 922dac838b..0000000000
--- a/examples/qml/referenceexamples/valuesource/birthdayparty.h
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef BIRTHDAYPARTY_H
-#define BIRTHDAYPARTY_H
-
-#include <QObject>
-#include <QDate>
-#include <QDebug>
-#include <qqml.h>
-#include "person.h"
-
-class BirthdayPartyAttached : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp)
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- QDate rsvp() const;
- void setRsvp(QDate);
-
-private:
- QDate m_rsvp;
-};
-
-class BirthdayParty : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(Person *host READ host WRITE setHost)
- Q_PROPERTY(QQmlListProperty<Person> guests READ guests)
-// ![0]
- Q_PROPERTY(QString announcement READ announcement WRITE setAnnouncement)
-// ![0]
- Q_CLASSINFO("DefaultProperty", "guests")
- QML_ELEMENT
- QML_ATTACHED(BirthdayPartyAttached)
-public:
- using QObject::QObject;
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- qsizetype guestCount() const;
- Person *guest(qsizetype) const;
-
- QString announcement() const;
- void setAnnouncement(const QString &);
-
- static BirthdayPartyAttached *qmlAttachedProperties(QObject *);
-
- void startParty();
-
-signals:
- void partyStarted(QTime time);
-
-private:
- Person *m_host = nullptr;
- QList<Person *> m_guests;
-};
-
-#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/referenceexamples/valuesource/example.qml b/examples/qml/referenceexamples/valuesource/example.qml
deleted file mode 100644
index b6efe211c1..0000000000
--- a/examples/qml/referenceexamples/valuesource/example.qml
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import People
-import QtQuick // For QColor
-
-// ![0]
-BirthdayParty {
- HappyBirthdaySong on announcement { name: "Bob Jones" }
-// ![0]
-
- onPartyStarted: (time) => { console.log("This party started rockin' at " + time); }
-
-
- host: Boy {
- name: "Bob Jones"
- shoe { size: 12; color: "white"; brand: "Nike"; price: 90.0 }
- }
-
- Boy {
- name: "Leo Hodges"
- BirthdayParty.rsvp: "2009-07-06"
- shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
- }
- Boy {
- name: "Jack Smith"
- shoe { size: 8; color: "blue"; brand: "Puma"; price: 19.95 }
- }
- Girl {
- name: "Anne Brown"
- BirthdayParty.rsvp: "2009-07-01"
- shoe.size: 7
- shoe.color: "red"
- shoe.brand: "Marc Jacobs"
- shoe.price: 699.99
- }
-
-// ![1]
-}
-// ![1]
diff --git a/examples/qml/referenceexamples/valuesource/happybirthdaysong.cpp b/examples/qml/referenceexamples/valuesource/happybirthdaysong.cpp
deleted file mode 100644
index e9a8c13ae9..0000000000
--- a/examples/qml/referenceexamples/valuesource/happybirthdaysong.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "happybirthdaysong.h"
-#include <QTimer>
-
-HappyBirthdaySong::HappyBirthdaySong(QObject *parent) :
- QObject(parent)
-{
- auto *timer = new QTimer(this);
- QObject::connect(timer, &QTimer::timeout, this, &HappyBirthdaySong::advance);
- timer->start(1000);
-}
-
-void HappyBirthdaySong::setTarget(const QQmlProperty &p)
-{
- m_target = p;
-}
-
-QString HappyBirthdaySong::name() const
-{
- return m_name;
-}
-
-void HappyBirthdaySong::setName(const QString &name)
-{
- m_name = name;
-
- m_lyrics.clear();
- m_lyrics << "Happy birthday to you,";
- m_lyrics << "Happy birthday to you,";
- m_lyrics << "Happy birthday dear " + m_name + ",";
- m_lyrics << "Happy birthday to you!";
- m_lyrics << "";
-}
-
-void HappyBirthdaySong::advance()
-{
- m_line = (m_line + 1) % m_lyrics.count();
-
- m_target.write(m_lyrics.at(m_line));
-}
-
diff --git a/examples/qml/referenceexamples/valuesource/happybirthdaysong.h b/examples/qml/referenceexamples/valuesource/happybirthdaysong.h
deleted file mode 100644
index 1aad47232a..0000000000
--- a/examples/qml/referenceexamples/valuesource/happybirthdaysong.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef HAPPYBIRTHDAYSONG_H
-#define HAPPYBIRTHDAYSONG_H
-
-#include <QQmlPropertyValueSource>
-#include <QQmlProperty>
-#include <qqml.h>
-
-#include <QStringList>
-
-// ![0]
-class HappyBirthdaySong : public QObject, public QQmlPropertyValueSource
-{
- Q_OBJECT
- Q_INTERFACES(QQmlPropertyValueSource)
-// ![0]
- Q_PROPERTY(QString name READ name WRITE setName)
-// ![1]
- QML_ELEMENT
-public:
- explicit HappyBirthdaySong(QObject *parent = nullptr);
-
- void setTarget(const QQmlProperty &) override;
-// ![1]
-
- QString name() const;
- void setName(const QString &);
-
-private slots:
- void advance();
-
-private:
- qsizetype m_line = -1;
- QStringList m_lyrics;
- QQmlProperty m_target;
- QString m_name;
-// ![2]
-};
-// ![2]
-
-#endif // HAPPYBIRTHDAYSONG_H
-
diff --git a/examples/qml/referenceexamples/valuesource/main.cpp b/examples/qml/referenceexamples/valuesource/main.cpp
deleted file mode 100644
index 716deeccda..0000000000
--- a/examples/qml/referenceexamples/valuesource/main.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include <QCoreApplication>
-#include <QQmlEngine>
-#include <QQmlComponent>
-#include <QDebug>
-#include "birthdayparty.h"
-#include "happybirthdaysong.h"
-#include "person.h"
-
-int main(int argc, char ** argv)
-{
- QCoreApplication app(argc, argv);
-
- QQmlEngine engine;
- QQmlComponent component(&engine, QUrl("qrc:example.qml"));
- auto *party = qobject_cast<BirthdayParty *>(component.create());
-
- if (party && party->host()) {
- qInfo() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qInfo() << "He is inviting:";
- else
- qInfo() << "She is inviting:";
-
- for (qsizetype ii = 0; ii < party->guestCount(); ++ii) {
- Person *guest = party->guest(ii);
-
- QDate rsvpDate;
- QObject *attached =
- qmlAttachedPropertiesObject<BirthdayParty>(guest, false);
- if (attached)
- rsvpDate = attached->property("rsvp").toDate();
-
- if (rsvpDate.isNull())
- qInfo() << " " << guest->name() << "RSVP date: Hasn't RSVP'd";
- else
- qInfo() << " " << guest->name() << "RSVP date:" << rsvpDate.toString();
- }
-
- party->startParty();
- return QCoreApplication::exec();
- }
-
- qWarning() << component.errors();
- return EXIT_FAILURE;
-}
diff --git a/examples/qml/referenceexamples/valuesource/person.cpp b/examples/qml/referenceexamples/valuesource/person.cpp
deleted file mode 100644
index 358fbf0ed8..0000000000
--- a/examples/qml/referenceexamples/valuesource/person.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "person.h"
-
-int ShoeDescription::size() const
-{
- return m_size;
-}
-
-void ShoeDescription::setSize(int s)
-{
- m_size = s;
-}
-
-QColor ShoeDescription::color() const
-{
- return m_color;
-}
-
-void ShoeDescription::setColor(const QColor &c)
-{
- m_color = c;
-}
-
-QString ShoeDescription::brand() const
-{
- return m_brand;
-}
-
-void ShoeDescription::setBrand(const QString &b)
-{
- m_brand = b;
-}
-
-qreal ShoeDescription::price() const
-{
- return m_price;
-}
-
-void ShoeDescription::setPrice(qreal p)
-{
- m_price = p;
-}
-
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- m_name = n;
-}
-
-ShoeDescription *Person::shoe()
-{
- return &m_shoe;
-}
diff --git a/examples/qml/referenceexamples/valuesource/person.h b/examples/qml/referenceexamples/valuesource/person.h
deleted file mode 100644
index b5fa469025..0000000000
--- a/examples/qml/referenceexamples/valuesource/person.h
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef PERSON_H
-#define PERSON_H
-
-#include <QObject>
-#include <QColor>
-#include <QtQml/qqml.h>
-
-class ShoeDescription : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(int size READ size WRITE setSize)
- Q_PROPERTY(QColor color READ color WRITE setColor)
- Q_PROPERTY(QString brand READ brand WRITE setBrand)
- Q_PROPERTY(qreal price READ price WRITE setPrice)
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- int size() const;
- void setSize(int);
-
- QColor color() const;
- void setColor(const QColor &);
-
- QString brand() const;
- void setBrand(const QString &);
-
- qreal price() const;
- void setPrice(qreal);
-
-private:
- int m_size = 0;
- QColor m_color;
- QString m_brand;
- qreal m_price = 0;
-};
-
-class Person : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
-// ![1]
- Q_PROPERTY(ShoeDescription *shoe READ shoe)
-// ![1]
- QML_ANONYMOUS
-public:
- using QObject::QObject;
-
- QString name() const;
- void setName(const QString &);
-
- ShoeDescription *shoe();
-private:
- QString m_name;
- ShoeDescription m_shoe;
-};
-
-class Boy : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- using Person::Person;
-};
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/valuesource/valuesource.pro b/examples/qml/referenceexamples/valuesource/valuesource.pro
deleted file mode 100644
index 6d29cf1b70..0000000000
--- a/examples/qml/referenceexamples/valuesource/valuesource.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-QT += qml
-
-CONFIG += qmltypes
-QML_IMPORT_NAME = People
-QML_IMPORT_MAJOR_VERSION = 1
-
-SOURCES += main.cpp \
- person.cpp \
- birthdayparty.cpp \
- happybirthdaysong.cpp
-HEADERS += person.h \
- birthdayparty.h \
- happybirthdaysong.h
-RESOURCES += valuesource.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/referenceexamples/valuesource
-INSTALLS += target
diff --git a/examples/qml/referenceexamples/valuesource/valuesource.qrc b/examples/qml/referenceexamples/valuesource/valuesource.qrc
deleted file mode 100644
index e2fa01d5e7..0000000000
--- a/examples/qml/referenceexamples/valuesource/valuesource.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
- <file>example.qml</file>
-</qresource>
-</RCC>
diff --git a/examples/qml/shell/CMakeLists.txt b/examples/qml/shell/CMakeLists.txt
deleted file mode 100644
index b5bda8a4db..0000000000
--- a/examples/qml/shell/CMakeLists.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(shell LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/shell")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Qml)
-
-qt_add_executable(shell
- main.cpp
-)
-
-set_target_properties(shell PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(shell PUBLIC
- Qt::Core
- Qt::Qml
-)
-
-if(WIN32)
- set_target_properties(shell PROPERTIES
- WIN32_EXECUTABLE FALSE
- )
-endif()
-
-if(APPLE)
- set_target_properties(shell PROPERTIES
- MACOSX_BUNDLE FALSE
- )
-endif()
-
-install(TARGETS shell
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/shell/main.cpp b/examples/qml/shell/main.cpp
deleted file mode 100644
index 6ec72c3d05..0000000000
--- a/examples/qml/shell/main.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-
-#include <QtCore/qfile.h>
-#include <QtCore/qtextstream.h>
-#include <QtCore/qstringlist.h>
-#include <QtCore/qscopedpointer.h>
-
-#include <QtCore/QCoreApplication>
-
-#include <QtQml/qjsengine.h>
-
-#include <stdlib.h>
-
-
-class CommandInterface : public QObject
-{
- Q_OBJECT
-public:
- Q_INVOKABLE void quit() { m_wantsToQuit = true; }
- static bool wantsToQuit() { return m_wantsToQuit; }
-private:
- static bool m_wantsToQuit;
-};
-
-bool CommandInterface::m_wantsToQuit = false;
-
-
-static void interactive(QJSEngine *eng)
-{
- QTextStream qin(stdin, QFile::ReadOnly);
- const char *prompt = "qs> ";
-
- forever {
- QString line;
-
- printf("%s", prompt);
- fflush(stdout);
-
- line = qin.readLine();
- if (line.isNull())
- break;
-
- if (line.trimmed().isEmpty())
- continue;
-
- line += QLatin1Char('\n');
-
- QJSValue result = eng->evaluate(line, QLatin1String("typein"));
-
- fprintf(stderr, "%s\n", qPrintable(result.toString()));
-
- if (CommandInterface::wantsToQuit())
- break;
- }
-}
-
-int main(int argc, char *argv[])
-{
- QCoreApplication app(argc, argv);
- QScopedPointer<QJSEngine> eng(new QJSEngine());
- {
- QJSValue globalObject = eng->globalObject();
- QJSValue interface = eng->newQObject(new CommandInterface);
- globalObject.setProperty("qt", interface);
- }
-
- if (! *++argv) {
- interactive(eng.data());
- return EXIT_SUCCESS;
- }
-
- while (const char *arg = *argv++) {
- QString fileName = QString::fromLocal8Bit(arg);
-
- if (fileName == QLatin1String("-i")) {
- interactive(eng.data());
- break;
- }
-
- QString contents;
- int lineNumber = 1;
-
- if (fileName == QLatin1String("-")) {
- QTextStream stream(stdin, QFile::ReadOnly);
- contents = stream.readAll();
- } else {
- QFile file(fileName);
- if (file.open(QFile::ReadOnly)) {
- QTextStream stream(&file);
- contents = stream.readAll();
- file.close();
-
- // strip off #!/usr/bin/env qjs line
- if (contents.startsWith("#!")) {
- contents.remove(0, contents.indexOf("\n"));
- ++lineNumber;
- }
- }
- }
-
- if (contents.isEmpty())
- continue;
-
- QJSValue result = eng->evaluate(contents, fileName, lineNumber);
- if (result.isError()) {
- fprintf (stderr, " %s\n\n", qPrintable(result.toString()));
- return EXIT_FAILURE;
- }
- }
-
- return EXIT_SUCCESS;
-}
-
-#include <main.moc>
diff --git a/examples/qml/shell/shell.pro b/examples/qml/shell/shell.pro
deleted file mode 100644
index 9215108e6d..0000000000
--- a/examples/qml/shell/shell.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-QT = core qml
-
-win32: CONFIG += console
-mac:CONFIG -= app_bundle
-
-SOURCES += main.cpp
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/shell
-INSTALLS += target
diff --git a/examples/qml/tutorials/CMakeLists.txt b/examples/qml/tutorials/CMakeLists.txt
index 1a82ed75af..ecfec86a25 100644
--- a/examples/qml/tutorials/CMakeLists.txt
+++ b/examples/qml/tutorials/CMakeLists.txt
@@ -1,6 +1,6 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-if(TARGET Qt::Quick)
+if(TARGET Qt6::Quick)
add_subdirectory(extending-qml)
endif()
diff --git a/examples/qml/tutorials/extending-qml-advanced/CMakeLists.txt b/examples/qml/tutorials/extending-qml-advanced/CMakeLists.txt
new file mode 100644
index 0000000000..4b47f135a3
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/CMakeLists.txt
@@ -0,0 +1,12 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+if(NOT ANDROID)
+ qt_internal_add_example(advanced1-Base-project)
+ qt_internal_add_example(advanced2-Inheritance-and-coercion)
+ qt_internal_add_example(advanced3-Default-properties)
+endif(NOT ANDROID)
+qt_internal_add_example(advanced4-Grouped-properties)
+qt_internal_add_example(advanced5-Attached-properties)
+qt_internal_add_example(advanced6-Property-value-source)
+qt_internal_add_example(advanced7-Extension-objects)
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/CMakeLists.txt b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/CMakeLists.txt
new file mode 100644
index 0000000000..45dfbc0b12
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(baseproject LANGUAGES CXX)
+
+if (ANDROID)
+ message(FATAL_ERROR "This project cannot be built on Android.")
+endif()
+
+find_package(Qt6 REQUIRED COMPONENTS Core Qml)
+qt_standard_project_setup()
+
+qt_policy(SET QTP0001 NEW)
+
+qt_add_executable(baseproject
+ birthdayparty.cpp birthdayparty.h
+ main.cpp
+ person.cpp person.h
+)
+
+set_target_properties(baseproject PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(baseproject PUBLIC
+ Qt6::Core
+ Qt6::Qml
+)
+
+qt_add_qml_module(baseproject
+ URI People
+ QML_FILES Main.qml
+)
+
+install(TARGETS baseproject
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET baseproject
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/Main.qml b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/Main.qml
new file mode 100644
index 0000000000..c917d5b1f1
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/Main.qml
@@ -0,0 +1,16 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import People
+
+BirthdayParty {
+ host: Person {
+ name: "Bob Jones"
+ shoeSize: 12
+ }
+ guests: [
+ Person { name: "Leo Hodges" },
+ Person { name: "Jack Smith" },
+ Person { name: "Anne Brown" }
+ ]
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/baseproject.pro b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/baseproject.pro
new file mode 100644
index 0000000000..26c865fbba
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/baseproject.pro
@@ -0,0 +1,13 @@
+QT = core qml
+
+CONFIG += qmltypes
+QML_IMPORT_NAME = People
+QML_IMPORT_MAJOR_VERSION = 1
+
+SOURCES += main.cpp \
+ person.cpp \
+ birthdayparty.cpp
+HEADERS += person.h \
+ birthdayparty.h
+
+RESOURCES += baseproject.qrc
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/baseproject.qrc b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/baseproject.qrc
new file mode 100644
index 0000000000..b1eeb489e2
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/baseproject.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/qt/qml/People/">
+ <file>Main.qml</file>
+ <file alias="qmldir">qmldir.in</file>
+</qresource>
+</RCC>
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/birthdayparty.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/birthdayparty.cpp
new file mode 100644
index 0000000000..ad38f284e7
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/birthdayparty.cpp
@@ -0,0 +1,99 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+
+Person *BirthdayParty::host() const
+{
+ return m_host;
+}
+
+void BirthdayParty::setHost(Person *host)
+{
+ if (m_host != host) {
+ m_host = host;
+ emit hostChanged();
+ }
+}
+
+QQmlListProperty<Person> BirthdayParty::guests()
+{
+ return { this,
+ this,
+ &BirthdayParty::appendGuest,
+ &BirthdayParty::guestCount,
+ &BirthdayParty::guest,
+ &BirthdayParty::clearGuests,
+ &BirthdayParty::replaceGuest,
+ &BirthdayParty::removeLastGuest };
+}
+
+void BirthdayParty::appendGuest(Person *guest)
+{
+ m_guests.append(guest);
+ emit guestsChanged();
+}
+
+qsizetype BirthdayParty::guestCount() const
+{
+ return m_guests.count();
+}
+
+Person *BirthdayParty::guest(qsizetype index) const
+{
+ return m_guests.at(index);
+}
+
+void BirthdayParty::clearGuests()
+{
+ if (!m_guests.empty()) {
+ m_guests.clear();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::replaceGuest(qsizetype index, Person *guest)
+{
+ if (m_guests.size() > index) {
+ m_guests[index] = guest;
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::removeLastGuest()
+{
+ if (!m_guests.empty()) {
+ m_guests.removeLast();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::appendGuest(QQmlListProperty<Person> *list, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->appendGuest(guest);
+}
+
+void BirthdayParty::clearGuests(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->clearGuests();
+}
+
+void BirthdayParty::replaceGuest(QQmlListProperty<Person> *list, qsizetype index, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->replaceGuest(index, guest);
+}
+
+void BirthdayParty::removeLastGuest(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->removeLastGuest();
+}
+
+Person *BirthdayParty::guest(QQmlListProperty<Person> *list, qsizetype index)
+{
+ return static_cast<BirthdayParty *>(list->data)->guest(index);
+}
+
+qsizetype BirthdayParty::guestCount(QQmlListProperty<Person> *list)
+{
+ return static_cast<BirthdayParty *>(list->data)->guestCount();
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/birthdayparty.h b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/birthdayparty.h
new file mode 100644
index 0000000000..1a28ef2632
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/birthdayparty.h
@@ -0,0 +1,48 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BIRTHDAYPARTY_H
+#define BIRTHDAYPARTY_H
+
+#include "person.h"
+
+#include <QObject>
+#include <QQmlListProperty>
+
+class BirthdayParty : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(Person *host READ host WRITE setHost NOTIFY hostChanged FINAL)
+ Q_PROPERTY(QQmlListProperty<Person> guests READ guests NOTIFY guestsChanged FINAL)
+ QML_ELEMENT
+public:
+ using QObject::QObject;
+
+ Person *host() const;
+ void setHost(Person *);
+
+ QQmlListProperty<Person> guests();
+ void appendGuest(Person *);
+ qsizetype guestCount() const;
+ Person *guest(qsizetype) const;
+ void clearGuests();
+ void replaceGuest(qsizetype, Person *);
+ void removeLastGuest();
+
+signals:
+ void hostChanged();
+ void guestsChanged();
+
+private:
+ static void appendGuest(QQmlListProperty<Person> *, Person *);
+ static qsizetype guestCount(QQmlListProperty<Person> *);
+ static Person *guest(QQmlListProperty<Person> *, qsizetype);
+ static void clearGuests(QQmlListProperty<Person> *);
+ static void replaceGuest(QQmlListProperty<Person> *, qsizetype, Person *);
+ static void removeLastGuest(QQmlListProperty<Person> *);
+
+ Person *m_host = nullptr;
+ QList<Person *> m_guests;
+};
+
+#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/main.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/main.cpp
new file mode 100644
index 0000000000..eac94016d2
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/main.cpp
@@ -0,0 +1,32 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+#include "person.h"
+
+#include <QCoreApplication>
+#include <QDebug>
+#include <QQmlComponent>
+#include <QQmlEngine>
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadFromModule("People", "Main");
+ std::unique_ptr<BirthdayParty> party{ qobject_cast<BirthdayParty *>(component.create()) };
+
+ if (party && party->host()) {
+ qInfo() << party->host()->name()
+ << "is having a birthday!\n"
+ "They are inviting:";
+ for (qsizetype ii = 0; ii < party->guestCount(); ++ii)
+ qInfo() << " " << party->guest(ii)->name();
+ return EXIT_SUCCESS;
+ }
+
+ qWarning() << component.errors();
+ return EXIT_FAILURE;
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/person.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/person.cpp
new file mode 100644
index 0000000000..f8f4b1d2f4
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/person.cpp
@@ -0,0 +1,30 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "person.h"
+
+QString Person::name() const
+{
+ return m_name;
+}
+
+void Person::setName(const QString &name)
+{
+ if (m_name != name) {
+ m_name = name;
+ emit nameChanged();
+ }
+}
+
+int Person::shoeSize() const
+{
+ return m_shoeSize;
+}
+
+void Person::setShoeSize(int shoeSize)
+{
+ if (m_shoeSize != shoeSize) {
+ m_shoeSize = shoeSize;
+ emit shoeSizeChanged();
+ }
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/person.h b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/person.h
new file mode 100644
index 0000000000..ded272626a
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/person.h
@@ -0,0 +1,34 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PERSON_H
+#define PERSON_H
+
+#include <QtQml/qqml.h>
+#include <QObject>
+
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL)
+ Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize NOTIFY shoeSizeChanged FINAL)
+ QML_ELEMENT
+public:
+ using QObject::QObject;
+
+ QString name() const;
+ void setName(const QString &);
+
+ int shoeSize() const;
+ void setShoeSize(int);
+
+signals:
+ void nameChanged();
+ void shoeSizeChanged();
+
+private:
+ QString m_name;
+ int m_shoeSize = 0;
+};
+
+#endif // PERSON_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/qmldir.in b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/qmldir.in
new file mode 100644
index 0000000000..70cde3c958
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced1-Base-project/qmldir.in
@@ -0,0 +1,4 @@
+module People
+typeinfo birthdayparty.qmltypes
+prefer :/qt/qml/People/
+Main 254.0 Main.qml
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/CMakeLists.txt b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/CMakeLists.txt
new file mode 100644
index 0000000000..a2fa4812eb
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(coercion LANGUAGES CXX)
+
+if (ANDROID)
+ message(FATAL_ERROR "This project cannot be built on Android.")
+endif()
+
+find_package(Qt6 REQUIRED COMPONENTS Core Qml)
+qt_standard_project_setup()
+
+qt_policy(SET QTP0001 NEW)
+
+qt_add_executable(coercion
+ birthdayparty.cpp birthdayparty.h
+ main.cpp
+ person.cpp person.h
+)
+
+set_target_properties(coercion PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(coercion PUBLIC
+ Qt6::Core
+ Qt6::Qml
+)
+
+qt_add_qml_module(coercion
+ URI People
+ QML_FILES Main.qml
+)
+
+install(TARGETS coercion
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET coercion
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/Main.qml b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/Main.qml
new file mode 100644
index 0000000000..1c3fe141ca
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/Main.qml
@@ -0,0 +1,16 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import People
+
+BirthdayParty {
+ host: Boy {
+ name: "Bob Jones"
+ shoeSize: 12
+ }
+ guests: [
+ Boy { name: "Leo Hodges" },
+ Boy { name: "Jack Smith" },
+ Girl { name: "Anne Brown" }
+ ]
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/birthdayparty.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/birthdayparty.cpp
new file mode 100644
index 0000000000..ad38f284e7
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/birthdayparty.cpp
@@ -0,0 +1,99 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+
+Person *BirthdayParty::host() const
+{
+ return m_host;
+}
+
+void BirthdayParty::setHost(Person *host)
+{
+ if (m_host != host) {
+ m_host = host;
+ emit hostChanged();
+ }
+}
+
+QQmlListProperty<Person> BirthdayParty::guests()
+{
+ return { this,
+ this,
+ &BirthdayParty::appendGuest,
+ &BirthdayParty::guestCount,
+ &BirthdayParty::guest,
+ &BirthdayParty::clearGuests,
+ &BirthdayParty::replaceGuest,
+ &BirthdayParty::removeLastGuest };
+}
+
+void BirthdayParty::appendGuest(Person *guest)
+{
+ m_guests.append(guest);
+ emit guestsChanged();
+}
+
+qsizetype BirthdayParty::guestCount() const
+{
+ return m_guests.count();
+}
+
+Person *BirthdayParty::guest(qsizetype index) const
+{
+ return m_guests.at(index);
+}
+
+void BirthdayParty::clearGuests()
+{
+ if (!m_guests.empty()) {
+ m_guests.clear();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::replaceGuest(qsizetype index, Person *guest)
+{
+ if (m_guests.size() > index) {
+ m_guests[index] = guest;
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::removeLastGuest()
+{
+ if (!m_guests.empty()) {
+ m_guests.removeLast();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::appendGuest(QQmlListProperty<Person> *list, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->appendGuest(guest);
+}
+
+void BirthdayParty::clearGuests(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->clearGuests();
+}
+
+void BirthdayParty::replaceGuest(QQmlListProperty<Person> *list, qsizetype index, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->replaceGuest(index, guest);
+}
+
+void BirthdayParty::removeLastGuest(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->removeLastGuest();
+}
+
+Person *BirthdayParty::guest(QQmlListProperty<Person> *list, qsizetype index)
+{
+ return static_cast<BirthdayParty *>(list->data)->guest(index);
+}
+
+qsizetype BirthdayParty::guestCount(QQmlListProperty<Person> *list)
+{
+ return static_cast<BirthdayParty *>(list->data)->guestCount();
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/birthdayparty.h b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/birthdayparty.h
new file mode 100644
index 0000000000..f9a5c126e3
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/birthdayparty.h
@@ -0,0 +1,48 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BIRTHDAYPARTY_H
+#define BIRTHDAYPARTY_H
+
+#include "person.h"
+
+#include <QObject>
+#include <QQmlListProperty>
+
+class BirthdayParty : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(Person *host READ host WRITE setHost NOTIFY hostChanged FINAL)
+ Q_PROPERTY(QQmlListProperty<Person> guests READ guests NOTIFY guestsChanged FINAL)
+ QML_ELEMENT
+public:
+ using QObject::QObject;
+
+ Person *host() const;
+ void setHost(Person *);
+
+ QQmlListProperty<Person> guests();
+ void appendGuest(Person *);
+ qsizetype guestCount() const;
+ Person *guest(qsizetype) const;
+ void clearGuests();
+ void replaceGuest(qsizetype, Person *);
+ void removeLastGuest();
+
+signals:
+ void hostChanged();
+ void guestsChanged();
+
+private:
+ static void appendGuest(QQmlListProperty<Person> *list, Person *);
+ static qsizetype guestCount(QQmlListProperty<Person> *);
+ static Person *guest(QQmlListProperty<Person> *, qsizetype);
+ static void clearGuests(QQmlListProperty<Person> *);
+ static void replaceGuest(QQmlListProperty<Person> *, qsizetype, Person *);
+ static void removeLastGuest(QQmlListProperty<Person> *);
+
+ Person *m_host = nullptr;
+ QList<Person *> m_guests;
+};
+
+#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/coercion.pro b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/coercion.pro
new file mode 100644
index 0000000000..1ba8194965
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/coercion.pro
@@ -0,0 +1,12 @@
+QT = core qml
+
+CONFIG += qmltypes
+QML_IMPORT_NAME = People
+QML_IMPORT_MAJOR_VERSION = 1
+
+SOURCES += main.cpp \
+ person.cpp \
+ birthdayparty.cpp
+HEADERS += person.h \
+ birthdayparty.h
+RESOURCES += coercion.qrc
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/coercion.qrc b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/coercion.qrc
new file mode 100644
index 0000000000..b1eeb489e2
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/coercion.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/qt/qml/People/">
+ <file>Main.qml</file>
+ <file alias="qmldir">qmldir.in</file>
+</qresource>
+</RCC>
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/main.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/main.cpp
new file mode 100644
index 0000000000..fa26448f44
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/main.cpp
@@ -0,0 +1,37 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+#include "person.h"
+
+#include <QCoreApplication>
+#include <QDebug>
+#include <QQmlComponent>
+#include <QQmlEngine>
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadFromModule("People", "Main");
+ std::unique_ptr<BirthdayParty> party{ qobject_cast<BirthdayParty *>(component.create()) };
+
+ if (party && party->host()) {
+ qInfo() << party->host()->name() << "is having a birthday!";
+
+ if (qobject_cast<Boy *>(party->host()))
+ qInfo() << "He is inviting:";
+ else
+ qInfo() << "She is inviting:";
+
+ for (qsizetype ii = 0; ii < party->guestCount(); ++ii)
+ qInfo() << " " << party->guest(ii)->name();
+
+ return EXIT_SUCCESS;
+ }
+
+ qWarning() << component.errors();
+ return EXIT_FAILURE;
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/person.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/person.cpp
new file mode 100644
index 0000000000..f8f4b1d2f4
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/person.cpp
@@ -0,0 +1,30 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "person.h"
+
+QString Person::name() const
+{
+ return m_name;
+}
+
+void Person::setName(const QString &name)
+{
+ if (m_name != name) {
+ m_name = name;
+ emit nameChanged();
+ }
+}
+
+int Person::shoeSize() const
+{
+ return m_shoeSize;
+}
+
+void Person::setShoeSize(int shoeSize)
+{
+ if (m_shoeSize != shoeSize) {
+ m_shoeSize = shoeSize;
+ emit shoeSizeChanged();
+ }
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/person.h b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/person.h
new file mode 100644
index 0000000000..99fc9209ab
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/person.h
@@ -0,0 +1,51 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PERSON_H
+#define PERSON_H
+
+#include <QtQml/qqml.h>
+#include <QObject>
+
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL)
+ Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize NOTIFY shoeSizeChanged FINAL)
+ QML_ELEMENT
+ QML_UNCREATABLE("Person is an abstract base class.")
+public:
+ using QObject::QObject;
+
+ QString name() const;
+ void setName(const QString &);
+
+ int shoeSize() const;
+ void setShoeSize(int);
+
+signals:
+ void nameChanged();
+ void shoeSizeChanged();
+
+private:
+ QString m_name;
+ int m_shoeSize = 0;
+};
+
+class Boy : public Person
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ using Person::Person;
+};
+
+class Girl : public Person
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ using Person::Person;
+};
+
+#endif // PERSON_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/qmldir.in b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/qmldir.in
new file mode 100644
index 0000000000..3ccd68f7cc
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced2-Inheritance-and-coercion/qmldir.in
@@ -0,0 +1,4 @@
+module People
+typeinfo coercion.qmltypes
+prefer :/qt/qml/People/
+Main 254.0 Main.qml
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/CMakeLists.txt b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/CMakeLists.txt
new file mode 100644
index 0000000000..0682e487c8
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(default LANGUAGES CXX)
+
+if (ANDROID)
+ message(FATAL_ERROR "This project cannot be built on Android.")
+endif()
+
+find_package(Qt6 REQUIRED COMPONENTS Core Qml)
+qt_standard_project_setup()
+
+qt_policy(SET QTP0001 NEW)
+
+qt_add_executable(default
+ birthdayparty.cpp birthdayparty.h
+ main.cpp
+ person.cpp person.h
+)
+
+set_target_properties(default PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(default PUBLIC
+ Qt6::Core
+ Qt6::Qml
+)
+
+qt_add_qml_module(default
+ URI People
+ QML_FILES Main.qml
+)
+
+install(TARGETS default
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET default
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/Main.qml b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/Main.qml
new file mode 100644
index 0000000000..1070427cb0
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/Main.qml
@@ -0,0 +1,15 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import People
+
+BirthdayParty {
+ host: Boy {
+ name: "Bob Jones"
+ shoeSize: 12
+ }
+
+ Boy { name: "Leo Hodges" }
+ Boy { name: "Jack Smith" }
+ Girl { name: "Anne Brown" }
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/birthdayparty.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/birthdayparty.cpp
new file mode 100644
index 0000000000..ad38f284e7
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/birthdayparty.cpp
@@ -0,0 +1,99 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+
+Person *BirthdayParty::host() const
+{
+ return m_host;
+}
+
+void BirthdayParty::setHost(Person *host)
+{
+ if (m_host != host) {
+ m_host = host;
+ emit hostChanged();
+ }
+}
+
+QQmlListProperty<Person> BirthdayParty::guests()
+{
+ return { this,
+ this,
+ &BirthdayParty::appendGuest,
+ &BirthdayParty::guestCount,
+ &BirthdayParty::guest,
+ &BirthdayParty::clearGuests,
+ &BirthdayParty::replaceGuest,
+ &BirthdayParty::removeLastGuest };
+}
+
+void BirthdayParty::appendGuest(Person *guest)
+{
+ m_guests.append(guest);
+ emit guestsChanged();
+}
+
+qsizetype BirthdayParty::guestCount() const
+{
+ return m_guests.count();
+}
+
+Person *BirthdayParty::guest(qsizetype index) const
+{
+ return m_guests.at(index);
+}
+
+void BirthdayParty::clearGuests()
+{
+ if (!m_guests.empty()) {
+ m_guests.clear();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::replaceGuest(qsizetype index, Person *guest)
+{
+ if (m_guests.size() > index) {
+ m_guests[index] = guest;
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::removeLastGuest()
+{
+ if (!m_guests.empty()) {
+ m_guests.removeLast();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::appendGuest(QQmlListProperty<Person> *list, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->appendGuest(guest);
+}
+
+void BirthdayParty::clearGuests(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->clearGuests();
+}
+
+void BirthdayParty::replaceGuest(QQmlListProperty<Person> *list, qsizetype index, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->replaceGuest(index, guest);
+}
+
+void BirthdayParty::removeLastGuest(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->removeLastGuest();
+}
+
+Person *BirthdayParty::guest(QQmlListProperty<Person> *list, qsizetype index)
+{
+ return static_cast<BirthdayParty *>(list->data)->guest(index);
+}
+
+qsizetype BirthdayParty::guestCount(QQmlListProperty<Person> *list)
+{
+ return static_cast<BirthdayParty *>(list->data)->guestCount();
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/birthdayparty.h b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/birthdayparty.h
new file mode 100644
index 0000000000..4d7e61a487
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/birthdayparty.h
@@ -0,0 +1,49 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BIRTHDAYPARTY_H
+#define BIRTHDAYPARTY_H
+
+#include "person.h"
+
+#include <QObject>
+#include <QQmlListProperty>
+
+class BirthdayParty : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(Person *host READ host WRITE setHost NOTIFY hostChanged FINAL)
+ Q_PROPERTY(QQmlListProperty<Person> guests READ guests NOTIFY guestsChanged FINAL)
+ Q_CLASSINFO("DefaultProperty", "guests")
+ QML_ELEMENT
+public:
+ using QObject::QObject;
+
+ Person *host() const;
+ void setHost(Person *);
+
+ QQmlListProperty<Person> guests();
+ void appendGuest(Person *);
+ qsizetype guestCount() const;
+ Person *guest(qsizetype) const;
+ void clearGuests();
+ void replaceGuest(qsizetype, Person *);
+ void removeLastGuest();
+
+signals:
+ void hostChanged();
+ void guestsChanged();
+
+private:
+ static void appendGuest(QQmlListProperty<Person> *list, Person *);
+ static qsizetype guestCount(QQmlListProperty<Person> *);
+ static Person *guest(QQmlListProperty<Person> *, qsizetype);
+ static void clearGuests(QQmlListProperty<Person> *);
+ static void replaceGuest(QQmlListProperty<Person> *, qsizetype, Person *);
+ static void removeLastGuest(QQmlListProperty<Person> *);
+
+ Person *m_host = nullptr;
+ QList<Person *> m_guests;
+};
+
+#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/default.pro b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/default.pro
new file mode 100644
index 0000000000..65dd27213b
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/default.pro
@@ -0,0 +1,12 @@
+QT = core qml
+
+CONFIG += qmltypes
+QML_IMPORT_NAME = People
+QML_IMPORT_MAJOR_VERSION = 1
+
+SOURCES += main.cpp \
+ person.cpp \
+ birthdayparty.cpp
+HEADERS += person.h \
+ birthdayparty.h
+RESOURCES += default.qrc
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/default.qrc b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/default.qrc
new file mode 100644
index 0000000000..b1eeb489e2
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/default.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/qt/qml/People/">
+ <file>Main.qml</file>
+ <file alias="qmldir">qmldir.in</file>
+</qresource>
+</RCC>
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/main.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/main.cpp
new file mode 100644
index 0000000000..fa26448f44
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/main.cpp
@@ -0,0 +1,37 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+#include "person.h"
+
+#include <QCoreApplication>
+#include <QDebug>
+#include <QQmlComponent>
+#include <QQmlEngine>
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadFromModule("People", "Main");
+ std::unique_ptr<BirthdayParty> party{ qobject_cast<BirthdayParty *>(component.create()) };
+
+ if (party && party->host()) {
+ qInfo() << party->host()->name() << "is having a birthday!";
+
+ if (qobject_cast<Boy *>(party->host()))
+ qInfo() << "He is inviting:";
+ else
+ qInfo() << "She is inviting:";
+
+ for (qsizetype ii = 0; ii < party->guestCount(); ++ii)
+ qInfo() << " " << party->guest(ii)->name();
+
+ return EXIT_SUCCESS;
+ }
+
+ qWarning() << component.errors();
+ return EXIT_FAILURE;
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/person.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/person.cpp
new file mode 100644
index 0000000000..f8f4b1d2f4
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/person.cpp
@@ -0,0 +1,30 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "person.h"
+
+QString Person::name() const
+{
+ return m_name;
+}
+
+void Person::setName(const QString &name)
+{
+ if (m_name != name) {
+ m_name = name;
+ emit nameChanged();
+ }
+}
+
+int Person::shoeSize() const
+{
+ return m_shoeSize;
+}
+
+void Person::setShoeSize(int shoeSize)
+{
+ if (m_shoeSize != shoeSize) {
+ m_shoeSize = shoeSize;
+ emit shoeSizeChanged();
+ }
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/person.h b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/person.h
new file mode 100644
index 0000000000..99fc9209ab
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/person.h
@@ -0,0 +1,51 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PERSON_H
+#define PERSON_H
+
+#include <QtQml/qqml.h>
+#include <QObject>
+
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL)
+ Q_PROPERTY(int shoeSize READ shoeSize WRITE setShoeSize NOTIFY shoeSizeChanged FINAL)
+ QML_ELEMENT
+ QML_UNCREATABLE("Person is an abstract base class.")
+public:
+ using QObject::QObject;
+
+ QString name() const;
+ void setName(const QString &);
+
+ int shoeSize() const;
+ void setShoeSize(int);
+
+signals:
+ void nameChanged();
+ void shoeSizeChanged();
+
+private:
+ QString m_name;
+ int m_shoeSize = 0;
+};
+
+class Boy : public Person
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ using Person::Person;
+};
+
+class Girl : public Person
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ using Person::Person;
+};
+
+#endif // PERSON_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/qmldir.in b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/qmldir.in
new file mode 100644
index 0000000000..da1b995d64
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced3-Default-properties/qmldir.in
@@ -0,0 +1,4 @@
+module People
+typeinfo default.qmltypes
+prefer :/qt/qml/People/
+Main 254.0 Main.qml
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/CMakeLists.txt b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/CMakeLists.txt
new file mode 100644
index 0000000000..8f66d1ad07
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/CMakeLists.txt
@@ -0,0 +1,49 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(grouped LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Qml Gui)
+qt_standard_project_setup()
+
+qt_policy(SET QTP0001 NEW)
+
+qt_add_executable(grouped
+ birthdayparty.cpp birthdayparty.h
+ main.cpp
+ person.cpp person.h
+)
+
+set_target_properties(grouped PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(grouped PUBLIC
+ Qt6::Core
+ Qt6::Qml
+ Qt6::Gui
+)
+
+qt_add_qml_module(grouped
+ URI People
+ QML_FILES Main.qml
+ DEPENDENCIES
+ QtQuick
+)
+
+install(TARGETS grouped
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET grouped
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/Main.qml b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/Main.qml
new file mode 100644
index 0000000000..27951b5ea8
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/Main.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import People
+import QtQuick // For QColor
+
+BirthdayParty {
+ host: Boy {
+ name: "Bob Jones"
+ shoe { size: 12; color: "white"; brand: "Bikey"; price: 90.0 }
+ }
+
+ Boy {
+ name: "Leo Hodges"
+ shoe { size: 10; color: "black"; brand: "Thebok"; price: 59.95 }
+ }
+ Boy {
+ name: "Jack Smith"
+ shoe {
+ size: 8
+ color: "blue"
+ brand: "Luma"
+ price: 19.95
+ }
+ }
+ Girl {
+ name: "Anne Brown"
+ shoe.size: 7
+ shoe.color: "red"
+ shoe.brand: "Job Macobs"
+ shoe.price: 99.99
+ }
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/birthdayparty.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/birthdayparty.cpp
new file mode 100644
index 0000000000..ad38f284e7
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/birthdayparty.cpp
@@ -0,0 +1,99 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+
+Person *BirthdayParty::host() const
+{
+ return m_host;
+}
+
+void BirthdayParty::setHost(Person *host)
+{
+ if (m_host != host) {
+ m_host = host;
+ emit hostChanged();
+ }
+}
+
+QQmlListProperty<Person> BirthdayParty::guests()
+{
+ return { this,
+ this,
+ &BirthdayParty::appendGuest,
+ &BirthdayParty::guestCount,
+ &BirthdayParty::guest,
+ &BirthdayParty::clearGuests,
+ &BirthdayParty::replaceGuest,
+ &BirthdayParty::removeLastGuest };
+}
+
+void BirthdayParty::appendGuest(Person *guest)
+{
+ m_guests.append(guest);
+ emit guestsChanged();
+}
+
+qsizetype BirthdayParty::guestCount() const
+{
+ return m_guests.count();
+}
+
+Person *BirthdayParty::guest(qsizetype index) const
+{
+ return m_guests.at(index);
+}
+
+void BirthdayParty::clearGuests()
+{
+ if (!m_guests.empty()) {
+ m_guests.clear();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::replaceGuest(qsizetype index, Person *guest)
+{
+ if (m_guests.size() > index) {
+ m_guests[index] = guest;
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::removeLastGuest()
+{
+ if (!m_guests.empty()) {
+ m_guests.removeLast();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::appendGuest(QQmlListProperty<Person> *list, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->appendGuest(guest);
+}
+
+void BirthdayParty::clearGuests(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->clearGuests();
+}
+
+void BirthdayParty::replaceGuest(QQmlListProperty<Person> *list, qsizetype index, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->replaceGuest(index, guest);
+}
+
+void BirthdayParty::removeLastGuest(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->removeLastGuest();
+}
+
+Person *BirthdayParty::guest(QQmlListProperty<Person> *list, qsizetype index)
+{
+ return static_cast<BirthdayParty *>(list->data)->guest(index);
+}
+
+qsizetype BirthdayParty::guestCount(QQmlListProperty<Person> *list)
+{
+ return static_cast<BirthdayParty *>(list->data)->guestCount();
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/birthdayparty.h b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/birthdayparty.h
new file mode 100644
index 0000000000..4d7e61a487
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/birthdayparty.h
@@ -0,0 +1,49 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BIRTHDAYPARTY_H
+#define BIRTHDAYPARTY_H
+
+#include "person.h"
+
+#include <QObject>
+#include <QQmlListProperty>
+
+class BirthdayParty : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(Person *host READ host WRITE setHost NOTIFY hostChanged FINAL)
+ Q_PROPERTY(QQmlListProperty<Person> guests READ guests NOTIFY guestsChanged FINAL)
+ Q_CLASSINFO("DefaultProperty", "guests")
+ QML_ELEMENT
+public:
+ using QObject::QObject;
+
+ Person *host() const;
+ void setHost(Person *);
+
+ QQmlListProperty<Person> guests();
+ void appendGuest(Person *);
+ qsizetype guestCount() const;
+ Person *guest(qsizetype) const;
+ void clearGuests();
+ void replaceGuest(qsizetype, Person *);
+ void removeLastGuest();
+
+signals:
+ void hostChanged();
+ void guestsChanged();
+
+private:
+ static void appendGuest(QQmlListProperty<Person> *list, Person *);
+ static qsizetype guestCount(QQmlListProperty<Person> *);
+ static Person *guest(QQmlListProperty<Person> *, qsizetype);
+ static void clearGuests(QQmlListProperty<Person> *);
+ static void replaceGuest(QQmlListProperty<Person> *, qsizetype, Person *);
+ static void removeLastGuest(QQmlListProperty<Person> *);
+
+ Person *m_host = nullptr;
+ QList<Person *> m_guests;
+};
+
+#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/grouped.pro b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/grouped.pro
new file mode 100644
index 0000000000..52e2937edf
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/grouped.pro
@@ -0,0 +1,12 @@
+QT += qml
+
+CONFIG += qmltypes
+QML_IMPORT_NAME = People
+QML_IMPORT_MAJOR_VERSION = 1
+
+SOURCES += main.cpp \
+ person.cpp \
+ birthdayparty.cpp
+HEADERS += person.h \
+ birthdayparty.h
+RESOURCES += grouped.qrc
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/grouped.qrc b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/grouped.qrc
new file mode 100644
index 0000000000..b1eeb489e2
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/grouped.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/qt/qml/People/">
+ <file>Main.qml</file>
+ <file alias="qmldir">qmldir.in</file>
+</qresource>
+</RCC>
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/main.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/main.cpp
new file mode 100644
index 0000000000..0721d496f0
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/main.cpp
@@ -0,0 +1,45 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+#include "person.h"
+
+#include <QCoreApplication>
+#include <QDebug>
+#include <QQmlComponent>
+#include <QQmlEngine>
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadFromModule("People", "Main");
+ std::unique_ptr<BirthdayParty> party{ qobject_cast<BirthdayParty *>(component.create()) };
+
+ if (party && party->host()) {
+ qInfo() << party->host()->name() << "is having a birthday!";
+
+ if (qobject_cast<Boy *>(party->host()))
+ qInfo() << "He is inviting:";
+ else
+ qInfo() << "She is inviting:";
+
+ Person *bestShoe = nullptr;
+ for (qsizetype ii = 0; ii < party->guestCount(); ++ii) {
+ Person *guest = party->guest(ii);
+ qInfo() << " " << guest->name();
+
+ if (!bestShoe || bestShoe->shoe()->price() < guest->shoe()->price())
+ bestShoe = guest;
+ }
+ if (bestShoe)
+ qInfo() << bestShoe->name() << "is wearing the best shoes!";
+
+ return EXIT_SUCCESS;
+ }
+
+ qWarning() << component.errors();
+ return EXIT_FAILURE;
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/person.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/person.cpp
new file mode 100644
index 0000000000..53cec6b192
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/person.cpp
@@ -0,0 +1,96 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "person.h"
+
+Person::Person(QObject *parent) : QObject(parent)
+{
+ m_shoe = new ShoeDescription(this);
+}
+
+int ShoeDescription::size() const
+{
+ return m_size;
+}
+
+void ShoeDescription::setSize(int size)
+{
+ if (m_size != size) {
+ m_size = size;
+ emit shoeChanged();
+ }
+}
+
+QColor ShoeDescription::color() const
+{
+ return m_color;
+}
+
+void ShoeDescription::setColor(const QColor &color)
+{
+ if (m_color != color) {
+ m_color = color;
+ emit shoeChanged();
+ }
+}
+
+QString ShoeDescription::brand() const
+{
+ return m_brand;
+}
+
+void ShoeDescription::setBrand(const QString &brand)
+{
+ if (m_brand != brand) {
+ m_brand = brand;
+ emit shoeChanged();
+ }
+}
+
+qreal ShoeDescription::price() const
+{
+ return m_price;
+}
+
+void ShoeDescription::setPrice(qreal price)
+{
+ if (m_price != price) {
+ m_price = price;
+ emit shoeChanged();
+ }
+}
+
+bool ShoeDescription::operatorEqualsImpl(const ShoeDescription &lhs, const ShoeDescription &rhs)
+{
+ return lhs.m_size == rhs.m_size && lhs.m_color == rhs.m_color && lhs.m_brand == rhs.m_brand
+ && lhs.m_price == rhs.m_price;
+}
+
+QString Person::name() const
+{
+ return m_name;
+}
+
+void Person::setName(const QString &name)
+{
+ if (m_name != name) {
+ m_name = name;
+ emit nameChanged();
+ }
+}
+
+ShoeDescription *Person::shoe() const
+{
+ return m_shoe;
+}
+
+void Person::setShoe(ShoeDescription *shoe)
+{
+ if (!shoe)
+ return;
+
+ if (*m_shoe != *shoe) {
+ m_shoe = shoe;
+ emit shoeChanged();
+ }
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/person.h b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/person.h
new file mode 100644
index 0000000000..4f040e491b
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/person.h
@@ -0,0 +1,98 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PERSON_H
+#define PERSON_H
+
+#include <QtQml/qqml.h>
+#include <QColor>
+#include <QObject>
+
+class ShoeDescription : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int size READ size WRITE setSize NOTIFY shoeChanged FINAL)
+ Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY shoeChanged FINAL)
+ Q_PROPERTY(QString brand READ brand WRITE setBrand NOTIFY shoeChanged FINAL)
+ Q_PROPERTY(qreal price READ price WRITE setPrice NOTIFY shoeChanged FINAL)
+ QML_ANONYMOUS
+public:
+ using QObject::QObject;
+
+ int size() const;
+ void setSize(int);
+
+ QColor color() const;
+ void setColor(const QColor &);
+
+ QString brand() const;
+ void setBrand(const QString &);
+
+ qreal price() const;
+ void setPrice(qreal);
+
+ friend bool operator==(const ShoeDescription &lhs, const ShoeDescription &rhs)
+ {
+ return operatorEqualsImpl(lhs, rhs);
+ }
+ friend bool operator!=(const ShoeDescription &lhs, const ShoeDescription &rhs)
+ {
+ return !operatorEqualsImpl(lhs, rhs);
+ }
+
+signals:
+ void shoeChanged();
+
+private:
+ static bool operatorEqualsImpl(const ShoeDescription &, const ShoeDescription &);
+
+ int m_size = 0;
+ QColor m_color;
+ QString m_brand;
+ qreal m_price = 0;
+};
+
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL)
+ Q_PROPERTY(ShoeDescription *shoe READ shoe WRITE setShoe NOTIFY shoeChanged FINAL)
+ QML_ELEMENT
+ QML_UNCREATABLE("Person is an abstract base class.")
+public:
+ using QObject::QObject;
+
+ Person(QObject *parent = nullptr);
+
+ QString name() const;
+ void setName(const QString &);
+
+ ShoeDescription *shoe() const;
+ void setShoe(ShoeDescription *shoe);
+
+signals:
+ void nameChanged();
+ void shoeChanged();
+
+private:
+ QString m_name;
+ ShoeDescription *m_shoe = nullptr;
+};
+
+class Boy : public Person
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ using Person::Person;
+};
+
+class Girl : public Person
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ using Person::Person;
+};
+
+#endif // PERSON_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/qmldir.in b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/qmldir.in
new file mode 100644
index 0000000000..2e634e41af
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced4-Grouped-properties/qmldir.in
@@ -0,0 +1,5 @@
+module People
+typeinfo grouped.qmltypes
+prefer :/qt/qml/People/
+Main 254.0 Main.qml
+depends QtQuick
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/CMakeLists.txt b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/CMakeLists.txt
new file mode 100644
index 0000000000..c7b30376b6
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/CMakeLists.txt
@@ -0,0 +1,49 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(attached LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Qml Quick)
+qt_standard_project_setup()
+
+qt_policy(SET QTP0001 NEW)
+
+qt_add_executable(attached
+ birthdayparty.cpp birthdayparty.h
+ main.cpp
+ person.cpp person.h
+)
+
+set_target_properties(attached PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(attached PUBLIC
+ Qt6::Core
+ Qt6::Qml
+ Qt6::Quick
+)
+
+qt_add_qml_module(attached
+ URI People
+ QML_FILES Main.qml
+ DEPENDENCIES
+ QtQuick
+)
+
+install(TARGETS attached
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET attached
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/Main.qml b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/Main.qml
new file mode 100644
index 0000000000..8175eae209
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/Main.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import People
+import QtQuick // For QColor
+
+BirthdayParty {
+ Boy {
+ name: "Robert Campbell"
+ BirthdayParty.rsvp: Date.fromLocaleString(Qt.locale(), "2023-03-01", "yyyy-MM-dd")
+ }
+
+ Boy {
+ name: "Leo Hodges"
+ shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
+ BirthdayParty.rsvp: Date.fromLocaleString(Qt.locale(), "2023-03-03", "yyyy-MM-dd")
+ }
+
+ host: Boy {
+ name: "Jack Smith"
+ shoe { size: 8; color: "blue"; brand: "Puma"; price: 19.95 }
+ }
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/attached.pro b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/attached.pro
new file mode 100644
index 0000000000..ab154eb48b
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/attached.pro
@@ -0,0 +1,12 @@
+QT += qml quick
+
+CONFIG += qmltypes
+QML_IMPORT_NAME = People
+QML_IMPORT_MAJOR_VERSION = 1
+
+SOURCES += main.cpp \
+ person.cpp \
+ birthdayparty.cpp
+HEADERS += person.h \
+ birthdayparty.h
+RESOURCES += attached.qrc
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/attached.qrc b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/attached.qrc
new file mode 100644
index 0000000000..b1eeb489e2
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/attached.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/qt/qml/People/">
+ <file>Main.qml</file>
+ <file alias="qmldir">qmldir.in</file>
+</qresource>
+</RCC>
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/birthdayparty.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/birthdayparty.cpp
new file mode 100644
index 0000000000..0379a7accf
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/birthdayparty.cpp
@@ -0,0 +1,117 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+
+QDate BirthdayPartyAttached::rsvp() const
+{
+ return m_rsvp;
+}
+
+void BirthdayPartyAttached::setRsvp(QDate rsvpDate)
+{
+ if (m_rsvp != rsvpDate) {
+ m_rsvp = rsvpDate;
+ emit rsvpChanged();
+ }
+}
+
+Person *BirthdayParty::host() const
+{
+ return m_host;
+}
+
+void BirthdayParty::setHost(Person *host)
+{
+ if (m_host != host) {
+ m_host = host;
+ emit hostChanged();
+ }
+}
+
+QQmlListProperty<Person> BirthdayParty::guests()
+{
+ return { this,
+ this,
+ &BirthdayParty::appendGuest,
+ &BirthdayParty::guestCount,
+ &BirthdayParty::guest,
+ &BirthdayParty::clearGuests,
+ &BirthdayParty::replaceGuest,
+ &BirthdayParty::removeLastGuest };
+}
+
+void BirthdayParty::appendGuest(Person *guest)
+{
+ m_guests.append(guest);
+ emit guestsChanged();
+}
+
+qsizetype BirthdayParty::guestCount() const
+{
+ return m_guests.count();
+}
+
+Person *BirthdayParty::guest(qsizetype index) const
+{
+ return m_guests.at(index);
+}
+
+void BirthdayParty::clearGuests()
+{
+ if (!m_guests.empty()) {
+ m_guests.clear();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::replaceGuest(qsizetype index, Person *guest)
+{
+ if (m_guests.size() > index) {
+ m_guests[index] = guest;
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::removeLastGuest()
+{
+ if (!m_guests.empty()) {
+ m_guests.removeLast();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::appendGuest(QQmlListProperty<Person> *list, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->appendGuest(guest);
+}
+
+void BirthdayParty::clearGuests(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->clearGuests();
+}
+
+void BirthdayParty::replaceGuest(QQmlListProperty<Person> *list, qsizetype index, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->replaceGuest(index, guest);
+}
+
+void BirthdayParty::removeLastGuest(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->removeLastGuest();
+}
+
+Person *BirthdayParty::guest(QQmlListProperty<Person> *list, qsizetype index)
+{
+ return static_cast<BirthdayParty *>(list->data)->guest(index);
+}
+
+qsizetype BirthdayParty::guestCount(QQmlListProperty<Person> *list)
+{
+ return static_cast<BirthdayParty *>(list->data)->guestCount();
+}
+
+BirthdayPartyAttached *BirthdayParty::qmlAttachedProperties(QObject *object)
+{
+ return new BirthdayPartyAttached(object);
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/birthdayparty.h b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/birthdayparty.h
new file mode 100644
index 0000000000..1b2503895a
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/birthdayparty.h
@@ -0,0 +1,72 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BIRTHDAYPARTY_H
+#define BIRTHDAYPARTY_H
+
+#include "person.h"
+
+#include <QDate>
+#include <QObject>
+#include <qqml.h>
+
+class BirthdayPartyAttached : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp NOTIFY rsvpChanged FINAL)
+ QML_ANONYMOUS
+public:
+ using QObject::QObject;
+
+ QDate rsvp() const;
+ void setRsvp(QDate);
+
+signals:
+ void rsvpChanged();
+
+private:
+ QDate m_rsvp;
+};
+
+class BirthdayParty : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(Person *host READ host WRITE setHost NOTIFY hostChanged FINAL)
+ Q_PROPERTY(QQmlListProperty<Person> guests READ guests NOTIFY guestsChanged FINAL)
+ Q_CLASSINFO("DefaultProperty", "guests")
+ QML_ELEMENT
+ QML_ATTACHED(BirthdayPartyAttached)
+
+public:
+ using QObject::QObject;
+
+ Person *host() const;
+ void setHost(Person *);
+
+ QQmlListProperty<Person> guests();
+ void appendGuest(Person *);
+ qsizetype guestCount() const;
+ Person *guest(qsizetype) const;
+ void clearGuests();
+ void replaceGuest(qsizetype, Person *);
+ void removeLastGuest();
+
+ static BirthdayPartyAttached *qmlAttachedProperties(QObject *);
+
+signals:
+ void hostChanged();
+ void guestsChanged();
+
+private:
+ static void appendGuest(QQmlListProperty<Person> *list, Person *);
+ static qsizetype guestCount(QQmlListProperty<Person> *);
+ static Person *guest(QQmlListProperty<Person> *, qsizetype);
+ static void clearGuests(QQmlListProperty<Person> *);
+ static void replaceGuest(QQmlListProperty<Person> *, qsizetype, Person *);
+ static void removeLastGuest(QQmlListProperty<Person> *);
+
+ Person *m_host = nullptr;
+ QList<Person *> m_guests;
+};
+
+#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/main.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/main.cpp
new file mode 100644
index 0000000000..09691f3b6a
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/main.cpp
@@ -0,0 +1,48 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+#include "person.h"
+
+#include <QCoreApplication>
+#include <QDebug>
+#include <QQmlComponent>
+#include <QQmlEngine>
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadFromModule("People", "Main");
+ std::unique_ptr<BirthdayParty> party{ qobject_cast<BirthdayParty *>(component.create()) };
+
+ if (party && party->host()) {
+ qInfo() << party->host()->name() << "is having a birthday!";
+
+ if (qobject_cast<Boy *>(party->host()))
+ qInfo() << "He is inviting:";
+ else
+ qInfo() << "She is inviting:";
+
+ for (qsizetype ii = 0; ii < party->guestCount(); ++ii) {
+ Person *guest = party->guest(ii);
+
+ QDate rsvpDate;
+ QObject *attached = qmlAttachedPropertiesObject<BirthdayParty>(guest, false);
+
+ if (attached)
+ rsvpDate = attached->property("rsvp").toDate();
+ if (rsvpDate.isNull())
+ qInfo() << " " << guest->name() << "RSVP date: Hasn't RSVP'd";
+ else
+ qInfo() << " " << guest->name() << "RSVP date:" << rsvpDate.toString();
+ }
+
+ return EXIT_SUCCESS;
+ }
+
+ qWarning() << component.errors();
+ return EXIT_FAILURE;
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/person.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/person.cpp
new file mode 100644
index 0000000000..53cec6b192
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/person.cpp
@@ -0,0 +1,96 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "person.h"
+
+Person::Person(QObject *parent) : QObject(parent)
+{
+ m_shoe = new ShoeDescription(this);
+}
+
+int ShoeDescription::size() const
+{
+ return m_size;
+}
+
+void ShoeDescription::setSize(int size)
+{
+ if (m_size != size) {
+ m_size = size;
+ emit shoeChanged();
+ }
+}
+
+QColor ShoeDescription::color() const
+{
+ return m_color;
+}
+
+void ShoeDescription::setColor(const QColor &color)
+{
+ if (m_color != color) {
+ m_color = color;
+ emit shoeChanged();
+ }
+}
+
+QString ShoeDescription::brand() const
+{
+ return m_brand;
+}
+
+void ShoeDescription::setBrand(const QString &brand)
+{
+ if (m_brand != brand) {
+ m_brand = brand;
+ emit shoeChanged();
+ }
+}
+
+qreal ShoeDescription::price() const
+{
+ return m_price;
+}
+
+void ShoeDescription::setPrice(qreal price)
+{
+ if (m_price != price) {
+ m_price = price;
+ emit shoeChanged();
+ }
+}
+
+bool ShoeDescription::operatorEqualsImpl(const ShoeDescription &lhs, const ShoeDescription &rhs)
+{
+ return lhs.m_size == rhs.m_size && lhs.m_color == rhs.m_color && lhs.m_brand == rhs.m_brand
+ && lhs.m_price == rhs.m_price;
+}
+
+QString Person::name() const
+{
+ return m_name;
+}
+
+void Person::setName(const QString &name)
+{
+ if (m_name != name) {
+ m_name = name;
+ emit nameChanged();
+ }
+}
+
+ShoeDescription *Person::shoe() const
+{
+ return m_shoe;
+}
+
+void Person::setShoe(ShoeDescription *shoe)
+{
+ if (!shoe)
+ return;
+
+ if (*m_shoe != *shoe) {
+ m_shoe = shoe;
+ emit shoeChanged();
+ }
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/person.h b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/person.h
new file mode 100644
index 0000000000..4f040e491b
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/person.h
@@ -0,0 +1,98 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PERSON_H
+#define PERSON_H
+
+#include <QtQml/qqml.h>
+#include <QColor>
+#include <QObject>
+
+class ShoeDescription : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int size READ size WRITE setSize NOTIFY shoeChanged FINAL)
+ Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY shoeChanged FINAL)
+ Q_PROPERTY(QString brand READ brand WRITE setBrand NOTIFY shoeChanged FINAL)
+ Q_PROPERTY(qreal price READ price WRITE setPrice NOTIFY shoeChanged FINAL)
+ QML_ANONYMOUS
+public:
+ using QObject::QObject;
+
+ int size() const;
+ void setSize(int);
+
+ QColor color() const;
+ void setColor(const QColor &);
+
+ QString brand() const;
+ void setBrand(const QString &);
+
+ qreal price() const;
+ void setPrice(qreal);
+
+ friend bool operator==(const ShoeDescription &lhs, const ShoeDescription &rhs)
+ {
+ return operatorEqualsImpl(lhs, rhs);
+ }
+ friend bool operator!=(const ShoeDescription &lhs, const ShoeDescription &rhs)
+ {
+ return !operatorEqualsImpl(lhs, rhs);
+ }
+
+signals:
+ void shoeChanged();
+
+private:
+ static bool operatorEqualsImpl(const ShoeDescription &, const ShoeDescription &);
+
+ int m_size = 0;
+ QColor m_color;
+ QString m_brand;
+ qreal m_price = 0;
+};
+
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL)
+ Q_PROPERTY(ShoeDescription *shoe READ shoe WRITE setShoe NOTIFY shoeChanged FINAL)
+ QML_ELEMENT
+ QML_UNCREATABLE("Person is an abstract base class.")
+public:
+ using QObject::QObject;
+
+ Person(QObject *parent = nullptr);
+
+ QString name() const;
+ void setName(const QString &);
+
+ ShoeDescription *shoe() const;
+ void setShoe(ShoeDescription *shoe);
+
+signals:
+ void nameChanged();
+ void shoeChanged();
+
+private:
+ QString m_name;
+ ShoeDescription *m_shoe = nullptr;
+};
+
+class Boy : public Person
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ using Person::Person;
+};
+
+class Girl : public Person
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ using Person::Person;
+};
+
+#endif // PERSON_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/qmldir.in b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/qmldir.in
new file mode 100644
index 0000000000..1038298c01
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/qmldir.in
@@ -0,0 +1,5 @@
+module People
+typeinfo attached.qmltypes
+prefer :/qt/qml/People/
+Main 254.0 Main.qml
+depends QtQuick
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/CMakeLists.txt b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/CMakeLists.txt
new file mode 100644
index 0000000000..e6aa49e5cb
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(valuesource LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Qml Quick)
+qt_standard_project_setup()
+
+qt_policy(SET QTP0001 NEW)
+
+qt_add_executable(valuesource
+ birthdayparty.cpp birthdayparty.h
+ happybirthdaysong.cpp happybirthdaysong.h
+ main.cpp
+ person.cpp person.h
+)
+
+set_target_properties(valuesource PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(valuesource PUBLIC
+ Qt6::Core
+ Qt6::Qml
+ Qt6::Quick
+)
+
+qt_add_qml_module(valuesource
+ URI People
+ QML_FILES Main.qml
+ DEPENDENCIES
+ QtQuick
+)
+
+install(TARGETS valuesource
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET valuesource
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/Main.qml b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/Main.qml
new file mode 100644
index 0000000000..7f79d0a0c4
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/Main.qml
@@ -0,0 +1,38 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import People
+import QtQuick // For QColor
+
+BirthdayParty {
+ id: party
+ HappyBirthdaySong on announcement {
+ name: party.host.name
+ }
+
+ onPartyStarted: (time) => { console.log("This party started rockin' at " + time); }
+
+
+ host: Boy {
+ name: "Bob Jones"
+ shoe { size: 12; color: "white"; brand: "Nike"; price: 90.0 }
+ }
+
+ Boy {
+ name: "Leo Hodges"
+ BirthdayParty.rsvp: Date.fromLocaleString(Qt.locale(), "2023-03-01", "yyyy-MM-dd")
+ shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
+ }
+ Boy {
+ name: "Jack Smith"
+ shoe { size: 8; color: "blue"; brand: "Puma"; price: 19.95 }
+ }
+ Girl {
+ name: "Anne Brown"
+ BirthdayParty.rsvp: Date.fromLocaleString(Qt.locale(), "2023-03-03", "yyyy-MM-dd")
+ shoe.size: 7
+ shoe.color: "red"
+ shoe.brand: "Marc Jacobs"
+ shoe.price: 99.99
+ }
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/birthdayparty.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/birthdayparty.cpp
new file mode 100644
index 0000000000..b14f7ef315
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/birthdayparty.cpp
@@ -0,0 +1,137 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+
+QDate BirthdayPartyAttached::rsvp() const
+{
+ return m_rsvp;
+}
+
+void BirthdayPartyAttached::setRsvp(QDate rsvpDate)
+{
+ if (m_rsvp != rsvpDate) {
+ m_rsvp = rsvpDate;
+ emit rsvpChanged();
+ }
+}
+
+Person *BirthdayParty::host() const
+{
+ return m_host;
+}
+
+void BirthdayParty::setHost(Person *host)
+{
+ if (m_host != host) {
+ m_host = host;
+ emit hostChanged();
+ }
+}
+
+QQmlListProperty<Person> BirthdayParty::guests()
+{
+ return { this,
+ this,
+ &BirthdayParty::appendGuest,
+ &BirthdayParty::guestCount,
+ &BirthdayParty::guest,
+ &BirthdayParty::clearGuests,
+ &BirthdayParty::replaceGuest,
+ &BirthdayParty::removeLastGuest };
+}
+
+void BirthdayParty::appendGuest(Person *guest)
+{
+ m_guests.append(guest);
+ emit guestsChanged();
+}
+
+qsizetype BirthdayParty::guestCount() const
+{
+ return m_guests.count();
+}
+
+Person *BirthdayParty::guest(qsizetype index) const
+{
+ return m_guests.at(index);
+}
+
+void BirthdayParty::clearGuests()
+{
+ if (!m_guests.empty()) {
+ m_guests.clear();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::replaceGuest(qsizetype index, Person *guest)
+{
+ if (m_guests.size() > index) {
+ m_guests[index] = guest;
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::removeLastGuest()
+{
+ if (!m_guests.empty()) {
+ m_guests.removeLast();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::appendGuest(QQmlListProperty<Person> *list, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->appendGuest(guest);
+}
+
+void BirthdayParty::clearGuests(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->clearGuests();
+}
+
+void BirthdayParty::replaceGuest(QQmlListProperty<Person> *list, qsizetype index, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->replaceGuest(index, guest);
+}
+
+void BirthdayParty::removeLastGuest(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->removeLastGuest();
+}
+
+Person *BirthdayParty::guest(QQmlListProperty<Person> *list, qsizetype index)
+{
+ return static_cast<BirthdayParty *>(list->data)->guest(index);
+}
+
+qsizetype BirthdayParty::guestCount(QQmlListProperty<Person> *list)
+{
+ return static_cast<BirthdayParty *>(list->data)->guestCount();
+}
+
+void BirthdayParty::startParty()
+{
+ QDateTime time = QDateTime::currentDateTime();
+ emit partyStarted(time);
+}
+
+QString BirthdayParty::announcement() const
+{
+ return m_announcement;
+}
+
+void BirthdayParty::setAnnouncement(const QString &announcement)
+{
+ if (m_announcement != announcement) {
+ m_announcement = announcement;
+ emit announcementChanged();
+ }
+ qInfo().noquote() << announcement;
+}
+
+BirthdayPartyAttached *BirthdayParty::qmlAttachedProperties(QObject *object)
+{
+ return new BirthdayPartyAttached(object);
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/birthdayparty.h b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/birthdayparty.h
new file mode 100644
index 0000000000..799a3fa969
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/birthdayparty.h
@@ -0,0 +1,82 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BIRTHDAYPARTY_H
+#define BIRTHDAYPARTY_H
+
+#include "person.h"
+
+#include <QDate>
+#include <QDebug>
+#include <QObject>
+#include <QQmlListProperty>
+#include <qqml.h>
+
+class BirthdayPartyAttached : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp NOTIFY rsvpChanged FINAL)
+ QML_ANONYMOUS
+public:
+ using QObject::QObject;
+
+ QDate rsvp() const;
+ void setRsvp(QDate);
+
+signals:
+ void rsvpChanged();
+
+private:
+ QDate m_rsvp;
+};
+
+class BirthdayParty : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(Person *host READ host WRITE setHost NOTIFY hostChanged FINAL)
+ Q_PROPERTY(QQmlListProperty<Person> guests READ guests NOTIFY guestsChanged FINAL)
+ Q_PROPERTY(QString announcement READ announcement WRITE setAnnouncement NOTIFY announcementChanged FINAL)
+ Q_CLASSINFO("DefaultProperty", "guests")
+ QML_ELEMENT
+ QML_ATTACHED(BirthdayPartyAttached)
+public:
+ using QObject::QObject;
+
+ Person *host() const;
+ void setHost(Person *);
+
+ QString announcement() const;
+ void setAnnouncement(const QString &);
+
+ QQmlListProperty<Person> guests();
+ void appendGuest(Person *);
+ qsizetype guestCount() const;
+ Person *guest(qsizetype) const;
+ void clearGuests();
+ void replaceGuest(qsizetype, Person *);
+ void removeLastGuest();
+
+ static BirthdayPartyAttached *qmlAttachedProperties(QObject *);
+
+ void startParty();
+
+signals:
+ void hostChanged();
+ void guestsChanged();
+ void partyStarted(QDateTime time);
+ void announcementChanged();
+
+private:
+ static void appendGuest(QQmlListProperty<Person> *, Person *);
+ static qsizetype guestCount(QQmlListProperty<Person> *);
+ static Person *guest(QQmlListProperty<Person> *, qsizetype);
+ static void clearGuests(QQmlListProperty<Person> *);
+ static void replaceGuest(QQmlListProperty<Person> *, qsizetype, Person *);
+ static void removeLastGuest(QQmlListProperty<Person> *);
+
+ Person *m_host = nullptr;
+ QList<Person *> m_guests;
+ QString m_announcement;
+};
+
+#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/happybirthdaysong.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/happybirthdaysong.cpp
new file mode 100644
index 0000000000..7a756a4a71
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/happybirthdaysong.cpp
@@ -0,0 +1,45 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "happybirthdaysong.h"
+
+#include <QTimer>
+
+HappyBirthdaySong::HappyBirthdaySong(QObject *parent) : QObject(parent)
+{
+ auto *timer = new QTimer(this);
+ QObject::connect(timer, &QTimer::timeout, this, &HappyBirthdaySong::advance);
+ timer->start(1000);
+}
+
+void HappyBirthdaySong::setTarget(const QQmlProperty &target)
+{
+ m_target = target;
+}
+
+QString HappyBirthdaySong::name() const
+{
+ return m_name;
+}
+
+void HappyBirthdaySong::setName(const QString &name)
+{
+ if (m_name != name) {
+ m_name = name;
+ emit nameChanged();
+ }
+
+ m_lyrics.clear();
+ m_lyrics << "Happy birthday to you,";
+ m_lyrics << "Happy birthday to you,";
+ m_lyrics << "Happy birthday dear " + m_name + ",";
+ m_lyrics << "Happy birthday to you!";
+ m_lyrics << "";
+}
+
+void HappyBirthdaySong::advance()
+{
+ m_line = (m_line + 1) % m_lyrics.count();
+
+ m_target.write(m_lyrics.at(m_line));
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/happybirthdaysong.h b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/happybirthdaysong.h
new file mode 100644
index 0000000000..13907d5485
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/happybirthdaysong.h
@@ -0,0 +1,39 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef HAPPYBIRTHDAYSONG_H
+#define HAPPYBIRTHDAYSONG_H
+
+#include <QQmlProperty>
+#include <QQmlPropertyValueSource>
+#include <qqml.h>
+#include <QStringList>
+
+class HappyBirthdaySong : public QObject, public QQmlPropertyValueSource
+{
+ Q_OBJECT
+ Q_INTERFACES(QQmlPropertyValueSource)
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL)
+ QML_ELEMENT
+public:
+ explicit HappyBirthdaySong(QObject *parent = nullptr);
+
+ void setTarget(const QQmlProperty &) override;
+
+ QString name() const;
+ void setName(const QString &);
+
+signals:
+ void nameChanged();
+
+private slots:
+ void advance();
+
+private:
+ qsizetype m_line = -1;
+ QStringList m_lyrics;
+ QQmlProperty m_target;
+ QString m_name;
+};
+
+#endif // HAPPYBIRTHDAYSONG_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/main.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/main.cpp
new file mode 100644
index 0000000000..6d67b6179e
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/main.cpp
@@ -0,0 +1,49 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+#include "person.h"
+
+#include <QCoreApplication>
+#include <QDebug>
+#include <QQmlComponent>
+#include <QQmlEngine>
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadFromModule("People", "Main");
+ std::unique_ptr<BirthdayParty> party{ qobject_cast<BirthdayParty *>(component.create()) };
+
+ if (party && party->host()) {
+ qInfo() << party->host()->name() << "is having a birthday!";
+
+ if (qobject_cast<Boy *>(party->host()))
+ qInfo() << "He is inviting:";
+ else
+ qInfo() << "She is inviting:";
+
+ for (qsizetype ii = 0; ii < party->guestCount(); ++ii) {
+ Person *guest = party->guest(ii);
+
+ QDate rsvpDate;
+ QObject *attached = qmlAttachedPropertiesObject<BirthdayParty>(guest, false);
+ if (attached)
+ rsvpDate = attached->property("rsvp").toDate();
+
+ if (rsvpDate.isNull())
+ qInfo() << " " << guest->name() << "RSVP date: Hasn't RSVP'd";
+ else
+ qInfo() << " " << guest->name() << "RSVP date:" << rsvpDate.toString();
+ }
+
+ party->startParty();
+ return QCoreApplication::exec();
+ }
+
+ qWarning() << component.errors();
+ return EXIT_FAILURE;
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/person.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/person.cpp
new file mode 100644
index 0000000000..53cec6b192
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/person.cpp
@@ -0,0 +1,96 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "person.h"
+
+Person::Person(QObject *parent) : QObject(parent)
+{
+ m_shoe = new ShoeDescription(this);
+}
+
+int ShoeDescription::size() const
+{
+ return m_size;
+}
+
+void ShoeDescription::setSize(int size)
+{
+ if (m_size != size) {
+ m_size = size;
+ emit shoeChanged();
+ }
+}
+
+QColor ShoeDescription::color() const
+{
+ return m_color;
+}
+
+void ShoeDescription::setColor(const QColor &color)
+{
+ if (m_color != color) {
+ m_color = color;
+ emit shoeChanged();
+ }
+}
+
+QString ShoeDescription::brand() const
+{
+ return m_brand;
+}
+
+void ShoeDescription::setBrand(const QString &brand)
+{
+ if (m_brand != brand) {
+ m_brand = brand;
+ emit shoeChanged();
+ }
+}
+
+qreal ShoeDescription::price() const
+{
+ return m_price;
+}
+
+void ShoeDescription::setPrice(qreal price)
+{
+ if (m_price != price) {
+ m_price = price;
+ emit shoeChanged();
+ }
+}
+
+bool ShoeDescription::operatorEqualsImpl(const ShoeDescription &lhs, const ShoeDescription &rhs)
+{
+ return lhs.m_size == rhs.m_size && lhs.m_color == rhs.m_color && lhs.m_brand == rhs.m_brand
+ && lhs.m_price == rhs.m_price;
+}
+
+QString Person::name() const
+{
+ return m_name;
+}
+
+void Person::setName(const QString &name)
+{
+ if (m_name != name) {
+ m_name = name;
+ emit nameChanged();
+ }
+}
+
+ShoeDescription *Person::shoe() const
+{
+ return m_shoe;
+}
+
+void Person::setShoe(ShoeDescription *shoe)
+{
+ if (!shoe)
+ return;
+
+ if (*m_shoe != *shoe) {
+ m_shoe = shoe;
+ emit shoeChanged();
+ }
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/person.h b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/person.h
new file mode 100644
index 0000000000..4f040e491b
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/person.h
@@ -0,0 +1,98 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PERSON_H
+#define PERSON_H
+
+#include <QtQml/qqml.h>
+#include <QColor>
+#include <QObject>
+
+class ShoeDescription : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int size READ size WRITE setSize NOTIFY shoeChanged FINAL)
+ Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY shoeChanged FINAL)
+ Q_PROPERTY(QString brand READ brand WRITE setBrand NOTIFY shoeChanged FINAL)
+ Q_PROPERTY(qreal price READ price WRITE setPrice NOTIFY shoeChanged FINAL)
+ QML_ANONYMOUS
+public:
+ using QObject::QObject;
+
+ int size() const;
+ void setSize(int);
+
+ QColor color() const;
+ void setColor(const QColor &);
+
+ QString brand() const;
+ void setBrand(const QString &);
+
+ qreal price() const;
+ void setPrice(qreal);
+
+ friend bool operator==(const ShoeDescription &lhs, const ShoeDescription &rhs)
+ {
+ return operatorEqualsImpl(lhs, rhs);
+ }
+ friend bool operator!=(const ShoeDescription &lhs, const ShoeDescription &rhs)
+ {
+ return !operatorEqualsImpl(lhs, rhs);
+ }
+
+signals:
+ void shoeChanged();
+
+private:
+ static bool operatorEqualsImpl(const ShoeDescription &, const ShoeDescription &);
+
+ int m_size = 0;
+ QColor m_color;
+ QString m_brand;
+ qreal m_price = 0;
+};
+
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL)
+ Q_PROPERTY(ShoeDescription *shoe READ shoe WRITE setShoe NOTIFY shoeChanged FINAL)
+ QML_ELEMENT
+ QML_UNCREATABLE("Person is an abstract base class.")
+public:
+ using QObject::QObject;
+
+ Person(QObject *parent = nullptr);
+
+ QString name() const;
+ void setName(const QString &);
+
+ ShoeDescription *shoe() const;
+ void setShoe(ShoeDescription *shoe);
+
+signals:
+ void nameChanged();
+ void shoeChanged();
+
+private:
+ QString m_name;
+ ShoeDescription *m_shoe = nullptr;
+};
+
+class Boy : public Person
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ using Person::Person;
+};
+
+class Girl : public Person
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ using Person::Person;
+};
+
+#endif // PERSON_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/qmldir.in b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/qmldir.in
new file mode 100644
index 0000000000..4c63c729d6
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/qmldir.in
@@ -0,0 +1,5 @@
+module People
+typeinfo valuesource.qmltypes
+prefer :/qt/qml/People/
+Main 254.0 Main.qml
+depends QtQuick
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/valuesource.pro b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/valuesource.pro
new file mode 100644
index 0000000000..c55299cecf
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/valuesource.pro
@@ -0,0 +1,14 @@
+QT += qml quick
+
+CONFIG += qmltypes
+QML_IMPORT_NAME = People
+QML_IMPORT_MAJOR_VERSION = 1
+
+SOURCES += main.cpp \
+ person.cpp \
+ birthdayparty.cpp \
+ happybirthdaysong.cpp
+HEADERS += person.h \
+ birthdayparty.h \
+ happybirthdaysong.h
+RESOURCES += valuesource.qrc
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/valuesource.qrc b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/valuesource.qrc
new file mode 100644
index 0000000000..b1eeb489e2
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced6-Property-value-source/valuesource.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/qt/qml/People/">
+ <file>Main.qml</file>
+ <file alias="qmldir">qmldir.in</file>
+</qresource>
+</RCC>
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/CMakeLists.txt b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/CMakeLists.txt
new file mode 100644
index 0000000000..ffdb5b0949
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/CMakeLists.txt
@@ -0,0 +1,63 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(foreign LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Qml Quick Gui)
+qt_standard_project_setup()
+
+qt_policy(SET QTP0001 NEW)
+
+add_subdirectory(library/)
+
+qt_add_executable(foreign
+ birthdayparty.cpp
+ birthdayparty.h
+ foreigndisplay.h
+ happybirthdaysong.cpp
+ happybirthdaysong.h
+ person.cpp
+ person.h
+ main.cpp
+)
+
+target_link_libraries(foreign PUBLIC
+ Qt6::Core
+ Qt6::Qml
+ Qt6::Gui
+ library
+)
+
+set_target_properties(foreign PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_include_directories(foreign PUBLIC
+ "${PROJECT_BINARY_DIR}"
+ "${PROJECT_SOURCE_DIR}/library"
+)
+
+qt_add_qml_module(foreign
+ URI People
+ QML_FILES Main.qml
+ SOURCES foreigndisplay.h
+ DEPENDENCIES
+ QtQuick
+)
+
+install(TARGETS foreign
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET foreign
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/Main.qml b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/Main.qml
new file mode 100644
index 0000000000..988bea49f8
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/Main.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import People
+import QtQuick // For QColor
+
+BirthdayParty {
+ id: party
+ HappyBirthdaySong on announcement {
+ name: party.host.name
+ }
+
+ display: ThirdPartyDisplay {
+ foregroundColor: "black"
+ backgroundColor: "white"
+ }
+
+ onPartyStarted: (time) => { console.log("This party started rockin' at " + time); }
+
+
+ host: Boy {
+ name: "Bob Jones"
+ shoe { size: 12; color: "white"; brand: "Nike"; price: 90.0 }
+ }
+
+ Boy {
+ name: "Leo Hodges"
+ BirthdayParty.rsvp: Date.fromLocaleString(Qt.locale(), "2023-03-01", "yyyy-MM-dd")
+ shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
+ }
+ Boy {
+ name: "Jack Smith"
+ shoe { size: 8; color: "blue"; brand: "Puma"; price: 19.95 }
+ }
+ Girl {
+ name: "Anne Brown"
+ BirthdayParty.rsvp: Date.fromLocaleString(Qt.locale(), "2023-03-03", "yyyy-MM-dd")
+ shoe.size: 7
+ shoe.color: "red"
+ shoe.brand: "Marc Jacobs"
+ shoe.price: 99.99
+ }
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/application.pro b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/application.pro
new file mode 100644
index 0000000000..b53397d49c
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/application.pro
@@ -0,0 +1,26 @@
+TEMPLATE = app
+
+CONFIG += console
+
+QT += core qml
+
+DEPENDPATH += library
+INCLUDEPATH += library
+LIBS += -Llibrary/ -llibrary
+
+SOURCES += \
+ birthdayparty.cpp \
+ happybirthdaysong.cpp \
+ main.cpp \
+ person.cpp
+HEADERS += \
+ birthdayparty.h \
+ foreigndisplay.h \
+ happybirthdaysong.h \
+ person.h
+
+CONFIG += qmltypes
+QML_IMPORT_NAME = People
+QML_IMPORT_MAJOR_VERSION = 1
+
+RESOURCES += foreign.qrc
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/birthdayparty.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/birthdayparty.cpp
new file mode 100644
index 0000000000..7a9debe195
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/birthdayparty.cpp
@@ -0,0 +1,150 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+
+QDate BirthdayPartyAttached::rsvp() const
+{
+ return m_rsvp;
+}
+
+void BirthdayPartyAttached::setRsvp(QDate rsvpDate)
+{
+ if (m_rsvp != rsvpDate) {
+ m_rsvp = rsvpDate;
+ emit rsvpChanged();
+ }
+}
+
+Person *BirthdayParty::host() const
+{
+ return m_host;
+}
+
+void BirthdayParty::setHost(Person *host)
+{
+ if (m_host != host) {
+ m_host = host;
+ emit hostChanged();
+ }
+}
+
+QQmlListProperty<Person> BirthdayParty::guests()
+{
+ return { this,
+ this,
+ &BirthdayParty::appendGuest,
+ &BirthdayParty::guestCount,
+ &BirthdayParty::guest,
+ &BirthdayParty::clearGuests,
+ &BirthdayParty::replaceGuest,
+ &BirthdayParty::removeLastGuest };
+}
+
+void BirthdayParty::appendGuest(Person *guest)
+{
+ m_guests.append(guest);
+ emit guestsChanged();
+}
+
+qsizetype BirthdayParty::guestCount() const
+{
+ return m_guests.count();
+}
+
+Person *BirthdayParty::guest(qsizetype index) const
+{
+ return m_guests.at(index);
+}
+
+void BirthdayParty::clearGuests()
+{
+ if (!m_guests.empty()) {
+ m_guests.clear();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::replaceGuest(qsizetype index, Person *guest)
+{
+ if (m_guests.size() > index) {
+ m_guests[index] = guest;
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::removeLastGuest()
+{
+ if (!m_guests.empty()) {
+ m_guests.removeLast();
+ emit guestsChanged();
+ }
+}
+
+void BirthdayParty::appendGuest(QQmlListProperty<Person> *list, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->appendGuest(guest);
+}
+
+void BirthdayParty::clearGuests(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->clearGuests();
+}
+
+void BirthdayParty::replaceGuest(QQmlListProperty<Person> *list, qsizetype index, Person *guest)
+{
+ static_cast<BirthdayParty *>(list->data)->replaceGuest(index, guest);
+}
+
+void BirthdayParty::removeLastGuest(QQmlListProperty<Person> *list)
+{
+ static_cast<BirthdayParty *>(list->data)->removeLastGuest();
+}
+
+Person *BirthdayParty::guest(QQmlListProperty<Person> *list, qsizetype index)
+{
+ return static_cast<BirthdayParty *>(list->data)->guest(index);
+}
+
+qsizetype BirthdayParty::guestCount(QQmlListProperty<Person> *list)
+{
+ return static_cast<BirthdayParty *>(list->data)->guestCount();
+}
+
+void BirthdayParty::startParty()
+{
+ QDateTime time = QDateTime::currentDateTime();
+ emit partyStarted(time);
+}
+
+QString BirthdayParty::announcement() const
+{
+ return m_announcement;
+}
+
+void BirthdayParty::setAnnouncement(const QString &announcement)
+{
+ if (m_announcement != announcement) {
+ m_announcement = announcement;
+ emit announcementChanged();
+ }
+ m_display->setContent(announcement);
+}
+
+ThirdPartyDisplay *BirthdayParty::display() const
+{
+ return m_display;
+}
+
+void BirthdayParty::setDisplay(ThirdPartyDisplay *display)
+{
+ if (m_display != display) {
+ m_display = display;
+ emit displayChanged();
+ }
+}
+
+BirthdayPartyAttached *BirthdayParty::qmlAttachedProperties(QObject *object)
+{
+ return new BirthdayPartyAttached(object);
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/birthdayparty.h b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/birthdayparty.h
new file mode 100644
index 0000000000..59c53f2484
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/birthdayparty.h
@@ -0,0 +1,90 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BIRTHDAYPARTY_H
+#define BIRTHDAYPARTY_H
+
+#include "person.h"
+#include "ThirdPartyDisplay.h"
+
+#include <QDate>
+#include <QDebug>
+#include <QObject>
+#include <qqml.h>
+
+#include <memory>
+
+class BirthdayPartyAttached : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QDate rsvp READ rsvp WRITE setRsvp NOTIFY rsvpChanged FINAL)
+ QML_ANONYMOUS
+public:
+ using QObject::QObject;
+
+ QDate rsvp() const;
+ void setRsvp(QDate);
+
+signals:
+ void rsvpChanged();
+
+private:
+ QDate m_rsvp;
+};
+
+class BirthdayParty : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(Person *host READ host WRITE setHost NOTIFY hostChanged FINAL)
+ Q_PROPERTY(QQmlListProperty<Person> guests READ guests NOTIFY guestsChanged FINAL)
+ Q_PROPERTY(QString announcement READ announcement WRITE setAnnouncement NOTIFY announcementChanged FINAL)
+ Q_PROPERTY(ThirdPartyDisplay *display READ display WRITE setDisplay NOTIFY displayChanged FINAL)
+ Q_CLASSINFO("DefaultProperty", "guests")
+ QML_ELEMENT
+ QML_ATTACHED(BirthdayPartyAttached)
+public:
+ using QObject::QObject;
+
+ Person *host() const;
+ void setHost(Person *);
+
+ QQmlListProperty<Person> guests();
+ void appendGuest(Person *);
+ qsizetype guestCount() const;
+ Person *guest(qsizetype) const;
+ void clearGuests();
+ void replaceGuest(qsizetype, Person *);
+ void removeLastGuest();
+
+ QString announcement() const;
+ void setAnnouncement(const QString &);
+
+ ThirdPartyDisplay *display() const;
+ void setDisplay(ThirdPartyDisplay *);
+
+ static BirthdayPartyAttached *qmlAttachedProperties(QObject *);
+
+ void startParty();
+
+signals:
+ void hostChanged();
+ void guestsChanged();
+ void partyStarted(QDateTime time);
+ void announcementChanged();
+ void displayChanged();
+
+private:
+ static void appendGuest(QQmlListProperty<Person> *, Person *);
+ static qsizetype guestCount(QQmlListProperty<Person> *);
+ static Person *guest(QQmlListProperty<Person> *, qsizetype);
+ static void clearGuests(QQmlListProperty<Person> *);
+ static void replaceGuest(QQmlListProperty<Person> *, qsizetype, Person *);
+ static void removeLastGuest(QQmlListProperty<Person> *);
+
+ Person *m_host = nullptr;
+ QList<Person *> m_guests;
+ QString m_announcement;
+ ThirdPartyDisplay *m_display = nullptr;
+};
+
+#endif // BIRTHDAYPARTY_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/foreign.pro b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/foreign.pro
new file mode 100644
index 0000000000..b637cb0840
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/foreign.pro
@@ -0,0 +1,7 @@
+TEMPLATE = subdirs
+
+SUBDIRS = \
+ application.pro \
+ library
+
+application.depends = library
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/foreign.qrc b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/foreign.qrc
new file mode 100644
index 0000000000..b1eeb489e2
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/foreign.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/qt/qml/People/">
+ <file>Main.qml</file>
+ <file alias="qmldir">qmldir.in</file>
+</qresource>
+</RCC>
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/foreigndisplay.h b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/foreigndisplay.h
new file mode 100644
index 0000000000..ee42ca965c
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/foreigndisplay.h
@@ -0,0 +1,20 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef FOREIGNDISPLAY_H
+#define FOREIGNDISPLAY_H
+
+#include "ThirdPartyDisplay.h"
+
+#include <QColor>
+#include <QObject>
+#include <qqml.h>
+
+class ForeignDisplay : public QObject
+{
+ Q_OBJECT
+ QML_NAMED_ELEMENT(ThirdPartyDisplay)
+ QML_FOREIGN(ThirdPartyDisplay)
+};
+
+#endif // FOREIGNDISPLAY_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/happybirthdaysong.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/happybirthdaysong.cpp
new file mode 100644
index 0000000000..7a756a4a71
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/happybirthdaysong.cpp
@@ -0,0 +1,45 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "happybirthdaysong.h"
+
+#include <QTimer>
+
+HappyBirthdaySong::HappyBirthdaySong(QObject *parent) : QObject(parent)
+{
+ auto *timer = new QTimer(this);
+ QObject::connect(timer, &QTimer::timeout, this, &HappyBirthdaySong::advance);
+ timer->start(1000);
+}
+
+void HappyBirthdaySong::setTarget(const QQmlProperty &target)
+{
+ m_target = target;
+}
+
+QString HappyBirthdaySong::name() const
+{
+ return m_name;
+}
+
+void HappyBirthdaySong::setName(const QString &name)
+{
+ if (m_name != name) {
+ m_name = name;
+ emit nameChanged();
+ }
+
+ m_lyrics.clear();
+ m_lyrics << "Happy birthday to you,";
+ m_lyrics << "Happy birthday to you,";
+ m_lyrics << "Happy birthday dear " + m_name + ",";
+ m_lyrics << "Happy birthday to you!";
+ m_lyrics << "";
+}
+
+void HappyBirthdaySong::advance()
+{
+ m_line = (m_line + 1) % m_lyrics.count();
+
+ m_target.write(m_lyrics.at(m_line));
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/happybirthdaysong.h b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/happybirthdaysong.h
new file mode 100644
index 0000000000..f87521a760
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/happybirthdaysong.h
@@ -0,0 +1,39 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef HAPPYBIRTHDAYSONG_H
+#define HAPPYBIRTHDAYSONG_H
+
+#include <QQmlPropertyValueSource>
+#include <QQmlProperty>
+#include <qqml.h>
+#include <QStringList>
+
+class HappyBirthdaySong : public QObject, public QQmlPropertyValueSource
+{
+ Q_OBJECT
+ Q_INTERFACES(QQmlPropertyValueSource)
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL)
+ QML_ELEMENT
+public:
+ explicit HappyBirthdaySong(QObject *parent = nullptr);
+
+ void setTarget(const QQmlProperty &) override;
+
+ QString name() const;
+ void setName(const QString &);
+
+signals:
+ void nameChanged();
+
+private slots:
+ void advance();
+
+private:
+ qsizetype m_line = -1;
+ QStringList m_lyrics;
+ QQmlProperty m_target;
+ QString m_name;
+};
+
+#endif // HAPPYBIRTHDAYSONG_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/CMakeLists.txt b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/CMakeLists.txt
new file mode 100644
index 0000000000..7fa6d6a81a
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/CMakeLists.txt
@@ -0,0 +1,17 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(library)
+
+add_library(library ThirdPartyDisplay.cpp ThirdPartyDisplay.h)
+
+qt_extract_metatypes(library)
+
+target_link_libraries(library PUBLIC
+ Qt6::Core
+ Qt6::Qml
+ Qt6::Quick
+ Qt6::Gui
+)
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/ThirdPartyDisplay.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/ThirdPartyDisplay.cpp
new file mode 100644
index 0000000000..5fc4eb2e8f
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/ThirdPartyDisplay.cpp
@@ -0,0 +1,45 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "ThirdPartyDisplay.h"
+#include <QDebug>
+
+const QString &ThirdPartyDisplay::content() const
+{
+ return m_content;
+}
+
+void ThirdPartyDisplay::setContent(const QString &content)
+{
+ if (m_content != content) {
+ m_content = content;
+ emit contentChanged();
+ }
+ qInfo() << QStringLiteral("[Fancy ThirdPartyDisplay] ") + content;
+}
+
+QColor ThirdPartyDisplay::foregroundColor() const
+{
+ return m_foregroundColor;
+}
+
+void ThirdPartyDisplay::setForegroundColor(QColor color)
+{
+ if (m_foregroundColor != color) {
+ m_foregroundColor = color;
+ emit colorsChanged();
+ }
+}
+
+QColor ThirdPartyDisplay::backgroundColor() const
+{
+ return m_backgroundColor;
+}
+
+void ThirdPartyDisplay::setBackgroundColor(QColor color)
+{
+ if (m_backgroundColor != color) {
+ m_backgroundColor = color;
+ emit colorsChanged();
+ }
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/ThirdPartyDisplay.h b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/ThirdPartyDisplay.h
new file mode 100644
index 0000000000..525c9f72cf
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/ThirdPartyDisplay.h
@@ -0,0 +1,36 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef THIRDPARTYDISPLAY_H
+#define THIRDPARTYDISPLAY_H
+
+#include <QColor>
+#include <QObject>
+
+class Q_DECL_EXPORT ThirdPartyDisplay : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString content READ content WRITE setContent NOTIFY contentChanged FINAL)
+ Q_PROPERTY(QColor foregroundColor READ foregroundColor WRITE setForegroundColor NOTIFY colorsChanged FINAL)
+ Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor NOTIFY colorsChanged FINAL)
+public:
+ const QString &content() const;
+ void setContent(const QString &content);
+
+ QColor foregroundColor() const;
+ void setForegroundColor(QColor);
+
+ QColor backgroundColor() const;
+ void setBackgroundColor(QColor);
+
+signals:
+ void contentChanged();
+ void colorsChanged();
+
+private:
+ QString m_content;
+ QColor m_foregroundColor;
+ QColor m_backgroundColor;
+};
+
+#endif // THIRDPARTYDISPLAY_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/library.pro b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/library.pro
new file mode 100644
index 0000000000..f7009c46c9
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/library/library.pro
@@ -0,0 +1,8 @@
+TEMPLATE = lib
+
+CONFIG += static
+
+SOURCES += ThirdPartyDisplay.cpp
+HEADERS += ThirdPartyDisplay.h
+
+QT += core qml gui
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/main.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/main.cpp
new file mode 100644
index 0000000000..9c6f6bcc2f
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/main.cpp
@@ -0,0 +1,50 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "birthdayparty.h"
+#include "person.h"
+
+#include <QCoreApplication>
+#include <QQmlEngine>
+#include <QQmlComponent>
+#include <QDebug>
+#include <QFile>
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.loadFromModule("People", "Main");
+ std::unique_ptr<BirthdayParty> party{ qobject_cast<BirthdayParty *>(component.create()) };
+
+ if (party && party->host()) {
+ qInfo() << party->host()->name() << "is having a birthday!";
+
+ if (qobject_cast<Boy *>(party->host()))
+ qInfo() << "He is inviting:";
+ else
+ qInfo() << "She is inviting:";
+
+ for (qsizetype ii = 0; ii < party->guestCount(); ++ii) {
+ Person *guest = party->guest(ii);
+
+ QDate rsvpDate;
+ QObject *attached = qmlAttachedPropertiesObject<BirthdayParty>(guest, false);
+ if (attached)
+ rsvpDate = attached->property("rsvp").toDate();
+
+ if (rsvpDate.isNull())
+ qInfo() << " " << guest->name() << "RSVP date: Hasn't RSVP'd";
+ else
+ qInfo() << " " << guest->name() << "RSVP date:" << rsvpDate.toString();
+ }
+
+ party->startParty();
+ return QCoreApplication::exec();
+ }
+
+ qWarning() << component.errors();
+ return EXIT_FAILURE;
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/person.cpp b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/person.cpp
new file mode 100644
index 0000000000..53cec6b192
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/person.cpp
@@ -0,0 +1,96 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "person.h"
+
+Person::Person(QObject *parent) : QObject(parent)
+{
+ m_shoe = new ShoeDescription(this);
+}
+
+int ShoeDescription::size() const
+{
+ return m_size;
+}
+
+void ShoeDescription::setSize(int size)
+{
+ if (m_size != size) {
+ m_size = size;
+ emit shoeChanged();
+ }
+}
+
+QColor ShoeDescription::color() const
+{
+ return m_color;
+}
+
+void ShoeDescription::setColor(const QColor &color)
+{
+ if (m_color != color) {
+ m_color = color;
+ emit shoeChanged();
+ }
+}
+
+QString ShoeDescription::brand() const
+{
+ return m_brand;
+}
+
+void ShoeDescription::setBrand(const QString &brand)
+{
+ if (m_brand != brand) {
+ m_brand = brand;
+ emit shoeChanged();
+ }
+}
+
+qreal ShoeDescription::price() const
+{
+ return m_price;
+}
+
+void ShoeDescription::setPrice(qreal price)
+{
+ if (m_price != price) {
+ m_price = price;
+ emit shoeChanged();
+ }
+}
+
+bool ShoeDescription::operatorEqualsImpl(const ShoeDescription &lhs, const ShoeDescription &rhs)
+{
+ return lhs.m_size == rhs.m_size && lhs.m_color == rhs.m_color && lhs.m_brand == rhs.m_brand
+ && lhs.m_price == rhs.m_price;
+}
+
+QString Person::name() const
+{
+ return m_name;
+}
+
+void Person::setName(const QString &name)
+{
+ if (m_name != name) {
+ m_name = name;
+ emit nameChanged();
+ }
+}
+
+ShoeDescription *Person::shoe() const
+{
+ return m_shoe;
+}
+
+void Person::setShoe(ShoeDescription *shoe)
+{
+ if (!shoe)
+ return;
+
+ if (*m_shoe != *shoe) {
+ m_shoe = shoe;
+ emit shoeChanged();
+ }
+}
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/person.h b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/person.h
new file mode 100644
index 0000000000..03c2dab953
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/person.h
@@ -0,0 +1,98 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PERSON_H
+#define PERSON_H
+
+#include <QtQml/qqml.h>
+#include <QObject>
+#include <QColor>
+
+class ShoeDescription : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int size READ size WRITE setSize NOTIFY shoeChanged FINAL)
+ Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY shoeChanged FINAL)
+ Q_PROPERTY(QString brand READ brand WRITE setBrand NOTIFY shoeChanged FINAL)
+ Q_PROPERTY(qreal price READ price WRITE setPrice NOTIFY shoeChanged FINAL)
+ QML_ANONYMOUS
+public:
+ using QObject::QObject;
+
+ int size() const;
+ void setSize(int);
+
+ QColor color() const;
+ void setColor(const QColor &);
+
+ QString brand() const;
+ void setBrand(const QString &);
+
+ qreal price() const;
+ void setPrice(qreal);
+
+ friend bool operator==(const ShoeDescription &lhs, const ShoeDescription &rhs)
+ {
+ return operatorEqualsImpl(lhs, rhs);
+ }
+ friend bool operator!=(const ShoeDescription &lhs, const ShoeDescription &rhs)
+ {
+ return !operatorEqualsImpl(lhs, rhs);
+ }
+
+signals:
+ void shoeChanged();
+
+private:
+ static bool operatorEqualsImpl(const ShoeDescription &, const ShoeDescription &);
+
+ int m_size = 0;
+ QColor m_color;
+ QString m_brand;
+ qreal m_price = 0;
+};
+
+class Person : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL)
+ Q_PROPERTY(ShoeDescription *shoe READ shoe WRITE setShoe NOTIFY shoeChanged FINAL)
+ QML_ELEMENT
+ QML_UNCREATABLE("Person is an abstract base class.")
+public:
+ using QObject::QObject;
+
+ Person(QObject *parent = nullptr);
+
+ QString name() const;
+ void setName(const QString &);
+
+ ShoeDescription *shoe() const;
+ void setShoe(ShoeDescription *shoe);
+
+signals:
+ void nameChanged();
+ void shoeChanged();
+
+private:
+ QString m_name;
+ ShoeDescription *m_shoe = nullptr;
+};
+
+class Boy : public Person
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ using Person::Person;
+};
+
+class Girl : public Person
+{
+ Q_OBJECT
+ QML_ELEMENT
+public:
+ using Person::Person;
+};
+
+#endif // PERSON_H
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/qmldir.in b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/qmldir.in
new file mode 100644
index 0000000000..5289a31938
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/advanced7-Foreign-objects-integration/qmldir.in
@@ -0,0 +1,5 @@
+module People
+typeinfo foreign.qmltypes
+prefer :/qt/qml/People/
+Main 254.0 Main.qml
+depends QtQuick
diff --git a/examples/qml/tutorials/extending-qml-advanced/extending-qml-advanced.pro b/examples/qml/tutorials/extending-qml-advanced/extending-qml-advanced.pro
new file mode 100644
index 0000000000..387d880a7d
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml-advanced/extending-qml-advanced.pro
@@ -0,0 +1,10 @@
+TEMPLATE = subdirs
+
+SUBDIRS += \
+ advanced1-Base-project \
+ advanced2-Inheritance-and-coercion \
+ advanced3-Default-properties \
+ advanced4-Grouped-properties
+ advanced5-Attached-properties \
+ advanced6-Property-value-source \
+ advanced7-Extension-objects \
diff --git a/examples/qml/tutorials/extending-qml/CMakeLists.txt b/examples/qml/tutorials/extending-qml/CMakeLists.txt
index f5fc6e5cfe..87e3eaf54d 100644
--- a/examples/qml/tutorials/extending-qml/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_internal_add_example(chapter1-basics)
qt_internal_add_example(chapter2-methods)
diff --git a/examples/qml/tutorials/extending-qml/chapter1-basics/app.qml b/examples/qml/tutorials/extending-qml/chapter1-basics/App.qml
index ed89ce97c4..ed89ce97c4 100644
--- a/examples/qml/tutorials/extending-qml/chapter1-basics/app.qml
+++ b/examples/qml/tutorials/extending-qml/chapter1-basics/App.qml
diff --git a/examples/qml/tutorials/extending-qml/chapter1-basics/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter1-basics/CMakeLists.txt
index 02ed972ef5..0080197766 100644
--- a/examples/qml/tutorials/extending-qml/chapter1-basics/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter1-basics/CMakeLists.txt
@@ -1,19 +1,13 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(chapter1-basics LANGUAGES CXX)
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/tutorials/extending-qml/chapter1-basics")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(chapter1-basics
main.cpp
piechart.cpp piechart.h
@@ -25,21 +19,29 @@ set_target_properties(chapter1-basics PROPERTIES
)
target_link_libraries(chapter1-basics PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
#![0]
qt_add_qml_module(chapter1-basics
URI Charts
- QML_FILES app.qml
- NO_RESOURCE_TARGET_PATH
+ QML_FILES App.qml
DEPENDENCIES QtQuick
)
#![0]
install(TARGETS chapter1-basics
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET chapter1-basics
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml/chapter1-basics/chapter1-basics.qrc b/examples/qml/tutorials/extending-qml/chapter1-basics/chapter1-basics.qrc
index f1168aef3b..c72f203e67 100644
--- a/examples/qml/tutorials/extending-qml/chapter1-basics/chapter1-basics.qrc
+++ b/examples/qml/tutorials/extending-qml/chapter1-basics/chapter1-basics.qrc
@@ -1,5 +1,6 @@
<RCC>
- <qresource prefix="/">
- <file>app.qml</file>
+ <qresource prefix="/qt/qml/Charts">
+ <file>App.qml</file>
+ <file>qmldir</file>
</qresource>
</RCC>
diff --git a/examples/qml/tutorials/extending-qml/chapter1-basics/main.cpp b/examples/qml/tutorials/extending-qml/chapter1-basics/main.cpp
index f2eaab03bc..bc4bbba809 100644
--- a/examples/qml/tutorials/extending-qml/chapter1-basics/main.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter1-basics/main.cpp
@@ -11,7 +11,7 @@ int main(int argc, char *argv[])
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
- view.setSource(QUrl("qrc:///app.qml"));
+ view.loadFromModule("Charts", "App");
view.show();
return QGuiApplication::exec();
}
diff --git a/examples/qml/tutorials/extending-qml/chapter1-basics/qmldir b/examples/qml/tutorials/extending-qml/chapter1-basics/qmldir
new file mode 100644
index 0000000000..f69878a753
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter1-basics/qmldir
@@ -0,0 +1,6 @@
+module Charts
+typeinfo chapter1-basics.qmltypes
+depends QtQuick
+prefer :/qt/qml/Charts/
+App 254.0 App.qml
+
diff --git a/examples/qml/tutorials/extending-qml/chapter2-methods/app.qml b/examples/qml/tutorials/extending-qml/chapter2-methods/App.qml
index 56597c3f42..56597c3f42 100644
--- a/examples/qml/tutorials/extending-qml/chapter2-methods/app.qml
+++ b/examples/qml/tutorials/extending-qml/chapter2-methods/App.qml
diff --git a/examples/qml/tutorials/extending-qml/chapter2-methods/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter2-methods/CMakeLists.txt
index f0906cf380..3fc7d3ffbf 100644
--- a/examples/qml/tutorials/extending-qml/chapter2-methods/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter2-methods/CMakeLists.txt
@@ -1,19 +1,13 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(chapter2-methods LANGUAGES CXX)
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/tutorials/extending-qml/chapter2-methods")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(chapter2-methods
main.cpp
piechart.cpp piechart.h
@@ -25,21 +19,29 @@ set_target_properties(chapter2-methods PROPERTIES
)
target_link_libraries(chapter2-methods PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(chapter2-methods
URI Charts
- QML_FILES app.qml
- NO_RESOURCE_TARGET_PATH
+ QML_FILES App.qml
DEPENDENCIES QtQuick
)
install(TARGETS chapter2-methods
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET chapter2-methods
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml/chapter2-methods/chapter2-methods.qrc b/examples/qml/tutorials/extending-qml/chapter2-methods/chapter2-methods.qrc
index f1168aef3b..c72f203e67 100644
--- a/examples/qml/tutorials/extending-qml/chapter2-methods/chapter2-methods.qrc
+++ b/examples/qml/tutorials/extending-qml/chapter2-methods/chapter2-methods.qrc
@@ -1,5 +1,6 @@
<RCC>
- <qresource prefix="/">
- <file>app.qml</file>
+ <qresource prefix="/qt/qml/Charts">
+ <file>App.qml</file>
+ <file>qmldir</file>
</qresource>
</RCC>
diff --git a/examples/qml/tutorials/extending-qml/chapter2-methods/main.cpp b/examples/qml/tutorials/extending-qml/chapter2-methods/main.cpp
index f2eaab03bc..bc4bbba809 100644
--- a/examples/qml/tutorials/extending-qml/chapter2-methods/main.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter2-methods/main.cpp
@@ -11,7 +11,7 @@ int main(int argc, char *argv[])
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
- view.setSource(QUrl("qrc:///app.qml"));
+ view.loadFromModule("Charts", "App");
view.show();
return QGuiApplication::exec();
}
diff --git a/examples/qml/tutorials/extending-qml/chapter2-methods/qmldir b/examples/qml/tutorials/extending-qml/chapter2-methods/qmldir
new file mode 100644
index 0000000000..e8b0c98311
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter2-methods/qmldir
@@ -0,0 +1,6 @@
+module Charts
+typeinfo chapter2-methods.qmltypes
+depends QtQuick
+prefer :/qt/qml/Charts/
+App 254.0 App.qml
+
diff --git a/examples/qml/tutorials/extending-qml/chapter3-bindings/app.qml b/examples/qml/tutorials/extending-qml/chapter3-bindings/App.qml
index d29eaf4b9f..d29eaf4b9f 100644
--- a/examples/qml/tutorials/extending-qml/chapter3-bindings/app.qml
+++ b/examples/qml/tutorials/extending-qml/chapter3-bindings/App.qml
diff --git a/examples/qml/tutorials/extending-qml/chapter3-bindings/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter3-bindings/CMakeLists.txt
index 05c567fd30..a842eb48ca 100644
--- a/examples/qml/tutorials/extending-qml/chapter3-bindings/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter3-bindings/CMakeLists.txt
@@ -1,19 +1,13 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(chapter3-bindings LANGUAGES CXX)
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/tutorials/extending-qml/chapter3-bindings")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(chapter3-bindings
main.cpp
piechart.cpp piechart.h
@@ -25,21 +19,29 @@ set_target_properties(chapter3-bindings PROPERTIES
)
target_link_libraries(chapter3-bindings PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(chapter3-bindings
URI Charts
- QML_FILES app.qml
- NO_RESOURCE_TARGET_PATH
+ QML_FILES App.qml
DEPENDENCIES QtQuick
)
install(TARGETS chapter3-bindings
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET chapter3-bindings
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml/chapter3-bindings/chapter3-bindings.qrc b/examples/qml/tutorials/extending-qml/chapter3-bindings/chapter3-bindings.qrc
index f1168aef3b..c72f203e67 100644
--- a/examples/qml/tutorials/extending-qml/chapter3-bindings/chapter3-bindings.qrc
+++ b/examples/qml/tutorials/extending-qml/chapter3-bindings/chapter3-bindings.qrc
@@ -1,5 +1,6 @@
<RCC>
- <qresource prefix="/">
- <file>app.qml</file>
+ <qresource prefix="/qt/qml/Charts">
+ <file>App.qml</file>
+ <file>qmldir</file>
</qresource>
</RCC>
diff --git a/examples/qml/tutorials/extending-qml/chapter3-bindings/main.cpp b/examples/qml/tutorials/extending-qml/chapter3-bindings/main.cpp
index f2eaab03bc..bc4bbba809 100644
--- a/examples/qml/tutorials/extending-qml/chapter3-bindings/main.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter3-bindings/main.cpp
@@ -11,7 +11,7 @@ int main(int argc, char *argv[])
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
- view.setSource(QUrl("qrc:///app.qml"));
+ view.loadFromModule("Charts", "App");
view.show();
return QGuiApplication::exec();
}
diff --git a/examples/qml/tutorials/extending-qml/chapter3-bindings/qmldir b/examples/qml/tutorials/extending-qml/chapter3-bindings/qmldir
new file mode 100644
index 0000000000..f0911d3c89
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter3-bindings/qmldir
@@ -0,0 +1,6 @@
+module Charts
+typeinfo chapter3-bindings.qmltypes
+depends QtQuick
+prefer :/qt/qml/Charts/
+App 254.0 App.qml
+
diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/app.qml b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/App.qml
index 2edcda568e..2edcda568e 100644
--- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/app.qml
+++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/App.qml
diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/CMakeLists.txt
index 3914819640..fd6428093b 100644
--- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/CMakeLists.txt
@@ -1,18 +1,13 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(chapter4-customPropertyTypes LANGUAGES CXX)
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/tutorials/extending-qml/chapter4-customPropertyTypes")
+qt_standard_project_setup(REQUIRES 6.5)
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
#![0]
qt_add_executable(chapter4-customPropertyTypes
main.cpp
@@ -26,21 +21,29 @@ set_target_properties(chapter4-customPropertyTypes PROPERTIES
)
target_link_libraries(chapter4-customPropertyTypes PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
#![1]
qt_add_qml_module(chapter4-customPropertyTypes
URI Charts
- QML_FILES app.qml
- NO_RESOURCE_TARGET_PATH
+ QML_FILES App.qml
DEPENDENCIES QtQuick
)
#![1]
install(TARGETS chapter4-customPropertyTypes
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET chapter4-customPropertyTypes
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/chapter4-customPropertyTypes.qrc b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/chapter4-customPropertyTypes.qrc
index f1168aef3b..c72f203e67 100644
--- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/chapter4-customPropertyTypes.qrc
+++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/chapter4-customPropertyTypes.qrc
@@ -1,5 +1,6 @@
<RCC>
- <qresource prefix="/">
- <file>app.qml</file>
+ <qresource prefix="/qt/qml/Charts">
+ <file>App.qml</file>
+ <file>qmldir</file>
</qresource>
</RCC>
diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/main.cpp b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/main.cpp
index 8833750ebf..09a025ae85 100644
--- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/main.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/main.cpp
@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
- view.setSource(QUrl("qrc:///app.qml"));
+ view.loadFromModule("Charts", "App");
view.show();
return QGuiApplication::exec();
diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/qmldir b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/qmldir
new file mode 100644
index 0000000000..14c64f5269
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/qmldir
@@ -0,0 +1,6 @@
+module Charts
+typeinfo chapter4-customPropertyTypes.qmltypes
+depends QtQuick
+prefer :/qt/qml/Charts/
+App 254.0 App.qml
+
diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/app.qml b/examples/qml/tutorials/extending-qml/chapter5-listproperties/App.qml
index 9e200a9b60..9e200a9b60 100644
--- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/app.qml
+++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/App.qml
diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter5-listproperties/CMakeLists.txt
index d3b70f2017..73984849c0 100644
--- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/CMakeLists.txt
@@ -1,19 +1,13 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(chapter5-listproperties LANGUAGES CXX)
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/tutorials/extending-qml/chapter5-listproperties")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(chapter5-listproperties
main.cpp
piechart.cpp piechart.h
@@ -26,21 +20,29 @@ set_target_properties(chapter5-listproperties PROPERTIES
)
target_link_libraries(chapter5-listproperties PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(chapter5-listproperties
URI Charts
- QML_FILES app.qml
- NO_RESOURCE_TARGET_PATH
+ QML_FILES App.qml
DEPENDENCIES QtQuick
)
install(TARGETS chapter5-listproperties
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET chapter5-listproperties
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/chapter5-listproperties.qrc b/examples/qml/tutorials/extending-qml/chapter5-listproperties/chapter5-listproperties.qrc
index f1168aef3b..c72f203e67 100644
--- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/chapter5-listproperties.qrc
+++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/chapter5-listproperties.qrc
@@ -1,5 +1,6 @@
<RCC>
- <qresource prefix="/">
- <file>app.qml</file>
+ <qresource prefix="/qt/qml/Charts">
+ <file>App.qml</file>
+ <file>qmldir</file>
</qresource>
</RCC>
diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/main.cpp b/examples/qml/tutorials/extending-qml/chapter5-listproperties/main.cpp
index 3d11a689a6..12d4d49438 100644
--- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/main.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/main.cpp
@@ -12,7 +12,7 @@ int main(int argc, char *argv[])
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
- view.setSource(QUrl("qrc:///app.qml"));
+ view.loadFromModule("Charts", "App");
view.show();
return QGuiApplication::exec();
}
diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/qmldir b/examples/qml/tutorials/extending-qml/chapter5-listproperties/qmldir
new file mode 100644
index 0000000000..cebd0320ab
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/qmldir
@@ -0,0 +1,6 @@
+module Charts
+typeinfo chapter5-listproperties.qmltypes
+depends QtQuick
+prefer :/qt/qml/Charts/
+App 254.0 App.qml
+
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/app.qml b/examples/qml/tutorials/extending-qml/chapter6-plugins/App.qml
index 1d1cb74176..1d1cb74176 100644
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/app.qml
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/App.qml
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt
index f1a7ef1b51..bd88766e0c 100644
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt
@@ -1,19 +1,13 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(chapter6-plugins LANGUAGES CXX)
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/tutorials/extending-qml/chapter6-plugins")
-
find_package(Qt6 REQUIRED COMPONENTS Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(chapter6-plugins
main.cpp
)
@@ -24,20 +18,29 @@ set_target_properties(chapter6-plugins PROPERTIES
)
target_link_libraries(chapter6-plugins PRIVATE
- Qt::Qml
- Qt::Quick
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(chapter6-plugins
URI ChartsApp
- QML_FILES app.qml
- NO_RESOURCE_TARGET_PATH
+ QML_FILES App.qml
)
+add_subdirectory(Charts)
+
install(TARGETS chapter6-plugins
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-add_subdirectory(Charts)
+qt_generate_deploy_qml_app_script(
+ TARGET chapter6-plugins
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
+
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/CMakeLists.txt
index 4a8f2e0b7b..a0fed166e0 100644
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt6_policy(SET QTP0001 NEW)
qt6_add_qml_module(chartsplugin
@@ -14,40 +14,16 @@ target_sources(chartsplugin PRIVATE
)
target_link_libraries(chartsplugin PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-if(QT6_IS_SHARED_LIBS_BUILD AND APPLE)
- get_target_property(is_bundle chapter6-plugins MACOSX_BUNDLE)
- if(is_bundle)
- # The application's main.cpp adds an explicit QML import path to look for qml modules under
- # a PlugIns subdirectory in a macOS bundle.
- # Copy the qmldir and shared library qml plugin.
-
- set(charts_dir "$<TARGET_FILE_DIR:chartsplugin>")
- set(chars_qmldir_file "${charts_dir}/qmldir")
- set(app_dir "$<TARGET_FILE_DIR:chapter6-plugins>")
- set(bundle_charts_dir "${app_dir}/../PlugIns/Charts")
-
- add_custom_command(TARGET chartsplugin POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E make_directory ${bundle_charts_dir}
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- $<TARGET_FILE:chartsplugin> ${bundle_charts_dir}
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- ${chars_qmldir_file} ${bundle_charts_dir}
- VERBATIM
- )
- endif()
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLEDIR}/Charts")
install(TARGETS chartsplugin
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/Charts"
+ LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR}/Charts"
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qmldir
- DESTINATION "${INSTALL_EXAMPLEDIR}")
+ DESTINATION "${CMAKE_INSTALL_BINDIR}/Charts"
+)
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/qmldir b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/qmldir
index d9e8471b3c..4536f60e91 100644
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/qmldir
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/qmldir
@@ -1,2 +1,5 @@
module Charts
-plugin chartsplugin
+optional plugin chartsplugin
+typeinfo plugins.qmltypes
+depends QtQuick
+prefer :/qt/qml/Charts/
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/app.qrc b/examples/qml/tutorials/extending-qml/chapter6-plugins/app.qrc
index f1168aef3b..5c4567d0d9 100644
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/app.qrc
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/app.qrc
@@ -1,5 +1,6 @@
<RCC>
- <qresource prefix="/">
- <file>app.qml</file>
+ <qresource prefix="/qt/qml/ChartsApp">
+ <file>App.qml</file>
+ <file>qmldir</file>
</qresource>
</RCC>
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/main.cpp b/examples/qml/tutorials/extending-qml/chapter6-plugins/main.cpp
index 3475401ebd..7dfb1cf5a7 100644
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/main.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/main.cpp
@@ -9,12 +9,12 @@ int main(int argc, char *argv[])
QGuiApplication app(argc, argv);
//![0]
QQuickView view;
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
view.engine()->addImportPath(app.applicationDirPath() + "/../PlugIns");
#endif
//![0]
view.setResizeMode(QQuickView::SizeRootObjectToView);
- view.setSource(QUrl("qrc:///app.qml"));
+ view.loadFromModule("ChartsApp", "App");
view.show();
return app.exec();
}
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/qmldir b/examples/qml/tutorials/extending-qml/chapter6-plugins/qmldir
new file mode 100644
index 0000000000..d7fa4b260b
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/qmldir
@@ -0,0 +1,3 @@
+module ChartsApp
+prefer :/qt/qml/ChartsApp/
+App 254.0 App.qml
diff --git a/examples/qml/xmlhttprequest/CMakeLists.txt b/examples/qml/xmlhttprequest/CMakeLists.txt
deleted file mode 100644
index 63d15c37dd..0000000000
--- a/examples/qml/xmlhttprequest/CMakeLists.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(xmlhttprequest LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/xmlhttprequest")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-
-qt_add_executable(xmlhttprequestexample
- WIN32
- MACOSX_BUNDLE
- main.cpp
-)
-
-qt_add_qml_module(xmlhttprequestexample
- URI xmlhttprequest
- AUTO_RESOURCE_PREFIX
- QML_FILES
- "methods.js"
- "xmlhttprequest.qml"
- RESOURCES
- data.xml
-)
-
-target_link_libraries(xmlhttprequestexample PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-install(TARGETS xmlhttprequestexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/xmlhttprequest/data.xml b/examples/qml/xmlhttprequest/data.xml
deleted file mode 100644
index 8b7f1e116d..0000000000
--- a/examples/qml/xmlhttprequest/data.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<data>
- <element1 />
- <element2 />
-</data>
-
diff --git a/examples/qml/xmlhttprequest/doc/images/qml-xmlhttprequest-example.png b/examples/qml/xmlhttprequest/doc/images/qml-xmlhttprequest-example.png
deleted file mode 100644
index f585613427..0000000000
--- a/examples/qml/xmlhttprequest/doc/images/qml-xmlhttprequest-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/xmlhttprequest/doc/src/xmlhttprequest.qdoc b/examples/qml/xmlhttprequest/doc/src/xmlhttprequest.qdoc
deleted file mode 100644
index fc6ca600cd..0000000000
--- a/examples/qml/xmlhttprequest/doc/src/xmlhttprequest.qdoc
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-/*!
- \title Qt Quick Examples - XMLHttpRequest
- \example xmlhttprequest
- \brief This is a collection of XMLHttpRequest examples.
- \image qml-xmlhttprequest-example.png
-
- \e XMLHttpRequest contains a small QML example demonstrating \l{Qt QML}'s
- XMLHttpRequest functionality. For more information, visit the section about
- \l{QML Global Object#XMLHttpRequest}{XMLHttpRequest}.
-
- \include examples-run.qdocinc
-
- \section1 Get Data
-
- \e{Get data} uses the XMLHttpRequest API to fetch an XML document from a
- server. It displays the header of the HTTP response and the body of the XML
- document.
-*/
diff --git a/examples/qml/xmlhttprequest/main.cpp b/examples/qml/xmlhttprequest/main.cpp
deleted file mode 100644
index f76ca49de5..0000000000
--- a/examples/qml/xmlhttprequest/main.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include <QDir>
-#include <QGuiApplication>
-#include <QQmlFileSelector>
-#include <QQuickView>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
- app.setOrganizationName("QtProject");
- app.setOrganizationDomain("qt-project.org");
- app.setApplicationName(QFileInfo(app.applicationFilePath()).baseName());
- QQuickView view;
-
- qputenv("QML_XHR_ALLOW_FILE_READ", QByteArray("1"));
-
- view.connect(view.engine(), &QQmlEngine::quit, &app, &QCoreApplication::quit);
- view.setSource(QUrl("qrc:/qt/qml/xmlhttprequest/xmlhttprequest.qml"));
- if (view.status() == QQuickView::Error)
- return -1;
- view.setResizeMode(QQuickView::SizeRootObjectToView);
- view.show();
- return app.exec();
-}
diff --git a/examples/qml/xmlhttprequest/methods.js b/examples/qml/xmlhttprequest/methods.js
deleted file mode 100644
index 12bde365b2..0000000000
--- a/examples/qml/xmlhttprequest/methods.js
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-function showRequestInfo(text) {
- msg.text = msg.text + "\n" + text
-}
-
-function makeRequest()
-{
-
- var doc = new XMLHttpRequest();
- msg.text = "";
- doc.onreadystatechange = function() {
- if (doc.readyState == XMLHttpRequest.HEADERS_RECEIVED) {
- showRequestInfo("Headers -->");
- showRequestInfo(doc.getAllResponseHeaders ());
- showRequestInfo("Last modified -->");
- showRequestInfo(doc.getResponseHeader ("Last-Modified"));
-
- } else if (doc.readyState == XMLHttpRequest.DONE) {
- var a = doc.responseXML.documentElement;
- for (var ii = 0; ii < a.childNodes.length; ++ii) {
- showRequestInfo(a.childNodes[ii].nodeName);
- }
- showRequestInfo("Headers -->");
- showRequestInfo(doc.getAllResponseHeaders ());
- showRequestInfo("Last modified -->");
- showRequestInfo(doc.getResponseHeader ("Last-Modified"));
- }
- }
-
- doc.open("GET", "data.xml");
- doc.send();
-}
diff --git a/examples/qml/xmlhttprequest/xmlhttprequest.pro b/examples/qml/xmlhttprequest/xmlhttprequest.pro
deleted file mode 100644
index 6d572fff59..0000000000
--- a/examples/qml/xmlhttprequest/xmlhttprequest.pro
+++ /dev/null
@@ -1,15 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-RESOURCES += \
- xmlhttprequest.qrc
-
-EXAMPLE_FILES = \
- data.xml
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/xmlhttprequest
-INSTALLS += target
-
-DISTFILES += \
- methods.js
diff --git a/examples/qml/xmlhttprequest/xmlhttprequest.qml b/examples/qml/xmlhttprequest/xmlhttprequest.qml
deleted file mode 100644
index 434648c16f..0000000000
--- a/examples/qml/xmlhttprequest/xmlhttprequest.qml
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-import "methods.js" as Utils
-
-
-Item {
- height: 480
- width: 320
-
- property alias msg: ttext
-
- Label { id: ttext; anchors.fill: parent; anchors.margins: 10 }
-
- Button {
- id: button
- anchors.horizontalCenter: parent.horizontalCenter;
- anchors.bottom: parent.bottom
- anchors.margins: 10
- antialiasing: true
-
- text: qsTr("Request data.xml")
-
- onClicked: Utils.makeRequest()
- }
-}
diff --git a/examples/qml/xmlhttprequest/xmlhttprequest.qmlproject b/examples/qml/xmlhttprequest/xmlhttprequest.qmlproject
deleted file mode 100644
index 088042a100..0000000000
--- a/examples/qml/xmlhttprequest/xmlhttprequest.qmlproject
+++ /dev/null
@@ -1,16 +0,0 @@
-import QmlProject 1.0
-
-Project {
- mainFile: "xmlhttprequest.qml"
- /* Include .qml, .js, and image files from current directory and subdirectories */
-
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-} \ No newline at end of file
diff --git a/examples/qml/xmlhttprequest/xmlhttprequest.qrc b/examples/qml/xmlhttprequest/xmlhttprequest.qrc
deleted file mode 100644
index 39d2a62393..0000000000
--- a/examples/qml/xmlhttprequest/xmlhttprequest.qrc
+++ /dev/null
@@ -1,7 +0,0 @@
-<RCC>
- <qresource prefix="/qt/qml/xmlhttprequest">
- <file>xmlhttprequest.qml</file>
- <file>methods.js</file>
- <file>data.xml</file>
- </qresource>
-</RCC>
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter1/CMakeLists.txt b/examples/qmlcompiler/tutorials/helloworld/chapter1/CMakeLists.txt
new file mode 100644
index 0000000000..b9466b61b3
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter1/CMakeLists.txt
@@ -0,0 +1,22 @@
+cmake_minimum_required(VERSION 3.21)
+
+project(hello_world_plugin VERSION 1.0.0 LANGUAGES CXX)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+find_package(Qt6 REQUIRED COMPONENTS QmlCompiler)
+
+qt_standard_project_setup(
+ REQUIRES 6.6
+)
+
+qt_add_plugin(HelloWorldPlugin)
+
+target_sources(HelloWorldPlugin
+ PRIVATE
+ helloplugin.h
+ helloplugin.cpp
+)
+
+target_link_libraries(HelloWorldPlugin PRIVATE Qt::QmlCompiler)
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter1/helloplugin.cpp b/examples/qmlcompiler/tutorials/helloworld/chapter1/helloplugin.cpp
new file mode 100644
index 0000000000..ad36e64fae
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter1/helloplugin.cpp
@@ -0,0 +1,19 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#include "helloplugin.h"
+#include <QDebug>
+
+using namespace Qt::StringLiterals;
+
+static constexpr QQmlSA::LoggerWarningId helloWorld { "Plugin.HelloWorld.hello-world" };
+
+void HelloWorldPlugin::registerPasses(QQmlSA::PassManager *manager, const QQmlSA::Element &rootElement)
+{
+ const bool pluginIsEnabled = manager->isCategoryEnabled(helloWorld);
+ qDebug() << "Hello World plugin is" << (pluginIsEnabled ? "enabled" : "disabled");
+ if (!pluginIsEnabled)
+ return; // skip registration if the plugin is disabled anyway
+ // here we will later register our passes
+}
+
+#include "moc_helloplugin.cpp"
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter1/helloplugin.h b/examples/qmlcompiler/tutorials/helloworld/chapter1/helloplugin.h
new file mode 100644
index 0000000000..6666c78be0
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter1/helloplugin.h
@@ -0,0 +1,21 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef HELLO_PLUGIN_H
+#define HELLO_PLUGIN_H
+
+#include <QtCore/qobject.h>
+#include <QtQmlCompiler/qqmlsa.h>
+
+class HelloWorldPlugin : public QObject, public QQmlSA::LintPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QmlLintPluginInterface_iid FILE "plugin.json")
+ Q_INTERFACES(QQmlSA::LintPlugin)
+
+public:
+ void registerPasses(QQmlSA::PassManager *manager, const QQmlSA::Element &rootElement) override;
+};
+
+#endif
+
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter1/plugin.json b/examples/qmlcompiler/tutorials/helloworld/chapter1/plugin.json
new file mode 100644
index 0000000000..3d8c1ff206
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter1/plugin.json
@@ -0,0 +1,13 @@
+{
+ "name": "HelloWorld",
+ "author": "Qt Example",
+ "description": "Demonstrates how to write a qmllint plugin",
+ "version": "1.0",
+ "loggingCategories": [
+ {
+ "name": "hello-world",
+ "settingsName": "HelloWorld",
+ "description": "Used to create test messages"
+ }
+ ]
+}
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter1/test.qml b/examples/qmlcompiler/tutorials/helloworld/chapter1/test.qml
new file mode 100644
index 0000000000..99af71ad7d
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter1/test.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: root
+
+ property string greeting: "Hello"
+
+ component MyText : Text {}
+
+ component NotText : Item {
+ property string text
+ }
+
+ Text { text: "Hello world!" }
+ Text { text: root.greeting }
+ Text { text: "Goodbye world!" }
+ NotText {
+ text: "Does not trigger"
+ MyText { text: "Goodbye world!" }
+ }
+}
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter2/CMakeLists.txt b/examples/qmlcompiler/tutorials/helloworld/chapter2/CMakeLists.txt
new file mode 100644
index 0000000000..b9466b61b3
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter2/CMakeLists.txt
@@ -0,0 +1,22 @@
+cmake_minimum_required(VERSION 3.21)
+
+project(hello_world_plugin VERSION 1.0.0 LANGUAGES CXX)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+find_package(Qt6 REQUIRED COMPONENTS QmlCompiler)
+
+qt_standard_project_setup(
+ REQUIRES 6.6
+)
+
+qt_add_plugin(HelloWorldPlugin)
+
+target_sources(HelloWorldPlugin
+ PRIVATE
+ helloplugin.h
+ helloplugin.cpp
+)
+
+target_link_libraries(HelloWorldPlugin PRIVATE Qt::QmlCompiler)
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter2/helloplugin.cpp b/examples/qmlcompiler/tutorials/helloworld/chapter2/helloplugin.cpp
new file mode 100644
index 0000000000..431ad97f16
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter2/helloplugin.cpp
@@ -0,0 +1,56 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "helloplugin.h"
+#include <QDebug>
+
+using namespace Qt::StringLiterals;
+
+static constexpr QQmlSA::LoggerWarningId helloWorld { "Plugin.HelloWorld.hello-world" };
+
+class HelloWorldElementPass : public QQmlSA::ElementPass
+{
+public:
+ HelloWorldElementPass(QQmlSA::PassManager *manager);
+ bool shouldRun(const QQmlSA::Element &element) override;
+ void run(const QQmlSA::Element &element) override;
+private:
+ QQmlSA::Element m_textType;
+};
+
+HelloWorldElementPass::HelloWorldElementPass(QQmlSA::PassManager *manager)
+ : QQmlSA::ElementPass(manager)
+{
+ m_textType = resolveType("QtQuick", "Text");
+}
+
+bool HelloWorldElementPass::shouldRun(const QQmlSA::Element &element)
+{
+ if (!element.inherits(m_textType))
+ return false;
+ if (!element.hasOwnPropertyBindings(u"text"_s))
+ return false;
+ return true;
+}
+
+void HelloWorldElementPass::run(const QQmlSA::Element &element)
+{
+ auto textBindings = element.ownPropertyBindings(u"text"_s);
+ for (const auto &textBinding: textBindings) {
+ if (textBinding.bindingType() != QQmlSA::BindingType::StringLiteral)
+ continue;
+ if (textBinding.stringValue() != u"Hello world!"_s)
+ emitWarning("Incorrect greeting", helloWorld, textBinding.sourceLocation());
+ }
+}
+
+void HelloWorldPlugin::registerPasses(QQmlSA::PassManager *manager, const QQmlSA::Element &rootElement)
+{
+ const bool pluginIsEnabled = manager->isCategoryEnabled(helloWorld);
+ qDebug() << "Hello World plugin is" << (pluginIsEnabled ? "enabled" : "disabled");
+ if (!pluginIsEnabled)
+ return; // skip registration if the plugin is disabled anyway
+ manager->registerElementPass(std::make_unique<HelloWorldElementPass>(manager));
+}
+
+#include "moc_helloplugin.cpp"
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter2/helloplugin.h b/examples/qmlcompiler/tutorials/helloworld/chapter2/helloplugin.h
new file mode 100644
index 0000000000..6666c78be0
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter2/helloplugin.h
@@ -0,0 +1,21 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef HELLO_PLUGIN_H
+#define HELLO_PLUGIN_H
+
+#include <QtCore/qobject.h>
+#include <QtQmlCompiler/qqmlsa.h>
+
+class HelloWorldPlugin : public QObject, public QQmlSA::LintPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QmlLintPluginInterface_iid FILE "plugin.json")
+ Q_INTERFACES(QQmlSA::LintPlugin)
+
+public:
+ void registerPasses(QQmlSA::PassManager *manager, const QQmlSA::Element &rootElement) override;
+};
+
+#endif
+
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter2/plugin.json b/examples/qmlcompiler/tutorials/helloworld/chapter2/plugin.json
new file mode 100644
index 0000000000..3d8c1ff206
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter2/plugin.json
@@ -0,0 +1,13 @@
+{
+ "name": "HelloWorld",
+ "author": "Qt Example",
+ "description": "Demonstrates how to write a qmllint plugin",
+ "version": "1.0",
+ "loggingCategories": [
+ {
+ "name": "hello-world",
+ "settingsName": "HelloWorld",
+ "description": "Used to create test messages"
+ }
+ ]
+}
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter2/test.qml b/examples/qmlcompiler/tutorials/helloworld/chapter2/test.qml
new file mode 100644
index 0000000000..99af71ad7d
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter2/test.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: root
+
+ property string greeting: "Hello"
+
+ component MyText : Text {}
+
+ component NotText : Item {
+ property string text
+ }
+
+ Text { text: "Hello world!" }
+ Text { text: root.greeting }
+ Text { text: "Goodbye world!" }
+ NotText {
+ text: "Does not trigger"
+ MyText { text: "Goodbye world!" }
+ }
+}
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter3/CMakeLists.txt b/examples/qmlcompiler/tutorials/helloworld/chapter3/CMakeLists.txt
new file mode 100644
index 0000000000..b9466b61b3
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter3/CMakeLists.txt
@@ -0,0 +1,22 @@
+cmake_minimum_required(VERSION 3.21)
+
+project(hello_world_plugin VERSION 1.0.0 LANGUAGES CXX)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+find_package(Qt6 REQUIRED COMPONENTS QmlCompiler)
+
+qt_standard_project_setup(
+ REQUIRES 6.6
+)
+
+qt_add_plugin(HelloWorldPlugin)
+
+target_sources(HelloWorldPlugin
+ PRIVATE
+ helloplugin.h
+ helloplugin.cpp
+)
+
+target_link_libraries(HelloWorldPlugin PRIVATE Qt::QmlCompiler)
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter3/helloplugin.cpp b/examples/qmlcompiler/tutorials/helloworld/chapter3/helloplugin.cpp
new file mode 100644
index 0000000000..93ee6d80c4
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter3/helloplugin.cpp
@@ -0,0 +1,64 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "helloplugin.h"
+#include <QDebug>
+
+using namespace Qt::StringLiterals;
+
+static constexpr QQmlSA::LoggerWarningId helloWorld { "Plugin.HelloWorld.hello-world" };
+
+class HelloWorldElementPass : public QQmlSA::ElementPass
+{
+public:
+ HelloWorldElementPass(QQmlSA::PassManager *manager);
+ bool shouldRun(const QQmlSA::Element &element) override;
+ void run(const QQmlSA::Element &element) override;
+private:
+ QQmlSA::Element m_textType;
+};
+
+HelloWorldElementPass::HelloWorldElementPass(QQmlSA::PassManager *manager)
+ : QQmlSA::ElementPass(manager)
+{
+ m_textType = resolveType("QtQuick", "Text");
+}
+
+bool HelloWorldElementPass::shouldRun(const QQmlSA::Element &element)
+{
+ if (!element.inherits(m_textType))
+ return false;
+ if (!element.hasOwnPropertyBindings(u"text"_s))
+ return false;
+ return true;
+}
+
+void HelloWorldElementPass::run(const QQmlSA::Element &element)
+{
+ auto textBindings = element.ownPropertyBindings(u"text"_s);
+ for (const auto &textBinding: textBindings) {
+ if (textBinding.bindingType() != QQmlSA::BindingType::StringLiteral)
+ continue;
+ QString currentBinding = textBinding.stringValue();
+ if (currentBinding == u"Hello world!"_s)
+ continue;
+ if (currentBinding == u"Goodbye world!"_s) {
+ QQmlSA::FixSuggestion suggestion(u"Replace 'Goodbye' with 'Hello'"_s,
+ textBinding.sourceLocation(), u"\"Hello world!\""_s);
+ suggestion.setAutoApplicable(true);
+ emitWarning("Incorrect greeting", helloWorld, textBinding.sourceLocation(), suggestion);
+ }
+ }
+}
+
+
+void HelloWorldPlugin::registerPasses(QQmlSA::PassManager *manager, const QQmlSA::Element &rootElement)
+{
+ const bool pluginIsEnabled = manager->isCategoryEnabled(helloWorld);
+ qDebug() << "Hello World plugin is" << (pluginIsEnabled ? "enabled" : "disabled");
+ if (!pluginIsEnabled)
+ return; // skip registration if the plugin is disabled anyway
+ manager->registerElementPass(std::make_unique<HelloWorldElementPass>(manager));
+}
+
+#include "moc_helloplugin.cpp"
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter3/helloplugin.h b/examples/qmlcompiler/tutorials/helloworld/chapter3/helloplugin.h
new file mode 100644
index 0000000000..6666c78be0
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter3/helloplugin.h
@@ -0,0 +1,21 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef HELLO_PLUGIN_H
+#define HELLO_PLUGIN_H
+
+#include <QtCore/qobject.h>
+#include <QtQmlCompiler/qqmlsa.h>
+
+class HelloWorldPlugin : public QObject, public QQmlSA::LintPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QmlLintPluginInterface_iid FILE "plugin.json")
+ Q_INTERFACES(QQmlSA::LintPlugin)
+
+public:
+ void registerPasses(QQmlSA::PassManager *manager, const QQmlSA::Element &rootElement) override;
+};
+
+#endif
+
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter3/plugin.json b/examples/qmlcompiler/tutorials/helloworld/chapter3/plugin.json
new file mode 100644
index 0000000000..3d8c1ff206
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter3/plugin.json
@@ -0,0 +1,13 @@
+{
+ "name": "HelloWorld",
+ "author": "Qt Example",
+ "description": "Demonstrates how to write a qmllint plugin",
+ "version": "1.0",
+ "loggingCategories": [
+ {
+ "name": "hello-world",
+ "settingsName": "HelloWorld",
+ "description": "Used to create test messages"
+ }
+ ]
+}
diff --git a/examples/qmlcompiler/tutorials/helloworld/chapter3/test.qml b/examples/qmlcompiler/tutorials/helloworld/chapter3/test.qml
new file mode 100644
index 0000000000..42fbaa108f
--- /dev/null
+++ b/examples/qmlcompiler/tutorials/helloworld/chapter3/test.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+// [0]
+import QtQuick
+
+Item {
+ id: root
+
+ property string greeting: "Hello"
+
+ component MyText : Text {}
+
+ component NotText : Item {
+ property string text
+ }
+
+ Text { text: "Hello world!" }
+ Text { text: root.greeting }
+ Text { text: "Goodbye world!" }
+ NotText {
+ text: "Does not trigger"
+ MyText { text: "Goodbye world!" }
+ }
+}
+// [0]
diff --git a/examples/qmltest/CMakeLists.txt b/examples/qmltest/CMakeLists.txt
deleted file mode 100644
index be5db5fbd1..0000000000
--- a/examples/qmltest/CMakeLists.txt
+++ /dev/null
@@ -1 +0,0 @@
-qt_internal_add_example(qmltest)
diff --git a/examples/qmltest/qmltest.pro b/examples/qmltest/qmltest.pro
deleted file mode 100644
index b98cc03c65..0000000000
--- a/examples/qmltest/qmltest.pro
+++ /dev/null
@@ -1,2 +0,0 @@
-TEMPLATE = subdirs
-SUBDIRS += qmltest
diff --git a/examples/qmltest/qmltest/CMakeLists.txt b/examples/qmltest/qmltest/CMakeLists.txt
deleted file mode 100644
index 2fa3c0898c..0000000000
--- a/examples/qmltest/qmltest/CMakeLists.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(tst_qmltestexample LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/examples)
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui QuickTest)
-
-qt_add_executable(tst_qmltestexample
- tst_qmltest.cpp
-)
-
-set_target_properties(tst_qmltestexample PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(tst_qmltestexample PUBLIC
- Qt::Core
- Qt::Gui
-
- Qt::QuickTest
-
-)
-
-# This line get added, but does not make sense
-#if(QT_BUILDING_QT)
-# target_link_libraries(tst_qmltestexample PUBLIC
-# Qt::Qml
-# Qt::QuickTest
-# )
-#endif()
-
-if(MACOS AND QT_BUILDING_QT)
- set_target_properties(tst_qmltestexample PROPERTIES
- MACOSX_BUNDLE FALSE
- )
-endif()
-
-install(TARGETS tst_qmltestexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qmltest/qmltest/qmltest.pro b/examples/qmltest/qmltest/qmltest.pro
deleted file mode 100644
index b5893c5a1e..0000000000
--- a/examples/qmltest/qmltest/qmltest.pro
+++ /dev/null
@@ -1,26 +0,0 @@
-TEMPLATE=app
-TARGET=tst_qmltestexample
-
-SOURCES += tst_qmltest.cpp
-
-!QTDIR_build {
-# This is the code actual testcases should use:
-
-CONFIG += qmltestcase
-
-TESTDATA += tst_basic.qml tst_item.qml
-
-} else {
-# This code exists solely for the purpose of building this example
-# inside the examples/ hierarchy.
-
-QT += qml qmltest
-
-macx: CONFIG -= app_bundle
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qmltest/qmltest
-qml.files = tst_basic.qml tst_item.qml
-qml.path = $$[QT_INSTALL_EXAMPLES]/qmltest/qmltest
-INSTALLS += target qml
-
-}
diff --git a/examples/qmltest/qmltest/tst_basic.qml b/examples/qmltest/qmltest/tst_basic.qml
deleted file mode 100644
index e3ce172beb..0000000000
--- a/examples/qmltest/qmltest/tst_basic.qml
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtTest
-
-TestCase {
- name: "BasicTests"
-
- function test_pass() {
- compare(2 + 2, 4, "2 + 2")
- }
-
- function test_fail() {
- expectFail("", "this is the fail we wanted")
- compare(2 + 2, 5, "2 + 2")
- }
-
- function test_skip() {
- skip("skipping")
- }
-
- function test_expecting() {
- expectFail("", "this is the fail we wanted")
- verify(false)
- }
-
- function test_table_data() {
- return [
- {tag: "2 + 2 = 4", a: 2, b: 2, answer: 4 },
- {tag: "2 + 6 = 8", a: 2, b: 6, answer: 8 },
- {tag: "2 + 2 = 5", a: 2, b: 2, answer: 5 }, // fail
- ]
- }
-
- function test_table(data) {
- if (data.answer === 5)
- expectFail("", "this is the fail we wanted")
- compare(data.a + data.b, data.answer)
- }
-}
diff --git a/examples/qmltest/qmltest/tst_item.qml b/examples/qmltest/qmltest/tst_item.qml
deleted file mode 100644
index 047bd254dd..0000000000
--- a/examples/qmltest/qmltest/tst_item.qml
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtTest
-
-Rectangle {
- id: foo
- width: 640; height: 480
- color: "cyan"
-
- TestCase {
- name: "ItemTests"
- id: test1
-
- function test_color() {
- compare(foo.color, "#00ffff")
- }
- }
-}
diff --git a/examples/qmltest/qmltest/tst_qmltest.cpp b/examples/qmltest/qmltest/tst_qmltest.cpp
deleted file mode 100644
index d9b367c5a8..0000000000
--- a/examples/qmltest/qmltest/tst_qmltest.cpp
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include <QtQuickTest/quicktest.h>
-QUICK_TEST_MAIN(qmltestexample)
diff --git a/examples/quick/CMakeLists.txt b/examples/quick/CMakeLists.txt
index f063585486..ae3580eb56 100644
--- a/examples/quick/CMakeLists.txt
+++ b/examples/quick/CMakeLists.txt
@@ -1,45 +1,41 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_internal_add_example(quick-accessibility)
qt_internal_add_example(animation)
qt_internal_add_example(draganddrop)
-qt_internal_add_example(externaldraganddrop)
qt_internal_add_example(canvas)
qt_internal_add_example(imageelements)
qt_internal_add_example(keyinteraction)
qt_internal_add_example(layouts)
+qt_internal_add_example(responsivelayouts)
qt_internal_add_example(localstorage)
add_subdirectory(models)
qt_internal_add_example(views)
add_subdirectory(tableview)
qt_internal_add_example(mousearea)
qt_internal_add_example(positioners)
-qt_internal_add_example(righttoleft)
add_subdirectory(scenegraph)
qt_internal_add_example(shadereffects)
qt_internal_add_example(text)
-qt_internal_add_example(threading)
-qt_internal_add_example(touchinteraction)
add_subdirectory(tutorials)
add_subdirectory(customitems)
qt_internal_add_example(imageprovider)
qt_internal_add_example(imageresponseprovider)
qt_internal_add_example(window)
add_subdirectory(particles)
-qt_internal_add_example(delegatechooser)
-qt_internal_add_example(shapes)
qt_internal_add_example(itemvariablerefreshrate)
add_subdirectory(multieffect)
if(QT_FEATURE_opengl OR QT_FEATURE_opengles2 OR QT_FEATURE_opengles3)
add_subdirectory(rendercontrol)
endif()
-if(TARGET Qt::Widgets)
+if(TARGET Qt6::Widgets)
qt_internal_add_example(embeddedinwidgets)
endif()
-if(TARGET Qt::QuickWidgets AND TARGET Qt::Widgets AND (QT_FEATURE_opengl OR QT_FEATURE_opengles2 OR QT_FEATURE_opengles3))
+if(TARGET Qt6::QuickWidgets AND TARGET Qt6::Widgets AND (QT_FEATURE_opengl OR QT_FEATURE_opengles2 OR QT_FEATURE_opengles3))
add_subdirectory(quickwidgets)
endif()
+add_subdirectory(quickshapes)
# qt_examples_build_end() misses at least some of these due to some
# source subdirectories being added multiple times. See QTBUG-96159.
@@ -48,14 +44,9 @@ set(reused_dir_targets
canvas_shared
views_shared
positioners_shared
- righttoleft_shared
text_shared
- threading_shared
- touchinteraction_shared
window_shared
- shapes_shared
imageelements_shared
- delegatechooser_shared
pointerhandlers_shared
affectors_shared
emitters_shared
@@ -70,7 +61,7 @@ set(reused_dir_targets
foreach(target IN LISTS reused_dir_targets)
if(TARGET ${target})
qt_autogen_tools(${target} ENABLE_AUTOGEN_TOOLS moc rcc)
- if(TARGET Qt::Widgets)
+ if(TARGET Qt6::Widgets)
qt_autogen_tools(${target} ENABLE_AUTOGEN_TOOLS uic)
endif()
endif()
diff --git a/examples/quick/animation/CMakeLists.txt b/examples/quick/animation/CMakeLists.txt
index 1c9d954c42..5dc6d73547 100644
--- a/examples/quick/animation/CMakeLists.txt
+++ b/examples/quick/animation/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(animation LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/animation")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../shared" "shared")
@@ -23,17 +17,16 @@ qt_add_executable(animationexample
)
target_link_libraries(animationexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
add_dependencies(animationexample animation_shared)
qt_add_qml_module(animationexample
URI animation
- AUTO_RESOURCE_PREFIX
QML_FILES
"animation.qml"
"basics/animators.qml"
@@ -59,9 +52,16 @@ qt_add_qml_module(animationexample
)
install(TARGETS animationexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(animationexample)
+qt_generate_deploy_qml_app_script(
+ TARGET animationexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/animation/behaviors/tvtennis.qml b/examples/quick/animation/behaviors/tvtennis.qml
index 0b8ba15ad7..4a55448ad7 100644
--- a/examples/quick/animation/behaviors/tvtennis.qml
+++ b/examples/quick/animation/behaviors/tvtennis.qml
@@ -8,30 +8,67 @@ Rectangle {
width: 320; height: 480;
color: "#1e1b18"
+ state: "right"
+ states: [
+ State {
+ name: "left"
+ PropertyChanges {
+ leftBat {
+ y: (ball.y + ball.height / 2) - leftBat.height / 2
+ }
+ rightBat {
+ y: page.height / 2 - rightBat.height / 2
+ }
+ }
+ },
+ State {
+ name: "right"
+ PropertyChanges {
+ rightBat {
+ y: (ball.y + ball.height / 2) - rightBat.height / 2
+ }
+ leftBat {
+ y: page.height / 2 - leftBat.height / 2
+ }
+ }
+ }
+ ]
+
+ transitions: [
+ Transition {
+ from: "left"; to: "right"
+ NumberAnimation { property: "y"; easing.type: Easing.InOutQuad; duration: 200}
+ },
+ Transition {
+ from: "right"; to: "left"
+ NumberAnimation { property: "y"; easing.type: Easing.InOutQuad; duration: 200}
+ }
+ ]
+
// Make a ball to bounce
Rectangle {
id: ball
- // Add a property for the target y coordinate
- property variant direction : "right"
-
- x: 20; width: 20; height: 20; z: 1
+ width: 20
+ height: 20
+ z: 1
color: "#80c342"
// Move the ball to the right and back to the left repeatedly
SequentialAnimation on x {
loops: Animation.Infinite
NumberAnimation { to: page.width - 40; duration: 2000 }
- PropertyAction { target: ball; property: "direction"; value: "left" }
+ PropertyAction { target: page; property: "state"; value: "left" }
NumberAnimation { to: 20; duration: 2000 }
- PropertyAction { target: ball; property: "direction"; value: "right" }
+ PropertyAction { target: page; property: "state"; value: "right" }
}
// Make y move with a velocity of 200
- Behavior on y { SpringAnimation{ velocity: 200; }
+ Behavior on y {
+ SpringAnimation { velocity: 200; }
}
- Component.onCompleted: y = page.height-10; // start the ball motion
+ Component.onCompleted: y = page.height - 10; // start the ball motion
// Detect the ball hitting the top or bottom of the view and bounce it
onYChanged: {
@@ -48,31 +85,27 @@ Rectangle {
Rectangle {
id: leftBat
color: "#328930"
- x: 2; width: 20; height: 90
- // ![0]
- y: ball.direction == 'left' ? ball.y - 45 : page.height/2 -45;
- Behavior on y { SpringAnimation{ velocity: 300 } }
- // ![0]
+ width: 20; height: 90
+ x: 2;
}
Rectangle {
id: rightBat
color: "#328930"
- x: page.width - 22; width: 20; height: 90
- y: ball.direction == 'right' ? ball.y - 45 : page.height/2 -45;
- Behavior on y { SpringAnimation{ velocity: 300 } }
+ width: 20; height: 90
+ x: page.width - width - 2
}
// The rest, to make it look realistic, if neither ever scores...
- Rectangle { color: "#328930"; x: page.width/2-80; y: 0; width: 40; height: 60 }
- Rectangle { color: "#1e1b18"; x: page.width/2-70; y: 10; width: 20; height: 40 }
- Rectangle { color: "#328930"; x: page.width/2+40; y: 0; width: 40; height: 60 }
- Rectangle { color: "#1e1b18"; x: page.width/2+50; y: 10; width: 20; height: 40 }
+ Rectangle { color: "#328930"; x: page.width / 2 - 80; y: 0; width: 40; height: 60 }
+ Rectangle { color: "#1e1b18"; x: page.width / 2 - 70; y: 10; width: 20; height: 40 }
+ Rectangle { color: "#328930"; x: page.width / 2 + 40; y: 0; width: 40; height: 60 }
+ Rectangle { color: "#1e1b18"; x: page.width / 2 + 50; y: 10; width: 20; height: 40 }
Repeater {
model: page.height / 20
- Rectangle {
+ delegate: Rectangle {
required property int index
color: "#328930"
- x: page.width / 2 - 5
+ x: parent.width / 2 - 5
y: index * 20
width: 10
height: 10
diff --git a/examples/quick/animation/behaviors/wigglytext.qml b/examples/quick/animation/behaviors/wigglytext.qml
index 712078866d..1b987f6391 100644
--- a/examples/quick/animation/behaviors/wigglytext.qml
+++ b/examples/quick/animation/behaviors/wigglytext.qml
@@ -4,26 +4,28 @@
import QtQml
import QtQuick
+pragma ComponentBehavior: Bound
+
Rectangle {
id: container
- property string text: "Drag me!"
+ property string text: qsTr("Drag me!")
property bool animated: true
width: 320; height: 480; color: "#474747"; focus: true
Keys.onPressed: (event) => {
- if (event.key == Qt.Key_Delete || event.key == Qt.Key_Backspace)
+ if (event.key === Qt.Key_Delete || event.key === Qt.Key_Backspace)
container.remove()
- else if (event.text != "") {
+ else if (event.text !== "") {
container.append(event.text)
}
}
function append(text) {
container.animated = false
- var lastLetter = container.children[container.children.length - 1]
- var newLetter = letterComponent.createObject(container)
+ const lastLetter = container.children[container.children.length - 1]
+ let newLetter = letterComponent.createObject(container)
newLetter.text = text
newLetter.follow = lastLetter
container.animated = true
@@ -36,8 +38,8 @@ Rectangle {
function doLayout() {
var follow = null
- for (var i = 0; i < container.text.length; ++i) {
- var newLetter = letterComponent.createObject(container)
+ for (let i = 0; i < container.text.length; ++i) {
+ let newLetter = letterComponent.createObject(container)
newLetter.text = container.text[i]
newLetter.follow = follow
follow = newLetter
diff --git a/examples/quick/animation/doc/src/animation.qdoc b/examples/quick/animation/doc/src/animation.qdoc
index c2ae8c3dae..26e056b813 100644
--- a/examples/quick/animation/doc/src/animation.qdoc
+++ b/examples/quick/animation/doc/src/animation.qdoc
@@ -7,6 +7,7 @@
\brief This is a collection of QML Animation examples.
\image qml-animations-example.png
\ingroup qtquickexamples
+ \examplecategory {Graphics}
\e Animation is a collection of small QML examples relating to animation.
Each example is a small QML file emphasizing a particular type or feature.
@@ -53,7 +54,6 @@
\e{Tv Tennis} uses complex behaviors to make the paddles follow a ball to
simulate an infinite tennis game. Again, a binding which depends on other
values is applied to the position and a behavior provided the animation.
- \snippet animation/behaviors/tvtennis.qml 0
\section1 Easing Curves
diff --git a/examples/quick/animation/easing/easing.qml b/examples/quick/animation/easing/easing.qml
index 26272f3c0f..8b58bd5538 100644
--- a/examples/quick/animation/easing/easing.qml
+++ b/examples/quick/animation/easing/easing.qml
@@ -5,6 +5,8 @@ import QtQml
import QtQml.Models
import QtQuick
+pragma ComponentBehavior: Bound
+
Rectangle {
id: window
width: 320; height: 480; color: "#232323"
@@ -90,7 +92,7 @@ Rectangle {
anchors.verticalCenter: parent.verticalCenter
MouseArea {
- onClicked: if (rect.state == '') rect.state = "right"; else rect.state = ''
+ onClicked: if (rect.state === '') rect.state = "right"; else rect.state = ''
anchors.fill: parent
anchors.margins: -5 // Make MouseArea bigger than the rectangle, itself
}
diff --git a/examples/quick/animation/pathanimation/pathanimation.qml b/examples/quick/animation/pathanimation/pathanimation.qml
index 1f3577a47c..b366f8178d 100644
--- a/examples/quick/animation/pathanimation/pathanimation.qml
+++ b/examples/quick/animation/pathanimation/pathanimation.qml
@@ -15,7 +15,7 @@ Rectangle {
antialiasing: true
onPaint: {
- var context = canvas.getContext("2d")
+ let context = canvas.getContext("2d")
context.clearRect(0, 0, width, height)
context.strokeStyle = "black"
context.path = pathAnim.path
@@ -65,7 +65,7 @@ Rectangle {
Text {
anchors.centerIn: parent
- text: "Box"
+ text: qsTr("Box")
}
}
}
diff --git a/examples/quick/animation/pathinterpolator/pathinterpolator.qml b/examples/quick/animation/pathinterpolator/pathinterpolator.qml
index a035e9ba0c..102aee9cee 100644
--- a/examples/quick/animation/pathinterpolator/pathinterpolator.qml
+++ b/examples/quick/animation/pathinterpolator/pathinterpolator.qml
@@ -15,7 +15,7 @@ Rectangle {
antialiasing: true
onPaint: {
- var context = canvas.getContext("2d")
+ let context = canvas.getContext("2d")
context.clearRect(0, 0, width, height)
context.strokeStyle = "black"
context.path = motionPath.path
@@ -71,7 +71,7 @@ Rectangle {
Text {
anchors.centerIn: parent
- text: "Box"
+ text: qsTr("Box")
}
}
}
diff --git a/examples/quick/animation/states/states.qml b/examples/quick/animation/states/states.qml
index 78a8c0668b..47d10287b1 100644
--- a/examples/quick/animation/states/states.qml
+++ b/examples/quick/animation/states/states.qml
@@ -1,7 +1,6 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQml
import QtQuick
Rectangle {
diff --git a/examples/quick/canvas/CMakeLists.txt b/examples/quick/canvas/CMakeLists.txt
index 8a33e76fb9..b48770f0a6 100644
--- a/examples/quick/canvas/CMakeLists.txt
+++ b/examples/quick/canvas/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(canvas LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/canvas")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../shared" "shared")
@@ -23,15 +17,14 @@ qt_add_executable(canvasexample
)
target_link_libraries(canvasexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(canvasexample
URI canvas
- AUTO_RESOURCE_PREFIX
QML_FILES
"LabeledSlider.qml"
"bezierCurve/bezierCurve.qml"
@@ -49,9 +42,16 @@ qt_add_qml_module(canvasexample
)
install(TARGETS canvasexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(canvasexample)
+qt_generate_deploy_qml_app_script(
+ TARGET canvasexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/canvas/LabeledSlider.qml b/examples/quick/canvas/LabeledSlider.qml
index 5cab697b18..fa0ab98f78 100644
--- a/examples/quick/canvas/LabeledSlider.qml
+++ b/examples/quick/canvas/LabeledSlider.qml
@@ -7,32 +7,31 @@ import QtQuick.Controls
Item {
id: labeledSlider
property alias name: label.text
- implicitHeight: Math.max(label.implicitHeight, quickControlsSlider.implicitHeight)
property real min: 0.0
property real max: 1.0
- property real init: 0.0
- readonly property alias value: quickControlsSlider.value
+ property alias value: quickControlsSlider.value
+
+ implicitHeight: Math.max(label.implicitHeight, quickControlsSlider.implicitHeight)
Label {
id: label
anchors.left: parent.left
anchors.leftMargin: 10
- anchors.verticalCenter: parent.verticalCenter
- color: "#333"
+ anchors.verticalCenter: labeledSlider.verticalCenter
font: Qt.font({pointSize: 13})
}
Slider {
id: quickControlsSlider
- anchors.verticalCenter: parent.verticalCenter
- anchors.right: parent.right
- anchors.rightMargin: 10
- anchors.left: label.right
- anchors.leftMargin: 20
+ anchors {
+ verticalCenter: labeledSlider.verticalCenter
+ right: labeledSlider.right
+ rightMargin: 10
+ left: label.right
+ leftMargin: 10
+ }
from: labeledSlider.min
to: labeledSlider.max
width: labeledSlider.width - label.implicitWidth - (label.anchors.leftMargin + anchors.rightMargin + anchors.leftMargin)
-
- Component.onCompleted: ()=> value = labeledSlider.init;
}
}
diff --git a/examples/quick/canvas/bezierCurve/bezierCurve.qml b/examples/quick/canvas/bezierCurve/bezierCurve.qml
index 31ec4e60ef..0965a1e3db 100644
--- a/examples/quick/canvas/bezierCurve/bezierCurve.qml
+++ b/examples/quick/canvas/bezierCurve/bezierCurve.qml
@@ -6,94 +6,129 @@ import QtQuick.Controls
import "../"
Item {
- id:container
+ id: root
width: 320
height: 480
Column {
- spacing:5
- anchors.fill: parent
- anchors.topMargin: 12
+ spacing: 5
+ anchors {
+ fill: parent
+ topMargin: 12
+ }
Label {
- font.pointSize: 24
- font.bold: true
- text: "Bezier Curve"
anchors.horizontalCenter: parent.horizontalCenter
- color: "#777"
+ text: qsTr("Bezier Curve")
+ color: Qt.lighter(palette.text)
+ font {
+ pointSize: 24
+ bold: true
+ }
}
Canvas {
- id:canvas
- width:320
- height:280
- property color strokeStyle: Qt.darker(fillStyle, 1.4)
- property color fillStyle: "#b40000" // red
- property int lineWidth: lineWidthCtrl.value
- property bool fill: true
- property bool stroke: true
- property real alpha: 1.0
- property real scale : scaleCtrl.value
- property real rotate : rotateCtrl.value
+ id: canvas
+
+ readonly property color strokeStyle: Qt.darker(fillStyle, 1.4)
+ readonly property color fillStyle: "#b40000" // red
+ readonly property alias lineWidth: lineWidthCtrl.value
+ readonly property alias fill: toggleFillCheckBox.checked
+ readonly property alias stroke: toggleStrokeCheckBox.checked
+ readonly property real alpha: 1.0
+ readonly property alias scale: scaleCtrl.value
+ readonly property alias rotate: rotateCtrl.value
+
+ width: root.width
+ height: parent.height - controls.height
antialiasing: true
- onLineWidthChanged:requestPaint();
- onFillChanged:requestPaint();
- onStrokeChanged:requestPaint();
- onScaleChanged:requestPaint();
- onRotateChanged:requestPaint();
+ onLineWidthChanged: requestPaint()
+ onFillChanged: requestPaint()
+ onStrokeChanged: requestPaint()
+ onScaleChanged: requestPaint()
+ onRotateChanged: requestPaint()
- onPaint: {
- var ctx = canvas.getContext('2d');
- var originX = 85
- var originY = 75
- ctx.save();
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- ctx.translate(originX, originX);
- ctx.globalAlpha = canvas.alpha;
- ctx.strokeStyle = canvas.strokeStyle;
- ctx.fillStyle = canvas.fillStyle;
- ctx.lineWidth = canvas.lineWidth;
+ onPaint: function() {
+ let ctx = canvas.getContext('2d')
+ const originX = 85
+ const originY = 75
+ ctx.save()
+ ctx.clearRect(0, 0, canvas.width, canvas.height)
+ ctx.translate(originX, originX)
+ ctx.globalAlpha = canvas.alpha
+ ctx.strokeStyle = canvas.strokeStyle
+ ctx.fillStyle = canvas.fillStyle
+ ctx.lineWidth = canvas.lineWidth
ctx.translate(originX, originY)
- ctx.scale(canvas.scale, canvas.scale);
- ctx.rotate(canvas.rotate);
+ ctx.scale(canvas.scale, canvas.scale)
+ ctx.rotate(canvas.rotate)
ctx.translate(-originX, -originY)
//! [0]
- ctx.beginPath();
- ctx.moveTo(75,40);
- ctx.bezierCurveTo(75,37,70,25,50,25);
- ctx.bezierCurveTo(20,25,20,62.5,20,62.5);
- ctx.bezierCurveTo(20,80,40,102,75,120);
- ctx.bezierCurveTo(110,102,130,80,130,62.5);
- ctx.bezierCurveTo(130,62.5,130,25,100,25);
- ctx.bezierCurveTo(85,25,75,37,75,40);
- ctx.closePath();
+ ctx.beginPath()
+ ctx.moveTo(75,40)
+ ctx.bezierCurveTo(75,37,70,25,50,25)
+ ctx.bezierCurveTo(20,25,20,62.5,20,62.5)
+ ctx.bezierCurveTo(20,80,40,102,75,120)
+ ctx.bezierCurveTo(110,102,130,80,130,62.5)
+ ctx.bezierCurveTo(130,62.5,130,25,100,25)
+ ctx.bezierCurveTo(85,25,75,37,75,40)
+ ctx.closePath()
//! [0]
if (canvas.fill)
- ctx.fill();
+ ctx.fill()
if (canvas.stroke)
- ctx.stroke();
- ctx.restore();
+ ctx.stroke()
+ ctx.restore()
}
}
}
Column {
id: controls
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 12
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
LabeledSlider {
- id: lineWidthCtrl; name: "Outline"; min: 1; max: 10; init: 2; width: container.width
+ id: lineWidthCtrl
+ name: qsTr("Outline")
+ min: 1
+ max: 10
+ value: 2
+ width: root.width
}
LabeledSlider {
- id: scaleCtrl; name: "Scale"; min: 0.1; max: 10; init: 1; width: container.width
+ id: scaleCtrl
+ name: qsTr("Scale")
+ min: 0.1
+ max: 10
+ value: 1
+ width: root.width
}
LabeledSlider {
- id: rotateCtrl; name: "Rotate"; min: 0; max: Math.PI*2; init: 0; width: container.width
+ id: rotateCtrl
+ name: qsTr("Rotate")
+ min: 0
+ max: Math.PI * 2
+ value: 0
+ width: root.width
+ }
+ Row {
+ CheckBox {
+ id: toggleFillCheckBox
+ checked: true
+ text: qsTr("Toggle fill")
+ }
+ CheckBox {
+ id: toggleStrokeCheckBox
+ checked: true
+ text: qsTr("Toggle stroke")
+ }
}
}
}
diff --git a/examples/quick/canvas/canvas.qml b/examples/quick/canvas/canvas.qml
index 114941bbdc..6ac856eb6d 100644
--- a/examples/quick/canvas/canvas.qml
+++ b/examples/quick/canvas/canvas.qml
@@ -5,19 +5,26 @@ import QtQuick
import shared as Examples
Item {
+ id: root
height: 480
width: 320
Examples.LauncherList {
- id: ll
- anchors.fill: parent
+ anchors.fill: root
Component.onCompleted: {
- addExample("Red heart", "Draws a red heart with bezier curves", Qt.resolvedUrl("bezierCurve/bezierCurve.qml"));
- addExample("Talk bubble", "Draws a talk bubble with quadratic curves", Qt.resolvedUrl("quadraticCurveTo/quadraticCurveTo.qml"));
- addExample("Squircle", "Draws a smooth squircle with simple lines", Qt.resolvedUrl("squircle/squircle.qml"));
- addExample("Rounded rectangle", "Draws a rounded rectangle with lines and arcs", Qt.resolvedUrl("roundedrect/roundedrect.qml"));
- addExample("Smile face", "Draws a smile face with complex paths", Qt.resolvedUrl("smile/smile.qml"));
- addExample("Clip", "Shows the canvas clip feature", Qt.resolvedUrl("clip/clip.qml"));
- addExample("Tiger", "Draw a tiger with a collection of SVG paths", Qt.resolvedUrl("tiger/tiger.qml"));
+ addExample(qsTr("Red heart"), qsTr("Draws a red heart with bezier curves"),
+ Qt.resolvedUrl("bezierCurve/bezierCurve.qml"))
+ addExample(qsTr("Talk bubble"), qsTr("Draws a talk bubble with quadratic curves"),
+ Qt.resolvedUrl("quadraticCurveTo/quadraticCurveTo.qml"))
+ addExample(qsTr("Squircle"), qsTr("Draws a smooth squircle with simple lines"),
+ Qt.resolvedUrl("squircle/squircle.qml"))
+ addExample(qsTr("Rounded rectangle"), qsTr("Draws a rounded rectangle with lines and arcs"),
+ Qt.resolvedUrl("roundedrect/roundedrect.qml"))
+ addExample(qsTr("Smile face"), qsTr("Draws a smile face with complex paths"),
+ Qt.resolvedUrl("smile/smile.qml"))
+ addExample(qsTr("Clip"), qsTr("Shows the canvas clip feature"),
+ Qt.resolvedUrl("clip/clip.qml"))
+ addExample(qsTr("Tiger"), qsTr("Draw a tiger with a collection of SVG paths"),
+ Qt.resolvedUrl("tiger/tiger.qml"))
}
}
}
diff --git a/examples/quick/canvas/clip/clip.qml b/examples/quick/canvas/clip/clip.qml
index c39da7d108..3d0591f97a 100644
--- a/examples/quick/canvas/clip/clip.qml
+++ b/examples/quick/canvas/clip/clip.qml
@@ -6,108 +6,137 @@ import QtQuick.Controls
import "../"
Item {
- id:container
+ id: root
width: 320
height: 480
Column {
- spacing:5
- anchors.fill: parent
- anchors.topMargin: 12
+ spacing: 5
+ anchors {
+ fill: root
+ topMargin: 12
+ }
Label {
- font.pointSize: 24
- font.bold: true
- text: "Squircle with Clip"
anchors.horizontalCenter: parent.horizontalCenter
- color: "#777"
+ text: qsTr("Squircle with Clip")
+ color: Qt.lighter(palette.text)
+ font {
+ pointSize: 24
+ bold: true
+ }
}
Canvas {
id: canvas
- width: 320
- height: 280
- property color strokeStyle: Qt.darker(fillStyle, 1.2)
- property color fillStyle:"#14aaff" // green
- property int lineWidth:2
- property int nSize:nCtrl.value
- property real radius:rCtrl.value
- property bool fill:true
- property bool stroke:false
- property real px: width/2
- property real py: height/2 + 20
- property real alpha: 1.0
- property string imagefile:"../contents/qt-logo.png"
+
+ readonly property color strokeStyle: Qt.darker(fillStyle, 1.2)
+ readonly property color fillStyle: "#14aaff" // green
+ readonly property int lineWidth: 2
+ readonly property alias nSize: nCtrl.value
+ readonly property alias radius: rCtrl.value
+ readonly property alias fill: toggleFillCheckBox.checked
+ readonly property alias stroke: toggleStrokeCheckBox.checked
+ readonly property real px: width / 2
+ readonly property real py: height / 2 + 20
+ readonly property real alpha: 1.0
+ readonly property string imagefile: "../contents/qt-logo.png"
+
+ width: root.width
+ height: parent.height - controls.height
antialiasing: true
- Component.onCompleted:loadImage(canvas.imagefile);
-
- onRadiusChanged:requestPaint();
- onLineWidthChanged:requestPaint();
- onNSizeChanged:requestPaint();
- onFillChanged:requestPaint();
- onStrokeChanged:requestPaint();
- onImageLoaded : requestPaint();
- onPaint: squcirle();
-
- function squcirle() {
- var ctx = canvas.getContext("2d");
- var N = canvas.nSize;
- var R = canvas.radius;
-
- N=Math.abs(N);
- var M=N;
- if (N>100) M=100;
- if (N<0.00000000001) M=0.00000000001;
-
- ctx.save();
- ctx.globalAlpha = canvas.alpha;
- ctx.fillStyle = "white";
- ctx.fillRect(0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = canvas.strokeStyle;
- ctx.fillStyle = canvas.fillStyle;
- ctx.lineWidth = canvas.lineWidth;
-
- ctx.beginPath();
- var i = 0, x, y;
- for (i=0; i<(2*R+1); i++){
- x = Math.round(i-R) + canvas.px;
- y = Math.round(Math.pow(Math.abs(Math.pow(R,M)-Math.pow(Math.abs(i-R),M)),1/M)) + canvas.py;
-
- if (i == 0)
- ctx.moveTo(x, y);
+
+ Component.onCompleted: loadImage(canvas.imagefile)
+ onRadiusChanged: requestPaint()
+ onLineWidthChanged: requestPaint()
+ onNSizeChanged: requestPaint()
+ onFillChanged: requestPaint()
+ onStrokeChanged: requestPaint()
+ onImageLoaded: requestPaint()
+
+ onPaint: function() {
+ let ctx = canvas.getContext("2d")
+ const N = Math.abs(canvas.nSize)
+ const R = canvas.radius
+
+ const M = Math.max(0.00000000001, Math.min(N, 100))
+
+ ctx.save()
+ ctx.globalAlpha = canvas.alpha
+ ctx.fillStyle = "white"
+ ctx.fillRect(0, 0, canvas.width, canvas.height)
+
+ ctx.strokeStyle = canvas.strokeStyle
+ ctx.fillStyle = canvas.fillStyle
+ ctx.lineWidth = canvas.lineWidth
+
+ ctx.beginPath()
+ let i, x, y
+ for (i = 0; i < (2 * R + 1); i++) {
+ x = Math.round(i - R) + canvas.px
+ y = Math.round(Math.pow(Math.abs(Math.pow(R, M) - Math.pow(Math.abs(i - R), M)), 1 / M)) + canvas.py
+
+ if (i === 0)
+ ctx.moveTo(x, y)
else
- ctx.lineTo(x, y);
+ ctx.lineTo(x, y)
}
- for (i=(2*R); i<(4*R+1); i++){
- x =Math.round(3*R-i)+canvas.px;
- y = Math.round(-Math.pow(Math.abs(Math.pow(R,M)-Math.pow(Math.abs(3*R-i),M)),1/M)) + canvas.py;
- ctx.lineTo(x, y);
+ for (i = (2 * R); i < (4 * R + 1); i++) {
+ x = Math.round(3 * R - i) + canvas.px
+ y = Math.round(-Math.pow(Math.abs(Math.pow(R, M) - Math.pow(Math.abs(3 * R - i), M)), 1 / M)) + canvas.py
+ ctx.lineTo(x, y)
}
- ctx.closePath();
+ ctx.closePath()
if (canvas.stroke) {
- ctx.stroke();
+ ctx.stroke()
}
if (canvas.fill) {
- ctx.fill();
+ ctx.fill()
}
//! [0]
- ctx.clip();
- ctx.drawImage(canvas.imagefile, 0, 0);
+ ctx.clip()
+ ctx.drawImage(canvas.imagefile, 0, 0)
//! [0]
- ctx.restore();
+ ctx.restore()
}
}
}
Column {
id: controls
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 12
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
- LabeledSlider {id: nCtrl; min: 1; max: 10; init: 4; name: "N"; width: container.width}
- LabeledSlider {id: rCtrl; min: 30; max: 180; init: 80; name: "Radius"; width: container.width}
+ LabeledSlider {
+ id: nCtrl
+ name: qsTr("N")
+ width: root.width
+ min: 1
+ max: 10
+ value: 4
+ }
+ LabeledSlider {
+ id: rCtrl
+ name: qsTr("Radius")
+ width: root.width
+ min: 30
+ max: 180
+ value: 80
+ }
+ Row {
+ CheckBox {
+ id: toggleFillCheckBox
+ checked: true
+ text: qsTr("Toggle fill")
+ }
+ CheckBox {
+ id: toggleStrokeCheckBox
+ text: qsTr("Toggle stroke")
+ }
+ }
}
}
diff --git a/examples/quick/canvas/doc/src/canvas.qdoc b/examples/quick/canvas/doc/src/canvas.qdoc
index 862925fc08..87a7c7b5c4 100644
--- a/examples/quick/canvas/doc/src/canvas.qdoc
+++ b/examples/quick/canvas/doc/src/canvas.qdoc
@@ -7,6 +7,7 @@
\brief This is a collection of QML Canvas examples.
\image qml-canvas-example.png
\ingroup qtquickexamples
+ \examplecategory {Graphics}
\e Canvas is a collection of small QML examples relating to the \l Canvas
type. Each example is a small QML file emphasizing a particular type or
diff --git a/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml b/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml
index 032319036b..0f788891ab 100644
--- a/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml
+++ b/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml
@@ -6,94 +6,133 @@ import QtQuick.Controls
import "../"
Item {
- id:container
- width:320
- height:480
+ id: root
+ width: 320
+ height: 480
Column {
- spacing:5
- anchors.fill: parent
- anchors.topMargin: 12
+ spacing: 5
+ anchors {
+ fill: parent
+ topMargin: 12
+ }
Label {
- font.pointSize: 24
- font.bold: true
- text: "Quadratic Curve"
anchors.horizontalCenter: parent.horizontalCenter
- color: "#777"
+ text: qsTr("Quadratic Curve")
+ color: Qt.lighter(palette.text)
+ font {
+ pointSize: 24
+ bold: true
+ }
}
Canvas {
id: canvas
- width: 320
- height: 280
- property color strokeStyle: Qt.darker(fillStyle, 1.3)
- property color fillStyle: "#14aaff" // blue
- property int lineWidth: lineWidthCtrl.value
- property bool fill: true
- property bool stroke: true
- property real alpha: 1.0
- property real scale : scaleCtrl.value
- property real rotate : rotateCtrl.value
+ readonly property color strokeStyle: Qt.darker(fillStyle, 1.3)
+ readonly property color fillStyle: "#14aaff" // blue
+ readonly property alias lineWidth: lineWidthCtrl.value
+ readonly property alias fill: toggleFillCheckBox.checked
+ readonly property alias stroke: toggleStrokeCheckBox.checked
+ readonly property alias scale: scaleCtrl.value
+ readonly property alias rotate: rotateCtrl.value
+ width: root.width
+ height: parent.height - controls.height
antialiasing: true
- onLineWidthChanged:requestPaint();
- onFillChanged:requestPaint();
- onStrokeChanged:requestPaint();
- onScaleChanged:requestPaint();
- onRotateChanged:requestPaint();
+ onLineWidthChanged: requestPaint()
+ onFillChanged: requestPaint()
+ onStrokeChanged: requestPaint()
+ onScaleChanged: requestPaint()
+ onRotateChanged: requestPaint()
- onPaint: {
- var ctx = canvas.getContext('2d');
- var originX = 75
- var originY = 75
+ onPaint: function() {
+ let ctx = canvas.getContext('2d')
+ const originX = 75
+ const originY = 75
- ctx.save();
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- ctx.translate(originX, originX);
- ctx.strokeStyle = canvas.strokeStyle;
- ctx.fillStyle = canvas.fillStyle;
- ctx.lineWidth = canvas.lineWidth;
+ ctx.save()
+ ctx.clearRect(0, 0, canvas.width, canvas.height)
+ ctx.translate(originX, originX)
+ ctx.strokeStyle = canvas.strokeStyle
+ ctx.fillStyle = canvas.fillStyle
+ ctx.lineWidth = canvas.lineWidth
ctx.translate(originX, originY)
- ctx.rotate(canvas.rotate);
- ctx.scale(canvas.scale, canvas.scale);
+ ctx.rotate(canvas.rotate)
+ ctx.scale(canvas.scale, canvas.scale)
ctx.translate(-originX, -originY)
// ![0]
- ctx.beginPath();
- ctx.moveTo(75,25);
- ctx.quadraticCurveTo(25,25,25,62.5);
- ctx.quadraticCurveTo(25,100,50,100);
- ctx.quadraticCurveTo(50,120,30,125);
- ctx.quadraticCurveTo(60,120,65,100);
- ctx.quadraticCurveTo(125,100,125,62.5);
- ctx.quadraticCurveTo(125,25,75,25);
- ctx.closePath();
+ ctx.beginPath()
+ ctx.moveTo(75, 25)
+ ctx.quadraticCurveTo(25, 25, 25, 62.5)
+ ctx.quadraticCurveTo(25, 100, 50, 100)
+ ctx.quadraticCurveTo(50, 120, 30, 125)
+ ctx.quadraticCurveTo(60, 120, 65, 100)
+ ctx.quadraticCurveTo(125, 100, 125, 62.5)
+ ctx.quadraticCurveTo(125, 25, 75, 25)
+ ctx.closePath()
// ![0]
if (canvas.fill)
- ctx.fill();
+ ctx.fill()
if (canvas.stroke)
- ctx.stroke();
+ ctx.stroke()
// ![1]
- ctx.fillStyle = "white";
- ctx.font = "bold 17px sans-serif";
- ctx.fillText("Qt Quick", 40, 70);
+ ctx.fillStyle = "white"
+ ctx.font = "bold 17px sans-serif"
+ ctx.fillText("Qt Quick", 40, 70)
// ![1]
- ctx.restore();
+ ctx.restore()
}
}
}
Column {
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 12
+ id: controls
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
- LabeledSlider {id:lineWidthCtrl; min:1; max:10; init:2; name: "Outline"; width: container.width}
- LabeledSlider {id:scaleCtrl; min:0.1; max:10; init:1; name: "Scale"; width: container.width}
- LabeledSlider {id:rotateCtrl; min:0; max:Math.PI*2; init:0; name: "Rotate"; width: container.width}
+ LabeledSlider {
+ id: lineWidthCtrl
+ name: qsTr("Outline")
+ width: root.width
+ min: 1
+ max: 10
+ value: 2
+ }
+ LabeledSlider {
+ id: scaleCtrl
+ name: qsTr("Scale")
+ width: root.width
+ min: 0.1
+ max: 10
+ value: 1
+ }
+ LabeledSlider {
+ id: rotateCtrl
+ name: qsTr("Rotate")
+ width: root.width
+ min: 0
+ max: Math.PI * 2
+ value: 0
+ }
+ Row {
+ CheckBox {
+ id: toggleFillCheckBox
+ checked: true
+ text: qsTr("Toggle fill")
+ }
+ CheckBox {
+ id: toggleStrokeCheckBox
+ checked: true
+ text: qsTr("Toggle stroke")
+ }
+ }
}
}
diff --git a/examples/quick/canvas/roundedrect/roundedrect.qml b/examples/quick/canvas/roundedrect/roundedrect.qml
index 6966528402..26861b921c 100644
--- a/examples/quick/canvas/roundedrect/roundedrect.qml
+++ b/examples/quick/canvas/roundedrect/roundedrect.qml
@@ -6,81 +6,115 @@ import QtQuick.Controls
import "../"
Item {
- id:container
+ id: root
width: 320
height: 480
Column {
spacing: 6
- anchors.fill: parent
- anchors.topMargin: 12
+ anchors {
+ fill: parent
+ topMargin: 12
+ }
Label {
- font.pointSize: 24
- font.bold: true
- text: "Rounded rectangle"
anchors.horizontalCenter: parent.horizontalCenter
- color: "#777"
+ text: qsTr("Rounded rectangle")
+ color: Qt.lighter(palette.text)
+ font {
+ pointSize: 24
+ bold: true
+ }
}
Canvas {
id: canvas
- width: 320
- height: 280
- antialiasing: true
- property int radius: rCtrl.value
- property int rectx: 60
- property int recty: 60
- property int rectWidth: width - 2*rectx
- property int rectHeight: height - 2*recty
- property color strokeStyle: Qt.darker(fillStyle, 1.4)
- property color fillStyle: "#ae32a0" // purple
- property int lineWidth: lineWidthCtrl.value
- property bool fill: true
- property bool stroke: true
- property real alpha: 1.0
+ readonly property alias radius: rCtrl.value
+ readonly property int rectx: 60
+ readonly property int recty: 60
+ readonly property int rectWidth: width - 2 * rectx
+ readonly property int rectHeight: height - 2 * recty
+ readonly property color strokeStyle: Qt.darker(fillStyle, 1.4)
+ readonly property color fillStyle: "#ae32a0" // purple
+ readonly property alias lineWidth: lineWidthCtrl.value
+ readonly property alias fill: toggleFillCheckBox.checked
+ readonly property alias stroke: toggleStrokeCheckBox.checked
+ readonly property real alpha: 1.0
- onLineWidthChanged:requestPaint();
- onFillChanged:requestPaint();
- onStrokeChanged:requestPaint();
- onRadiusChanged:requestPaint();
+ width: root.width
+ height: parent.height - controls.height
+ antialiasing: true
+
+ onLineWidthChanged: requestPaint()
+ onFillChanged: requestPaint()
+ onStrokeChanged: requestPaint()
+ onRadiusChanged: requestPaint()
- onPaint: {
- var ctx = getContext("2d");
- ctx.save();
- ctx.clearRect(0,0,canvas.width, canvas.height);
- ctx.strokeStyle = canvas.strokeStyle;
+ onPaint: function() {
+ var ctx = getContext("2d")
+ ctx.save()
+ ctx.clearRect(0, 0, canvas.width, canvas.height)
+ ctx.strokeStyle = canvas.strokeStyle
ctx.lineWidth = canvas.lineWidth
ctx.fillStyle = canvas.fillStyle
ctx.globalAlpha = canvas.alpha
- ctx.beginPath();
- ctx.moveTo(rectx+radius,recty); // top side
- ctx.lineTo(rectx+rectWidth-radius,recty);
+ ctx.beginPath()
+ ctx.moveTo(rectx + radius, recty) // top side
+ ctx.lineTo(rectx + rectWidth - radius, recty)
// draw top right corner
- ctx.arcTo(rectx+rectWidth,recty,rectx+rectWidth,recty+radius,radius);
- ctx.lineTo(rectx+rectWidth,recty+rectHeight-radius); // right side
+ ctx.arcTo(rectx + rectWidth, recty, rectx + rectWidth, recty + radius, radius)
+ ctx.lineTo(rectx + rectWidth, recty + rectHeight - radius) // right side
// draw bottom right corner
- ctx.arcTo(rectx+rectWidth,recty+rectHeight,rectx+rectWidth-radius,recty+rectHeight,radius);
- ctx.lineTo(rectx+radius,recty+rectHeight); // bottom side
+ ctx.arcTo(rectx + rectWidth, recty + rectHeight, rectx + rectWidth - radius, recty + rectHeight, radius)
+ ctx.lineTo(rectx + radius, recty + rectHeight) // bottom side
// draw bottom left corner
- ctx.arcTo(rectx,recty+rectHeight,rectx,recty+rectHeight-radius,radius);
- ctx.lineTo(rectx,recty+radius); // left side
+ ctx.arcTo(rectx, recty + rectHeight, rectx, recty + rectHeight - radius, radius)
+ ctx.lineTo(rectx, recty + radius) // left side
// draw top left corner
- ctx.arcTo(rectx,recty,rectx+radius,recty,radius);
- ctx.closePath();
+ ctx.arcTo(rectx, recty, rectx + radius, recty, radius)
+ ctx.closePath()
if (canvas.fill)
- ctx.fill();
+ ctx.fill()
if (canvas.stroke)
- ctx.stroke();
- ctx.restore();
+ ctx.stroke()
+ ctx.restore()
}
}
}
Column {
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 12
+ id: controls
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
- LabeledSlider {id: lineWidthCtrl ; min: 1 ; max: 10; init: 2 ; name: "Outline"; width: container.width}
- LabeledSlider {id: rCtrl ; min: 10 ; max: 80 ; init: 40 ; name: "Radius"; width: container.width}
+ LabeledSlider {
+ id: lineWidthCtrl
+ name: qsTr("Outline")
+ width: root.width
+ min: 1
+ max: 10
+ value: 2
+ }
+ LabeledSlider {
+ id: rCtrl
+ name: qsTr("Radius")
+ width: root.width
+ min: 10
+ max: 80
+ value: 40
+ }
+ Row {
+ CheckBox {
+ id: toggleFillCheckBox
+ checked: true
+ text: qsTr("Toggle fill")
+ }
+ CheckBox {
+ id: toggleStrokeCheckBox
+ checked: true
+ text: qsTr("Toggle stroke")
+ }
+ }
}
}
diff --git a/examples/quick/canvas/smile/smile.qml b/examples/quick/canvas/smile/smile.qml
index 0d2034d9ca..bf534a3da2 100644
--- a/examples/quick/canvas/smile/smile.qml
+++ b/examples/quick/canvas/smile/smile.qml
@@ -6,87 +6,124 @@ import QtQuick.Controls
import "../"
Item {
- id: container
+ id: root
width: 320
height: 480
Column {
spacing: 6
- anchors.fill: parent
- anchors.topMargin: 12
+ anchors {
+ fill: parent
+ topMargin: 12
+ }
Label {
- font.pointSize: 24
- font.bold: true
- text: "Smile with arcs"
anchors.horizontalCenter: parent.horizontalCenter
- color: "#777"
+ text: qsTr("Smile with arcs")
+ font {
+ pointSize: 24
+ bold: true
+ }
+ color: Qt.lighter(palette.text)
}
Canvas {
id: canvas
- width: 320
+
+ readonly property color strokeStyle: Qt.darker(fillStyle, 1.6)
+ readonly property color fillStyle: "#e0c31e" // yellow
+ readonly property alias lineWidth: lineWidthCtrl.value
+ readonly property alias fill: toggleFillCheckBox.checked
+ readonly property alias stroke: toggleStrokeCheckBox.checked
+ readonly property alias scale: scaleCtrl.value
+ readonly property alias rotate: rotateCtrl.value
+
+ width: root.width
height: parent.height - controls.height
antialiasing: true
- property color strokeStyle: Qt.darker(fillStyle, 1.6)
- property color fillStyle: "#e0c31e" // yellow
- property int lineWidth: lineWidthCtrl.value
- property bool fill: true
- property bool stroke: true
- property real scale : scaleCtrl.value
- property real rotate : rotateCtrl.value
-
- onLineWidthChanged:requestPaint();
- onFillChanged:requestPaint();
- onStrokeChanged:requestPaint();
- onScaleChanged:requestPaint();
- onRotateChanged:requestPaint();
+ onLineWidthChanged: requestPaint()
+ onFillChanged: requestPaint()
+ onStrokeChanged: requestPaint()
+ onScaleChanged: requestPaint()
+ onRotateChanged: requestPaint()
onPaint: {
- var ctx = canvas.getContext('2d');
- var originX = 85
- var originY = 75
- ctx.save();
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- ctx.translate(originX, originX);
- ctx.strokeStyle = canvas.strokeStyle;
- ctx.fillStyle = canvas.fillStyle;
- ctx.lineWidth = canvas.lineWidth;
+ let ctx = canvas.getContext('2d')
+ const originX = 85
+ const originY = 75
+ ctx.save()
+ ctx.clearRect(0, 0, canvas.width, canvas.height)
+ ctx.translate(originX, originX)
+ ctx.strokeStyle = canvas.strokeStyle
+ ctx.fillStyle = canvas.fillStyle
+ ctx.lineWidth = canvas.lineWidth
ctx.translate(originX, originY)
- ctx.scale(canvas.scale, canvas.scale);
- ctx.rotate(canvas.rotate);
+ ctx.scale(canvas.scale, canvas.scale)
+ ctx.rotate(canvas.rotate)
ctx.translate(-originX, -originY)
- ctx.beginPath();
- ctx.moveTo(75 + 50 * Math.cos(0),
- 75 - 50 * Math.sin(Math.PI*2));
- ctx.arc(75,75,50,0,Math.PI*2,true); // Outer circle
- ctx.moveTo(60,60);
- ctx.arc(60,60,5,0,Math.PI*2,true); // Left eye
- ctx.moveTo(90 + 5 * Math.cos(0),
- 65 - 5 * Math.sin(Math.PI*2));
- ctx.moveTo(90,60);
- ctx.arc(90,60,5,-Math.PI,Math.PI*3,false); // Right eye
- ctx.moveTo(75,70);
- ctx.arc(75,70,35,0,Math.PI,false); // Mouth (clockwise)
- ctx.closePath();
+ ctx.beginPath()
+ ctx.moveTo(75 + 50 * Math.cos(0), 75 - 50 * Math.sin(Math.PI * 2))
+ ctx.arc(75, 75, 50, 0, Math.PI * 2, true) // Outer circle
+ ctx.moveTo(60, 60)
+ ctx.arc(60, 60, 5, 0, Math.PI * 2, true) // Left eye
+ ctx.moveTo(90 + 5 * Math.cos(0), 65 - 5 * Math.sin(Math.PI * 2))
+ ctx.moveTo(90, 60)
+ ctx.arc(90, 60, 5, -Math.PI, Math.PI * 3, false) // Right eye
+ ctx.moveTo(75, 70)
+ ctx.arc(75, 70, 35, 0, Math.PI, false) // Mouth (clockwise)
+ ctx.closePath()
if (canvas.fill)
- ctx.fill();
+ ctx.fill()
if (canvas.stroke)
- ctx.stroke();
- ctx.restore();
+ ctx.stroke()
+ ctx.restore()
}
}
}
Column {
id: controls
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 12
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
- LabeledSlider {id: lineWidthCtrl ; min: 1 ; max: 10 ; init: 2 ; name: "Outline"; width: container.width}
- LabeledSlider {id: scaleCtrl ; min: 0.1 ; max: 10 ; init: 1 ; name: "Scale"; width: container.width}
- LabeledSlider {id: rotateCtrl ; min: 0 ; max: Math.PI*2 ; init: 0 ; name: "Rotate"; width: container.width}
+ LabeledSlider {
+ id: lineWidthCtrl
+ name: qsTr("Outline")
+ width: root.width
+ min: 1
+ max: 10
+ value: 2
+ }
+ LabeledSlider {
+ id: scaleCtrl
+ name: qsTr("Scale")
+ width: root.width
+ min: 0.1
+ max: 10
+ value: 1
+ }
+ LabeledSlider {
+ id: rotateCtrl
+ name: qsTr("Rotate")
+ width: root.width
+ min: 0
+ max: Math.PI * 2
+ value: 0
+ }
+ Row {
+ CheckBox {
+ id: toggleFillCheckBox
+ text: qsTr("Toggle fill")
+ }
+ CheckBox {
+ id: toggleStrokeCheckBox
+ checked: true
+ text: qsTr("Toggle stroke")
+ }
+ }
}
}
diff --git a/examples/quick/canvas/squircle/squircle.qml b/examples/quick/canvas/squircle/squircle.qml
index dcbc6fe517..3e4755e02c 100644
--- a/examples/quick/canvas/squircle/squircle.qml
+++ b/examples/quick/canvas/squircle/squircle.qml
@@ -6,21 +6,25 @@ import QtQuick.Controls
import "../"
Item {
- id: container
+ id: root
width: 320
height: 480
Column {
spacing: 6
- anchors.fill: parent
- anchors.topMargin: 12
+ anchors {
+ fill: parent
+ topMargin: 12
+ }
Label {
- font.pointSize: 24
- font.bold: true
- text: "Squircles"
anchors.horizontalCenter: parent.horizontalCenter
- color: "#777"
+ text: qsTr("Squircles")
+ color: Qt.lighter(palette.text)
+ font {
+ pointSize: 24
+ bold: true
+ }
}
Image {
@@ -32,84 +36,106 @@ Item {
Canvas {
id: canvas
- width: 320
- height: 250
+
+ readonly property color strokeStyle: Qt.darker(fillStyle, 1.2)
+ readonly property color fillStyle: "#6400aa"
+ readonly property int lineWidth: 2
+ readonly property alias nSize: nCtrl.value
+ readonly property alias radius: rCtrl.value
+ readonly property alias fill: toggleFillCheckBox.checked
+ readonly property alias stroke: toggleStrokeCheckBox.checked
+ readonly property real px: width / 2
+ readonly property real py: height / 2 + 10
+ readonly property real alpha: 1.0
+
+ width: root.width
+ height: parent.height - controls.height
antialiasing: true
- property color strokeStyle: Qt.darker(fillStyle, 1.2)
- property color fillStyle: "#6400aa"
-
- property int lineWidth: 2
- property int nSize: nCtrl.value
- property real radius: rCtrl.value
- property bool fill: true
- property bool stroke: false
- property real px: width/2
- property real py: height/2 + 10
- property real alpha: 1.0
-
- onRadiusChanged: requestPaint();
- onLineWidthChanged: requestPaint();
- onNSizeChanged: requestPaint();
- onFillChanged: requestPaint();
- onStrokeChanged: requestPaint();
-
- onPaint: squircle();
-
- function squircle() {
- var ctx = canvas.getContext("2d");
- var N = canvas.nSize;
- var R = canvas.radius;
-
- N=Math.abs(N);
- var M=N;
- if (N>100) M=100;
- if (N<0.00000000001) M=0.00000000001;
-
- ctx.save();
- ctx.globalAlpha =canvas.alpha;
- ctx.fillStyle = "white";
- ctx.fillRect(0, 0, canvas.width, canvas.height);
-
- ctx.strokeStyle = canvas.strokeStyle;
- ctx.fillStyle = canvas.fillStyle;
- ctx.lineWidth = canvas.lineWidth;
-
- ctx.beginPath();
- var i = 0, x, y;
- for (i=0; i<(2*R+1); i++){
- x = Math.round(i-R) + canvas.px;
- y = Math.round(Math.pow(Math.abs(Math.pow(R,M)-Math.pow(Math.abs(i-R),M)),1/M)) + canvas.py;
-
- if (i == 0)
- ctx.moveTo(x, y);
+ onRadiusChanged: requestPaint()
+ onLineWidthChanged: requestPaint()
+ onNSizeChanged: requestPaint()
+ onFillChanged: requestPaint()
+ onStrokeChanged: requestPaint()
+
+ onPaint: function () {
+ let ctx = canvas.getContext("2d")
+ const N = Math.abs(canvas.nSize)
+ const R = canvas.radius
+
+ const M = Math.max(0.00000000001, Math.min(N, 100))
+
+ ctx.save()
+ ctx.globalAlpha = canvas.alpha
+ ctx.fillStyle = "white"
+ ctx.fillRect(0, 0, canvas.width, canvas.height)
+
+ ctx.strokeStyle = canvas.strokeStyle
+ ctx.fillStyle = canvas.fillStyle
+ ctx.lineWidth = canvas.lineWidth
+
+ ctx.beginPath()
+ let i, x, y;
+ for (i = 0; i < (2 * R + 1); i++) {
+ x = Math.round(i - R) + canvas.px
+ y = Math.round(Math.pow(Math.abs(Math.pow(R, M) - Math.pow(Math.abs(i - R), M)), 1 / M)) + canvas.py
+
+ if (i === 0)
+ ctx.moveTo(x, y)
else
- ctx.lineTo(x, y);
+ ctx.lineTo(x, y)
}
- for (i=(2*R); i<(4*R+1); i++){
- x =Math.round(3*R-i)+canvas.px;
- y = Math.round(-Math.pow(Math.abs(Math.pow(R,M)-Math.pow(Math.abs(3*R-i),M)),1/M)) + canvas.py;
- ctx.lineTo(x, y);
+ for (i = (2 * R); i < (4 * R + 1); i++) {
+ x = Math.round(3 * R - i) + canvas.px
+ y = Math.round(-Math.pow(Math.abs(Math.pow(R, M) - Math.pow(Math.abs(3 * R - i), M)), 1 / M)) + canvas.py
+ ctx.lineTo(x, y)
}
- ctx.closePath();
+ ctx.closePath()
if (canvas.stroke) {
- ctx.stroke();
+ ctx.stroke()
}
-
if (canvas.fill) {
- ctx.fill();
+ ctx.fill()
}
- ctx.restore();
+ ctx.restore()
}
}
}
Column {
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 12
+ id: controls
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
- LabeledSlider {id: nCtrl ; min: 1 ; max: 10 ; init: 2 ; name: "N"; width: container.width}
- LabeledSlider {id: rCtrl ; min: 30 ; max: 180 ; init: 60 ; name: "Radius"; width: container.width}
+ LabeledSlider {
+ id: nCtrl
+ name: qsTr("N")
+ width: root.width
+ min: 1
+ max: 10
+ value: 2
+ }
+ LabeledSlider {
+ id: rCtrl
+ name: qsTr("Radius")
+ width: root.width
+ min: 30
+ max: 180
+ value: 60
+ }
+ Row {
+ CheckBox {
+ id: toggleFillCheckBox
+ text: qsTr("Toggle fill")
+ }
+ CheckBox {
+ id: toggleStrokeCheckBox
+ checked: true
+ text: qsTr("Toggle stroke")
+ }
+ }
}
}
diff --git a/examples/quick/canvas/tiger/tiger.qml b/examples/quick/canvas/tiger/tiger.qml
index 7110f97f56..e936619411 100644
--- a/examples/quick/canvas/tiger/tiger.qml
+++ b/examples/quick/canvas/tiger/tiger.qml
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
@@ -7,92 +7,113 @@ import "../"
import "tiger.js" as Tiger
Item {
- id: container
+ id: root
width: 320
height: 480
Column {
spacing: 6
- anchors.fill: parent
- anchors.topMargin: 12
+ anchors {
+ fill: parent
+ topMargin: 12
+ }
Label {
- font.pointSize: 24
- font.bold: true
- text: "Tiger with SVG path"
anchors.horizontalCenter: parent.horizontalCenter
- color: "#777"
+ text: qsTr("Tiger with SVG path")
+ color: Qt.lighter(palette.text)
+ font {
+ pointSize: 24
+ bold: true
+ }
}
Canvas {
id: canvas
- width: 320
- height: 280
+
+ readonly property real alpha: alphaCtrl.value
+ readonly property real scale: scaleCtrl.value
+ readonly property real rotate: rotateCtrl.value
+
+ width: root.width
+ height: parent.height - controls.height
antialiasing: true
- property string strokeStyle: "steelblue"
- property string fillStyle: "yellow"
- property bool fill: true
- property bool stroke: true
- property real alpha: alphaCtrl.value
- property real scale: scaleCtrl.value
- property real rotate: rotateCtrl.value
- property int frame: 0
-
- onFillChanged: requestPaint();
- onStrokeChanged: requestPaint();
- onAlphaChanged: requestPaint();
- onScaleChanged: requestPaint();
- onRotateChanged: requestPaint();
-
- onPaint: {
- var ctx = canvas.getContext('2d');
- var originX = canvas.width/2 + 30
- var originY = canvas.height/2 + 60
-
- ctx.save();
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- ctx.globalAlpha = canvas.alpha;
- ctx.globalCompositeOperation = "source-over";
+ onAlphaChanged: requestPaint()
+ onScaleChanged: requestPaint()
+ onRotateChanged: requestPaint()
+
+ onPaint: function() {
+ let ctx = canvas.getContext('2d')
+ const originX = canvas.width / 2 + 30
+ const originY = canvas.height / 2 + 60
+
+ ctx.save()
+ ctx.clearRect(0, 0, canvas.width, canvas.height)
+ ctx.globalAlpha = canvas.alpha
+ ctx.globalCompositeOperation = "source-over"
ctx.translate(originX, originY)
- ctx.scale(canvas.scale, canvas.scale);
- ctx.rotate(canvas.rotate);
+ ctx.scale(canvas.scale, canvas.scale)
+ ctx.rotate(canvas.rotate)
ctx.translate(-originX, -originY)
- ctx.strokeStyle = Qt.rgba(.3, .3, .3,1);
- ctx.lineWidth = 1;
+ ctx.strokeStyle = Qt.rgba(.3, .3, .3,1)
+ ctx.lineWidth = 1
//! [0]
- for (var i = 0; i < Tiger.tiger.length; i++) {
- if (Tiger.tiger[i].width != undefined)
- ctx.lineWidth = Tiger.tiger[i].width;
+ for (let i = 0; i < Tiger.tiger.length; i++) {
+ if (Tiger.tiger[i].width !== undefined)
+ ctx.lineWidth = Tiger.tiger[i].width
- if (Tiger.tiger[i].path != undefined)
- ctx.path = Tiger.tiger[i].path;
+ if (Tiger.tiger[i].path !== undefined)
+ ctx.path = Tiger.tiger[i].path
- if (Tiger.tiger[i].fill != undefined) {
- ctx.fillStyle = Tiger.tiger[i].fill;
- ctx.fill();
+ if (Tiger.tiger[i].fill !== undefined) {
+ ctx.fillStyle = Tiger.tiger[i].fill
+ ctx.fill()
}
- if (Tiger.tiger[i].stroke != undefined) {
- ctx.strokeStyle = Tiger.tiger[i].stroke;
- ctx.stroke();
+ if (Tiger.tiger[i].stroke !== undefined) {
+ ctx.strokeStyle = Tiger.tiger[i].stroke
+ ctx.stroke()
}
}
//! [0]
- ctx.restore();
+ ctx.restore()
}
}
}
Column {
id: controls
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 12
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
- LabeledSlider {id: scaleCtrl ; min: 0.1 ; max: 1 ; init: 0.3 ; name: "Scale"; width: container.width}
- LabeledSlider {id: rotateCtrl ; min: 0 ; max: Math.PI*2 ; init: 0 ; name: "Rotate"; width: container.width}
- LabeledSlider {id: alphaCtrl ; min: 0 ; max: 1 ; init: 1 ; name: "Alpha"; width: container.width}
+ LabeledSlider {
+ id: scaleCtrl
+ name: qsTr("Scale")
+ width: root.width
+ min: 0.1
+ max: 1
+ value: 0.3
+ }
+ LabeledSlider {
+ id: rotateCtrl
+ name: qsTr("Rotate")
+ width: root.width
+ min: 0
+ max: Math.PI * 2
+ value: 0
+ }
+ LabeledSlider {
+ id: alphaCtrl
+ name: qsTr("Alpha")
+ width: root.width
+ min: 0
+ max: 1
+ value: 1
+ }
}
}
diff --git a/examples/quick/customitems/CMakeLists.txt b/examples/quick/customitems/CMakeLists.txt
index 8fad896269..92c5c8fe85 100644
--- a/examples/quick/customitems/CMakeLists.txt
+++ b/examples/quick/customitems/CMakeLists.txt
@@ -1,7 +1,6 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_internal_add_example(dialcontrol)
qt_internal_add_example(flipable)
qt_internal_add_example(painteditem)
-qt_internal_add_example(maskedmousearea)
diff --git a/examples/quick/customitems/customitems.pro b/examples/quick/customitems/customitems.pro
index 399c1dd126..3199bfc9ad 100644
--- a/examples/quick/customitems/customitems.pro
+++ b/examples/quick/customitems/customitems.pro
@@ -1,7 +1,6 @@
TEMPLATE = subdirs
SUBDIRS = \
- painteditem \
- maskedmousearea
+ painteditem
EXAMPLE_FILES = \
dialcontrol \
diff --git a/examples/quick/customitems/dialcontrol/CMakeLists.txt b/examples/quick/customitems/dialcontrol/CMakeLists.txt
index e714908c52..ff26205142 100644
--- a/examples/quick/customitems/dialcontrol/CMakeLists.txt
+++ b/examples/quick/customitems/dialcontrol/CMakeLists.txt
@@ -1,38 +1,30 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(dialcontrol LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/customitems/dialcontrol")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(dialcontrolexample
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(dialcontrolexample PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(dialcontrolexample PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+target_link_libraries(dialcontrolexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(dialcontrolexample
URI dialcontrol
- AUTO_RESOURCE_PREFIX
QML_FILES
"Dial.qml"
"QuitButton.qml"
@@ -46,7 +38,16 @@ qt_add_qml_module(dialcontrolexample
)
install(TARGETS dialcontrolexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET dialcontrolexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/customitems/dialcontrol/Dial.qml b/examples/quick/customitems/dialcontrol/Dial.qml
index 7e3b8cbd87..3b9692cc91 100644
--- a/examples/quick/customitems/dialcontrol/Dial.qml
+++ b/examples/quick/customitems/dialcontrol/Dial.qml
@@ -32,7 +32,7 @@ Item {
id: needleRotation
origin.x: 5; origin.y: 65
//! [needle angle]
- angle: Math.min(Math.max(-130, root.value*2.6 - 130), 133)
+ angle: Math.min(Math.max(-130, root.value * 2.6 - 130), 133)
Behavior on angle {
SpringAnimation {
spring: 1.4
diff --git a/examples/quick/customitems/dialcontrol/QuitButton.qml b/examples/quick/customitems/dialcontrol/QuitButton.qml
index af362b6ddf..841ff34ee8 100644
--- a/examples/quick/customitems/dialcontrol/QuitButton.qml
+++ b/examples/quick/customitems/dialcontrol/QuitButton.qml
@@ -2,6 +2,7 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
+
Image {
source: "quit.png"
scale: quitMouse.pressed ? 0.8 : 1.0
diff --git a/examples/quick/customitems/dialcontrol/dialcontrol.qml b/examples/quick/customitems/dialcontrol/dialcontrol.qml
index d30f66fa2c..695ec9fb46 100644
--- a/examples/quick/customitems/dialcontrol/dialcontrol.qml
+++ b/examples/quick/customitems/dialcontrol/dialcontrol.qml
@@ -43,7 +43,7 @@ Rectangle {
return
}
- var desiredPercent = slider.x * 100 / (oldWidth - 32)
+ let desiredPercent = slider.x * 100 / (oldWidth - 32)
slider.x = desiredPercent * (width - 32) / 100
oldWidth = width
}
diff --git a/examples/quick/customitems/dialcontrol/doc/src/dialcontrol.qdoc b/examples/quick/customitems/dialcontrol/doc/src/dialcontrol.qdoc
index b6cdecf5df..7b56478c37 100644
--- a/examples/quick/customitems/dialcontrol/doc/src/dialcontrol.qdoc
+++ b/examples/quick/customitems/dialcontrol/doc/src/dialcontrol.qdoc
@@ -6,6 +6,7 @@
\title UI Components: Dial Control Example
\example customitems/dialcontrol
\brief The Dial Control Example shows how to create a speedometer-type dial.
+ \examplecategory {User Interface Components}
This example shows how to create a dial-type control. It combines
\l Image elements with \l Rotation transforms and \l SpringAnimation behaviors
diff --git a/examples/quick/customitems/flipable/CMakeLists.txt b/examples/quick/customitems/flipable/CMakeLists.txt
index 1e9bec27c5..8d1c7ab7cf 100644
--- a/examples/quick/customitems/flipable/CMakeLists.txt
+++ b/examples/quick/customitems/flipable/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
@@ -7,30 +7,25 @@ project(flipable LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/customitems/flipable")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(flipableexample
WIN32
MACOSX_BUNDLE
main.cpp
)
-target_link_libraries(flipableexample PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+target_link_libraries(flipableexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(flipableexample
URI flipable
- AUTO_RESOURCE_PREFIX
QML_FILES
"flipable.qml"
"Card.qml"
@@ -41,7 +36,16 @@ qt_add_qml_module(flipableexample
)
install(TARGETS flipableexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET flipableexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/customitems/flipable/doc/src/flipable.qdoc b/examples/quick/customitems/flipable/doc/src/flipable.qdoc
index 1870b2743b..8b2eea6611 100644
--- a/examples/quick/customitems/flipable/doc/src/flipable.qdoc
+++ b/examples/quick/customitems/flipable/doc/src/flipable.qdoc
@@ -5,6 +5,7 @@
\title UI Components: Flipable Example
\example customitems/flipable
\brief The Flipable Example shows an item that flips whenever clicked, rotating around the y-axis.
+ \examplecategory {User Interface Components}
This example shows how to use the \l Flipable element.
diff --git a/examples/quick/customitems/maskedmousearea/CMakeLists.txt b/examples/quick/customitems/maskedmousearea/CMakeLists.txt
deleted file mode 100644
index 8c768bbc56..0000000000
--- a/examples/quick/customitems/maskedmousearea/CMakeLists.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(maskedmousearea LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/customitems/maskedmousearea")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-
-qt_add_executable(maskedmousearea
- main.cpp
- maskedmousearea.cpp maskedmousearea.h
-)
-
-set_target_properties(maskedmousearea PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(maskedmousearea PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-qt_add_qml_module(maskedmousearea
- URI Example
- QML_FILES
- maskedmousearea.qml
- RESOURCES
- images/cloud_1.png
- images/cloud_2.png
- images/moon.png
- RESOURCE_PREFIX /customitems/maskedmousearea
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS maskedmousearea
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/quick/customitems/maskedmousearea/images/cloud_1.png b/examples/quick/customitems/maskedmousearea/images/cloud_1.png
deleted file mode 100644
index 9beb7e8442..0000000000
--- a/examples/quick/customitems/maskedmousearea/images/cloud_1.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/maskedmousearea/images/cloud_2.png b/examples/quick/customitems/maskedmousearea/images/cloud_2.png
deleted file mode 100644
index 981bbd2630..0000000000
--- a/examples/quick/customitems/maskedmousearea/images/cloud_2.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/maskedmousearea/images/moon.png b/examples/quick/customitems/maskedmousearea/images/moon.png
deleted file mode 100644
index 0a8037dd85..0000000000
--- a/examples/quick/customitems/maskedmousearea/images/moon.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/maskedmousearea/main.cpp b/examples/quick/customitems/maskedmousearea/main.cpp
deleted file mode 100644
index 64cc1c62f2..0000000000
--- a/examples/quick/customitems/maskedmousearea/main.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include <QGuiApplication>
-#include <QQuickView>
-
-#include "maskedmousearea.h"
-
-int main(int argc, char* argv[])
-{
- QGuiApplication app(argc,argv);
- QQuickView view;
-
- view.setSource(QUrl("qrc:///customitems/maskedmousearea/maskedmousearea.qml"));
- view.show();
- return QGuiApplication::exec();
-}
diff --git a/examples/quick/customitems/maskedmousearea/maskedmousearea.cpp b/examples/quick/customitems/maskedmousearea/maskedmousearea.cpp
deleted file mode 100644
index 21dbec8cdd..0000000000
--- a/examples/quick/customitems/maskedmousearea/maskedmousearea.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "maskedmousearea.h"
-
-#include <QStyleHints>
-#include <QGuiApplication>
-#include <qqmlfile.h>
-
-MaskedMouseArea::MaskedMouseArea(QQuickItem *parent)
- : QQuickItem(parent),
- m_pressed(false),
- m_alphaThreshold(0.0),
- m_containsMouse(false)
-{
- setAcceptHoverEvents(true);
- setAcceptedMouseButtons(Qt::LeftButton);
-}
-
-void MaskedMouseArea::setPressed(bool pressed)
-{
- if (m_pressed != pressed) {
- m_pressed = pressed;
- emit pressedChanged();
- }
-}
-
-void MaskedMouseArea::setContainsMouse(bool containsMouse)
-{
- if (m_containsMouse != containsMouse) {
- m_containsMouse = containsMouse;
- emit containsMouseChanged();
- }
-}
-
-void MaskedMouseArea::setMaskSource(const QUrl &source)
-{
- if (m_maskSource != source) {
- m_maskSource = source;
- m_maskImage = QImage(QQmlFile::urlToLocalFileOrQrc(source));
- emit maskSourceChanged();
- }
-}
-
-void MaskedMouseArea::setAlphaThreshold(qreal threshold)
-{
- if (m_alphaThreshold != threshold) {
- m_alphaThreshold = threshold;
- emit alphaThresholdChanged();
- }
-}
-
-bool MaskedMouseArea::contains(const QPointF &point) const
-{
- if (!QQuickItem::contains(point) || m_maskImage.isNull())
- return false;
-
- QPoint p = point.toPoint();
-
- if (p.x() < 0 || p.x() >= m_maskImage.width() ||
- p.y() < 0 || p.y() >= m_maskImage.height())
- return false;
-
- qreal r = qBound<int>(0, m_alphaThreshold * 255, 255);
- return qAlpha(m_maskImage.pixel(p)) > r;
-}
-
-void MaskedMouseArea::mousePressEvent(QMouseEvent *event)
-{
- setPressed(true);
- m_pressPoint = event->position().toPoint();
- emit pressed();
-}
-
-void MaskedMouseArea::mouseReleaseEvent(QMouseEvent *event)
-{
- setPressed(false);
- emit released();
-
- const int threshold = qApp->styleHints()->startDragDistance();
- const bool isClick = (threshold >= qAbs(event->position().toPoint().x() - m_pressPoint.x()) &&
- threshold >= qAbs(event->position().toPoint().y() - m_pressPoint.y()));
-
- if (isClick)
- emit clicked();
-}
-
-void MaskedMouseArea::mouseUngrabEvent()
-{
- setPressed(false);
- emit canceled();
-}
-
-void MaskedMouseArea::hoverEnterEvent(QHoverEvent *event)
-{
- Q_UNUSED(event);
- setContainsMouse(true);
-}
-
-void MaskedMouseArea::hoverLeaveEvent(QHoverEvent *event)
-{
- Q_UNUSED(event);
- setContainsMouse(false);
-}
diff --git a/examples/quick/customitems/maskedmousearea/maskedmousearea.h b/examples/quick/customitems/maskedmousearea/maskedmousearea.h
deleted file mode 100644
index b235df2a98..0000000000
--- a/examples/quick/customitems/maskedmousearea/maskedmousearea.h
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef MASKEDMOUSEAREA_H
-#define MASKEDMOUSEAREA_H
-
-#include <QImage>
-#include <QQuickItem>
-
-
-class MaskedMouseArea : public QQuickItem
-{
- Q_OBJECT
- Q_PROPERTY(bool pressed READ isPressed NOTIFY pressedChanged)
- Q_PROPERTY(bool containsMouse READ containsMouse NOTIFY containsMouseChanged)
- Q_PROPERTY(QUrl maskSource READ maskSource WRITE setMaskSource NOTIFY maskSourceChanged)
- Q_PROPERTY(qreal alphaThreshold READ alphaThreshold WRITE setAlphaThreshold NOTIFY alphaThresholdChanged)
- QML_ELEMENT
-
-public:
- MaskedMouseArea(QQuickItem *parent = nullptr);
-
- bool contains(const QPointF &point) const override;
-
- bool isPressed() const { return m_pressed; }
- bool containsMouse() const { return m_containsMouse; }
-
- QUrl maskSource() const { return m_maskSource; }
- void setMaskSource(const QUrl &source);
-
- qreal alphaThreshold() const { return m_alphaThreshold; }
- void setAlphaThreshold(qreal threshold);
-
-signals:
- void pressed();
- void released();
- void clicked();
- void canceled();
- void pressedChanged();
- void maskSourceChanged();
- void containsMouseChanged();
- void alphaThresholdChanged();
-
-protected:
- void setPressed(bool pressed);
- void setContainsMouse(bool containsMouse);
- void mousePressEvent(QMouseEvent *event) override;
- void mouseReleaseEvent(QMouseEvent *event) override;
- void hoverEnterEvent(QHoverEvent *event) override;
- void hoverLeaveEvent(QHoverEvent *event) override;
- void mouseUngrabEvent() override;
-
-private:
- bool m_pressed;
- QUrl m_maskSource;
- QImage m_maskImage;
- QPointF m_pressPoint;
- qreal m_alphaThreshold;
- bool m_containsMouse;
-};
-
-#endif
diff --git a/examples/quick/customitems/maskedmousearea/maskedmousearea.pro b/examples/quick/customitems/maskedmousearea/maskedmousearea.pro
deleted file mode 100644
index c5cedf4e6e..0000000000
--- a/examples/quick/customitems/maskedmousearea/maskedmousearea.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-
-CONFIG += qmltypes
-QML_IMPORT_NAME = Example
-QML_IMPORT_MAJOR_VERSION = 1
-
-HEADERS += maskedmousearea.h
-
-SOURCES += main.cpp \
- maskedmousearea.cpp
-
-RESOURCES += maskedmousearea.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/customitems/maskedmousearea
-INSTALLS += target
diff --git a/examples/quick/customitems/maskedmousearea/maskedmousearea.qml b/examples/quick/customitems/maskedmousearea/maskedmousearea.qml
deleted file mode 100644
index df8de3dcb8..0000000000
--- a/examples/quick/customitems/maskedmousearea/maskedmousearea.qml
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import Example
-
-Rectangle {
- height: 480
- width: 320
- color: "black"
-
- Text {
- text: qsTr("CLICK AND HOVER")
- opacity: 0.6
- color: "white"
- font.pixelSize: 20
- anchors.top: parent.top
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.topMargin: 50
- }
-
- Image {
- id: moon
- anchors.centerIn: parent
- scale: moonArea.pressed ? 1.1 : 1.0
- opacity: moonArea.containsMouse ? 1.0 : 0.7
- source: Qt.resolvedUrl("images/moon.png")
-
- MaskedMouseArea {
- id: moonArea
- anchors.fill: parent
- alphaThreshold: 0.4
- maskSource: moon.source
- }
-
- Behavior on opacity {
- NumberAnimation { duration: 200 }
- }
- Behavior on scale {
- NumberAnimation { duration: 100 }
- }
- }
-
- Image {
- id: rightCloud
- anchors {
- centerIn: moon
- verticalCenterOffset: 30
- horizontalCenterOffset: 80
- }
- scale: rightCloudArea.pressed ? 1.1 : 1.0
- opacity: rightCloudArea.containsMouse ? 1.0 : 0.7
- source: Qt.resolvedUrl("images/cloud_2.png")
-
- MaskedMouseArea {
- id: rightCloudArea
- anchors.fill: parent
- alphaThreshold: 0.4
- maskSource: rightCloud.source
- }
-
- Behavior on opacity {
- NumberAnimation { duration: 200 }
- }
- Behavior on scale {
- NumberAnimation { duration: 100 }
- }
- }
-
- Image {
- id: leftCloud
- anchors {
- centerIn: moon
- verticalCenterOffset: 40
- horizontalCenterOffset: -80
- }
- scale: leftCloudArea.pressed ? 1.1 : 1.0
- opacity: leftCloudArea.containsMouse ? 1.0 : 0.7
- source: Qt.resolvedUrl("images/cloud_1.png")
-
- MaskedMouseArea {
- id: leftCloudArea
- anchors.fill: parent
- alphaThreshold: 0.4
- maskSource: leftCloud.source
- }
-
- Behavior on opacity {
- NumberAnimation { duration: 200 }
- }
- Behavior on scale {
- NumberAnimation { duration: 100 }
- }
- }
-}
diff --git a/examples/quick/customitems/maskedmousearea/maskedmousearea.qmlproject b/examples/quick/customitems/maskedmousearea/maskedmousearea.qmlproject
deleted file mode 100644
index 709c19866f..0000000000
--- a/examples/quick/customitems/maskedmousearea/maskedmousearea.qmlproject
+++ /dev/null
@@ -1,16 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "maskedmousearea.qml"
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/quick/customitems/maskedmousearea/maskedmousearea.qrc b/examples/quick/customitems/maskedmousearea/maskedmousearea.qrc
deleted file mode 100644
index 3cc3955e56..0000000000
--- a/examples/quick/customitems/maskedmousearea/maskedmousearea.qrc
+++ /dev/null
@@ -1,8 +0,0 @@
-<RCC>
- <qresource prefix="/customitems/maskedmousearea">
- <file>maskedmousearea.qml</file>
- <file>images/cloud_1.png</file>
- <file>images/cloud_2.png</file>
- <file>images/moon.png</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/customitems/painteditem/CMakeLists.txt b/examples/quick/customitems/painteditem/CMakeLists.txt
index 9f2d54bf8d..ca23161b1c 100644
--- a/examples/quick/customitems/painteditem/CMakeLists.txt
+++ b/examples/quick/customitems/painteditem/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(painteditem LANGUAGES CXX)
@@ -7,44 +7,40 @@ project(painteditem LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/customitems/painteditem")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
add_subdirectory(TextBalloon)
qt_add_executable(painteditemexample WIN32 MACOSX_BUNDLE main.cpp)
qt_add_qml_module(painteditemexample
URI painteditem
- AUTO_RESOURCE_PREFIX
QML_FILES
"textballoons.qml"
)
target_link_libraries(painteditemexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
add_dependencies(painteditemexample qmltextballoon)
install(TARGETS painteditemexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-include(../../shared/QtBundleQmlModuleForMacOS.cmake)
-
-set(app_target "painteditemexample")
-set(qml_plugin_target "qmltextballoon")
-set(qml_module_uri "TextBalloon")
-add_qml_module_to_macos_app_bundle(
- "${app_target}" "${qml_plugin_target}" "${qml_module_uri}")
+qt_generate_deploy_qml_app_script(
+ TARGET painteditemexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/customitems/painteditem/TextBalloon/CMakeLists.txt b/examples/quick/customitems/painteditem/TextBalloon/CMakeLists.txt
index 950e8ee616..b94b297aeb 100644
--- a/examples/quick/customitems/painteditem/TextBalloon/CMakeLists.txt
+++ b/examples/quick/customitems/painteditem/TextBalloon/CMakeLists.txt
@@ -1,33 +1,28 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
message(FATAL_ERROR "TextBalloon should be built as part of the 'painteditem' project, and not in isolation.")
endif()
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/customitems/painteditem/TextBalloon")
-
qt_add_qml_module(qmltextballoon
URI "TextBalloon"
PLUGIN_TARGET qmltextballoon
- AUTO_RESOURCE_PREFIX
SOURCES
textballoon.cpp textballoon.h
)
-target_link_libraries(qmltextballoon PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+target_link_libraries(qmltextballoon PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS qmltextballoon
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/TextBalloon"
+ LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR}/TextBalloon"
)
-
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qmldir
- DESTINATION "${INSTALL_EXAMPLEDIR}"
+ DESTINATION "${CMAKE_INSTALL_BINDIR}/TextBalloon"
)
diff --git a/examples/quick/customitems/painteditem/doc/src/textballoons.qdoc b/examples/quick/customitems/painteditem/doc/src/textballoons.qdoc
index 4d41f6c2a5..a0194759bd 100644
--- a/examples/quick/customitems/painteditem/doc/src/textballoons.qdoc
+++ b/examples/quick/customitems/painteditem/doc/src/textballoons.qdoc
@@ -5,6 +5,7 @@
\brief Shows how to implement QPainter-based custom scenegraph items.
\example customitems/painteditem
\ingroup qtquickexamples
+ \examplecategory {Graphics}
The Painted Item example shows how to use the QML Scene Graph framework to
implement custom scenegraph items using QPainter.
diff --git a/examples/quick/customitems/painteditem/textballoons.qml b/examples/quick/customitems/painteditem/textballoons.qml
index d363093d95..1ef491f061 100644
--- a/examples/quick/customitems/painteditem/textballoons.qml
+++ b/examples/quick/customitems/painteditem/textballoons.qml
@@ -20,14 +20,14 @@ Item {
}
ListView {
+ id: balloonView
anchors.bottom: controls.top
anchors.bottomMargin: 2
anchors.top: parent.top
- id: balloonView
delegate: TextBalloon {
- anchors.right: index % 2 == 0 ? undefined : parent.right
+ anchors.right: index % 2 != 0 ? parent?.right : undefined
height: 60
- rightAligned: index % 2 == 0 ? false : true
+ rightAligned: index % 2 != 0
width: balloonWidth
}
model: balloonModel
@@ -50,7 +50,7 @@ Item {
Text {
anchors.centerIn: parent
- text: "Add another balloon"
+ text: qsTr("Add another balloon")
}
MouseArea {
diff --git a/examples/quick/delegatechooser/CMakeLists.txt b/examples/quick/delegatechooser/CMakeLists.txt
deleted file mode 100644
index cd8edd2524..0000000000
--- a/examples/quick/delegatechooser/CMakeLists.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(delegatechooser LANGUAGES CXX)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/delegatechooser")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-
-qt_standard_project_setup()
-
-add_subdirectory("../shared" "shared")
-
-qt_add_executable(delegatechooserexample WIN32 MACOSX_BUNDLE main.cpp)
-
-target_link_libraries(delegatechooserexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-add_dependencies(delegatechooserexample delegatechooser_shared)
-
-qt_add_qml_module(delegatechooserexample
- URI delegatechooser
- AUTO_RESOURCE_PREFIX
- QML_FILES
- "delegatechooser.qml"
-)
-
-install(TARGETS delegatechooserexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-bundle_shared(delegatechooserexample)
diff --git a/examples/quick/delegatechooser/delegatechooser.pro b/examples/quick/delegatechooser/delegatechooser.pro
deleted file mode 100644
index f06864ba89..0000000000
--- a/examples/quick/delegatechooser/delegatechooser.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-TEMPLATE = app
-QT += quick qml
-
-SOURCES += main.cpp
-RESOURCES += qml.qrc ../shared/shared.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/delegatechooser
-INSTALLS += target
diff --git a/examples/quick/delegatechooser/delegatechooser.qml b/examples/quick/delegatechooser/delegatechooser.qml
deleted file mode 100644
index 9e7eff9fdc..0000000000
--- a/examples/quick/delegatechooser/delegatechooser.qml
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright (C) 2018 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQml.Models
-import QtQuick.Layouts
-import Qt.labs.qmlmodels
-import shared
-
-Rectangle {
- visible: true
- width: 640
- height: 640
-
- ListModel {
- id: listModel
- ListElement { dataType: "rect"; color: "green" }
- ListElement { dataType: "image" }
- ListElement { dataType: "rect"; color: "green" }
- ListElement { dataType: "image" }
- ListElement { dataType: "rect"; color: "blue" }
- ListElement { dataType: "rect"; color: "blue" }
- ListElement { dataType: "rect"; color: "blue" }
- ListElement { dataType: "rect"; color: "blue" }
- ListElement { dataType: "rect"; color: "blue" }
- ListElement { dataType: "rect"; color: "blue" }
- }
-
- ListModel {
- id: listModel2
- ListElement { dataType: "rect"; color: "blue" }
- ListElement { dataType: "rect"; color: "blue" }
- ListElement { dataType: "rect"; color: "green" }
- ListElement { dataType: "image" }
- ListElement { dataType: "rect"; color: "green" }
- ListElement { dataType: "image" }
- ListElement { dataType: "rect"; color: "blue" }
- ListElement { dataType: "rect"; color: "lightsteelblue" }
- ListElement { dataType: "rect"; color: "fuchsia" }
- ListElement { dataType: "rect"; color: "lime" }
- }
-
- DelegateChooser {
- id: fancyDelegate
- role: "dataType"
- DelegateChoice {
- roleValue: "rect"
- delegate: DelegateChooser {
- DelegateChoice {
- row: 0
- Rectangle {
- width: parent.width
- height: 50
- color: "red"
- border.color: "black"
- border.width: 1
- }
- }
- DelegateChoice {
- Rectangle {
- width: parent.width
- height: 50
- color: model.color
- border.color: "black"
- border.width: 1
- }
- }
- }
- }
- DelegateChoice {
- roleValue: "image"
- delegate: Image {
- width: parent.width
- height: 100
- source: Images.qtLogo
- fillMode: Image.PreserveAspectFit
- }
- }
- }
-
- Item {
- anchors.fill: parent
- id: ite
- RowLayout {
- ListView {
- Layout.preferredHeight: ite.height
- Layout.preferredWidth: ite.width * 0.5
- model: listModel
- delegate: fancyDelegate
- }
- ListView {
- Layout.preferredHeight: ite.height
- Layout.preferredWidth: ite.width * 0.5
- model: listModel2
- delegate: fancyDelegate
- }
- }
- }
-}
diff --git a/examples/quick/delegatechooser/main.cpp b/examples/quick/delegatechooser/main.cpp
deleted file mode 100644
index 7cccc7340b..0000000000
--- a/examples/quick/delegatechooser/main.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (C) 2018 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include "../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(delegatechooser/delegatechooser)
diff --git a/examples/quick/delegatechooser/qml.qrc b/examples/quick/delegatechooser/qml.qrc
deleted file mode 100644
index 6128befab3..0000000000
--- a/examples/quick/delegatechooser/qml.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/qt/qml/delegatechooser">
- <file>delegatechooser.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/draganddrop/CMakeLists.txt b/examples/quick/draganddrop/CMakeLists.txt
index 78fbe5da6b..0493f8feea 100644
--- a/examples/quick/draganddrop/CMakeLists.txt
+++ b/examples/quick/draganddrop/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(draganddrop LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/draganddrop")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../shared" "shared")
@@ -24,7 +18,6 @@ qt_add_executable(draganddropexample
qt_add_qml_module(draganddropexample
URI draganddrop
- AUTO_RESOURCE_PREFIX
QML_FILES
"draganddrop.qml"
"tiles/DragTile.qml"
@@ -32,21 +25,29 @@ qt_add_qml_module(draganddropexample
"tiles/tiles.qml"
"views/Icon.qml"
"views/gridview.qml"
+ "external/externaldraganddrop.qml"
)
target_link_libraries(draganddropexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
add_dependencies(draganddropexample draganddrop_shared)
install(TARGETS draganddropexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(draganddropexample)
+qt_generate_deploy_qml_app_script(
+ TARGET draganddropexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/draganddrop/doc/src/draganddrop.qdoc b/examples/quick/draganddrop/doc/src/draganddrop.qdoc
index 23a135b2fa..444bbafca4 100644
--- a/examples/quick/draganddrop/doc/src/draganddrop.qdoc
+++ b/examples/quick/draganddrop/doc/src/draganddrop.qdoc
@@ -6,6 +6,7 @@
\brief This is a collection of QML drag and drop examples.
\image qml-draganddrop-example.png
\ingroup qtquickexamples
+ \examplecategory {Graphics}
\e{Drag and Drop} is a collection of small QML examples relating to the drag
and drop functionality. For more information, visit the \l{Drag and Drop}
diff --git a/examples/quick/draganddrop/draganddrop.qml b/examples/quick/draganddrop/draganddrop.qml
index 87874527af..9e1629e5d4 100644
--- a/examples/quick/draganddrop/draganddrop.qml
+++ b/examples/quick/draganddrop/draganddrop.qml
@@ -11,8 +11,9 @@ Item {
id: ll
anchors.fill: parent
Component.onCompleted: {
- addExample("Tiles", "Press and drag tiles to move them into the matching colored boxes", Qt.resolvedUrl("tiles/tiles.qml"));
- addExample("GridView", "Press and drag to re-order items in the grid", Qt.resolvedUrl("views/gridview.qml"));
+ addExample(qsTr("Tiles"), qsTr("Press and drag tiles to move them into the matching colored boxes"), Qt.resolvedUrl("tiles/tiles.qml"))
+ addExample(qsTr("GridView"), qsTr("Press and drag to re-order items in the grid"), Qt.resolvedUrl("views/gridview.qml"))
+ addExample(qsTr("External"), qsTr("Drag and drop between this and other applications."), Qt.resolvedUrl("external/externaldraganddrop.qml"))
}
}
}
diff --git a/examples/quick/draganddrop/draganddrop.qrc b/examples/quick/draganddrop/draganddrop.qrc
index a710562b79..1e6ae00d12 100644
--- a/examples/quick/draganddrop/draganddrop.qrc
+++ b/examples/quick/draganddrop/draganddrop.qrc
@@ -6,5 +6,6 @@
<file>tiles/tiles.qml</file>
<file>views/gridview.qml</file>
<file>views/Icon.qml</file>
+ <file>external/externaldraganddrop.qml</file>
</qresource>
</RCC>
diff --git a/examples/quick/draganddrop/external/externaldraganddrop.qml b/examples/quick/draganddrop/external/externaldraganddrop.qml
new file mode 100644
index 0000000000..8156a13f55
--- /dev/null
+++ b/examples/quick/draganddrop/external/externaldraganddrop.qml
@@ -0,0 +1,84 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Control {
+ padding: 8
+ contentItem: ColumnLayout {
+ component DragAndDropArea: Rectangle {
+ id: item
+ property string display: qsTr("Drag items to this area, or drag this item to a different drop area.")
+ property alias dropEnabled: acceptDropCB.checked
+ color: dropArea.containsDrag ? Qt.darker(palette.base) : palette.base
+
+ ColorAnimation on color {
+ id: rejectAnimation
+ from: "#FCC"
+ to: palette.base
+ duration: 1000
+ }
+ Label {
+ anchors.fill: parent
+ anchors.margins: 10
+ text: item.display
+ wrapMode: Text.WordWrap
+ }
+ DropArea {
+ id: dropArea
+ anchors.fill: parent
+ keys: ["text/plain"]
+ onEntered: (drag) => {
+ if (!acceptDropCB.checked) {
+ drag.accepted = false
+ rejectAnimation.start()
+ }
+ }
+ onDropped: (drop) => {
+ if (drop.hasText && acceptDropCB.checked) {
+ if (drop.proposedAction === Qt.MoveAction || drop.proposedAction === Qt.CopyAction) {
+ item.display = drop.text
+ drop.acceptProposedAction()
+ }
+ }
+ }
+ }
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ drag.target: draggable
+ }
+ Item {
+ id: draggable
+ anchors.fill: parent
+ Drag.active: mouseArea.drag.active
+ Drag.hotSpot.x: 0
+ Drag.hotSpot.y: 0
+ Drag.mimeData: { "text/plain": item.display }
+ Drag.dragType: Drag.Automatic
+ Drag.onDragFinished: (dropAction) => {
+ if (dropAction === Qt.MoveAction)
+ item.display = ""
+ }
+ }
+ CheckBox {
+ id: acceptDropCB
+ anchors.bottom: parent.bottom
+ checked: true
+ text: qsTr("accept drop")
+ }
+ }
+
+ DragAndDropArea {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ }
+
+ DragAndDropArea {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ }
+ }
+}
diff --git a/examples/quick/draganddrop/tiles/DragTile.qml b/examples/quick/draganddrop/tiles/DragTile.qml
index c4d81a7662..f35695f865 100644
--- a/examples/quick/draganddrop/tiles/DragTile.qml
+++ b/examples/quick/draganddrop/tiles/DragTile.qml
@@ -10,12 +10,14 @@ Item {
required property string colorKey
required property int modelData
- width: 64; height: 64
+ width: 64
+ height: 64
MouseArea {
id: mouseArea
- width: 64; height: 64
+ width: 64
+ height: 64
anchors.centerIn: parent
drag.target: tile
@@ -25,9 +27,12 @@ Item {
Rectangle {
id: tile
- width: 64; height: 64
- anchors.verticalCenter: parent.verticalCenter
- anchors.horizontalCenter: parent.horizontalCenter
+ width: 64
+ height: 64
+ anchors {
+ verticalCenter: parent.verticalCenter
+ horizontalCenter: parent.horizontalCenter
+ }
color: root.colorKey
@@ -41,13 +46,19 @@ Item {
color: "white"
font.pixelSize: 48
text: root.modelData + 1
- horizontalAlignment:Text.AlignHCenter
+ horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
//! [1]
states: State {
when: mouseArea.drag.active
- AnchorChanges { target: tile; anchors.verticalCenter: undefined; anchors.horizontalCenter: undefined }
+ AnchorChanges {
+ target: tile
+ anchors {
+ verticalCenter: undefined
+ horizontalCenter: undefined
+ }
+ }
}
}
}
diff --git a/examples/quick/draganddrop/tiles/DropTile.qml b/examples/quick/draganddrop/tiles/DropTile.qml
index 1d429a5a59..409c3801e4 100644
--- a/examples/quick/draganddrop/tiles/DropTile.qml
+++ b/examples/quick/draganddrop/tiles/DropTile.qml
@@ -8,25 +8,16 @@ DropArea {
id: dragTarget
property string colorKey
- property alias dropProxy: dragTarget
- width: 64; height: 64
+ width: 64
+ height: 64
keys: [ colorKey ]
Rectangle {
id: dropRectangle
anchors.fill: parent
- color: dragTarget.colorKey
-
- states: [
- State {
- when: dragTarget.containsDrag
- PropertyChanges {
- dropRectangle.color: "grey"
- }
- }
- ]
+ color: dragTarget.containsDrag ? "grey" : dragTarget.colorKey
}
}
//! [0]
diff --git a/examples/quick/draganddrop/tiles/tiles.qml b/examples/quick/draganddrop/tiles/tiles.qml
index 62fb802972..c9667022d7 100644
--- a/examples/quick/draganddrop/tiles/tiles.qml
+++ b/examples/quick/draganddrop/tiles/tiles.qml
@@ -14,22 +14,28 @@ Rectangle {
Grid {
id: redDestination
- anchors.left: redSource.right; anchors.top: parent.top;
- anchors.margins: 5
+ anchors {
+ left: redSource.right
+ top: parent.top
+ margins: 5
+ }
width: 64*3
height: 64*3
opacity: 0.5
columns: 3
Repeater {
- model: 9;
+ model: 9
delegate: DropTile { colorKey: "red" }
}
}
Grid {
- anchors.right: blueSource.left; anchors.bottom: parent.bottom;
- anchors.margins: 5
+ anchors {
+ right: blueSource.left
+ bottom: parent.bottom
+ margins: 5
+ }
width: 64*3
height: 64*3
@@ -46,8 +52,12 @@ Rectangle {
Column {
id: redSource
- anchors.left: parent.left; anchors.top: parent.top; anchors.bottom: parent.bottom
- anchors.margins: 5
+ anchors {
+ left: parent.left
+ top: parent.top
+ bottom: parent.bottom
+ margins: 5
+ }
width: 64
spacing: -16
@@ -59,8 +69,12 @@ Rectangle {
Column {
id: blueSource
- anchors.right: parent.right; anchors.top: parent.top; anchors.bottom: parent.bottom
- anchors.margins: 5
+ anchors {
+ right: parent.right
+ top: parent.top
+ bottom: parent.bottom
+ margins: 5
+ }
width: 64
spacing: -16
diff --git a/examples/quick/draganddrop/views/Icon.qml b/examples/quick/draganddrop/views/Icon.qml
index ed5c6e51e5..80bd0c1e7a 100644
--- a/examples/quick/draganddrop/views/Icon.qml
+++ b/examples/quick/draganddrop/views/Icon.qml
@@ -41,8 +41,10 @@ Rectangle {
AnchorChanges {
target: icon
- anchors.horizontalCenter: undefined
- anchors.verticalCenter: undefined
+ anchors {
+ horizontalCenter: undefined
+ verticalCenter: undefined
+ }
}
}
]
diff --git a/examples/quick/draganddrop/views/gridview.qml b/examples/quick/draganddrop/views/gridview.qml
index 1a45f77d45..244d73341d 100644
--- a/examples/quick/draganddrop/views/gridview.qml
+++ b/examples/quick/draganddrop/views/gridview.qml
@@ -1,17 +1,23 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
import QtQml
import QtQuick
import QtQml.Models
GridView {
id: root
- width: 320; height: 480
- cellWidth: 80; cellHeight: 80
+ width: 320
+ height: 480
+ cellWidth: 80
+ cellHeight: 80
displaced: Transition {
- NumberAnimation { properties: "x,y"; easing.type: Easing.OutQuad }
+ NumberAnimation {
+ properties: "x,y"
+ easing.type: Easing.OutQuad
+ }
}
//! [0]
@@ -48,9 +54,10 @@ GridView {
//! [1]
delegate: DropArea {
id: delegateRoot
- required property color color;
+ required property color color
- width: 80; height: 80
+ width: 80
+ height: 80
onEntered: function(drag) {
visualModel.items.move((drag.source as Icon).visualIndex, icon.visualIndex)
diff --git a/examples/quick/embeddedinwidgets/CMakeLists.txt b/examples/quick/embeddedinwidgets/CMakeLists.txt
index 0a52518444..d977def966 100644
--- a/examples/quick/embeddedinwidgets/CMakeLists.txt
+++ b/examples/quick/embeddedinwidgets/CMakeLists.txt
@@ -1,42 +1,44 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(embeddedinwidgets LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/embeddedinwidgets")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick Widgets)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(embeddedinwidgetsexample WIN32 MACOSX_BUNDLE
main.cpp
)
target_link_libraries(embeddedinwidgetsexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::Widgets
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::Widgets
)
# Resources:
qt_add_qml_module(embeddedinwidgetsexample
URI embeddedinwidgets
- AUTO_RESOURCE_PREFIX
QML_FILES
- "main.qml"
+ "Main.qml"
RESOURCES
"reflect.frag.qsb"
)
install(TARGETS embeddedinwidgetsexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET embeddedinwidgetsexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/embeddedinwidgets/main.qml b/examples/quick/embeddedinwidgets/Main.qml
index 1408e8f261..1408e8f261 100644
--- a/examples/quick/embeddedinwidgets/main.qml
+++ b/examples/quick/embeddedinwidgets/Main.qml
diff --git a/examples/quick/embeddedinwidgets/doc/images/qml-embeddedinwidgets-example.jpg b/examples/quick/embeddedinwidgets/doc/images/qml-embeddedinwidgets-example.jpg
new file mode 100644
index 0000000000..b2d188e422
--- /dev/null
+++ b/examples/quick/embeddedinwidgets/doc/images/qml-embeddedinwidgets-example.jpg
Binary files differ
diff --git a/examples/quick/embeddedinwidgets/doc/src/embeddedinwidgets.qdoc b/examples/quick/embeddedinwidgets/doc/src/embeddedinwidgets.qdoc
new file mode 100644
index 0000000000..5e76b5c472
--- /dev/null
+++ b/examples/quick/embeddedinwidgets/doc/src/embeddedinwidgets.qdoc
@@ -0,0 +1,46 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+/*!
+ \title Qt Quick Examples - Embedded in Widgets
+ \example embeddedinwidgets
+ \image qml-embeddedinwidgets-example.jpg
+ \brief Demonstrates embedding a QQuickWindow into a QWidget UI via QWidget::createWindowContainer().
+ \ingroup qtquickexamples
+ \examplecategory {Graphics}
+
+ This example demonstrates one of the approaches to adding Qt Quick content
+ into a QWidget-based application. QQuickView, and its parent class,
+ QQuickWindow derive from QWindow. This means that they can be used with
+ QWidget::createWindowContainer(), like any other QWindow.
+
+ \include examples-run.qdocinc
+
+ Embedding the window internally leads to creating a native child widget
+ inside the widget hierarchy, and the window (the QQuickView in the example)
+ is reparented. The container widget takes care of repositioning the child
+ window so that it appears to be part of the user interface, even though in
+ reality it is separate native window that paints independently from its
+ parent, the QWidget-based top-level window.
+
+ \snippet embeddedinwidgets/main.cpp ctor
+
+ The key step during initialization is the creation of \c container, a
+ QWidget that wraps and hosts the QQuickView. This widget can then added to a
+ layout like any other QWidget.
+
+ \note Using native window embedding is just one possible approach to
+ combining QWidget and Qt Quick user interfaces. The other, more commonly
+ used approach for this is QQuickWidget. See the \l{Qt Quick Widgets Example}
+ for an example of using QQuickWidget. There are significant differences
+ internally when it comes to rendering and event handling. QQuickWidget does
+ not use native windows at all and redirects the Qt Quick rendering into a
+ texture that is then composited with the rest of the QWidget content via a
+ 3D graphics API such as OpenGL or Vulkan. This brings more flexibility, at
+ the expense of performance. It also works on platforms where there is no
+ actual windowing system and no concept of native windows. Whereas the window
+ embedding approach demonstrated by this example can be more performant, but
+ it is best suited for user interfaces where the Qt Quick content occupies a
+ fixed rectangular area and is not resized, stacked, or clipped afterwards.
+
+ \sa QWidget::createWindowContainer()
+*/
diff --git a/examples/quick/embeddedinwidgets/embeddedinwidgets.pro b/examples/quick/embeddedinwidgets/embeddedinwidgets.pro
index 936da9dfeb..493f462370 100644
--- a/examples/quick/embeddedinwidgets/embeddedinwidgets.pro
+++ b/examples/quick/embeddedinwidgets/embeddedinwidgets.pro
@@ -3,10 +3,15 @@ QT += widgets quick
SOURCES += main.cpp
-OTHER_FILES += main.qml
+OTHER_FILES += Main.qml
-RESOURCES += \
- embeddedinwidgets.qrc
+qml_resources.files = \
+ qmldir \
+ Main.qml
+
+qml_resources.prefix = /qt/qml/embeddedinwidgets
+
+RESOURCES += qml_resources
target.path = $$[QT_INSTALL_EXAMPLES]/quick/embeddedinwidgets
INSTALLS += target
diff --git a/examples/quick/embeddedinwidgets/embeddedinwidgets.qrc b/examples/quick/embeddedinwidgets/embeddedinwidgets.qrc
deleted file mode 100644
index 40a959932a..0000000000
--- a/examples/quick/embeddedinwidgets/embeddedinwidgets.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/qt/qml/embeddedinwidgets">
- <file>main.qml</file>
- <file>reflect.frag.qsb</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/embeddedinwidgets/main.cpp b/examples/quick/embeddedinwidgets/main.cpp
index 3633294d13..2cc70e195e 100644
--- a/examples/quick/embeddedinwidgets/main.cpp
+++ b/examples/quick/embeddedinwidgets/main.cpp
@@ -26,6 +26,7 @@ private:
QQuickView *m_quickView;
};
+//! [ctor]
MainWindow::MainWindow()
: m_quickView(new QQuickView)
{
@@ -37,7 +38,7 @@ MainWindow::MainWindow()
this, &MainWindow::quickViewStatusChanged);
connect(m_quickView, &QQuickWindow::sceneGraphError,
this, &MainWindow::sceneGraphError);
- m_quickView->setSource(QUrl(QStringLiteral("qrc:///embeddedinwidgets/main.qml")));
+ m_quickView->loadFromModule("embeddedinwidgets", "Main");
QWidget *container = QWidget::createWindowContainer(m_quickView);
container->setMinimumSize(m_quickView->size());
@@ -51,6 +52,7 @@ MainWindow::MainWindow()
QMenu *fileMenu = menuBar()->addMenu(tr("File"));
fileMenu->addAction(tr("Quit"), qApp, &QCoreApplication::quit);
}
+//! [ctor]
void MainWindow::quickViewStatusChanged(QQuickView::Status status)
{
diff --git a/examples/quick/embeddedinwidgets/qmldir b/examples/quick/embeddedinwidgets/qmldir
new file mode 100644
index 0000000000..06d6e62c19
--- /dev/null
+++ b/examples/quick/embeddedinwidgets/qmldir
@@ -0,0 +1,4 @@
+module embeddedinwidgets
+prefer :/qt/qml/embeddedinwidgets/
+Main 254.0 Main.qml
+
diff --git a/examples/quick/embeddedinwidgets/reflect.frag b/examples/quick/embeddedinwidgets/reflect.frag
index 04a81f86e5..e1d5dbf450 100644
--- a/examples/quick/embeddedinwidgets/reflect.frag
+++ b/examples/quick/embeddedinwidgets/reflect.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in vec2 qt_TexCoord0;
diff --git a/examples/quick/externaldraganddrop/CMakeLists.txt b/examples/quick/externaldraganddrop/CMakeLists.txt
deleted file mode 100644
index 3c31d55fa4..0000000000
--- a/examples/quick/externaldraganddrop/CMakeLists.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(externaldraganddrop LANGUAGES CXX)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/externaldraganddrop")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-
-qt_standard_project_setup()
-
-qt_add_executable(externaldraganddropexample
- WIN32
- MACOSX_BUNDLE
- main.cpp
-)
-
-qt_add_qml_module(externaldraganddropexample
- URI externaldraganddrop
- AUTO_RESOURCE_PREFIX
- QML_FILES
- "DragAndDropTextItem.qml"
- "externaldraganddrop.qml"
-)
-
-target_link_libraries(externaldraganddropexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-install(TARGETS externaldraganddropexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/quick/externaldraganddrop/DragAndDropTextItem.qml b/examples/quick/externaldraganddrop/DragAndDropTextItem.qml
deleted file mode 100644
index c241f6ed82..0000000000
--- a/examples/quick/externaldraganddrop/DragAndDropTextItem.qml
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-
-Rectangle {
- id: item
- property string display
- property alias dropEnabled: acceptDropCB.checked
- color: dropArea.containsDrag ? "#CFC" : "#EEE"
- ColorAnimation on color {
- id: rejectAnimation
- from: "#FCC"
- to: "#EEE"
- duration: 1000
- }
- Label {
- anchors.fill: parent
- anchors.margins: 10
- text: item.display
- wrapMode: Text.WordWrap
- }
- DropArea {
- id: dropArea
- anchors.fill: parent
- keys: ["text/plain"]
- onEntered: (drag) => {
- if (!acceptDropCB.checked) {
- drag.accepted = false
- rejectAnimation.start()
- }
- }
- onDropped: (drop) => {
- if (drop.hasText && acceptDropCB.checked) {
- if (drop.proposedAction == Qt.MoveAction || drop.proposedAction == Qt.CopyAction) {
- item.display = drop.text
- drop.acceptProposedAction()
- }
- }
- }
- }
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- drag.target: draggable
- }
- Item {
- id: draggable
- anchors.fill: parent
- Drag.active: mouseArea.drag.active
- Drag.hotSpot.x: 0
- Drag.hotSpot.y: 0
- Drag.mimeData: { "text/plain": item.display }
- Drag.dragType: Drag.Automatic
- Drag.onDragFinished: (dropAction) => {
- if (dropAction == Qt.MoveAction)
- item.display = ""
- }
- }
- CheckBox {
- id: acceptDropCB
- anchors.bottom: parent.bottom
- checked: true
- text: "accept drop"
- }
-}
diff --git a/examples/quick/externaldraganddrop/doc/images/qml-dnd2-example.png b/examples/quick/externaldraganddrop/doc/images/qml-dnd2-example.png
deleted file mode 100644
index e657d81795..0000000000
--- a/examples/quick/externaldraganddrop/doc/images/qml-dnd2-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/externaldraganddrop/doc/src/externaldraganddrop.qdoc b/examples/quick/externaldraganddrop/doc/src/externaldraganddrop.qdoc
deleted file mode 100644
index 974c91a3cc..0000000000
--- a/examples/quick/externaldraganddrop/doc/src/externaldraganddrop.qdoc
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-/*!
- \title Qt Quick Examples - externaldraganddrop
- \example externaldraganddrop
- \brief This is an example of drag-and-drop among QML applications.
- \image qml-dnd2-example.png
- \ingroup qtquickexamples
-
- \e externaldraganddrop demonstrates how to perform drag and
- drop with \l MouseArea and \l DropArea.
-
- The example allows you to drag the text to other boxes, out of boxes into
- other applications, and from other applications into the boxes. Use the
- option or CTRL keys to copy rather than move text when dragging between
- boxes.
-
- \include examples-run.qdocinc
-
-*/
diff --git a/examples/quick/externaldraganddrop/externaldraganddrop.pro b/examples/quick/externaldraganddrop/externaldraganddrop.pro
deleted file mode 100644
index cd456f9b27..0000000000
--- a/examples/quick/externaldraganddrop/externaldraganddrop.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-RESOURCES += externaldraganddrop.qrc
-
-EXAMPLE_FILES = \
- externaldraganddrop.qml \
- DragAndDropTextItem.qml
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/externaldraganddrop
-INSTALLS += target
diff --git a/examples/quick/externaldraganddrop/externaldraganddrop.qml b/examples/quick/externaldraganddrop/externaldraganddrop.qml
deleted file mode 100644
index b0cd20e69e..0000000000
--- a/examples/quick/externaldraganddrop/externaldraganddrop.qml
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Layouts
-
-Item {
- id: root
- width: 320
- height: 480
-
- ColumnLayout {
-
- anchors.fill: parent
- anchors.margins: 8
-
- Label {
- Layout.fillWidth: true
- text: "Drag text into, out of, and between the boxes below."
- wrapMode: Text.WordWrap
- }
-
- DragAndDropTextItem {
- Layout.fillWidth: true
- Layout.fillHeight: true
- display: "Sample Text"
- }
-
- DragAndDropTextItem {
- Layout.fillWidth: true
- Layout.fillHeight: true
- display: "Option/ctrl drag to copy instead of move text."
- }
-
- DragAndDropTextItem {
- Layout.fillWidth: true
- Layout.fillHeight: true
- dropEnabled: false
- display: "Drag out into other applications."
- }
- }
-}
diff --git a/examples/quick/externaldraganddrop/externaldraganddrop.qmlproject b/examples/quick/externaldraganddrop/externaldraganddrop.qmlproject
deleted file mode 100644
index 359efae597..0000000000
--- a/examples/quick/externaldraganddrop/externaldraganddrop.qmlproject
+++ /dev/null
@@ -1,16 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "externaldraganddrop.qml"
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/quick/externaldraganddrop/externaldraganddrop.qrc b/examples/quick/externaldraganddrop/externaldraganddrop.qrc
deleted file mode 100644
index 94f7e47e24..0000000000
--- a/examples/quick/externaldraganddrop/externaldraganddrop.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/qt/qml/externaldraganddrop">
- <file>externaldraganddrop.qml</file>
- <file>DragAndDropTextItem.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/externaldraganddrop/main.cpp b/examples/quick/externaldraganddrop/main.cpp
deleted file mode 100644
index cd4831018c..0000000000
--- a/examples/quick/externaldraganddrop/main.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include "../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(externaldraganddrop/externaldraganddrop)
diff --git a/examples/quick/imageelements/BorderImageSelector.qml b/examples/quick/imageelements/BorderImageSelector.qml
index 0ea1b0b551..ae99b35231 100644
--- a/examples/quick/imageelements/BorderImageSelector.qml
+++ b/examples/quick/imageelements/BorderImageSelector.qml
@@ -1,10 +1,12 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
import QtQuick
Item {
id: selector
+
property int curIdx: 0
property int maxIdx: 3
property int gridWidth: 240
@@ -12,11 +14,11 @@ Item {
width: parent.width
height: 64
function advance(steps) {
- var nextIdx = curIdx + steps
+ const nextIdx = curIdx + steps
if (nextIdx < 0 || nextIdx > maxIdx)
- return;
- flickable.contentX += gridWidth * steps;
- curIdx += steps;
+ return
+ flickable.contentX += gridWidth * steps
+ curIdx += steps
}
Image {
source: "pics/arrow.png"
diff --git a/examples/quick/imageelements/CMakeLists.txt b/examples/quick/imageelements/CMakeLists.txt
index 905a70d55d..e13f57af9b 100644
--- a/examples/quick/imageelements/CMakeLists.txt
+++ b/examples/quick/imageelements/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(imageelements LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/imageelements")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../shared" "shared")
@@ -23,15 +17,14 @@ qt_add_executable(imageelementsexample
)
target_link_libraries(imageelementsexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(imageelementsexample
URI imageelements
- AUTO_RESOURCE_PREFIX
QML_FILES
"animatedimage.qml"
"animatedsprite.qml"
@@ -61,9 +54,16 @@ qt_add_qml_module(imageelementsexample
)
install(TARGETS imageelementsexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(imageelementsexample)
+qt_generate_deploy_qml_app_script(
+ TARGET imageelementsexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/imageelements/ImageCell.qml b/examples/quick/imageelements/ImageCell.qml
index a49a6f7e52..537ed2a939 100644
--- a/examples/quick/imageelements/ImageCell.qml
+++ b/examples/quick/imageelements/ImageCell.qml
@@ -9,13 +9,17 @@ Item {
Image {
id: image
- width: parent.width; height: parent.height - captionItem.height
+
+ width: parent.width
+ height: parent.height - captionItem.height
source: "pics/qt-logo.png"
clip: true // only makes a difference if mode is PreserveAspectCrop
}
Label {
id: captionItem
- anchors.horizontalCenter: parent.horizontalCenter; anchors.bottom: parent.bottom
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
}
}
diff --git a/examples/quick/imageelements/MyBorderImage.qml b/examples/quick/imageelements/MyBorderImage.qml
index 9b516c242f..ae2d4171bd 100644
--- a/examples/quick/imageelements/MyBorderImage.qml
+++ b/examples/quick/imageelements/MyBorderImage.qml
@@ -17,32 +17,43 @@ Item {
property int maxHeight
property int margin
- width: 240; height: 200
+ width: 240
+ height: 200
BorderImage {
- id: image; anchors.centerIn: parent
+ id: image
+
+ anchors.centerIn: parent
SequentialAnimation on width {
loops: Animation.Infinite
NumberAnimation {
- from: container.minWidth; to: container.maxWidth
- duration: 2000; easing.type: Easing.InOutQuad
+ from: container.minWidth
+ to: container.maxWidth
+ duration: 2000
+ easing.type: Easing.InOutQuad
}
NumberAnimation {
- from: container.maxWidth; to: container.minWidth
- duration: 2000; easing.type: Easing.InOutQuad
+ from: container.maxWidth
+ to: container.minWidth
+ duration: 2000
+ easing.type: Easing.InOutQuad
}
}
SequentialAnimation on height {
loops: Animation.Infinite
NumberAnimation {
- from: container.minHeight; to: container.maxHeight
- duration: 2000; easing.type: Easing.InOutQuad
+ from: container.minHeight
+ to: container.maxHeight
+ duration: 2000
+ easing.type: Easing.InOutQuad
}
NumberAnimation {
- from: container.maxHeight; to: container.minHeight
- duration: 2000; easing.type: Easing.InOutQuad
+ from: container.maxHeight
+ to: container.minHeight
+ duration: 2000
+ easing.type: Easing.InOutQuad
}
}
diff --git a/examples/quick/imageelements/ShadowRectangle.qml b/examples/quick/imageelements/ShadowRectangle.qml
index b81da838fe..2be2fb81f2 100644
--- a/examples/quick/imageelements/ShadowRectangle.qml
+++ b/examples/quick/imageelements/ShadowRectangle.qml
@@ -9,11 +9,25 @@ Item {
//! [shadow]
BorderImage {
anchors.fill: rectangle
- anchors { leftMargin: -6; topMargin: -6; rightMargin: -8; bottomMargin: -8 }
- border { left: 10; top: 10; right: 10; bottom: 10 }
+ anchors {
+ leftMargin: -6
+ topMargin: -6
+ rightMargin: -8
+ bottomMargin: -8
+ }
+ border {
+ left: 10
+ top: 10
+ right: 10
+ bottom: 10
+ }
source: "pics/shadow.png"
}
//! [shadow]
- Rectangle { id: rectangle; anchors.fill: parent }
+ Rectangle {
+ id: rectangle
+
+ anchors.fill: parent
+ }
}
diff --git a/examples/quick/imageelements/animatedimage.qml b/examples/quick/imageelements/animatedimage.qml
index 6a6f12873b..114b5c9075 100644
--- a/examples/quick/imageelements/animatedimage.qml
+++ b/examples/quick/imageelements/animatedimage.qml
@@ -12,6 +12,7 @@ Column {
//! [image]
AnimatedImage {
id: animation
+
source: "pics/Uniflow_steam_engine.gif"
anchors.horizontalCenter: parent.horizontalCenter
speed: speedSlider.value
@@ -23,6 +24,7 @@ Column {
Rectangle {
id: timeline
+
color: "steelblue"
width: animation.width
height: 1
@@ -32,7 +34,8 @@ Column {
Rectangle {
property int frames: animation.frameCount
- width: 4; height: 8
+ width: 4
+ height: 8
x: (animation.width - width) * animation.currentFrame / frames
y: -4
color: "red"
@@ -51,6 +54,7 @@ Column {
Slider {
id: speedSlider
+
from: 0
to: 5
value: 1
@@ -65,6 +69,7 @@ Column {
TextMetrics {
id: fontMetrics
+
text: "100%"
font.pointSize: 12
}
diff --git a/examples/quick/imageelements/animatedsprite.qml b/examples/quick/imageelements/animatedsprite.qml
index ec89a02991..50da7cf0e9 100644
--- a/examples/quick/imageelements/animatedsprite.qml
+++ b/examples/quick/imageelements/animatedsprite.qml
@@ -14,6 +14,7 @@ Item {
//! [sprite]
AnimatedSprite {
id: sprite
+
anchors.centerIn: parent
source: "pics/speaker.png"
frameCount: 60
@@ -34,21 +35,21 @@ Item {
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
onClicked: (mouse) => {
if (!sprite.running) {
- sprite.start();
+ sprite.start()
} else if (!sprite.paused) {
- sprite.pause();
+ sprite.pause()
} else {
if (mouse.button === Qt.LeftButton)
- sprite.resume();
+ sprite.resume()
else if (mouse.button === Qt.MiddleButton)
- sprite.advance(-1);
+ sprite.advance(-1)
else if (mouse.button === Qt.RightButton)
- sprite.advance(1);
+ sprite.advance(1)
}
}
}
- Component.onCompleted: console.log("Press Space to toggle visibility. Click with mouse to pause/resume.")
+ Component.onCompleted: console.log(qsTr("Press Space to toggle visibility. Click with mouse to pause/resume."))
focus: true
Keys.onSpacePressed: sprite.visible = !sprite.visible
}
diff --git a/examples/quick/imageelements/borderimage.qml b/examples/quick/imageelements/borderimage.qml
index cd358de743..7c522a64be 100644
--- a/examples/quick/imageelements/borderimage.qml
+++ b/examples/quick/imageelements/borderimage.qml
@@ -5,11 +5,13 @@ import QtQuick
Rectangle {
id: page
+
width: 320
height: 480
BorderImageSelector {
id: selector
+
curIdx: 0
maxIdx: 3
gridWidth: 240
@@ -20,6 +22,7 @@ Rectangle {
Flickable {
id: mainFlickable
+
width: parent.width
anchors.bottom: parent.bottom
anchors.top: selector.bottom
@@ -29,52 +32,91 @@ Rectangle {
contentWidth: 1030
contentHeight: 420
Grid {
- anchors.centerIn: parent; spacing: 20
+ anchors.centerIn: parent
+ spacing: 20
MyBorderImage {
- minWidth: 120; maxWidth: 240; minHeight: 120; maxHeight: 200
- source: Qt.resolvedUrl("pics/colors.png"); margin: 30
+ minWidth: 120
+ maxWidth: 240
+ minHeight: 120
+ maxHeight: 200
+ source: Qt.resolvedUrl("pics/colors.png")
+ margin: 30
}
MyBorderImage {
- minWidth: 120; maxWidth: 240; minHeight: 120; maxHeight: 200
- source: Qt.resolvedUrl("pics/colors.png"); margin: 30
- horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat
+ minWidth: 120
+ maxWidth: 240
+ minHeight: 120
+ maxHeight: 200
+ source: Qt.resolvedUrl("pics/colors.png")
+ margin: 30
+ horizontalMode: BorderImage.Repeat
+ verticalMode: BorderImage.Repeat
}
MyBorderImage {
- minWidth: 120; maxWidth: 240; minHeight: 120; maxHeight: 200
- source: Qt.resolvedUrl("pics/colors.png"); margin: 30
- horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat
+ minWidth: 120
+ maxWidth: 240
+ minHeight: 120
+ maxHeight: 200
+ source: Qt.resolvedUrl("pics/colors.png")
+ margin: 30
+ horizontalMode: BorderImage.Stretch
+ verticalMode: BorderImage.Repeat
}
MyBorderImage {
- minWidth: 120; maxWidth: 240; minHeight: 120; maxHeight: 200
- source: Qt.resolvedUrl("pics/colors.png"); margin: 30
- horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round
+ minWidth: 120
+ maxWidth: 240
+ minHeight: 120
+ maxHeight: 200
+ source: Qt.resolvedUrl("pics/colors.png")
+ margin: 30
+ horizontalMode: BorderImage.Round
+ verticalMode: BorderImage.Round
}
MyBorderImage {
- minWidth: 60; maxWidth: 200; minHeight: 40; maxHeight: 200
- source: Qt.resolvedUrl("pics/bw.png"); margin: 10
+ minWidth: 60
+ maxWidth: 200
+ minHeight: 40
+ maxHeight: 200
+ source: Qt.resolvedUrl("pics/bw.png")
+ margin: 10
}
MyBorderImage {
- minWidth: 60; maxWidth: 200; minHeight: 40; maxHeight: 200
- source: Qt.resolvedUrl("pics/bw.png"); margin: 10
- horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat
+ minWidth: 60
+ maxWidth: 200
+ minHeight: 40
+ maxHeight: 200
+ source: Qt.resolvedUrl("pics/bw.png")
+ margin: 10
+ horizontalMode: BorderImage.Repeat
+ verticalMode: BorderImage.Repeat
}
MyBorderImage {
- minWidth: 60; maxWidth: 200; minHeight: 40; maxHeight: 200
- source: Qt.resolvedUrl("pics/bw.png"); margin: 10
- horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat
+ minWidth: 60
+ maxWidth: 200
+ minHeight: 40
+ maxHeight: 200
+ source: Qt.resolvedUrl("pics/bw.png")
+ margin: 10
+ horizontalMode: BorderImage.Stretch
+ verticalMode: BorderImage.Repeat
}
MyBorderImage {
- minWidth: 60; maxWidth: 200; minHeight: 40; maxHeight: 200
- source: Qt.resolvedUrl("pics/bw.png"); margin: 10
- horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round
+ minWidth: 60
+ maxWidth: 200
+ minHeight: 40
+ maxHeight: 200
+ source: Qt.resolvedUrl("pics/bw.png")
+ margin: 10
+ horizontalMode: BorderImage.Round
+ verticalMode: BorderImage.Round
}
}
}
diff --git a/examples/quick/imageelements/doc/src/imageelements.qdoc b/examples/quick/imageelements/doc/src/imageelements.qdoc
index 3caf49201b..06fa25ab19 100644
--- a/examples/quick/imageelements/doc/src/imageelements.qdoc
+++ b/examples/quick/imageelements/doc/src/imageelements.qdoc
@@ -6,6 +6,7 @@
\brief This is a collection of QML examples relating to image types.
\image qml-imageelements-example.png
\ingroup qtquickexamples
+ \examplecategory {Graphics}
\e{Image Elements} is a collection of small QML examples relating to image
types. For more information, visit \l{Use Case - Visual Elements In QML}.
diff --git a/examples/quick/imageelements/framestepping.qml b/examples/quick/imageelements/framestepping.qml
index 2f104248d8..a06aaae780 100644
--- a/examples/quick/imageelements/framestepping.qml
+++ b/examples/quick/imageelements/framestepping.qml
@@ -9,6 +9,7 @@ Rectangle {
height: 320
Image {
id: img
+
anchors.centerIn: parent
cache: true
source: "pics/multi.ico"
@@ -30,7 +31,8 @@ Rectangle {
anchors.bottom: parent.bottom
anchors.margins: 6
horizontalAlignment: Text.AlignHCenter
- text: qsTr("frame " + (img.currentFrame + 1) + " of " + img.frameCount +
- "\nPress PgUp/PgDn to switch frames")
+ text: qsTr("frame %1 of %2 \nPress PgUp/PgDn to switch frames")
+ .arg(img.currentFrame + 1)
+ .arg(img.frameCount)
}
}
diff --git a/examples/quick/imageelements/image.qml b/examples/quick/imageelements/image.qml
index 1deaa9827d..11acb51054 100644
--- a/examples/quick/imageelements/image.qml
+++ b/examples/quick/imageelements/image.qml
@@ -1,12 +1,15 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
import QtQuick
Rectangle {
width: 320
height: 480
Grid {
+ id: grid
+
property int cellWidth: (width - (spacing * (columns - 1))) / columns
property int cellHeight: (height - (spacing * (rows - 1))) / rows
@@ -18,8 +21,8 @@ Rectangle {
spacing: 30
component SizedImageCell: ImageCell {
- width: parent.cellWidth
- height: parent.cellHeight
+ width: grid.cellWidth
+ height: grid.cellHeight
}
SizedImageCell {
diff --git a/examples/quick/imageelements/imageelements.qml b/examples/quick/imageelements/imageelements.qml
index e50362be5f..3470a30879 100644
--- a/examples/quick/imageelements/imageelements.qml
+++ b/examples/quick/imageelements/imageelements.qml
@@ -9,16 +9,17 @@ Item {
width: 320
Shared.LauncherList {
id: ll
+
anchors.fill: parent
Component.onCompleted: {
- addExample("BorderImage", "An image with scaled borders", Qt.resolvedUrl("borderimage.qml"));
- addExample("Image", "A showcase of the options available to Image", Qt.resolvedUrl("image.qml"));
- addExample("Shadows", "Rectangles with a drop-shadow effect", Qt.resolvedUrl("shadows.qml"));
- addExample("AnimatedImage", "An image which plays animated formats", Qt.resolvedUrl("animatedimage.qml"));
- addExample("AnimatedSprite", "A simple sprite-based animation", Qt.resolvedUrl("animatedsprite.qml"));
- addExample("SpriteSequence", "A sprite-based animation with complex transitions", Qt.resolvedUrl("spritesequence.qml"));
- addExample("FrameStepping", "A multi-frame non-animated image", Qt.resolvedUrl("framestepping.qml"));
- addExample("MultiBorderImage", "A multi-frame image with scaled borders", Qt.resolvedUrl("multiframeborderimage.qml"));
+ addExample(qsTr("BorderImage"), qsTr("An image with scaled borders"), Qt.resolvedUrl("borderimage.qml"))
+ addExample(qsTr("Image"), qsTr("A showcase of the options available to Image"), Qt.resolvedUrl("image.qml"))
+ addExample(qsTr("Shadows"), qsTr("Rectangles with a drop-shadow effect"), Qt.resolvedUrl("shadows.qml"))
+ addExample(qsTr("AnimatedImage"), qsTr("An image which plays animated formats"), Qt.resolvedUrl("animatedimage.qml"))
+ addExample(qsTr("AnimatedSprite"), qsTr("A simple sprite-based animation"), Qt.resolvedUrl("animatedsprite.qml"))
+ addExample(qsTr("SpriteSequence"), qsTr("A sprite-based animation with complex transitions"), Qt.resolvedUrl("spritesequence.qml"))
+ addExample(qsTr("FrameStepping"), qsTr("A multi-frame non-animated image"), Qt.resolvedUrl("framestepping.qml"))
+ addExample(qsTr("MultiBorderImage"), qsTr("A multi-frame image with scaled borders"), Qt.resolvedUrl("multiframeborderimage.qml"))
}
}
}
diff --git a/examples/quick/imageelements/multiframeborderimage.qml b/examples/quick/imageelements/multiframeborderimage.qml
index fd4e2ba190..b5e76ae976 100644
--- a/examples/quick/imageelements/multiframeborderimage.qml
+++ b/examples/quick/imageelements/multiframeborderimage.qml
@@ -9,11 +9,17 @@ Rectangle {
height: 320
BorderImage {
id: img
+
anchors.fill: parent
anchors.margins: 6
cache: true
source: "pics/multi.ico"
- border { left: 19; top: 19; right: 19; bottom: 19 }
+ border {
+ left: 19
+ top: 19
+ right: 19
+ bottom: 19
+ }
horizontalTileMode: BorderImage.Stretch
Shortcut {
diff --git a/examples/quick/imageelements/shadows.qml b/examples/quick/imageelements/shadows.qml
index db78f04e98..3f345a3937 100644
--- a/examples/quick/imageelements/shadows.qml
+++ b/examples/quick/imageelements/shadows.qml
@@ -6,21 +6,28 @@ import QtQuick
Rectangle {
id: window
- width: 480; height: 320
+ width: 480
+ height: 320
color: "gray"
ShadowRectangle {
- anchors.centerIn: parent; width: 250; height: 250
+ anchors.centerIn: parent
+ width: 250
+ height: 250
color: "lightsteelblue"
}
ShadowRectangle {
- anchors.centerIn: parent; width: 200; height: 200
+ anchors.centerIn: parent
+ width: 200
+ height: 200
color: "steelblue"
}
ShadowRectangle {
- anchors.centerIn: parent; width: 150; height: 150
+ anchors.centerIn: parent
+ width: 150
+ height: 150
color: "thistle"
}
}
diff --git a/examples/quick/imageelements/spritesequence.qml b/examples/quick/imageelements/spritesequence.qml
index 6cd97dee74..d578700195 100644
--- a/examples/quick/imageelements/spritesequence.qml
+++ b/examples/quick/imageelements/spritesequence.qml
@@ -6,20 +6,36 @@ Item {
width: 320
height: 480
MouseArea {
- onClicked: anim.start();
+ onClicked: anim.start()
anchors.fill: parent
}
//! [animation]
SequentialAnimation {
id: anim
- ScriptAction { script: image.goalSprite = "falling"; }
- NumberAnimation { target: image; property: "y"; to: 480; duration: 12000; }
- ScriptAction { script: {image.goalSprite = ""; image.jumpTo("still");} }
- PropertyAction { target: image; property: "y"; value: 0 }
+
+ ScriptAction { script: image.goalSprite = "falling" }
+ NumberAnimation {
+ target: image
+ property: "y"
+ to: 480
+ duration: 12000
+ }
+ ScriptAction {
+ script: {
+ image.goalSprite = ""
+ image.jumpTo("still")
+ }
+ }
+ PropertyAction {
+ target: image
+ property: "y"
+ value: 0
+ }
}
//! [animation]
SpriteSequence {
id: image
+
width: 256
height: 256
anchors.horizontalCenter: parent.horizontalCenter
diff --git a/examples/quick/imageprovider/CMakeLists.txt b/examples/quick/imageprovider/CMakeLists.txt
index 0b880da74b..a2fa3e5087 100644
--- a/examples/quick/imageprovider/CMakeLists.txt
+++ b/examples/quick/imageprovider/CMakeLists.txt
@@ -1,47 +1,36 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(qmlimageproviderplugin LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/imageprovider/ImageProviderCore")
-set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/examples/quick/imageprovider)
+set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/examples/quick/imageprovider)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt6_add_qml_module(qmlimageproviderplugin
URI "ImageProviderCore"
- AUTO_RESOURCE_PREFIX
PLUGIN_TARGET qmlimageproviderplugin
NO_PLUGIN_OPTIONAL
NO_GENERATE_PLUGIN_SOURCE
CLASS_NAME ImageProviderExtensionPlugin
-)
-
-target_sources(qmlimageproviderplugin PRIVATE
- imageprovider.cpp
-)
-
-set_target_properties(qmlimageproviderplugin PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
+ SOURCES
+ imageprovider.cpp
)
target_link_libraries(qmlimageproviderplugin PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS qmlimageproviderplugin
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
diff --git a/examples/quick/imageprovider/doc/src/imageprovider.qdoc b/examples/quick/imageprovider/doc/src/imageprovider.qdoc
index 7a4f64285c..d4cc2c923d 100644
--- a/examples/quick/imageprovider/doc/src/imageprovider.qdoc
+++ b/examples/quick/imageprovider/doc/src/imageprovider.qdoc
@@ -5,6 +5,7 @@
\title C++ Extensions: Image Provider Example
\brief How to load images in QML with QQuickImageProvider.
\example imageprovider
+ \examplecategory {Graphics}
This examples shows how to use QQuickImageProvider to serve images
to QML image elements.
diff --git a/examples/quick/imageresponseprovider/CMakeLists.txt b/examples/quick/imageresponseprovider/CMakeLists.txt
index 0e64832d1a..52486af046 100644
--- a/examples/quick/imageresponseprovider/CMakeLists.txt
+++ b/examples/quick/imageresponseprovider/CMakeLists.txt
@@ -1,23 +1,19 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(qmlimageresponseproviderplugin LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/imageresponseprovider/ImageResponseProviderCore")
-set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/examples/quick/imageresponseprovider)
+set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/examples/quick/imageresponseprovider)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt6_add_qml_module(qmlimageresponseproviderplugin
URI "ImageResponseProviderCore"
- AUTO_RESOURCE_PREFIX
PLUGIN_TARGET qmlimageresponseproviderplugin
NO_PLUGIN_OPTIONAL
NO_GENERATE_PLUGIN_SOURCE
@@ -34,14 +30,14 @@ set_target_properties(qmlimageresponseproviderplugin PROPERTIES
)
target_link_libraries(qmlimageresponseproviderplugin PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS qmlimageresponseproviderplugin
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
diff --git a/examples/quick/imageresponseprovider/doc/src/imageresponseprovider.qdoc b/examples/quick/imageresponseprovider/doc/src/imageresponseprovider.qdoc
index f05118abbb..7d45057116 100644
--- a/examples/quick/imageresponseprovider/doc/src/imageresponseprovider.qdoc
+++ b/examples/quick/imageresponseprovider/doc/src/imageresponseprovider.qdoc
@@ -5,6 +5,7 @@
\title C++ Extensions: Image Response Provider Example
\example imageresponseprovider
\brief How to load images asynchronously in QML.
+ \examplecategory {Graphics}
This examples shows how to use QQuickImageProvider to serve images
diff --git a/examples/quick/itemvariablerefreshrate/CMakeLists.txt b/examples/quick/itemvariablerefreshrate/CMakeLists.txt
index a08fc01aca..ca65a005e1 100644
--- a/examples/quick/itemvariablerefreshrate/CMakeLists.txt
+++ b/examples/quick/itemvariablerefreshrate/CMakeLists.txt
@@ -4,15 +4,9 @@
cmake_minimum_required(VERSION 3.16)
project(itemvariablerefreshrate LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/itemvariablerefreshrate")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(itemvariablerefreshrateexample
WIN32
@@ -21,15 +15,14 @@ qt_add_executable(itemvariablerefreshrateexample
)
target_link_libraries(itemvariablerefreshrateexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(itemvariablerefreshrateexample
URI itemvariablerefreshrate
- AUTO_RESOURCE_PREFIX
QML_FILES
"itemvariablerefreshrate.qml"
RESOURCES
@@ -37,7 +30,16 @@ qt_add_qml_module(itemvariablerefreshrateexample
)
install(TARGETS itemvariablerefreshrateexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET itemvariablerefreshrateexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/itemvariablerefreshrate/doc/src/itemvariablerefreshrate.qdoc b/examples/quick/itemvariablerefreshrate/doc/src/itemvariablerefreshrate.qdoc
index 5be8cd36eb..51fbc2c523 100644
--- a/examples/quick/itemvariablerefreshrate/doc/src/itemvariablerefreshrate.qdoc
+++ b/examples/quick/itemvariablerefreshrate/doc/src/itemvariablerefreshrate.qdoc
@@ -7,6 +7,7 @@
\brief A Qt Quick example shows how to setup variable refresh rate for
specific parts of the UI.
\ingroup qtquickexamples
+ \examplecategory {Graphics}
This example demonstrates using the live property of a \l{Item Layers} to get a
variable and independent refresh rate for Quick items. This can provide a significant
diff --git a/examples/quick/keyinteraction/CMakeLists.txt b/examples/quick/keyinteraction/CMakeLists.txt
index 6524b87fcf..926e5e58a3 100644
--- a/examples/quick/keyinteraction/CMakeLists.txt
+++ b/examples/quick/keyinteraction/CMakeLists.txt
@@ -1,34 +1,27 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(keyinteraction LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/keyinteraction")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(keyinteractionexample WIN32 MACOSX_BUNDLE
main.cpp
)
target_link_libraries(keyinteractionexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
# Resources:
qt_add_qml_module(keyinteractionexample
URI keyinteraction
- AUTO_RESOURCE_PREFIX
QML_FILES
"ContextMenu.qml"
"GridMenu.qml"
@@ -43,7 +36,16 @@ qt_add_qml_module(keyinteractionexample
)
install(TARGETS keyinteractionexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET keyinteractionexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/keyinteraction/ContextMenu.qml b/examples/quick/keyinteraction/ContextMenu.qml
index 6364118602..22d149fd9d 100644
--- a/examples/quick/keyinteraction/ContextMenu.qml
+++ b/examples/quick/keyinteraction/ContextMenu.qml
@@ -5,6 +5,7 @@ import QtQuick
FocusScope {
id: container
+
required property Item keyRightTarget
property bool open: false
@@ -19,10 +20,14 @@ FocusScope {
Keys.onRightPressed: container.keyRightTarget.focus = true
Text {
- anchors { top: parent.top; horizontalCenter: parent.horizontalCenter; margins: 30 }
+ anchors {
+ top: parent.top
+ horizontalCenter: parent.horizontalCenter
+ margins: 30
+ }
color: "black"
font.pixelSize: 14
- text: "Context Menu"
+ text: qsTr("Context Menu")
}
}
}
diff --git a/examples/quick/keyinteraction/GridMenu.qml b/examples/quick/keyinteraction/GridMenu.qml
index d21f846089..b17a72bdc8 100644
--- a/examples/quick/keyinteraction/GridMenu.qml
+++ b/examples/quick/keyinteraction/GridMenu.qml
@@ -1,10 +1,12 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
import QtQuick
FocusScope {
id: menu
+
property alias interactive: gridView.interactive
required property Item keyUpTarget
required property Item keyDownTarget
@@ -14,14 +16,24 @@ FocusScope {
anchors.fill: parent
clip: true
gradient: Gradient {
- GradientStop { position: 0.0; color: "#193441" }
- GradientStop { position: 1.0; color: Qt.darker("#193441") }
+ GradientStop {
+ position: 0.0
+ color: "#193441"
+ }
+ GradientStop {
+ position: 1.0
+ color: Qt.darker("#193441")
+ }
}
GridView {
id: gridView
- anchors.fill: parent; anchors.leftMargin: 20; anchors.rightMargin: 20
- cellWidth: 152; cellHeight: 152
+
+ anchors.fill: parent
+ anchors.leftMargin: 20
+ anchors.rightMargin: 20
+ cellWidth: 152
+ cellHeight: 152
focus: true
model: 12
@@ -31,22 +43,36 @@ FocusScope {
delegate: Item {
id: container
- width: GridView.view.cellWidth
- height: GridView.view.cellHeight
+
+ width: gridView.cellWidth
+ height: gridView.cellHeight
required property int index
Rectangle {
id: content
+
color: "transparent"
antialiasing: true
- anchors.fill: parent; anchors.margins: 20; radius: 10
+ anchors.fill: parent
+ anchors.margins: 20
+ radius: 10
- Rectangle { color: "#91AA9D"; anchors.fill: parent; anchors.margins: 3; radius: 8; antialiasing: true }
- Image { source: "images/qt-logo.png"; anchors.centerIn: parent }
+ Rectangle {
+ color: "#91AA9D"
+ anchors.fill: parent
+ anchors.margins: 3
+ radius: 8
+ antialiasing: true
+ }
+ Image {
+ source: "images/qt-logo.png"
+ anchors.centerIn: parent
+ }
}
MouseArea {
id: mouseArea
+
anchors.fill: parent
hoverEnabled: true
@@ -57,7 +83,8 @@ FocusScope {
}
states: State {
- name: "active"; when: container.activeFocus
+ name: "active"
+ when: container.activeFocus
PropertyChanges {
content {
color: "#FCFFF5"
@@ -67,7 +94,10 @@ FocusScope {
}
transitions: Transition {
- NumberAnimation { properties: "scale"; duration: 100 }
+ NumberAnimation {
+ properties: "scale"
+ duration: 100
+ }
}
}
}
diff --git a/examples/quick/keyinteraction/ListMenu.qml b/examples/quick/keyinteraction/ListMenu.qml
index 47201099ff..0f4763e1b2 100644
--- a/examples/quick/keyinteraction/ListMenu.qml
+++ b/examples/quick/keyinteraction/ListMenu.qml
@@ -6,67 +6,117 @@ import QtQuick
FocusScope {
id: menu
+
clip: true
required property Item keyUpTarget
required property Item keyLeftTarget
ListView {
id: list1
- y: activeFocus ? 10 : 40; width: parent.width / 3; height: parent.height - 20
+
+ y: activeFocus ? 10 : 40
+ width: parent.width / 3
+ height: parent.height - 20
focus: true
+
KeyNavigation.up: menu.keyUpTarget
KeyNavigation.left: menu.keyLeftTarget
KeyNavigation.right: list2
- model: 10; cacheBuffer: 200
+
+ model: 10
+ cacheBuffer: 200
delegate: ListViewDelegate {}
Behavior on y {
- NumberAnimation { duration: 600; easing.type: Easing.OutQuint }
+ NumberAnimation {
+ duration: 600
+ easing.type: Easing.OutQuint
+ }
}
}
ListView {
id: list2
- y: activeFocus ? 10 : 40; x: parseInt(parent.width / 3); width: parent.width / 3; height: parent.height - 20
+
+ y: activeFocus ? 10 : 40
+ x: parseInt(parent.width / 3)
+ width: parent.width / 3
+ height: parent.height - 20
+
KeyNavigation.up: menu.keyUpTarget
KeyNavigation.left: list1
KeyNavigation.right: list3
- model: 10; cacheBuffer: 200
+
+ model: 10
+ cacheBuffer: 200
delegate: ListViewDelegate {}
Behavior on y {
- NumberAnimation { duration: 600; easing.type: Easing.OutQuint }
+ NumberAnimation {
+ duration: 600
+ easing.type: Easing.OutQuint
+ }
}
}
ListView {
id: list3
- y: activeFocus ? 10 : 40; x: parseInt(2 * parent.width / 3); width: parent.width / 3; height: parent.height - 20
+
+ y: activeFocus ? 10 : 40
+ x: parseInt(2 * parent.width / 3)
+ width: parent.width / 3
+ height: parent.height - 20
+
KeyNavigation.up: menu.keyUpTarget
KeyNavigation.left: list2
- model: 10; cacheBuffer: 200
+
+ model: 10
+ cacheBuffer: 200
delegate: ListViewDelegate {}
Behavior on y {
- NumberAnimation { duration: 600; easing.type: Easing.OutQuint }
+ NumberAnimation {
+ duration: 600
+ easing.type: Easing.OutQuint
+ }
}
}
- Rectangle { width: parent.width; height: 1; color: "#D1DBBD" }
+ Rectangle {
+ width: parent.width
+ height: 1
+ color: "#D1DBBD"
+ }
Rectangle {
- y: 1; width: parent.width; height: 10
+ y: 1
+ width: parent.width
+ height: 10
gradient: Gradient {
- GradientStop { position: 0.0; color: "#3E606F" }
- GradientStop { position: 1.0; color: "transparent" }
+ GradientStop {
+ position: 0.0
+ color: "#3E606F"
+ }
+ GradientStop {
+ position: 1.0
+ color: "transparent"
+ }
}
}
Rectangle {
- y: parent.height - 10; width: parent.width; height: 10
+ y: parent.height - 10
+ width: parent.width
+ height: 10
gradient: Gradient {
- GradientStop { position: 1.0; color: "#3E606F" }
- GradientStop { position: 0.0; color: "transparent" }
+ GradientStop {
+ position: 1.0
+ color: "#3E606F"
+ }
+ GradientStop {
+ position: 0.0
+ color: "transparent"
+ }
}
}
}
diff --git a/examples/quick/keyinteraction/ListViewDelegate.qml b/examples/quick/keyinteraction/ListViewDelegate.qml
index 4b2424f393..8ae43c8ab5 100644
--- a/examples/quick/keyinteraction/ListViewDelegate.qml
+++ b/examples/quick/keyinteraction/ListViewDelegate.qml
@@ -7,28 +7,42 @@ Item {
id: container
required property int index
- width: ListView.view.width; height: 60; anchors.leftMargin: 10; anchors.rightMargin: 10
+ width: ListView.view.width
+ height: 60
+ anchors.leftMargin: 10
+ anchors.rightMargin: 10
Rectangle {
id: content
- anchors.centerIn: parent; width: container.width - 40; height: container.height - 10
+
+ anchors.centerIn: parent
+ width: container.width - 40
+ height: container.height - 10
color: "transparent"
antialiasing: true
radius: 10
- Rectangle { anchors.fill: parent; anchors.margins: 3; color: "#91AA9D"; antialiasing: true; radius: 8 }
+ Rectangle {
+ anchors.fill: parent
+ anchors.margins: 3
+ color: "#91AA9D"
+ antialiasing: true
+ radius: 8
+ }
}
Text {
id: label
+
anchors.centerIn: content
- text: "List element " + (container.index + 1)
+ text: qsTr("List element ") + (container.index + 1)
color: "#193441"
font.pixelSize: 14
}
MouseArea {
id: mouseArea
+
anchors.fill: parent
hoverEnabled: true
@@ -39,7 +53,8 @@ Item {
}
states: State {
- name: "active"; when: container.activeFocus
+ name: "active"
+ when: container.activeFocus
PropertyChanges {
content {
color: "#FCFFF5"
@@ -50,6 +65,9 @@ Item {
}
transitions: Transition {
- NumberAnimation { properties: "scale"; duration: 100 }
+ NumberAnimation {
+ properties: "scale"
+ duration: 100
+ }
}
}
diff --git a/examples/quick/keyinteraction/TabMenu.qml b/examples/quick/keyinteraction/TabMenu.qml
index e3c622aca1..04451b3206 100644
--- a/examples/quick/keyinteraction/TabMenu.qml
+++ b/examples/quick/keyinteraction/TabMenu.qml
@@ -1,6 +1,7 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
import QtQuick
FocusScope {
@@ -12,19 +13,30 @@ FocusScope {
anchors.fill: parent
clip: true
gradient: Gradient {
- GradientStop { position: 0.0; color: "#193441" }
- GradientStop { position: 1.0; color: Qt.darker("#193441") }
+ GradientStop {
+ position: 0.0
+ color: "#193441"
+ }
+ GradientStop {
+ position: 1.0
+ color: Qt.darker("#193441")
+ }
}
Row {
id: tabView
- anchors.fill: parent; anchors.leftMargin: 20; anchors.rightMargin: 20
+
+ anchors.fill: parent
+ anchors.leftMargin: 20
+ anchors.rightMargin: 20
Repeater {
activeFocusOnTab: false
model: 5
Item {
id: container
- width: 152; height: 152
+
+ width: 152
+ height: 152
activeFocusOnTab: true
focus: true
@@ -35,10 +47,21 @@ FocusScope {
id: content
color: "transparent"
antialiasing: true
- anchors.fill: parent; anchors.margins: 20; radius: 10
+ anchors.fill: parent
+ anchors.margins: 20
+ radius: 10
- Rectangle { color: "#91AA9D"; anchors.fill: parent; anchors.margins: 3; radius: 8; antialiasing: true }
- Image { source: "images/qt-logo.png"; anchors.centerIn: parent }
+ Rectangle {
+ color: "#91AA9D"
+ anchors.fill: parent
+ anchors.margins: 3
+ radius: 8
+ antialiasing: true
+ }
+ Image {
+ source: "images/qt-logo.png"
+ anchors.centerIn: parent
+ }
}
MouseArea {
@@ -52,7 +75,8 @@ FocusScope {
}
states: State {
- name: "active"; when: container.activeFocus
+ name: "active"
+ when: container.activeFocus
PropertyChanges {
content {
color: "#FCFFF5"
@@ -62,7 +86,10 @@ FocusScope {
}
transitions: Transition {
- NumberAnimation { properties: "scale"; duration: 100 }
+ NumberAnimation {
+ properties: "scale"
+ duration: 100
+ }
}
}
}
diff --git a/examples/quick/keyinteraction/doc/src/keyinteraction.qdoc b/examples/quick/keyinteraction/doc/src/keyinteraction.qdoc
index 1b1cc47138..378169452c 100644
--- a/examples/quick/keyinteraction/doc/src/keyinteraction.qdoc
+++ b/examples/quick/keyinteraction/doc/src/keyinteraction.qdoc
@@ -6,6 +6,7 @@
\brief This is a collection of QML keyboard interaction examples.
\image qml-keyinteraction-example.png
\ingroup qtquickexamples
+ \examplecategory {Graphics}
\e{Keyboard Focus in Qt Quick} combines various methods of
handling keyboard focus. For more information, visit
diff --git a/examples/quick/keyinteraction/focus.qml b/examples/quick/keyinteraction/focus.qml
index 385f35d05b..42edcb5f01 100644
--- a/examples/quick/keyinteraction/focus.qml
+++ b/examples/quick/keyinteraction/focus.qml
@@ -7,18 +7,23 @@ import QtQuick
Rectangle {
id: window
- width: 800; height: 640
+ width: 800
+ height: 640
color: "#3E606F"
FocusScope {
id: mainView
- width: parent.width; height: parent.height
+ width: parent.width
+ height: parent.height
focus: true
TabMenu {
id: tabMenu
- y: 160; width: parent.width; height: 160
+
+ y: 160
+ width: parent.width
+ height: 160
keyUpTarget: listMenu
keyDownTarget: gridMenu
@@ -34,7 +39,10 @@ Rectangle {
GridMenu {
id: gridMenu
- y: 320; width: parent.width; height: 320
+
+ y: 320
+ width: parent.width
+ height: 320
activeFocusOnTab: true
keyUpTarget: tabMenu
@@ -49,7 +57,10 @@ Rectangle {
ListMenu {
id: listMenu
- y: 640; width: parent.width; height: 320
+
+ y: 640
+ width: parent.width
+ height: 320
activeFocusOnTab: true
keyUpTarget: gridMenu
@@ -72,7 +83,7 @@ Rectangle {
State {
name: "showTabViews"
PropertyChanges {
- tabMenu.y: 160
+ tabMenu.y: 160
gridMenu.y: 320
listMenu.y: 640
}
@@ -81,7 +92,7 @@ Rectangle {
State {
name: "showGridViews"
PropertyChanges {
- tabMenu.y: 0
+ tabMenu.y: 0
gridMenu.y: 160
listMenu.y: 480
}
@@ -98,7 +109,11 @@ Rectangle {
]
transitions: Transition {
- NumberAnimation { properties: "y"; duration: 600; easing.type: Easing.OutQuint }
+ NumberAnimation {
+ properties: "y"
+ duration: 600
+ easing.type: Easing.OutQuint
+ }
}
}
@@ -108,7 +123,8 @@ Rectangle {
anchors.verticalCenter: parent.verticalCenter
MouseArea {
- anchors.fill: parent; anchors.margins: -10
+ anchors.fill: parent
+ anchors.margins: -10
onClicked: contextMenu.focus = true
}
}
@@ -135,6 +151,10 @@ Rectangle {
}
transitions: Transition {
- NumberAnimation { properties: "x,opacity"; duration: 600; easing.type: Easing.OutQuint }
+ NumberAnimation {
+ properties: "x,opacity"
+ duration: 600
+ easing.type: Easing.OutQuint
+ }
}
}
diff --git a/examples/quick/layouts/CMakeLists.txt b/examples/quick/layouts/CMakeLists.txt
index 74235b1553..2979b8173d 100644
--- a/examples/quick/layouts/CMakeLists.txt
+++ b/examples/quick/layouts/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(layouts LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/layouts")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(layoutsexample
WIN32
@@ -22,20 +16,28 @@ qt_add_executable(layoutsexample
qt_add_qml_module(layoutsexample
URI layouts
- AUTO_RESOURCE_PREFIX
QML_FILES
"layouts.qml"
)
target_link_libraries(layoutsexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS layoutsexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET layoutsexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/layouts/doc/src/qtquicklayouts-examples.qdoc b/examples/quick/layouts/doc/src/qtquicklayouts-examples.qdoc
index dcbbaeeed7..a7b021f1f9 100644
--- a/examples/quick/layouts/doc/src/qtquicklayouts-examples.qdoc
+++ b/examples/quick/layouts/doc/src/qtquicklayouts-examples.qdoc
@@ -6,6 +6,7 @@
\brief Demonstrates how to use layout types to arrange a UI.
\image qtquicklayouts-example-layouts.png
\ingroup qtquickexamples
+ \examplecategory {User Interface Components}
This example shows how to easily arrange UI components into
\l{Qt Quick Layouts}{layouts} with \l{GridLayout}, \l{RowLayout}, and
diff --git a/examples/quick/layouts/layouts.qml b/examples/quick/layouts/layouts.qml
index eb6554cb80..92fe305559 100644
--- a/examples/quick/layouts/layouts.qml
+++ b/examples/quick/layouts/layouts.qml
@@ -5,12 +5,14 @@ import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
+pragma ComponentBehavior: Bound
+
ApplicationWindow {
id: appWindow
visible: true
- title: "Basic layouts"
- property int margin: 11
+ title: qsTr("Basic layouts")
+ readonly property int margin: 11
Component.onCompleted: {
width = mainLayout.implicitWidth + 2 * margin
@@ -26,27 +28,30 @@ ApplicationWindow {
anchors.margins: appWindow.margin
GroupBox {
id: rowBox
- title: "Row layout"
+ title: qsTr("Row layout")
Layout.fillWidth: true
+ Layout.fillHeight: false
Layout.minimumWidth: rowLayout.Layout.minimumWidth + 30
RowLayout {
id: rowLayout
anchors.fill: parent
TextField {
- placeholderText: "This wants to grow horizontally"
+ placeholderText: qsTr("This wants to grow horizontally")
Layout.fillWidth: true
}
Button {
- text: "Button"
+ text: qsTr("Button")
+ Layout.fillWidth: false
}
}
}
GroupBox {
id: gridBox
- title: "Grid layout"
+ title: qsTr("Grid layout")
Layout.fillWidth: true
+ Layout.fillHeight: false
Layout.minimumWidth: gridLayout.Layout.minimumWidth + 30
GridLayout {
@@ -55,17 +60,17 @@ ApplicationWindow {
flow: GridLayout.TopToBottom
anchors.fill: parent
- Label { text: "Line 1" }
- Label { text: "Line 2" }
- Label { text: "Line 3" }
+ Label { text: qsTr("Line 1") }
+ Label { text: qsTr("Line 2") }
+ Label { text: qsTr("Line 3") }
TextField { }
TextField { }
TextField { }
TextArea {
- text: "This widget spans over three rows in the GridLayout.\n"
- + "All items in the GridLayout are implicitly positioned from top to bottom."
+ text: qsTr("This widget spans over three rows in the GridLayout.\n")
+ + qsTr("All items in the GridLayout are implicitly positioned from top to bottom.")
wrapMode: TextArea.WordWrap
Layout.rowSpan: 3
Layout.fillHeight: true
@@ -77,14 +82,14 @@ ApplicationWindow {
}
TextArea {
id: t3
- text: "This fills the whole cell"
+ text: qsTr("This fills the whole cell")
Layout.minimumHeight: 30
Layout.fillHeight: true
Layout.fillWidth: true
}
GroupBox {
id: stackBox
- title: "Stack layout"
+ title: qsTr("Stack layout")
implicitWidth: 200
implicitHeight: 60
Layout.minimumHeight: 60
@@ -104,8 +109,8 @@ ApplicationWindow {
color: Qt.hsla((0.5 + index) / stackRepeater.count, 0.3, 0.7, 1)
Button {
anchors.centerIn: parent
- text: "Page " + (parent.index + 1)
- onClicked: { stackLayout.advance() }
+ text: qsTr("Page ") + (parent.index + 1)
+ onClicked: stackLayout.advance()
}
}
}
diff --git a/examples/quick/layouts/layouts.qmlproject b/examples/quick/layouts/layouts.qmlproject
deleted file mode 100644
index e5a8bf02ca..0000000000
--- a/examples/quick/layouts/layouts.qmlproject
+++ /dev/null
@@ -1,16 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "main.qml"
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/quick/localstorage/CMakeLists.txt b/examples/quick/localstorage/CMakeLists.txt
index cd19eca89b..cf39d98c20 100644
--- a/examples/quick/localstorage/CMakeLists.txt
+++ b/examples/quick/localstorage/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(localstorage LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/localstorage")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(localstorageexample
WIN32
@@ -22,7 +16,6 @@ qt_add_executable(localstorageexample
qt_add_qml_module(localstorageexample
URI localstorage
- AUTO_RESOURCE_PREFIX
QML_FILES
"Database.js"
"Header.qml"
@@ -32,14 +25,23 @@ qt_add_qml_module(localstorageexample
)
target_link_libraries(localstorageexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS localstorageexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET localstorageexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/localstorage/Database.js b/examples/quick/localstorage/Database.js
index 18bf4a25cd..dd66ce8246 100644
--- a/examples/quick/localstorage/Database.js
+++ b/examples/quick/localstorage/Database.js
@@ -3,7 +3,7 @@
function dbInit()
{
- var db = LocalStorage.openDatabaseSync("Activity_Tracker_DB", "", "Track exercise", 1000000)
+ let db = LocalStorage.openDatabaseSync("Activity_Tracker_DB", "", "Track exercise", 1000000)
try {
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS trip_log (date text,trip_desc text,distance numeric)')
@@ -26,12 +26,12 @@ function dbGetHandle()
function dbInsert(Pdate, Pdesc, Pdistance)
{
- var db = dbGetHandle()
- var rowid = 0;
+ let db = dbGetHandle()
+ let rowid = 0;
db.transaction(function (tx) {
tx.executeSql('INSERT INTO trip_log VALUES(?, ?, ?)',
[Pdate, Pdesc, Pdistance])
- var result = tx.executeSql('SELECT last_insert_rowid()')
+ let result = tx.executeSql('SELECT last_insert_rowid()')
rowid = result.insertId
})
return rowid;
@@ -39,11 +39,11 @@ function dbInsert(Pdate, Pdesc, Pdistance)
function dbReadAll()
{
- var db = dbGetHandle()
+ let db = dbGetHandle()
db.transaction(function (tx) {
- var results = tx.executeSql(
- 'SELECT rowid,date,trip_desc,distance FROM trip_log order by rowid desc')
- for (var i = 0; i < results.rows.length; i++) {
+ let results = tx.executeSql(
+ 'SELECT rowid,date,trip_desc,distance FROM trip_log order by rowid desc')
+ for (let i = 0; i < results.rows.length; i++) {
listModel.append({
id: results.rows.item(i).rowid,
checked: " ",
@@ -57,7 +57,7 @@ function dbReadAll()
function dbUpdate(Pdate, Pdesc, Pdistance, Prowid)
{
- var db = dbGetHandle()
+ let db = dbGetHandle()
db.transaction(function (tx) {
tx.executeSql(
'update trip_log set date=?, trip_desc=?, distance=? where rowid = ?', [Pdate, Pdesc, Pdistance, Prowid])
@@ -66,7 +66,7 @@ function dbUpdate(Pdate, Pdesc, Pdistance, Prowid)
function dbDeleteRow(Prowid)
{
- var db = dbGetHandle()
+ let db = dbGetHandle()
db.transaction(function (tx) {
tx.executeSql('delete from trip_log where rowid = ?', [Prowid])
})
diff --git a/examples/quick/localstorage/Header.qml b/examples/quick/localstorage/Header.qml
index 2274747564..a539452844 100644
--- a/examples/quick/localstorage/Header.qml
+++ b/examples/quick/localstorage/Header.qml
@@ -8,15 +8,15 @@ import "Database.js" as JS
Item {
id: root
- width: Screen.width / 2
- height: Screen.height / 7
-
required property ListView listView
signal statusMessage(string msg)
+
+ width: Screen.width / 2
+ height: Screen.height / 7
enabled: false
function insertrec() {
- var rowid = parseInt(JS.dbInsert(dateInput.text, descInput.text, distInput.text), 10)
+ const rowid = parseInt(JS.dbInsert(dateInput.text, descInput.text, distInput.text), 10)
if (rowid) {
listView.model.setProperty(listView.currentIndex, "id", rowid)
listView.forceLayout()
@@ -99,13 +99,13 @@ Item {
font.pixelSize: 22
activeFocusOnPress: true
activeFocusOnTab: true
+ Layout.fillWidth: false
ToolTip {
- parent: dateInput
x: parent.width + 3
y: (parent.height - height) / 2
text: qsTr("Date format = 'YYYY-MM-DD'")
- visible: parent.enabled && parent.hovered
+ visible: dateInput.enabled && dateInput.hovered
delay: 1000
}
@@ -113,13 +113,13 @@ Item {
regularExpression: /\d{4}[,.:/-]\d\d?[,.:/-]\d\d?/
}
- onFocusChanged: ()=> {
+ onFocusChanged: function() {
if (!dateInput.focus && !acceptableInput && root.enabled)
root.statusMessage(qsTr("Please fill in the date"));
}
- onEditingFinished: ()=> {
- let regex = /(\d+)[,.:/-](\d+)[,.:/-](\d+)/
+ onEditingFinished: function() {
+ const regex = /(\d+)[,.:/-](\d+)[,.:/-](\d+)/
if (dateInput.text.match(regex))
dateInput.text = dateInput.text.replace(regex, '$1-$2-$3')
}
@@ -127,29 +127,31 @@ Item {
TextField {
id: descInput
+ property string oldString
font.pixelSize: 22
activeFocusOnPress: true
activeFocusOnTab: true
- property string oldString
- onFocusChanged: ()=> { if (focus) oldString = descInput.text; }
- onEditingFinished: ()=> {
- if (descInput.text.length < 8 && descInput.text != descInput.oldString && root.enabled)
+ Layout.fillWidth: false
+ onFocusChanged: if (focus) oldString = descInput.text
+ onEditingFinished: function() {
+ if (descInput.text.length < 8 && descInput.text !== descInput.oldString && root.enabled)
root.statusMessage(qsTr("Enter a description of minimum 8 characters"))
}
}
TextField {
id: distInput
+ property string oldString
font.pixelSize: 22
activeFocusOnPress: true
activeFocusOnTab: true
+ Layout.fillWidth: false
validator: RegularExpressionValidator {
regularExpression: /\d{1,3}/
}
- property string oldString
- onFocusChanged: ()=> { if (focus) oldString = distInput.text; }
- onEditingFinished: ()=> {
- if (distInput.text == "" && distInput.text != distInput.oldString && root.enabled)
+ onFocusChanged: if (focus) oldString = distInput.text
+ onEditingFinished: function() {
+ if (distInput.text === "" && distInput.text !== distInput.oldString && root.enabled)
root.statusMessage(qsTr("Please fill in the distance"))
}
}
diff --git a/examples/quick/localstorage/MyDelegate.qml b/examples/quick/localstorage/MyDelegate.qml
index 30ccd77749..94f78b5ed6 100644
--- a/examples/quick/localstorage/MyDelegate.qml
+++ b/examples/quick/localstorage/MyDelegate.qml
@@ -4,15 +4,10 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
-import QtQuick.LocalStorage
-import "Database.js" as JS
Item {
id: delegate
- width: ListView.view.width
- implicitHeight: rDate.implicitHeight * 1.5
-
required property int index
required property int distance
required property string trip_desc
@@ -20,13 +15,18 @@ Item {
signal clicked()
+ width: ListView.view.width
+ implicitHeight: rDate.implicitHeight * 1.5
+
Rectangle {
id: baseRec
anchors.fill: parent
opacity: 0.8
color: delegate.index % 2 ? "lightgrey" : "grey"
- border.width: 2
- border.color: Qt.lighter(color)
+ border {
+ width: 2
+ color: Qt.lighter(color)
+ }
radius: 5
MouseArea {
diff --git a/examples/quick/localstorage/doc/src/localstorage.qdoc b/examples/quick/localstorage/doc/src/localstorage.qdoc
index 653d5dc62e..e9596987dc 100644
--- a/examples/quick/localstorage/doc/src/localstorage.qdoc
+++ b/examples/quick/localstorage/doc/src/localstorage.qdoc
@@ -3,6 +3,7 @@
/*!
\title Qt Quick Examples - Local Storage
\example localstorage
+ \examplecategory {Data Processing & I/O}
\brief A collection of QML local storage examples.
\borderedimage qml-localstorage-example.png
diff --git a/examples/quick/localstorage/localstorage.qml b/examples/quick/localstorage/localstorage.qml
index 1f8ef79db7..3bed3e99df 100644
--- a/examples/quick/localstorage/localstorage.qml
+++ b/examples/quick/localstorage/localstorage.qml
@@ -7,16 +7,19 @@ import QtQuick.Layouts
import QtQuick.LocalStorage
import "Database.js" as JS
+pragma ComponentBehavior: Bound
+
Window {
id: window
+
+ property bool creatingNewEntry: false
+ property bool editingEntry: false
+
visible: true
width: Screen.width / 2
height: Screen.height / 1.8
color: "#161616"
- property bool creatingNewEntry: false
- property bool editingEntry: false
-
Rectangle {
anchors.fill: parent
@@ -34,6 +37,7 @@ Window {
RowLayout {
Button {
text: qsTr("New")
+ Layout.fillWidth: false
onClicked: {
input.initrec_new()
window.creatingNewEntry = true
@@ -42,10 +46,11 @@ Window {
}
Button {
id: saveButton
- enabled: (window.creatingNewEntry || window.editingEntry) && listView.currentIndex != -1
+ enabled: (window.creatingNewEntry || window.editingEntry) && listView.currentIndex !== -1
text: qsTr("Save")
+ Layout.fillWidth: false
onClicked: {
- var insertedRow = false;
+ let insertedRow = false;
if (listView.model.get(listView.currentIndex).id < 1) {
//insert mode
if (input.insertrec()) {
@@ -76,7 +81,8 @@ Window {
Button {
id: editButton
text: qsTr("Edit")
- enabled: !window.creatingNewEntry && !window.editingEntry && listView.currentIndex != -1
+ enabled: !window.creatingNewEntry && !window.editingEntry && listView.currentIndex !== -1
+ Layout.fillWidth: false
onClicked: {
input.editrec(listView.model.get(listView.currentIndex).date,
listView.model.get(listView.currentIndex).trip_desc,
@@ -89,11 +95,12 @@ Window {
Button {
id: deleteButton
text: qsTr("Delete")
- enabled: !window.creatingNewEntry && listView.currentIndex != -1
+ enabled: !window.creatingNewEntry && listView.currentIndex !== -1
+ Layout.fillWidth: false
onClicked: {
JS.dbDeleteRow(listView.model.get(listView.currentIndex).id)
listView.model.remove(listView.currentIndex, 1)
- if (listView.count == 0) {
+ if (listView.count === 0) {
// ListView doesn't automatically set its currentIndex to -1
// when the count becomes 0.
listView.currentIndex = -1
@@ -103,7 +110,8 @@ Window {
Button {
id: cancelButton
text: qsTr("Cancel")
- enabled: (window.creatingNewEntry || window.editingEntry) && listView.currentIndex != -1
+ enabled: (window.creatingNewEntry || window.editingEntry) && listView.currentIndex !== -1
+ Layout.fillWidth: false
onClicked: {
if (listView.model.get(listView.currentIndex).id === 0) {
// This entry had an id of 0, which means it was being created and hadn't
@@ -118,12 +126,13 @@ Window {
}
Button {
text: qsTr("Exit")
+ Layout.fillWidth: false
onClicked: Qt.quit()
}
}
Item {
Layout.fillWidth: true
- height: 5
+ Layout.preferredHeight: 5
}
Label {
Layout.alignment: Qt.AlignCenter
@@ -133,8 +142,8 @@ Window {
Component {
id: highlightBar
Rectangle {
- width: listView.currentItem !== null ? listView.currentItem.width : implicitWidth
- height: listView.currentItem !== null ? listView.currentItem.height : implicitHeight
+ width: listView.currentItem?.width ?? implicitWidth
+ height: listView.currentItem?.height ?? implicitHeight
color: "lightgreen"
}
}
@@ -157,19 +166,23 @@ Window {
header: Component {
RowLayout {
- property var headerTitles: [qsTr("Date"), qsTr("Description"), qsTr("Distance")]
width: ListView.view.width
Repeater {
- model: headerTitles
+ model: [qsTr("Date"), qsTr("Description"), qsTr("Distance")]
delegate: Label {
id: headerTitleDelegate
+
+ required property string modelData
+
Layout.fillWidth: true
Layout.fillHeight: true
Layout.preferredWidth: 1
text: modelData
- font.pointSize: 15
- font.bold: true
- font.underline: true
+ font {
+ pointSize: 15
+ bold: true
+ underline: true
+ }
padding: 12
horizontalAlignment: Label.AlignHCenter
}
@@ -183,7 +196,7 @@ Window {
font.bold: true
font.pointSize: 20
opacity: 0.0
- visible: opacity !== 0 // properly cull item if effectively invisible
+ visible: opacity > 0 // properly cull item if effectively invisible
Layout.alignment: Layout.Center
function displayWarning(text) {
diff --git a/examples/quick/models/CMakeLists.txt b/examples/quick/models/CMakeLists.txt
index 0fe51771df..e8756b65ec 100644
--- a/examples/quick/models/CMakeLists.txt
+++ b/examples/quick/models/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_internal_add_example(abstractitemmodel)
qt_internal_add_example(objectlistmodel)
diff --git a/examples/quick/models/abstractitemmodel/CMakeLists.txt b/examples/quick/models/abstractitemmodel/CMakeLists.txt
index 27837d3b31..3b3ab40025 100644
--- a/examples/quick/models/abstractitemmodel/CMakeLists.txt
+++ b/examples/quick/models/abstractitemmodel/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(abstractitemmodel LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/models/abstractitemmodel")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(abstractitemmodelexample WIN32 MACOSX_BUNDLE
main.cpp
@@ -20,22 +14,30 @@ qt_add_executable(abstractitemmodelexample WIN32 MACOSX_BUNDLE
)
target_link_libraries(abstractitemmodelexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
# Resources:
qt_add_qml_module(abstractitemmodelexample
URI abstractitemmodel
- AUTO_RESOURCE_PREFIX
QML_FILES
"view.qml"
)
install(TARGETS abstractitemmodelexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET abstractitemmodelexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/models/abstractitemmodel/doc/src/abstractitemmodel-example.qdoc b/examples/quick/models/abstractitemmodel/doc/src/abstractitemmodel-example.qdoc
index 61d63ca417..6f627d050c 100644
--- a/examples/quick/models/abstractitemmodel/doc/src/abstractitemmodel-example.qdoc
+++ b/examples/quick/models/abstractitemmodel/doc/src/abstractitemmodel-example.qdoc
@@ -5,6 +5,7 @@
\example models/abstractitemmodel
\title Models and Views: AbstractItemModel Example
\brief Shows how to use a QAbstractItemModel subclass as a model in QML.
+ \examplecategory {User Interface Components}
\image qml-abstractitemmodel-example.png
*/
diff --git a/examples/quick/models/abstractitemmodel/model.h b/examples/quick/models/abstractitemmodel/model.h
index 85942127fc..d4a5e738a7 100644
--- a/examples/quick/models/abstractitemmodel/model.h
+++ b/examples/quick/models/abstractitemmodel/model.h
@@ -1,5 +1,9 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MODEL_H
+#define MODEL_H
+
#include <QAbstractListModel>
#include <QStringList>
@@ -45,4 +49,4 @@ private:
};
//![2]
-
+#endif // MODEL_H
diff --git a/examples/quick/models/objectlistmodel/CMakeLists.txt b/examples/quick/models/objectlistmodel/CMakeLists.txt
index e4d5ed35e4..8e74bb1883 100644
--- a/examples/quick/models/objectlistmodel/CMakeLists.txt
+++ b/examples/quick/models/objectlistmodel/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(objectlistmodel LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/models/objectlistmodel")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(objectlistmodelexample WIN32 MACOSX_BUNDLE
dataobject.cpp dataobject.h
@@ -20,22 +14,30 @@ qt_add_executable(objectlistmodelexample WIN32 MACOSX_BUNDLE
)
target_link_libraries(objectlistmodelexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
# Resources:
qt_add_qml_module(objectlistmodelexample
URI objectlistmodel
- AUTO_RESOURCE_PREFIX
QML_FILES
"view.qml"
)
install(TARGETS objectlistmodelexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET objectlistmodelexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/models/objectlistmodel/doc/src/objectlistmodel-example.qdoc b/examples/quick/models/objectlistmodel/doc/src/objectlistmodel-example.qdoc
index b011b01fdd..2ceec9376d 100644
--- a/examples/quick/models/objectlistmodel/doc/src/objectlistmodel-example.qdoc
+++ b/examples/quick/models/objectlistmodel/doc/src/objectlistmodel-example.qdoc
@@ -5,6 +5,7 @@
\example models/objectlistmodel
\title Models and Views: Object ListModel Example
\brief Shows how to use a QList<QObject*> as a model in QML.
+ \examplecategory {User Interface Components}
\image qml-objectlistmodel-example.png
*/
diff --git a/examples/quick/models/stringlistmodel/CMakeLists.txt b/examples/quick/models/stringlistmodel/CMakeLists.txt
index 6846331831..bdbacace99 100644
--- a/examples/quick/models/stringlistmodel/CMakeLists.txt
+++ b/examples/quick/models/stringlistmodel/CMakeLists.txt
@@ -1,40 +1,42 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(stringlistmodel LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/models/stringlistmodel")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(stringlistmodelexample WIN32 MACOSX_BUNDLE
main.cpp
)
target_link_libraries(stringlistmodelexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
# Resources:
qt_add_qml_module(stringlistmodelexample
URI stringlistmodel
- AUTO_RESOURCE_PREFIX
QML_FILES
"view.qml"
)
install(TARGETS stringlistmodelexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET stringlistmodelexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/models/stringlistmodel/doc/src/stringlistmodel-example.qdoc b/examples/quick/models/stringlistmodel/doc/src/stringlistmodel-example.qdoc
index 57b24692ae..3b00a0e211 100644
--- a/examples/quick/models/stringlistmodel/doc/src/stringlistmodel-example.qdoc
+++ b/examples/quick/models/stringlistmodel/doc/src/stringlistmodel-example.qdoc
@@ -5,6 +5,7 @@
\example models/stringlistmodel
\title Models and Views: String ListModel Example
\brief Shows how to use a QStringList as a model in QML.
+ \examplecategory {User Interface Components}
\image qml-stringlistmodel-example.png
*/
diff --git a/examples/quick/mousearea/CMakeLists.txt b/examples/quick/mousearea/CMakeLists.txt
index 89a16690a3..b78d6c9157 100644
--- a/examples/quick/mousearea/CMakeLists.txt
+++ b/examples/quick/mousearea/CMakeLists.txt
@@ -1,41 +1,43 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(mousearea LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/mousearea")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(mouseareaexample WIN32 MACOSX_BUNDLE
main.cpp
)
target_link_libraries(mouseareaexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
# Resources:
qt_add_qml_module(mouseareaexample
URI mousearea
- AUTO_RESOURCE_PREFIX
QML_FILES
"mousearea-wheel-example.qml"
"mousearea.qml"
)
install(TARGETS mouseareaexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET mouseareaexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/mousearea/doc/src/mousearea.qdoc b/examples/quick/mousearea/doc/src/mousearea.qdoc
index 520644907b..3ff2422747 100644
--- a/examples/quick/mousearea/doc/src/mousearea.qdoc
+++ b/examples/quick/mousearea/doc/src/mousearea.qdoc
@@ -6,6 +6,7 @@
\brief This is an example of the MouseArea type in QML.
\image qml-mousearea-example.png
\ingroup qtquickexamples
+ \examplecategory {Graphics}
\e MouseArea example shows how to respond to clicks and drags with a
\l MouseArea. For more information, visit
diff --git a/examples/quick/mousearea/mousearea-wheel-example.qml b/examples/quick/mousearea/mousearea-wheel-example.qml
index 966cb046dd..145c69fcef 100644
--- a/examples/quick/mousearea/mousearea-wheel-example.qml
+++ b/examples/quick/mousearea/mousearea-wheel-example.qml
@@ -27,11 +27,11 @@ Rectangle {
MouseArea {
anchors.fill: parent
- onWheel: {
+ onWheel: (wheel) => {
if (wheel.modifiers & Qt.ControlModifier) {
- parent.scaleFactor += 0.2 * wheel.angleDelta.y / 120;
+ parent.scaleFactor += 0.2 * wheel.angleDelta.y / 120
if (parent.scaleFactor < 0)
- parent.scaleFactor = 0;
+ parent.scaleFactor = 0
}
}
}
@@ -40,9 +40,11 @@ Rectangle {
}
Text {
- anchors.bottom: parent.bottom
- anchors.horizontalCenter: parent.horizontalCenter
+ anchors {
+ bottom: parent.bottom
+ horizontalCenter: parent.horizontalCenter
+ }
color: "#FFD700"
- text: "Rotate the mouse wheel pressing <Control> to resize the squares."
+ text: qsTr("Rotate the mouse wheel pressing <Control> to resize the squares.")
}
}
diff --git a/examples/quick/mousearea/mousearea.qml b/examples/quick/mousearea/mousearea.qml
index 2bfab0d6b8..b220b47a9e 100644
--- a/examples/quick/mousearea/mousearea.qml
+++ b/examples/quick/mousearea/mousearea.qml
@@ -5,16 +5,26 @@ import QtQuick
Rectangle {
id: box
- width: 320; height: 480
+ width: 320
+ height: 480
Rectangle {
id: redSquare
- width: 120; height: 120
- anchors.top: parent.top; anchors.left: parent.left; anchors.margins: 10
+ width: 120
+ height: 120
+ anchors {
+ top: parent.top
+ left: parent.left
+ margins: 10
+ }
color: "red"
opacity: redSquareMouseArea.containsPress ? 0.6 : 1.0
- Text { text: "Click"; font.pixelSize: 16; anchors.centerIn: parent }
+ Text {
+ text: qsTr("Click")
+ font.pixelSize: 16
+ anchors.centerIn: parent
+ }
MouseArea {
id: redSquareMouseArea
@@ -26,92 +36,99 @@ Rectangle {
// Value 'All.Buttons' is eqivalent to:
// 'Qt::LeftButton | Qt::RightButton | Qt::MiddleButton .... | Qt::ExtraButton24'
- onEntered: info.text = 'Entered'
- onExited: info.text = 'Exited (pressed=' + pressed + ')'
+ onEntered: info.text = qsTr('Entered')
+ onExited: info.text = qsTr('Exited (pressed=') + pressed + ')'
onPressed: (mouse) => {
if (mouse.button == Qt.LeftButton)
- buttonID = 'LeftButton'
+ buttonID = qsTr('LeftButton')
else if (mouse.button == Qt.RightButton)
- buttonID = 'RightButton'
+ buttonID = qsTr('RightButton')
else if (mouse.button == Qt.MiddleButton)
- buttonID = 'MiddleButton'
+ buttonID = qsTr('MiddleButton')
else if (mouse.button == Qt.BackButton)
- buttonID = 'BackButton'
+ buttonID = qsTr('BackButton')
else if (mouse.button == Qt.ForwardButton)
- buttonID = 'ForwardButton'
+ buttonID = qsTr('ForwardButton')
else if (mouse.button == Qt.TaskButton)
- buttonID = 'TaskButton'
+ buttonID = qsTr('TaskButton')
else if (mouse.button == Qt.ExtraButton4)
- buttonID = 'ExtraButton4'
+ buttonID = qsTr('ExtraButton4')
else if (mouse.button == Qt.ExtraButton5)
- buttonID = 'ExtraButton5'
+ buttonID = qsTr('ExtraButton5')
else if (mouse.button == Qt.ExtraButton6)
- buttonID = 'ExtraButton6'
+ buttonID = qsTr('ExtraButton6')
else if (mouse.button == Qt.ExtraButton7)
- buttonID = 'ExtraButton7'
+ buttonID = qsTr('ExtraButton7')
else if (mouse.button == Qt.ExtraButton8)
- buttonID = 'ExtraButton8'
+ buttonID = qsTr('ExtraButton8')
else if (mouse.button == Qt.ExtraButton9)
- buttonID = 'ExtraButton9'
+ buttonID = qsTr('ExtraButton9')
else if (mouse.button == Qt.ExtraButton10)
- buttonID = 'ExtraButton10'
+ buttonID = qsTr('ExtraButton10')
else if (mouse.button == Qt.ExtraButton11)
- buttonID = 'ExtraButton11'
+ buttonID = qsTr('ExtraButton11')
else if (mouse.button == Qt.ExtraButton12)
- buttonID = 'ExtraButton12'
+ buttonID = qsTr('ExtraButton12')
else if (mouse.button == Qt.ExtraButton13)
- buttonID = 'ExtraButton13'
+ buttonID = qsTr('ExtraButton13')
else if (mouse.button == Qt.ExtraButton14)
- buttonID = 'ExtraButton14'
+ buttonID = qsTr('ExtraButton14')
else if (mouse.button == Qt.ExtraButton15)
- buttonID = 'ExtraButton15'
+ buttonID = qsTr('ExtraButton15')
else if (mouse.button == Qt.ExtraButton16)
- buttonID = 'ExtraButton16'
+ buttonID = qsTr('ExtraButton16')
else if (mouse.button == Qt.ExtraButton17)
- buttonID = 'ExtraButton17'
+ buttonID = qsTr('ExtraButton17')
else if (mouse.button == Qt.ExtraButton18)
- buttonID = 'ExtraButton18'
+ buttonID = qsTr('ExtraButton18')
else if (mouse.button == Qt.ExtraButton19)
- buttonID = 'ExtraButton19'
+ buttonID = qsTr('ExtraButton19')
else if (mouse.button == Qt.ExtraButton20)
- buttonID = 'ExtraButton20'
+ buttonID = qsTr('ExtraButton20')
else if (mouse.button == Qt.ExtraButton21)
- buttonID = 'ExtraButton21'
+ buttonID = qsTr('ExtraButton21')
else if (mouse.button == Qt.ExtraButton22)
- buttonID = 'ExtraButton22'
+ buttonID = qsTr('ExtraButton22')
else if (mouse.button == Qt.ExtraButton23)
- buttonID = 'ExtraButton23'
+ buttonID = qsTr('ExtraButton23')
else if (mouse.button == Qt.ExtraButton24)
- buttonID = 'ExtraButton24'
+ buttonID = qsTr('ExtraButton24')
- info.text = 'Pressed (' + buttonID + ' shift='
- + (mouse.modifiers & Qt.ShiftModifier ? 'true' : 'false') + ')'
- var posInBox = redSquare.mapToItem(box, mouse.x, mouse.y)
- posInfo.text = + mouse.x + ',' + mouse.y + ' in square'
- + ' (' + posInBox.x + ',' + posInBox.y + ' in window)'
+ info.text = qsTr('Pressed (') + buttonID + qsTr(' shift=')
+ + (mouse.modifiers & Qt.ShiftModifier ? qsTr('true') : qsTr('false')) + ')'
+ const posInBox = redSquare.mapToItem(box, mouse.x, mouse.y)
+ posInfo.text = + mouse.x + ',' + mouse.y + qsTr(' in square')
+ + ' (' + posInBox.x + ',' + posInBox.y + qsTr(' in window)')
}
onReleased: (mouse) => {
- btn.text = 'Released (isClick=' + mouse.isClick + ' wasHeld=' + mouse.wasHeld + ')'
+ btn.text = qsTr('Released (isClick=') + mouse.isClick + qsTr(' wasHeld=') + mouse.wasHeld + ')'
posInfo.text = ''
}
//! [clicks]
- onPressAndHold: btn.text = 'Press and hold'
- onClicked: (mouse) => { btn.text = 'Clicked (wasHeld=' + mouse.wasHeld + ')' }
- onDoubleClicked: btn.text = 'Double clicked'
+ onPressAndHold: btn.text = qsTr('Press and hold')
+ onClicked: (mouse) => { btn.text = qsTr('Clicked (wasHeld=') + mouse.wasHeld + ')' }
+ onDoubleClicked: btn.text = qsTr('Double clicked')
//! [clicks]
}
}
Rectangle {
id: blueSquare
- width: 120; height: 120
- x: box.width - width - 10; y: 10 // making this item draggable, so don't use anchors
+ width: 120
+ height: 120
+ x: box.width - width - 10
+ y: 10 // making this item draggable, so don't use anchors
color: "blue"
- Text { text: "Drag"; font.pixelSize: 16; color: "white"; anchors.centerIn: parent }
+ Text {
+ text: qsTr("Drag")
+ font.pixelSize: 16
+ color: "white"
+ anchors.centerIn: parent
+ }
MouseArea {
anchors.fill: parent
@@ -128,18 +145,30 @@ Rectangle {
Text {
id: info
- anchors.bottom: btn.top; anchors.horizontalCenter: parent.horizontalCenter; anchors.margins: 20
+ anchors{
+ bottom: btn.top
+ horizontalCenter: parent.horizontalCenter
+ margins: 20
+ }
- onTextChanged: function(text) { console.log(text) }
+ onTextChanged: console.log(text)
}
Text {
id: btn
- anchors.bottom: posInfo.top; anchors.horizontalCenter: parent.horizontalCenter; anchors.margins: 20
+ anchors {
+ bottom: posInfo.top
+ horizontalCenter: parent.horizontalCenter
+ margins: 20
+ }
}
Text {
id: posInfo
- anchors.bottom: parent.bottom; anchors.horizontalCenter: parent.horizontalCenter; anchors.margins: 20
+ anchors {
+ bottom: parent.bottom
+ horizontalCenter: parent.horizontalCenter
+ margins: 20
+ }
}
}
diff --git a/examples/quick/multieffect/CMakeLists.txt b/examples/quick/multieffect/CMakeLists.txt
index 7462337905..802cb16eea 100644
--- a/examples/quick/multieffect/CMakeLists.txt
+++ b/examples/quick/multieffect/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_internal_add_example(itemswitcher)
qt_internal_add_example(testbed)
diff --git a/examples/quick/multieffect/itemswitcher/CMakeLists.txt b/examples/quick/multieffect/itemswitcher/CMakeLists.txt
index 922b6b8023..cb2043d023 100644
--- a/examples/quick/multieffect/itemswitcher/CMakeLists.txt
+++ b/examples/quick/multieffect/itemswitcher/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(itemswitcher LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/multieffect/itemswitcher")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick QuickControls2)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../../shared" "shared")
@@ -21,11 +15,11 @@ qt_add_executable(itemswitcherexample WIN32 MACOSX_BUNDLE
)
target_link_libraries(itemswitcherexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
- Qt::QuickControls2
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+ Qt6::QuickControls2
)
add_dependencies(itemswitcherexample itemswitcher_shared)
@@ -33,7 +27,6 @@ add_dependencies(itemswitcherexample itemswitcher_shared)
# Resources:
qt_add_qml_module(itemswitcherexample
URI itemswitcher
- AUTO_RESOURCE_PREFIX
QML_FILES
"qml/main.qml"
"qml/PagesView.qml"
@@ -62,9 +55,16 @@ qt_add_qml_module(itemswitcherexample
)
install(TARGETS itemswitcherexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(itemswitcherexample)
+qt_generate_deploy_qml_app_script(
+ TARGET itemswitcherexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/multieffect/itemswitcher/doc/images/qml-multieffectitemswitcher-example.jpg b/examples/quick/multieffect/itemswitcher/doc/images/qml-multieffectitemswitcher-example.jpg
new file mode 100644
index 0000000000..d1d3393e3f
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/doc/images/qml-multieffectitemswitcher-example.jpg
Binary files differ
diff --git a/examples/quick/multieffect/itemswitcher/doc/src/itemswitcher.qdoc b/examples/quick/multieffect/itemswitcher/doc/src/itemswitcher.qdoc
new file mode 100644
index 0000000000..f5588cb71e
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/doc/src/itemswitcher.qdoc
@@ -0,0 +1,16 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+/*!
+ \title Qt Quick Examples - MultiEffect Item Switcher
+ \example multieffect/itemswitcher
+ \image qml-multieffectitemswitcher-example.jpg
+ \brief Demonstrates MultiEffect usage.
+ \ingroup qtquickexamples
+ \examplecategory {Graphics}
+
+ This example demonstrates advanced usage of the MultiEffect type, which
+ offers a simple, efficient solution for applying effects such as blur, drop
+ shadow, or colorize to an Item and its children.
+
+ \include examples-run.qdocinc
+*/
diff --git a/examples/quick/multieffect/testbed/CMakeLists.txt b/examples/quick/multieffect/testbed/CMakeLists.txt
index 71c448e1c6..fb8c566378 100644
--- a/examples/quick/multieffect/testbed/CMakeLists.txt
+++ b/examples/quick/multieffect/testbed/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(testbed LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/multieffect/testbed")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick QuickControls2)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../../shared" "shared")
@@ -21,11 +15,11 @@ qt_add_executable(testbedexample WIN32 MACOSX_BUNDLE
)
target_link_libraries(testbedexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
- Qt::QuickControls2
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+ Qt6::QuickControls2
)
add_dependencies(testbedexample testbed_shared)
@@ -33,7 +27,6 @@ add_dependencies(testbedexample testbed_shared)
# Resources:
qt_add_qml_module(testbedexample
URI testbed
- AUTO_RESOURCE_PREFIX
QML_FILES
"qml/FpsItem.qml"
"qml/main.qml"
@@ -49,6 +42,8 @@ qt_add_qml_module(testbedexample
"qml/SettingsComponentSlider.qml"
"qml/SettingsComponentCheckBox.qml"
"qml/SettingsComponentColorSelector.qml"
+ "qml/CustomMultiEffect/BlurHelper.qml"
+ "qml/CustomMultiEffect/CustomMultiEffect.qml"
RESOURCES
"qml/images/pause.png"
"qml/images/play.png"
@@ -57,12 +52,23 @@ qt_add_qml_module(testbedexample
"qml/images/arrow.png"
"qml/images/Built_with_Qt.png"
"qml/images/Built_with_Qt_RGB_logo.png"
+ "qml/CustomMultiEffect/bluritems.frag.qsb"
+ "qml/CustomMultiEffect/bluritems.vert.qsb"
+ "qml/CustomMultiEffect/custommultieffect.frag.qsb"
+ "qml/CustomMultiEffect/custommultieffect.vert.qsb"
)
install(TARGETS testbedexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(testbedexample)
+qt_generate_deploy_qml_app_script(
+ TARGET testbedexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/multieffect/testbed/doc/images/qml-multieffecttestbed-example.jpg b/examples/quick/multieffect/testbed/doc/images/qml-multieffecttestbed-example.jpg
new file mode 100644
index 0000000000..de6b05da56
--- /dev/null
+++ b/examples/quick/multieffect/testbed/doc/images/qml-multieffecttestbed-example.jpg
Binary files differ
diff --git a/examples/quick/multieffect/testbed/doc/src/testbed.qdoc b/examples/quick/multieffect/testbed/doc/src/testbed.qdoc
new file mode 100644
index 0000000000..64a815b3a8
--- /dev/null
+++ b/examples/quick/multieffect/testbed/doc/src/testbed.qdoc
@@ -0,0 +1,16 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+/*!
+ \title Qt Quick Examples - MultiEffect Test Bed
+ \example multieffect/testbed
+ \image qml-multieffecttestbed-example.jpg
+ \brief Demonstrates MultiEffect usage.
+ \ingroup qtquickexamples
+ \examplecategory {Graphics}
+
+ This example demonstrates the MultiEffect type, which offers a simple,
+ efficient solution for applying effects such as blur, drop shadow, or
+ colorize to an Item and its children.
+
+ \include examples-run.qdocinc
+*/
diff --git a/examples/quick/multieffect/testbed/qml.qrc b/examples/quick/multieffect/testbed/qml.qrc
index ab21cc8b0f..4c23cff873 100644
--- a/examples/quick/multieffect/testbed/qml.qrc
+++ b/examples/quick/multieffect/testbed/qml.qrc
@@ -21,5 +21,11 @@
<file>qml/images/arrow.png</file>
<file>qml/images/Built_with_Qt.png</file>
<file>qml/images/Built_with_Qt_RGB_logo.png</file>
+ <file>qml/CustomMultiEffect/BlurHelper.qml</file>
+ <file>qml/CustomMultiEffect/bluritems.frag.qsb</file>
+ <file>qml/CustomMultiEffect/bluritems.vert.qsb</file>
+ <file>qml/CustomMultiEffect/custommultieffect.frag.qsb</file>
+ <file>qml/CustomMultiEffect/CustomMultiEffect.qml</file>
+ <file>qml/CustomMultiEffect/custommultieffect.vert.qsb</file>
</qresource>
</RCC>
diff --git a/examples/quick/multieffect/testbed/qml/CustomMultiEffect/BlurHelper.qml b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/BlurHelper.qml
new file mode 100644
index 0000000000..7a9390791b
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/BlurHelper.qml
@@ -0,0 +1,66 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: rootItem
+ property alias blurSrc1: blurredItemSource1
+ property alias blurSrc2: blurredItemSource2
+ property alias blurSrc3: blurredItemSource3
+ property alias blurSrc4: blurredItemSource4
+ property alias blurSrc5: blurredItemSource5
+
+ component BlurItem : ShaderEffect {
+ property vector2d offset: Qt.vector2d((1.0 + rootItem.blurMultiplier) / width,
+ (1.0 + rootItem.blurMultiplier) / height)
+ visible: false
+ layer.enabled: true
+ layer.smooth: true
+ vertexShader: "bluritems.vert.qsb"
+ fragmentShader: "bluritems.frag.qsb"
+ }
+
+ QtObject {
+ id: priv
+ property bool useBlurItem1: true
+ property bool useBlurItem2: rootItem.blurMax > 2
+ property bool useBlurItem3: rootItem.blurMax > 8
+ property bool useBlurItem4: rootItem.blurMax > 16
+ property bool useBlurItem5: rootItem.blurMax > 32
+ }
+
+ BlurItem {
+ id: blurredItemSource1
+ property Item src: priv.useBlurItem1 ? source : null
+ // Size of the first blurred item is by default half of the source.
+ // Increase for quality and decrease for performance & more blur.
+ readonly property int blurItemSize: 8
+ width: src ? Math.ceil(src.width / 16) * blurItemSize : 0
+ height: src ? Math.ceil(src.height / 16) * blurItemSize : 0
+ }
+ BlurItem {
+ id: blurredItemSource2
+ property Item src: priv.useBlurItem2 ? blurredItemSource1 : null
+ width: blurredItemSource1.width * 0.5
+ height: blurredItemSource1.height * 0.5
+ }
+ BlurItem {
+ id: blurredItemSource3
+ property Item src: priv.useBlurItem3 ? blurredItemSource2 : null
+ width: blurredItemSource2.width * 0.5
+ height: blurredItemSource2.height * 0.5
+ }
+ BlurItem {
+ id: blurredItemSource4
+ property Item src: priv.useBlurItem4 ? blurredItemSource3 : null
+ width: blurredItemSource3.width * 0.5
+ height: blurredItemSource3.height * 0.5
+ }
+ BlurItem {
+ id: blurredItemSource5
+ property Item src: priv.useBlurItem5 ? blurredItemSource4 : null
+ width: blurredItemSource4.width * 0.5
+ height: blurredItemSource4.height * 0.5
+ }
+}
diff --git a/examples/quick/multieffect/testbed/qml/CustomMultiEffect/CustomMultiEffect.qep b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/CustomMultiEffect.qep
new file mode 100644
index 0000000000..2600bc505f
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/CustomMultiEffect.qep
@@ -0,0 +1,383 @@
+{
+ "QEP": {
+ "QQEM": "0.43",
+ "connections": [
+ {
+ "fromId": 2,
+ "toId": 1
+ },
+ {
+ "fromId": 0,
+ "toId": 3
+ },
+ {
+ "fromId": 3,
+ "toId": 2
+ }
+ ],
+ "exportDirectory": ".",
+ "exportFlags": 11,
+ "exportName": "CustomMultiEffect",
+ "nodes": [
+ {
+ "fragmentCode": [
+ "void main() {",
+ " fragColor = texture(iSource, texCoord);",
+ " @nodes",
+ " fragColor = fragColor * qt_Opacity;",
+ "}"
+ ],
+ "name": "Main",
+ "nodeId": 0,
+ "type": 0,
+ "vertexCode": [
+ "void main() {",
+ " texCoord = qt_MultiTexCoord0;",
+ " fragCoord = qt_Vertex.xy;",
+ " vec2 vertCoord = qt_Vertex.xy;",
+ " @nodes",
+ " gl_Position = qt_Matrix * vec4(vertCoord, 0.0, 1.0);",
+ "}"
+ ],
+ "x": 140,
+ "y": 35.25
+ },
+ {
+ "name": "Output",
+ "nodeId": 1,
+ "type": 1,
+ "x": 140,
+ "y": 589.75
+ },
+ {
+ "description": "This node matches to features and API of the Qt Quick MultiEffect element. This makes it easy to build customized MultiEffects.",
+ "fragmentCode": [
+ "{",
+ " vec4 color = fragColor;",
+ "#if (BLUR_ENABLED)",
+ " // blur",
+ " vec4 blurredColor = texture(iSource, texCoord) * blurWeight1[0];",
+ " blurredColor += texture(iSourceBlur1, texCoord) * blurWeight1[1];",
+ "#if (BLUR_HELPER_MAX_LEVEL > 2)",
+ " blurredColor += texture(iSourceBlur2, texCoord) * blurWeight1[2];",
+ "#endif",
+ "#if (BLUR_HELPER_MAX_LEVEL > 8)",
+ " blurredColor += texture(iSourceBlur3, texCoord) * blurWeight1[3];",
+ "#endif",
+ "#if (BLUR_HELPER_MAX_LEVEL > 16)",
+ " blurredColor += texture(iSourceBlur4, texCoord) * blurWeight2[0];",
+ "#endif",
+ "#if (BLUR_HELPER_MAX_LEVEL > 32)",
+ " blurredColor += texture(iSourceBlur5, texCoord) * blurWeight2[1];",
+ "#endif",
+ " color = blurredColor;",
+ "#endif",
+ " // contrast, brightness, saturation and colorization",
+ " color.rgb = (color.rgb - 0.5 * color.a) * (1.0 + contrast) + 0.5 * color.a;",
+ " color.rgb += brightness * color.a;",
+ " float gray = dot(color.rgb, vec3(0.299, 0.587, 0.114));",
+ " float colorizationAlpha = colorization * colorizationColor.a;",
+ " color.rgb = mix(color.rgb, gray * colorizationColor.rgb, colorizationAlpha);",
+ " color.rgb = mix(vec3(gray), color.rgb, 1.0 + saturation);",
+ "#if (SHADOW_ENABLED)",
+ " // shadow",
+ " float shadow = texture(iSource, shadowTexCoord).a * shadowBlurWeight1[0];",
+ " shadow += texture(iSourceBlur1, shadowTexCoord).a * shadowBlurWeight1[1];",
+ "#if (BLUR_HELPER_MAX_LEVEL > 2)",
+ " shadow += texture(iSourceBlur2, shadowTexCoord).a * shadowBlurWeight1[2];",
+ "#endif",
+ "#if (BLUR_HELPER_MAX_LEVEL > 8)",
+ " shadow += texture(iSourceBlur3, shadowTexCoord).a * shadowBlurWeight1[3];",
+ "#endif",
+ "#if (BLUR_HELPER_MAX_LEVEL > 16)",
+ " shadow += texture(iSourceBlur4, shadowTexCoord).a * shadowBlurWeight2[0];",
+ "#endif",
+ "#if (BLUR_HELPER_MAX_LEVEL > 32)",
+ " shadow += texture(iSourceBlur5, shadowTexCoord).a * shadowBlurWeight2[1];",
+ "#endif",
+ " shadow *= (shadowColor.a * shadowOpacity);",
+ " float saa = (1.0 - color.a) * (1.0 - shadow);",
+ " color.rgb = mix(shadowColor.rgb * shadow, color.rgb, color.a + saa);",
+ " color.a = 1.0 - saa;",
+ "#endif",
+ "#if (MASK_ENABLED)",
+ " // mask",
+ " vec4 maskTexture = texture(maskSource, texCoord);",
+ " float alphaMask = maskTexture.a;",
+ " const float mSLow = 1.0 + maskSpreadAtMin;",
+ " const float mSUp = 1.0 + maskSpreadAtMax;",
+ " float m1 = smoothstep(maskThresholdMin * mSLow - (mSLow - 0.999), maskThresholdMin * mSLow, alphaMask);",
+ " float m2 = smoothstep((1.0 - maskThresholdMax) * mSUp - (mSUp - 0.999), (1.0 - maskThresholdMax) * mSUp, (1.0 - alphaMask));",
+ " float mm = m1 * m2;",
+ " color *= (1.0 - float(maskInverted)) * mm + float(maskInverted) * (1.0 - mm);",
+ "#endif",
+ " fragColor = color;",
+ "}"
+ ],
+ "name": "MultiEffect",
+ "nodeId": 2,
+ "properties": [
+ {
+ "defaultValue": "0",
+ "maxValue": "1",
+ "minValue": "-1",
+ "name": "contrast",
+ "type": "float",
+ "value": "0"
+ },
+ {
+ "defaultValue": "0",
+ "maxValue": "1",
+ "minValue": "-1",
+ "name": "brightness",
+ "type": "float",
+ "value": "0"
+ },
+ {
+ "defaultValue": "0",
+ "maxValue": "1",
+ "minValue": "-1",
+ "name": "saturation",
+ "type": "float",
+ "value": "0"
+ },
+ {
+ "defaultValue": "0",
+ "maxValue": "1",
+ "minValue": "0",
+ "name": "colorization",
+ "type": "float",
+ "value": "0"
+ },
+ {
+ "defaultValue": "1, 0, 0, 1",
+ "name": "colorizationColor",
+ "type": "color",
+ "value": "1, 0, 0, 1"
+ },
+ {
+ "defaultValue": "1",
+ "description": "Enables the blur effect.",
+ "name": "BLUR_ENABLED",
+ "type": "define",
+ "value": "1"
+ },
+ {
+ "defaultValue": "32",
+ "maxValue": "64",
+ "minValue": "0",
+ "name": "blurMax",
+ "type": "int",
+ "value": "32"
+ },
+ {
+ "defaultValue": "0",
+ "maxValue": "1",
+ "minValue": "0",
+ "name": "blur",
+ "type": "float",
+ "value": "0"
+ },
+ {
+ "defaultValue": "0",
+ "description": "Enables the shadow effect.",
+ "name": "SHADOW_ENABLED",
+ "type": "define",
+ "value": "1"
+ },
+ {
+ "defaultValue": "1",
+ "description": "This property defines how much blur (radius) is applied to the shadow.\n\nThe value ranges from 0.0 (no blur) to 1.0 (full blur). By default, the property is set to \\c 0.0 (no change). The amount of full blur is affected by blurHelperBlurMultiplier.",
+ "maxValue": "1",
+ "minValue": "0",
+ "name": "shadowBlur",
+ "type": "float",
+ "value": "1"
+ },
+ {
+ "defaultValue": "1",
+ "maxValue": "1",
+ "minValue": "0",
+ "name": "shadowOpacity",
+ "type": "float",
+ "value": "1"
+ },
+ {
+ "defaultValue": "0, 0, 0, 1",
+ "name": "shadowColor",
+ "type": "color",
+ "value": "0, 0, 0, 1"
+ },
+ {
+ "defaultValue": "1",
+ "maxValue": "1.2",
+ "minValue": "0.8",
+ "name": "shadowScale",
+ "type": "float",
+ "value": "1"
+ },
+ {
+ "defaultValue": "0",
+ "maxValue": "30",
+ "minValue": "-30",
+ "name": "shadowHorizontalOffset",
+ "type": "float",
+ "value": "0"
+ },
+ {
+ "defaultValue": "0",
+ "maxValue": "30",
+ "minValue": "-30",
+ "name": "shadowVerticalOffset",
+ "type": "float",
+ "value": "0"
+ },
+ {
+ "defaultValue": "1",
+ "description": "Enables the mask effect.",
+ "name": "MASK_ENABLED",
+ "type": "define",
+ "value": "1"
+ },
+ {
+ "defaultValue": "",
+ "description": "Source item for the mask effect. By default the alpha channel of the source item is used for masking but this can be easily adjusted in the shader.",
+ "name": "maskSource",
+ "type": "image",
+ "value": ""
+ },
+ {
+ "defaultValue": "0",
+ "description": "This property defines a lower threshold value for the mask pixels. The mask pixels that have an alpha value below this property are used to completely mask away the corresponding pixels from the source item. The mask pixels that have a higher alpha value are used to alphablend the source item to the display.\n\nThe value ranges from 0.0 (alpha value 0) to 1.0 (alpha value 255). By default, the property is set to 0.0.",
+ "maxValue": "1",
+ "minValue": "0",
+ "name": "maskThresholdMin",
+ "type": "float",
+ "value": "0"
+ },
+ {
+ "defaultValue": "0",
+ "description": "This property defines the smoothness of the mask edges near the maskThresholdMin. Setting higher spread values softens the transition from the transparent mask pixels towards opaque mask pixels by adding interpolated values between them.\n\nThe value ranges from 0.0 (sharp mask edge) to 1.0 (smooth mask edge). By default, the property is set to 0.0.",
+ "maxValue": "1",
+ "minValue": "0",
+ "name": "maskSpreadAtMin",
+ "type": "float",
+ "value": "0"
+ },
+ {
+ "defaultValue": "1",
+ "description": "This property defines an upper threshold value for the mask pixels. The mask pixels that have an alpha value below this property are used to completely mask away the corresponding pixels from the source item. The mask pixels that have a higher alpha value are used to alphablend the source item to the display.\n\nThe value ranges from 0.0 (alpha value 0) to 1.0 (alpha value 255). By default, the property is set to 1.0.",
+ "maxValue": "1",
+ "minValue": "0",
+ "name": "maskThresholdMax",
+ "type": "float",
+ "value": "1"
+ },
+ {
+ "defaultValue": "0",
+ "description": "This property defines the smoothness of the mask edges near the maskThresholdMax. Using higher spread values softens the transition from the transparent mask pixels towards opaque mask pixels by adding interpolated values between them.\n\nThe value ranges from 0.0 (sharp mask edge) to 1.0 (smooth mask edge). By default, the property is set to 0.0.",
+ "maxValue": "1",
+ "minValue": "0",
+ "name": "maskSpreadAtMax",
+ "type": "float",
+ "value": "0"
+ },
+ {
+ "defaultValue": "false",
+ "description": "This property switches the mask to the opposite side; instead of masking away the content outside maskThresholdMin and maskThresholdMax, content between them will get masked away.\n\nBy default, the property is set to false.",
+ "name": "maskInverted",
+ "type": "bool",
+ "value": "false"
+ }
+ ],
+ "type": 2,
+ "vertexCode": [
+ "out vec4 blurWeight1;",
+ "out vec2 blurWeight2;",
+ "out vec2 shadowTexCoord;",
+ "out vec4 shadowBlurWeight1;",
+ "out vec2 shadowBlurWeight2;",
+ "",
+ "float blurWeight(float v) {",
+ " return max(0.0, min(1.0, 1.0 - v * 2.0));",
+ "}",
+ "",
+ "@main",
+ "{",
+ "#if (BLUR_ENABLED)",
+ " float blurLod = sqrt(blur * (blurMax / 64.0)) * 1.2 - 0.2;",
+ " float bw1 = blurWeight(abs(blurLod - 0.1));",
+ " float bw2 = blurWeight(abs(blurLod - 0.3));",
+ " float bw3 = blurWeight(abs(blurLod - 0.5));",
+ " float bw4 = blurWeight(abs(blurLod - 0.7));",
+ " float bw5 = blurWeight(abs(blurLod - 0.9));",
+ " float bw6 = blurWeight(abs(blurLod - 1.1));",
+ "",
+ " float bsum = bw1 + bw2 + bw3 + bw4 + bw5 + bw6;",
+ " blurWeight1 = vec4(bw1 / bsum, bw2 / bsum, bw3 / bsum, bw4 / bsum);",
+ " blurWeight2 = vec2(bw5 / bsum, bw6 / bsum);",
+ "#endif",
+ "#if (SHADOW_ENABLED)",
+ " float shadowBlurLod = sqrt(shadowBlur * (blurMax / 64.0)) * 1.2 - 0.2;",
+ " float sbw1 = blurWeight(abs(shadowBlurLod - 0.1));",
+ " float sbw2 = blurWeight(abs(shadowBlurLod - 0.3));",
+ " float sbw3 = blurWeight(abs(shadowBlurLod - 0.5));",
+ " float sbw4 = blurWeight(abs(shadowBlurLod - 0.7));",
+ " float sbw5 = blurWeight(abs(shadowBlurLod - 0.9));",
+ " float sbw6 = blurWeight(abs(shadowBlurLod - 1.1));",
+ "",
+ " float sbsum = sbw1 + sbw2 + sbw3 + sbw4 + sbw5 + sbw6;",
+ " shadowBlurWeight1 = vec4(sbw1 / sbsum, sbw2 / sbsum, sbw3 / sbsum, sbw4 / sbsum);",
+ " shadowBlurWeight2 = vec2(sbw5 / sbsum, sbw6 / sbsum);",
+ "",
+ " vec2 shadowOffset = vec2(shadowHorizontalOffset / iResolution.x, shadowVerticalOffset / iResolution.y);",
+ " float invertedScale = 1.0 / shadowScale;",
+ " float s = (1.0 - invertedScale) * 0.5;",
+ " vec2 shadowCenterOffset = vec2(s);",
+ " shadowTexCoord = qt_MultiTexCoord0 - shadowOffset;",
+ " shadowTexCoord = (shadowTexCoord * invertedScale) + shadowCenterOffset;",
+ "#endif",
+ "}"
+ ],
+ "x": 105,
+ "y": 327.5
+ },
+ {
+ "description": "This node is required e.g. for FastBlur and DropShadow. It generates blurred iSourceBlur[1..6] samplers to be available for shaders.",
+ "fragmentCode": [
+ "@blursources"
+ ],
+ "name": "BlurHelper",
+ "nodeId": 3,
+ "properties": [
+ {
+ "defaultValue": "64",
+ "description": "This property defines the maximum pixel radius that blur with value 1.0 will reach.\n\nMeaningful range of this value is from 2 (subtle blur) to 64 (high blur). By default, the property is set to 32. For the most optimal performance, select as small value as you need.\n\nNote: This affects to both blur and shadow effects.",
+ "name": "BLUR_HELPER_MAX_LEVEL",
+ "type": "define",
+ "value": "64"
+ },
+ {
+ "defaultValue": "0",
+ "description": "This property defines a multiplier for extending the blur radius.\n\nThe value ranges from 0.0 (not multiplied) to inf. By default, the property is set to 0.0. Incresing the multiplier extends the blur radius, but decreases the blur quality. This is more performant option for a bigger blur radius than BLUR_HELPER_MAX_LEVEL as it doesn't increase the amount of texture lookups.\n\nNote: This affects to both blur and shadow effects.",
+ "maxValue": "2",
+ "minValue": "0",
+ "name": "blurMultiplier",
+ "type": "float",
+ "value": "0"
+ }
+ ],
+ "type": 2,
+ "x": 105,
+ "y": 188.875
+ }
+ ],
+ "settings": {
+ "headings": [
+ "// Copyright (C) 2023 The Qt Company Ltd.",
+ "// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause"
+ ]
+ },
+ "version": 1
+ }
+}
diff --git a/examples/quick/multieffect/testbed/qml/CustomMultiEffect/CustomMultiEffect.qml b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/CustomMultiEffect.qml
new file mode 100644
index 0000000000..d0fdf9c1b9
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/CustomMultiEffect.qml
@@ -0,0 +1,97 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+// Created with Qt Quick Effect Maker (version 0.43), Thu Feb 16 13:48:55 2023
+
+import QtQuick
+
+Item {
+ id: rootItem
+
+ // This is the main source for the effect
+ property Item source: null
+
+ property real contrast: 0
+ property real brightness: 0
+ property real saturation: 0
+ property real colorization: 0
+ property color colorizationColor: Qt.rgba(1, 0, 0, 1)
+ property int blurMax: 32
+ property real blur: 0
+ // This property defines how much blur (radius) is applied to the shadow.
+ //
+ // The value ranges from 0.0 (no blur) to 1.0 (full blur). By default, the property is set to \c 0.0 (no change). The amount of full blur is affected by blurHelperBlurMultiplier.
+ property real shadowBlur: 1
+ property real shadowOpacity: 1
+ property color shadowColor: Qt.rgba(0, 0, 0, 1)
+ property real shadowScale: 1
+ property real shadowHorizontalOffset: 0
+ property real shadowVerticalOffset: 0
+ // Source item for the mask effect. By default the alpha channel of the source item is used for masking but this can be easily adjusted in the shader.
+ property var maskSource: null
+ // This property defines a lower threshold value for the mask pixels. The mask pixels that have an alpha value below this property are used to completely mask away the corresponding pixels from the source item. The mask pixels that have a higher alpha value are used to alphablend the source item to the display.
+ //
+ // The value ranges from 0.0 (alpha value 0) to 1.0 (alpha value 255). By default, the property is set to 0.0.
+ property real maskThresholdMin: 0
+ // This property defines the smoothness of the mask edges near the maskThresholdMin. Setting higher spread values softens the transition from the transparent mask pixels towards opaque mask pixels by adding interpolated values between them.
+ //
+ // The value ranges from 0.0 (sharp mask edge) to 1.0 (smooth mask edge). By default, the property is set to 0.0.
+ property real maskSpreadAtMin: 0
+ // This property defines an upper threshold value for the mask pixels. The mask pixels that have an alpha value below this property are used to completely mask away the corresponding pixels from the source item. The mask pixels that have a higher alpha value are used to alphablend the source item to the display.
+ //
+ // The value ranges from 0.0 (alpha value 0) to 1.0 (alpha value 255). By default, the property is set to 1.0.
+ property real maskThresholdMax: 1
+ // This property defines the smoothness of the mask edges near the maskThresholdMax. Using higher spread values softens the transition from the transparent mask pixels towards opaque mask pixels by adding interpolated values between them.
+ //
+ // The value ranges from 0.0 (sharp mask edge) to 1.0 (smooth mask edge). By default, the property is set to 0.0.
+ property real maskSpreadAtMax: 0
+ // This property switches the mask to the opposite side; instead of masking away the content outside maskThresholdMin and maskThresholdMax, content between them will get masked away.
+ //
+ // By default, the property is set to false.
+ property bool maskInverted: false
+ // This property defines a multiplier for extending the blur radius.
+ //
+ // The value ranges from 0.0 (not multiplied) to inf. By default, the property is set to 0.0. Incresing the multiplier extends the blur radius, but decreases the blur quality. This is more performant option for a bigger blur radius than BLUR_HELPER_MAX_LEVEL as it doesn't increase the amount of texture lookups.
+ //
+ // Note: This affects to both blur and shadow effects.
+ property real blurMultiplier: 0
+
+ BlurHelper {
+ id: blurHelper
+ anchors.fill: parent
+ property int blurMax: 64
+ property real blurMultiplier: rootItem.blurMultiplier
+ }
+ ShaderEffect {
+ readonly property alias iSource: rootItem.source
+ readonly property vector3d iResolution: Qt.vector3d(width, height, 1.0)
+ readonly property alias iSourceBlur1: blurHelper.blurSrc1
+ readonly property alias iSourceBlur2: blurHelper.blurSrc2
+ readonly property alias iSourceBlur3: blurHelper.blurSrc3
+ readonly property alias iSourceBlur4: blurHelper.blurSrc4
+ readonly property alias iSourceBlur5: blurHelper.blurSrc5
+ readonly property alias contrast: rootItem.contrast
+ readonly property alias brightness: rootItem.brightness
+ readonly property alias saturation: rootItem.saturation
+ readonly property alias colorization: rootItem.colorization
+ readonly property alias colorizationColor: rootItem.colorizationColor
+ readonly property alias blurMax: rootItem.blurMax
+ readonly property alias blur: rootItem.blur
+ readonly property alias shadowBlur: rootItem.shadowBlur
+ readonly property alias shadowOpacity: rootItem.shadowOpacity
+ readonly property alias shadowColor: rootItem.shadowColor
+ readonly property alias shadowScale: rootItem.shadowScale
+ readonly property alias shadowHorizontalOffset: rootItem.shadowHorizontalOffset
+ readonly property alias shadowVerticalOffset: rootItem.shadowVerticalOffset
+ readonly property alias maskSource: rootItem.maskSource
+ readonly property alias maskThresholdMin: rootItem.maskThresholdMin
+ readonly property alias maskSpreadAtMin: rootItem.maskSpreadAtMin
+ readonly property alias maskThresholdMax: rootItem.maskThresholdMax
+ readonly property alias maskSpreadAtMax: rootItem.maskSpreadAtMax
+ readonly property alias maskInverted: rootItem.maskInverted
+ readonly property alias blurMultiplier: rootItem.blurMultiplier
+
+ vertexShader: 'custommultieffect.vert.qsb'
+ fragmentShader: 'custommultieffect.frag.qsb'
+ anchors.fill: parent
+ }
+}
diff --git a/examples/quick/multieffect/testbed/qml/CustomMultiEffect/bluritems.frag.qsb b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/bluritems.frag.qsb
new file mode 100644
index 0000000000..054745d277
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/bluritems.frag.qsb
Binary files differ
diff --git a/examples/quick/multieffect/testbed/qml/CustomMultiEffect/bluritems.vert.qsb b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/bluritems.vert.qsb
new file mode 100644
index 0000000000..6aa0eb1d4e
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/bluritems.vert.qsb
Binary files differ
diff --git a/examples/quick/multieffect/testbed/qml/CustomMultiEffect/custommultieffect.frag.qsb b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/custommultieffect.frag.qsb
new file mode 100644
index 0000000000..370cf501dc
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/custommultieffect.frag.qsb
Binary files differ
diff --git a/examples/quick/multieffect/testbed/qml/CustomMultiEffect/custommultieffect.vert.qsb b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/custommultieffect.vert.qsb
new file mode 100644
index 0000000000..c522c25aee
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/CustomMultiEffect/custommultieffect.vert.qsb
Binary files differ
diff --git a/examples/quick/multieffect/testbed/qml/Settings.qml b/examples/quick/multieffect/testbed/qml/Settings.qml
index 6139bdc6f4..05947c2ab4 100644
--- a/examples/quick/multieffect/testbed/qml/Settings.qml
+++ b/examples/quick/multieffect/testbed/qml/Settings.qml
@@ -18,6 +18,7 @@ QtObject {
property bool animateMovement: true
property bool showShader: false
property bool showItemSize: false
+ property bool showCustomMultiEffect: false
property bool autoPaddingEnabled: true
property rect paddingRect: Qt.rect(0, 0, 0, 0)
diff --git a/examples/quick/multieffect/testbed/qml/SettingsView.qml b/examples/quick/multieffect/testbed/qml/SettingsView.qml
index 9b753298dd..789f7685c2 100644
--- a/examples/quick/multieffect/testbed/qml/SettingsView.qml
+++ b/examples/quick/multieffect/testbed/qml/SettingsView.qml
@@ -125,6 +125,13 @@ Item {
settings.autoPaddingEnabled = checked;
}
}
+ SettingsComponentCheckBox {
+ text: "Show Custom MultiEffect"
+ checked: settings.showCustomMultiEffect
+ onToggled: {
+ settings.showCustomMultiEffect = checked;
+ }
+ }
Item {
width: 1
height: 20 * dp
diff --git a/examples/quick/multieffect/testbed/qml/WarningsView.qml b/examples/quick/multieffect/testbed/qml/WarningsView.qml
index 880a75b885..c25ad5fccd 100644
--- a/examples/quick/multieffect/testbed/qml/WarningsView.qml
+++ b/examples/quick/multieffect/testbed/qml/WarningsView.qml
@@ -28,4 +28,11 @@ Item {
anchors.leftMargin: 16
text: qsTr("Item resized!")
}
+ WarningsItem {
+ id: customEffectWarning
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ text: qsTr("<b>Note:</b> Custom MultiEffect doesn't support all the MultiEffect features, like paddings and disabling effects.")
+ opacity: settings.showCustomMultiEffect
+ }
}
diff --git a/examples/quick/multieffect/testbed/qml/main.qml b/examples/quick/multieffect/testbed/qml/main.qml
index 6d34a47bfa..8fc761169e 100644
--- a/examples/quick/multieffect/testbed/qml/main.qml
+++ b/examples/quick/multieffect/testbed/qml/main.qml
@@ -4,6 +4,7 @@
import QtQuick
import QtQuick.Window
import QtQuick.Effects
+import "CustomMultiEffect"
Rectangle {
id: mainWindow
@@ -77,9 +78,9 @@ Rectangle {
MultiEffect {
id: quickMultiEffect
anchors.fill: testSourceItem
+ visible: !settings.showCustomMultiEffect
source: testSourceItem
maskSource: testMaskItem
-
autoPaddingEnabled: settings.autoPaddingEnabled
paddingRect: settings.paddingRect
brightness: settings.brightnessEnabled ? settings.brightness : 0
@@ -106,12 +107,42 @@ Rectangle {
maskSpreadAtMax: settings.maskSpreadAtMax
onItemSizeChanged: {
- warningsView.showSizeWarning();
+ if (visible)
+ warningsView.showSizeWarning();
}
onShaderChanged: {
- warningsView.showShaderWarning();
+ if (visible)
+ warningsView.showShaderWarning();
}
}
+
+ // For comparison, custom effect created with QQEM and the MultiEffect node.
+ CustomMultiEffect {
+ id: customMultiEffect
+ anchors.fill: testSourceItem
+ visible: settings.showCustomMultiEffect
+ source: testSourceItem
+ maskSource: testMaskItem
+ brightness: settings.brightnessEnabled ? settings.brightness : 0
+ contrast: settings.contrastEnabled ? settings.contrast : 0
+ saturation: settings.saturationEnabled ? settings.saturation : 0
+ colorizationColor: settings.colorizationColor
+ colorization: settings.colorizationEnabled ? settings.colorization : 0
+ blur: settings.blur
+ blurMax: settings.blurMax
+ blurMultiplier: settings.blurMultiplier
+ shadowOpacity: settings.shadowOpacity
+ shadowBlur: settings.shadowBlur
+ shadowHorizontalOffset: settings.shadowHorizontalOffset
+ shadowVerticalOffset: settings.shadowVerticalOffset
+ shadowColor: settings.shadowColor
+ shadowScale: settings.shadowScale
+ maskInverted: settings.maskInverted
+ maskThresholdMin: settings.maskThresholdMin
+ maskSpreadAtMin: settings.maskSpreadAtMin
+ maskThresholdMax: settings.maskThresholdMax
+ maskSpreadAtMax: settings.maskSpreadAtMax
+ }
}
SettingsView {
diff --git a/examples/quick/particles/CMakeLists.txt b/examples/quick/particles/CMakeLists.txt
index d34300510f..ce9658b74a 100644
--- a/examples/quick/particles/CMakeLists.txt
+++ b/examples/quick/particles/CMakeLists.txt
@@ -1,8 +1,7 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_internal_add_example(affectors)
qt_internal_add_example(emitters)
qt_internal_add_example(imageparticle)
-qt_internal_add_example(itemparticle)
qt_internal_add_example(system)
diff --git a/examples/quick/particles/affectors/CMakeLists.txt b/examples/quick/particles/affectors/CMakeLists.txt
index 5f710fbdd8..dc29e1787b 100644
--- a/examples/quick/particles/affectors/CMakeLists.txt
+++ b/examples/quick/particles/affectors/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(affectors LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/particles/affectors")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../../shared" "shared")
@@ -21,10 +15,10 @@ qt_add_executable(affectorsexample WIN32 MACOSX_BUNDLE
)
target_link_libraries(affectorsexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
add_dependencies(affectorsexample affectors_shared)
@@ -32,7 +26,6 @@ add_dependencies(affectorsexample affectors_shared)
# Resources:
qt_add_qml_module(affectorsexample
URI affectors
- AUTO_RESOURCE_PREFIX
QML_FILES
"affectors.qml"
"GreyButton.qml"
@@ -65,9 +58,16 @@ qt_add_qml_module(affectorsexample
)
install(TARGETS affectorsexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(affectorsexample)
+qt_generate_deploy_qml_app_script(
+ TARGET affectorsexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/particles/affectors/GreyButton.qml b/examples/quick/particles/affectors/GreyButton.qml
index 0d29246c2b..412a6dfa60 100644
--- a/examples/quick/particles/affectors/GreyButton.qml
+++ b/examples/quick/particles/affectors/GreyButton.qml
@@ -6,7 +6,7 @@ import QtQuick
Item {
id: container
- property string text: "Button"
+ required property string text
property string subText: ""
signal clicked
diff --git a/examples/quick/particles/affectors/attractor.qml b/examples/quick/particles/affectors/attractor.qml
index a0793b5fed..c5b95ee2a0 100644
--- a/examples/quick/particles/affectors/attractor.qml
+++ b/examples/quick/particles/affectors/attractor.qml
@@ -69,7 +69,6 @@ Rectangle {
groups: ["engine"]
source: "qrc:///particleresources/fuzzydot.png"
- color: "orange"
SequentialAnimation on color {
loops: Animation.Infinite
ColorAnimation {
diff --git a/examples/quick/particles/affectors/doc/src/affectors.qdoc b/examples/quick/particles/affectors/doc/src/affectors.qdoc
index 5d98029b44..73f99aabed 100644
--- a/examples/quick/particles/affectors/doc/src/affectors.qdoc
+++ b/examples/quick/particles/affectors/doc/src/affectors.qdoc
@@ -4,6 +4,7 @@
/*!
\title Qt Quick Particles Examples - Affectors
\example particles/affectors
+ \examplecategory {Graphics}
\brief This is a collection of examples using Affectors in the QML particle system.
\image qml-affectors-example.png
diff --git a/examples/quick/particles/affectors/spritegoal.qml b/examples/quick/particles/affectors/spritegoal.qml
index 8d157be7d9..98d793d304 100644
--- a/examples/quick/particles/affectors/spritegoal.qml
+++ b/examples/quick/particles/affectors/spritegoal.qml
@@ -114,7 +114,7 @@ Item {
id: circle
x: root.width / 1.2
y: root.height / 1.7
- property real percent: 0
+ property real percent
SequentialAnimation on percent {
id: circleAnim1
@@ -135,7 +135,6 @@ Item {
groups: ["exhaust"]
source: "qrc:///particleresources/fuzzydot.png"
- color: "orange"
SequentialAnimation on color {
loops: Animation.Infinite
ColorAnimation {
diff --git a/examples/quick/particles/affectors/turbulence.qml b/examples/quick/particles/affectors/turbulence.qml
index dac3a5c46d..049e1a584d 100644
--- a/examples/quick/particles/affectors/turbulence.qml
+++ b/examples/quick/particles/affectors/turbulence.qml
@@ -31,7 +31,6 @@ Rectangle {
width: parent.width
x: parent. width / 4
anchors.fill: parent
- strength: 32
NumberAnimation on strength{from: 16; to: 64; easing.type: Easing.InOutBounce; duration: 1800; loops: -1}
}
//! [0]
diff --git a/examples/quick/particles/affectors/wander.qml b/examples/quick/particles/affectors/wander.qml
index e93bfe200c..c4c2914d49 100644
--- a/examples/quick/particles/affectors/wander.qml
+++ b/examples/quick/particles/affectors/wander.qml
@@ -45,15 +45,15 @@ Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
spacing: 4
GreyButton {
- text:"dx/dt"
+ text: qsTr("dx/dt")
onClicked: wanderer.affectedParameter = Wander.Position;
}
GreyButton {
- text:"dv/dt"
+ text: qsTr("dv/dt")
onClicked: wanderer.affectedParameter = Wander.Velocity;
}
GreyButton {
- text:"da/dt"
+ text: qsTr("da/dt")
onClicked: wanderer.affectedParameter = Wander.Acceleration;
}
}
diff --git a/examples/quick/particles/emitters/CMakeLists.txt b/examples/quick/particles/emitters/CMakeLists.txt
index 8bb31beba6..772f45fa0a 100644
--- a/examples/quick/particles/emitters/CMakeLists.txt
+++ b/examples/quick/particles/emitters/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(emitters LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/particles/emitters")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../../shared" "shared")
@@ -21,10 +15,10 @@ qt_add_executable(emittersexample WIN32 MACOSX_BUNDLE
)
target_link_libraries(emittersexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
add_dependencies(emittersexample emitters_shared)
@@ -32,7 +26,6 @@ add_dependencies(emittersexample emitters_shared)
# Resources:
qt_add_qml_module(emittersexample
URI emitters
- AUTO_RESOURCE_PREFIX
QML_FILES
"burstandpulse.qml"
"customemitter.qml"
@@ -48,9 +41,16 @@ qt_add_qml_module(emittersexample
)
install(TARGETS emittersexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(emittersexample)
+qt_generate_deploy_qml_app_script(
+ TARGET emittersexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/particles/emitters/customemitter.qml b/examples/quick/particles/emitters/customemitter.qml
index 5aba7d1b9f..ed23d68720 100644
--- a/examples/quick/particles/emitters/customemitter.qml
+++ b/examples/quick/particles/emitters/customemitter.qml
@@ -16,7 +16,7 @@ ParticleSystem {
}
property real petalLength: 180
- property real petalRotation: 0
+ property real petalRotation
NumberAnimation on petalRotation {
from: 0;
to: 360;
@@ -34,9 +34,9 @@ ParticleSystem {
//! [0]
onEmitParticles: (particles) => {
for (var i=0; i<particles.length; i++) {
- var particle = particles[i];
+ let particle = particles[i];
particle.startSize = Math.max(02,Math.min(492,Math.tan(particle.t/2)*24));
- var theta = Math.floor(Math.random() * 6.0);
+ let theta = Math.floor(Math.random() * 6.0);
particle.red = theta == 0 || theta == 1 || theta == 2 ? 0.2 : 1;
particle.green = theta == 2 || theta == 3 || theta == 4 ? 0.2 : 1;
particle.blue = theta == 4 || theta == 5 || theta == 0 ? 0.2 : 1;
diff --git a/examples/quick/particles/emitters/doc/src/emitters.qdoc b/examples/quick/particles/emitters/doc/src/emitters.qdoc
index db06577422..51a1ac308a 100644
--- a/examples/quick/particles/emitters/doc/src/emitters.qdoc
+++ b/examples/quick/particles/emitters/doc/src/emitters.qdoc
@@ -3,6 +3,7 @@
/*!
\title Qt Quick Particles Examples - Emitters
\example particles/emitters
+ \examplecategory {Graphics}
\brief This is a collection of examples using Emitters in the QML particle system.
\image qml-emitters-example.png
diff --git a/examples/quick/particles/emitters/velocityfrommotion.qml b/examples/quick/particles/emitters/velocityfrommotion.qml
index df8070e768..aa65ac7d9e 100644
--- a/examples/quick/particles/emitters/velocityfrommotion.qml
+++ b/examples/quick/particles/emitters/velocityfrommotion.qml
@@ -25,7 +25,6 @@ Rectangle {
ImageParticle {
system: sys1
source: "qrc:///particleresources/glowdot.png"
- color: "cyan"
alpha: 0
SequentialAnimation on color {
loops: Animation.Infinite
@@ -73,7 +72,6 @@ Rectangle {
//! [0]
ParticleSystem { id: sys2 }
ImageParticle {
- color: "cyan"
system: sys2
alpha: 0
SequentialAnimation on color {
@@ -114,7 +112,6 @@ Rectangle {
ImageParticle {
source: "qrc:///particleresources/glowdot.png"
system: sys3
- color: "orange"
alpha: 0
SequentialAnimation on color {
loops: Animation.Infinite
@@ -155,7 +152,6 @@ Rectangle {
ImageParticle {
system: sys4
source: "qrc:///particleresources/star.png"
- color: "green"
alpha: 0
SequentialAnimation on color {
loops: Animation.Infinite
@@ -199,12 +195,12 @@ Rectangle {
Item {
id: circle
//anchors.fill: parent
- property real radius: 0
+ property real radius
property real dx: root.width / 2
property real dy: root.height / 2
property real cx: radius * Math.sin(percent*6.283185307179) + dx
property real cy: radius * Math.cos(percent*6.283185307179) + dy
- property real percent: 0
+ property real percent
SequentialAnimation on percent {
loops: Animation.Infinite
@@ -247,7 +243,7 @@ Rectangle {
property real dy: root.height / 2
property real cx: radius * Math.sin(percent*6.283185307179) + dx
property real cy: radius * Math.cos(percent*6.283185307179) + dy
- property real percent: 0
+ property real percent
SequentialAnimation on percent {
loops: Animation.Infinite
@@ -263,7 +259,7 @@ Rectangle {
property real dy: circle3.cy
property real cx: radius * Math.sin(percent*6.283185307179) + dx
property real cy: radius * Math.cos(percent*6.283185307179) + dy
- property real percent: 0
+ property real percent
SequentialAnimation on percent {
loops: Animation.Infinite
diff --git a/examples/quick/particles/imageparticle/CMakeLists.txt b/examples/quick/particles/imageparticle/CMakeLists.txt
index 1bc4acd678..c587d9bcc3 100644
--- a/examples/quick/particles/imageparticle/CMakeLists.txt
+++ b/examples/quick/particles/imageparticle/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(imageparticle LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/particles/imageparticle")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../../shared" "shared")
@@ -21,10 +15,10 @@ qt_add_executable(imageparticleexample WIN32 MACOSX_BUNDLE
)
target_link_libraries(imageparticleexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
add_dependencies(imageparticleexample imageparticle_shared)
@@ -32,7 +26,6 @@ add_dependencies(imageparticleexample imageparticle_shared)
# Resources:
qt_add_qml_module(imageparticleexample
URI imageparticle
- AUTO_RESOURCE_PREFIX
QML_FILES
"allatonce.qml"
"colored.qml"
@@ -54,9 +47,16 @@ qt_add_qml_module(imageparticleexample
)
install(TARGETS imageparticleexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(imageparticleexample)
+qt_generate_deploy_qml_app_script(
+ TARGET imageparticleexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/particles/imageparticle/doc/src/imageparticle.qdoc b/examples/quick/particles/imageparticle/doc/src/imageparticle.qdoc
index d4c8c5d66b..4bbbc6a430 100644
--- a/examples/quick/particles/imageparticle/doc/src/imageparticle.qdoc
+++ b/examples/quick/particles/imageparticle/doc/src/imageparticle.qdoc
@@ -4,6 +4,7 @@
/*!
\title Qt Quick Particles Examples - Image Particles
\example particles/imageparticle
+ \examplecategory {Graphics}
\brief This is a collection of examples using Affectors in the QML particle system.
\image qml-imageparticle-example.png
diff --git a/examples/quick/particles/itemparticle/CMakeLists.txt b/examples/quick/particles/itemparticle/CMakeLists.txt
deleted file mode 100644
index 77fe5a4961..0000000000
--- a/examples/quick/particles/itemparticle/CMakeLists.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(itemparticle LANGUAGES CXX)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/particles/itemparticle")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-
-qt_standard_project_setup()
-
-add_subdirectory("../../shared" "shared")
-
-qt_add_executable(itemparticleexample WIN32 MACOSX_BUNDLE
- main.cpp
-)
-
-target_link_libraries(itemparticleexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-add_dependencies(itemparticleexample itemparticle_shared)
-
-# Resources:
-qt_add_qml_module(itemparticleexample
- URI itemparticle
- AUTO_RESOURCE_PREFIX
- QML_FILES
- "itemparticle.qml"
- "delegates.qml"
- "script.js"
- RESOURCES
- "images/rocket.png"
-)
-
-install(TARGETS itemparticleexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-bundle_shared(itemparticleexample)
diff --git a/examples/quick/particles/itemparticle/delegates.qml b/examples/quick/particles/itemparticle/delegates.qml
deleted file mode 100644
index 35bbbc7132..0000000000
--- a/examples/quick/particles/itemparticle/delegates.qml
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Particles
-
-Rectangle {
- id: root;
- width: 360
- height: 600
- color: "black"
-
- function newPithySaying() {
- switch (Math.floor(Math.random()*16)) {
- case 0: return "Hello World";
- case 1: return "G'day Mate";
- case 2: return "Code Less";
- case 3: return "Create More";
- case 4: return "Deploy Everywhere";
- case 5: return "Qt Meta-object Language";
- case 6: return "Qt Magic Language";
- case 7: return "Fluid UIs";
- case 8: return "Touchable";
- case 9: return "How's it going?";
- case 10: return "Do you like text?";
- case 11: return "Enjoy!";
- case 12: return "ERROR: Out of pith";
- case 13: return "Punctuation Failure";
- case 14: return "I can go faster";
- case 15: return "I can go slower";
- default: return "OMGWTFBBQ";
- }
- }
-
- ParticleSystem {
- anchors.fill: parent
- id: syssy
- MouseArea {
- anchors.fill: parent
- onClicked: syssy.running = !syssy.running
- }
- Emitter {
- anchors.centerIn: parent
- emitRate: 1
- lifeSpan: 4800
- lifeSpanVariation: 1600
- velocity: AngleDirection {angleVariation: 360; magnitude: 40; magnitudeVariation: 20}
- }
- ItemParticle {
- delegate: Text {
- text: root.newPithySaying();
- color: "white"
- font.pixelSize: 18
- font.bold: true
- }
- }
- }
-}
diff --git a/examples/quick/particles/itemparticle/images/rocket.png b/examples/quick/particles/itemparticle/images/rocket.png
deleted file mode 100644
index a171610b03..0000000000
--- a/examples/quick/particles/itemparticle/images/rocket.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/particles/itemparticle/itemparticle.pro b/examples/quick/particles/itemparticle/itemparticle.pro
deleted file mode 100644
index c0426cd032..0000000000
--- a/examples/quick/particles/itemparticle/itemparticle.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-RESOURCES += \
- itemparticle.qrc \
- ../../shared/shared.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/particles/itemparticle
-INSTALLS += target
diff --git a/examples/quick/particles/itemparticle/itemparticle.qml b/examples/quick/particles/itemparticle/itemparticle.qml
deleted file mode 100644
index 6655dde939..0000000000
--- a/examples/quick/particles/itemparticle/itemparticle.qml
+++ /dev/null
@@ -1,262 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Particles
-import shared
-import "script.js" as Script
-
-Item {
- id: root
- width: 640
- height: 480
- Rectangle {
- anchors.fill: parent
- color: "black"
- z: -1
- }
- Item {
- id: loading
- Behavior on opacity {NumberAnimation {}}
- anchors.fill: parent
- Text {
- anchors.centerIn: parent
- text: "Loading"
- color: "white"
- }
- }
- ParticleSystem {
- id: sys;
- running: true
- }
- Emitter {
- id: emitter
- system: sys
- height: parent.height - 132/2
- x: -132/2
- y: 132/2
- velocity: PointDirection { x: 32; xVariation: 8 }
- emitRate: 0.5
- lifeSpan: Emitter.InfiniteLife
- group: "photos"
- }
- Age {
- system: sys
- x: parent.width + 132/2
- height: parent.height
- width: 1000
- }
- ImageParticle {
- system: sys
- groups: ["fireworks"]
- source: "qrc:///particleresources/star.png"
- color: "lightsteelblue"
- alpha: 0
- colorVariation: 0
- z: 1000
- }
- ItemParticle {
- id: mp
- z: 0
- system: sys
- fade: false
- groups: ["photos"]
- }
- Component {
- id: alertDelegate
- Rectangle {
- color: "DarkSlateGray"
- border.width: 1
- border.color: "LightSteelBlue"
- width: 144
- height: 132
- antialiasing: true
- radius: 3
- NumberAnimation on scale {
- running: true
- loops: 1
- from: 0.2
- to: 1
- }
- Image {
- source: "images/rocket.png"
- anchors.centerIn: parent
- }
- Text {
- anchors.bottom: parent.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- text: "A new ship has arrived!"
- color: "LightSteelBlue"
- }
- }
- }
- property Item alertItem;
- function alert() {
- force.enabled = true;
- alertItem = alertDelegate.createObject(root);
- alertItem.x = root.width/2 - alertItem.width/2
- alertItem.y = root.height/2 - alertItem.height/2
- spawnFireworks.pulse(200);
- stopAlert.start();
- }
- focus: true
- Keys.onSpacePressed: alert();
- Timer {
- id: stopAlert
- running: false
- repeat: false
- interval: 800
- onTriggered: {
- force.enabled = false;
- mp.take(root.alertItem, true);
- centerEmitter.burst(1);
- }
- }
- Attractor {
- id: force
- system: sys
- pointX: root.width/2
- pointY: root.height/2
- strength: -10000
- enabled: false
- anchors.centerIn: parent
- width: parent.width/2
- height: parent.height/2
- groups:["photos"]
- affectedParameter: Attractor.Position
- }
- Emitter {
- id: centerEmitter
- velocity: PointDirection { x: 32; xVariation: 8;}
- emitRate: 0.5
- lifeSpan: 12000 //TODO: A -1 or something which does 'infinite'? (but need disable fade first)
- maximumEmitted: 20
- group: "photos"
- system: sys
- anchors.centerIn: parent
- enabled: false
-
- //TODO: Zoom in effect
- }
- Emitter {
- id: spawnFireworks
- group: "fireworks"
- system: sys
- maximumEmitted: 400
- emitRate: 400
- lifeSpan: 2800
- x: parent.width/2
- y: parent.height/2 - 64
- width: 8
- height: 8
- enabled: false
- size: 32
- endSize: 8
- velocity: AngleDirection { magnitude: 160; magnitudeVariation: 120; angleVariation: 90; angle: 270 }
- acceleration: PointDirection { y: 160 }
- }
- Item { x: -1000; y: -1000 //offscreen
- Repeater {//Load them here, add to system on completed
- model: flickrModel
- delegate: theDelegate
- }
- }
- FlickrRssModel {
- id: flickrModel
- tags: "particle,particles"
- }
- Component {
- id: theDelegate
- Image {
- required property int index
- required property string title
- required property string media
- required property string thumbnail
-
- id: image
- antialiasing: true;
- source: thumbnail
- cache: true
- property real depth: Math.random()
- property real darken: 0.75
- z: Math.floor(depth * 100)
- scale: (depth + 1) / 2
- sourceSize {
- width: root.width
- height: root.height
- }
- width: 132
- height: 132
- fillMode: Image.PreserveAspectFit
- Rectangle {
- // Darken based on depth
- anchors.centerIn: parent
- width: parent.paintedWidth + 1
- height: parent.paintedHeight + 1
- color: "black"
- opacity: image.darken * (1 - image.depth)
- antialiasing: true;
- }
- Text {
- anchors.bottom: parent.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.bottomMargin: Math.max(parent.paintedWidth, parent.paintedHeight) - Math.min(parent.width, parent.height)
- width: parent.paintedWidth - 4
- horizontalAlignment: Text.AlignHCenter
- elide: Text.ElideRight
- text: image.title
- color: "black"
- }
- ItemParticle.onDetached: mp.take(image); // respawns
- onStatusChanged: if (image.status == Image.Ready) {
- loading.opacity = 0;
- mp.take(image);
- }
- function manage()
- {
- if (state == "selected") {
- console.log("Taking " + index);
- mp.freeze(image);
- } else {
- console.log("Returning " +index);
- mp.unfreeze(image);
- }
- }
- TapHandler {
- gesturePolicy: TapHandler.ReleaseWithinBounds
- onTapped: image.state = (image.state == "" ? "selected" : "")
- }
- states: State {
- name: "selected"
- ParentChange {
- target: image
- parent: root
- }
- PropertyChanges {
- image {
- source: image.media
- x: 0
- y: 0
- width: root.width
- height: root.height
- z: 101
- opacity: 1
- rotation: 0
- darken: 0
- }
- }
- }
- transitions: Transition {
- to: "selected"
- reversible: true
- SequentialAnimation {
- ScriptAction { script: image.manage() }
- ParallelAnimation {
- ParentAnimation {NumberAnimation { properties: "x,y" }}
- PropertyAnimation { properties: "width, height, z, rotation, darken"; easing.type: Easing.InOutQuad }
- }
- }
- }
- }
- }
-}
diff --git a/examples/quick/particles/itemparticle/itemparticle.qrc b/examples/quick/particles/itemparticle/itemparticle.qrc
deleted file mode 100644
index d345d2a957..0000000000
--- a/examples/quick/particles/itemparticle/itemparticle.qrc
+++ /dev/null
@@ -1,8 +0,0 @@
-<RCC>
- <qresource prefix="/qt/qml/itemparticle">
- <file>itemparticle.qml</file>
- <file>delegates.qml</file>
- <file>script.js</file>
- <file>images/rocket.png</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/particles/itemparticle/main.cpp b/examples/quick/particles/itemparticle/main.cpp
deleted file mode 100644
index 8baca3753c..0000000000
--- a/examples/quick/particles/itemparticle/main.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (C) 2018 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(itemparticle/itemparticle)
diff --git a/examples/quick/particles/itemparticle/script.js b/examples/quick/particles/itemparticle/script.js
deleted file mode 100644
index e8ef93a847..0000000000
--- a/examples/quick/particles/itemparticle/script.js
+++ /dev/null
@@ -1,27 +0,0 @@
-.pragma library
-
-function getWidth(string) {
- return (string.match(/width=\"([0-9]+)\"/))[1]
-}
-
-function getHeight(string) {
- return (string.match(/height=\"([0-9]+)\"/))[1]
-}
-
-function getImagePath(string) {
- var pattern = /src=\"http:\/\/(\S+)\"/
- return (string.match(pattern))[1]
-}
-
-function calculateScale(width, height, cellSize) {
- var widthScale = (cellSize * 1.0) / width
- var heightScale = (cellSize * 1.0) / height
- var scale = 0
-
- if (widthScale <= heightScale) {
- scale = widthScale;
- } else if (heightScale < widthScale) {
- scale = heightScale;
- }
- return scale;
-}
diff --git a/examples/quick/particles/particles.pro b/examples/quick/particles/particles.pro
index 7ef86618d5..62f7f35807 100644
--- a/examples/quick/particles/particles.pro
+++ b/examples/quick/particles/particles.pro
@@ -2,7 +2,6 @@ TEMPLATE = subdirs
SUBDIRS += affectors \
emitters \
imageparticle \
- itemparticle \
system
#Install shared images too
diff --git a/examples/quick/particles/system/CMakeLists.txt b/examples/quick/particles/system/CMakeLists.txt
index d224d607ce..0c8f8852f9 100644
--- a/examples/quick/particles/system/CMakeLists.txt
+++ b/examples/quick/particles/system/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(system LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/particles/system")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../../shared" "shared")
@@ -21,10 +15,10 @@ qt_add_executable(systemexample WIN32 MACOSX_BUNDLE
)
target_link_libraries(systemexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
add_dependencies(systemexample system_shared)
@@ -32,7 +26,6 @@ add_dependencies(systemexample system_shared)
# Resources:
qt_add_qml_module(systemexample
URI system
- AUTO_RESOURCE_PREFIX
QML_FILES
"dynamiccomparison.qml"
"dynamicemitters.qml"
@@ -47,9 +40,16 @@ qt_add_qml_module(systemexample
)
install(TARGETS systemexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(systemexample)
+qt_generate_deploy_qml_app_script(
+ TARGET systemexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/particles/system/doc/src/system.qdoc b/examples/quick/particles/system/doc/src/system.qdoc
index da10dfdac0..b936bd8976 100644
--- a/examples/quick/particles/system/doc/src/system.qdoc
+++ b/examples/quick/particles/system/doc/src/system.qdoc
@@ -4,6 +4,7 @@
/*!
\title Qt Quick Particles Examples - System
\example particles/system
+ \examplecategory {Graphics}
\brief This is a collection of examples using Affectors in the QML particle system.
\image qml-system-example.png
diff --git a/examples/quick/particles/system/dynamiccomparison.qml b/examples/quick/particles/system/dynamiccomparison.qml
index 0d8b4cc399..d29b72f998 100644
--- a/examples/quick/particles/system/dynamiccomparison.qml
+++ b/examples/quick/particles/system/dynamiccomparison.qml
@@ -4,6 +4,8 @@
import QtQuick
import QtQuick.Particles
+pragma ComponentBehavior: Bound
+
Rectangle {
id: root
color: "black"
@@ -38,11 +40,11 @@ Rectangle {
id: fakeEmitter
function burst(number) {
while (number > 0) {
- var item = fakeParticle.createObject(root);
- item.lifeSpan = Math.random() * 5000 + 5000;
- item.x = Math.random() * (root.width/2) + (root.width/2);
- item.y = 0;
- number--;
+ let item = fakeParticle.createObject(root)
+ item.lifeSpan = Math.random() * 5000 + 5000
+ item.x = Math.random() * (root.width / 2) + (root.width / 2)
+ item.y = 0
+ number--
}
}
@@ -54,13 +56,12 @@ Rectangle {
width: 32
height: 32
source: "qrc:///particleresources/glowdot.png"
- y: 0
- PropertyAnimation on y {from: -16; to: root.height-16; duration: container.lifeSpan; running: true}
+ PropertyAnimation on y { from: -16; to: root.height - 16; duration: container.lifeSpan; running: true }
SequentialAnimation on opacity {
running: true
- NumberAnimation { from:0; to: 1; duration: 500}
- PauseAnimation { duration: container.lifeSpan - 1000}
- NumberAnimation { from:1; to: 0; duration: 500}
+ NumberAnimation { from: 0; to: 1; duration: 500 }
+ PauseAnimation { duration: container.lifeSpan - 1000 }
+ NumberAnimation { from: 1; to: 0; duration: 500 }
ScriptAction { script: container.destroy(); }
}
}
@@ -82,7 +83,7 @@ Rectangle {
Text {
anchors.left: parent.left
anchors.bottom: parent.bottom
- text: "1000 particles"
+ text: qsTr("1000 particles")
color: "white"
MouseArea {
anchors.fill: parent
@@ -92,7 +93,7 @@ Rectangle {
Text {
anchors.right: parent.right
anchors.bottom: parent.bottom
- text: "1000 items"
+ text: qsTr("1000 items")
color: "white"
MouseArea {
anchors.fill: parent
diff --git a/examples/quick/particles/system/dynamicemitters.qml b/examples/quick/particles/system/dynamicemitters.qml
index 29f9235ac8..31c70b2a6c 100644
--- a/examples/quick/particles/system/dynamicemitters.qml
+++ b/examples/quick/particles/system/dynamicemitters.qml
@@ -4,6 +4,8 @@
import QtQuick
import QtQuick.Particles
+pragma ComponentBehavior: Bound
+
Rectangle {
id: root
color: "black"
@@ -31,15 +33,18 @@ Rectangle {
lifeSpan: 600
size: 16
endSize: 8
- velocity: AngleDirection {angleVariation:360; magnitude: 60}
+ velocity: AngleDirection {
+ angleVariation: 360
+ magnitude: 60
+ }
}
property int life: 2600
property real targetX: 0
property real targetY: 0
function go() {
- xAnim.start();
- yAnim.start();
+ xAnim.start()
+ yAnim.start()
container.enabled = true
}
system: sys
@@ -49,35 +54,35 @@ Rectangle {
endSize: 8
NumberAnimation on x {
id: xAnim;
- to: targetX
- duration: life
+ to: container.targetX
+ duration: container.life
running: false
}
NumberAnimation on y {
id: yAnim;
- to: targetY
- duration: life
+ to: container.targetY
+ duration: container.life
running: false
}
Timer {
- interval: life
+ interval: container.life
running: true
- onTriggered: container.destroy();
+ onTriggered: container.destroy()
}
}
}
- function customEmit(x,y) {
+ function customEmit(x, y) {
//! [0]
- for (var i=0; i<8; i++) {
- var obj = emitterComp.createObject(root);
+ for (var i = 0; i < 8; i++) {
+ let obj = emitterComp.createObject(root)
obj.x = x
obj.y = y
obj.targetX = Math.random() * 240 - 120 + obj.x
obj.targetY = Math.random() * 240 - 120 + obj.y
obj.life = Math.round(Math.random() * 2400) + 200
obj.emitRate = Math.round(Math.random() * 32) + 32
- obj.go();
+ obj.go()
}
//! [0]
}
@@ -87,16 +92,15 @@ Rectangle {
triggeredOnStart: true
running: true
repeat: true
- onTriggered: customEmit(Math.random() * 320, Math.random() * 480)
+ onTriggered: root.customEmit(Math.random() * 320, Math.random() * 480)
}
- MouseArea {
- anchors.fill: parent
- onClicked: (mouse)=> customEmit(mouse.x, mouse.y);
+ TapHandler {
+ onTapped: function(event) { root.customEmit(event.pressPosition.x, event.pressPosition.y) }
}
Text {
anchors.horizontalCenter: parent.horizontalCenter
- text: "Click Somewhere"
+ text: qsTr("Click Somewhere")
color: "white"
font.pixelSize: 24
}
diff --git a/examples/quick/particles/system/multiplepainters.qml b/examples/quick/particles/system/multiplepainters.qml
index dbbe3abed5..5356f5fe8a 100644
--- a/examples/quick/particles/system/multiplepainters.qml
+++ b/examples/quick/particles/system/multiplepainters.qml
@@ -13,13 +13,12 @@ Rectangle {
ParticleSystem {
id: sys
}
- MouseArea {
- anchors.fill: parent
- onClicked: cloneMode = !cloneMode;
+ TapHandler {
+ onTapped: root.cloneMode = !root.cloneMode
}
Text {
anchors.horizontalCenter: parent.horizontalCenter
- text: "Click to Toggle"
+ text: qsTr("Click to Toggle")
color: "white"
font.pixelSize: 24
}
@@ -30,18 +29,18 @@ Rectangle {
emitRate: 200
lifeSpan: 4000
startTime: 4000
- velocity: PointDirection { y: -120; }
+ velocity: PointDirection { y: -120 }
}
ImageParticle {
system: sys
- visible: !cloneMode
+ visible: !root.cloneMode
source: "images/particle2.png"
}
ImageParticle {
system: sys
- visible: cloneMode
+ visible: root.cloneMode
z: 0
source: "images/particle3.png"
}
@@ -49,7 +48,7 @@ Rectangle {
ImageParticle {
system: sys
clip: true
- visible: cloneMode
+ visible: root.cloneMode
y: 120
height: 240
width: root.width
diff --git a/examples/quick/particles/system/startstop.qml b/examples/quick/particles/system/startstop.qml
index e275a4410b..e89c1f40f0 100644
--- a/examples/quick/particles/system/startstop.qml
+++ b/examples/quick/particles/system/startstop.qml
@@ -9,15 +9,16 @@ Rectangle {
height: 540
color: "black"
Text {
- text: "Left click to start/stop\nRight click to pause/unpause"
+ text: qsTr("Left click to start/stop\nRight click to pause/unpause")
color: "white"
font.pixelSize: 24
}
- MouseArea {
- anchors.fill: parent
+
+ TapHandler {
acceptedButtons: Qt.LeftButton | Qt.RightButton
- onClicked: (mouse) => {
- if (mouse.button == Qt.LeftButton)
+ onTapped: function (event, mouseButton)
+ {
+ if (mouseButton === Qt.LeftButton)
particles.running = !particles.running
else
particles.paused = !particles.paused;
diff --git a/examples/quick/pointerhandlers/CMakeLists.txt b/examples/quick/pointerhandlers/CMakeLists.txt
index d0fdd89eae..a8b3cbe3d0 100644
--- a/examples/quick/pointerhandlers/CMakeLists.txt
+++ b/examples/quick/pointerhandlers/CMakeLists.txt
@@ -1,39 +1,33 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(pointerhandlers LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/pointerhandlers")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick Svg)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../shared" "shared")
qt_add_executable(pointerhandlersexample WIN32 MACOSX_BUNDLE main.cpp)
target_link_libraries(pointerhandlersexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
- Qt::Svg
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+ Qt6::Svg
)
add_dependencies(pointerhandlersexample pointerhandlers_shared)
qt_add_qml_module(pointerhandlersexample
URI pointerhandlers
- AUTO_RESOURCE_PREFIX
QML_FILES
"components/Button.qml"
"components/CheckBox.qml"
+ "components/CorkPanel.qml"
"components/FakeFlickable.qml"
"components/FlashAnimation.qml"
"components/LeftDrawer.qml"
@@ -43,12 +37,14 @@ qt_add_qml_module(pointerhandlersexample
"components/ScrollBar.qml"
"components/Slider.qml"
"components/TouchpointFeedbackSprite.qml"
+ "corkboards.qml"
"fakeFlickable.qml"
"flingAnimation.qml"
"joystick.qml"
"map.qml"
"mixer.qml"
"multibuttons.qml"
+ "multiflame.qml"
"pieMenu.qml"
"pinchHandler.qml"
"pointerhandlers.qml"
@@ -58,6 +54,7 @@ qt_add_qml_module(pointerhandlersexample
"tapHandler.qml"
RESOURCES
"components/images/checkmark.png"
+ "components/images/cork.jpg"
"components/images/fingersprite.png"
"components/images/mixer-knob.png"
"components/images/mouse.png"
@@ -65,8 +62,11 @@ qt_add_qml_module(pointerhandlersexample
"components/images/mouse_middle.png"
"components/images/mouse_right.png"
"components/images/mouse_wheel_ridges.png"
+ "components/images/note-yellow.png"
+ "components/images/tack.png"
"images/arrowhead.png"
"images/balloon.png"
+ "images/blur-circle.png"
"images/cursor-airbrush.png"
"images/cursor-eraser.png"
"images/cursor-felt-marker.png"
@@ -80,9 +80,16 @@ qt_add_qml_module(pointerhandlersexample
)
install(TARGETS pointerhandlersexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(pointerhandlersexample)
+qt_generate_deploy_qml_app_script(
+ TARGET pointerhandlersexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/pointerhandlers/components/CorkPanel.qml b/examples/quick/pointerhandlers/components/CorkPanel.qml
new file mode 100644
index 0000000000..4aec2b5c7c
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/CorkPanel.qml
@@ -0,0 +1,118 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Image {
+ id: corkPanel
+ source: Qt.resolvedUrl("images/cork.jpg")
+ width: ListView.view.width
+ height: ListView.view.height
+ fillMode: Image.PreserveAspectCrop
+
+ required property string name
+ required property var notes
+
+ TapHandler {
+ objectName: corkPanel.name
+ onTapped: corkPanel.Window.activeFocusItem.focus = false
+ }
+
+ Text {
+ text: corkPanel.name
+ x: 15
+ y: 8
+ height: 40
+ width: 370
+ font.pixelSize: 18
+ font.bold: true
+ color: "white"
+ style: Text.Outline
+ styleColor: "black"
+ wrapMode: Text.Wrap
+ }
+
+ Repeater {
+ model: corkPanel.notes
+ Item {
+ id: fulcrum
+
+ x: 100 + Math.random() * (corkPanel.width - 0.5 * paper.width)
+ y: 50 + Math.random() * (corkPanel.height - 0.5 * paper.height)
+
+ Item {
+ id: note
+ scale: 0.7
+
+ Image {
+ id: paper
+ x: 8 + -width * 0.6 / 2
+ y: -20
+ source: "images/note-yellow.png"
+ scale: 0.6
+ transformOrigin: Item.TopLeft
+ antialiasing: true
+
+ DragHandler {
+ target: fulcrum
+ xAxis.minimum: 100
+ xAxis.maximum: corkPanel.width - 80
+ yAxis.minimum: 0
+ yAxis.maximum: corkPanel.height - 80
+ }
+ }
+
+ TextEdit {
+ id: text
+ x: -104
+ y: 36
+ width: 215
+ height: 24
+ font.pixelSize: 24
+ readOnly: false
+ selectByMouse: activeFocus
+ rotation: -8
+ text: noteText
+ wrapMode: Text.Wrap
+ }
+
+ rotation: -flickable.horizontalVelocity / 100
+ Behavior on rotation {
+ SpringAnimation {
+ spring: 2.0
+ damping: 0.15
+ }
+ }
+ }
+
+ Image {
+ x: -width / 2
+ y: -height * 0.5 / 2
+ source: "images/tack.png"
+ scale: 0.7
+ transformOrigin: Item.TopLeft
+ }
+
+ states: State {
+ name: "pressed"
+ when: text.activeFocus
+ PropertyChanges {
+ target: note
+ rotation: 8
+ scale: 1
+ }
+ PropertyChanges {
+ target: fulcrum
+ z: 8
+ }
+ }
+
+ transitions: Transition {
+ NumberAnimation {
+ properties: "rotation,scale"
+ duration: 200
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/components/FlashAnimation.qml b/examples/quick/pointerhandlers/components/FlashAnimation.qml
index e369282470..bdbcaecdfa 100644
--- a/examples/quick/pointerhandlers/components/FlashAnimation.qml
+++ b/examples/quick/pointerhandlers/components/FlashAnimation.qml
@@ -6,15 +6,9 @@ import QtQuick
SequentialAnimation {
id: tapFlash
running: false
+ loops: 3
PropertyAction { value: false }
PauseAnimation { duration: 100 }
PropertyAction { value: true }
PauseAnimation { duration: 100 }
- PropertyAction { value: false }
- PauseAnimation { duration: 100 }
- PropertyAction { value: true }
- PauseAnimation { duration: 100 }
- PropertyAction { value: false }
- PauseAnimation { duration: 100 }
- PropertyAction { value: true }
}
diff --git a/examples/quick/pointerhandlers/components/MouseFeedbackSprite.qml b/examples/quick/pointerhandlers/components/MouseFeedbackSprite.qml
index 1de4de8e48..57c58d826f 100644
--- a/examples/quick/pointerhandlers/components/MouseFeedbackSprite.qml
+++ b/examples/quick/pointerhandlers/components/MouseFeedbackSprite.qml
@@ -10,22 +10,27 @@ HoverHandler {
target: Image {
objectName: "mouse sprite"
source: "images/mouse.png"
- opacity: (handler.point.pressedButtons || wheelAnimationTimer.running) ? 1 : 0
+ opacity: (phandler.point.pressedButtons || wheelAnimationTimer.running) ? 1 : 0
x: handler.point.position.x - width / 2
y: handler.point.position.y - height / 2
parent: handler.parent
Image {
source: "images/mouse_left.png"
- visible: handler.point.pressedButtons & Qt.LeftButton
+ visible: phandler.point.pressedButtons & Qt.LeftButton
}
Image {
source: "images/mouse_middle.png"
- visible: handler.point.pressedButtons & Qt.MiddleButton
+ visible: phandler.point.pressedButtons & Qt.MiddleButton
}
Image {
source: "images/mouse_right.png"
- visible: handler.point.pressedButtons & Qt.RightButton
+ visible: phandler.point.pressedButtons & Qt.RightButton
}
+ PointHandler {
+ id: phandler
+ acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
+ }
+
WheelHandler {
blocking: false
onWheel: (event)=> {
diff --git a/examples/quick/pointerhandlers/components/QuadPieMenu.qml b/examples/quick/pointerhandlers/components/QuadPieMenu.qml
index 9c2364fea2..eae268eccb 100644
--- a/examples/quick/pointerhandlers/components/QuadPieMenu.qml
+++ b/examples/quick/pointerhandlers/components/QuadPieMenu.qml
@@ -9,6 +9,7 @@ TapHandler {
signal triggered(string text)
id: menuTap
+ acceptedButtons: Qt.RightButton
gesturePolicy: TapHandler.DragWithinBounds
onPressedChanged: if (pressed) {
impl.x = point.position.x - impl.width / 2
@@ -22,7 +23,10 @@ TapHandler {
parent: menuTap.parent
width: 100
height: 100
- scale: Math.min(1, Math.max(0, menuTap.timeHeld * 4))
+ // with touchscreen or stylus, long-press slowly expands the menu to size
+ // with mouse or touchpad right-click, it opens instantly
+ scale: menuTap.point.device.pointerType === PointerDevice.Generic ?
+ 1 : Math.min(1, Math.max(0, menuTap.timeHeld * 4))
opacity: scale * 2
visible: menuTap.pressed
property Shape highlightedShape: null
@@ -35,6 +39,7 @@ TapHandler {
width: 100
height: 100
containsMode: Shape.FillContains
+ preferredRendererType: Shape.CurveRenderer
property bool highlighted: menuTap.pressed &&
shape.contains(shape.mapFromItem(menuTap.parent, menuTap.point.position))
diff --git a/examples/quick/pointerhandlers/components/ScrollBar.qml b/examples/quick/pointerhandlers/components/ScrollBar.qml
index d78ee56140..6b13c03305 100644
--- a/examples/quick/pointerhandlers/components/ScrollBar.qml
+++ b/examples/quick/pointerhandlers/components/ScrollBar.qml
@@ -70,7 +70,7 @@ Rectangle {
PropertyChanges {
knob {
max: root.width - knob.width
- scrolledX: Math.min(max, Math.max(0, max * flick.contentX / (flick.width - flick.contentWidth)))
+ scrolledX: Math.min(knob.max, Math.max(0, knob.max * flick.contentX / (flick.width - flick.contentWidth)))
scrolledY: 1
scrollDistance: flick.width - flick.contentWidth
width: flick.width * (flick.width / flick.contentWidth) - (height - anchors.margins) * 2
@@ -91,7 +91,7 @@ Rectangle {
knob {
max: root.height - knob.height
scrolledX: 1
- scrolledY: Math.min(max, Math.max(0, max * flick.contentY / (flick.height - flick.contentHeight)))
+ scrolledY: Math.min(knob.max, Math.max(0, knob.max * flick.contentY / (flick.height - flick.contentHeight)))
scrollDistance: flick.height - flick.contentHeight
width: root.width - 2
height: root.width - 2
diff --git a/examples/quick/touchinteraction/flickable/cork.jpg b/examples/quick/pointerhandlers/components/images/cork.jpg
index 160bc002bf..160bc002bf 100644
--- a/examples/quick/touchinteraction/flickable/cork.jpg
+++ b/examples/quick/pointerhandlers/components/images/cork.jpg
Binary files differ
diff --git a/examples/quick/touchinteraction/flickable/note-yellow.png b/examples/quick/pointerhandlers/components/images/note-yellow.png
index 3195952ad2..3195952ad2 100644
--- a/examples/quick/touchinteraction/flickable/note-yellow.png
+++ b/examples/quick/pointerhandlers/components/images/note-yellow.png
Binary files differ
diff --git a/examples/quick/touchinteraction/flickable/tack.png b/examples/quick/pointerhandlers/components/images/tack.png
index cef2d1cd23..cef2d1cd23 100644
--- a/examples/quick/touchinteraction/flickable/tack.png
+++ b/examples/quick/pointerhandlers/components/images/tack.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/corkboards.qml b/examples/quick/pointerhandlers/corkboards.qml
new file mode 100644
index 0000000000..76928f1b8c
--- /dev/null
+++ b/examples/quick/pointerhandlers/corkboards.qml
@@ -0,0 +1,51 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import "components"
+
+Rectangle {
+ width: 320; height: 480
+ color: "#464646"
+
+ ListModel {
+ id: list
+
+ ListElement {
+ name: "Panel One"
+ notes: [
+ ListElement { noteText: "Tap to edit" },
+ ListElement { noteText: "Drag to move" },
+ ListElement { noteText: "Flick to scroll" }
+ ]
+ }
+
+ ListElement {
+ name: "Panel Two"
+ notes: [
+ ListElement { noteText: "Note One" },
+ ListElement { noteText: "Note Two" }
+ ]
+ }
+
+ ListElement {
+ name: "Panel Three"
+ notes: [
+ ListElement { noteText: "Note Three" }
+ ]
+ }
+ }
+
+ ListView {
+ id: flickable
+
+ anchors.fill: parent
+ focus: true
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ orientation: ListView.Horizontal
+ snapMode: ListView.SnapOneItem
+ model: list
+ delegate: CorkPanel { objectName: name }
+ }
+}
+
diff --git a/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-fakeflickable.jpg b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-fakeflickable.jpg
new file mode 100644
index 0000000000..5149665a07
--- /dev/null
+++ b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-fakeflickable.jpg
Binary files differ
diff --git a/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-fling.webp b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-fling.webp
new file mode 100644
index 0000000000..4b8794971e
--- /dev/null
+++ b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-fling.webp
Binary files differ
diff --git a/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-joystick.jpg b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-joystick.jpg
new file mode 100644
index 0000000000..c9d167b1e7
--- /dev/null
+++ b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-joystick.jpg
Binary files differ
diff --git a/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-map.webp b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-map.webp
new file mode 100644
index 0000000000..b96b0cf90a
--- /dev/null
+++ b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-map.webp
Binary files differ
diff --git a/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-mixer.webp b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-mixer.webp
new file mode 100644
index 0000000000..f263458d12
--- /dev/null
+++ b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-mixer.webp
Binary files differ
diff --git a/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-multibutton.webp b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-multibutton.webp
new file mode 100644
index 0000000000..1d13805c64
--- /dev/null
+++ b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-multibutton.webp
Binary files differ
diff --git a/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-piemenu.webp b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-piemenu.webp
new file mode 100644
index 0000000000..cc5ca5d394
--- /dev/null
+++ b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-piemenu.webp
Binary files differ
diff --git a/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-pinchhandler.webp b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-pinchhandler.webp
new file mode 100644
index 0000000000..89f61251ab
--- /dev/null
+++ b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-pinchhandler.webp
Binary files differ
diff --git a/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-pointhandler.webp b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-pointhandler.webp
new file mode 100644
index 0000000000..1a0ac33d0c
--- /dev/null
+++ b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-pointhandler.webp
Binary files differ
diff --git a/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-taphandler.webp b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-taphandler.webp
new file mode 100644
index 0000000000..162e97ea15
--- /dev/null
+++ b/examples/quick/pointerhandlers/doc/images/pointerhandlers-example-taphandler.webp
Binary files differ
diff --git a/examples/quick/pointerhandlers/doc/src/pointerhandlers.qdoc b/examples/quick/pointerhandlers/doc/src/pointerhandlers.qdoc
new file mode 100644
index 0000000000..d9f2e5f1cc
--- /dev/null
+++ b/examples/quick/pointerhandlers/doc/src/pointerhandlers.qdoc
@@ -0,0 +1,171 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example pointerhandlers
+ \title Qt Quick Examples - Pointer Handlers
+ \ingroup qtquickexamples
+ \examplecategory {User Interface Components}
+ \meta tags {quick, input handlers}
+ \brief Shows how to use \l {Qt Quick Input Handlers} in interactive components.
+
+ \l {Qt Quick Controls} contains pre-built components that are sufficient
+ for many kinds of user interfaces; but you may sometimes find a need to
+ write such components "from scratch". In that case, you will need to make
+ substantial use of Pointer Handlers. This is a collection of small examples
+ that show how to implement some common and less-common interaction patterns.
+
+ If you build the example as an executable, you can choose pages from a
+ top-level ListView. The \c TouchpointFeedbackSprite and \c MouseFeedbackSprite
+ components show how to use PointHandler to provide feedback about what the
+ user is doing with the pointing devices: these components are always
+ visible throughout the example, and do not interfere with interaction
+ anywhere else. These components are handy for reuse if you ever need to do
+ a video or live demonstration of a user interface.
+
+ Alternatively, some of the individual QML files can be run on the command
+ line with the \l {QML Runtime Tool}{qml tool}, as a quick reminder to see
+ how a particular kind of component can be built.
+
+ \section1 TapHandler
+
+ \image pointerhandlers-example-taphandler.webp
+
+ The "tap" page shows how to detect touchscreen taps, long-presses, and
+ mouse clicks with different buttons. You can also try out the different
+ \l {TapHandler::}{gesturePolicy} values.
+
+ \section2 Multi-tap Buttons
+
+ On this page are three custom \c Button components, with different
+ \l {TapHandler::}{gesturePolicy} values: one button requires you
+ to keep your finger or mouse within the button during the whole time
+ from press to release; one will execute even if you drag outside
+ the button and then drag back in before releasing; and one will
+ exit its pressed state if you drag a little past the
+ \l {QStyleHints::startDragDistance}{system-wide drag threshold}.
+ If you try this example on a touchscreen, you should be able to interact
+ with all three buttons at the same time with different fingers.
+
+ \image pointerhandlers-example-multibutton.webp
+
+ \section2 Pie Menu
+
+ This page shows how to write a touchscreen-friendly pie menu that animates
+ into view when activated by a long-press. You can select a menu item by
+ dragging from the center position onto one of the sectors and releasing. If
+ you drag outside the menu, or release in the middle of the menu, nothing is
+ selected. If you drag outside the grey viewport, the menu is cancelled.
+
+ \image pointerhandlers-example-piemenu.webp
+
+ \section1 PointHandler
+
+ On the "single point handler" page, PointHandler provides feedback from
+ some of the properties that can be found in \l SinglePointHandler::point
+ and \l handlerPoint::device. If you have built the example as
+ an executable, you will see this feedback at the same time as the feedback
+ from the PointHandlers in the main pointerhandlers.qml file.
+
+ \image pointerhandlers-example-pointhandler.webp
+
+ The "tablet canvas" page uses PointHandler to uniquely detect different
+ \l {QPointingDevice::PointerType}{types of pointing devices}, so that if
+ you have a drawing tablet connected to your computer, you can draw on the
+ Canvas item with different types of stylus: pen, airbrush or marker. You
+ can "erase" strokes with the stylus eraser (done here by drawing on top
+ with the background color). Several \l {HoverHandler}{HoverHandlers}
+ provide feedback about which type of stylus or eraser is detected.
+
+ \section1 HoverHandler
+
+ The "hover sidebar" page shows how to detect when the mouse is hovering a
+ button component and its container at the same time. The propagation can be
+ disabled by setting the \l HoverHandler::blocking property. You can try out
+ all combinations of HoverHandler and MouseArea here, to compare how they
+ handle hover detection. And one more HoverHandler is used to show the
+ current mouse position in scene coordinates.
+
+ You can also verify that the HoverHandler on the animated "platform"
+ is hovered whenever it slides under the mouse cursor.
+
+ \section1 DragHandler
+
+ The "joystick" page simply has a \l DragHandler dragging an \l Image.
+ A \l State with \l AnchorChanges unlocks the \l anchors so that dragging is
+ possible; and an \l AnchorAnimation animates the knob's return to the
+ center position when released.
+
+ \image pointerhandlers-example-joystick.jpg
+
+ The "fling animation" page demonstrates one use of the
+ DragHandler::centroid::velocity property, which simply makes the value from
+ QEventPoint::velocity() available in QML. The \c MomentumAnimation component
+ that is used in this example shows one way to simulate phyics (momentum and
+ friction) without resorting to heavier solutions.
+
+ \image pointerhandlers-example-fling.webp
+
+ \section1 PinchHandler
+
+ The "pinch" page demonstrates multiple PinchHandlers: some require two
+ fingers and some require three, to perform the usual scaling, rotation and
+ translation, with constraints managed via PinchHandler's axis min and max
+ properties. One of the PinchHandler instances is used to manipulate
+ different \l Rectangle properties rather than position, scale and rotation.
+ Various PinchHandler properties are bound in various ways. You should be
+ able to manipulate each instance uniquely. Some items also have
+ DragHandlers and TapHandlers.
+
+ \image pointerhandlers-example-pinchhandler.webp
+
+ \section1 Interoperability
+
+ \section2 Sliders
+
+ The "mixer" page demonstrates the use of multiple handlers inside a
+ ListView delegate. You can interact with multiple \c Slider components
+ simultaneously, and you can flick the ListView sideways.
+
+ \list
+ \li A DragHandler allows you to start dragging anywhere along the "track"
+ where the slider knob can slide. Because the default \l{DragHandler::}{snapMode}
+ is \c DragHandler.SnapAuto, the knob will \e snap into a position centered
+ under the mouse or touchpoint after you have dragged past the
+ \l {QStyleHints::startDragDistance}{system-wide drag threshold}.
+
+ \li A WheelHandler directly adjusts the \c y property of the knob \l Image.
+
+ \li A BoundaryRule prevents either the DragHandler or the WheelHandler from
+ dragging the knob too far.
+
+ \li A TapHandler provides one more gesture than a typical \c Slider component
+ would have: you can tap on the knob.
+ \endlist
+
+ \image pointerhandlers-example-mixer.webp
+
+ \section2 Map
+
+ The "map" page demonstrates dragging, transformation and re-scaling an
+ \l {Qt SVG}{SVG} \l Image. You should be able to zoom into a particular
+ location on the map; and if the zoom level is changed substantially,
+ \l Image::sourceSize is changed to request the SVG to be re-rendered at a
+ different resolution. Dragging vertically with two fingers activates a
+ DragHandler that manipulates a \l Rotation transform to tilt the map.
+
+ \image pointerhandlers-example-map.webp
+
+ \section2 Fake Flickable
+
+ The "fake Flickable" page contains an attempt to reproduce much of the
+ functionality of \l Flickable using discrete pointer handlers and
+ animations. Flickable is a complex component, but here you can see one way
+ of separating the individual behaviors that it provides, in case you would
+ like to have only part of the functionality without the complexity.
+
+ There's also a slide-out "drawer" component holding a few more
+ pointer-handler-powered controls.
+
+ \image pointerhandlers-example-fakeflickable.jpg
+*/
diff --git a/examples/quick/touchinteraction/multipointtouch/blur-circle.png b/examples/quick/pointerhandlers/images/blur-circle.png
index 1b03cd0b2c..1b03cd0b2c 100644
--- a/examples/quick/touchinteraction/multipointtouch/blur-circle.png
+++ b/examples/quick/pointerhandlers/images/blur-circle.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/multiflame.qml b/examples/quick/pointerhandlers/multiflame.qml
new file mode 100644
index 0000000000..7793e52ad6
--- /dev/null
+++ b/examples/quick/pointerhandlers/multiflame.qml
@@ -0,0 +1,69 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ id: root
+ width: 360
+ height: 480
+ color: "black"
+
+ component ColoredEmitter: Emitter {
+ id: emitter
+ property string color
+ group: color
+ velocityFromMovement: 10
+ emitRate: 80
+ lifeSpan: 1500
+ velocity: PointDirection {
+ y: -90
+ yVariation: 50
+ }
+ acceleration: PointDirection {
+ xVariation: 100
+ yVariation: 90
+ }
+ size: 51
+ sizeVariation: 53
+ endSize: 64
+ enabled: handler.active
+ x: handler.point.position.x
+ y: handler.point.position.y
+
+ PointHandler {
+ id: handler
+ parent: root
+ }
+
+ ImageParticle {
+ id: img
+ groups: [emitter.color]
+ source: "images/blur-circle.png"
+ colorVariation: 0.1
+ color: emitter.color
+ alpha: 0
+ system: sys
+ }
+ }
+
+ ParticleSystem {
+ id: sys
+ ColoredEmitter {
+ color: "indianred"
+ }
+ ColoredEmitter {
+ color: "greenyellow"
+ }
+ ColoredEmitter {
+ color: "yellow"
+ }
+ ColoredEmitter {
+ color: "darkorange"
+ }
+ ColoredEmitter {
+ color: "violet"
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/pointerhandlers.qml b/examples/quick/pointerhandlers/pointerhandlers.qml
index f063853793..049182fa8a 100644
--- a/examples/quick/pointerhandlers/pointerhandlers.qml
+++ b/examples/quick/pointerhandlers/pointerhandlers.qml
@@ -20,12 +20,14 @@ Rectangle {
addExample("multibuttons", "TapHandler: gesturePolicy (99 red balloons)", Qt.resolvedUrl("multibuttons.qml"))
addExample("pieMenu", "TapHandler: pie menu", Qt.resolvedUrl("pieMenu.qml"))
addExample("single point handler", "PointHandler: properties such as seat, device, modifiers, velocity, pressure", Qt.resolvedUrl("singlePointHandlerProperties.qml"))
+ addExample("multiflame", "PointHandler: particle flames around touchpoints", Qt.resolvedUrl("multiflame.qml"))
addExample("hover sidebar", "HoverHandler: a hierarchy of items sharing the hover state", Qt.resolvedUrl("sidebar.qml"))
addExample("joystick", "DragHandler: move one item inside another with any pointing device", Qt.resolvedUrl("joystick.qml"))
addExample("mixer", "DragHandler: drag multiple sliders with multiple fingers", Qt.resolvedUrl("mixer.qml"))
addExample("fling animation", "DragHandler: after dragging, use an animation to simulate momentum", Qt.resolvedUrl("flingAnimation.qml"))
addExample("pinch", "PinchHandler: scale, rotate and drag", Qt.resolvedUrl("pinchHandler.qml"))
addExample("map", "scale, pan, re-render at different resolutions", Qt.resolvedUrl("map.qml"))
+ addExample("corkboards", "editable, movable sticky notes in a ListView", Qt.resolvedUrl("corkboards.qml"))
addExample("fake Flickable", "implementation of a simplified Flickable using only Items, DragHandler and MomentumAnimation", Qt.resolvedUrl("fakeFlickable.qml"))
addExample("tablet canvas", "PointHandler and HoverHandler with a tablet: detect the stylus, and draw", Qt.resolvedUrl("tabletCanvasDrawing.qml"))
}
@@ -40,7 +42,7 @@ Rectangle {
model: 10
delegate: TouchpointFeedbackSprite { parent: glassPane }
}
-
- MouseFeedbackSprite { }
}
+
+ MouseFeedbackSprite { }
}
diff --git a/examples/quick/pointerhandlers/qml.qrc b/examples/quick/pointerhandlers/qml.qrc
index e9a39bc50c..237eb8eae0 100644
--- a/examples/quick/pointerhandlers/qml.qrc
+++ b/examples/quick/pointerhandlers/qml.qrc
@@ -1,11 +1,13 @@
<RCC>
- <qresource prefix="/pointerhandlers">
+ <qresource prefix="/qt/qml/pointerhandlers">
+ <file>corkboards.qml</file>
<file>flingAnimation.qml</file>
<file>fakeFlickable.qml</file>
<file>joystick.qml</file>
<file>map.qml</file>
<file>mixer.qml</file>
<file>multibuttons.qml</file>
+ <file>multiflame.qml</file>
<file>pieMenu.qml</file>
<file>pinchHandler.qml</file>
<file>pointerhandlers.qml</file>
@@ -15,6 +17,7 @@
<file>tapHandler.qml</file>
<file>components/Button.qml</file>
<file>components/CheckBox.qml</file>
+ <file>components/CorkPanel.qml</file>
<file>components/FakeFlickable.qml</file>
<file>components/FlashAnimation.qml</file>
<file>components/LeftDrawer.qml</file>
@@ -27,6 +30,10 @@
<file>images/arrowhead.png</file>
<file>images/balloon.png</file>
<file>components/images/checkmark.png</file>
+ <file>components/images/cork.jpg</file>
+ <file>components/images/note-yellow.png</file>
+ <file>components/images/tack.png</file>
+ <file>images/blur-circle.png</file>
<file>images/cursor-airbrush.png</file>
<file>images/cursor-eraser.png</file>
<file>images/cursor-felt-marker.png</file>
diff --git a/examples/quick/pointerhandlers/tapHandler.qml b/examples/quick/pointerhandlers/tapHandler.qml
index 178c067ce0..5891491695 100644
--- a/examples/quick/pointerhandlers/tapHandler.qml
+++ b/examples/quick/pointerhandlers/tapHandler.qml
@@ -6,20 +6,22 @@ import QtQuick.Layouts
import "components"
Item {
- width: 800
+ width: 1024
height: 480
Rectangle {
id: rect
anchors.fill: parent; anchors.margins: 40; anchors.topMargin: 60
- border.width: 3; border.color: "transparent"
- color: handler.pressed ? "lightsteelblue" : "darkgrey"
+ border.width: 4; border.color: "transparent"
+ color: handler.pressed ? "lightsteelblue" : "aliceblue"
TapHandler {
id: handler
acceptedButtons: (leftAllowedCB.checked ? Qt.LeftButton : Qt.NoButton) |
(middleAllowedCB.checked ? Qt.MiddleButton : Qt.NoButton) |
(rightAllowedCB.checked ? Qt.RightButton : Qt.NoButton)
+ exclusiveSignals: (singleExclusiveCB.checked ? TapHandler.SingleTap : TapHandler.NotExclusive) |
+ (doubleExclusiveCB.checked ? TapHandler.DoubleTap : TapHandler.NotExclusive)
gesturePolicy: (policyDragThresholdCB.checked ? TapHandler.DragThreshold :
policyWithinBoundsCB.checked ? TapHandler.WithinBounds :
policyDragWithinBoundsCB.checked ? TapHandler.DragWithinBounds :
@@ -30,6 +32,16 @@ Item {
borderBlink.blinkColor = "red"
borderBlink.start()
}
+ onSingleTapped: function(point, button) {
+ console.log("single-tapped button " + button + " @ " + point.scenePosition)
+ rect.border.width = 4
+ borderBlink.tapFeedback(button)
+ }
+ onDoubleTapped: function(point, button) {
+ console.log("double-tapped button " + button + " @ " + point.scenePosition)
+ rect.border.width = 12
+ borderBlink.tapFeedback(button)
+ }
onTapped: function(point, button) {
console.log("tapped button " + button + " @ " + point.scenePosition +
" on device '" + point.device.name + "' with modifiers " + handler.point.modifiers +
@@ -37,8 +49,6 @@ Item {
if (tapCount > 1) {
tapCountLabel.text = tapCount
flashAnimation.start()
- } else {
- borderBlink.tapFeedback(button)
}
}
onLongPressed: longPressFeedback.createObject(rect,
@@ -97,10 +107,10 @@ Item {
id: borderBlink
property color blinkColor: "red"
function tapFeedback(button) {
+ stop();
blinkColor = buttonToBlinkColor(button);
start();
}
- loops: 3
ScriptAction { script: rect.border.color = borderBlink.blinkColor }
PauseAnimation { duration: 100 }
ScriptAction { script: rect.border.color = "transparent" }
@@ -145,6 +155,18 @@ Item {
}
Text {
+ text: "exclusive signals:"
+ }
+ CheckBox {
+ id: singleExclusiveCB
+ text: "single"
+ }
+ CheckBox {
+ id: doubleExclusiveCB
+ text: "double"
+ }
+
+ Text {
text: "gesture policy:"
horizontalAlignment: Text.AlignRight
Layout.row: 1
diff --git a/examples/quick/positioners/CMakeLists.txt b/examples/quick/positioners/CMakeLists.txt
index 213173557e..64f5cae495 100644
--- a/examples/quick/positioners/CMakeLists.txt
+++ b/examples/quick/positioners/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(positioners LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/positioners")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../shared" "shared")
@@ -24,7 +18,6 @@ qt_add_executable(positionersexample
qt_add_qml_module(positionersexample
URI positioners
- AUTO_RESOURCE_PREFIX
QML_FILES
"positioners-attachedproperties.qml"
"positioners-transitions.qml"
@@ -32,16 +25,23 @@ qt_add_qml_module(positionersexample
)
target_link_libraries(positionersexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS positionersexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(positionersexample)
+qt_generate_deploy_qml_app_script(
+ TARGET positionersexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/positioners/doc/src/positioners.qdoc b/examples/quick/positioners/doc/src/positioners.qdoc
index 3fe8e4ef7e..2b1af4d496 100644
--- a/examples/quick/positioners/doc/src/positioners.qdoc
+++ b/examples/quick/positioners/doc/src/positioners.qdoc
@@ -6,6 +6,7 @@
\brief This is a collection of QML Positioner examples.
\image qml-positioners-example.png
\ingroup qtquickexamples
+ \examplecategory {User Interface Components}
\e Positioners is a collection of small QML examples relating to
positioners. Each example is a small QML file emphasizing a particular type
diff --git a/examples/quick/positioners/positioners-attachedproperties.qml b/examples/quick/positioners/positioners-attachedproperties.qml
index 60aabb6b52..18cf7d866d 100644
--- a/examples/quick/positioners/positioners-attachedproperties.qml
+++ b/examples/quick/positioners/positioners-attachedproperties.qml
@@ -17,7 +17,7 @@ Rectangle {
anchors.top: parent.top
anchors.right: parent.right
anchors.margins: 10
- text: hidingRect.visible ? "Hide" : "Show"
+ text: hidingRect.visible ? qsTr("Hide") : qsTr("Show")
onClicked: hidingRect.visible = !hidingRect.visible
}
@@ -42,9 +42,9 @@ Rectangle {
anchors.left: parent.right
anchors.leftMargin: 20
anchors.verticalCenter: parent.verticalCenter
- text: "Index: " + parent.Positioner.index
- + (parent.Positioner.isFirstItem ? " (First)" : "")
- + (parent.Positioner.isLastItem ? " (Last)" : "")
+ text: qsTr("Index: %1%2%3").arg(parent.Positioner.index)
+ .arg(parent.Positioner.isFirstItem ? qsTr(" (First)") : "")
+ .arg(parent.Positioner.isLastItem ? qsTr(" (Last)") : "")
}
// When mouse is clicked, display the values of the positioner
@@ -65,9 +65,9 @@ Rectangle {
anchors.left: parent.right
anchors.leftMargin: 20
anchors.verticalCenter: parent.verticalCenter
- text: "Index: " + parent.Positioner.index
- + (parent.Positioner.isFirstItem ? " (First)" : "")
- + (parent.Positioner.isLastItem ? " (Last)" : "")
+ text: qsTr("Index: %1%2%3").arg(parent.Positioner.index)
+ .arg(parent.Positioner.isFirstItem ? qsTr(" (First)") : "")
+ .arg(parent.Positioner.isLastItem ? qsTr(" (Last)") : "")
}
// When mouse is clicked, display the values of the positioner
@@ -87,9 +87,9 @@ Rectangle {
anchors.left: parent.right
anchors.leftMargin: 20
anchors.verticalCenter: parent.verticalCenter
- text: "Index: " + parent.Positioner.index
- + (parent.Positioner.isFirstItem ? " (First)" : "")
- + (parent.Positioner.isLastItem ? " (Last)" : "")
+ text: qsTr("Index: %1%2%3").arg(parent.Positioner.index)
+ .arg(parent.Positioner.isFirstItem ? qsTr(" (First)") : "")
+ .arg(parent.Positioner.isLastItem ? qsTr(" (Last)") : "")
}
// When mouse is clicked, display the values of the positioner
@@ -111,18 +111,18 @@ Rectangle {
anchors.left: parent.right
anchors.leftMargin: 20
anchors.verticalCenter: parent.verticalCenter
- text: "Index: " + parent.Positioner.index
- + (parent.Positioner.isFirstItem ? " (First)" : "")
- + (parent.Positioner.isLastItem ? " (Last)" : "")
+ text: qsTr("Index: %1%2%3").arg(parent.Positioner.index)
+ .arg(parent.Positioner.isFirstItem ? qsTr(" (First)") : "")
+ .arg(parent.Positioner.isLastItem ? qsTr(" (Last)") : "")
}
}
// Print the index of the child item in the positioner and convenience
// properties showing if it's the first or last item.
function showInfo(positioner) {
- console.log("Item Index = " + positioner.index)
- console.log(" isFirstItem = " + positioner.isFirstItem)
- console.log(" isLastItem = " + positioner.isLastItem)
+ console.log(qsTr("Item Index = ") + positioner.index)
+ console.log(qsTr(" isFirstItem = ") + positioner.isFirstItem)
+ console.log(qsTr(" isLastItem = ") + positioner.isLastItem)
}
}
}
diff --git a/examples/quick/positioners/positioners-transitions.qml b/examples/quick/positioners/positioners-transitions.qml
index 4507080182..44eb2ea625 100644
--- a/examples/quick/positioners/positioners-transitions.qml
+++ b/examples/quick/positioners/positioners-transitions.qml
@@ -19,7 +19,7 @@ Item {
interval: 2000
running: true
repeat: true
- onTriggered: page.effectiveOpacity = (page.effectiveOpacity == 1.0 ? 0.0 : 1.0);
+ onTriggered: page.effectiveOpacity = (page.effectiveOpacity == 1.0 ? 0.0 : 1.0)
}
Column {
@@ -32,41 +32,73 @@ Item {
spacing: page.elementSpacing
populate: Transition {
- NumberAnimation { properties: "x,y"; from: 200; duration: 100; easing.type: Easing.OutBounce }
+ NumberAnimation {
+ properties: "x,y"
+ from: 200
+ duration: 100
+ easing.type: Easing.OutBounce
+ }
}
add: Transition {
- NumberAnimation { properties: "y"; easing.type: Easing.OutQuad }
+ NumberAnimation {
+ properties: "y"
+ easing.type: Easing.OutQuad
+ }
}
move: Transition {
- NumberAnimation { properties: "y"; easing.type: Easing.OutBounce }
+ NumberAnimation {
+ properties: "y"
+ easing.type: Easing.OutBounce
+ }
}
- Rectangle { color: "#80c342"; width: page.bigSize; height: page.smallSize }
+ Rectangle {
+ color: "#80c342"
+ width: page.bigSize
+ height: page.smallSize
+ }
Rectangle {
id: greenV1
+
visible: opacity != 0
- width: page.bigSize; height: page.smallSize
+ width: page.bigSize
+ height: page.smallSize
color: "#006325"
border.color: "transparent"
Behavior on opacity { NumberAnimation {} }
opacity: page.effectiveOpacity
}
- Rectangle { color: "#14aaff"; width: page.bigSize; height: page.smallSize }
+ Rectangle {
+ color: "#14aaff"
+ width: page.bigSize
+ height: page.smallSize
+ }
Rectangle {
id: greenV2
+
visible: opacity != 0
- width: page.bigSize; height: page.smallSize
+ width: page.bigSize
+ height: page.smallSize
color: "#006325"
border.color: "transparent"
Behavior on opacity { NumberAnimation {} }
opacity: page.effectiveOpacity
}
- Rectangle { color: "#6400aa"; width: page.bigSize; height: page.smallSize }
- Rectangle { color: "#80c342"; width: page.bigSize; height: page.smallSize }
+ Rectangle {
+ color: "#6400aa"
+ width: page.bigSize
+ height: page.smallSize
+ }
+
+ Rectangle {
+ color: "#80c342"
+ width: page.bigSize
+ height: page.smallSize
+ }
}
Row {
@@ -79,41 +111,73 @@ Item {
spacing: page.elementSpacing
populate: Transition {
- NumberAnimation { properties: "x,y"; from: 200; duration: 100; easing.type: Easing.OutBounce }
+ NumberAnimation {
+ properties: "x,y"
+ from: 200
+ duration: 100
+ easing.type: Easing.OutBounce
+ }
}
add: Transition {
- NumberAnimation { properties: "x"; easing.type: Easing.OutQuad }
+ NumberAnimation {
+ properties: "x"
+ easing.type: Easing.OutQuad
+ }
}
move: Transition {
- NumberAnimation { properties: "x"; easing.type: Easing.OutBounce }
+ NumberAnimation {
+ properties: "x"
+ easing.type: Easing.OutBounce
+ }
}
- Rectangle { color: "#80c342"; width: page.smallSize; height: page.bigSize }
+ Rectangle {
+ color: "#80c342"
+ width: page.smallSize
+ height: page.bigSize
+ }
Rectangle {
id: blueH1
+
visible: opacity != 0
- width: page.smallSize; height: page.bigSize
+ width: page.smallSize
+ height: page.bigSize
color: "#006325"
border.color: "transparent"
Behavior on opacity { NumberAnimation {} }
opacity: page.effectiveOpacity
}
- Rectangle { color: "#14aaff"; width: page.smallSize; height: page.bigSize }
+ Rectangle {
+ color: "#14aaff"
+ width: page.smallSize
+ height: page.bigSize
+ }
Rectangle {
id: greenH2
+
visible: opacity != 0
- width: page.smallSize; height: page.bigSize
+ width: page.smallSize
+ height: page.bigSize
color: "#006325"
border.color: "transparent"
Behavior on opacity { NumberAnimation {} }
opacity: page.effectiveOpacity
}
- Rectangle { color: "#6400aa"; width: page.smallSize; height: page.bigSize }
- Rectangle { color: "#80c342"; width: page.smallSize; height: page.bigSize }
+ Rectangle {
+ color: "#6400aa"
+ width: page.smallSize
+ height: page.bigSize
+ }
+
+ Rectangle {
+ color: "#80c342"
+ width: page.smallSize
+ height: page.bigSize
+ }
}
Grid {
@@ -124,54 +188,97 @@ Item {
spacing: page.elementSpacing
populate: Transition {
- NumberAnimation { properties: "x,y"; from: 200; duration: 100; easing.type: Easing.OutBounce }
+ NumberAnimation {
+ properties: "x,y"
+ from: 200
+ duration: 100
+ easing.type: Easing.OutBounce
+ }
}
add: Transition {
- NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce }
+ NumberAnimation {
+ properties: "x,y"
+ easing.type: Easing.OutBounce
+ }
}
move: Transition {
- NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce }
+ NumberAnimation {
+ properties: "x,y"
+ easing.type: Easing.OutBounce
+ }
}
- Rectangle { color: "#80c342"; width: page.smallSize; height: page.smallSize }
+ Rectangle {
+ color: "#80c342"
+ width: page.smallSize
+ height: page.smallSize
+ }
Rectangle {
id: greenG1
+
visible: opacity != 0
- width: page.smallSize; height: page.smallSize
+ width: page.smallSize
+ height: page.smallSize
color: "#006325"
border.color: "transparent"
Behavior on opacity { NumberAnimation {} }
opacity: page.effectiveOpacity
}
- Rectangle { color: "#14aaff"; width: page.smallSize; height: page.smallSize }
+ Rectangle {
+ color: "#14aaff"
+ width: page.smallSize
+ height: page.smallSize
+ }
Rectangle {
id: greenG2
+
visible: opacity != 0
- width: page.smallSize; height:page. smallSize
+ width: page.smallSize
+ height:page. smallSize
color: "#006325"
border.color: "transparent"
Behavior on opacity { NumberAnimation {} }
opacity: page.effectiveOpacity
}
- Rectangle { color: "#6400aa"; width: page.smallSize; height: page.smallSize }
+ Rectangle {
+ color: "#6400aa"
+ width: page.smallSize
+ height: page.smallSize
+ }
Rectangle {
id: greenG3
+
visible: opacity != 0
- width: page.smallSize; height: page.smallSize
+ width: page.smallSize
+ height: page.smallSize
color: "#006325"
border.color: "transparent"
Behavior on opacity { NumberAnimation {} }
opacity: page.effectiveOpacity
}
- Rectangle { color: "#80c342"; width: page.smallSize; height: page.smallSize }
- Rectangle { color: "#14aaff"; width: page.smallSize; height: page.smallSize }
- Rectangle { color: "#6400aa"; width: page.smallSize; height: page.smallSize }
+ Rectangle {
+ color: "#80c342"
+ width: page.smallSize
+ height: page.smallSize
+ }
+
+ Rectangle {
+ color: "#14aaff"
+ width: page.smallSize
+ height: page.smallSize
+ }
+
+ Rectangle {
+ color: "#6400aa"
+ width: page.smallSize
+ height: page.smallSize
+ }
}
Flow {
@@ -185,58 +292,91 @@ Item {
//! [move]
move: Transition {
- NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce }
+ NumberAnimation {
+ properties: "x,y"
+ easing.type: Easing.OutBounce
+ }
}
//! [move]
//! [add]
add: Transition {
- NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce }
+ NumberAnimation {
+ properties: "x,y"
+ easing.type: Easing.OutBounce
+ }
}
//! [add]
//! [populate]
populate: Transition {
- NumberAnimation { properties: "x,y"; from: 200; duration: 100; easing.type: Easing.OutBounce }
+ NumberAnimation {
+ properties: "x,y"
+ from: 200
+ duration: 100
+ easing.type: Easing.OutBounce
+ }
}
//! [populate]
- Rectangle { color: "#80c342"; width: page.smallSize; height: page.smallSize }
+ Rectangle {
+ color: "#80c342"
+ width: page.smallSize
+ height: page.smallSize
+ }
Rectangle {
id: greenF1
+
visible: opacity != 0
- width: 0.6 * page.bigSize; height: page.smallSize
+ width: 0.6 * page.bigSize
+ height: page.smallSize
color: "#006325"
border.color: "transparent"
Behavior on opacity { NumberAnimation {} }
opacity: page.effectiveOpacity
}
- Rectangle { color: "#14aaff"; width: 0.3 * page.bigSize; height: page.smallSize }
+ Rectangle {
+ color: "#14aaff"
+ width: 0.3 * page.bigSize
+ height: page.smallSize
+ }
Rectangle {
id: greenF2
+
visible: opacity != 0
- width: 0.6 * page.bigSize; height: page.smallSize
+ width: 0.6 * page.bigSize
+ height: page.smallSize
color: "#006325"
border.color: "transparent"
Behavior on opacity { NumberAnimation {} }
opacity: page.effectiveOpacity
}
- Rectangle { color: "#6400aa"; width: page.smallSize; height: page.smallSize }
+ Rectangle {
+ color: "#6400aa"
+ width: page.smallSize
+ height: page.smallSize
+ }
Rectangle {
id: greenF3
+
visible: opacity != 0
- width: 0.4 * page.bigSize; height: page.smallSize
+ width: 0.4 * page.bigSize
+ height: page.smallSize
color: "#006325"
border.color: "transparent"
Behavior on opacity { NumberAnimation {} }
opacity: page.effectiveOpacity
}
- Rectangle { color: "#80c342"; width: 0.8 * page.bigSize; height: page.smallSize }
+ Rectangle {
+ color: "#80c342"
+ width: 0.8 * page.bigSize
+ height: page.smallSize
+ }
}
}
diff --git a/examples/quick/positioners/positioners.qml b/examples/quick/positioners/positioners.qml
index 645979b598..d166135441 100644
--- a/examples/quick/positioners/positioners.qml
+++ b/examples/quick/positioners/positioners.qml
@@ -11,8 +11,8 @@ Item {
id: ll
anchors.fill: parent
Component.onCompleted: {
- addExample("Transitions", "Fluidly shows and hides elements", Qt.resolvedUrl("positioners-transitions.qml"));
- addExample("Attached Properties", "Knows where it is in the positioner", Qt.resolvedUrl("positioners-attachedproperties.qml"));
+ addExample(qsTr("Transitions"), qsTr("Fluidly shows and hides elements"), Qt.resolvedUrl("positioners-transitions.qml"))
+ addExample(qsTr("Attached Properties"), qsTr("Knows where it is in the positioner"), Qt.resolvedUrl("positioners-attachedproperties.qml"))
}
}
}
diff --git a/examples/quick/quick-accessibility/CMakeLists.txt b/examples/quick/quick-accessibility/CMakeLists.txt
index 1ddb70eef9..1501537b7b 100644
--- a/examples/quick/quick-accessibility/CMakeLists.txt
+++ b/examples/quick/quick-accessibility/CMakeLists.txt
@@ -1,20 +1,14 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(quick-accessibility LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/quick-accessibility")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(quick-accessibility
WIN32
@@ -23,15 +17,14 @@ qt_add_executable(quick-accessibility
)
target_link_libraries(quick-accessibility PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(quick-accessibility
URI accessibility
- AUTO_RESOURCE_PREFIX
QML_FILES
"accessibility.qml"
"Button.qml"
@@ -40,7 +33,16 @@ qt_add_qml_module(quick-accessibility
)
install(TARGETS quick-accessibility
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET quick-accessibility
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/quick-accessibility/doc/src/accessibility.qdoc b/examples/quick/quick-accessibility/doc/src/accessibility.qdoc
index f4b435dc47..c6951cedd1 100644
--- a/examples/quick/quick-accessibility/doc/src/accessibility.qdoc
+++ b/examples/quick/quick-accessibility/doc/src/accessibility.qdoc
@@ -5,6 +5,7 @@
\example quick-accessibility
\brief This example demonstrates the implementation of accessible buttons.
\ingroup qtquickexamples
+ \examplecategory {Graphics}
\e Accessibility demonstrates QML types that are augmented with meta-data
for accessibility systems. For more information, visit the
diff --git a/examples/quick/quick.pro b/examples/quick/quick.pro
index 159b0082a3..b9fb3b48d1 100644
--- a/examples/quick/quick.pro
+++ b/examples/quick/quick.pro
@@ -2,33 +2,30 @@ TEMPLATE = subdirs
SUBDIRS = quick-accessibility \
animation \
draganddrop \
- externaldraganddrop \
canvas \
imageelements \
keyinteraction \
layouts \
+ responsivelayouts \
localstorage \
models \
views \
tableview \
mousearea \
+ pointerhandlers \
positioners \
- righttoleft \
scenegraph \
shadereffects \
text \
- threading \
- touchinteraction \
tutorials \
customitems \
imageprovider \
imageresponseprovider \
window \
particles \
- delegatechooser \
- shapes \
itemvariablerefreshrate \
- multieffect
+ multieffect \
+ quickshapes
#OpenGL Support Required
qtConfig(opengl(es1|es2)?) {
diff --git a/examples/quick/quickshapes/CMakeLists.txt b/examples/quick/quickshapes/CMakeLists.txt
new file mode 100644
index 0000000000..e739c3dc89
--- /dev/null
+++ b/examples/quick/quickshapes/CMakeLists.txt
@@ -0,0 +1,18 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+qt_internal_add_example(shapes)
+qt_internal_add_example(weatherforecast)
+
+# qt_examples_build_end() misses at least some of these due to some
+# source subdirectories being added multiple times. See QTBUG-96159.
+set(reused_dir_targets shapes_shared weatherforecast_shared)
+
+foreach(target IN LISTS reused_dir_targets)
+ if(TARGET ${target})
+ qt_autogen_tools(${target} ENABLE_AUTOGEN_TOOLS moc rcc)
+ if(TARGET Qt6::Widgets)
+ qt_autogen_tools(${target} ENABLE_AUTOGEN_TOOLS uic)
+ endif()
+ endif()
+endforeach()
diff --git a/examples/quick/quickshapes/quickshapes.pro b/examples/quick/quickshapes/quickshapes.pro
new file mode 100644
index 0000000000..80465eb81d
--- /dev/null
+++ b/examples/quick/quickshapes/quickshapes.pro
@@ -0,0 +1,2 @@
+TEMPLATE = subdirs
+SUBDIRS = shapes weatherforecast
diff --git a/examples/quick/quickshapes/shapes/CMakeLists.txt b/examples/quick/quickshapes/shapes/CMakeLists.txt
new file mode 100644
index 0000000000..4fcb118d81
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/CMakeLists.txt
@@ -0,0 +1,73 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(shapes LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+add_subdirectory("../../shared" "shared")
+
+qt_add_executable(shapesexample
+ WIN32
+ MACOSX_BUNDLE
+ main.cpp
+)
+
+target_link_libraries(shapesexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+add_dependencies(shapesexample shapes_shared)
+
+qt_add_qml_module(shapesexample
+ URI shapes
+ QML_FILES
+ "clippedtigers.qml"
+ "interactive.qml"
+ "cubicCurve.qml"
+ "ellipticalArcs.qml"
+ "gradientSpreadModes.qml"
+ "arcDirection.qml"
+ "largeOrSmallArc.qml"
+ "arcRotation.qml"
+ "tigerLoader.qml"
+ "text.qml"
+ "strokeOrFill.qml"
+ "dashPattern.qml"
+ "linearGradient.qml"
+ "radialGradient.qml"
+ "fillRules.qml"
+ "joinStyles.qml"
+ "capStyles.qml"
+ "quadraticCurve.qml"
+ "main.qml"
+ "sampling.qml"
+ "shapegallery.qml"
+ "tapableTriangle.qml"
+ "tiger.qml"
+ "zoomtiger.qml"
+ "fillTransform.qml"
+ "rectangle.qml"
+ "fillItem.qml"
+)
+
+install(TARGETS shapesexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET shapesexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/quickshapes/shapes/arcDirection.qml b/examples/quick/quickshapes/shapes/arcDirection.qml
new file mode 100644
index 0000000000..60ec181380
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/arcDirection.qml
@@ -0,0 +1,59 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+
+ Rectangle {
+ width: 100
+ height: 100
+ anchors.centerIn: parent
+ border.color: "gray"
+
+ Repeater {
+ model: 2
+ delegate: Shape {
+ id: delegate
+
+ required property int index
+
+ anchors.fill: parent
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: delegate.index === 0 ? "red" : "blue"
+ strokeStyle: ShapePath.DashLine
+ strokeWidth: 4
+
+ startX: 4
+ startY: 4
+ PathArc {
+ id: arc
+ x: 96
+ y: 96
+ radiusX: 100
+ radiusY: 100
+ direction: delegate.index === 0 ? PathArc.Clockwise : PathArc.Counterclockwise
+ }
+ }
+ }
+ }
+ }
+
+ Column {
+ anchors.right: parent.right
+ Text {
+ text: qsTr("Clockwise (sweep 1)")
+ color: "red"
+ }
+ Text {
+ text: qsTr("Counter clockwise (sweep 0)")
+ color: "blue"
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/arcRotation.qml b/examples/quick/quickshapes/shapes/arcRotation.qml
new file mode 100644
index 0000000000..2433280698
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/arcRotation.qml
@@ -0,0 +1,82 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+
+ Repeater {
+ model: 2
+ delegate: Shape {
+ id: delegate1
+
+ required property int index
+
+ width: 200
+ height: 200
+ anchors.centerIn: parent
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: delegate1.index === 0 ? "red" : "blue"
+ strokeStyle: ShapePath.DashLine
+ strokeWidth: 4
+
+ startX: 50
+ startY: 100
+ PathArc {
+ x: 150
+ y: 100
+ radiusX: 50
+ radiusY: 20
+ xAxisRotation: delegate1.index === 0 ? 0 : 45
+ }
+ }
+ }
+ }
+
+ Repeater {
+ model: 2
+ delegate: Shape {
+ id: delegate2
+
+ required property int index
+
+ width: 200
+ height: 200
+ anchors.centerIn: parent
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: delegate2.index === 0 ? "red" : "blue"
+
+ startX: 50
+ startY: 100
+ PathArc {
+ x: 150
+ y: 100
+ radiusX: 50
+ radiusY: 20
+ xAxisRotation: delegate2.index === 0 ? 0 : 45
+ direction: PathArc.Counterclockwise
+ }
+ }
+ }
+ }
+
+ Column {
+ anchors.right: parent.right
+ Text {
+ text: qsTr("0 degrees")
+ color: "red"
+ }
+ Text {
+ text: qsTr("45 degrees")
+ color: "blue"
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/capStyles.qml b/examples/quick/quickshapes/shapes/capStyles.qml
new file mode 100644
index 0000000000..7fc7a4e2b9
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/capStyles.qml
@@ -0,0 +1,62 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+
+ Shape {
+ anchors.centerIn: parent
+ width: 200
+ height: 100
+
+ ShapePath {
+ id: capTest
+ strokeColor: "green"
+ strokeWidth: 20
+ fillColor: "transparent"
+
+ property int capStyleIdx: 0
+ readonly property variant styles: [ ShapePath.FlatCap, ShapePath.SquareCap, ShapePath.RoundCap ]
+ readonly property variant styleTexts: [ qsTr("FlatCap"), qsTr("SquareCap"), qsTr("RoundCap") ]
+
+ capStyle: styles[capStyleIdx]
+
+ startX: 40
+ startY: 30
+ PathQuad {
+ x: 50
+ y: 80
+ controlX: 0
+ controlY: 80
+ }
+ PathLine {
+ x: 150
+ y: 80
+ }
+ PathQuad {
+ x: 160
+ y: 30
+ controlX: 200
+ controlY: 80
+ }
+ }
+ }
+
+ Timer {
+ interval: 1000
+ repeat: true
+ running: true
+ onTriggered: capTest.capStyleIdx = (capTest.capStyleIdx + 1) % capTest.styles.length
+ }
+
+ Text {
+ id: txt
+ anchors.right: parent.right
+ text: capTest.styleTexts[capTest.capStyleIdx]
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/clippedtigers.qml b/examples/quick/quickshapes/shapes/clippedtigers.qml
new file mode 100644
index 0000000000..8885f60dd7
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/clippedtigers.qml
@@ -0,0 +1,110 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ id: root
+ width: 1024
+ height: 768
+
+ readonly property color col: "lightsteelblue"
+ gradient: Gradient {
+ GradientStop {
+ position: 0.0
+ color: Qt.tint(root.col, "#20FFFFFF")
+ }
+ GradientStop {
+ position: 0.1
+ color: Qt.tint(root.col, "#20AAAAAA")
+ }
+ GradientStop {
+ position: 0.9
+ color: Qt.tint(root.col, "#20666666")
+ }
+ GradientStop {
+ position: 1.0
+ color: Qt.tint(root.col, "#20000000")
+ }
+ }
+
+ Rectangle {
+ id: scissorRect
+ width: 200
+ height: 200
+ x: 150
+ readonly property real centerY: parent.height / 2 - height / 2
+ property real dy: 0
+ y: centerY + dy
+ clip: true
+
+ Loader {
+ id: loader1
+ width: parent.width
+ height: parent.height
+ y: 25 - scissorRect.dy
+ source: "tiger.qml"
+ asynchronous: true
+ visible: status === Loader.Ready
+ }
+
+ SequentialAnimation {
+ loops: Animation.Infinite
+ running: loader1.status === Loader.Ready && (loader1.item as Shape)?.status === Shape.Ready
+ NumberAnimation {
+ target: scissorRect
+ property: "dy"
+ from: 0
+ to: -scissorRect.centerY
+ duration: 2000
+ }
+ NumberAnimation {
+ target: scissorRect
+ property: "dy"
+ from: -scissorRect.centerY
+ to: scissorRect.centerY
+ duration: 4000
+ }
+ NumberAnimation {
+ target: scissorRect
+ property: "dy"
+ from: scissorRect.centerY
+ to: 0
+ duration: 2000
+ }
+ }
+ }
+
+ // With a more complex transformation (like rotation), stenciling is used
+ // instead of scissoring, this is more expensive. It may also trigger a
+ // slower code path for Shapes, depending on the path rendering backend
+ // in use, and may affect rendering quality as well.
+ Rectangle {
+ id: stencilRect
+ width: 300
+ height: 200
+ anchors {
+ right: parent.right
+ rightMargin: 100
+ verticalCenter: parent.verticalCenter
+ }
+ clip: true // NB! still clips to bounding rect (not shape)
+
+ Loader {
+ id: loader2
+ width: parent.width
+ height: parent.height
+ source: "tiger.qml"
+ asynchronous: true
+ visible: status === Loader.Ready
+ }
+
+ NumberAnimation on rotation {
+ from: 0
+ to: 360
+ duration: 5000
+ loops: Animation.Infinite
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/cubicCurve.qml b/examples/quick/quickshapes/shapes/cubicCurve.qml
new file mode 100644
index 0000000000..3fa4ed6f4b
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/cubicCurve.qml
@@ -0,0 +1,164 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+
+ Item {
+ width: 200
+ height: 200
+ anchors.centerIn: parent
+
+ Shape {
+ id: shape
+ anchors.fill: parent
+
+ ShapePath {
+ strokeWidth: 4
+ strokeColor: "black"
+ fillGradient: ConicalGradient {
+ id: conGrad
+ centerX: 100
+ centerY: 75
+ NumberAnimation on angle {
+ from: 0
+ to: 360
+ duration: 10000
+ loops: Animation.Infinite
+ }
+ GradientStop {
+ position: 0
+ color: "#00000000"
+ }
+ GradientStop {
+ position: 0.10
+ color: "#ffe0cc73"
+ }
+ GradientStop {
+ position: 0.17
+ color: "#ffc6a006"
+ }
+ GradientStop {
+ position: 0.46
+ color: "#ff600659"
+ }
+ GradientStop {
+ position: 0.72
+ color: "#ff0680ac"
+ }
+ GradientStop {
+ position: 0.92
+ color: "#ffb9d9e6"
+ }
+ GradientStop {
+ position: 1.00
+ color: "#00000000"
+ }
+ }
+
+ startX: 50
+ startY: 100
+ PathCubic {
+ x: 150
+ y: 100
+ control1X: cp1.x
+ control1Y: cp1.y
+ control2X: cp2.x
+ control2Y: cp2.y
+ }
+ }
+ }
+
+ Rectangle {
+ id: cp1
+ color: "red"
+ width: 10
+ height: 10
+ SequentialAnimation {
+ loops: Animation.Infinite
+ running: true
+ NumberAnimation {
+ target: cp1
+ property: "x"
+ from: 0
+ to: shape.width - cp1.width
+ duration: 5000
+ }
+ NumberAnimation {
+ target: cp1
+ property: "x"
+ from: shape.width - cp1.width
+ to: 0
+ duration: 5000
+ }
+ NumberAnimation {
+ target: cp1
+ property: "y"
+ from: 0
+ to: shape.height - cp1.height
+ duration: 5000
+ }
+ NumberAnimation {
+ target: cp1
+ property: "y"
+ from: shape.height - cp1.height
+ to: 0
+ duration: 5000
+ }
+ }
+ }
+
+ Rectangle {
+ id: cp2
+ color: "blue"
+ width: 10
+ height: 10
+ x: shape.width - width
+ SequentialAnimation {
+ loops: Animation.Infinite
+ running: true
+ NumberAnimation {
+ target: cp2
+ property: "y"
+ from: 0
+ to: shape.height - cp2.height
+ duration: 5000
+ }
+ NumberAnimation {
+ target: cp2
+ property: "y"
+ from: shape.height - cp2.height
+ to: 0
+ duration: 5000
+ }
+ NumberAnimation {
+ target: cp2
+ property: "x"
+ from: shape.width - cp2.width
+ to: 0
+ duration: 5000
+ }
+ NumberAnimation {
+ target: cp2
+ property: "x"
+ from: 0
+ to: shape.width - cp2.width
+ duration: 5000
+ }
+ }
+ }
+ }
+
+ Text {
+ anchors {
+ right: parent.right
+ top: parent.top
+ }
+ text: qsTr("Conical gradient angle: ") + Math.round(conGrad.angle)
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/dashPattern.qml b/examples/quick/quickshapes/shapes/dashPattern.qml
new file mode 100644
index 0000000000..742f8622e9
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/dashPattern.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+ Shape {
+ id: shape
+ anchors.fill: parent
+
+ ShapePath {
+ id: p
+ strokeWidth: 5
+ strokeColor: "blue"
+ strokeStyle: ShapePath.DashLine
+ dashPattern: [ 1, 4, 4, 4 ]
+ fillColor: "lightBlue"
+
+ property real xr: 70
+ property real yr: 30
+ startX: shape.width / 2 - xr
+ startY: shape.height / 2 - yr
+ PathArc {
+ x: shape.width / 2 + p.xr
+ y: shape.height / 2 + p.yr
+ radiusX: p.xr
+ radiusY: p.yr
+ useLargeArc: true
+ }
+ PathArc {
+ x: shape.width / 2 - p.xr
+ y: shape.height / 2 - p.yr
+ radiusX: p.xr
+ radiusY: p.yr
+ useLargeArc: true
+ }
+ }
+ }
+}
diff --git a/examples/quick/shapes/doc/images/qml-shapes-example.png b/examples/quick/quickshapes/shapes/doc/images/qml-shapes-example.png
index 055fc244ea..055fc244ea 100644
--- a/examples/quick/shapes/doc/images/qml-shapes-example.png
+++ b/examples/quick/quickshapes/shapes/doc/images/qml-shapes-example.png
Binary files differ
diff --git a/examples/quick/quickshapes/shapes/doc/src/shapes.qdoc b/examples/quick/quickshapes/shapes/doc/src/shapes.qdoc
new file mode 100644
index 0000000000..eb9f5da52d
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/doc/src/shapes.qdoc
@@ -0,0 +1,16 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+/*!
+ \title Qt Quick Examples - Shapes
+ \example quickshapes/shapes
+ \image qml-shapes-example.png
+ \brief A Qt Quick example demonstrating the use of shape items.
+ \ingroup qtquickexamples
+ \examplecategory {Graphics}
+
+ This example demonstrates the usage of the \l Shape type in Qt Quick. Shapes
+ allow efficiently rendering stroked and filled lines, curves, and arcs in Qt
+ Quick scenes.
+
+ \include examples-run.qdocinc
+*/
diff --git a/examples/quick/quickshapes/shapes/ellipticalArcs.qml b/examples/quick/quickshapes/shapes/ellipticalArcs.qml
new file mode 100644
index 0000000000..d2b65cb4c1
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/ellipticalArcs.qml
@@ -0,0 +1,93 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+ Shape {
+ id: shape
+ width: 220
+ height: 200
+ anchors.centerIn: parent
+
+ ShapePath {
+ fillGradient: LinearGradient {
+ y2: shape.height
+ GradientStop {
+ position: 0
+ color: "yellow"
+ }
+ GradientStop {
+ position: 1
+ color: "green"
+ }
+ }
+
+ startX: 10
+ startY: 100
+ PathArc {
+ relativeX: 50
+ y: 100
+ radiusX: 25
+ radiusY: 25
+ }
+ PathArc {
+ relativeX: 50
+ y: 100
+ radiusX: 25
+ radiusY: 35
+ }
+ PathArc {
+ relativeX: 50
+ y: 100
+ radiusX: 25
+ radiusY: 60
+ }
+ PathArc {
+ relativeX: 50
+ y: 100
+ radiusX: 50
+ radiusY: 120
+ }
+ }
+ }
+
+ Shape {
+ width: 120
+ height: 130
+ anchors.bottom: parent.bottom
+ anchors.right: parent.right
+
+ scale: 0.5
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "darkBlue"
+ strokeWidth: 20
+ capStyle: ShapePath.RoundCap
+
+ PathAngleArc {
+ centerX: 65
+ centerY: 95
+ radiusX: 45
+ radiusY: 45
+ startAngle: -180
+ SequentialAnimation on sweepAngle {
+ loops: Animation.Infinite
+ NumberAnimation {
+ to: 360
+ duration: 2000
+ }
+ NumberAnimation {
+ to: 0
+ duration: 2000
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/fillItem.qml b/examples/quick/quickshapes/shapes/fillItem.qml
new file mode 100644
index 0000000000..84fef37eeb
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/fillItem.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+import shared
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+
+ Image {
+ id: image
+ source: Images.qtLogo
+ visible: false
+ }
+
+ Shape {
+ id: shape
+ anchors.centerIn: parent
+ width: 200
+ height: 100
+
+ ShapePath {
+ strokeColor: "black"
+ strokeWidth: 1
+ fillItem: image
+ fillTransform: PlanarTransform.fromScale(0.5, 0.5)
+ startX: shape.width / 2 - 40
+ startY: shape.height / 2 - 40
+
+ PathArc {
+ x: shape.width / 2 + 40
+ y: shape.height / 2 + 40
+ radiusX: 40
+ radiusY: 40
+ useLargeArc: true
+ }
+
+ PathArc {
+ x: shape.width / 2 - 40
+ y: shape.height / 2 - 40
+ radiusX: 40
+ radiusY: 40
+ useLargeArc: true
+ }
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/fillRules.qml b/examples/quick/quickshapes/shapes/fillRules.qml
new file mode 100644
index 0000000000..1e96af94e7
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/fillRules.qml
@@ -0,0 +1,62 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+ Shape {
+ width: 100
+ height: 100
+ anchors.centerIn: parent
+ ShapePath {
+ id: star
+ strokeColor: "blue"
+ fillColor: "magenta"
+ strokeWidth: 2
+ PathMove {
+ x: 90
+ y: 50
+ }
+ PathLine {
+ x: 50 + 40 * Math.cos(0.8 * 1 * Math.PI)
+ y: 50 + 40 * Math.sin(0.8 * 1 * Math.PI)
+ }
+ PathLine {
+ x: 50 + 40 * Math.cos(0.8 * 2 * Math.PI)
+ y: 50 + 40 * Math.sin(0.8 * 2 * Math.PI)
+ }
+ PathLine {
+ x: 50 + 40 * Math.cos(0.8 * 3 * Math.PI)
+ y: 50 + 40 * Math.sin(0.8 * 3 * Math.PI)
+ }
+ PathLine {
+ x: 50 + 40 * Math.cos(0.8 * 4 * Math.PI)
+ y: 50 + 40 * Math.sin(0.8 * 4 * Math.PI)
+ }
+ PathLine {
+ x: 90
+ y: 50
+ }
+ }
+ NumberAnimation on rotation {
+ from: 0
+ to: 360
+ duration: 5000
+ loops: Animation.Infinite
+ }
+ }
+ Timer {
+ interval: 2000
+ onTriggered: star.fillRule = (star.fillRule === ShapePath.OddEvenFill ? ShapePath.WindingFill : ShapePath.OddEvenFill)
+ repeat: true
+ running: true
+ }
+ Text {
+ anchors.right: parent.right
+ text: star.fillRule === ShapePath.OddEvenFill ? qsTr("OddEvenFill") : qsTr("WindingFill")
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/fillTransform.qml b/examples/quick/quickshapes/shapes/fillTransform.qml
new file mode 100644
index 0000000000..f09a5d63e1
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/fillTransform.qml
@@ -0,0 +1,46 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+
+ Shape {
+ anchors.centerIn: parent
+ width: 200
+ height: 100
+
+ ShapePath {
+ id: path1
+ fillGradient: RadialGradient {
+ id: grad
+ centerX: path1.startX + 100
+ centerY: path1.startY + 50
+ centerRadius: 50
+ focalX: centerX
+ focalY: centerY
+ GradientStop { position: 0.0; color: "blue" }
+ GradientStop { position: 0.5; color: "cyan" }
+ GradientStop { position: 1.0; color: "blue" }
+ }
+
+ property real fillScale: 1
+ NumberAnimation on fillScale {
+ running: true
+ loops: Animation.Infinite
+ from: 1
+ to: 5
+ duration: 3000
+ easing.type: Easing.InQuad
+ }
+
+ fillTransform: PlanarTransform.fromScale(fillScale, 1, grad.centerX, grad.centerY)
+
+ PathRectangle { width: 200; height: 100 }
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/gradientSpreadModes.qml b/examples/quick/quickshapes/shapes/gradientSpreadModes.qml
new file mode 100644
index 0000000000..ba2dc2b734
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/gradientSpreadModes.qml
@@ -0,0 +1,102 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+ Rectangle {
+ anchors.centerIn: parent
+ width: 200
+ height: 200
+ border.color: "black"
+
+ Shape {
+ anchors.fill: parent
+
+ ShapePath {
+ strokeColor: "transparent"
+
+ fillGradient: LinearGradient {
+ id: grad
+ y1: 50
+ y2: 150
+ GradientStop {
+ position: 0
+ color: "black"
+ }
+ GradientStop {
+ position: 1
+ color: "red"
+ }
+ }
+
+ startX: 10
+ startY: 10
+ PathLine {
+ relativeX: 180
+ relativeY: 0
+ }
+ PathLine {
+ relativeX: 0
+ relativeY: 180
+ }
+ PathLine {
+ relativeX: -180
+ relativeY: 0
+ }
+ PathLine {
+ relativeX: 0
+ relativeY: -180
+ }
+ }
+ }
+
+ Timer {
+ id: spreadTimer
+ interval: 3000
+ running: true
+ repeat: true
+ readonly property variant spreads: [ ShapeGradient.PadSpread, ShapeGradient.RepeatSpread, ShapeGradient.ReflectSpread ]
+ readonly property variant spreadTexts: [ qsTr("PadSpread"), qsTr("RepeatSpread"), qsTr("ReflectSpread") ]
+ property int spreadIdx: 0
+ onTriggered: function() {
+ spreadIdx = (spreadIdx + 1) % spreads.length
+ grad.spread = spreads[spreadIdx]
+ }
+ }
+
+ Shape {
+ anchors.fill: parent
+ ShapePath {
+ strokeColor: "gray"
+ strokeWidth: 2
+ fillColor: "transparent"
+ PathMove {
+ x: 0
+ y: 50
+ }
+ PathLine {
+ relativeX: 200
+ relativeY: 0
+ }
+ PathMove {
+ x: 0
+ y: 150
+ }
+ PathLine {
+ relativeX: 200
+ relativeY: 0
+ }
+ }
+ }
+ }
+
+ Text {
+ anchors.right: parent.right
+ text: spreadTimer.spreadTexts[spreadTimer.spreadIdx]
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/interactive.qml b/examples/quick/quickshapes/shapes/interactive.qml
new file mode 100644
index 0000000000..0525f4eed3
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/interactive.qml
@@ -0,0 +1,247 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Shapes
+
+pragma ComponentBehavior: Bound
+
+Rectangle {
+ id: root
+ width: 1024
+ height: 768
+ color: palette.window
+
+ RowLayout {
+ id: topRow
+ x: 20
+ y: 10
+ spacing: 20
+
+ ButtonGroup {
+ id: toolButtons
+ buttons: drawingTools.children
+ }
+
+ RowLayout {
+ id: drawingTools
+ ToolButton {
+ text: qsTr("Line")
+ checkable: true
+ checked: true
+
+ property Component shapeType: Component {
+ ShapePath {
+ id: lineShapePath
+ strokeColor: root.palette.windowText
+ strokeWidth: widthSlider.value
+ fillColor: "transparent"
+ PathLine {
+ id: pathSegment
+ x: lineShapePath.startX + 1
+ y: lineShapePath.startY + 1
+ }
+ function finishCreation() {
+ createStartEndHandles(this, pathSegment);
+ }
+ }
+ }
+ }
+ ToolButton {
+ text: qsTr("Quadratic")
+ checkable: true
+
+ property Component shapeType: Component {
+ ShapePath {
+ id: quadShapePath
+ strokeColor: strokeSwitch.checked ? root.palette.windowText : "transparent"
+ strokeWidth: widthSlider.value
+ fillColor: fillSwitch.checked ? "green" : "transparent"
+ PathQuad {
+ id: pathSegment
+ x: quadShapePath.startX + 1
+ y: quadShapePath.startY + 1
+ controlX: quadShapePath.startX + 50
+ controlY: quadShapePath.startY + 50
+ }
+ function finishCreation() {
+ createStartEndHandles(this, pathSegment);
+ pointDragHandle.createObject(canvas, {
+ idleColor: "blue",
+ target: pathSegment, xprop: "controlX", yprop: "controlY"
+ });
+ }
+ }
+ }
+ }
+ ToolButton {
+ text: qsTr("Cubic")
+ checkable: true
+
+ property Component shapeType: Component {
+ ShapePath {
+ id: cubicShapePath
+ strokeColor: strokeSwitch.checked ? root.palette.windowText : "transparent"
+ strokeWidth: widthSlider.value
+ fillColor: fillSwitch.checked ? "green" : "transparent"
+ PathCubic {
+ id: pathSegment
+ x: cubicShapePath.startX + 1
+ y: cubicShapePath.startY + 1
+ control1X: cubicShapePath.startX + 50;
+ control1Y: cubicShapePath.startY + 50;
+ control2X: cubicShapePath.startX + 150;
+ control2Y: cubicShapePath.startY + 50;
+ }
+ function finishCreation() {
+ createStartEndHandles(this, pathSegment);
+ pointDragHandle.createObject(canvas, {
+ idleColor: "blue",
+ target: pathSegment, xprop: "control1X", yprop: "control1Y"
+ });
+ pointDragHandle.createObject(canvas, {
+ idleColor: "lightBlue",
+ target: pathSegment, xprop: "control2X", yprop: "control2Y"
+ });
+ }
+ }
+ }
+ }
+ ToolButton {
+ id: modifyButton
+ text: qsTr("Modify")
+ checkable: true
+ onCheckedChanged: {
+ if (checked)
+ showHandlesSwitch.checked = true;
+ }
+ }
+ }
+
+ Label {
+ text: qsTr("Width")
+ }
+ Slider {
+ id: widthSlider
+ from: 1
+ to: 60
+ value: 4
+ }
+
+ Switch {
+ id: showHandlesSwitch
+ text: qsTr("Handles")
+ }
+
+ Switch {
+ id: fillSwitch
+ text: qsTr("Fill")
+ }
+
+ Switch {
+ id: strokeSwitch
+ text: qsTr("Stroke")
+ checked: true
+ }
+ }
+
+ Component {
+ id: pointDragHandle
+
+ Rectangle {
+ id: rect
+ property variant target
+ property string xprop
+ property string yprop
+ property color idleColor: "red"
+
+ width: 20
+ height: width
+ radius: halfWidth
+ visible: showHandlesSwitch.checked
+ color: hh.hovered ? "yellow" : idleColor
+ border.color: "grey"
+ opacity: 0.75
+
+ property real halfWidth: width / 2
+ property bool complete: false
+ Binding {
+ target: rect.target
+ property: rect.xprop
+ value: rect.x + rect.halfWidth
+ when: rect.complete
+ }
+ Binding {
+ target: rect.target
+ property: rect.yprop
+ value: rect.y + rect.halfWidth
+ when: rect.complete
+ }
+
+ DragHandler { }
+
+ HoverHandler {
+ id: hh
+ }
+
+ Component.onCompleted: {
+ x = target[xprop] - halfWidth;
+ y = target[yprop] - halfWidth;
+ complete = true;
+ }
+ }
+ }
+
+ function createStartEndHandles(shapePath, pathSegment) {
+ pointDragHandle.createObject(canvas, {
+ idleColor: "red",
+ target: shapePath, xprop: "startX", yprop: "startY"
+ });
+ pointDragHandle.createObject(canvas, {
+ idleColor: "red",
+ target: pathSegment, xprop: "x", yprop: "y"
+ });
+ }
+
+ Rectangle {
+ id: canvas
+ color: palette.base
+ width: root.width - 40
+ height: root.height - y - 20
+ x: 20
+ anchors.top: topRow.bottom
+ anchors.topMargin: 20
+
+ DragHandler {
+ target: null
+ grabPermissions: DragHandler.TakeOverForbidden
+ property ShapePath activePath: null
+ onActiveChanged: {
+ const tool = toolButtons.checkedButton;
+ if (tool != modifyButton) {
+ if (active) {
+ activePath = tool.shapeType.createObject(root, {
+ startX: centroid.position.x, startY: centroid.position.y
+ });
+ shape.data.push(activePath);
+ } else {
+ activePath.finishCreation();
+ activePath = null;
+ }
+ }
+ }
+ onCentroidChanged: if (activePath) {
+ var pathObj = activePath.pathElements[0];
+ pathObj.x = centroid.position.x;
+ pathObj.y = centroid.position.y;
+ }
+ }
+
+ Shape {
+ id: shape
+ anchors.fill: parent
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/joinStyles.qml b/examples/quick/quickshapes/shapes/joinStyles.qml
new file mode 100644
index 0000000000..127cb50fbe
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/joinStyles.qml
@@ -0,0 +1,56 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+
+ Shape {
+ width: 120
+ height: 120
+ anchors.centerIn: parent
+
+ ShapePath {
+ id: joinTest
+
+ strokeColor: "black"
+ strokeWidth: 16
+ fillColor: "transparent"
+ capStyle: ShapePath.RoundCap
+
+ property int joinStyleIdx: 0
+ readonly property variant styles: [ ShapePath.BevelJoin, ShapePath.MiterJoin, ShapePath.RoundJoin ]
+ readonly property variant styleTexts: [ qsTr("BevelJoin"), qsTr("MiterJoin"), qsTr("RoundJoin") ]
+
+ joinStyle: styles[joinStyleIdx]
+
+ startX: 30
+ startY: 30
+ PathLine {
+ x: 100
+ y: 100
+ }
+ PathLine {
+ x: 30
+ y: 100
+ }
+ }
+ }
+
+ Timer {
+ interval: 1000
+ repeat: true
+ running: true
+ onTriggered: joinTest.joinStyleIdx = (joinTest.joinStyleIdx + 1) % joinTest.styles.length
+ }
+
+ Text {
+ id: txt
+ anchors.right: parent.right
+ text: joinTest.styleTexts[joinTest.joinStyleIdx]
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/largeOrSmallArc.qml b/examples/quick/quickshapes/shapes/largeOrSmallArc.qml
new file mode 100644
index 0000000000..0d887d162d
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/largeOrSmallArc.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+
+ Repeater {
+ model: 2
+ delegate: Shape {
+ id: delegate
+ required property int index
+
+ anchors.centerIn: parent
+ width: 200
+ height: 200
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: delegate.index === 0 ? "red" : "blue"
+ strokeStyle: ShapePath.DashLine
+ strokeWidth: 4
+
+ startX: 50
+ startY: 100
+ PathArc {
+ x: 100
+ y: 150
+ radiusX: 50
+ radiusY: 50
+ useLargeArc: delegate.index === 1
+ }
+ }
+ }
+ }
+
+ Column {
+ anchors.right: parent.right
+ Text {
+ text: qsTr("Small")
+ color: "red"
+ }
+ Text {
+ text: qsTr("Large")
+ color: "blue"
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/linearGradient.qml b/examples/quick/quickshapes/shapes/linearGradient.qml
new file mode 100644
index 0000000000..cb89be7e6b
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/linearGradient.qml
@@ -0,0 +1,90 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+ Shape {
+ width: 200
+ height: 150
+ anchors.centerIn: parent
+ ShapePath {
+ strokeWidth: 4
+ strokeColor: "red"
+ fillGradient: LinearGradient {
+ x1: 20
+ y1: 20
+ x2: 180
+ y2: 130
+ GradientStop {
+ position: 0
+ color: "blue"
+ }
+ GradientStop {
+ position: 0.2
+ color: "green"
+ }
+ GradientStop {
+ position: 0.4
+ color: "red"
+ }
+ GradientStop {
+ position: 0.6
+ color: "yellow"
+ }
+ GradientStop {
+ position: 1
+ color: "cyan"
+ }
+ }
+ fillColor: "blue" // ignored with the gradient set
+ strokeStyle: ShapePath.DashLine
+ dashPattern: [ 1, 4 ]
+ startX: 20
+ startY: 20
+ PathLine {
+ x: 180
+ y: 130
+ }
+ PathLine {
+ x: 20
+ y: 130
+ }
+ PathLine {
+ x: 20
+ y: 20
+ }
+ }
+ transform: Rotation {
+ origin.x: 100
+ origin.y: 50
+ axis {
+ x: 0
+ y: 1
+ z: 0
+ }
+ SequentialAnimation on angle {
+ NumberAnimation {
+ from: 0
+ to: 75
+ duration: 2000
+ }
+ NumberAnimation {
+ from: 75
+ to: -75
+ duration: 4000
+ }
+ NumberAnimation {
+ from: -75
+ to: 0
+ duration: 2000
+ }
+ loops: Animation.Infinite
+ }
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/main.cpp b/examples/quick/quickshapes/shapes/main.cpp
new file mode 100644
index 0000000000..f8a895da83
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/main.cpp
@@ -0,0 +1,4 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#include "../../shared/shared.h"
+DECLARATIVE_EXAMPLE_MAIN(shapes/main)
diff --git a/examples/quick/quickshapes/shapes/main.qml b/examples/quick/quickshapes/shapes/main.qml
new file mode 100644
index 0000000000..ddd6e4edf0
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/main.qml
@@ -0,0 +1,20 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import shared
+
+Item {
+ width: 1280
+ height: 720
+ LauncherList {
+ anchors.fill: parent
+ Component.onCompleted: {
+ addExample(qsTr("Shape Gallery"), qsTr("Simple path rendering examples"), Qt.resolvedUrl("shapegallery.qml"))
+ addExample(qsTr("Interactive Shape"), qsTr("Dynamic, interactive path rendering examples"), Qt.resolvedUrl("interactive.qml"))
+ addExample(qsTr("Anti-aliasing"), qsTr("Improving quality"), Qt.resolvedUrl("sampling.qml"))
+ addExample(qsTr("Magnify My Tiger!"), qsTr("Path zooming example"), Qt.resolvedUrl("zoomtiger.qml"))
+ addExample(qsTr("Clip My Tiger!"), qsTr("Clip examples, a.k.a. What Not To Do"), Qt.resolvedUrl("clippedtigers.qml"))
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/quadraticCurve.qml b/examples/quick/quickshapes/shapes/quadraticCurve.qml
new file mode 100644
index 0000000000..d626d2693a
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/quadraticCurve.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+
+ Item {
+ width: 200
+ height: 100
+ anchors.centerIn: parent
+
+ Shape {
+ id: shape
+ anchors.fill: parent
+
+ ShapePath {
+ strokeWidth: 4
+ strokeColor: "black"
+ fillColor: "transparent"
+
+ startX: 50
+ startY: 50
+ PathQuad {
+ x: 150
+ y: 50
+ controlX: cp.x
+ controlY: cp.y
+ }
+ }
+ }
+
+ Rectangle {
+ id: cp
+ color: "red"
+ width: 10
+ height: 10
+ SequentialAnimation on x {
+ loops: Animation.Infinite
+ NumberAnimation {
+ from: 0
+ to: shape.width - cp.width
+ duration: 5000
+ }
+ NumberAnimation {
+ from: shape.width - cp.width
+ to: 0
+ duration: 5000
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/radialGradient.qml b/examples/quick/quickshapes/shapes/radialGradient.qml
new file mode 100644
index 0000000000..87db319c9a
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/radialGradient.qml
@@ -0,0 +1,113 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+ Shape {
+ width: 200
+ height: 150
+ anchors.centerIn: parent
+ ShapePath {
+ strokeWidth: 4
+ strokeColor: "red"
+ fillGradient: RadialGradient {
+ centerX: 100
+ centerY: 100
+ centerRadius: 100
+ SequentialAnimation on focalRadius {
+ loops: Animation.Infinite
+ NumberAnimation {
+ from: 1
+ to: 20
+ duration: 2000
+ }
+ NumberAnimation {
+ from: 20
+ to: 1
+ duration: 2000
+ }
+ }
+ SequentialAnimation on focalX {
+ loops: Animation.Infinite
+ NumberAnimation {
+ from: 50
+ to: 150
+ duration: 3000
+ }
+ NumberAnimation {
+ from: 150
+ to: 50
+ duration: 3000
+ }
+ }
+ SequentialAnimation on focalY {
+ loops: Animation.Infinite
+ NumberAnimation {
+ from: 50
+ to: 150
+ duration: 1000
+ }
+ NumberAnimation {
+ from: 150
+ to: 50
+ duration: 1000
+ }
+ }
+ GradientStop {
+ position: 0
+ color: "#ffffff"
+ }
+ GradientStop {
+ position: 0.11
+ color: "#f9ffa0"
+ }
+ GradientStop {
+ position: 0.13
+ color: "#f9ff99"
+ }
+ GradientStop {
+ position: 0.14
+ color: "#f3ff86"
+ }
+ GradientStop {
+ position: 0.49
+ color: "#93b353"
+ }
+ GradientStop {
+ position: 0.87
+ color: "#264619"
+ }
+ GradientStop {
+ position: 0.96
+ color: "#0c1306"
+ }
+ GradientStop {
+ position: 1
+ color: "#000000"
+ }
+ }
+ fillColor: "blue" // ignored with the gradient set
+ strokeStyle: ShapePath.DashLine
+ dashPattern: [ 1, 4 ]
+ startX: 20
+ startY: 20
+ PathLine {
+ x: 180
+ y: 130
+ }
+ PathLine {
+ x: 20
+ y: 130
+ }
+ PathLine {
+ x: 20
+ y: 20
+ }
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/rectangle.qml b/examples/quick/quickshapes/shapes/rectangle.qml
new file mode 100644
index 0000000000..afac8850ff
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/rectangle.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+
+ Shape {
+ id: myShape
+ anchors.fill: parent
+
+ ShapePath {
+ id: myPath
+ strokeColor: "green"
+ strokeWidth: myShape.width / 25
+ joinStyle: ShapePath.MiterJoin
+ fillGradient: LinearGradient {
+ x2: myShape.width
+ y2: x2
+ GradientStop { position: 0.1; color: "yellow" }
+ GradientStop { position: 0.45; color: "lightyellow" }
+ GradientStop { position: 0.7; color: "yellow" }
+ }
+
+ property real animRadius: 0
+ SequentialAnimation on animRadius {
+ loops: Animation.Infinite
+ NumberAnimation {
+ from: 0
+ to: 100
+ duration: 3000
+ }
+ NumberAnimation {
+ from: 100
+ to: 0
+ duration: 3000
+ }
+ PauseAnimation {
+ duration: 1000
+ }
+ }
+
+ PathRectangle {
+ x: myShape.width / 5
+ y: x
+ width: myShape.width - 2 * x
+ height: width
+ topLeftRadius: myPath.animRadius
+ bottomRightRadius: myPath.animRadius
+ }
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/sampling.qml b/examples/quick/quickshapes/shapes/sampling.qml
new file mode 100644
index 0000000000..27515b6722
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/sampling.qml
@@ -0,0 +1,257 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ id: root
+ width: 1024
+ height: 768
+
+ readonly property color col: "lightsteelblue"
+ gradient: Gradient {
+ GradientStop {
+ position: 0.0
+ color: Qt.tint(root.col, "#20FFFFFF")
+ }
+ GradientStop {
+ position: 0.1
+ color: Qt.tint(root.col, "#20AAAAAA")
+ }
+ GradientStop {
+ position: 0.9
+ color: Qt.tint(root.col, "#20666666")
+ }
+ GradientStop {
+ position: 1.0
+ color: Qt.tint(root.col, "#20000000")
+ }
+ }
+
+ Row {
+ anchors {
+ fill: parent
+ margins: 20
+ }
+ spacing: 40
+
+ Column {
+ spacing: 40
+
+ Text {
+ text: qsTr("Original")
+ }
+
+ // A simple Shape without anything special.
+ Rectangle {
+ color: "lightGray"
+ width: 400
+ height: 200
+
+ Shape {
+ x: 30
+ y: 20
+ width: 50
+ height: 50
+ scale: 2
+
+ ShapePath {
+ strokeColor: "green"
+ NumberAnimation on strokeWidth {
+ from: 1
+ to: 20
+ duration: 5000
+ }
+ fillColor: "transparent"
+ capStyle: ShapePath.RoundCap
+
+ startX: 40
+ startY: 30
+ PathQuad {
+ x: 50
+ y: 80
+ controlX: 0
+ controlY: 80
+ }
+ PathLine {
+ x: 150
+ y: 80
+ }
+ PathQuad {
+ x: 160
+ y: 30
+ controlX: 200
+ controlY: 80
+ }
+ }
+ }
+ }
+
+ Text {
+ text: qsTr("Supersampling (2x)")
+ }
+
+ // Now let's use 2x supersampling via layers. This way the entire subtree
+ // is rendered into an FBO twice the size and then drawn with linear
+ // filtering. This allows having some level of AA even when there is no
+ // support for multisample framebuffers.
+ Rectangle {
+ id: supersampledItem
+ color: "lightGray"
+ width: 400
+ height: 200
+
+ layer.enabled: true
+ layer.smooth: true
+ layer.textureSize: Qt.size(supersampledItem.width * 2, supersampledItem.height * 2)
+
+ Shape {
+ x: 30
+ y: 20
+ width: 50
+ height: 50
+ scale: 2
+
+ ShapePath {
+ strokeColor: "green"
+ NumberAnimation on strokeWidth {
+ from: 1
+ to: 20
+ duration: 5000
+ }
+ fillColor: "transparent"
+ capStyle: ShapePath.RoundCap
+
+ startX: 40
+ startY: 30
+ PathQuad {
+ x: 50
+ y: 80
+ controlX: 0
+ controlY: 80
+ }
+ PathLine {
+ x: 150
+ y: 80
+ }
+ PathQuad {
+ x: 160
+ y: 30
+ controlX: 200
+ controlY: 80
+ }
+ }
+ }
+ }
+ }
+
+ Column {
+ spacing: 40
+
+ Text {
+ text: qsTr("Multisampling (4x)")
+ }
+
+ // Now let's use 4x MSAA, again via layers. This needs support for
+ // multisample renderbuffers and framebuffer blits.
+ Rectangle {
+ color: "lightGray"
+ width: 400
+ height: 200
+
+ layer.enabled: true
+ layer.smooth: true
+ layer.samples: 4
+
+ Shape {
+ x: 30
+ y: 20
+ width: 50
+ height: 50
+ scale: 2
+
+ ShapePath {
+ strokeColor: "green"
+ NumberAnimation on strokeWidth {
+ from: 1
+ to: 20
+ duration: 5000
+ }
+ fillColor: "transparent"
+ capStyle: ShapePath.RoundCap
+
+ startX: 40
+ startY: 30
+ PathQuad {
+ x: 50
+ y: 80
+ controlX: 0
+ controlY: 80
+ }
+ PathLine {
+ x: 150
+ y: 80
+ }
+ PathQuad {
+ x: 160
+ y: 30
+ controlX: 200
+ controlY: 80
+ }
+ }
+ }
+ }
+ Text {
+ text: qsTr("CurveRenderer")
+ }
+
+ // Now let's use CurveRenderer with built-in antialiasing support.
+ Rectangle {
+ color: "lightGray"
+ width: 400
+ height: 200
+
+ Shape {
+ x: 30
+ y: 20
+ width: 50
+ height: 50
+ scale: 2
+ preferredRendererType: Shape.CurveRenderer
+ antialiasing: true
+
+ ShapePath {
+ strokeColor: "green"
+ NumberAnimation on strokeWidth {
+ from: 1
+ to: 20
+ duration: 5000
+ }
+ fillColor: "transparent"
+ capStyle: ShapePath.RoundCap
+
+ startX: 40
+ startY: 30
+ PathQuad {
+ x: 50
+ y: 80
+ controlX: 0
+ controlY: 80
+ }
+ PathLine {
+ x: 150
+ y: 80
+ }
+ PathQuad {
+ x: 160
+ y: 30
+ controlX: 200
+ controlY: 80
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/shapegallery.qml b/examples/quick/quickshapes/shapes/shapegallery.qml
new file mode 100644
index 0000000000..2e79e4515b
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/shapegallery.qml
@@ -0,0 +1,196 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+pragma ComponentBehavior: Bound
+
+Rectangle {
+ id: root
+ width: 1024
+ height: 768
+
+ readonly property color col: "lightsteelblue"
+ gradient: Gradient {
+ GradientStop {
+ position: 0.0
+ color: Qt.tint(root.col, "#20FFFFFF")
+ }
+ GradientStop {
+ position: 0.1
+ color: Qt.tint(root.col, "#20AAAAAA")
+ }
+ GradientStop {
+ position: 0.9
+ color: Qt.tint(root.col, "#20666666")
+ }
+ GradientStop {
+ position: 1.0
+ color: Qt.tint(root.col, "#20000000")
+ }
+ }
+
+ readonly property int gridSpacing: 10
+
+ Rectangle {
+ anchors {
+ fill: parent
+ margins: 10
+ }
+ color: "lightBlue"
+ clip: true
+
+ GridView {
+ id: grid
+ anchors {
+ fill: parent
+ margins: root.gridSpacing
+ }
+ cellWidth: 300
+ cellHeight: 300
+ delegate: Rectangle {
+ id: gridDelegate
+
+ required property string name
+ required property string shapeUrl
+
+ border.color: "purple"
+ width: grid.cellWidth - root.gridSpacing
+ height: grid.cellHeight - root.gridSpacing
+ Column {
+ anchors.fill: parent
+ anchors.margins: 4
+ Item {
+ width: parent.width
+ height: parent.height - delegText.height
+ Loader {
+ source: Qt.resolvedUrl(gridDelegate.shapeUrl)
+ anchors.fill: parent
+ }
+ }
+ Text {
+ id: delegText
+ text: gridDelegate.name
+ font.pointSize: 16
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+ }
+ model: ListModel {
+ ListElement {
+ name: qsTr("Stroke and fill")
+ shapeUrl: "tapableTriangle.qml"
+ }
+ ListElement {
+ name: qsTr("Stroke or fill only")
+ shapeUrl: "strokeOrFill.qml"
+ }
+ ListElement {
+ name: qsTr("Dash pattern")
+ shapeUrl: "dashPattern.qml"
+ }
+ ListElement {
+ name: qsTr("Linear gradient")
+ shapeUrl: "linearGradient.qml"
+ }
+ ListElement {
+ name: qsTr("Radial gradient")
+ shapeUrl: "radialGradient.qml"
+ }
+ ListElement {
+ name: qsTr("Fill rules")
+ shapeUrl: "fillRules.qml"
+ }
+ ListElement {
+ name: qsTr("Join styles")
+ shapeUrl: "joinStyles.qml"
+ }
+ ListElement {
+ name: qsTr("Cap styles")
+ shapeUrl: "capStyles.qml"
+ }
+ ListElement {
+ name: qsTr("Quadratic curve")
+ shapeUrl: "quadraticCurve.qml"
+ }
+ ListElement {
+ name: qsTr("Cubic curve")
+ shapeUrl: "cubicCurve.qml"
+ }
+ ListElement {
+ name: qsTr("Elliptical arc")
+ shapeUrl: "ellipticalArcs.qml"
+ }
+ ListElement {
+ name: qsTr("Gradient spread modes")
+ shapeUrl: "gradientSpreadModes.qml"
+ }
+ ListElement {
+ name: qsTr("Arc direction")
+ shapeUrl: "arcDirection.qml"
+ }
+ ListElement {
+ name: qsTr("Large/small arc")
+ shapeUrl: "largeOrSmallArc.qml"
+ }
+ ListElement {
+ name: qsTr("Arc rotation")
+ shapeUrl: "arcRotation.qml"
+ }
+ ListElement {
+ name: qsTr("Tiger")
+ shapeUrl: "tigerLoader.qml"
+ }
+ ListElement {
+ name: qsTr("Text")
+ shapeUrl: "text.qml"
+ }
+ ListElement {
+ name: qsTr("Fill transform")
+ shapeUrl: "fillTransform.qml"
+ }
+ ListElement {
+ name: qsTr("Shape Rectangle")
+ shapeUrl: "rectangle.qml"
+ }
+ ListElement {
+ name: qsTr("Fill item")
+ shapeUrl: "fillItem.qml"
+ }
+ }
+ }
+ }
+
+ Text {
+ anchors.right: parent.right
+ // used only to get the renderer type
+ Shape {
+ id: dummyShape
+ ShapePath { }
+ }
+ color: "darkBlue"
+ font.pointSize: 12
+ readonly property variant rendererStrings: [ qsTr("Unknown"), qsTr("Generic (QtGui triangulator)"), qsTr("GL_NV_path_rendering"), qsTr("Software (QPainter)"), qsTr("Curve Renderer") ]
+ text: "Active Shape backend: " + rendererStrings[dummyShape.rendererType]
+ SequentialAnimation on opacity {
+ NumberAnimation {
+ from: 1
+ to: 0
+ duration: 5000
+ }
+ PauseAnimation {
+ duration: 5000
+ }
+ NumberAnimation {
+ from: 0
+ to: 1
+ duration: 1000
+ }
+ PauseAnimation {
+ duration: 5000
+ }
+ loops: Animation.Infinite
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/shapes.pro b/examples/quick/quickshapes/shapes/shapes.pro
new file mode 100644
index 0000000000..f14a02a23c
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/shapes.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+
+QT += quick qml
+SOURCES += main.cpp
+RESOURCES += \
+ shapes.qrc \
+ ../../shared/shared.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/quickshapes/shapes
+INSTALLS += target
diff --git a/examples/quick/quickshapes/shapes/shapes.qrc b/examples/quick/quickshapes/shapes/shapes.qrc
new file mode 100644
index 0000000000..afbc7fcf5e
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/shapes.qrc
@@ -0,0 +1,30 @@
+<RCC>
+ <qresource prefix="/qt/qml/shapes">
+ <file>main.qml</file>
+ <file>shapegallery.qml</file>
+ <file>interactive.qml</file>
+ <file>sampling.qml</file>
+ <file>clippedtigers.qml</file>
+ <file>tiger.qml</file>
+ <file>tapableTriangle.qml</file>
+ <file>strokeOrFill.qml</file>
+ <file>dashPattern.qml</file>
+ <file>linearGradient.qml</file>
+ <file>radialGradient.qml</file>
+ <file>fillRules.qml</file>
+ <file>joinStyles.qml</file>
+ <file>capStyles.qml</file>
+ <file>quadraticCurve.qml</file>
+ <file>cubicCurve.qml</file>
+ <file>ellipticalArcs.qml</file>
+ <file>gradientSpreadModes.qml</file>
+ <file>arcDirection.qml</file>
+ <file>largeOrSmallArc.qml</file>
+ <file>arcRotation.qml</file>
+ <file>tigerLoader.qml</file>
+ <file>text.qml</file>
+ <file>zoomtiger.qml</file>
+ <file>fillTransform.qml</file>
+ <file>rectangle.qml</file>
+ </qresource>
+</RCC>
diff --git a/examples/quick/quickshapes/shapes/strokeOrFill.qml b/examples/quick/quickshapes/shapes/strokeOrFill.qml
new file mode 100644
index 0000000000..c939ed067d
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/strokeOrFill.qml
@@ -0,0 +1,120 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+
+ Shape {
+ id: circ1
+ anchors.fill: parent
+
+ ShapePath {
+ id: p1
+ fillColor: "transparent" // stroke only
+ strokeWidth: 4
+
+ SequentialAnimation on strokeColor {
+ loops: Animation.Infinite
+ ColorAnimation {
+ from: "black"
+ to: "yellow"
+ duration: 5000
+ }
+ ColorAnimation {
+ from: "yellow"
+ to: "green"
+ duration: 5000
+ }
+ ColorAnimation {
+ from: "green"
+ to: "black"
+ duration: 5000
+ }
+ }
+
+ readonly property real r: 60
+ startX: circ1.width / 2 - r
+ startY: circ1.height / 2 - r
+ PathArc {
+ x: circ1.width / 2 + p1.r
+ y: circ1.height / 2 + p1.r
+ radiusX: p1.r
+ radiusY: p1.r
+ useLargeArc: true
+ }
+ PathArc {
+ x: circ1.width / 2 - p1.r
+ y: circ1.height / 2 - p1.r
+ radiusX: p1.r
+ radiusY: p1.r
+ useLargeArc: true
+ }
+ }
+ }
+
+ Shape {
+ id: circ2
+ anchors.fill: parent
+
+ SequentialAnimation on opacity {
+ loops: Animation.Infinite
+ NumberAnimation {
+ from: 1.0
+ to: 0.0
+ duration: 5000
+ }
+ NumberAnimation {
+ from: 0.0
+ to: 1.0
+ duration: 5000
+ }
+ }
+
+ ShapePath {
+ id: p2
+ strokeWidth: -1 // or strokeColor: "transparent"
+
+ SequentialAnimation on fillColor {
+ loops: Animation.Infinite
+ ColorAnimation {
+ from: "gray"
+ to: "purple"
+ duration: 3000
+ }
+ ColorAnimation {
+ from: "purple"
+ to: "red"
+ duration: 3000
+ }
+ ColorAnimation {
+ from: "red"
+ to: "gray"
+ duration: 3000
+ }
+ }
+
+ readonly property real r: 40
+ startX: circ2.width / 2 - r
+ startY: circ2.height / 2 - r
+ PathArc {
+ x: circ2.width / 2 + p2.r
+ y: circ2.height / 2 + p2.r
+ radiusX: p2.r
+ radiusY: p2.r
+ useLargeArc: true
+ }
+ PathArc {
+ x: circ2.width / 2 - p2.r
+ y: circ2.height / 2 - p2.r
+ radiusX: p2.r
+ radiusY: p2.r
+ useLargeArc: true
+ }
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/tapableTriangle.qml b/examples/quick/quickshapes/shapes/tapableTriangle.qml
new file mode 100644
index 0000000000..c76821e898
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/tapableTriangle.qml
@@ -0,0 +1,76 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ width: 256
+ height: 256
+ color: th.pressed ? "steelBlue" : "lightGray"
+ containmentMask: ctr
+
+ TapHandler {
+ id: th
+ }
+
+ Shape {
+ id: ctr
+ anchors.fill: parent
+ containsMode: Shape.FillContains
+
+ ShapePath {
+ strokeColor: "red"
+ fillColor: "blue"
+
+ SequentialAnimation on strokeWidth {
+ loops: Animation.Infinite
+ NumberAnimation {
+ from: 1
+ to: 30
+ duration: 5000
+ }
+ NumberAnimation {
+ from: 30
+ to: 1
+ duration: 5000
+ }
+ PauseAnimation {
+ duration: 2000
+ }
+ }
+
+ startX: 30
+ startY: 30
+ PathLine {
+ x: ctr.width - 30
+ y: ctr.height - 30
+ }
+ PathLine {
+ x: 30
+ y: ctr.height - 30
+ }
+ PathLine {
+ x: 30
+ y: 30
+ }
+ }
+
+ // Besides ShapePath, Shape supports visual and non-visual objects too, allowing
+ // free mixing without going through extra hoops:
+ Rectangle {
+ id: testRect
+ color: "green"
+ opacity: 0.3
+ width: 20
+ height: 20
+ anchors.right: parent.right
+ }
+ Timer {
+ interval: 100
+ repeat: true
+ onTriggered: testRect.width = testRect.width > 1 ? testRect.width - 1 : 20
+ running: true
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/text.qml b/examples/quick/quickshapes/shapes/text.qml
new file mode 100644
index 0000000000..8a105fb254
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/text.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+
+ Shape {
+ anchors.centerIn: parent
+ width: 200
+ height: 100
+
+ ShapePath {
+ id: capTest
+ strokeColor: "black"
+ strokeWidth: 1
+ fillColor: "black"
+
+ PathText {
+ x: 0
+ y: 0
+ text: qsTr("Qt!")
+ font.family: "Arial"
+ font.pixelSize: 150
+ }
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/tiger.qml b/examples/quick/quickshapes/shapes/tiger.qml
new file mode 100644
index 0000000000..40fcaf7fc2
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/tiger.qml
@@ -0,0 +1,3670 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Shape {
+ asynchronous: true
+ width: 494; height: 510
+ property bool highlightOnTap: true
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.172
+ PathMove { x: -122.304; y: 84.285 }
+ PathCubic { control1X: -122.304; control1Y: 84.285; control2X: -122.203; control2Y: 86.179; x: -123.027; y: 86.16 }
+ PathCubic { control1X: -123.851; control1Y: 86.141; control2X: -140.305; control2Y: 38.066; x: -160.833; y: 40.309 }
+ PathCubic { control1X: -160.833; control1Y: 40.309; control2X: -143.05; control2Y: 32.956; x: -122.304; y: 84.285 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.172
+ PathMove { x: -118.774; y: 81.262 }
+ PathCubic { control1X: -118.774; control1Y: 81.262; control2X: -119.323; control2Y: 83.078; x: -120.092; y: 82.779 }
+ PathCubic { control1X: -120.86; control1Y: 82.481; control2X: -119.977; control2Y: 31.675; x: -140.043; y: 26.801 }
+ PathCubic { control1X: -140.043; control1Y: 26.801; control2X: -120.82; control2Y: 25.937; x: -118.774; y: 81.262 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.172
+ PathMove { x: -91.284; y: 123.59 }
+ PathCubic { control1X: -91.284; control1Y: 123.59; control2X: -89.648; control2Y: 124.55; x: -90.118; y: 125.227 }
+ PathCubic { control1X: -90.589; control1Y: 125.904; control2X: -139.763; control2Y: 113.102; x: -149.218; y: 131.459 }
+ PathCubic { control1X: -149.218; control1Y: 131.459; control2X: -145.539; control2Y: 112.572; x: -91.284; y: 123.59 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.172
+ PathMove { x: -94.093; y: 133.801 }
+ PathCubic { control1X: -94.093; control1Y: 133.801; control2X: -92.237; control2Y: 134.197; x: -92.471; y: 134.988 }
+ PathCubic { control1X: -92.704; control1Y: 135.779; control2X: -143.407; control2Y: 139.121; x: -146.597; y: 159.522 }
+ PathCubic { control1X: -146.597; control1Y: 159.522; control2X: -149.055; control2Y: 140.437; x: -94.093; y: 133.801 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.172
+ PathMove { x: -98.304; y: 128.276 }
+ PathCubic { control1X: -98.304; control1Y: 128.276; control2X: -96.526; control2Y: 128.939; x: -96.872; y: 129.687 }
+ PathCubic { control1X: -97.218; control1Y: 130.435; control2X: -147.866; control2Y: 126.346; x: -153.998; y: 146.064 }
+ PathCubic { control1X: -153.998; control1Y: 146.064; control2X: -153.646; control2Y: 126.825; x: -98.304; y: 128.276 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.172
+ PathMove { x: -109.009; y: 110.072 }
+ PathCubic { control1X: -109.009; control1Y: 110.072; control2X: -107.701; control2Y: 111.446; x: -108.34; y: 111.967 }
+ PathCubic { control1X: -108.979; control1Y: 112.488; control2X: -152.722; control2Y: 86.634; x: -166.869; y: 101.676 }
+ PathCubic { control1X: -166.869; control1Y: 101.676; control2X: -158.128; control2Y: 84.533; x: -109.009; y: 110.072 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.172
+ PathMove { x: -116.554; y: 114.263 }
+ PathCubic { control1X: -116.554; control1Y: 114.263; control2X: -115.098; control2Y: 115.48; x: -115.674; y: 116.071 }
+ PathCubic { control1X: -116.25; control1Y: 116.661; control2X: -162.638; control2Y: 95.922; x: -174.992; y: 112.469 }
+ PathCubic { control1X: -174.992; control1Y: 112.469; control2X: -168.247; control2Y: 94.447; x: -116.554; y: 114.263 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.172
+ PathMove { x: -119.154; y: 118.335 }
+ PathCubic { control1X: -119.154; control1Y: 118.335; control2X: -117.546; control2Y: 119.343; x: -118.036; y: 120.006 }
+ PathCubic { control1X: -118.526; control1Y: 120.669; control2X: -167.308; control2Y: 106.446; x: -177.291; y: 124.522 }
+ PathCubic { control1X: -177.291; control1Y: 124.522; control2X: -173.066; control2Y: 105.749; x: -119.154; y: 118.335 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.172
+ PathMove { x: -108.42; y: 118.949 }
+ PathCubic { control1X: -108.42; control1Y: 118.949; control2X: -107.298; control2Y: 120.48; x: -107.999; y: 120.915 }
+ PathCubic { control1X: -108.7; control1Y: 121.35; control2X: -148.769; control2Y: 90.102; x: -164.727; y: 103.207 }
+ PathCubic { control1X: -164.727; control1Y: 103.207; control2X: -153.862; control2Y: 87.326; x: -108.42; y: 118.949 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.172
+ PathMove { x: -128.2; y: 90 }
+ PathCubic { control1X: -128.2; control1Y: 90; control2X: -127.6; control2Y: 91.8; x: -128.4; y: 92 }
+ PathCubic { control1X: -129.2; control1Y: 92.2; control2X: -157.8; control2Y: 50.2; x: -177.001; y: 57.8 }
+ PathCubic { control1X: -177.001; control1Y: 57.8; control2X: -161.8; control2Y: 46; x: -128.2; y: 90 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.172
+ PathMove { x: -127.505; y: 96.979 }
+ PathCubic { control1X: -127.505; control1Y: 96.979; control2X: -126.53; control2Y: 98.608; x: -127.269; y: 98.975 }
+ PathCubic { control1X: -128.007; control1Y: 99.343; control2X: -164.992; control2Y: 64.499; x: -182.101; y: 76.061 }
+ PathCubic { control1X: -182.101; control1Y: 76.061; control2X: -169.804; control2Y: 61.261; x: -127.505; y: 96.979 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.172
+ PathMove { x: -127.62; y: 101.349 }
+ PathCubic { control1X: -127.62; control1Y: 101.349; control2X: -126.498; control2Y: 102.88; x: -127.199; y: 103.315 }
+ PathCubic { control1X: -127.9; control1Y: 103.749; control2X: -167.969; control2Y: 72.502; x: -183.927; y: 85.607 }
+ PathCubic { control1X: -183.927; control1Y: 85.607; control2X: -173.062; control2Y: 69.726; x: -127.62; y: 101.349 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 1
+ PathMove { x: -129.83; y: 103.065 }
+ PathCubic { control1X: -129.327; control1Y: 109.113; control2X: -128.339; control2Y: 115.682; x: -126.6; y: 118.801 }
+ PathCubic { control1X: -126.6; control1Y: 118.801; control2X: -130.2; control2Y: 131.201; x: -121.4; y: 144.401 }
+ PathCubic { control1X: -121.4; control1Y: 144.401; control2X: -121.8; control2Y: 151.601; x: -120.2; y: 154.801 }
+ PathCubic { control1X: -120.2; control1Y: 154.801; control2X: -116.2; control2Y: 163.201; x: -111.4; y: 164.001 }
+ PathCubic { control1X: -107.516; control1Y: 164.648; control2X: -98.793; control2Y: 167.717; x: -88.932; y: 169.121 }
+ PathCubic { control1X: -88.932; control1Y: 169.121; control2X: -71.8; control2Y: 183.201; x: -75; y: 196.001 }
+ PathCubic { control1X: -75; control1Y: 196.001; control2X: -75.4; control2Y: 212.401; x: -79; y: 214.001 }
+ PathCubic { control1X: -79; control1Y: 214.001; control2X: -67.4; control2Y: 202.801; x: -77; y: 219.601 }
+ PathLine { x: -81.4; y: 238.401 }
+ PathCubic { control1X: -81.4; control1Y: 238.401; control2X: -55.8; control2Y: 216.801; x: -71.4; y: 235.201 }
+ PathLine { x: -81.4; y: 261.201 }
+ PathCubic { control1X: -81.4; control1Y: 261.201; control2X: -61.8; control2Y: 242.801; x: -69; y: 251.201 }
+ PathLine { x: -72.2; y: 260.001 }
+ PathCubic { control1X: -72.2; control1Y: 260.001; control2X: -29; control2Y: 232.801; x: -59.8; y: 262.401 }
+ PathCubic { control1X: -59.8; control1Y: 262.401; control2X: -51.8; control2Y: 258.801; x: -47.4; y: 261.601 }
+ PathCubic { control1X: -47.4; control1Y: 261.601; control2X: -40.6; control2Y: 260.401; x: -41.4; y: 262.001 }
+ PathCubic { control1X: -41.4; control1Y: 262.001; control2X: -62.2; control2Y: 272.401; x: -65.8; y: 290.801 }
+ PathCubic { control1X: -65.8; control1Y: 290.801; control2X: -57.4; control2Y: 280.801; x: -60.6; y: 291.601 }
+ PathLine { x: -60.2; y: 303.201 }
+ PathCubic { control1X: -60.2; control1Y: 303.201; control2X: -56.2; control2Y: 281.601; x: -56.6; y: 319.201 }
+ PathCubic { control1X: -56.6; control1Y: 319.201; control2X: -37.4; control2Y: 301.201; x: -49; y: 322.001 }
+ PathLine { x: -49; y: 338.801 }
+ PathCubic { control1X: -49; control1Y: 338.801; control2X: -33.8; control2Y: 322.401; x: -40.2; y: 335.201 }
+ PathCubic { control1X: -40.2; control1Y: 335.201; control2X: -30.2; control2Y: 326.401; x: -34.2; y: 341.601 }
+ PathCubic { control1X: -34.2; control1Y: 341.601; control2X: -35; control2Y: 352.001; x: -30.6; y: 340.801 }
+ PathCubic { control1X: -30.6; control1Y: 340.801; control2X: -14.6; control2Y: 310.201; x: -20.6; y: 336.401 }
+ PathCubic { control1X: -20.6; control1Y: 336.401; control2X: -21.4; control2Y: 355.601; x: -16.6; y: 340.801 }
+ PathCubic { control1X: -16.6; control1Y: 340.801; control2X: -16.2; control2Y: 351.201; x: -7; y: 358.401 }
+ PathCubic { control1X: -7; control1Y: 358.401; control2X: -8.2; control2Y: 307.601; x: 4.6; y: 343.601 }
+ PathLine { x: 8.6; y: 360.001 }
+ PathCubic { control1X: 8.6; control1Y: 360.001; control2X: 11.4; control2Y: 350.801; x: 11; y: 345.601 }
+ PathCubic { control1X: 11; control1Y: 345.601; control2X: 25.8; control2Y: 329.201; x: 19; y: 353.601 }
+ PathCubic { control1X: 19; control1Y: 353.601; control2X: 34.2; control2Y: 330.801; x: 31; y: 344.001 }
+ PathCubic { control1X: 31; control1Y: 344.001; control2X: 23.4; control2Y: 360.001; x: 25; y: 364.801 }
+ PathCubic { control1X: 25; control1Y: 364.801; control2X: 41.8; control2Y: 330.001; x: 43; y: 328.401 }
+ PathCubic { control1X: 43; control1Y: 328.401; control2X: 41; control2Y: 370.802; x: 51.8; y: 334.801 }
+ PathCubic { control1X: 51.8; control1Y: 334.801; control2X: 57.4; control2Y: 346.801; x: 54.6; y: 351.201 }
+ PathCubic { control1X: 54.6; control1Y: 351.201; control2X: 62.6; control2Y: 343.201; x: 61.8; y: 340.001 }
+ PathCubic { control1X: 61.8; control1Y: 340.001; control2X: 66.4; control2Y: 331.801; x: 69.2; y: 345.401 }
+ PathCubic { control1X: 69.2; control1Y: 345.401; control2X: 71; control2Y: 354.801; x: 72.6; y: 351.601 }
+ PathCubic { control1X: 72.6; control1Y: 351.601; control2X: 76.6; control2Y: 375.602; x: 77.8; y: 352.801 }
+ PathCubic { control1X: 77.8; control1Y: 352.801; control2X: 79.4; control2Y: 339.201; x: 72.2; y: 327.601 }
+ PathCubic { control1X: 72.2; control1Y: 327.601; control2X: 73; control2Y: 324.401; x: 70.2; y: 320.401 }
+ PathCubic { control1X: 70.2; control1Y: 320.401; control2X: 83.8; control2Y: 342.001; x: 76.6; y: 313.201 }
+ PathCubic { control1X: 76.6; control1Y: 313.201; control2X: 87.801; control2Y: 321.201; x: 89.001; y: 321.201 }
+ PathCubic { control1X: 89.001; control1Y: 321.201; control2X: 75.4; control2Y: 298.001; x: 84.2; y: 302.801 }
+ PathCubic { control1X: 84.2; control1Y: 302.801; control2X: 79; control2Y: 292.401; x: 97.001; y: 304.401 }
+ PathCubic { control1X: 97.001; control1Y: 304.401; control2X: 81; control2Y: 288.401; x: 98.601; y: 298.001 }
+ PathCubic { control1X: 98.601; control1Y: 298.001; control2X: 106.601; control2Y: 304.401; x: 99.001; y: 294.401 }
+ PathCubic { control1X: 99.001; control1Y: 294.401; control2X: 84.6; control2Y: 278.401; x: 106.601; y: 296.401 }
+ PathCubic { control1X: 106.601; control1Y: 296.401; control2X: 118.201; control2Y: 312.801; x: 119.001; y: 315.601 }
+ PathCubic { control1X: 119.001; control1Y: 315.601; control2X: 109.001; control2Y: 286.401; x: 104.601; y: 283.601 }
+ PathCubic { control1X: 104.601; control1Y: 283.601; control2X: 113.001; control2Y: 247.201; x: 154.201; y: 262.801 }
+ PathCubic { control1X: 154.201; control1Y: 262.801; control2X: 161.001; control2Y: 280.001; x: 165.401; y: 261.601 }
+ PathCubic { control1X: 165.401; control1Y: 261.601; control2X: 178.201; control2Y: 255.201; x: 189.401; y: 282.801 }
+ PathCubic { control1X: 189.401; control1Y: 282.801; control2X: 193.401; control2Y: 269.201; x: 192.601; y: 266.401 }
+ PathCubic { control1X: 192.601; control1Y: 266.401; control2X: 199.401; control2Y: 267.601; x: 198.601; y: 266.401 }
+ PathCubic { control1X: 198.601; control1Y: 266.401; control2X: 211.801; control2Y: 270.801; x: 213.001; y: 270.001 }
+ PathCubic { control1X: 213.001; control1Y: 270.001; control2X: 219.801; control2Y: 276.801; x: 220.201; y: 273.201 }
+ PathCubic { control1X: 220.201; control1Y: 273.201; control2X: 229.401; control2Y: 276.001; x: 227.401; y: 272.401 }
+ PathCubic { control1X: 227.401; control1Y: 272.401; control2X: 236.201; control2Y: 288.001; x: 236.601; y: 291.601 }
+ PathLine { x: 239.001; y: 277.601 }
+ PathLine { x: 241.001; y: 280.401 }
+ PathCubic { control1X: 241.001; control1Y: 280.401; control2X: 242.601; control2Y: 272.801; x: 241.801; y: 271.601 }
+ PathCubic { control1X: 241.001; control1Y: 270.401; control2X: 261.801; control2Y: 278.401; x: 266.601; y: 299.201 }
+ PathLine { x: 268.601; y: 307.601 }
+ PathCubic { control1X: 268.601; control1Y: 307.601; control2X: 274.601; control2Y: 292.801; x: 273.001; y: 288.801 }
+ PathCubic { control1X: 273.001; control1Y: 288.801; control2X: 278.201; control2Y: 289.601; x: 278.601; y: 294.001 }
+ PathCubic { control1X: 278.601; control1Y: 294.001; control2X: 282.601; control2Y: 270.801; x: 277.801; y: 264.801 }
+ PathCubic { control1X: 277.801; control1Y: 264.801; control2X: 282.201; control2Y: 264.001; x: 283.401; y: 267.601 }
+ PathLine { x: 283.401; y: 260.401 }
+ PathCubic { control1X: 283.401; control1Y: 260.401; control2X: 290.601; control2Y: 261.201; x: 290.601; y: 258.801 }
+ PathCubic { control1X: 290.601; control1Y: 258.801; control2X: 295.001; control2Y: 254.801; x: 297.001; y: 259.601 }
+ PathCubic { control1X: 297.001; control1Y: 259.601; control2X: 284.601; control2Y: 224.401; x: 303.001; y: 243.601 }
+ PathCubic { control1X: 303.001; control1Y: 243.601; control2X: 310.201; control2Y: 254.401; x: 306.601; y: 235.601 }
+ PathCubic { control1X: 303.001; control1Y: 216.801; control2X: 299.001; control2Y: 215.201; x: 303.801; y: 214.801 }
+ PathCubic { control1X: 303.801; control1Y: 214.801; control2X: 304.601; control2Y: 211.201; x: 302.601; y: 209.601 }
+ PathCubic { control1X: 300.601; control1Y: 208.001; control2X: 303.801; control2Y: 209.601; x: 303.801; y: 209.601 }
+ PathCubic { control1X: 303.801; control1Y: 209.601; control2X: 308.601; control2Y: 213.601; x: 303.401; y: 191.601 }
+ PathCubic { control1X: 303.401; control1Y: 191.601; control2X: 309.801; control2Y: 193.201; x: 297.801; y: 164.001 }
+ PathCubic { control1X: 297.801; control1Y: 164.001; control2X: 300.601; control2Y: 161.601; x: 296.601; y: 153.201 }
+ PathCubic { control1X: 296.601; control1Y: 153.201; control2X: 304.601; control2Y: 157.601; x: 307.401; y: 156.001 }
+ PathCubic { control1X: 307.401; control1Y: 156.001; control2X: 307.001; control2Y: 154.401; x: 303.801; y: 150.401 }
+ PathCubic { control1X: 303.801; control1Y: 150.401; control2X: 282.201; control2Y: 95.6; x: 302.601; y: 117.601 }
+ PathCubic { control1X: 302.601; control1Y: 117.601; control2X: 314.451; control2Y: 131.151; x: 308.051; y: 108.351 }
+ PathCubic { control1X: 308.051; control1Y: 108.351; control2X: 298.94; control2Y: 84.341; x: 299.717; y: 80.045 }
+ PathLine { x: -129.83; y: 103.065 }
+ }
+
+ ShapePath {
+ fillColor: "#cc7226"
+ strokeColor: "#000000"
+ strokeWidth: 1
+ PathMove { x: 299.717; y: 80.245 }
+ PathCubic { control1X: 300.345; control1Y: 80.426; control2X: 302.551; control2Y: 81.55; x: 303.801; y: 83.2 }
+ PathCubic { control1X: 303.801; control1Y: 83.2; control2X: 310.601; control2Y: 94; x: 305.401; y: 75.6 }
+ PathCubic { control1X: 305.401; control1Y: 75.6; control2X: 296.201; control2Y: 46.8; x: 305.001; y: 58 }
+ PathCubic { control1X: 305.001; control1Y: 58; control2X: 311.001; control2Y: 65.2; x: 307.801; y: 51.6 }
+ PathCubic { control1X: 303.936; control1Y: 35.173; control2X: 301.401; control2Y: 28.8; x: 301.401; y: 28.8 }
+ PathCubic { control1X: 301.401; control1Y: 28.8; control2X: 313.001; control2Y: 33.6; x: 286.201; y: -6 }
+ PathLine { x: 295.001; y: -2.4 }
+ PathCubic { control1X: 295.001; control1Y: -2.4; control2X: 275.401; control2Y: -42; x: 253.801; y: -47.2 }
+ PathLine { x: 245.801; y: -53.2 }
+ PathCubic { control1X: 245.801; control1Y: -53.2; control2X: 284.201; control2Y: -91.2; x: 271.401; y: -128 }
+ PathCubic { control1X: 271.401; control1Y: -128; control2X: 264.601; control2Y: -133.2; x: 255.001; y: -124 }
+ PathCubic { control1X: 255.001; control1Y: -124; control2X: 248.601; control2Y: -119.2; x: 242.601; y: -120.8 }
+ PathCubic { control1X: 242.601; control1Y: -120.8; control2X: 211.801; control2Y: -119.6; x: 209.801; y: -119.6 }
+ PathCubic { control1X: 207.801; control1Y: -119.6; control2X: 173.001; control2Y: -156.8; x: 107.401; y: -139.2 }
+ PathCubic { control1X: 107.401; control1Y: -139.2; control2X: 102.201; control2Y: -137.2; x: 97.801; y: -138.4 }
+ PathCubic { control1X: 97.801; control1Y: -138.4; control2X: 79.4; control2Y: -154.4; x: 30.6; y: -131.6 }
+ PathCubic { control1X: 30.6; control1Y: -131.6; control2X: 20.6; control2Y: -129.6; x: 19; y: -129.6 }
+ PathCubic { control1X: 17.4; control1Y: -129.6; control2X: 14.6; control2Y: -129.6; x: 6.6; y: -123.2 }
+ PathCubic { control1X: -1.4; control1Y: -116.8; control2X: -1.8; control2Y: -116; x: -3.8; y: -114.4 }
+ PathCubic { control1X: -3.8; control1Y: -114.4; control2X: -20.2; control2Y: -103.2; x: -25; y: -102.4 }
+ PathCubic { control1X: -25; control1Y: -102.4; control2X: -36.6; control2Y: -96; x: -41; y: -86 }
+ PathLine { x: -44.6; y: -84.8 }
+ PathCubic { control1X: -44.6; control1Y: -84.8; control2X: -46.2; control2Y: -77.6; x: -46.6; y: -76.4 }
+ PathCubic { control1X: -46.6; control1Y: -76.4; control2X: -51.4; control2Y: -72.8; x: -52.2; y: -67.2 }
+ PathCubic { control1X: -52.2; control1Y: -67.2; control2X: -61; control2Y: -61.2; x: -60.6; y: -56.8 }
+ PathCubic { control1X: -60.6; control1Y: -56.8; control2X: -62.2; control2Y: -51.6; x: -63; y: -46.8 }
+ PathCubic { control1X: -63; control1Y: -46.8; control2X: -70.2; control2Y: -42; x: -69.4; y: -39.2 }
+ PathCubic { control1X: -69.4; control1Y: -39.2; control2X: -77; control2Y: -25.2; x: -75.8; y: -18.4 }
+ PathCubic { control1X: -75.8; control1Y: -18.4; control2X: -82.2; control2Y: -18.8; x: -85; y: -16.4 }
+ PathCubic { control1X: -85; control1Y: -16.4; control2X: -85.8; control2Y: -11.6; x: -87.4; y: -11.2 }
+ PathCubic { control1X: -87.4; control1Y: -11.2; control2X: -90.2; control2Y: -10; x: -87.8; y: -6 }
+ PathCubic { control1X: -87.8; control1Y: -6; control2X: -89.4; control2Y: -3.2; x: -89.8; y: -1.6 }
+ PathCubic { control1X: -89.8; control1Y: -1.6; control2X: -89; control2Y: 1.2; x: -93.4; y: 6.8 }
+ PathCubic { control1X: -93.4; control1Y: 6.8; control2X: -99.8; control2Y: 25.6; x: -97.8; y: 30.8 }
+ PathCubic { control1X: -97.8; control1Y: 30.8; control2X: -97.4; control2Y: 35.6; x: -100.2; y: 37.2 }
+ PathCubic { control1X: -100.2; control1Y: 37.2; control2X: -103.8; control2Y: 36.8; x: -95.4; y: 48.8 }
+ PathCubic { control1X: -95.4; control1Y: 48.8; control2X: -94.6; control2Y: 50; x: -97.8; y: 52.4 }
+ PathCubic { control1X: -97.8; control1Y: 52.4; control2X: -115; control2Y: 56; x: -117.4; y: 72.4 }
+ PathCubic { control1X: -117.4; control1Y: 72.4; control2X: -131; control2Y: 87.2; x: -131; y: 92.4 }
+ PathCubic { control1X: -131; control1Y: 94.705; control2X: -130.729; control2Y: 97.852; x: -130.03; y: 102.465 }
+ PathCubic { control1X: -130.03; control1Y: 102.465; control2X: -130.6; control2Y: 110.801; x: -103; y: 111.601 }
+ PathCubic { control1X: -75.4; control1Y: 112.401; control2X: 299.717; control2Y: 80.245; x: 299.717; y: 80.245 }
+ }
+
+ ShapePath {
+ fillColor: "#cc7226"
+ strokeWidth: -1
+ PathMove { x: -115.6; y: 102.6 }
+ PathCubic { control1X: -140.6; control1Y: 63.2; control2X: -126.2; control2Y: 119.601; x: -126.2; y: 119.601 }
+ PathCubic { control1X: -117.4; control1Y: 154.001; control2X: 12.2; control2Y: 116.401; x: 12.2; y: 116.401 }
+ PathCubic { control1X: 12.2; control1Y: 116.401; control2X: 181.001; control2Y: 86; x: 192.201; y: 82 }
+ PathCubic { control1X: 203.401; control1Y: 78; control2X: 298.601; control2Y: 84.4; x: 298.601; y: 84.4 }
+ PathLine { x: 293.001; y: 67.6 }
+ PathCubic { control1X: 228.201; control1Y: 21.2; control2X: 209.001; control2Y: 44.4; x: 195.401; y: 40.4 }
+ PathCubic { control1X: 181.801; control1Y: 36.4; control2X: 184.201; control2Y: 46; x: 181.001; y: 46.8 }
+ PathCubic { control1X: 177.801; control1Y: 47.6; control2X: 138.601; control2Y: 22.8; x: 132.201; y: 23.6 }
+ PathCubic { control1X: 125.801; control1Y: 24.4; control2X: 100.459; control2Y: 0.649; x: 115.401; y: 32.4 }
+ PathCubic { control1X: 131.401; control1Y: 66.4; control2X: 57; control2Y: 71.6; x: 40.2; y: 60.4 }
+ PathCubic { control1X: 23.4; control1Y: 49.2; control2X: 47.4; control2Y: 78.8; x: 47.4; y: 78.8 }
+ PathCubic { control1X: 65.8; control1Y: 98.8; control2X: 31.4; control2Y: 82; x: 31.4; y: 82 }
+ PathCubic { control1X: -3; control1Y: 69.2; control2X: -27; control2Y: 94.8; x: -30.2; y: 95.6 }
+ PathCubic { control1X: -33.4; control1Y: 96.4; control2X: -38.2; control2Y: 99.6; x: -39; y: 93.2 }
+ PathCubic { control1X: -39.8; control1Y: 86.8; control2X: -47.31; control2Y: 70.099; x: -79; y: 96.4 }
+ PathCubic { control1X: -99; control1Y: 113.001; control2X: -112.8; control2Y: 91; x: -112.8; y: 91 }
+ PathLine { x: -115.6; y: 102.6 }
+ }
+
+ ShapePath {
+ fillColor: "#e87f3a"
+ strokeWidth: -1
+ PathMove { x: 133.51; y: 25.346 }
+ PathCubic { control1X: 127.11; control1Y: 26.146; control2X: 101.743; control2Y: 2.407; x: 116.71; y: 34.146 }
+ PathCubic { control1X: 133.31; control1Y: 69.346; control2X: 58.31; control2Y: 73.346; x: 41.51; y: 62.146 }
+ PathCubic { control1X: 24.709; control1Y: 50.946; control2X: 48.71; control2Y: 80.546; x: 48.71; y: 80.546 }
+ PathCubic { control1X: 67.11; control1Y: 100.546; control2X: 32.709; control2Y: 83.746; x: 32.709; y: 83.746 }
+ PathCubic { control1X: -1.691; control1Y: 70.946; control2X: -25.691; control2Y: 96.546; x: -28.891; y: 97.346 }
+ PathCubic { control1X: -32.091; control1Y: 98.146; control2X: -36.891; control2Y: 101.346; x: -37.691; y: 94.946 }
+ PathCubic { control1X: -38.491; control1Y: 88.546; control2X: -45.87; control2Y: 72.012; x: -77.691; y: 98.146 }
+ PathCubic { control1X: -98.927; control1Y: 115.492; control2X: -112.418; control2Y: 94.037; x: -112.418; y: 94.037 }
+ PathLine { x: -115.618; y: 104.146 }
+ PathCubic { control1X: -140.618; control1Y: 64.346; control2X: -125.546; control2Y: 122.655; x: -125.546; y: 122.655 }
+ PathCubic { control1X: -116.745; control1Y: 157.056; control2X: 13.509; control2Y: 118.146; x: 13.509; y: 118.146 }
+ PathCubic { control1X: 13.509; control1Y: 118.146; control2X: 182.31; control2Y: 87.746; x: 193.51; y: 83.746 }
+ PathCubic { control1X: 204.71; control1Y: 79.746; control2X: 299.038; control2Y: 86.073; x: 299.038; y: 86.073 }
+ PathLine { x: 293.51; y: 68.764 }
+ PathCubic { control1X: 228.71; control1Y: 22.364; control2X: 210.31; control2Y: 46.146; x: 196.71; y: 42.146 }
+ PathCubic { control1X: 183.11; control1Y: 38.146; control2X: 185.51; control2Y: 47.746; x: 182.31; y: 48.546 }
+ PathCubic { control1X: 179.11; control1Y: 49.346; control2X: 139.91; control2Y: 24.546; x: 133.51; y: 25.346 }
+ }
+
+ ShapePath {
+ fillColor: "#ea8c4d"
+ strokeWidth: -1
+ PathMove { x: 134.819; y: 27.091 }
+ PathCubic { control1X: 128.419; control1Y: 27.891; control2X: 103.685; control2Y: 3.862; x: 118.019; y: 35.891 }
+ PathCubic { control1X: 134.219; control1Y: 72.092; control2X: 59.619; control2Y: 75.092; x: 42.819; y: 63.892 }
+ PathCubic { control1X: 26.019; control1Y: 52.692; control2X: 50.019; control2Y: 82.292; x: 50.019; y: 82.292 }
+ PathCubic { control1X: 68.419; control1Y: 102.292; control2X: 34.019; control2Y: 85.492; x: 34.019; y: 85.492 }
+ PathCubic { control1X: -0.381; control1Y: 72.692; control2X: -24.382; control2Y: 98.292; x: -27.582; y: 99.092 }
+ PathCubic { control1X: -30.782; control1Y: 99.892; control2X: -35.582; control2Y: 103.092; x: -36.382; y: 96.692 }
+ PathCubic { control1X: -37.182; control1Y: 90.292; control2X: -44.43; control2Y: 73.925; x: -76.382; y: 99.892 }
+ PathCubic { control1X: -98.855; control1Y: 117.983; control2X: -112.036; control2Y: 97.074; x: -112.036; y: 97.074 }
+ PathLine { x: -115.636; y: 105.692 }
+ PathCubic { control1X: -139.436; control1Y: 66.692; control2X: -124.891; control2Y: 125.71; x: -124.891; y: 125.71 }
+ PathCubic { control1X: -116.091; control1Y: 160.11; control2X: 14.819; control2Y: 119.892; x: 14.819; y: 119.892 }
+ PathCubic { control1X: 14.819; control1Y: 119.892; control2X: 183.619; control2Y: 89.492; x: 194.819; y: 85.492 }
+ PathCubic { control1X: 206.019; control1Y: 81.492; control2X: 299.474; control2Y: 87.746; x: 299.474; y: 87.746 }
+ PathLine { x: 294.02; y: 69.928 }
+ PathCubic { control1X: 229.219; control1Y: 23.528; control2X: 211.619; control2Y: 47.891; x: 198.019; y: 43.891 }
+ PathCubic { control1X: 184.419; control1Y: 39.891; control2X: 186.819; control2Y: 49.491; x: 183.619; y: 50.292 }
+ PathCubic { control1X: 180.419; control1Y: 51.092; control2X: 141.219; control2Y: 26.291; x: 134.819; y: 27.091 }
+ }
+
+ ShapePath {
+ fillColor: "#ec9961"
+ strokeWidth: -1
+ PathMove { x: 136.128; y: 28.837 }
+ PathCubic { control1X: 129.728; control1Y: 29.637; control2X: 104.999; control2Y: 5.605; x: 119.328; y: 37.637 }
+ PathCubic { control1X: 136.128; control1Y: 75.193; control2X: 60.394; control2Y: 76.482; x: 44.128; y: 65.637 }
+ PathCubic { control1X: 27.328; control1Y: 54.437; control2X: 51.328; control2Y: 84.037; x: 51.328; y: 84.037 }
+ PathCubic { control1X: 69.728; control1Y: 104.037; control2X: 35.328; control2Y: 87.237; x: 35.328; y: 87.237 }
+ PathCubic { control1X: 0.928; control1Y: 74.437; control2X: -23.072; control2Y: 100.037; x: -26.272; y: 100.837 }
+ PathCubic { control1X: -29.472; control1Y: 101.637; control2X: -34.272; control2Y: 104.837; x: -35.072; y: 98.437 }
+ PathCubic { control1X: -35.872; control1Y: 92.037; control2X: -42.989; control2Y: 75.839; x: -75.073; y: 101.637 }
+ PathCubic { control1X: -98.782; control1Y: 120.474; control2X: -111.655; control2Y: 100.11; x: -111.655; y: 100.11 }
+ PathLine { x: -115.655; y: 107.237 }
+ PathCubic { control1X: -137.455; control1Y: 70.437; control2X: -124.236; control2Y: 128.765; x: -124.236; y: 128.765 }
+ PathCubic { control1X: -115.436; control1Y: 163.165; control2X: 16.128; control2Y: 121.637; x: 16.128; y: 121.637 }
+ PathCubic { control1X: 16.128; control1Y: 121.637; control2X: 184.928; control2Y: 91.237; x: 196.129; y: 87.237 }
+ PathCubic { control1X: 207.329; control1Y: 83.237; control2X: 299.911; control2Y: 89.419; x: 299.911; y: 89.419 }
+ PathLine { x: 294.529; y: 71.092 }
+ PathCubic { control1X: 229.729; control1Y: 24.691; control2X: 212.929; control2Y: 49.637; x: 199.329; y: 45.637 }
+ PathCubic { control1X: 185.728; control1Y: 41.637; control2X: 188.128; control2Y: 51.237; x: 184.928; y: 52.037 }
+ PathCubic { control1X: 181.728; control1Y: 52.837; control2X: 142.528; control2Y: 28.037; x: 136.128; y: 28.837 }
+ }
+
+ ShapePath {
+ fillColor: "#eea575"
+ strokeWidth: -1
+ PathMove { x: 137.438; y: 30.583 }
+ PathCubic { control1X: 131.037; control1Y: 31.383; control2X: 106.814; control2Y: 7.129; x: 120.637; y: 39.383 }
+ PathCubic { control1X: 137.438; control1Y: 78.583; control2X: 62.237; control2Y: 78.583; x: 45.437; y: 67.383 }
+ PathCubic { control1X: 28.637; control1Y: 56.183; control2X: 52.637; control2Y: 85.783; x: 52.637; y: 85.783 }
+ PathCubic { control1X: 71.037; control1Y: 105.783; control2X: 36.637; control2Y: 88.983; x: 36.637; y: 88.983 }
+ PathCubic { control1X: 2.237; control1Y: 76.183; control2X: -21.763; control2Y: 101.783; x: -24.963; y: 102.583 }
+ PathCubic { control1X: -28.163; control1Y: 103.383; control2X: -32.963; control2Y: 106.583; x: -33.763; y: 100.183 }
+ PathCubic { control1X: -34.563; control1Y: 93.783; control2X: -41.548; control2Y: 77.752; x: -73.763; y: 103.383 }
+ PathCubic { control1X: -98.709; control1Y: 122.965; control2X: -111.273; control2Y: 103.146; x: -111.273; y: 103.146 }
+ PathLine { x: -115.673; y: 108.783 }
+ PathCubic { control1X: -135.473; control1Y: 73.982; control2X: -123.582; control2Y: 131.819; x: -123.582; y: 131.819 }
+ PathCubic { control1X: -114.782; control1Y: 166.22; control2X: 17.437; control2Y: 123.383; x: 17.437; y: 123.383 }
+ PathCubic { control1X: 17.437; control1Y: 123.383; control2X: 186.238; control2Y: 92.983; x: 197.438; y: 88.983 }
+ PathCubic { control1X: 208.638; control1Y: 84.983; control2X: 300.347; control2Y: 91.092; x: 300.347; y: 91.092 }
+ PathLine { x: 295.038; y: 72.255 }
+ PathCubic { control1X: 230.238; control1Y: 25.855; control2X: 214.238; control2Y: 51.383; x: 200.638; y: 47.383 }
+ PathCubic { control1X: 187.038; control1Y: 43.383; control2X: 189.438; control2Y: 52.983; x: 186.238; y: 53.783 }
+ PathCubic { control1X: 183.038; control1Y: 54.583; control2X: 143.838; control2Y: 29.783; x: 137.438; y: 30.583 }
+ }
+
+ ShapePath {
+ fillColor: "#f1b288"
+ strokeWidth: -1
+ PathMove { x: 138.747; y: 32.328 }
+ PathCubic { control1X: 132.347; control1Y: 33.128; control2X: 106.383; control2Y: 9.677; x: 121.947; y: 41.128 }
+ PathCubic { control1X: 141.147; control1Y: 79.928; control2X: 63.546; control2Y: 80.328; x: 46.746; y: 69.128 }
+ PathCubic { control1X: 29.946; control1Y: 57.928; control2X: 53.946; control2Y: 87.528; x: 53.946; y: 87.528 }
+ PathCubic { control1X: 72.346; control1Y: 107.528; control2X: 37.946; control2Y: 90.728; x: 37.946; y: 90.728 }
+ PathCubic { control1X: 3.546; control1Y: 77.928; control2X: -20.454; control2Y: 103.528; x: -23.654; y: 104.328 }
+ PathCubic { control1X: -26.854; control1Y: 105.128; control2X: -31.654; control2Y: 108.328; x: -32.454; y: 101.928 }
+ PathCubic { control1X: -33.254; control1Y: 95.528; control2X: -40.108; control2Y: 79.665; x: -72.454; y: 105.128 }
+ PathCubic { control1X: -98.636; control1Y: 125.456; control2X: -110.891; control2Y: 106.183; x: -110.891; y: 106.183 }
+ PathLine { x: -115.691; y: 110.328 }
+ PathCubic { control1X: -133.691; control1Y: 77.128; control2X: -122.927; control2Y: 134.874; x: -122.927; y: 134.874 }
+ PathCubic { control1X: -114.127; control1Y: 169.274; control2X: 18.746; control2Y: 125.128; x: 18.746; y: 125.128 }
+ PathCubic { control1X: 18.746; control1Y: 125.128; control2X: 187.547; control2Y: 94.728; x: 198.747; y: 90.728 }
+ PathCubic { control1X: 209.947; control1Y: 86.728; control2X: 300.783; control2Y: 92.764; x: 300.783; y: 92.764 }
+ PathLine { x: 295.547; y: 73.419 }
+ PathCubic { control1X: 230.747; control1Y: 27.019; control2X: 215.547; control2Y: 53.128; x: 201.947; y: 49.128 }
+ PathCubic { control1X: 188.347; control1Y: 45.128; control2X: 190.747; control2Y: 54.728; x: 187.547; y: 55.528 }
+ PathCubic { control1X: 184.347; control1Y: 56.328; control2X: 145.147; control2Y: 31.528; x: 138.747; y: 32.328 }
+ }
+
+ ShapePath {
+ fillColor: "#f3bf9c"
+ strokeWidth: -1
+ PathMove { x: 140.056; y: 34.073 }
+ PathCubic { control1X: 133.655; control1Y: 34.873; control2X: 107.313; control2Y: 11.613; x: 123.255; y: 42.873 }
+ PathCubic { control1X: 143.656; control1Y: 82.874; control2X: 64.855; control2Y: 82.074; x: 48.055; y: 70.874 }
+ PathCubic { control1X: 31.255; control1Y: 59.674; control2X: 55.255; control2Y: 89.274; x: 55.255; y: 89.274 }
+ PathCubic { control1X: 73.655; control1Y: 109.274; control2X: 39.255; control2Y: 92.474; x: 39.255; y: 92.474 }
+ PathCubic { control1X: 4.855; control1Y: 79.674; control2X: -19.145; control2Y: 105.274; x: -22.345; y: 106.074 }
+ PathCubic { control1X: -25.545; control1Y: 106.874; control2X: -30.345; control2Y: 110.074; x: -31.145; y: 103.674 }
+ PathCubic { control1X: -31.945; control1Y: 97.274; control2X: -38.668; control2Y: 81.578; x: -71.145; y: 106.874 }
+ PathCubic { control1X: -98.564; control1Y: 127.947; control2X: -110.509; control2Y: 109.219; x: -110.509; y: 109.219 }
+ PathLine { x: -115.709; y: 111.874 }
+ PathCubic { control1X: -131.709; control1Y: 81.674; control2X: -122.273; control2Y: 137.929; x: -122.273; y: 137.929 }
+ PathCubic { control1X: -113.473; control1Y: 172.329; control2X: 20.055; control2Y: 126.874; x: 20.055; y: 126.874 }
+ PathCubic { control1X: 20.055; control1Y: 126.874; control2X: 188.856; control2Y: 96.474; x: 200.056; y: 92.474 }
+ PathCubic { control1X: 211.256; control1Y: 88.474; control2X: 301.22; control2Y: 94.437; x: 301.22; y: 94.437 }
+ PathLine { x: 296.056; y: 74.583 }
+ PathCubic { control1X: 231.256; control1Y: 28.183; control2X: 216.856; control2Y: 54.874; x: 203.256; y: 50.874 }
+ PathCubic { control1X: 189.656; control1Y: 46.873; control2X: 192.056; control2Y: 56.474; x: 188.856; y: 57.274 }
+ PathCubic { control1X: 185.656; control1Y: 58.074; control2X: 146.456; control2Y: 33.273; x: 140.056; y: 34.073 }
+ }
+
+ ShapePath {
+ fillColor: "#f5ccb0"
+ strokeWidth: -1
+ PathMove { x: 141.365; y: 35.819 }
+ PathCubic { control1X: 134.965; control1Y: 36.619; control2X: 107.523; control2Y: 13.944; x: 124.565; y: 44.619 }
+ PathCubic { control1X: 146.565; control1Y: 84.219; control2X: 66.164; control2Y: 83.819; x: 49.364; y: 72.619 }
+ PathCubic { control1X: 32.564; control1Y: 61.419; control2X: 56.564; control2Y: 91.019; x: 56.564; y: 91.019 }
+ PathCubic { control1X: 74.964; control1Y: 111.019; control2X: 40.564; control2Y: 94.219; x: 40.564; y: 94.219 }
+ PathCubic { control1X: 6.164; control1Y: 81.419; control2X: -17.836; control2Y: 107.019; x: -21.036; y: 107.819 }
+ PathCubic { control1X: -24.236; control1Y: 108.619; control2X: -29.036; control2Y: 111.819; x: -29.836; y: 105.419 }
+ PathCubic { control1X: -30.636; control1Y: 99.019; control2X: -37.227; control2Y: 83.492; x: -69.836; y: 108.619 }
+ PathCubic { control1X: -98.491; control1Y: 130.438; control2X: -110.127; control2Y: 112.256; x: -110.127; y: 112.256 }
+ PathLine { x: -115.727; y: 113.419 }
+ PathCubic { control1X: -130.128; control1Y: 85.019; control2X: -121.618; control2Y: 140.983; x: -121.618; y: 140.983 }
+ PathCubic { control1X: -112.818; control1Y: 175.384; control2X: 21.364; control2Y: 128.619; x: 21.364; y: 128.619 }
+ PathCubic { control1X: 21.364; control1Y: 128.619; control2X: 190.165; control2Y: 98.219; x: 201.365; y: 94.219 }
+ PathCubic { control1X: 212.565; control1Y: 90.219; control2X: 301.656; control2Y: 96.11; x: 301.656; y: 96.11 }
+ PathLine { x: 296.565; y: 75.746 }
+ PathCubic { control1X: 231.765; control1Y: 29.346; control2X: 218.165; control2Y: 56.619; x: 204.565; y: 52.619 }
+ PathCubic { control1X: 190.965; control1Y: 48.619; control2X: 193.365; control2Y: 58.219; x: 190.165; y: 59.019 }
+ PathCubic { control1X: 186.965; control1Y: 59.819; control2X: 147.765; control2Y: 35.019; x: 141.365; y: 35.819 }
+ }
+
+ ShapePath {
+ fillColor: "#f8d8c4"
+ strokeWidth: -1
+ PathMove { x: 142.674; y: 37.565 }
+ PathCubic { control1X: 136.274; control1Y: 38.365; control2X: 108.832; control2Y: 15.689; x: 125.874; y: 46.365 }
+ PathCubic { control1X: 147.874; control1Y: 85.965; control2X: 67.474; control2Y: 85.565; x: 50.674; y: 74.365 }
+ PathCubic { control1X: 33.874; control1Y: 63.165; control2X: 57.874; control2Y: 92.765; x: 57.874; y: 92.765 }
+ PathCubic { control1X: 76.274; control1Y: 112.765; control2X: 41.874; control2Y: 95.965; x: 41.874; y: 95.965 }
+ PathCubic { control1X: 7.473; control1Y: 83.165; control2X: -16.527; control2Y: 108.765; x: -19.727; y: 109.565 }
+ PathCubic { control1X: -22.927; control1Y: 110.365; control2X: -27.727; control2Y: 113.565; x: -28.527; y: 107.165 }
+ PathCubic { control1X: -29.327; control1Y: 100.765; control2X: -35.786; control2Y: 85.405; x: -68.527; y: 110.365 }
+ PathCubic { control1X: -98.418; control1Y: 132.929; control2X: -109.745; control2Y: 115.293; x: -109.745; y: 115.293 }
+ PathLine { x: -115.745; y: 114.965 }
+ PathCubic { control1X: -129.346; control1Y: 88.564; control2X: -120.963; control2Y: 144.038; x: -120.963; y: 144.038 }
+ PathCubic { control1X: -112.163; control1Y: 178.438; control2X: 22.673; control2Y: 130.365; x: 22.673; y: 130.365 }
+ PathCubic { control1X: 22.673; control1Y: 130.365; control2X: 191.474; control2Y: 99.965; x: 202.674; y: 95.965 }
+ PathCubic { control1X: 213.874; control1Y: 91.965; control2X: 302.093; control2Y: 97.783; x: 302.093; y: 97.783 }
+ PathLine { x: 297.075; y: 76.91 }
+ PathCubic { control1X: 232.274; control1Y: 30.51; control2X: 219.474; control2Y: 58.365; x: 205.874; y: 54.365 }
+ PathCubic { control1X: 192.274; control1Y: 50.365; control2X: 194.674; control2Y: 59.965; x: 191.474; y: 60.765 }
+ PathCubic { control1X: 188.274; control1Y: 61.565; control2X: 149.074; control2Y: 36.765; x: 142.674; y: 37.565 }
+ }
+
+ ShapePath {
+ fillColor: "#fae5d7"
+ strokeWidth: -1
+ PathMove { x: 143.983; y: 39.31 }
+ PathCubic { control1X: 137.583; control1Y: 40.11; control2X: 110.529; control2Y: 17.223; x: 127.183; y: 48.11 }
+ PathCubic { control1X: 149.183; control1Y: 88.91; control2X: 68.783; control2Y: 87.31; x: 51.983; y: 76.11 }
+ PathCubic { control1X: 35.183; control1Y: 64.91; control2X: 59.183; control2Y: 94.51; x: 59.183; y: 94.51 }
+ PathCubic { control1X: 77.583; control1Y: 114.51; control2X: 43.183; control2Y: 97.71; x: 43.183; y: 97.71 }
+ PathCubic { control1X: 8.783; control1Y: 84.91; control2X: -15.217; control2Y: 110.51; x: -18.417; y: 111.31 }
+ PathCubic { control1X: -21.618; control1Y: 112.11; control2X: -26.418; control2Y: 115.31; x: -27.218; y: 108.91 }
+ PathCubic { control1X: -28.018; control1Y: 102.51; control2X: -34.346; control2Y: 87.318; x: -67.218; y: 112.11 }
+ PathCubic { control1X: -98.345; control1Y: 135.42; control2X: -109.363; control2Y: 118.329; x: -109.363; y: 118.329 }
+ PathLine { x: -115.764; y: 116.51 }
+ PathCubic { control1X: -128.764; control1Y: 92.51; control2X: -120.309; control2Y: 147.093; x: -120.309; y: 147.093 }
+ PathCubic { control1X: -111.509; control1Y: 181.493; control2X: 23.983; control2Y: 132.11; x: 23.983; y: 132.11 }
+ PathCubic { control1X: 23.983; control1Y: 132.11; control2X: 192.783; control2Y: 101.71; x: 203.983; y: 97.71 }
+ PathCubic { control1X: 215.183; control1Y: 93.71; control2X: 302.529; control2Y: 99.456; x: 302.529; y: 99.456 }
+ PathLine { x: 297.583; y: 78.074 }
+ PathCubic { control1X: 232.783; control1Y: 31.673; control2X: 220.783; control2Y: 60.11; x: 207.183; y: 56.11 }
+ PathCubic { control1X: 193.583; control1Y: 52.11; control2X: 195.983; control2Y: 61.71; x: 192.783; y: 62.51 }
+ PathCubic { control1X: 189.583; control1Y: 63.31; control2X: 150.383; control2Y: 38.51; x: 143.983; y: 39.31 }
+ }
+
+ ShapePath {
+ fillColor: "#fcf2eb"
+ strokeWidth: -1
+ PathMove { x: 145.292; y: 41.055 }
+ PathCubic { control1X: 138.892; control1Y: 41.855; control2X: 112.917; control2Y: 18.411; x: 128.492; y: 49.855 }
+ PathCubic { control1X: 149.692; control1Y: 92.656; control2X: 70.092; control2Y: 89.056; x: 53.292; y: 77.856 }
+ PathCubic { control1X: 36.492; control1Y: 66.656; control2X: 60.492; control2Y: 96.256; x: 60.492; y: 96.256 }
+ PathCubic { control1X: 78.892; control1Y: 116.256; control2X: 44.492; control2Y: 99.456; x: 44.492; y: 99.456 }
+ PathCubic { control1X: 10.092; control1Y: 86.656; control2X: -13.908; control2Y: 112.256; x: -17.108; y: 113.056 }
+ PathCubic { control1X: -20.308; control1Y: 113.856; control2X: -25.108; control2Y: 117.056; x: -25.908; y: 110.656 }
+ PathCubic { control1X: -26.708; control1Y: 104.256; control2X: -32.905; control2Y: 89.232; x: -65.908; y: 113.856 }
+ PathCubic { control1X: -98.273; control1Y: 137.911; control2X: -108.982; control2Y: 121.365; x: -108.982; y: 121.365 }
+ PathLine { x: -115.782; y: 118.056 }
+ PathCubic { control1X: -128.582; control1Y: 94.856; control2X: -119.654; control2Y: 150.147; x: -119.654; y: 150.147 }
+ PathCubic { control1X: -110.854; control1Y: 184.547; control2X: 25.292; control2Y: 133.856; x: 25.292; y: 133.856 }
+ PathCubic { control1X: 25.292; control1Y: 133.856; control2X: 194.093; control2Y: 103.456; x: 205.293; y: 99.456 }
+ PathCubic { control1X: 216.493; control1Y: 95.456; control2X: 302.965; control2Y: 101.128; x: 302.965; y: 101.128 }
+ PathLine { x: 298.093; y: 79.237 }
+ PathCubic { control1X: 233.292; control1Y: 32.837; control2X: 222.093; control2Y: 61.856; x: 208.493; y: 57.856 }
+ PathCubic { control1X: 194.893; control1Y: 53.855; control2X: 197.293; control2Y: 63.456; x: 194.093; y: 64.256 }
+ PathCubic { control1X: 190.892; control1Y: 65.056; control2X: 151.692; control2Y: 40.255; x: 145.292; y: 41.055 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeWidth: -1
+ PathMove { x: -115.8; y: 119.601 }
+ PathCubic { control1X: -128.6; control1Y: 97.6; control2X: -119; control2Y: 153.201; x: -119; y: 153.201 }
+ PathCubic { control1X: -110.2; control1Y: 187.601; control2X: 26.6; control2Y: 135.601; x: 26.6; y: 135.601 }
+ PathCubic { control1X: 26.6; control1Y: 135.601; control2X: 195.401; control2Y: 105.2; x: 206.601; y: 101.2 }
+ PathCubic { control1X: 217.801; control1Y: 97.2; control2X: 303.401; control2Y: 102.8; x: 303.401; y: 102.8 }
+ PathLine { x: 298.601; y: 80.4 }
+ PathCubic { control1X: 233.801; control1Y: 34; control2X: 223.401; control2Y: 63.6; x: 209.801; y: 59.6 }
+ PathCubic { control1X: 196.201; control1Y: 55.6; control2X: 198.601; control2Y: 65.2; x: 195.401; y: 66 }
+ PathCubic { control1X: 192.201; control1Y: 66.8; control2X: 153.001; control2Y: 42; x: 146.601; y: 42.8 }
+ PathCubic { control1X: 140.201; control1Y: 43.6; control2X: 114.981; control2Y: 19.793; x: 129.801; y: 51.6 }
+ PathCubic { control1X: 152.028; control1Y: 99.307; control2X: 69.041; control2Y: 89.227; x: 54.6; y: 79.6 }
+ PathCubic { control1X: 37.8; control1Y: 68.4; control2X: 61.8; control2Y: 98; x: 61.8; y: 98 }
+ PathCubic { control1X: 80.2; control1Y: 118.001; control2X: 45.8; control2Y: 101.2; x: 45.8; y: 101.2 }
+ PathCubic { control1X: 11.4; control1Y: 88.4; control2X: -12.6; control2Y: 114.001; x: -15.8; y: 114.801 }
+ PathCubic { control1X: -19; control1Y: 115.601; control2X: -23.8; control2Y: 118.801; x: -24.6; y: 112.401 }
+ PathCubic { control1X: -25.4; control1Y: 106; control2X: -31.465; control2Y: 91.144; x: -64.6; y: 115.601 }
+ PathCubic { control1X: -98.2; control1Y: 140.401; control2X: -108.6; control2Y: 124.401; x: -108.6; y: 124.401 }
+ PathLine { x: -115.8; y: 119.601 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -74.2; y: 149.601 }
+ PathCubic { control1X: -74.2; control1Y: 149.601; control2X: -81.4; control2Y: 161.201; x: -60.6; y: 174.401 }
+ PathCubic { control1X: -60.6; control1Y: 174.401; control2X: -59.2; control2Y: 175.801; x: -77.2; y: 171.601 }
+ PathCubic { control1X: -77.2; control1Y: 171.601; control2X: -83.4; control2Y: 169.601; x: -85; y: 159.201 }
+ PathCubic { control1X: -85; control1Y: 159.201; control2X: -89.8; control2Y: 154.801; x: -94.6; y: 149.201 }
+ PathCubic { control1X: -99.4; control1Y: 143.601; control2X: -74.2; control2Y: 149.601; x: -74.2; y: 149.601 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 65.8; y: 102 }
+ PathCubic { control1X: 65.8; control1Y: 102; control2X: 83.498; control2Y: 128.821; x: 82.9; y: 133.601 }
+ PathCubic { control1X: 81.6; control1Y: 144.001; control2X: 81.4; control2Y: 153.601; x: 84.6; y: 157.601 }
+ PathCubic { control1X: 87.801; control1Y: 161.601; control2X: 96.601; control2Y: 194.801; x: 96.601; y: 194.801 }
+ PathCubic { control1X: 96.601; control1Y: 194.801; control2X: 96.201; control2Y: 196.001; x: 108.601; y: 158.001 }
+ PathCubic { control1X: 108.601; control1Y: 158.001; control2X: 120.201; control2Y: 142.001; x: 100.201; y: 123.601 }
+ PathCubic { control1X: 100.201; control1Y: 123.601; control2X: 65; control2Y: 94.8; x: 65.8; y: 102 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -54.2; y: 176.401 }
+ PathCubic { control1X: -54.2; control1Y: 176.401; control2X: -43; control2Y: 183.601; x: -57.4; y: 214.801 }
+ PathLine { x: -51; y: 212.401 }
+ PathCubic { control1X: -51; control1Y: 212.401; control2X: -51.8; control2Y: 223.601; x: -55; y: 226.001 }
+ PathLine { x: -47.8; y: 222.801 }
+ PathCubic { control1X: -47.8; control1Y: 222.801; control2X: -43; control2Y: 230.801; x: -47; y: 235.601 }
+ PathCubic { control1X: -47; control1Y: 235.601; control2X: -30.2; control2Y: 243.601; x: -31; y: 250.001 }
+ PathCubic { control1X: -31; control1Y: 250.001; control2X: -24.6; control2Y: 242.001; x: -28.6; y: 235.601 }
+ PathCubic { control1X: -32.6; control1Y: 229.201; control2X: -39.8; control2Y: 233.201; x: -39; y: 214.801 }
+ PathLine { x: -47.8; y: 218.001 }
+ PathCubic { control1X: -47.8; control1Y: 218.001; control2X: -42.2; control2Y: 209.201; x: -42.2; y: 202.801 }
+ PathLine { x: -50.2; y: 205.201 }
+ PathCubic { control1X: -50.2; control1Y: 205.201; control2X: -34.731; control2Y: 178.623; x: -45.4; y: 177.201 }
+ PathCubic { control1X: -51.4; control1Y: 176.401; control2X: -54.2; control2Y: 176.401; x: -54.2; y: 176.401 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -21.8; y: 193.201 }
+ PathCubic { control1X: -21.8; control1Y: 193.201; control2X: -19; control2Y: 188.801; x: -21.8; y: 189.601 }
+ PathCubic { control1X: -24.6; control1Y: 190.401; control2X: -55.8; control2Y: 205.201; x: -61.8; y: 214.801 }
+ PathCubic { control1X: -61.8; control1Y: 214.801; control2X: -27.4; control2Y: 190.401; x: -21.8; y: 193.201 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -11.4; y: 201.201 }
+ PathCubic { control1X: -11.4; control1Y: 201.201; control2X: -8.6; control2Y: 196.801; x: -11.4; y: 197.601 }
+ PathCubic { control1X: -14.2; control1Y: 198.401; control2X: -45.4; control2Y: 213.201; x: -51.4; y: 222.801 }
+ PathCubic { control1X: -51.4; control1Y: 222.801; control2X: -17; control2Y: 198.401; x: -11.4; y: 201.201 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 1.8; y: 186.001 }
+ PathCubic { control1X: 1.8; control1Y: 186.001; control2X: 4.6; control2Y: 181.601; x: 1.8; y: 182.401 }
+ PathCubic { control1X: -1; control1Y: 183.201; control2X: -32.2; control2Y: 198.001; x: -38.2; y: 207.601 }
+ PathCubic { control1X: -38.2; control1Y: 207.601; control2X: -3.8; control2Y: 183.201; x: 1.8; y: 186.001 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -21.4; y: 229.601 }
+ PathCubic { control1X: -21.4; control1Y: 229.601; control2X: -21.4; control2Y: 223.601; x: -24.2; y: 224.401 }
+ PathCubic { control1X: -27; control1Y: 225.201; control2X: -63; control2Y: 242.801; x: -69; y: 252.401 }
+ PathCubic { control1X: -69; control1Y: 252.401; control2X: -27; control2Y: 226.801; x: -21.4; y: 229.601 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -20.2; y: 218.801 }
+ PathCubic { control1X: -20.2; control1Y: 218.801; control2X: -19; control2Y: 214.001; x: -21.8; y: 214.801 }
+ PathCubic { control1X: -23.8; control1Y: 214.801; control2X: -50.2; control2Y: 226.401; x: -56.2; y: 236.001 }
+ PathCubic { control1X: -56.2; control1Y: 236.001; control2X: -26.6; control2Y: 214.401; x: -20.2; y: 218.801 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -34.6; y: 266.401 }
+ PathLine { x: -44.6; y: 274.001 }
+ PathCubic { control1X: -44.6; control1Y: 274.001; control2X: -34.2; control2Y: 266.401; x: -30.6; y: 267.601 }
+ PathCubic { control1X: -30.6; control1Y: 267.601; control2X: -37.4; control2Y: 278.801; x: -38.2; y: 284.001 }
+ PathCubic { control1X: -38.2; control1Y: 284.001; control2X: -27.8; control2Y: 271.201; x: -22.2; y: 271.601 }
+ PathCubic { control1X: -22.2; control1Y: 271.601; control2X: -14.6; control2Y: 272.001; x: -14.6; y: 282.801 }
+ PathCubic { control1X: -14.6; control1Y: 282.801; control2X: -9; control2Y: 272.401; x: -5.8; y: 272.801 }
+ PathCubic { control1X: -5.8; control1Y: 272.801; control2X: -4.6; control2Y: 279.201; x: -5.8; y: 286.001 }
+ PathCubic { control1X: -5.8; control1Y: 286.001; control2X: -1.8; control2Y: 278.401; x: 2.2; y: 280.001 }
+ PathCubic { control1X: 2.2; control1Y: 280.001; control2X: 8.6; control2Y: 278.001; x: 7.8; y: 289.601 }
+ PathCubic { control1X: 7.8; control1Y: 289.601; control2X: 7.8; control2Y: 300.001; x: 7; y: 302.801 }
+ PathCubic { control1X: 7; control1Y: 302.801; control2X: 12.6; control2Y: 276.401; x: 15; y: 276.001 }
+ PathCubic { control1X: 15; control1Y: 276.001; control2X: 23; control2Y: 274.801; x: 27.8; y: 283.601 }
+ PathCubic { control1X: 27.8; control1Y: 283.601; control2X: 23.8; control2Y: 276.001; x: 28.6; y: 278.001 }
+ PathCubic { control1X: 28.6; control1Y: 278.001; control2X: 39.4; control2Y: 279.601; x: 42.6; y: 286.401 }
+ PathCubic { control1X: 42.6; control1Y: 286.401; control2X: 35.8; control2Y: 274.401; x: 41.4; y: 277.601 }
+ PathCubic { control1X: 41.4; control1Y: 277.601; control2X: 48.2; control2Y: 277.601; x: 49.4; y: 284.001 }
+ PathCubic { control1X: 49.4; control1Y: 284.001; control2X: 57.8; control2Y: 305.201; x: 59.8; y: 306.801 }
+ PathCubic { control1X: 59.8; control1Y: 306.801; control2X: 52.2; control2Y: 285.201; x: 53.8; y: 285.201 }
+ PathCubic { control1X: 53.8; control1Y: 285.201; control2X: 51.8; control2Y: 273.201; x: 57; y: 288.001 }
+ PathCubic { control1X: 57; control1Y: 288.001; control2X: 53.8; control2Y: 274.001; x: 59.4; y: 274.801 }
+ PathCubic { control1X: 65; control1Y: 275.601; control2X: 69.4; control2Y: 285.601; x: 77.8; y: 283.201 }
+ PathCubic { control1X: 77.8; control1Y: 283.201; control2X: 87.401; control2Y: 288.801; x: 89.401; y: 219.601 }
+ PathLine { x: -34.6; y: 266.401 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -29.8; y: 173.601 }
+ PathCubic { control1X: -29.8; control1Y: 173.601; control2X: -15; control2Y: 167.601; x: 25; y: 173.601 }
+ PathCubic { control1X: 25; control1Y: 173.601; control2X: 32.2; control2Y: 174.001; x: 39; y: 165.201 }
+ PathCubic { control1X: 45.8; control1Y: 156.401; control2X: 72.6; control2Y: 149.201; x: 79; y: 151.201 }
+ PathLine { x: 88.601; y: 157.601 }
+ PathLine { x: 89.401; y: 158.801 }
+ PathCubic { control1X: 89.401; control1Y: 158.801; control2X: 101.801; control2Y: 169.201; x: 102.201; y: 176.801 }
+ PathCubic { control1X: 102.601; control1Y: 184.401; control2X: 87.801; control2Y: 232.401; x: 78.2; y: 248.401 }
+ PathCubic { control1X: 68.6; control1Y: 264.401; control2X: 59; control2Y: 276.801; x: 39.8; y: 274.401 }
+ PathCubic { control1X: 39.8; control1Y: 274.401; control2X: 19; control2Y: 270.401; x: -6.6; y: 274.401 }
+ PathCubic { control1X: -6.6; control1Y: 274.401; control2X: -35.8; control2Y: 272.801; x: -38.6; y: 264.801 }
+ PathCubic { control1X: -41.4; control1Y: 256.801; control2X: -27.4; control2Y: 241.601; x: -27.4; y: 241.601 }
+ PathCubic { control1X: -27.4; control1Y: 241.601; control2X: -23; control2Y: 233.201; x: -24.2; y: 218.801 }
+ PathCubic { control1X: -25.4; control1Y: 204.401; control2X: -25; control2Y: 176.401; x: -29.8; y: 173.601 }
+ }
+
+ ShapePath {
+ fillColor: "#e5668c"
+ strokeWidth: -1
+ PathMove { x: -7.8; y: 175.601 }
+ PathCubic { control1X: 0.6; control1Y: 194.001; control2X: -29; control2Y: 259.201; x: -29; y: 259.201 }
+ PathCubic { control1X: -31; control1Y: 260.801; control2X: -16.34; control2Y: 266.846; x: -6.2; y: 264.401 }
+ PathCubic { control1X: 4.746; control1Y: 261.763; control2X: 45; control2Y: 266.001; x: 45; y: 266.001 }
+ PathCubic { control1X: 68.6; control1Y: 250.401; control2X: 81.4; control2Y: 206.001; x: 81.4; y: 206.001 }
+ PathCubic { control1X: 81.4; control1Y: 206.001; control2X: 91.801; control2Y: 182.001; x: 74.2; y: 178.801 }
+ PathCubic { control1X: 56.6; control1Y: 175.601; control2X: -7.8; control2Y: 175.601; x: -7.8; y: 175.601 }
+ }
+
+ ShapePath {
+ fillColor: "#b23259"
+ strokeWidth: -1
+ PathMove { x: -9.831; y: 206.497 }
+ PathCubic { control1X: -6.505; control1Y: 193.707; control2X: -4.921; control2Y: 181.906; x: -7.8; y: 175.601 }
+ PathCubic { control1X: -7.8; control1Y: 175.601; control2X: 54.6; control2Y: 182.001; x: 65.8; y: 161.201 }
+ PathCubic { control1X: 70.041; control1Y: 153.326; control2X: 84.801; control2Y: 184.001; x: 84.4; y: 193.601 }
+ PathCubic { control1X: 84.4; control1Y: 193.601; control2X: 21.4; control2Y: 208.001; x: 6.6; y: 196.801 }
+ PathLine { x: -9.831; y: 206.497 }
+ }
+
+ ShapePath {
+ fillColor: "#a5264c"
+ strokeWidth: -1
+ PathMove { x: -5.4; y: 222.801 }
+ PathCubic { control1X: -5.4; control1Y: 222.801; control2X: -3.4; control2Y: 230.001; x: -5.8; y: 234.001 }
+ PathCubic { control1X: -5.8; control1Y: 234.001; control2X: -7.4; control2Y: 234.801; x: -8.6; y: 235.201 }
+ PathCubic { control1X: -8.6; control1Y: 235.201; control2X: -7.4; control2Y: 238.801; x: -1.4; y: 240.401 }
+ PathCubic { control1X: -1.4; control1Y: 240.401; control2X: 0.6; control2Y: 244.801; x: 3; y: 245.201 }
+ PathCubic { control1X: 5.4; control1Y: 245.601; control2X: 10.2; control2Y: 251.201; x: 14.2; y: 250.001 }
+ PathCubic { control1X: 18.2; control1Y: 248.801; control2X: 29.4; control2Y: 244.801; x: 29.4; y: 244.801 }
+ PathCubic { control1X: 29.4; control1Y: 244.801; control2X: 35; control2Y: 241.601; x: 43.8; y: 245.201 }
+ PathCubic { control1X: 43.8; control1Y: 245.201; control2X: 46.175; control2Y: 244.399; x: 46.6; y: 240.401 }
+ PathCubic { control1X: 47.1; control1Y: 235.701; control2X: 50.2; control2Y: 232.001; x: 52.2; y: 230.001 }
+ PathCubic { control1X: 54.2; control1Y: 228.001; control2X: 63.8; control2Y: 215.201; x: 62.6; y: 214.801 }
+ PathCubic { control1X: 61.4; control1Y: 214.401; control2X: -5.4; control2Y: 222.801; x: -5.4; y: 222.801 }
+ }
+
+ ShapePath {
+ fillColor: "#ff727f"
+ strokeColor: "#000000"
+ strokeWidth: 1
+ PathMove { x: -9.8; y: 174.401 }
+ PathCubic { control1X: -9.8; control1Y: 174.401; control2X: -12.6; control2Y: 196.801; x: -9.4; y: 205.201 }
+ PathCubic { control1X: -6.2; control1Y: 213.601; control2X: -7; control2Y: 215.601; x: -7.8; y: 219.601 }
+ PathCubic { control1X: -8.6; control1Y: 223.601; control2X: -4.2; control2Y: 233.601; x: 1.4; y: 239.601 }
+ PathLine { x: 13.4; y: 241.201 }
+ PathCubic { control1X: 13.4; control1Y: 241.201; control2X: 28.6; control2Y: 237.601; x: 37.8; y: 240.401 }
+ PathCubic { control1X: 37.8; control1Y: 240.401; control2X: 46.794; control2Y: 241.744; x: 50.2; y: 226.801 }
+ PathCubic { control1X: 50.2; control1Y: 226.801; control2X: 55; control2Y: 220.401; x: 62.2; y: 217.601 }
+ PathCubic { control1X: 69.4; control1Y: 214.801; control2X: 76.6; control2Y: 173.201; x: 72.6; y: 165.201 }
+ PathCubic { control1X: 68.6; control1Y: 157.201; control2X: 54.2; control2Y: 152.801; x: 38.2; y: 168.401 }
+ PathCubic { control1X: 22.2; control1Y: 184.001; control2X: 20.2; control2Y: 167.201; x: -9.8; y: 174.401 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: -8.2; y: 249.201 }
+ PathCubic { control1X: -8.2; control1Y: 249.201; control2X: -9; control2Y: 247.201; x: -13.4; y: 246.801 }
+ PathCubic { control1X: -13.4; control1Y: 246.801; control2X: -35.8; control2Y: 243.201; x: -44.2; y: 230.801 }
+ PathCubic { control1X: -44.2; control1Y: 230.801; control2X: -51; control2Y: 225.201; x: -46.6; y: 236.801 }
+ PathCubic { control1X: -46.6; control1Y: 236.801; control2X: -36.2; control2Y: 257.201; x: -29.4; y: 260.001 }
+ PathCubic { control1X: -29.4; control1Y: 260.001; control2X: -13; control2Y: 264.001; x: -8.2; y: 249.201 }
+ }
+
+ ShapePath {
+ fillColor: "#cc3f4c"
+ strokeWidth: -1
+ PathMove { x: 71.742; y: 185.229 }
+ PathCubic { control1X: 72.401; control1Y: 177.323; control2X: 74.354; control2Y: 168.709; x: 72.6; y: 165.201 }
+ PathCubic { control1X: 66.154; control1Y: 152.307; control2X: 49.181; control2Y: 157.695; x: 38.2; y: 168.401 }
+ PathCubic { control1X: 22.2; control1Y: 184.001; control2X: 20.2; control2Y: 167.201; x: -9.8; y: 174.401 }
+ PathCubic { control1X: -9.8; control1Y: 174.401; control2X: -11.545; control2Y: 188.364; x: -10.705; y: 198.376 }
+ PathCubic { control1X: -10.705; control1Y: 198.376; control2X: 26.6; control2Y: 186.801; x: 27.4; y: 192.401 }
+ PathCubic { control1X: 27.4; control1Y: 192.401; control2X: 29; control2Y: 189.201; x: 38.2; y: 189.201 }
+ PathCubic { control1X: 47.4; control1Y: 189.201; control2X: 70.142; control2Y: 188.029; x: 71.742; y: 185.229 }
+ }
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "#a51926"
+ strokeWidth: 2
+ PathMove { x: 28.6; y: 175.201 }
+ PathCubic { control1X: 28.6; control1Y: 175.201; control2X: 33.4; control2Y: 180.001; x: 29.8; y: 189.601 }
+ PathCubic { control1X: 29.8; control1Y: 189.601; control2X: 15.4; control2Y: 205.601; x: 17.4; y: 219.601 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: -19.4; y: 260.001 }
+ PathCubic { control1X: -19.4; control1Y: 260.001; control2X: -23.8; control2Y: 247.201; x: -15; y: 254.001 }
+ PathCubic { control1X: -15; control1Y: 254.001; control2X: -10.2; control2Y: 256.001; x: -11.4; y: 257.601 }
+ PathCubic { control1X: -12.6; control1Y: 259.201; control2X: -18.2; control2Y: 263.201; x: -19.4; y: 260.001 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: -14.36; y: 261.201 }
+ PathCubic { control1X: -14.36; control1Y: 261.201; control2X: -17.88; control2Y: 250.961; x: -10.84; y: 256.401 }
+ PathCubic { control1X: -10.84; control1Y: 256.401; control2X: -6.419; control2Y: 258.849; x: -7.96; y: 259.281 }
+ PathCubic { control1X: -12.52; control1Y: 260.561; control2X: -7.96; control2Y: 263.121; x: -14.36; y: 261.201 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: -9.56; y: 261.201 }
+ PathCubic { control1X: -9.56; control1Y: 261.201; control2X: -13.08; control2Y: 250.961; x: -6.04; y: 256.401 }
+ PathCubic { control1X: -6.04; control1Y: 256.401; control2X: -1.665; control2Y: 258.711; x: -3.16; y: 259.281 }
+ PathCubic { control1X: -6.52; control1Y: 260.561; control2X: -3.16; control2Y: 263.121; x: -9.56; y: 261.201 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: -2.96; y: 261.401 }
+ PathCubic { control1X: -2.96; control1Y: 261.401; control2X: -6.48; control2Y: 251.161; x: 0.56; y: 256.601 }
+ PathCubic { control1X: 0.56; control1Y: 256.601; control2X: 4.943; control2Y: 258.933; x: 3.441; y: 259.481 }
+ PathCubic { control1X: 0.48; control1Y: 260.561; control2X: 3.441; control2Y: 263.321; x: -2.96; y: 261.401 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: 3.52; y: 261.321 }
+ PathCubic { control1X: 3.52; control1Y: 261.321; control2X: 0; control2Y: 251.081; x: 7.041; y: 256.521 }
+ PathCubic { control1X: 7.041; control1Y: 256.521; control2X: 10.881; control2Y: 258.121; x: 9.921; y: 259.401 }
+ PathCubic { control1X: 8.961; control1Y: 260.681; control2X: 9.921; control2Y: 263.241; x: 3.52; y: 261.321 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: 10.2; y: 262.001 }
+ PathCubic { control1X: 10.2; control1Y: 262.001; control2X: 5.4; control2Y: 249.601; x: 14.6; y: 256.001 }
+ PathCubic { control1X: 14.6; control1Y: 256.001; control2X: 19.4; control2Y: 258.001; x: 18.2; y: 259.601 }
+ PathCubic { control1X: 17; control1Y: 261.201; control2X: 18.2; control2Y: 264.401; x: 10.2; y: 262.001 }
+ }
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "#a5264c"
+ strokeWidth: 2
+ PathMove { x: -18.2; y: 244.801 }
+ PathCubic { control1X: -18.2; control1Y: 244.801; control2X: -5; control2Y: 242.001; x: 1; y: 245.201 }
+ PathCubic { control1X: 1; control1Y: 245.201; control2X: 7; control2Y: 246.401; x: 8.2; y: 246.001 }
+ PathCubic { control1X: 9.4; control1Y: 245.601; control2X: 12.6; control2Y: 245.201; x: 12.6; y: 245.201 }
+ }
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "#a5264c"
+ strokeWidth: 2
+ PathMove { x: 15.8; y: 253.601 }
+ PathCubic { control1X: 15.8; control1Y: 253.601; control2X: 27.8; control2Y: 240.001; x: 39.8; y: 244.401 }
+ PathCubic { control1X: 46.816; control1Y: 246.974; control2X: 45.8; control2Y: 243.601; x: 46.6; y: 240.801 }
+ PathCubic { control1X: 47.4; control1Y: 238.001; control2X: 47.6; control2Y: 233.801; x: 52.6; y: 230.801 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: 33; y: 237.601 }
+ PathCubic { control1X: 33; control1Y: 237.601; control2X: 29; control2Y: 226.801; x: 26.2; y: 239.601 }
+ PathCubic { control1X: 23.4; control1Y: 252.401; control2X: 20.2; control2Y: 256.001; x: 18.6; y: 258.801 }
+ PathCubic { control1X: 18.6; control1Y: 258.801; control2X: 18.6; control2Y: 264.001; x: 27; y: 263.601 }
+ PathCubic { control1X: 27; control1Y: 263.601; control2X: 37.8; control2Y: 263.201; x: 38.2; y: 260.401 }
+ PathCubic { control1X: 38.6; control1Y: 257.601; control2X: 37; control2Y: 246.001; x: 33; y: 237.601 }
+ }
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "#a5264c"
+ strokeWidth: 2
+ PathMove { x: 47; y: 244.801 }
+ PathCubic { control1X: 47; control1Y: 244.801; control2X: 50.6; control2Y: 242.401; x: 53; y: 243.601 }
+ }
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "#a5264c"
+ strokeWidth: 2
+ PathMove { x: 53.5; y: 228.401 }
+ PathCubic { control1X: 53.5; control1Y: 228.401; control2X: 56.4; control2Y: 223.501; x: 61.2; y: 222.701 }
+ }
+
+ ShapePath {
+ fillColor: "#b2b2b2"
+ strokeWidth: -1
+ PathMove { x: -25.8; y: 265.201 }
+ PathCubic { control1X: -25.8; control1Y: 265.201; control2X: -7.8; control2Y: 268.401; x: -3.4; y: 266.801 }
+ PathCubic { control1X: -3.4; control1Y: 266.801; control2X: 5.4; control2Y: 266.801; x: -3; y: 268.801 }
+ PathCubic { control1X: -3; control1Y: 268.801; control2X: -15.8; control2Y: 268.801; x: -23.8; y: 267.601 }
+ PathCubic { control1X: -23.8; control1Y: 267.601; control2X: -35.4; control2Y: 262.001; x: -25.8; y: 265.201 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: -11.8; y: 172.001 }
+ PathCubic { control1X: -11.8; control1Y: 172.001; control2X: 5.8; control2Y: 172.001; x: 7.8; y: 172.801 }
+ PathCubic { control1X: 7.8; control1Y: 172.801; control2X: 15; control2Y: 203.601; x: 11.4; y: 211.201 }
+ PathCubic { control1X: 11.4; control1Y: 211.201; control2X: 10.2; control2Y: 214.001; x: 7.4; y: 208.401 }
+ PathCubic { control1X: 7.4; control1Y: 208.401; control2X: -11; control2Y: 175.601; x: -14.2; y: 173.601 }
+ PathCubic { control1X: -17.4; control1Y: 171.601; control2X: -13; control2Y: 172.001; x: -11.8; y: 172.001 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: -88.9; y: 169.301 }
+ PathCubic { control1X: -88.9; control1Y: 169.301; control2X: -80; control2Y: 171.001; x: -67.4; y: 173.601 }
+ PathCubic { control1X: -67.4; control1Y: 173.601; control2X: -62.6; control2Y: 196.001; x: -59.4; y: 200.801 }
+ PathCubic { control1X: -56.2; control1Y: 205.601; control2X: -59.8; control2Y: 205.601; x: -63.4; y: 202.801 }
+ PathCubic { control1X: -67; control1Y: 200.001; control2X: -81.8; control2Y: 186.001; x: -83.8; y: 181.601 }
+ PathCubic { control1X: -85.8; control1Y: 177.201; control2X: -88.9; control2Y: 169.301; x: -88.9; y: 169.301 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: -67.039; y: 173.818 }
+ PathCubic { control1X: -67.039; control1Y: 173.818; control2X: -61.239; control2Y: 175.366; x: -60.23; y: 177.581 }
+ PathCubic { control1X: -59.222; control1Y: 179.795; control2X: -61.432; control2Y: 183.092; x: -61.432; y: 183.092 }
+ PathCubic { control1X: -61.432; control1Y: 183.092; control2X: -62.432; control2Y: 186.397; x: -63.634; y: 184.235 }
+ PathCubic { control1X: -64.836; control1Y: 182.072; control2X: -67.708; control2Y: 174.412; x: -67.039; y: 173.818 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -67; y: 173.601 }
+ PathCubic { control1X: -67; control1Y: 173.601; control2X: -63.4; control2Y: 178.801; x: -59.8; y: 178.801 }
+ PathCubic { control1X: -56.2; control1Y: 178.801; control2X: -55.818; control2Y: 178.388; x: -53; y: 179.001 }
+ PathCubic { control1X: -48.4; control1Y: 180.001; control2X: -48.8; control2Y: 178.001; x: -42.2; y: 179.201 }
+ PathCubic { control1X: -39.56; control1Y: 179.681; control2X: -37; control2Y: 178.801; x: -34.2; y: 180.001 }
+ PathCubic { control1X: -31.4; control1Y: 181.201; control2X: -28.2; control2Y: 180.401; x: -27; y: 178.401 }
+ PathCubic { control1X: -25.8; control1Y: 176.401; control2X: -21; control2Y: 172.201; x: -21; y: 172.201 }
+ PathCubic { control1X: -21; control1Y: 172.201; control2X: -33.8; control2Y: 174.001; x: -36.6; y: 174.801 }
+ PathCubic { control1X: -36.6; control1Y: 174.801; control2X: -59; control2Y: 176.001; x: -67; y: 173.601 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: -22.4; y: 173.801 }
+ PathCubic { control1X: -22.4; control1Y: 173.801; control2X: -28.85; control2Y: 177.301; x: -29.25; y: 179.701 }
+ PathCubic { control1X: -29.65; control1Y: 182.101; control2X: -24; control2Y: 185.801; x: -24; y: 185.801 }
+ PathCubic { control1X: -24; control1Y: 185.801; control2X: -21.25; control2Y: 190.401; x: -20.65; y: 188.001 }
+ PathCubic { control1X: -20.05; control1Y: 185.601; control2X: -21.6; control2Y: 174.201; x: -22.4; y: 173.801 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: -59.885; y: 179.265 }
+ PathCubic { control1X: -59.885; control1Y: 179.265; control2X: -52.878; control2Y: 190.453; x: -52.661; y: 179.242 }
+ PathCubic { control1X: -52.661; control1Y: 179.242; control2X: -52.104; control2Y: 177.984; x: -53.864; y: 177.962 }
+ PathCubic { control1X: -59.939; control1Y: 177.886; control2X: -58.418; control2Y: 173.784; x: -59.885; y: 179.265 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: -52.707; y: 179.514 }
+ PathCubic { control1X: -52.707; control1Y: 179.514; control2X: -44.786; control2Y: 190.701; x: -45.422; y: 179.421 }
+ PathCubic { control1X: -45.422; control1Y: 179.421; control2X: -45.415; control2Y: 179.089; x: -47.168; y: 178.936 }
+ PathCubic { control1X: -51.915; control1Y: 178.522; control2X: -51.57; control2Y: 174.004; x: -52.707; y: 179.514 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: -45.494; y: 179.522 }
+ PathCubic { control1X: -45.494; control1Y: 179.522; control2X: -37.534; control2Y: 190.15; x: -38.203; y: 180.484 }
+ PathCubic { control1X: -38.203; control1Y: 180.484; control2X: -38.084; control2Y: 179.251; x: -39.738; y: 178.95 }
+ PathCubic { control1X: -43.63; control1Y: 178.244; control2X: -43.841; control2Y: 174.995; x: -45.494; y: 179.522 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffcc"
+ strokeColor: "#000000"
+ strokeWidth: 0.5
+ PathMove { x: -38.618; y: 179.602 }
+ PathCubic { control1X: -38.618; control1Y: 179.602; control2X: -30.718; control2Y: 191.163; x: -30.37; y: 181.382 }
+ PathCubic { control1X: -30.37; control1Y: 181.382; control2X: -28.726; control2Y: 180.004; x: -30.472; y: 179.782 }
+ PathCubic { control1X: -36.29; control1Y: 179.042; control2X: -35.492; control2Y: 174.588; x: -38.618; y: 179.602 }
+ }
+
+ ShapePath {
+ fillColor: "#e5e5b2"
+ strokeWidth: -1
+ PathMove { x: -74.792; y: 183.132 }
+ PathLine { x: -82.45; y: 181.601 }
+ PathCubic { control1X: -85.05; control1Y: 176.601; control2X: -87.15; control2Y: 170.451; x: -87.15; y: 170.451 }
+ PathCubic { control1X: -87.15; control1Y: 170.451; control2X: -80.8; control2Y: 171.451; x: -68.3; y: 174.251 }
+ PathCubic { control1X: -68.3; control1Y: 174.251; control2X: -67.424; control2Y: 177.569; x: -65.952; y: 183.364 }
+ PathLine { x: -74.792; y: 183.132 }
+ }
+
+ ShapePath {
+ fillColor: "#e5e5b2"
+ strokeWidth: -1
+ PathMove { x: -9.724; y: 178.47 }
+ PathCubic { control1X: -11.39; control1Y: 175.964; control2X: -12.707; control2Y: 174.206; x: -13.357; y: 173.8 }
+ PathCubic { control1X: -16.37; control1Y: 171.917; control2X: -12.227; control2Y: 172.294; x: -11.098; y: 172.294 }
+ PathCubic { control1X: -11.098; control1Y: 172.294; control2X: 5.473; control2Y: 172.294; x: 7.356; y: 173.047 }
+ PathCubic { control1X: 7.356; control1Y: 173.047; control2X: 7.88; control2Y: 175.289; x: 8.564; y: 178.68 }
+ PathCubic { control1X: 8.564; control1Y: 178.68; control2X: -1.524; control2Y: 176.67; x: -9.724; y: 178.47 }
+ }
+
+ ShapePath {
+ fillColor: "#cc7226"
+ strokeWidth: -1
+ PathMove { x: 43.88; y: 40.321 }
+ PathCubic { control1X: 71.601; control1Y: 44.281; control2X: 97.121; control2Y: 8.641; x: 98.881; y: -1.04 }
+ PathCubic { control1X: 100.641; control1Y: -10.72; control2X: 90.521; control2Y: -22.6; x: 90.521; y: -22.6 }
+ PathCubic { control1X: 91.841; control1Y: -25.68; control2X: 87.001; control2Y: -39.76; x: 81.721; y: -49 }
+ PathCubic { control1X: 76.441; control1Y: -58.24; control2X: 60.54; control2Y: -57.266; x: 43; y: -58.24 }
+ PathCubic { control1X: 27.16; control1Y: -59.12; control2X: 8.68; control2Y: -35.8; x: 7.36; y: -34.04 }
+ PathCubic { control1X: 6.04; control1Y: -32.28; control2X: 12.2; control2Y: 6.001; x: 13.52; y: 11.721 }
+ PathCubic { control1X: 14.84; control1Y: 17.441; control2X: 12.2; control2Y: 43.841; x: 12.2; y: 43.841 }
+ PathCubic { control1X: 46.44; control1Y: 34.741; control2X: 16.16; control2Y: 36.361; x: 43.88; y: 40.321 }
+ }
+
+ ShapePath {
+ fillColor: "#ea8e51"
+ strokeWidth: -1
+ PathMove { x: 8.088; y: -33.392 }
+ PathCubic { control1X: 6.792; control1Y: -31.664; control2X: 12.84; control2Y: 5.921; x: 14.136; y: 11.537 }
+ PathCubic { control1X: 15.432; control1Y: 17.153; control2X: 12.84; control2Y: 43.073; x: 12.84; y: 43.073 }
+ PathCubic { control1X: 45.512; control1Y: 34.193; control2X: 16.728; control2Y: 35.729; x: 43.944; y: 39.617 }
+ PathCubic { control1X: 71.161; control1Y: 43.505; control2X: 96.217; control2Y: 8.513; x: 97.945; y: -0.992 }
+ PathCubic { control1X: 99.673; control1Y: -10.496; control2X: 89.737; control2Y: -22.16; x: 89.737; y: -22.16 }
+ PathCubic { control1X: 91.033; control1Y: -25.184; control2X: 86.281; control2Y: -39.008; x: 81.097; y: -48.08 }
+ PathCubic { control1X: 75.913; control1Y: -57.152; control2X: 60.302; control2Y: -56.195; x: 43.08; y: -57.152 }
+ PathCubic { control1X: 27.528; control1Y: -58.016; control2X: 9.384; control2Y: -35.12; x: 8.088; y: -33.392 }
+ }
+
+ ShapePath {
+ fillColor: "#efaa7c"
+ strokeWidth: -1
+ PathMove { x: 8.816; y: -32.744 }
+ PathCubic { control1X: 7.544; control1Y: -31.048; control2X: 13.48; control2Y: 5.841; x: 14.752; y: 11.353 }
+ PathCubic { control1X: 16.024; control1Y: 16.865; control2X: 13.48; control2Y: 42.305; x: 13.48; y: 42.305 }
+ PathCubic { control1X: 44.884; control1Y: 33.145; control2X: 17.296; control2Y: 35.097; x: 44.008; y: 38.913 }
+ PathCubic { control1X: 70.721; control1Y: 42.729; control2X: 95.313; control2Y: 8.385; x: 97.009; y: -0.944 }
+ PathCubic { control1X: 98.705; control1Y: -10.272; control2X: 88.953; control2Y: -21.72; x: 88.953; y: -21.72 }
+ PathCubic { control1X: 90.225; control1Y: -24.688; control2X: 85.561; control2Y: -38.256; x: 80.473; y: -47.16 }
+ PathCubic { control1X: 75.385; control1Y: -56.064; control2X: 60.063; control2Y: -55.125; x: 43.16; y: -56.064 }
+ PathCubic { control1X: 27.896; control1Y: -56.912; control2X: 10.088; control2Y: -34.44; x: 8.816; y: -32.744 }
+ }
+
+ ShapePath {
+ fillColor: "#f4c6a8"
+ strokeWidth: -1
+ PathMove { x: 9.544; y: -32.096 }
+ PathCubic { control1X: 8.296; control1Y: -30.432; control2X: 14.12; control2Y: 5.761; x: 15.368; y: 11.169 }
+ PathCubic { control1X: 16.616; control1Y: 16.577; control2X: 14.12; control2Y: 41.537; x: 14.12; y: 41.537 }
+ PathCubic { control1X: 43.556; control1Y: 32.497; control2X: 17.864; control2Y: 34.465; x: 44.072; y: 38.209 }
+ PathCubic { control1X: 70.281; control1Y: 41.953; control2X: 94.409; control2Y: 8.257; x: 96.073; y: -0.895 }
+ PathCubic { control1X: 97.737; control1Y: -10.048; control2X: 88.169; control2Y: -21.28; x: 88.169; y: -21.28 }
+ PathCubic { control1X: 89.417; control1Y: -24.192; control2X: 84.841; control2Y: -37.504; x: 79.849; y: -46.24 }
+ PathCubic { control1X: 74.857; control1Y: -54.976; control2X: 59.824; control2Y: -54.055; x: 43.24; y: -54.976 }
+ PathCubic { control1X: 28.264; control1Y: -55.808; control2X: 10.792; control2Y: -33.76; x: 9.544; y: -32.096 }
+ }
+
+ ShapePath {
+ fillColor: "#f9e2d3"
+ strokeWidth: -1
+ PathMove { x: 10.272; y: -31.448 }
+ PathCubic { control1X: 9.048; control1Y: -29.816; control2X: 14.76; control2Y: 5.681; x: 15.984; y: 10.985 }
+ PathCubic { control1X: 17.208; control1Y: 16.289; control2X: 14.76; control2Y: 40.769; x: 14.76; y: 40.769 }
+ PathCubic { control1X: 42.628; control1Y: 31.849; control2X: 18.432; control2Y: 33.833; x: 44.136; y: 37.505 }
+ PathCubic { control1X: 69.841; control1Y: 41.177; control2X: 93.505; control2Y: 8.129; x: 95.137; y: -0.848 }
+ PathCubic { control1X: 96.769; control1Y: -9.824; control2X: 87.385; control2Y: -20.84; x: 87.385; y: -20.84 }
+ PathCubic { control1X: 88.609; control1Y: -23.696; control2X: 84.121; control2Y: -36.752; x: 79.225; y: -45.32 }
+ PathCubic { control1X: 74.329; control1Y: -53.888; control2X: 59.585; control2Y: -52.985; x: 43.32; y: -53.888 }
+ PathCubic { control1X: 28.632; control1Y: -54.704; control2X: 11.496; control2Y: -33.08; x: 10.272; y: -31.448 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeWidth: -1
+ PathMove { x: 44.2; y: 36.8 }
+ PathCubic { control1X: 69.4; control1Y: 40.4; control2X: 92.601; control2Y: 8; x: 94.201; y: -0.8 }
+ PathCubic { control1X: 95.801; control1Y: -9.6; control2X: 86.601; control2Y: -20.4; x: 86.601; y: -20.4 }
+ PathCubic { control1X: 87.801; control1Y: -23.2; control2X: 83.4; control2Y: -36; x: 78.6; y: -44.4 }
+ PathCubic { control1X: 73.8; control1Y: -52.8; control2X: 59.346; control2Y: -51.914; x: 43.4; y: -52.8 }
+ PathCubic { control1X: 29; control1Y: -53.6; control2X: 12.2; control2Y: -32.4; x: 11; y: -30.8 }
+ PathCubic { control1X: 9.8; control1Y: -29.2; control2X: 15.4; control2Y: 5.6; x: 16.6; y: 10.8 }
+ PathCubic { control1X: 17.8; control1Y: 16; control2X: 15.4; control2Y: 40; x: 15.4; y: 40 }
+ PathCubic { control1X: 40.9; control1Y: 31.4; control2X: 19; control2Y: 33.2; x: 44.2; y: 36.8 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 90.601; y: 2.8 }
+ PathCubic { control1X: 90.601; control1Y: 2.8; control2X: 62.8; control2Y: 10.4; x: 51.2; y: 8.8 }
+ PathCubic { control1X: 51.2; control1Y: 8.8; control2X: 35.4; control2Y: 2.2; x: 26.6; y: 24 }
+ PathCubic { control1X: 26.6; control1Y: 24; control2X: 23; control2Y: 31.2; x: 21; y: 33.2 }
+ PathCubic { control1X: 19; control1Y: 35.2; control2X: 90.601; control2Y: 2.8; x: 90.601; y: 2.8 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 94.401; y: 0.6 }
+ PathCubic { control1X: 94.401; control1Y: 0.6; control2X: 65.4; control2Y: 12.8; x: 55.4; y: 12.4 }
+ PathCubic { control1X: 55.4; control1Y: 12.4; control2X: 39; control2Y: 7.8; x: 30.6; y: 22.4 }
+ PathCubic { control1X: 30.6; control1Y: 22.4; control2X: 22.2; control2Y: 31.6; x: 19; y: 33.2 }
+ PathCubic { control1X: 19; control1Y: 33.2; control2X: 18.6; control2Y: 34.8; x: 25; y: 30.8 }
+ PathLine { x: 35.4; y: 36 }
+ PathCubic { control1X: 35.4; control1Y: 36; control2X: 50.2; control2Y: 45.6; x: 59.8; y: 29.6 }
+ PathCubic { control1X: 59.8; control1Y: 29.6; control2X: 63.8; control2Y: 18.4; x: 63.8; y: 16.4 }
+ PathCubic { control1X: 63.8; control1Y: 14.4; control2X: 85; control2Y: 8.8; x: 86.601; y: 8.4 }
+ PathCubic { control1X: 88.201; control1Y: 8; control2X: 94.801; control2Y: 3.8; x: 94.401; y: 0.6 }
+ }
+
+ ShapePath {
+ fillColor: "#99cc32"
+ strokeWidth: -1
+ PathMove { x: 47; y: 36.514 }
+ PathCubic { control1X: 40.128; control1Y: 36.514; control2X: 31.755; control2Y: 32.649; x: 31.755; y: 26.4 }
+ PathCubic { control1X: 31.755; control1Y: 20.152; control2X: 40.128; control2Y: 13.887; x: 47; y: 13.887 }
+ PathCubic { control1X: 53.874; control1Y: 13.887; control2X: 59.446; control2Y: 18.952; x: 59.446; y: 25.2 }
+ PathCubic { control1X: 59.446; control1Y: 31.449; control2X: 53.874; control2Y: 36.514; x: 47; y: 36.514 }
+ }
+
+ ShapePath {
+ fillColor: "#659900"
+ strokeWidth: -1
+ PathMove { x: 43.377; y: 19.83 }
+ PathCubic { control1X: 38.531; control1Y: 20.552; control2X: 33.442; control2Y: 22.055; x: 33.514; y: 21.839 }
+ PathCubic { control1X: 35.054; control1Y: 17.22; control2X: 41.415; control2Y: 13.887; x: 47; y: 13.887 }
+ PathCubic { control1X: 51.296; control1Y: 13.887; control2X: 55.084; control2Y: 15.865; x: 57.32; y: 18.875 }
+ PathCubic { control1X: 57.32; control1Y: 18.875; control2X: 52.004; control2Y: 18.545; x: 43.377; y: 19.83 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeWidth: -1
+ PathMove { x: 55.4; y: 19.6 }
+ PathCubic { control1X: 55.4; control1Y: 19.6; control2X: 51; control2Y: 16.4; x: 51; y: 18.6 }
+ PathCubic { control1X: 51; control1Y: 18.6; control2X: 54.6; control2Y: 23; x: 55.4; y: 19.6 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 45.4; y: 27.726 }
+ PathCubic { control1X: 42.901; control1Y: 27.726; control2X: 40.875; control2Y: 25.7; x: 40.875; y: 23.2 }
+ PathCubic { control1X: 40.875; control1Y: 20.701; control2X: 42.901; control2Y: 18.675; x: 45.4; y: 18.675 }
+ PathCubic { control1X: 47.9; control1Y: 18.675; control2X: 49.926; control2Y: 20.701; x: 49.926; y: 23.2 }
+ PathCubic { control1X: 49.926; control1Y: 25.7; control2X: 47.9; control2Y: 27.726; x: 45.4; y: 27.726 }
+ }
+
+ ShapePath {
+ fillColor: "#cc7226"
+ strokeWidth: -1
+ PathMove { x: -58.6; y: 14.4 }
+ PathCubic { control1X: -58.6; control1Y: 14.4; control2X: -61.8; control2Y: -6.8; x: -59.4; y: -11.2 }
+ PathCubic { control1X: -59.4; control1Y: -11.2; control2X: -48.6; control2Y: -21.2; x: -49; y: -24.8 }
+ PathCubic { control1X: -49; control1Y: -24.8; control2X: -49.4; control2Y: -42.8; x: -50.6; y: -43.6 }
+ PathCubic { control1X: -51.8; control1Y: -44.4; control2X: -59.4; control2Y: -50.4; x: -65.4; y: -44 }
+ PathCubic { control1X: -65.4; control1Y: -44; control2X: -75.8; control2Y: -26; x: -75; y: -19.6 }
+ PathLine { x: -75; y: -17.6 }
+ PathCubic { control1X: -75; control1Y: -17.6; control2X: -82.6; control2Y: -18; x: -84.2; y: -16 }
+ PathCubic { control1X: -84.2; control1Y: -16; control2X: -85.4; control2Y: -10.8; x: -86.6; y: -10.4 }
+ PathCubic { control1X: -86.6; control1Y: -10.4; control2X: -89.4; control2Y: -8; x: -87.4; y: -5.2 }
+ PathCubic { control1X: -87.4; control1Y: -5.2; control2X: -89.4; control2Y: -2.8; x: -89; y: 1.2 }
+ PathLine { x: -81.4; y: 5.2 }
+ PathCubic { control1X: -81.4; control1Y: 5.2; control2X: -79.4; control2Y: 19.6; x: -68.6; y: 24.8 }
+ PathCubic { control1X: -63.764; control1Y: 27.129; control2X: -60.6; control2Y: 20.4; x: -58.6; y: 14.4 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeWidth: -1
+ PathMove { x: -59.6; y: 12.56 }
+ PathCubic { control1X: -59.6; control1Y: 12.56; control2X: -62.48; control2Y: -6.52; x: -60.32; y: -10.48 }
+ PathCubic { control1X: -60.32; control1Y: -10.48; control2X: -50.6; control2Y: -19.48; x: -50.96; y: -22.72 }
+ PathCubic { control1X: -50.96; control1Y: -22.72; control2X: -51.32; control2Y: -38.92; x: -52.4; y: -39.64 }
+ PathCubic { control1X: -53.48; control1Y: -40.36; control2X: -60.32; control2Y: -45.76; x: -65.72; y: -40 }
+ PathCubic { control1X: -65.72; control1Y: -40; control2X: -75.08; control2Y: -23.8; x: -74.36; y: -18.04 }
+ PathLine { x: -74.36; y: -16.24 }
+ PathCubic { control1X: -74.36; control1Y: -16.24; control2X: -81.2; control2Y: -16.6; x: -82.64; y: -14.8 }
+ PathCubic { control1X: -82.64; control1Y: -14.8; control2X: -83.72; control2Y: -10.12; x: -84.8; y: -9.76 }
+ PathCubic { control1X: -84.8; control1Y: -9.76; control2X: -87.32; control2Y: -7.6; x: -85.52; y: -5.08 }
+ PathCubic { control1X: -85.52; control1Y: -5.08; control2X: -87.32; control2Y: -2.92; x: -86.96; y: 0.68 }
+ PathLine { x: -80.12; y: 4.28 }
+ PathCubic { control1X: -80.12; control1Y: 4.28; control2X: -78.32; control2Y: 17.24; x: -68.6; y: 21.92 }
+ PathCubic { control1X: -64.248; control1Y: 24.015; control2X: -61.4; control2Y: 17.96; x: -59.6; y: 12.56 }
+ }
+
+ ShapePath {
+ fillColor: "#eb955c"
+ strokeWidth: -1
+ PathMove { x: -51.05; y: -42.61 }
+ PathCubic { control1X: -52.14; control1Y: -43.47; control2X: -59.63; control2Y: -49.24; x: -65.48; y: -43 }
+ PathCubic { control1X: -65.48; control1Y: -43; control2X: -75.62; control2Y: -25.45; x: -74.84; y: -19.21 }
+ PathLine { x: -74.84; y: -17.26 }
+ PathCubic { control1X: -74.84; control1Y: -17.26; control2X: -82.25; control2Y: -17.65; x: -83.81; y: -15.7 }
+ PathCubic { control1X: -83.81; control1Y: -15.7; control2X: -84.98; control2Y: -10.63; x: -86.15; y: -10.24 }
+ PathCubic { control1X: -86.15; control1Y: -10.24; control2X: -88.88; control2Y: -7.9; x: -86.93; y: -5.17 }
+ PathCubic { control1X: -86.93; control1Y: -5.17; control2X: -88.88; control2Y: -2.83; x: -88.49; y: 1.07 }
+ PathLine { x: -81.08; y: 4.97 }
+ PathCubic { control1X: -81.08; control1Y: 4.97; control2X: -79.13; control2Y: 19.01; x: -68.6; y: 24.08 }
+ PathCubic { control1X: -63.886; control1Y: 26.35; control2X: -60.8; control2Y: 19.79; x: -58.85; y: 13.94 }
+ PathCubic { control1X: -58.85; control1Y: 13.94; control2X: -61.97; control2Y: -6.73; x: -59.63; y: -11.02 }
+ PathCubic { control1X: -59.63; control1Y: -11.02; control2X: -49.1; control2Y: -20.77; x: -49.49; y: -24.28 }
+ PathCubic { control1X: -49.49; control1Y: -24.28; control2X: -49.88; control2Y: -41.83; x: -51.05; y: -42.61 }
+ }
+
+ ShapePath {
+ fillColor: "#f2b892"
+ strokeWidth: -1
+ PathMove { x: -51.5; y: -41.62 }
+ PathCubic { control1X: -52.48; control1Y: -42.54; control2X: -59.86; control2Y: -48.08; x: -65.56; y: -42 }
+ PathCubic { control1X: -65.56; control1Y: -42; control2X: -75.44; control2Y: -24.9; x: -74.68; y: -18.82 }
+ PathLine { x: -74.68; y: -16.92 }
+ PathCubic { control1X: -74.68; control1Y: -16.92; control2X: -81.9; control2Y: -17.3; x: -83.42; y: -15.4 }
+ PathCubic { control1X: -83.42; control1Y: -15.4; control2X: -84.56; control2Y: -10.46; x: -85.7; y: -10.08 }
+ PathCubic { control1X: -85.7; control1Y: -10.08; control2X: -88.36; control2Y: -7.8; x: -86.46; y: -5.14 }
+ PathCubic { control1X: -86.46; control1Y: -5.14; control2X: -88.36; control2Y: -2.86; x: -87.98; y: 0.94 }
+ PathLine { x: -80.76; y: 4.74 }
+ PathCubic { control1X: -80.76; control1Y: 4.74; control2X: -78.86; control2Y: 18.42; x: -68.6; y: 23.36 }
+ PathCubic { control1X: -64.006; control1Y: 25.572; control2X: -61; control2Y: 19.18; x: -59.1; y: 13.48 }
+ PathCubic { control1X: -59.1; control1Y: 13.48; control2X: -62.14; control2Y: -6.66; x: -59.86; y: -10.84 }
+ PathCubic { control1X: -59.86; control1Y: -10.84; control2X: -49.6; control2Y: -20.34; x: -49.98; y: -23.76 }
+ PathCubic { control1X: -49.98; control1Y: -23.76; control2X: -50.36; control2Y: -40.86; x: -51.5; y: -41.62 }
+ }
+
+ ShapePath {
+ fillColor: "#f8dcc8"
+ strokeWidth: -1
+ PathMove { x: -51.95; y: -40.63 }
+ PathCubic { control1X: -52.82; control1Y: -41.61; control2X: -60.09; control2Y: -46.92; x: -65.64; y: -41 }
+ PathCubic { control1X: -65.64; control1Y: -41; control2X: -75.26; control2Y: -24.35; x: -74.52; y: -18.43 }
+ PathLine { x: -74.52; y: -16.58 }
+ PathCubic { control1X: -74.52; control1Y: -16.58; control2X: -81.55; control2Y: -16.95; x: -83.03; y: -15.1 }
+ PathCubic { control1X: -83.03; control1Y: -15.1; control2X: -84.14; control2Y: -10.29; x: -85.25; y: -9.92 }
+ PathCubic { control1X: -85.25; control1Y: -9.92; control2X: -87.84; control2Y: -7.7; x: -85.99; y: -5.11 }
+ PathCubic { control1X: -85.99; control1Y: -5.11; control2X: -87.84; control2Y: -2.89; x: -87.47; y: 0.81 }
+ PathLine { x: -80.44; y: 4.51 }
+ PathCubic { control1X: -80.44; control1Y: 4.51; control2X: -78.59; control2Y: 17.83; x: -68.6; y: 22.64 }
+ PathCubic { control1X: -64.127; control1Y: 24.794; control2X: -61.2; control2Y: 18.57; x: -59.35; y: 13.02 }
+ PathCubic { control1X: -59.35; control1Y: 13.02; control2X: -62.31; control2Y: -6.59; x: -60.09; y: -10.66 }
+ PathCubic { control1X: -60.09; control1Y: -10.66; control2X: -50.1; control2Y: -19.91; x: -50.47; y: -23.24 }
+ PathCubic { control1X: -50.47; control1Y: -23.24; control2X: -50.84; control2Y: -39.89; x: -51.95; y: -40.63 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeWidth: -1
+ PathMove { x: -59.6; y: 12.46 }
+ PathCubic { control1X: -59.6; control1Y: 12.46; control2X: -62.48; control2Y: -6.52; x: -60.32; y: -10.48 }
+ PathCubic { control1X: -60.32; control1Y: -10.48; control2X: -50.6; control2Y: -19.48; x: -50.96; y: -22.72 }
+ PathCubic { control1X: -50.96; control1Y: -22.72; control2X: -51.32; control2Y: -38.92; x: -52.4; y: -39.64 }
+ PathCubic { control1X: -53.16; control1Y: -40.68; control2X: -60.32; control2Y: -45.76; x: -65.72; y: -40 }
+ PathCubic { control1X: -65.72; control1Y: -40; control2X: -75.08; control2Y: -23.8; x: -74.36; y: -18.04 }
+ PathLine { x: -74.36; y: -16.24 }
+ PathCubic { control1X: -74.36; control1Y: -16.24; control2X: -81.2; control2Y: -16.6; x: -82.64; y: -14.8 }
+ PathCubic { control1X: -82.64; control1Y: -14.8; control2X: -83.72; control2Y: -10.12; x: -84.8; y: -9.76 }
+ PathCubic { control1X: -84.8; control1Y: -9.76; control2X: -87.32; control2Y: -7.6; x: -85.52; y: -5.08 }
+ PathCubic { control1X: -85.52; control1Y: -5.08; control2X: -87.32; control2Y: -2.92; x: -86.96; y: 0.68 }
+ PathLine { x: -80.12; y: 4.28 }
+ PathCubic { control1X: -80.12; control1Y: 4.28; control2X: -78.32; control2Y: 17.24; x: -68.6; y: 21.92 }
+ PathCubic { control1X: -64.248; control1Y: 24.015; control2X: -61.4; control2Y: 17.86; x: -59.6; y: 12.46 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -62.7; y: 6.2 }
+ PathCubic { control1X: -62.7; control1Y: 6.2; control2X: -84.3; control2Y: -4; x: -85.2; y: -4.8 }
+ PathCubic { control1X: -85.2; control1Y: -4.8; control2X: -76.1; control2Y: 3.4; x: -75.3; y: 3.4 }
+ PathCubic { control1X: -74.5; control1Y: 3.4; control2X: -62.7; control2Y: 6.2; x: -62.7; y: 6.2 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -79.8; y: 0 }
+ PathCubic { control1X: -79.8; control1Y: 0; control2X: -61.4; control2Y: 3.6; x: -61.4; y: 8 }
+ PathCubic { control1X: -61.4; control1Y: 10.912; control2X: -61.643; control2Y: 24.331; x: -67; y: 22.8 }
+ PathCubic { control1X: -75.4; control1Y: 20.4; control2X: -71.8; control2Y: 6; x: -79.8; y: 0 }
+ }
+
+ ShapePath {
+ fillColor: "#99cc32"
+ strokeWidth: -1
+ PathMove { x: -71.4; y: 3.8 }
+ PathCubic { control1X: -71.4; control1Y: 3.8; control2X: -62.422; control2Y: 5.274; x: -61.4; y: 8 }
+ PathCubic { control1X: -60.8; control1Y: 9.6; control2X: -60.137; control2Y: 17.908; x: -65.6; y: 19 }
+ PathCubic { control1X: -70.152; control1Y: 19.911; control2X: -72.382; control2Y: 9.69; x: -71.4; y: 3.8 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 14.595; y: 46.349 }
+ PathCubic { control1X: 14.098; control1Y: 44.607; control2X: 15.409; control2Y: 44.738; x: 17.2; y: 44.2 }
+ PathCubic { control1X: 19.2; control1Y: 43.6; control2X: 31.4; control2Y: 39.8; x: 32.2; y: 37.2 }
+ PathCubic { control1X: 33; control1Y: 34.6; control2X: 46.2; control2Y: 39; x: 46.2; y: 39 }
+ PathCubic { control1X: 48; control1Y: 39.8; control2X: 52.4; control2Y: 42.4; x: 52.4; y: 42.4 }
+ PathCubic { control1X: 57.2; control1Y: 43.6; control2X: 63.8; control2Y: 44; x: 63.8; y: 44 }
+ PathCubic { control1X: 66.2; control1Y: 45; control2X: 69.6; control2Y: 47.8; x: 69.6; y: 47.8 }
+ PathCubic { control1X: 84.2; control1Y: 58; control2X: 96.601; control2Y: 50.8; x: 96.601; y: 50.8 }
+ PathCubic { control1X: 116.601; control1Y: 44.2; control2X: 110.601; control2Y: 27; x: 110.601; y: 27 }
+ PathCubic { control1X: 107.601; control1Y: 18; control2X: 110.801; control2Y: 14.6; x: 110.801; y: 14.6 }
+ PathCubic { control1X: 111.001; control1Y: 10.8; control2X: 118.201; control2Y: 17.2; x: 118.201; y: 17.2 }
+ PathCubic { control1X: 120.801; control1Y: 21.4; control2X: 121.601; control2Y: 26.4; x: 121.601; y: 26.4 }
+ PathCubic { control1X: 129.601; control1Y: 37.6; control2X: 126.201; control2Y: 19.8; x: 126.201; y: 19.8 }
+ PathCubic { control1X: 126.401; control1Y: 18.8; control2X: 123.601; control2Y: 15.2; x: 123.601; y: 14 }
+ PathCubic { control1X: 123.601; control1Y: 12.8; control2X: 121.801; control2Y: 9.4; x: 121.801; y: 9.4 }
+ PathCubic { control1X: 118.801; control1Y: 6; control2X: 121.201; control2Y: -1; x: 121.201; y: -1 }
+ PathCubic { control1X: 123.001; control1Y: -14.8; control2X: 120.801; control2Y: -13; x: 120.801; y: -13 }
+ PathCubic { control1X: 119.601; control1Y: -14.8; control2X: 110.401; control2Y: -4.8; x: 110.401; y: -4.8 }
+ PathCubic { control1X: 108.201; control1Y: -1.4; control2X: 102.201; control2Y: 0.2; x: 102.201; y: 0.2 }
+ PathCubic { control1X: 99.401; control1Y: 2; control2X: 96.001; control2Y: 0.6; x: 96.001; y: 0.6 }
+ PathCubic { control1X: 93.401; control1Y: 0.2; control2X: 87.801; control2Y: 7.2; x: 87.801; y: 7.2 }
+ PathCubic { control1X: 90.601; control1Y: 7; control2X: 93.001; control2Y: 11.4; x: 95.401; y: 11.6 }
+ PathCubic { control1X: 97.801; control1Y: 11.8; control2X: 99.601; control2Y: 9.2; x: 101.201; y: 8.6 }
+ PathCubic { control1X: 102.801; control1Y: 8; control2X: 105.601; control2Y: 13.8; x: 105.601; y: 13.8 }
+ PathCubic { control1X: 106.001; control1Y: 16.4; control2X: 100.401; control2Y: 21.2; x: 100.401; y: 21.2 }
+ PathCubic { control1X: 100.001; control1Y: 25.8; control2X: 98.401; control2Y: 24.2; x: 98.401; y: 24.2 }
+ PathCubic { control1X: 95.401; control1Y: 23.6; control2X: 94.201; control2Y: 27.4; x: 93.201; y: 32 }
+ PathCubic { control1X: 92.201; control1Y: 36.6; control2X: 88.001; control2Y: 37; x: 88.001; y: 37 }
+ PathCubic { control1X: 86.401; control1Y: 44.4; control2X: 85.2; control2Y: 41.4; x: 85.2; y: 41.4 }
+ PathCubic { control1X: 85; control1Y: 35.8; control2X: 79; control2Y: 41.6; x: 79; y: 41.6 }
+ PathCubic { control1X: 77.8; control1Y: 43.6; control2X: 73.2; control2Y: 41.4; x: 73.2; y: 41.4 }
+ PathCubic { control1X: 66.4; control1Y: 39.4; control2X: 68.8; control2Y: 37.4; x: 68.8; y: 37.4 }
+ PathCubic { control1X: 70.6; control1Y: 35.2; control2X: 81.8; control2Y: 37.4; x: 81.8; y: 37.4 }
+ PathCubic { control1X: 84; control1Y: 35.8; control2X: 76; control2Y: 31.8; x: 76; y: 31.8 }
+ PathCubic { control1X: 75.4; control1Y: 30; control2X: 76.4; control2Y: 25.6; x: 76.4; y: 25.6 }
+ PathCubic { control1X: 77.6; control1Y: 22.4; control2X: 84.4; control2Y: 16.8; x: 84.4; y: 16.8 }
+ PathCubic { control1X: 93.801; control1Y: 15.6; control2X: 91.001; control2Y: 14; x: 91.001; y: 14 }
+ PathCubic { control1X: 84.801; control1Y: 8.8; control2X: 79; control2Y: 16.4; x: 79; y: 16.4 }
+ PathCubic { control1X: 76.8; control1Y: 22.6; control2X: 59.4; control2Y: 37.6; x: 59.4; y: 37.6 }
+ PathCubic { control1X: 54.6; control1Y: 41; control2X: 57.2; control2Y: 34.2; x: 53.2; y: 37.6 }
+ PathCubic { control1X: 49.2; control1Y: 41; control2X: 28.6; control2Y: 32; x: 28.6; y: 32 }
+ PathCubic { control1X: 17.038; control1Y: 30.807; control2X: 14.306; control2Y: 46.549; x: 10.777; y: 43.429 }
+ PathCubic { control1X: 10.777; control1Y: 43.429; control2X: 16.195; control2Y: 51.949; x: 14.595; y: 46.349 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 209.401; y: -120 }
+ PathCubic { control1X: 209.401; control1Y: -120; control2X: 183.801; control2Y: -112; x: 181.001; y: -93.2 }
+ PathCubic { control1X: 181.001; control1Y: -93.2; control2X: 178.601; control2Y: -70.4; x: 199.001; y: -52.8 }
+ PathCubic { control1X: 199.001; control1Y: -52.8; control2X: 199.401; control2Y: -46.4; x: 201.401; y: -43.2 }
+ PathCubic { control1X: 201.401; control1Y: -43.2; control2X: 199.801; control2Y: -38.4; x: 218.601; y: -46 }
+ PathLine { x: 245.801; y: -54.4 }
+ PathCubic { control1X: 245.801; control1Y: -54.4; control2X: 252.201; control2Y: -56.8; x: 257.401; y: -65.6 }
+ PathCubic { control1X: 262.601; control1Y: -74.4; control2X: 277.801; control2Y: -93.2; x: 274.201; y: -118.4 }
+ PathCubic { control1X: 274.201; control1Y: -118.4; control2X: 275.401; control2Y: -129.6; x: 269.401; y: -130 }
+ PathCubic { control1X: 269.401; control1Y: -130; control2X: 261.001; control2Y: -131.6; x: 253.801; y: -124 }
+ PathCubic { control1X: 253.801; control1Y: -124; control2X: 247.001; control2Y: -120.8; x: 244.601; y: -121.2 }
+ PathLine { x: 209.401; y: -120 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 264.022; y: -120.99 }
+ PathCubic { control1X: 264.022; control1Y: -120.99; control2X: 266.122; control2Y: -129.92; x: 261.282; y: -125.08 }
+ PathCubic { control1X: 261.282; control1Y: -125.08; control2X: 254.242; control2Y: -119.36; x: 246.761; y: -119.36 }
+ PathCubic { control1X: 246.761; control1Y: -119.36; control2X: 232.241; control2Y: -117.16; x: 227.841; y: -103.96 }
+ PathCubic { control1X: 227.841; control1Y: -103.96; control2X: 223.881; control2Y: -77.12; x: 231.801; y: -71.4 }
+ PathCubic { control1X: 231.801; control1Y: -71.4; control2X: 236.641; control2Y: -63.92; x: 243.681; y: -70.52 }
+ PathCubic { control1X: 250.722; control1Y: -77.12; control2X: 266.222; control2Y: -107.35; x: 264.022; y: -120.99 }
+ }
+
+ ShapePath {
+ fillColor: "#323232"
+ strokeWidth: -1
+ PathMove { x: 263.648; y: -120.632 }
+ PathCubic { control1X: 263.648; control1Y: -120.632; control2X: 265.738; control2Y: -129.376; x: 260.986; y: -124.624 }
+ PathCubic { control1X: 260.986; control1Y: -124.624; control2X: 254.074; control2Y: -119.008; x: 246.729; y: -119.008 }
+ PathCubic { control1X: 246.729; control1Y: -119.008; control2X: 232.473; control2Y: -116.848; x: 228.153; y: -103.888 }
+ PathCubic { control1X: 228.153; control1Y: -103.888; control2X: 224.265; control2Y: -77.536; x: 232.041; y: -71.92 }
+ PathCubic { control1X: 232.041; control1Y: -71.92; control2X: 236.793; control2Y: -64.576; x: 243.705; y: -71.056 }
+ PathCubic { control1X: 250.618; control1Y: -77.536; control2X: 265.808; control2Y: -107.24; x: 263.648; y: -120.632 }
+ }
+
+ ShapePath {
+ fillColor: "#666666"
+ strokeWidth: -1
+ PathMove { x: 263.274; y: -120.274 }
+ PathCubic { control1X: 263.274; control1Y: -120.274; control2X: 265.354; control2Y: -128.832; x: 260.69; y: -124.168 }
+ PathCubic { control1X: 260.69; control1Y: -124.168; control2X: 253.906; control2Y: -118.656; x: 246.697; y: -118.656 }
+ PathCubic { control1X: 246.697; control1Y: -118.656; control2X: 232.705; control2Y: -116.536; x: 228.465; y: -103.816 }
+ PathCubic { control1X: 228.465; control1Y: -103.816; control2X: 224.649; control2Y: -77.952; x: 232.281; y: -72.44 }
+ PathCubic { control1X: 232.281; control1Y: -72.44; control2X: 236.945; control2Y: -65.232; x: 243.729; y: -71.592 }
+ PathCubic { control1X: 250.514; control1Y: -77.952; control2X: 265.394; control2Y: -107.13; x: 263.274; y: -120.274 }
+ }
+
+ ShapePath {
+ fillColor: "#999999"
+ strokeWidth: -1
+ PathMove { x: 262.9; y: -119.916 }
+ PathCubic { control1X: 262.9; control1Y: -119.916; control2X: 264.97; control2Y: -128.288; x: 260.394; y: -123.712 }
+ PathCubic { control1X: 260.394; control1Y: -123.712; control2X: 253.738; control2Y: -118.304; x: 246.665; y: -118.304 }
+ PathCubic { control1X: 246.665; control1Y: -118.304; control2X: 232.937; control2Y: -116.224; x: 228.777; y: -103.744 }
+ PathCubic { control1X: 228.777; control1Y: -103.744; control2X: 225.033; control2Y: -78.368; x: 232.521; y: -72.96 }
+ PathCubic { control1X: 232.521; control1Y: -72.96; control2X: 237.097; control2Y: -65.888; x: 243.753; y: -72.128 }
+ PathCubic { control1X: 250.41; control1Y: -78.368; control2X: 264.98; control2Y: -107.02; x: 262.9; y: -119.916 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 262.526; y: -119.558 }
+ PathCubic { control1X: 262.526; control1Y: -119.558; control2X: 264.586; control2Y: -127.744; x: 260.098; y: -123.256 }
+ PathCubic { control1X: 260.098; control1Y: -123.256; control2X: 253.569; control2Y: -117.952; x: 246.633; y: -117.952 }
+ PathCubic { control1X: 246.633; control1Y: -117.952; control2X: 233.169; control2Y: -115.912; x: 229.089; y: -103.672 }
+ PathCubic { control1X: 229.089; control1Y: -103.672; control2X: 225.417; control2Y: -78.784; x: 232.761; y: -73.48 }
+ PathCubic { control1X: 232.761; control1Y: -73.48; control2X: 237.249; control2Y: -66.544; x: 243.777; y: -72.664 }
+ PathCubic { control1X: 250.305; control1Y: -78.784; control2X: 264.566; control2Y: -106.91; x: 262.526; y: -119.558 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeWidth: -1
+ PathMove { x: 262.151; y: -119.2 }
+ PathCubic { control1X: 262.151; control1Y: -119.2; control2X: 264.201; control2Y: -127.2; x: 259.801; y: -122.8 }
+ PathCubic { control1X: 259.801; control1Y: -122.8; control2X: 253.401; control2Y: -117.6; x: 246.601; y: -117.6 }
+ PathCubic { control1X: 246.601; control1Y: -117.6; control2X: 233.401; control2Y: -115.6; x: 229.401; y: -103.6 }
+ PathCubic { control1X: 229.401; control1Y: -103.6; control2X: 225.801; control2Y: -79.2; x: 233.001; y: -74 }
+ PathCubic { control1X: 233.001; control1Y: -74; control2X: 237.401; control2Y: -67.2; x: 243.801; y: -73.2 }
+ PathCubic { control1X: 250.201; control1Y: -79.2; control2X: 264.151; control2Y: -106.8; x: 262.151; y: -119.2 }
+ }
+
+ ShapePath {
+ fillColor: "#992600"
+ strokeWidth: -1
+ PathMove { x: 50.6; y: 84 }
+ PathCubic { control1X: 50.6; control1Y: 84; control2X: 30.2; control2Y: 64.8; x: 22.2; y: 64 }
+ PathCubic { control1X: 22.2; control1Y: 64; control2X: -12.2; control2Y: 60; x: -27; y: 78 }
+ PathCubic { control1X: -27; control1Y: 78; control2X: -9.4; control2Y: 57.6; x: 18.2; y: 63.2 }
+ PathCubic { control1X: 18.2; control1Y: 63.2; control2X: -3.4; control2Y: 58.8; x: -15.8; y: 62 }
+ PathCubic { control1X: -15.8; control1Y: 62; control2X: -32.6; control2Y: 62; x: -42.2; y: 76 }
+ PathLine { x: -45; y: 80.8 }
+ PathCubic { control1X: -45; control1Y: 80.8; control2X: -41; control2Y: 66; x: -22.6; y: 60 }
+ PathCubic { control1X: -22.6; control1Y: 60; control2X: 0.2; control2Y: 55.2; x: 11; y: 60 }
+ PathCubic { control1X: 11; control1Y: 60; control2X: -10.6; control2Y: 53.2; x: -20.6; y: 55.2 }
+ PathCubic { control1X: -20.6; control1Y: 55.2; control2X: -51; control2Y: 52.8; x: -63.8; y: 79.2 }
+ PathCubic { control1X: -63.8; control1Y: 79.2; control2X: -59.8; control2Y: 64.8; x: -45; y: 57.6 }
+ PathCubic { control1X: -45; control1Y: 57.6; control2X: -31.4; control2Y: 48.8; x: -11; y: 51.6 }
+ PathCubic { control1X: -11; control1Y: 51.6; control2X: 3.4; control2Y: 54.8; x: 8.6; y: 57.2 }
+ PathCubic { control1X: 13.8; control1Y: 59.6; control2X: 12.6; control2Y: 56.8; x: 4.2; y: 52 }
+ PathCubic { control1X: 4.2; control1Y: 52; control2X: -1.4; control2Y: 42; x: -15.4; y: 42.4 }
+ PathCubic { control1X: -15.4; control1Y: 42.4; control2X: -58.2; control2Y: 46; x: -68.6; y: 58 }
+ PathCubic { control1X: -68.6; control1Y: 58; control2X: -55; control2Y: 46.8; x: -44.6; y: 44 }
+ PathCubic { control1X: -44.6; control1Y: 44; control2X: -22.2; control2Y: 36; x: -13.8; y: 36.8 }
+ PathCubic { control1X: -13.8; control1Y: 36.8; control2X: 11; control2Y: 37.8; x: 18.6; y: 33.8 }
+ PathCubic { control1X: 18.6; control1Y: 33.8; control2X: 7.4; control2Y: 38.8; x: 10.6; y: 42 }
+ PathCubic { control1X: 13.8; control1Y: 45.2; control2X: 20.6; control2Y: 52.8; x: 20.6; y: 54 }
+ PathCubic { control1X: 20.6; control1Y: 55.2; control2X: 44.8; control2Y: 77.3; x: 48.4; y: 81.7 }
+ PathLine { x: 50.6; y: 84 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 189; y: 278 }
+ PathCubic { control1X: 189; control1Y: 278; control2X: 173.5; control2Y: 241.5; x: 161; y: 232 }
+ PathCubic { control1X: 161; control1Y: 232; control2X: 187; control2Y: 248; x: 190.5; y: 266 }
+ PathCubic { control1X: 190.5; control1Y: 266; control2X: 190.5; control2Y: 276; x: 189; y: 278 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 236; y: 285.5 }
+ PathCubic { control1X: 236; control1Y: 285.5; control2X: 209.5; control2Y: 230.5; x: 191; y: 206.5 }
+ PathCubic { control1X: 191; control1Y: 206.5; control2X: 234.5; control2Y: 244; x: 239.5; y: 270.5 }
+ PathLine { x: 240; y: 276 }
+ PathLine { x: 237; y: 273.5 }
+ PathCubic { control1X: 237; control1Y: 273.5; control2X: 236.5; control2Y: 282.5; x: 236; y: 285.5 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 292.5; y: 237 }
+ PathCubic { control1X: 292.5; control1Y: 237; control2X: 230; control2Y: 177.5; x: 228.5; y: 175 }
+ PathCubic { control1X: 228.5; control1Y: 175; control2X: 289; control2Y: 241; x: 292; y: 248.5 }
+ PathCubic { control1X: 292; control1Y: 248.5; control2X: 290; control2Y: 239.5; x: 292.5; y: 237 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 104; y: 280.5 }
+ PathCubic { control1X: 104; control1Y: 280.5; control2X: 123.5; control2Y: 228.5; x: 142.5; y: 251 }
+ PathCubic { control1X: 142.5; control1Y: 251; control2X: 157.5; control2Y: 261; x: 157; y: 264 }
+ PathCubic { control1X: 157; control1Y: 264; control2X: 153; control2Y: 257.5; x: 135; y: 258 }
+ PathCubic { control1X: 135; control1Y: 258; control2X: 116; control2Y: 255; x: 104; y: 280.5 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 294.5; y: 153 }
+ PathCubic { control1X: 294.5; control1Y: 153; control2X: 249.5; control2Y: 124.5; x: 242; y: 123 }
+ PathCubic { control1X: 230.193; control1Y: 120.639; control2X: 291.5; control2Y: 152; x: 296.5; y: 162.5 }
+ PathCubic { control1X: 296.5; control1Y: 162.5; control2X: 298.5; control2Y: 160; x: 294.5; y: 153 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 143.801; y: 259.601 }
+ PathCubic { control1X: 143.801; control1Y: 259.601; control2X: 164.201; control2Y: 257.601; x: 171.001; y: 250.801 }
+ PathLine { x: 175.401; y: 254.401 }
+ PathLine { x: 193.001; y: 216.001 }
+ PathLine { x: 196.601; y: 221.201 }
+ PathCubic { control1X: 196.601; control1Y: 221.201; control2X: 211.001; control2Y: 206.401; x: 210.201; y: 198.401 }
+ PathCubic { control1X: 209.401; control1Y: 190.401; control2X: 223.001; control2Y: 204.401; x: 223.001; y: 204.401 }
+ PathCubic { control1X: 223.001; control1Y: 204.401; control2X: 222.201; control2Y: 192.801; x: 229.401; y: 199.601 }
+ PathCubic { control1X: 229.401; control1Y: 199.601; control2X: 227.001; control2Y: 184.001; x: 235.401; y: 192.001 }
+ PathCubic { control1X: 235.401; control1Y: 192.001; control2X: 224.864; control2Y: 161.844; x: 247.401; y: 187.601 }
+ PathCubic { control1X: 253.001; control1Y: 194.001; control2X: 248.601; control2Y: 187.201; x: 248.601; y: 187.201 }
+ PathCubic { control1X: 248.601; control1Y: 187.201; control2X: 222.601; control2Y: 139.201; x: 244.201; y: 153.601 }
+ PathCubic { control1X: 244.201; control1Y: 153.601; control2X: 246.201; control2Y: 130.801; x: 245.001; y: 126.401 }
+ PathCubic { control1X: 243.801; control1Y: 122.001; control2X: 241.801; control2Y: 99.6; x: 237.001; y: 94.4 }
+ PathCubic { control1X: 232.201; control1Y: 89.2; control2X: 237.401; control2Y: 87.6; x: 243.001; y: 92.8 }
+ PathCubic { control1X: 243.001; control1Y: 92.8; control2X: 231.801; control2Y: 68.8; x: 245.001; y: 80.8 }
+ PathCubic { control1X: 245.001; control1Y: 80.8; control2X: 241.401; control2Y: 65.6; x: 237.001; y: 62.8 }
+ PathCubic { control1X: 237.001; control1Y: 62.8; control2X: 231.401; control2Y: 45.6; x: 246.601; y: 56.4 }
+ PathCubic { control1X: 246.601; control1Y: 56.4; control2X: 242.201; control2Y: 44; x: 239.001; y: 40.8 }
+ PathCubic { control1X: 239.001; control1Y: 40.8; control2X: 227.401; control2Y: 13.2; x: 234.601; y: 18 }
+ PathLine { x: 239.001; y: 21.6 }
+ PathCubic { control1X: 239.001; control1Y: 21.6; control2X: 232.201; control2Y: 7.6; x: 238.601; y: 12 }
+ PathCubic { control1X: 245.001; control1Y: 16.4; control2X: 245.001; control2Y: 16; x: 245.001; y: 16 }
+ PathCubic { control1X: 245.001; control1Y: 16; control2X: 223.801; control2Y: -17.2; x: 244.201; y: 0.4 }
+ PathCubic { control1X: 244.201; control1Y: 0.4; control2X: 236.042; control2Y: -13.518; x: 232.601; y: -20.4 }
+ PathCubic { control1X: 232.601; control1Y: -20.4; control2X: 213.801; control2Y: -40.8; x: 228.201; y: -34.4 }
+ PathLine { x: 233.001; y: -32.8 }
+ PathCubic { control1X: 233.001; control1Y: -32.8; control2X: 224.201; control2Y: -42.8; x: 216.201; y: -44.4 }
+ PathCubic { control1X: 208.201; control1Y: -46; control2X: 218.601; control2Y: -52.4; x: 225.001; y: -50.4 }
+ PathCubic { control1X: 231.401; control1Y: -48.4; control2X: 247.001; control2Y: -40.8; x: 247.001; y: -40.8 }
+ PathCubic { control1X: 247.001; control1Y: -40.8; control2X: 259.801; control2Y: -22; x: 263.801; y: -21.6 }
+ PathCubic { control1X: 263.801; control1Y: -21.6; control2X: 243.801; control2Y: -29.2; x: 249.801; y: -21.2 }
+ PathCubic { control1X: 249.801; control1Y: -21.2; control2X: 264.201; control2Y: -7.2; x: 257.001; y: -7.6 }
+ PathCubic { control1X: 257.001; control1Y: -7.6; control2X: 251.001; control2Y: -0.4; x: 255.801; y: 8.4 }
+ PathCubic { control1X: 255.801; control1Y: 8.4; control2X: 237.342; control2Y: -9.991; x: 252.201; y: 15.6 }
+ PathLine { x: 259.001; y: 32 }
+ PathCubic { control1X: 259.001; control1Y: 32; control2X: 234.601; control2Y: 7.2; x: 245.801; y: 29.2 }
+ PathCubic { control1X: 245.801; control1Y: 29.2; control2X: 263.001; control2Y: 52.8; x: 265.001; y: 53.2 }
+ PathCubic { control1X: 267.001; control1Y: 53.6; control2X: 271.401; control2Y: 62.4; x: 271.401; y: 62.4 }
+ PathLine { x: 267.001; y: 60.4 }
+ PathLine { x: 272.201; y: 69.2 }
+ PathCubic { control1X: 272.201; control1Y: 69.2; control2X: 261.001; control2Y: 57.2; x: 267.001; y: 70.4 }
+ PathLine { x: 272.601; y: 84.8 }
+ PathCubic { control1X: 272.601; control1Y: 84.8; control2X: 252.201; control2Y: 62.8; x: 265.801; y: 92.4 }
+ PathCubic { control1X: 265.801; control1Y: 92.4; control2X: 249.401; control2Y: 87.2; x: 258.201; y: 104.4 }
+ PathCubic { control1X: 258.201; control1Y: 104.4; control2X: 256.601; control2Y: 120.401; x: 257.001; y: 125.601 }
+ PathCubic { control1X: 257.401; control1Y: 130.801; control2X: 258.601; control2Y: 159.201; x: 254.201; y: 167.201 }
+ PathCubic { control1X: 249.801; control1Y: 175.201; control2X: 260.201; control2Y: 194.401; x: 262.201; y: 198.401 }
+ PathCubic { control1X: 264.201; control1Y: 202.401; control2X: 267.801; control2Y: 213.201; x: 259.001; y: 204.001 }
+ PathCubic { control1X: 250.201; control1Y: 194.801; control2X: 254.601; control2Y: 200.401; x: 256.601; y: 209.201 }
+ PathCubic { control1X: 258.601; control1Y: 218.001; control2X: 264.601; control2Y: 233.601; x: 263.801; y: 239.201 }
+ PathCubic { control1X: 263.801; control1Y: 239.201; control2X: 262.601; control2Y: 240.401; x: 259.401; y: 236.801 }
+ PathCubic { control1X: 259.401; control1Y: 236.801; control2X: 244.601; control2Y: 214.001; x: 246.201; y: 228.401 }
+ PathCubic { control1X: 246.201; control1Y: 228.401; control2X: 245.001; control2Y: 236.401; x: 241.801; y: 245.201 }
+ PathCubic { control1X: 241.801; control1Y: 245.201; control2X: 238.601; control2Y: 256.001; x: 238.601; y: 247.201 }
+ PathCubic { control1X: 238.601; control1Y: 247.201; control2X: 235.401; control2Y: 230.401; x: 232.601; y: 238.001 }
+ PathCubic { control1X: 229.801; control1Y: 245.601; control2X: 226.201; control2Y: 251.601; x: 223.401; y: 254.001 }
+ PathCubic { control1X: 220.601; control1Y: 256.401; control2X: 215.401; control2Y: 233.601; x: 214.201; y: 244.001 }
+ PathCubic { control1X: 214.201; control1Y: 244.001; control2X: 202.201; control2Y: 231.601; x: 197.401; y: 248.001 }
+ PathLine { x: 185.801; y: 264.401 }
+ PathCubic { control1X: 185.801; control1Y: 264.401; control2X: 185.401; control2Y: 252.001; x: 184.201; y: 258.001 }
+ PathCubic { control1X: 184.201; control1Y: 258.001; control2X: 154.201; control2Y: 264.001; x: 143.801; y: 259.601 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 109.401; y: -97.2 }
+ PathCubic { control1X: 109.401; control1Y: -97.2; control2X: 97.801; control2Y: -105.2; x: 93.801; y: -104.8 }
+ PathCubic { control1X: 89.801; control1Y: -104.4; control2X: 121.401; control2Y: -113.6; x: 162.601; y: -86 }
+ PathCubic { control1X: 162.601; control1Y: -86; control2X: 167.401; control2Y: -83.2; x: 171.001; y: -83.6 }
+ PathCubic { control1X: 171.001; control1Y: -83.6; control2X: 174.201; control2Y: -81.2; x: 171.401; y: -77.6 }
+ PathCubic { control1X: 171.401; control1Y: -77.6; control2X: 162.601; control2Y: -68; x: 173.801; y: -56.8 }
+ PathCubic { control1X: 173.801; control1Y: -56.8; control2X: 192.201; control2Y: -50; x: 186.601; y: -58.8 }
+ PathCubic { control1X: 186.601; control1Y: -58.8; control2X: 197.401; control2Y: -54.8; x: 199.801; y: -50.8 }
+ PathCubic { control1X: 202.201; control1Y: -46.8; control2X: 201.001; control2Y: -50.8; x: 201.001; y: -50.8 }
+ PathCubic { control1X: 201.001; control1Y: -50.8; control2X: 194.601; control2Y: -58; x: 188.601; y: -63.2 }
+ PathCubic { control1X: 188.601; control1Y: -63.2; control2X: 183.401; control2Y: -65.2; x: 180.601; y: -73.6 }
+ PathCubic { control1X: 177.801; control1Y: -82; control2X: 175.401; control2Y: -92; x: 179.801; y: -95.2 }
+ PathCubic { control1X: 179.801; control1Y: -95.2; control2X: 175.801; control2Y: -90.8; x: 176.601; y: -94.8 }
+ PathCubic { control1X: 177.401; control1Y: -98.8; control2X: 181.001; control2Y: -102.4; x: 182.601; y: -102.8 }
+ PathCubic { control1X: 184.201; control1Y: -103.2; control2X: 200.601; control2Y: -119; x: 207.401; y: -119.4 }
+ PathCubic { control1X: 207.401; control1Y: -119.4; control2X: 198.201; control2Y: -118; x: 195.201; y: -119 }
+ PathCubic { control1X: 192.201; control1Y: -120; control2X: 165.601; control2Y: -131.4; x: 159.601; y: -132.6 }
+ PathCubic { control1X: 159.601; control1Y: -132.6; control2X: 142.801; control2Y: -139.2; x: 154.801; y: -137.2 }
+ PathCubic { control1X: 154.801; control1Y: -137.2; control2X: 190.601; control2Y: -133.4; x: 208.801; y: -120.2 }
+ PathCubic { control1X: 208.801; control1Y: -120.2; control2X: 201.601; control2Y: -128.6; x: 183.201; y: -135.6 }
+ PathCubic { control1X: 183.201; control1Y: -135.6; control2X: 161.001; control2Y: -148.2; x: 125.801; y: -143.2 }
+ PathCubic { control1X: 125.801; control1Y: -143.2; control2X: 108.001; control2Y: -140; x: 100.201; y: -138.2 }
+ PathCubic { control1X: 100.201; control1Y: -138.2; control2X: 97.601; control2Y: -138.8; x: 97.001; y: -139.2 }
+ PathCubic { control1X: 96.401; control1Y: -139.6; control2X: 84.6; control2Y: -148.6; x: 57; y: -141.6 }
+ PathCubic { control1X: 57; control1Y: -141.6; control2X: 40; control2Y: -137; x: 31.4; y: -132.2 }
+ PathCubic { control1X: 31.4; control1Y: -132.2; control2X: 16.2; control2Y: -131; x: 12.6; y: -127.8 }
+ PathCubic { control1X: 12.6; control1Y: -127.8; control2X: -6; control2Y: -113.2; x: -8; y: -112.4 }
+ PathCubic { control1X: -10; control1Y: -111.6; control2X: -21.4; control2Y: -104; x: -22.2; y: -103.6 }
+ PathCubic { control1X: -22.2; control1Y: -103.6; control2X: 2.4; control2Y: -110.2; x: 4.8; y: -112.6 }
+ PathCubic { control1X: 7.2; control1Y: -115; control2X: 24.6; control2Y: -117.6; x: 27; y: -116.2 }
+ PathCubic { control1X: 29.4; control1Y: -114.8; control2X: 37.8; control2Y: -115.4; x: 28.2; y: -114.8 }
+ PathCubic { control1X: 28.2; control1Y: -114.8; control2X: 103.801; control2Y: -100; x: 104.601; y: -98 }
+ PathCubic { control1X: 105.401; control1Y: -96; control2X: 109.401; control2Y: -97.2; x: 109.401; y: -97.2 }
+ }
+
+ ShapePath {
+ fillColor: "#cc7226"
+ strokeWidth: -1
+ PathMove { x: 180.801; y: -106.4 }
+ PathCubic { control1X: 180.801; control1Y: -106.4; control2X: 170.601; control2Y: -113.8; x: 168.601; y: -113.8 }
+ PathCubic { control1X: 166.601; control1Y: -113.8; control2X: 154.201; control2Y: -124; x: 150.001; y: -123.6 }
+ PathCubic { control1X: 145.801; control1Y: -123.2; control2X: 133.601; control2Y: -133.2; x: 106.201; y: -125 }
+ PathCubic { control1X: 106.201; control1Y: -125; control2X: 105.601; control2Y: -127; x: 109.201; y: -127.8 }
+ PathCubic { control1X: 109.201; control1Y: -127.8; control2X: 115.601; control2Y: -130; x: 116.001; y: -130.6 }
+ PathCubic { control1X: 116.001; control1Y: -130.6; control2X: 136.201; control2Y: -134.8; x: 143.401; y: -131.2 }
+ PathCubic { control1X: 143.401; control1Y: -131.2; control2X: 152.601; control2Y: -128.6; x: 158.801; y: -122.4 }
+ PathCubic { control1X: 158.801; control1Y: -122.4; control2X: 170.001; control2Y: -119.2; x: 173.201; y: -120.2 }
+ PathCubic { control1X: 173.201; control1Y: -120.2; control2X: 182.001; control2Y: -118; x: 182.401; y: -116.2 }
+ PathCubic { control1X: 182.401; control1Y: -116.2; control2X: 188.201; control2Y: -113.2; x: 186.401; y: -110.6 }
+ PathCubic { control1X: 186.401; control1Y: -110.6; control2X: 186.801; control2Y: -109; x: 180.801; y: -106.4 }
+ }
+
+ ShapePath {
+ fillColor: "#cc7226"
+ strokeWidth: -1
+ PathMove { x: 168.33; y: -108.509 }
+ PathCubic { control1X: 169.137; control1Y: -107.877; control2X: 170.156; control2Y: -107.779; x: 170.761; y: -106.97 }
+ PathCubic { control1X: 170.995; control1Y: -106.656; control2X: 170.706; control2Y: -106.33; x: 170.391; y: -106.233 }
+ PathCubic { control1X: 169.348; control1Y: -105.916; control2X: 168.292; control2Y: -106.486; x: 167.15; y: -105.898 }
+ PathCubic { control1X: 166.748; control1Y: -105.691; control2X: 166.106; control2Y: -105.873; x: 165.553; y: -106.022 }
+ PathCubic { control1X: 163.921; control1Y: -106.463; control2X: 162.092; control2Y: -106.488; x: 160.401; y: -105.8 }
+ PathCubic { control1X: 158.416; control1Y: -106.929; control2X: 156.056; control2Y: -106.345; x: 153.975; y: -107.346 }
+ PathCubic { control1X: 153.917; control1Y: -107.373; control2X: 153.695; control2Y: -107.027; x: 153.621; y: -107.054 }
+ PathCubic { control1X: 150.575; control1Y: -108.199; control2X: 146.832; control2Y: -107.916; x: 144.401; y: -110.2 }
+ PathCubic { control1X: 141.973; control1Y: -110.612; control2X: 139.616; control2Y: -111.074; x: 137.188; y: -111.754 }
+ PathCubic { control1X: 135.37; control1Y: -112.263; control2X: 133.961; control2Y: -113.252; x: 132.341; y: -114.084 }
+ PathCubic { control1X: 130.964; control1Y: -114.792; control2X: 129.507; control2Y: -115.314; x: 127.973; y: -115.686 }
+ PathCubic { control1X: 126.11; control1Y: -116.138; control2X: 124.279; control2Y: -116.026; x: 122.386; y: -116.546 }
+ PathCubic { control1X: 122.293; control1Y: -116.571; control2X: 122.101; control2Y: -116.227; x: 122.019; y: -116.254 }
+ PathCubic { control1X: 121.695; control1Y: -116.362; control2X: 121.405; control2Y: -116.945; x: 121.234; y: -116.892 }
+ PathCubic { control1X: 119.553; control1Y: -116.37; control2X: 118.065; control2Y: -117.342; x: 116.401; y: -117 }
+ PathCubic { control1X: 115.223; control1Y: -118.224; control2X: 113.495; control2Y: -117.979; x: 111.949; y: -118.421 }
+ PathCubic { control1X: 108.985; control1Y: -119.269; control2X: 105.831; control2Y: -117.999; x: 102.801; y: -119 }
+ PathCubic { control1X: 106.914; control1Y: -120.842; control2X: 111.601; control2Y: -119.61; x: 115.663; y: -121.679 }
+ PathCubic { control1X: 117.991; control1Y: -122.865; control2X: 120.653; control2Y: -121.763; x: 123.223; y: -122.523 }
+ PathCubic { control1X: 123.71; control1Y: -122.667; control2X: 124.401; control2Y: -122.869; x: 124.801; y: -122.2 }
+ PathCubic { control1X: 124.935; control1Y: -122.335; control2X: 125.117; control2Y: -122.574; x: 125.175; y: -122.546 }
+ PathCubic { control1X: 127.625; control1Y: -121.389; control2X: 129.94; control2Y: -120.115; x: 132.422; y: -119.049 }
+ PathCubic { control1X: 132.763; control1Y: -118.903; control2X: 133.295; control2Y: -119.135; x: 133.547; y: -118.933 }
+ PathCubic { control1X: 135.067; control1Y: -117.717; control2X: 137.01; control2Y: -117.82; x: 138.401; y: -116.6 }
+ PathCubic { control1X: 140.099; control1Y: -117.102; control2X: 141.892; control2Y: -116.722; x: 143.621; y: -117.346 }
+ PathCubic { control1X: 143.698; control1Y: -117.373; control2X: 143.932; control2Y: -117.032; x: 143.965; y: -117.054 }
+ PathCubic { control1X: 145.095; control1Y: -117.802; control2X: 146.25; control2Y: -117.531; x: 147.142; y: -117.227 }
+ PathCubic { control1X: 147.48; control1Y: -117.112; control2X: 148.143; control2Y: -116.865; x: 148.448; y: -116.791 }
+ PathCubic { control1X: 149.574; control1Y: -116.515; control2X: 150.43; control2Y: -116.035; x: 151.609; y: -115.852 }
+ PathCubic { control1X: 151.723; control1Y: -115.834; control2X: 151.908; control2Y: -116.174; x: 151.98; y: -116.146 }
+ PathCubic { control1X: 153.103; control1Y: -115.708; control2X: 154.145; control2Y: -115.764; x: 154.801; y: -114.6 }
+ PathCubic { control1X: 154.936; control1Y: -114.735; control2X: 155.101; control2Y: -114.973; x: 155.183; y: -114.946 }
+ PathCubic { control1X: 156.21; control1Y: -114.608; control2X: 156.859; control2Y: -113.853; x: 157.96; y: -113.612 }
+ PathCubic { control1X: 158.445; control1Y: -113.506; control2X: 159.057; control2Y: -112.88; x: 159.633; y: -112.704 }
+ PathCubic { control1X: 162.025; control1Y: -111.973; control2X: 163.868; control2Y: -110.444; x: 166.062; y: -109.549 }
+ PathCubic { control1X: 166.821; control1Y: -109.239; control2X: 167.697; control2Y: -109.005; x: 168.33; y: -108.509 }
+ }
+
+ ShapePath {
+ fillColor: "#cc7226"
+ strokeWidth: -1
+ PathMove { x: 91.696; y: -122.739 }
+ PathCubic { control1X: 89.178; control1Y: -124.464; control2X: 86.81; control2Y: -125.57; x: 84.368; y: -127.356 }
+ PathCubic { control1X: 84.187; control1Y: -127.489; control2X: 83.827; control2Y: -127.319; x: 83.625; y: -127.441 }
+ PathCubic { control1X: 82.618; control1Y: -128.05; control2X: 81.73; control2Y: -128.631; x: 80.748; y: -129.327 }
+ PathCubic { control1X: 80.209; control1Y: -129.709; control2X: 79.388; control2Y: -129.698; x: 78.88; y: -129.956 }
+ PathCubic { control1X: 76.336; control1Y: -131.248; control2X: 73.707; control2Y: -131.806; x: 71.2; y: -133 }
+ PathCubic { control1X: 71.882; control1Y: -133.638; control2X: 73.004; control2Y: -133.394; x: 73.6; y: -134.2 }
+ PathCubic { control1X: 73.795; control1Y: -133.92; control2X: 74.033; control2Y: -133.636; x: 74.386; y: -133.827 }
+ PathCubic { control1X: 76.064; control1Y: -134.731; control2X: 77.914; control2Y: -134.884; x: 79.59; y: -134.794 }
+ PathCubic { control1X: 81.294; control1Y: -134.702; control2X: 83.014; control2Y: -134.397; x: 84.789; y: -134.125 }
+ PathCubic { control1X: 85.096; control1Y: -134.078; control2X: 85.295; control2Y: -133.555; x: 85.618; y: -133.458 }
+ PathCubic { control1X: 87.846; control1Y: -132.795; control2X: 90.235; control2Y: -133.32; x: 92.354; y: -132.482 }
+ PathCubic { control1X: 93.945; control1Y: -131.853; control2X: 95.515; control2Y: -131.03; x: 96.754; y: -129.755 }
+ PathCubic { control1X: 97.006; control1Y: -129.495; control2X: 96.681; control2Y: -129.194; x: 96.401; y: -129 }
+ PathCubic { control1X: 96.789; control1Y: -129.109; control2X: 97.062; control2Y: -128.903; x: 97.173; y: -128.59 }
+ PathCubic { control1X: 97.257; control1Y: -128.351; control2X: 97.257; control2Y: -128.049; x: 97.173; y: -127.81 }
+ PathCubic { control1X: 97.061; control1Y: -127.498; control2X: 96.782; control2Y: -127.397; x: 96.408; y: -127.346 }
+ PathCubic { control1X: 95.001; control1Y: -127.156; control2X: 96.773; control2Y: -128.536; x: 96.073; y: -128.088 }
+ PathCubic { control1X: 94.8; control1Y: -127.274; control2X: 95.546; control2Y: -125.868; x: 94.801; y: -124.6 }
+ PathCubic { control1X: 94.521; control1Y: -124.794; control2X: 94.291; control2Y: -125.012; x: 94.401; y: -125.4 }
+ PathCubic { control1X: 94.635; control1Y: -124.878; control2X: 94.033; control2Y: -124.588; x: 93.865; y: -124.272 }
+ PathCubic { control1X: 93.48; control1Y: -123.547; control2X: 92.581; control2Y: -122.132; x: 91.696; y: -122.739 }
+ }
+
+ ShapePath {
+ fillColor: "#cc7226"
+ strokeWidth: -1
+ PathMove { x: 59.198; y: -115.391 }
+ PathCubic { control1X: 56.044; control1Y: -116.185; control2X: 52.994; control2Y: -116.07; x: 49.978; y: -117.346 }
+ PathCubic { control1X: 49.911; control1Y: -117.374; control2X: 49.688; control2Y: -117.027; x: 49.624; y: -117.054 }
+ PathCubic { control1X: 48.258; control1Y: -117.648; control2X: 47.34; control2Y: -118.614; x: 46.264; y: -119.66 }
+ PathCubic { control1X: 45.351; control1Y: -120.548; control2X: 43.693; control2Y: -120.161; x: 42.419; y: -120.648 }
+ PathCubic { control1X: 42.095; control1Y: -120.772; control2X: 41.892; control2Y: -121.284; x: 41.591; y: -121.323 }
+ PathCubic { control1X: 40.372; control1Y: -121.48; control2X: 39.445; control2Y: -122.429; x: 38.4; y: -123 }
+ PathCubic { control1X: 40.736; control1Y: -123.795; control2X: 43.147; control2Y: -123.764; x: 45.609; y: -124.148 }
+ PathCubic { control1X: 45.722; control1Y: -124.166; control2X: 45.867; control2Y: -123.845; x: 46; y: -123.845 }
+ PathCubic { control1X: 46.136; control1Y: -123.845; control2X: 46.266; control2Y: -124.066; x: 46.4; y: -124.2 }
+ PathCubic { control1X: 46.595; control1Y: -123.92; control2X: 46.897; control2Y: -123.594; x: 47.154; y: -123.848 }
+ PathCubic { control1X: 47.702; control1Y: -124.388; control2X: 48.258; control2Y: -124.198; x: 48.798; y: -124.158 }
+ PathCubic { control1X: 48.942; control1Y: -124.148; control2X: 49.067; control2Y: -123.845; x: 49.2; y: -123.845 }
+ PathCubic { control1X: 49.336; control1Y: -123.845; control2X: 49.467; control2Y: -124.156; x: 49.6; y: -124.156 }
+ PathCubic { control1X: 49.736; control1Y: -124.155; control2X: 49.867; control2Y: -123.845; x: 50; y: -123.845 }
+ PathCubic { control1X: 50.136; control1Y: -123.845; control2X: 50.266; control2Y: -124.066; x: 50.4; y: -124.2 }
+ PathCubic { control1X: 51.092; control1Y: -123.418; control2X: 51.977; control2Y: -123.972; x: 52.799; y: -123.793 }
+ PathCubic { control1X: 53.837; control1Y: -123.566; control2X: 54.104; control2Y: -122.418; x: 55.178; y: -122.12 }
+ PathCubic { control1X: 59.893; control1Y: -120.816; control2X: 64.03; control2Y: -118.671; x: 68.393; y: -116.584 }
+ PathCubic { control1X: 68.7; control1Y: -116.437; control2X: 68.91; control2Y: -116.189; x: 68.8; y: -115.8 }
+ PathCubic { control1X: 69.067; control1Y: -115.8; control2X: 69.38; control2Y: -115.888; x: 69.57; y: -115.756 }
+ PathCubic { control1X: 70.628; control1Y: -115.024; control2X: 71.669; control2Y: -114.476; x: 72.366; y: -113.378 }
+ PathCubic { control1X: 72.582; control1Y: -113.039; control2X: 72.253; control2Y: -112.632; x: 72.02; y: -112.684 }
+ PathCubic { control1X: 67.591; control1Y: -113.679; control2X: 63.585; control2Y: -114.287; x: 59.198; y: -115.391 }
+ }
+
+ ShapePath {
+ fillColor: "#cc7226"
+ strokeWidth: -1
+ PathMove { x: 45.338; y: -71.179 }
+ PathCubic { control1X: 43.746; control1Y: -72.398; control2X: 43.162; control2Y: -74.429; x: 42.034; y: -76.221 }
+ PathCubic { control1X: 41.82; control1Y: -76.561; control2X: 42.094; control2Y: -76.875; x: 42.411; y: -76.964 }
+ PathCubic { control1X: 42.971; control1Y: -77.123; control2X: 43.514; control2Y: -76.645; x: 43.923; y: -76.443 }
+ PathCubic { control1X: 45.668; control1Y: -75.581; control2X: 47.203; control2Y: -74.339; x: 49.2; y: -74.2 }
+ PathCubic { control1X: 51.19; control1Y: -71.966; control2X: 55.45; control2Y: -71.581; x: 55.457; y: -68.2 }
+ PathCubic { control1X: 55.458; control1Y: -67.341; control2X: 54.03; control2Y: -68.259; x: 53.6; y: -67.4 }
+ PathCubic { control1X: 51.149; control1Y: -68.403; control2X: 48.76; control2Y: -68.3; x: 46.38; y: -69.767 }
+ PathCubic { control1X: 45.763; control1Y: -70.148; control2X: 46.093; control2Y: -70.601; x: 45.338; y: -71.179 }
+ }
+
+ ShapePath {
+ fillColor: "#cc7226"
+ strokeWidth: -1
+ PathMove { x: 17.8; y: -123.756 }
+ PathCubic { control1X: 17.935; control1Y: -123.755; control2X: 24.966; control2Y: -123.522; x: 24.949; y: -123.408 }
+ PathCubic { control1X: 24.904; control1Y: -123.099; control2X: 17.174; control2Y: -122.05; x: 16.81; y: -122.22 }
+ PathCubic { control1X: 16.646; control1Y: -122.296; control2X: 9.134; control2Y: -119.866; x: 9; y: -120 }
+ PathCubic { control1X: 9.268; control1Y: -120.135; control2X: 17.534; control2Y: -123.756; x: 17.8; y: -123.756 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 33.2; y: -114 }
+ PathCubic { control1X: 33.2; control1Y: -114; control2X: 18.4; control2Y: -112.2; x: 14; y: -111 }
+ PathCubic { control1X: 9.6; control1Y: -109.8; control2X: -9; control2Y: -102.2; x: -12; y: -100.2 }
+ PathCubic { control1X: -12; control1Y: -100.2; control2X: -25.4; control2Y: -94.8; x: -42.4; y: -74.8 }
+ PathCubic { control1X: -42.4; control1Y: -74.8; control2X: -34.8; control2Y: -78.2; x: -32.6; y: -81 }
+ PathCubic { control1X: -32.6; control1Y: -81; control2X: -19; control2Y: -93.6; x: -19.2; y: -91 }
+ PathCubic { control1X: -19.2; control1Y: -91; control2X: -7; control2Y: -99.6; x: -7.6; y: -97.4 }
+ PathCubic { control1X: -7.6; control1Y: -97.4; control2X: 16.8; control2Y: -108.6; x: 14.8; y: -105.4 }
+ PathCubic { control1X: 14.8; control1Y: -105.4; control2X: 36.4; control2Y: -110; x: 35.4; y: -108 }
+ PathCubic { control1X: 35.4; control1Y: -108; control2X: 54.2; control2Y: -103.6; x: 51.4; y: -103.4 }
+ PathCubic { control1X: 51.4; control1Y: -103.4; control2X: 45.6; control2Y: -102.2; x: 52; y: -98.6 }
+ PathCubic { control1X: 52; control1Y: -98.6; control2X: 48.6; control2Y: -94.2; x: 43.2; y: -98.2 }
+ PathCubic { control1X: 37.8; control1Y: -102.2; control2X: 40.8; control2Y: -100; x: 35.8; y: -99 }
+ PathCubic { control1X: 35.8; control1Y: -99; control2X: 33.2; control2Y: -98.2; x: 28.6; y: -102.2 }
+ PathCubic { control1X: 28.6; control1Y: -102.2; control2X: 23; control2Y: -106.8; x: 14.2; y: -103.2 }
+ PathCubic { control1X: 14.2; control1Y: -103.2; control2X: -16.4; control2Y: -90.6; x: -18.4; y: -90 }
+ PathCubic { control1X: -18.4; control1Y: -90; control2X: -22; control2Y: -87.2; x: -24.4; y: -83.6 }
+ PathCubic { control1X: -24.4; control1Y: -83.6; control2X: -30.2; control2Y: -79.2; x: -33.2; y: -77.8 }
+ PathCubic { control1X: -33.2; control1Y: -77.8; control2X: -46; control2Y: -66.2; x: -47.2; y: -64.8 }
+ PathCubic { control1X: -47.2; control1Y: -64.8; control2X: -50.6; control2Y: -59.6; x: -51.4; y: -59.2 }
+ PathCubic { control1X: -51.4; control1Y: -59.2; control2X: -45; control2Y: -63; x: -43; y: -65 }
+ PathCubic { control1X: -43; control1Y: -65; control2X: -29; control2Y: -75; x: -23.6; y: -75.8 }
+ PathCubic { control1X: -23.6; control1Y: -75.8; control2X: -19.2; control2Y: -78.8; x: -18.4; y: -80.2 }
+ PathCubic { control1X: -18.4; control1Y: -80.2; control2X: -4; control2Y: -89.4; x: 0.2; y: -89.4 }
+ PathCubic { control1X: 0.2; control1Y: -89.4; control2X: 9.4; control2Y: -84.2; x: 11.8; y: -91.2 }
+ PathCubic { control1X: 11.8; control1Y: -91.2; control2X: 17.6; control2Y: -93; x: 23.2; y: -91.8 }
+ PathCubic { control1X: 23.2; control1Y: -91.8; control2X: 26.4; control2Y: -94.4; x: 25.6; y: -96.6 }
+ PathCubic { control1X: 25.6; control1Y: -96.6; control2X: 27.2; control2Y: -98.4; x: 28.2; y: -94.6 }
+ PathCubic { control1X: 28.2; control1Y: -94.6; control2X: 31.6; control2Y: -91; x: 36.4; y: -93 }
+ PathCubic { control1X: 36.4; control1Y: -93; control2X: 40.4; control2Y: -93.2; x: 38.4; y: -90.8 }
+ PathCubic { control1X: 38.4; control1Y: -90.8; control2X: 34; control2Y: -87; x: 22.2; y: -86.8 }
+ PathCubic { control1X: 22.2; control1Y: -86.8; control2X: 9.8; control2Y: -86.2; x: -6.6; y: -78.6 }
+ PathCubic { control1X: -6.6; control1Y: -78.6; control2X: -36.4; control2Y: -68.2; x: -45.6; y: -57.8 }
+ PathCubic { control1X: -45.6; control1Y: -57.8; control2X: -52; control2Y: -49; x: -57.4; y: -47.8 }
+ PathCubic { control1X: -57.4; control1Y: -47.8; control2X: -63.2; control2Y: -47; x: -69.2; y: -39.6 }
+ PathCubic { control1X: -69.2; control1Y: -39.6; control2X: -59.4; control2Y: -45.4; x: -50.4; y: -45.4 }
+ PathCubic { control1X: -50.4; control1Y: -45.4; control2X: -46.4; control2Y: -47.8; x: -50.2; y: -44.2 }
+ PathCubic { control1X: -50.2; control1Y: -44.2; control2X: -53.8; control2Y: -36.6; x: -52.2; y: -31.2 }
+ PathCubic { control1X: -52.2; control1Y: -31.2; control2X: -52.8; control2Y: -26; x: -53.6; y: -24.4 }
+ PathCubic { control1X: -53.6; control1Y: -24.4; control2X: -61.4; control2Y: -11.6; x: -61.4; y: -9.2 }
+ PathCubic { control1X: -61.4; control1Y: -6.8; control2X: -60.2; control2Y: 3; x: -59.8; y: 3.6 }
+ PathCubic { control1X: -59.4; control1Y: 4.2; control2X: -60.8; control2Y: 2; x: -57; y: 4.4 }
+ PathCubic { control1X: -53.2; control1Y: 6.8; control2X: -50.4; control2Y: 8.4; x: -49.6; y: 11.2 }
+ PathCubic { control1X: -48.8; control1Y: 14; control2X: -51.6; control2Y: 5.8; x: -51.8; y: 4 }
+ PathCubic { control1X: -52; control1Y: 2.2; control2X: -56.2; control2Y: -5; x: -55.4; y: -7.4 }
+ PathCubic { control1X: -55.4; control1Y: -7.4; control2X: -54.4; control2Y: -6.4; x: -53.6; y: -5 }
+ PathCubic { control1X: -53.6; control1Y: -5; control2X: -54.2; control2Y: -5.6; x: -53.6; y: -9.2 }
+ PathCubic { control1X: -53.6; control1Y: -9.2; control2X: -52.8; control2Y: -14.4; x: -51.4; y: -17.6 }
+ PathCubic { control1X: -50; control1Y: -20.8; control2X: -48; control2Y: -24.6; x: -47.6; y: -25.4 }
+ PathCubic { control1X: -47.2; control1Y: -26.2; control2X: -47.2; control2Y: -32; x: -45.8; y: -29.4 }
+ PathLine { x: -42.4; y: -26.8 }
+ PathCubic { control1X: -42.4; control1Y: -26.8; control2X: -45.2; control2Y: -29.4; x: -43; y: -31.6 }
+ PathCubic { control1X: -43; control1Y: -31.6; control2X: -44; control2Y: -37.2; x: -42.2; y: -39.8 }
+ PathCubic { control1X: -42.2; control1Y: -39.8; control2X: -35.2; control2Y: -48.2; x: -33.6; y: -49.2 }
+ PathCubic { control1X: -32; control1Y: -50.2; control2X: -33.4; control2Y: -49.8; x: -33.4; y: -49.8 }
+ PathCubic { control1X: -33.4; control1Y: -49.8; control2X: -27.4; control2Y: -54; x: -33.2; y: -52.4 }
+ PathCubic { control1X: -33.2; control1Y: -52.4; control2X: -37.2; control2Y: -50.8; x: -40.2; y: -50.8 }
+ PathCubic { control1X: -40.2; control1Y: -50.8; control2X: -47.8; control2Y: -48.8; x: -43.8; y: -53 }
+ PathCubic { control1X: -39.8; control1Y: -57.2; control2X: -29.8; control2Y: -62.6; x: -26; y: -62.4 }
+ PathLine { x: -25.2; y: -60.8 }
+ PathLine { x: -14; y: -63.2 }
+ PathLine { x: -15.2; y: -62.4 }
+ PathCubic { control1X: -15.2; control1Y: -62.4; control2X: -15.4; control2Y: -62.6; x: -11.2; y: -63 }
+ PathCubic { control1X: -7; control1Y: -63.4; control2X: -1.2; control2Y: -62; x: 0.2; y: -63.8 }
+ PathCubic { control1X: 1.6; control1Y: -65.6; control2X: 5; control2Y: -66.6; x: 4.6; y: -65.2 }
+ PathCubic { control1X: 4.2; control1Y: -63.8; control2X: 4; control2Y: -61.8; x: 4; y: -61.8 }
+ PathCubic { control1X: 4; control1Y: -61.8; control2X: 9; control2Y: -67.6; x: 8.4; y: -65.4 }
+ PathCubic { control1X: 7.8; control1Y: -63.2; control2X: -0.4; control2Y: -58; x: -1.8; y: -51.8 }
+ PathLine { x: 8.6; y: -60 }
+ PathLine { x: 12.2; y: -63 }
+ PathCubic { control1X: 12.2; control1Y: -63; control2X: 15.8; control2Y: -60.8; x: 16; y: -62.4 }
+ PathCubic { control1X: 16.2; control1Y: -64; control2X: 20.8; control2Y: -69.8; x: 22; y: -69.6 }
+ PathCubic { control1X: 23.2; control1Y: -69.4; control2X: 25.2; control2Y: -72.2; x: 25; y: -69.6 }
+ PathCubic { control1X: 24.8; control1Y: -67; control2X: 32.4; control2Y: -61.6; x: 32.4; y: -61.6 }
+ PathCubic { control1X: 32.4; control1Y: -61.6; control2X: 35.6; control2Y: -63.4; x: 37; y: -62 }
+ PathCubic { control1X: 38.4; control1Y: -60.6; control2X: 42.6; control2Y: -81.8; x: 42.6; y: -81.8 }
+ PathLine { x: 67.6; y: -92.4 }
+ PathLine { x: 111.201; y: -95.8 }
+ PathLine { x: 94.201; y: -102.6 }
+ PathLine { x: 33.2; y: -114 }
+ }
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "#4c0000"
+ strokeWidth: 2
+ PathMove { x: 51.4; y: 85 }
+ PathCubic { control1X: 51.4; control1Y: 85; control2X: 36.4; control2Y: 68.2; x: 28; y: 65.6 }
+ PathCubic { control1X: 28; control1Y: 65.6; control2X: 14.6; control2Y: 58.8; x: -10; y: 66.6 }
+ }
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "#4c0000"
+ strokeWidth: 2
+ PathMove { x: 24.8; y: 64.2 }
+ PathCubic { control1X: 24.8; control1Y: 64.2; control2X: -0.4; control2Y: 56.2; x: -15.8; y: 60.4 }
+ PathCubic { control1X: -15.8; control1Y: 60.4; control2X: -34.2; control2Y: 62.4; x: -42.6; y: 76.2 }
+ }
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "#4c0000"
+ strokeWidth: 2
+ PathMove { x: 21.2; y: 63 }
+ PathCubic { control1X: 21.2; control1Y: 63; control2X: 4.2; control2Y: 55.8; x: -10.6; y: 53.6 }
+ PathCubic { control1X: -10.6; control1Y: 53.6; control2X: -27.2; control2Y: 51; x: -43.8; y: 58.2 }
+ PathCubic { control1X: -43.8; control1Y: 58.2; control2X: -56; control2Y: 64.2; x: -61.4; y: 74.4 }
+ }
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "#4c0000"
+ strokeWidth: 2
+ PathMove { x: 22.2; y: 63.4 }
+ PathCubic { control1X: 22.2; control1Y: 63.4; control2X: 6.8; control2Y: 52.4; x: 5.8; y: 51 }
+ PathCubic { control1X: 5.8; control1Y: 51; control2X: -1.2; control2Y: 40; x: -14.2; y: 39.6 }
+ PathCubic { control1X: -14.2; control1Y: 39.6; control2X: -35.6; control2Y: 40.4; x: -52.8; y: 48.4 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 20.895; y: 54.407 }
+ PathCubic { control1X: 22.437; control1Y: 55.87; control2X: 49.4; control2Y: 84.8; x: 49.4; y: 84.8 }
+ PathCubic { control1X: 84.6; control1Y: 121.401; control2X: 56.6; control2Y: 87.2; x: 56.6; y: 87.2 }
+ PathCubic { control1X: 49; control1Y: 82.4; control2X: 39.8; control2Y: 63.6; x: 39.8; y: 63.6 }
+ PathCubic { control1X: 38.6; control1Y: 60.8; control2X: 53.8; control2Y: 70.8; x: 53.8; y: 70.8 }
+ PathCubic { control1X: 57.8; control1Y: 71.6; control2X: 71.4; control2Y: 90.8; x: 71.4; y: 90.8 }
+ PathCubic { control1X: 64.6; control1Y: 88.4; control2X: 69.4; control2Y: 95.6; x: 69.4; y: 95.6 }
+ PathCubic { control1X: 72.2; control1Y: 97.6; control2X: 92.601; control2Y: 113.201; x: 92.601; y: 113.201 }
+ PathCubic { control1X: 96.201; control1Y: 117.201; control2X: 100.201; control2Y: 118.801; x: 100.201; y: 118.801 }
+ PathCubic { control1X: 114.201; control1Y: 113.601; control2X: 107.801; control2Y: 126.801; x: 107.801; y: 126.801 }
+ PathCubic { control1X: 110.201; control1Y: 133.601; control2X: 115.801; control2Y: 122.001; x: 115.801; y: 122.001 }
+ PathCubic { control1X: 127.001; control1Y: 105.2; control2X: 110.601; control2Y: 107.601; x: 110.601; y: 107.601 }
+ PathCubic { control1X: 80.6; control1Y: 110.401; control2X: 73.8; control2Y: 94.4; x: 73.8; y: 94.4 }
+ PathCubic { control1X: 71.4; control1Y: 92; control2X: 80.2; control2Y: 94.4; x: 80.2; y: 94.4 }
+ PathCubic { control1X: 88.601; control1Y: 96.4; control2X: 73; control2Y: 82; x: 73; y: 82 }
+ PathCubic { control1X: 75.4; control1Y: 82; control2X: 84.6; control2Y: 88.8; x: 84.6; y: 88.8 }
+ PathCubic { control1X: 95.001; control1Y: 98; control2X: 97.001; control2Y: 96; x: 97.001; y: 96 }
+ PathCubic { control1X: 115.001; control1Y: 87.2; control2X: 125.401; control2Y: 94.8; x: 125.401; y: 94.8 }
+ PathCubic { control1X: 127.401; control1Y: 96.4; control2X: 121.801; control2Y: 103.2; x: 123.401; y: 108.401 }
+ PathCubic { control1X: 125.001; control1Y: 113.601; control2X: 129.801; control2Y: 126.001; x: 129.801; y: 126.001 }
+ PathCubic { control1X: 127.401; control1Y: 127.601; control2X: 127.801; control2Y: 138.401; x: 127.801; y: 138.401 }
+ PathCubic { control1X: 144.601; control1Y: 161.601; control2X: 135.001; control2Y: 159.601; x: 135.001; y: 159.601 }
+ PathCubic { control1X: 119.401; control1Y: 159.201; control2X: 134.201; control2Y: 166.801; x: 134.201; y: 166.801 }
+ PathCubic { control1X: 137.401; control1Y: 168.801; control2X: 146.201; control2Y: 176.001; x: 146.201; y: 176.001 }
+ PathCubic { control1X: 143.401; control1Y: 174.801; control2X: 141.801; control2Y: 180.001; x: 141.801; y: 180.001 }
+ PathCubic { control1X: 146.601; control1Y: 184.001; control2X: 143.801; control2Y: 188.801; x: 143.801; y: 188.801 }
+ PathCubic { control1X: 137.801; control1Y: 190.001; control2X: 136.601; control2Y: 194.001; x: 136.601; y: 194.001 }
+ PathCubic { control1X: 143.401; control1Y: 202.001; control2X: 133.401; control2Y: 202.401; x: 133.401; y: 202.401 }
+ PathCubic { control1X: 137.001; control1Y: 206.801; control2X: 132.201; control2Y: 218.801; x: 132.201; y: 218.801 }
+ PathCubic { control1X: 127.401; control1Y: 218.801; control2X: 121.001; control2Y: 224.401; x: 121.001; y: 224.401 }
+ PathCubic { control1X: 123.401; control1Y: 229.201; control2X: 113.001; control2Y: 234.801; x: 113.001; y: 234.801 }
+ PathCubic { control1X: 104.601; control1Y: 236.401; control2X: 107.401; control2Y: 243.201; x: 107.401; y: 243.201 }
+ PathCubic { control1X: 99.401; control1Y: 249.201; control2X: 97.001; control2Y: 265.201; x: 97.001; y: 265.201 }
+ PathCubic { control1X: 96.201; control1Y: 275.601; control2X: 93.801; control2Y: 278.801; x: 99.001; y: 276.801 }
+ PathCubic { control1X: 104.201; control1Y: 274.801; control2X: 103.401; control2Y: 262.401; x: 103.401; y: 262.401 }
+ PathCubic { control1X: 98.601; control1Y: 246.801; control2X: 141.401; control2Y: 230.801; x: 141.401; y: 230.801 }
+ PathCubic { control1X: 145.401; control1Y: 229.201; control2X: 146.201; control2Y: 224.001; x: 146.201; y: 224.001 }
+ PathCubic { control1X: 148.201; control1Y: 224.401; control2X: 157.001; control2Y: 232.001; x: 157.001; y: 232.001 }
+ PathCubic { control1X: 164.601; control1Y: 243.201; control2X: 165.001; control2Y: 234.001; x: 165.001; y: 234.001 }
+ PathCubic { control1X: 166.201; control1Y: 230.401; control2X: 164.601; control2Y: 224.401; x: 164.601; y: 224.401 }
+ PathCubic { control1X: 170.601; control1Y: 202.801; control2X: 156.601; control2Y: 196.401; x: 156.601; y: 196.401 }
+ PathCubic { control1X: 146.601; control1Y: 162.801; control2X: 160.601; control2Y: 171.201; x: 160.601; y: 171.201 }
+ PathCubic { control1X: 163.401; control1Y: 176.801; control2X: 174.201; control2Y: 182.001; x: 174.201; y: 182.001 }
+ PathLine { x: 177.801; y: 179.601 }
+ PathCubic { control1X: 176.201; control1Y: 174.801; control2X: 184.601; control2Y: 168.801; x: 184.601; y: 168.801 }
+ PathCubic { control1X: 187.401; control1Y: 175.201; control2X: 193.401; control2Y: 167.201; x: 193.401; y: 167.201 }
+ PathCubic { control1X: 197.001; control1Y: 142.801; control2X: 209.401; control2Y: 157.201; x: 209.401; y: 157.201 }
+ PathCubic { control1X: 213.401; control1Y: 158.401; control2X: 214.601; control2Y: 151.601; x: 214.601; y: 151.601 }
+ PathCubic { control1X: 218.201; control1Y: 141.201; control2X: 214.601; control2Y: 127.601; x: 214.601; y: 127.601 }
+ PathCubic { control1X: 218.201; control1Y: 127.201; control2X: 227.801; control2Y: 133.201; x: 227.801; y: 133.201 }
+ PathCubic { control1X: 230.601; control1Y: 129.601; control2X: 221.401; control2Y: 112.801; x: 225.401; y: 115.201 }
+ PathCubic { control1X: 229.401; control1Y: 117.601; control2X: 233.801; control2Y: 119.201; x: 233.801; y: 119.201 }
+ PathCubic { control1X: 234.601; control1Y: 117.201; control2X: 224.601; control2Y: 104.801; x: 224.601; y: 104.801 }
+ PathCubic { control1X: 220.201; control1Y: 102; control2X: 215.001; control2Y: 81.6; x: 215.001; y: 81.6 }
+ PathCubic { control1X: 222.201; control1Y: 85.2; control2X: 212.201; control2Y: 70; x: 212.201; y: 70 }
+ PathCubic { control1X: 212.201; control1Y: 66.8; control2X: 218.201; control2Y: 55.6; x: 218.201; y: 55.6 }
+ PathCubic { control1X: 217.401; control1Y: 48.8; control2X: 218.201; control2Y: 49.2; x: 218.201; y: 49.2 }
+ PathCubic { control1X: 221.001; control1Y: 50.4; control2X: 229.001; control2Y: 52; x: 222.201; y: 45.6 }
+ PathCubic { control1X: 215.401; control1Y: 39.2; control2X: 223.001; control2Y: 34.4; x: 223.001; y: 34.4 }
+ PathCubic { control1X: 227.401; control1Y: 31.6; control2X: 213.801; control2Y: 32; x: 213.801; y: 32 }
+ PathCubic { control1X: 208.601; control1Y: 27.6; control2X: 209.001; control2Y: 23.6; x: 209.001; y: 23.6 }
+ PathCubic { control1X: 217.001; control1Y: 25.6; control2X: 202.601; control2Y: 11.2; x: 200.201; y: 7.6 }
+ PathCubic { control1X: 197.801; control1Y: 4; control2X: 207.401; control2Y: -1.2; x: 207.401; y: -1.2 }
+ PathCubic { control1X: 220.601; control1Y: -4.8; control2X: 209.001; control2Y: -8; x: 209.001; y: -8 }
+ PathCubic { control1X: 189.401; control1Y: -7.6; control2X: 200.201; control2Y: -18.4; x: 200.201; y: -18.4 }
+ PathCubic { control1X: 206.201; control1Y: -18; control2X: 204.601; control2Y: -20.4; x: 204.601; y: -20.4 }
+ PathCubic { control1X: 199.401; control1Y: -21.6; control2X: 189.801; control2Y: -28; x: 189.801; y: -28 }
+ PathCubic { control1X: 185.801; control1Y: -31.6; control2X: 189.401; control2Y: -30.8; x: 189.401; y: -30.8 }
+ PathCubic { control1X: 206.201; control1Y: -29.6; control2X: 177.401; control2Y: -40.8; x: 177.401; y: -40.8 }
+ PathCubic { control1X: 185.401; control1Y: -40.8; control2X: 167.401; control2Y: -51.2; x: 167.401; y: -51.2 }
+ PathCubic { control1X: 165.401; control1Y: -52.8; control2X: 162.201; control2Y: -60.4; x: 162.201; y: -60.4 }
+ PathCubic { control1X: 156.201; control1Y: -65.6; control2X: 151.401; control2Y: -72.4; x: 151.401; y: -72.4 }
+ PathCubic { control1X: 151.001; control1Y: -76.8; control2X: 146.201; control2Y: -81.6; x: 146.201; y: -81.6 }
+ PathCubic { control1X: 134.601; control1Y: -95.2; control2X: 129.001; control2Y: -94.8; x: 129.001; y: -94.8 }
+ PathCubic { control1X: 114.201; control1Y: -98.4; control2X: 109.001; control2Y: -97.6; x: 109.001; y: -97.6 }
+ PathLine { x: 56.2; y: -93.2 }
+ PathCubic { control1X: 29.8; control1Y: -80.4; control2X: 37.6; control2Y: -59.4; x: 37.6; y: -59.4 }
+ PathCubic { control1X: 44; control1Y: -51; control2X: 53.2; control2Y: -54.8; x: 53.2; y: -54.8 }
+ PathCubic { control1X: 57.8; control1Y: -61; control2X: 69.4; control2Y: -58.8; x: 69.4; y: -58.8 }
+ PathCubic { control1X: 89.801; control1Y: -55.6; control2X: 87.201; control2Y: -59.2; x: 87.201; y: -59.2 }
+ PathCubic { control1X: 84.801; control1Y: -63.8; control2X: 68.6; control2Y: -70; x: 68.4; y: -70.6 }
+ PathCubic { control1X: 68.2; control1Y: -71.2; control2X: 59.4; control2Y: -74.6; x: 59.4; y: -74.6 }
+ PathCubic { control1X: 56.4; control1Y: -75.8; control2X: 52; control2Y: -85; x: 52; y: -85 }
+ PathCubic { control1X: 48.8; control1Y: -88.4; control2X: 64.6; control2Y: -82.6; x: 64.6; y: -82.6 }
+ PathCubic { control1X: 63.4; control1Y: -81.6; control2X: 70.8; control2Y: -77.6; x: 70.8; y: -77.6 }
+ PathCubic { control1X: 88.201; control1Y: -78.6; control2X: 98.801; control2Y: -67.8; x: 98.801; y: -67.8 }
+ PathCubic { control1X: 109.601; control1Y: -51.2; control2X: 109.801; control2Y: -59.4; x: 109.801; y: -59.4 }
+ PathCubic { control1X: 112.601; control1Y: -68.8; control2X: 100.801; control2Y: -90; x: 100.801; y: -90 }
+ PathCubic { control1X: 101.201; control1Y: -92; control2X: 109.401; control2Y: -85.4; x: 109.401; y: -85.4 }
+ PathCubic { control1X: 110.801; control1Y: -87.4; control2X: 111.601; control2Y: -81.6; x: 111.601; y: -81.6 }
+ PathCubic { control1X: 111.801; control1Y: -79.2; control2X: 115.601; control2Y: -71.2; x: 115.601; y: -71.2 }
+ PathCubic { control1X: 118.401; control1Y: -58.2; control2X: 122.001; control2Y: -65.6; x: 122.001; y: -65.6 }
+ PathLine { x: 126.601; y: -56.2 }
+ PathCubic { control1X: 128.001; control1Y: -53.6; control2X: 122.001; control2Y: -46; x: 122.001; y: -46 }
+ PathCubic { control1X: 121.801; control1Y: -43.2; control2X: 122.601; control2Y: -43.4; x: 117.001; y: -35.8 }
+ PathCubic { control1X: 111.401; control1Y: -28.2; control2X: 114.801; control2Y: -23.8; x: 114.801; y: -23.8 }
+ PathCubic { control1X: 113.401; control1Y: -17.2; control2X: 122.201; control2Y: -17.6; x: 122.201; y: -17.6 }
+ PathCubic { control1X: 124.801; control1Y: -15.4; control2X: 128.201; control2Y: -15.4; x: 128.201; y: -15.4 }
+ PathCubic { control1X: 130.001; control1Y: -13.4; control2X: 132.401; control2Y: -14; x: 132.401; y: -14 }
+ PathCubic { control1X: 134.001; control1Y: -17.8; control2X: 140.201; control2Y: -15.8; x: 140.201; y: -15.8 }
+ PathCubic { control1X: 141.601; control1Y: -18.2; control2X: 149.801; control2Y: -18.6; x: 149.801; y: -18.6 }
+ PathCubic { control1X: 150.801; control1Y: -21.2; control2X: 151.201; control2Y: -22.8; x: 154.601; y: -23.4 }
+ PathCubic { control1X: 158.001; control1Y: -24; control2X: 133.401; control2Y: -67; x: 133.401; y: -67 }
+ PathCubic { control1X: 139.801; control1Y: -67.8; control2X: 131.601; control2Y: -80.2; x: 131.601; y: -80.2 }
+ PathCubic { control1X: 129.401; control1Y: -86.8; control2X: 140.801; control2Y: -72.2; x: 143.001; y: -70.8 }
+ PathCubic { control1X: 145.201; control1Y: -69.4; control2X: 146.201; control2Y: -67.2; x: 144.601; y: -67.4 }
+ PathCubic { control1X: 143.001; control1Y: -67.6; control2X: 141.201; control2Y: -65.4; x: 142.601; y: -65.2 }
+ PathCubic { control1X: 144.001; control1Y: -65; control2X: 157.001; control2Y: -50; x: 160.401; y: -39.8 }
+ PathCubic { control1X: 163.801; control1Y: -29.6; control2X: 169.801; control2Y: -25.6; x: 176.001; y: -19.6 }
+ PathCubic { control1X: 182.201; control1Y: -13.6; control2X: 181.401; control2Y: 10.6; x: 181.401; y: 10.6 }
+ PathCubic { control1X: 181.001; control1Y: 19.4; control2X: 187.001; control2Y: 30; x: 187.001; y: 30 }
+ PathCubic { control1X: 189.001; control1Y: 33.8; control2X: 184.801; control2Y: 52; x: 184.801; y: 52 }
+ PathCubic { control1X: 182.801; control1Y: 54.2; control2X: 184.201; control2Y: 55; x: 184.201; y: 55 }
+ PathCubic { control1X: 185.201; control1Y: 56.2; control2X: 192.001; control2Y: 69.4; x: 192.001; y: 69.4 }
+ PathCubic { control1X: 190.201; control1Y: 69.2; control2X: 193.801; control2Y: 72.8; x: 193.801; y: 72.8 }
+ PathCubic { control1X: 199.001; control1Y: 78.8; control2X: 192.601; control2Y: 75.8; x: 192.601; y: 75.8 }
+ PathCubic { control1X: 186.601; control1Y: 74.2; control2X: 193.601; control2Y: 84; x: 193.601; y: 84 }
+ PathCubic { control1X: 194.801; control1Y: 85.8; control2X: 185.801; control2Y: 81.2; x: 185.801; y: 81.2 }
+ PathCubic { control1X: 176.601; control1Y: 80.6; control2X: 188.201; control2Y: 87.8; x: 188.201; y: 87.8 }
+ PathCubic { control1X: 196.801; control1Y: 95; control2X: 185.401; control2Y: 90.6; x: 185.401; y: 90.6 }
+ PathCubic { control1X: 180.801; control1Y: 88.8; control2X: 184.001; control2Y: 95.6; x: 184.001; y: 95.6 }
+ PathCubic { control1X: 187.201; control1Y: 97.2; control2X: 204.401; control2Y: 104.2; x: 204.401; y: 104.2 }
+ PathCubic { control1X: 204.801; control1Y: 108.001; control2X: 201.801; control2Y: 113.001; x: 201.801; y: 113.001 }
+ PathCubic { control1X: 202.201; control1Y: 117.001; control2X: 200.001; control2Y: 120.401; x: 200.001; y: 120.401 }
+ PathCubic { control1X: 198.801; control1Y: 128.601; control2X: 198.201; control2Y: 129.401; x: 198.201; y: 129.401 }
+ PathCubic { control1X: 194.001; control1Y: 129.601; control2X: 186.601; control2Y: 143.401; x: 186.601; y: 143.401 }
+ PathCubic { control1X: 184.801; control1Y: 146.001; control2X: 174.601; control2Y: 158.001; x: 174.601; y: 158.001 }
+ PathCubic { control1X: 172.601; control1Y: 165.001; control2X: 154.601; control2Y: 157.801; x: 154.601; y: 157.801 }
+ PathCubic { control1X: 148.001; control1Y: 161.201; control2X: 150.001; control2Y: 157.801; x: 150.001; y: 157.801 }
+ PathCubic { control1X: 149.601; control1Y: 155.601; control2X: 154.401; control2Y: 149.601; x: 154.401; y: 149.601 }
+ PathCubic { control1X: 161.401; control1Y: 147.001; control2X: 158.801; control2Y: 136.201; x: 158.801; y: 136.201 }
+ PathCubic { control1X: 162.801; control1Y: 134.801; control2X: 151.601; control2Y: 132.001; x: 151.801; y: 130.801 }
+ PathCubic { control1X: 152.001; control1Y: 129.601; control2X: 157.801; control2Y: 128.201; x: 157.801; y: 128.201 }
+ PathCubic { control1X: 165.801; control1Y: 126.201; control2X: 161.401; control2Y: 123.801; x: 161.401; y: 123.801 }
+ PathCubic { control1X: 160.801; control1Y: 119.801; control2X: 163.801; control2Y: 114.201; x: 163.801; y: 114.201 }
+ PathCubic { control1X: 175.401; control1Y: 113.401; control2X: 163.801; control2Y: 97.2; x: 163.801; y: 97.2 }
+ PathCubic { control1X: 153.001; control1Y: 89.6; control2X: 152.001; control2Y: 83.8; x: 152.001; y: 83.8 }
+ PathCubic { control1X: 164.601; control1Y: 75.6; control2X: 156.401; control2Y: 63.2; x: 156.601; y: 59.6 }
+ PathCubic { control1X: 156.801; control1Y: 56; control2X: 158.001; control2Y: 34.4; x: 158.001; y: 34.4 }
+ PathCubic { control1X: 156.001; control1Y: 28.2; control2X: 153.001; control2Y: 14.6; x: 153.001; y: 14.6 }
+ PathCubic { control1X: 155.201; control1Y: 9.4; control2X: 162.601; control2Y: -3.2; x: 162.601; y: -3.2 }
+ PathCubic { control1X: 165.401; control1Y: -7.4; control2X: 174.201; control2Y: -12.2; x: 172.001; y: -15.2 }
+ PathCubic { control1X: 169.801; control1Y: -18.2; control2X: 162.001; control2Y: -16.4; x: 162.001; y: -16.4 }
+ PathCubic { control1X: 154.201; control1Y: -17.8; control2X: 154.801; control2Y: -12.6; x: 154.801; y: -12.6 }
+ PathCubic { control1X: 153.201; control1Y: -11.6; control2X: 152.401; control2Y: -6.6; x: 152.401; y: -6.6 }
+ PathCubic { control1X: 151.68; control1Y: 1.333; control2X: 142.801; control2Y: 7.6; x: 142.801; y: 7.6 }
+ PathCubic { control1X: 131.601; control1Y: 13.8; control2X: 140.801; control2Y: 17.8; x: 140.801; y: 17.8 }
+ PathCubic { control1X: 146.801; control1Y: 24.4; control2X: 137.001; control2Y: 24.6; x: 137.001; y: 24.6 }
+ PathCubic { control1X: 126.001; control1Y: 22.8; control2X: 134.201; control2Y: 33; x: 134.201; y: 33 }
+ PathCubic { control1X: 145.001; control1Y: 45.8; control2X: 142.001; control2Y: 48.6; x: 142.001; y: 48.6 }
+ PathCubic { control1X: 131.801; control1Y: 49.6; control2X: 144.401; control2Y: 58.8; x: 144.401; y: 58.8 }
+ PathCubic { control1X: 144.401; control1Y: 58.8; control2X: 143.601; control2Y: 56.8; x: 143.801; y: 58.6 }
+ PathCubic { control1X: 144.001; control1Y: 60.4; control2X: 147.001; control2Y: 64.6; x: 147.801; y: 66.6 }
+ PathCubic { control1X: 148.601; control1Y: 68.6; control2X: 144.601; control2Y: 68.8; x: 144.601; y: 68.8 }
+ PathCubic { control1X: 145.201; control1Y: 78.4; control2X: 129.801; control2Y: 74.2; x: 129.801; y: 74.2 }
+ PathCubic { control1X: 129.801; control1Y: 74.2; control2X: 129.801; control2Y: 74.2; x: 128.201; y: 74.4 }
+ PathCubic { control1X: 126.601; control1Y: 74.6; control2X: 115.401; control2Y: 73.8; x: 109.601; y: 71.6 }
+ PathCubic { control1X: 103.801; control1Y: 69.4; control2X: 97.001; control2Y: 69.4; x: 97.001; y: 69.4 }
+ PathCubic { control1X: 97.001; control1Y: 69.4; control2X: 93.001; control2Y: 71.2; x: 85.4; y: 71 }
+ PathCubic { control1X: 77.8; control1Y: 70.8; control2X: 69.8; control2Y: 73.6; x: 69.8; y: 73.6 }
+ PathCubic { control1X: 65.4; control1Y: 73.2; control2X: 74; control2Y: 68.8; x: 74.2; y: 69 }
+ PathCubic { control1X: 74.4; control1Y: 69.2; control2X: 80; control2Y: 63.6; x: 72; y: 64.2 }
+ PathCubic { control1X: 50.203; control1Y: 65.835; control2X: 39.4; control2Y: 55.6; x: 39.4; y: 55.6 }
+ PathCubic { control1X: 37.4; control1Y: 54.2; control2X: 34.8; control2Y: 51.4; x: 34.8; y: 51.4 }
+ PathCubic { control1X: 24.8; control1Y: 49.4; control2X: 36.2; control2Y: 63.8; x: 36.2; y: 63.8 }
+ PathCubic { control1X: 37.4; control1Y: 65.2; control2X: 36; control2Y: 66.2; x: 36; y: 66.2 }
+ PathCubic { control1X: 35.2; control1Y: 64.6; control2X: 27.4; control2Y: 59.2; x: 27.4; y: 59.2 }
+ PathCubic { control1X: 24.589; control1Y: 58.227; control2X: 23.226; control2Y: 56.893; x: 20.895; y: 54.407 }
+ }
+
+ ShapePath {
+ fillColor: "#4c0000"
+ strokeWidth: -1
+ PathMove { x: -3; y: 42.8 }
+ PathCubic { control1X: -3; control1Y: 42.8; control2X: 8.6; control2Y: 48.4; x: 11.2; y: 51.2 }
+ PathCubic { control1X: 13.8; control1Y: 54; control2X: 27.8; control2Y: 65.4; x: 27.8; y: 65.4 }
+ PathCubic { control1X: 27.8; control1Y: 65.4; control2X: 22.4; control2Y: 63.4; x: 19.8; y: 61.6 }
+ PathCubic { control1X: 17.2; control1Y: 59.8; control2X: 6.4; control2Y: 51.6; x: 6.4; y: 51.6 }
+ PathCubic { control1X: 6.4; control1Y: 51.6; control2X: 2.6; control2Y: 45.6; x: -3; y: 42.8 }
+ }
+
+ ShapePath {
+ fillColor: "#99cc32"
+ strokeWidth: -1
+ PathMove { x: -61.009; y: 11.603 }
+ PathCubic { control1X: -60.672; control1Y: 11.455; control2X: -61.196; control2Y: 8.743; x: -61.4; y: 8.2 }
+ PathCubic { control1X: -62.422; control1Y: 5.474; control2X: -71.4; control2Y: 4; x: -71.4; y: 4 }
+ PathCubic { control1X: -71.627; control1Y: 5.365; control2X: -71.682; control2Y: 6.961; x: -71.576; y: 8.599 }
+ PathCubic { control1X: -71.576; control1Y: 8.599; control2X: -66.708; control2Y: 14.118; x: -61.009; y: 11.603 }
+ }
+
+ ShapePath {
+ fillColor: "#659900"
+ strokeWidth: -1
+ PathMove { x: -61.009; y: 11.403 }
+ PathCubic { control1X: -61.458; control1Y: 11.561; control2X: -61.024; control2Y: 8.669; x: -61.2; y: 8.2 }
+ PathCubic { control1X: -62.222; control1Y: 5.474; control2X: -71.4; control2Y: 3.9; x: -71.4; y: 3.9 }
+ PathCubic { control1X: -71.627; control1Y: 5.265; control2X: -71.682; control2Y: 6.861; x: -71.576; y: 8.499 }
+ PathCubic { control1X: -71.576; control1Y: 8.499; control2X: -67.308; control2Y: 13.618; x: -61.009; y: 11.403 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -65.4; y: 11.546 }
+ PathCubic { control1X: -66.025; control1Y: 11.546; control2X: -66.531; control2Y: 10.406; x: -66.531; y: 9 }
+ PathCubic { control1X: -66.531; control1Y: 7.595; control2X: -66.025; control2Y: 6.455; x: -65.4; y: 6.455 }
+ PathCubic { control1X: -64.775; control1Y: 6.455; control2X: -64.268; control2Y: 7.595; x: -64.268; y: 9 }
+ PathCubic { control1X: -64.268; control1Y: 10.406; control2X: -64.775; control2Y: 11.546; x: -65.4; y: 11.546 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -65.4; y: 9 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -111; y: 109.601 }
+ PathCubic { control1X: -111; control1Y: 109.601; control2X: -116.6; control2Y: 119.601; x: -91.8; y: 113.601 }
+ PathCubic { control1X: -91.8; control1Y: 113.601; control2X: -77.8; control2Y: 112.401; x: -75.4; y: 110.001 }
+ PathCubic { control1X: -74.2; control1Y: 110.801; control2X: -65.834; control2Y: 113.734; x: -63; y: 114.401 }
+ PathCubic { control1X: -56.2; control1Y: 116.001; control2X: -47.8; control2Y: 106; x: -47.8; y: 106 }
+ PathCubic { control1X: -47.8; control1Y: 106; control2X: -43.2; control2Y: 95.5; x: -40.4; y: 95.5 }
+ PathCubic { control1X: -37.6; control1Y: 95.5; control2X: -40.8; control2Y: 97.1; x: -40.8; y: 97.1 }
+ PathCubic { control1X: -40.8; control1Y: 97.1; control2X: -47.4; control2Y: 107.201; x: -47; y: 108.801 }
+ PathCubic { control1X: -47; control1Y: 108.801; control2X: -52.2; control2Y: 128.801; x: -68.2; y: 129.601 }
+ PathCubic { control1X: -68.2; control1Y: 129.601; control2X: -84.35; control2Y: 130.551; x: -83; y: 136.401 }
+ PathCubic { control1X: -83; control1Y: 136.401; control2X: -74.2; control2Y: 134.001; x: -71.8; y: 136.401 }
+ PathCubic { control1X: -71.8; control1Y: 136.401; control2X: -61; control2Y: 136.001; x: -69; y: 142.401 }
+ PathLine { x: -75.8; y: 154.001 }
+ PathCubic { control1X: -75.8; control1Y: 154.001; control2X: -75.66; control2Y: 157.919; x: -85.8; y: 154.401 }
+ PathCubic { control1X: -95.6; control1Y: 151.001; control2X: -105.9; control2Y: 138.101; x: -105.9; y: 138.101 }
+ PathCubic { control1X: -105.9; control1Y: 138.101; control2X: -121.85; control2Y: 123.551; x: -111; y: 109.601 }
+ }
+
+ ShapePath {
+ fillColor: "#e59999"
+ strokeWidth: -1
+ PathMove { x: -112.2; y: 113.601 }
+ PathCubic { control1X: -112.2; control1Y: 113.601; control2X: -114.2; control2Y: 123.201; x: -77.4; y: 112.801 }
+ PathCubic { control1X: -77.4; control1Y: 112.801; control2X: -73; control2Y: 112.801; x: -70.6; y: 113.601 }
+ PathCubic { control1X: -68.2; control1Y: 114.401; control2X: -56.2; control2Y: 117.201; x: -54.2; y: 116.001 }
+ PathCubic { control1X: -54.2; control1Y: 116.001; control2X: -61.4; control2Y: 129.601; x: -73; y: 128.001 }
+ PathCubic { control1X: -73; control1Y: 128.001; control2X: -86.2; control2Y: 129.601; x: -85.8; y: 134.401 }
+ PathCubic { control1X: -85.8; control1Y: 134.401; control2X: -81.8; control2Y: 141.601; x: -77; y: 144.001 }
+ PathCubic { control1X: -77; control1Y: 144.001; control2X: -74.2; control2Y: 146.401; x: -74.6; y: 149.601 }
+ PathCubic { control1X: -75; control1Y: 152.801; control2X: -77.8; control2Y: 154.401; x: -79.8; y: 155.201 }
+ PathCubic { control1X: -81.8; control1Y: 156.001; control2X: -85; control2Y: 152.801; x: -86.6; y: 152.801 }
+ PathCubic { control1X: -88.2; control1Y: 152.801; control2X: -96.6; control2Y: 146.401; x: -101; y: 141.601 }
+ PathCubic { control1X: -105.4; control1Y: 136.801; control2X: -113.8; control2Y: 124.801; x: -113.4; y: 122.001 }
+ PathCubic { control1X: -113; control1Y: 119.201; control2X: -112.2; control2Y: 113.601; x: -112.2; y: 113.601 }
+ }
+
+ ShapePath {
+ fillColor: "#b26565"
+ strokeWidth: -1
+ PathMove { x: -109; y: 131.051 }
+ PathCubic { control1X: -106.4; control1Y: 135.001; control2X: -103.2; control2Y: 139.201; x: -101; y: 141.601 }
+ PathCubic { control1X: -96.6; control1Y: 146.401; control2X: -88.2; control2Y: 152.801; x: -86.6; y: 152.801 }
+ PathCubic { control1X: -85; control1Y: 152.801; control2X: -81.8; control2Y: 156.001; x: -79.8; y: 155.201 }
+ PathCubic { control1X: -77.8; control1Y: 154.401; control2X: -75; control2Y: 152.801; x: -74.6; y: 149.601 }
+ PathCubic { control1X: -74.2; control1Y: 146.401; control2X: -77; control2Y: 144.001; x: -77; y: 144.001 }
+ PathCubic { control1X: -80.066; control1Y: 142.468; control2X: -82.806; control2Y: 138.976; x: -84.385; y: 136.653 }
+ PathCubic { control1X: -84.385; control1Y: 136.653; control2X: -84.2; control2Y: 139.201; x: -89.4; y: 138.401 }
+ PathCubic { control1X: -94.6; control1Y: 137.601; control2X: -99.8; control2Y: 134.801; x: -101.4; y: 131.601 }
+ PathCubic { control1X: -103; control1Y: 128.401; control2X: -105.4; control2Y: 126.001; x: -103.8; y: 129.601 }
+ PathCubic { control1X: -102.2; control1Y: 133.201; control2X: -99.8; control2Y: 136.801; x: -98.2; y: 137.201 }
+ PathCubic { control1X: -96.6; control1Y: 137.601; control2X: -97; control2Y: 138.801; x: -99.4; y: 138.401 }
+ PathCubic { control1X: -101.8; control1Y: 138.001; control2X: -104.6; control2Y: 137.601; x: -109; y: 132.401 }
+ }
+
+ ShapePath {
+ fillColor: "#992600"
+ strokeWidth: -1
+ PathMove { x: -111.6; y: 110.001 }
+ PathCubic { control1X: -111.6; control1Y: 110.001; control2X: -109.8; control2Y: 96.4; x: -108.6; y: 92.4 }
+ PathCubic { control1X: -108.6; control1Y: 92.4; control2X: -109.4; control2Y: 85.6; x: -107; y: 81.4 }
+ PathCubic { control1X: -104.6; control1Y: 77.2; control2X: -102.6; control2Y: 71; x: -99.6; y: 65.6 }
+ PathCubic { control1X: -96.6; control1Y: 60.2; control2X: -96.4; control2Y: 56.2; x: -92.4; y: 54.6 }
+ PathCubic { control1X: -88.4; control1Y: 53; control2X: -82.4; control2Y: 44.4; x: -79.6; y: 43.4 }
+ PathCubic { control1X: -76.8; control1Y: 42.4; control2X: -77; control2Y: 43.2; x: -77; y: 43.2 }
+ PathCubic { control1X: -77; control1Y: 43.2; control2X: -70.2; control2Y: 28.4; x: -56.6; y: 32.4 }
+ PathCubic { control1X: -56.6; control1Y: 32.4; control2X: -72.8; control2Y: 29.6; x: -57; y: 20.2 }
+ PathCubic { control1X: -57; control1Y: 20.2; control2X: -61.8; control2Y: 21.3; x: -58.5; y: 14.3 }
+ PathCubic { control1X: -56.299; control1Y: 9.632; control2X: -56.8; control2Y: 16.4; x: -67.8; y: 28.2 }
+ PathCubic { control1X: -67.8; control1Y: 28.2; control2X: -72.8; control2Y: 36.8; x: -78; y: 39.8 }
+ PathCubic { control1X: -83.2; control1Y: 42.8; control2X: -95.2; control2Y: 49.8; x: -96.4; y: 53.6 }
+ PathCubic { control1X: -97.6; control1Y: 57.4; control2X: -100.8; control2Y: 63.2; x: -102.8; y: 64.8 }
+ PathCubic { control1X: -104.8; control1Y: 66.4; control2X: -107.6; control2Y: 70.6; x: -108; y: 74 }
+ PathCubic { control1X: -108; control1Y: 74; control2X: -109.2; control2Y: 78; x: -110.6; y: 79.2 }
+ PathCubic { control1X: -112; control1Y: 80.4; control2X: -112.2; control2Y: 83.6; x: -112.2; y: 85.6 }
+ PathCubic { control1X: -112.2; control1Y: 87.6; control2X: -114.2; control2Y: 90.4; x: -114; y: 92.8 }
+ PathCubic { control1X: -114; control1Y: 92.8; control2X: -113.2; control2Y: 111.801; x: -113.6; y: 113.801 }
+ PathLine { x: -111.6; y: 110.001 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeWidth: -1
+ PathMove { x: -120.2; y: 114.601 }
+ PathCubic { control1X: -120.2; control1Y: 114.601; control2X: -122.2; control2Y: 113.201; x: -126.6; y: 119.201 }
+ PathCubic { control1X: -126.6; control1Y: 119.201; control2X: -119.3; control2Y: 152.201; x: -119.3; y: 153.601 }
+ PathCubic { control1X: -119.3; control1Y: 153.601; control2X: -118.2; control2Y: 151.501; x: -119.5; y: 144.301 }
+ PathCubic { control1X: -120.8; control1Y: 137.101; control2X: -121.7; control2Y: 124.401; x: -121.7; y: 124.401 }
+ PathLine { x: -120.2; y: 114.601 }
+ }
+
+ ShapePath {
+ fillColor: "#992600"
+ strokeWidth: -1
+ PathMove { x: -98.6; y: 54 }
+ PathCubic { control1X: -98.6; control1Y: 54; control2X: -116.2; control2Y: 57.2; x: -115.8; y: 86.4 }
+ PathLine { x: -116.6; y: 111.201 }
+ PathCubic { control1X: -116.6; control1Y: 111.201; control2X: -117.8; control2Y: 85.6; x: -119; y: 84 }
+ PathCubic { control1X: -120.2; control1Y: 82.4; control2X: -116.2; control2Y: 71.2; x: -119.4; y: 77.2 }
+ PathCubic { control1X: -119.4; control1Y: 77.2; control2X: -133.4; control2Y: 91.2; x: -125.4; y: 112.401 }
+ PathCubic { control1X: -125.4; control1Y: 112.401; control2X: -123.9; control2Y: 115.701; x: -126.9; y: 111.101 }
+ PathCubic { control1X: -126.9; control1Y: 111.101; control2X: -131.5; control2Y: 98.5; x: -130.4; y: 92.1 }
+ PathCubic { control1X: -130.4; control1Y: 92.1; control2X: -130.2; control2Y: 89.9; x: -128.3; y: 87.1 }
+ PathCubic { control1X: -128.3; control1Y: 87.1; control2X: -119.7; control2Y: 75.4; x: -117; y: 73.1 }
+ PathCubic { control1X: -117; control1Y: 73.1; control2X: -115.2; control2Y: 58.7; x: -99.8; y: 53.5 }
+ PathCubic { control1X: -99.8; control1Y: 53.5; control2X: -94.1; control2Y: 51.2; x: -98.6; y: 54 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 40.8; y: -12.2 }
+ PathCubic { control1X: 41.46; control1Y: -12.554; control2X: 41.451; control2Y: -13.524; x: 42.031; y: -13.697 }
+ PathCubic { control1X: 43.18; control1Y: -14.041; control2X: 43.344; control2Y: -15.108; x: 43.862; y: -15.892 }
+ PathCubic { control1X: 44.735; control1Y: -17.211; control2X: 44.928; control2Y: -18.744; x: 45.51; y: -20.235 }
+ PathCubic { control1X: 45.782; control1Y: -20.935; control2X: 45.809; control2Y: -21.89; x: 45.496; y: -22.55 }
+ PathCubic { control1X: 44.322; control1Y: -25.031; control2X: 43.62; control2Y: -27.48; x: 42.178; y: -29.906 }
+ PathCubic { control1X: 41.91; control1Y: -30.356; control2X: 41.648; control2Y: -31.15; x: 41.447; y: -31.748 }
+ PathCubic { control1X: 40.984; control1Y: -33.132; control2X: 39.727; control2Y: -34.123; x: 38.867; y: -35.443 }
+ PathCubic { control1X: 38.579; control1Y: -35.884; control2X: 39.104; control2Y: -36.809; x: 38.388; y: -36.893 }
+ PathCubic { control1X: 37.491; control1Y: -36.998; control2X: 36.042; control2Y: -37.578; x: 35.809; y: -36.552 }
+ PathCubic { control1X: 35.221; control1Y: -33.965; control2X: 36.232; control2Y: -31.442; x: 37.2; y: -29 }
+ PathCubic { control1X: 36.418; control1Y: -28.308; control2X: 36.752; control2Y: -27.387; x: 36.904; y: -26.62 }
+ PathCubic { control1X: 37.614; control1Y: -23.014; control2X: 36.416; control2Y: -19.662; x: 35.655; y: -16.188 }
+ PathCubic { control1X: 35.632; control1Y: -16.084; control2X: 35.974; control2Y: -15.886; x: 35.946; y: -15.824 }
+ PathCubic { control1X: 34.724; control1Y: -13.138; control2X: 33.272; control2Y: -10.693; x: 31.453; y: -8.312 }
+ PathCubic { control1X: 30.695; control1Y: -7.32; control2X: 29.823; control2Y: -6.404; x: 29.326; y: -5.341 }
+ PathCubic { control1X: 28.958; control1Y: -4.554; control2X: 28.55; control2Y: -3.588; x: 28.8; y: -2.6 }
+ PathCubic { control1X: 25.365; control1Y: 0.18; control2X: 23.115; control2Y: 4.025; x: 20.504; y: 7.871 }
+ PathCubic { control1X: 20.042; control1Y: 8.551; control2X: 20.333; control2Y: 9.76; x: 20.884; y: 10.029 }
+ PathCubic { control1X: 21.697; control1Y: 10.427; control2X: 22.653; control2Y: 9.403; x: 23.123; y: 8.557 }
+ PathCubic { control1X: 23.512; control1Y: 7.859; control2X: 23.865; control2Y: 7.209; x: 24.356; y: 6.566 }
+ PathCubic { control1X: 24.489; control1Y: 6.391; control2X: 24.31; control2Y: 5.972; x: 24.445; y: 5.851 }
+ PathCubic { control1X: 27.078; control1Y: 3.504; control2X: 28.747; control2Y: 0.568; x: 31.2; y: -1.8 }
+ PathCubic { control1X: 33.15; control1Y: -2.129; control2X: 34.687; control2Y: -3.127; x: 36.435; y: -4.14 }
+ PathCubic { control1X: 36.743; control1Y: -4.319; control2X: 37.267; control2Y: -4.07; x: 37.557; y: -4.265 }
+ PathCubic { control1X: 39.31; control1Y: -5.442; control2X: 39.308; control2Y: -7.478; x: 39.414; y: -9.388 }
+ PathCubic { control1X: 39.464; control1Y: -10.272; control2X: 39.66; control2Y: -11.589; x: 40.8; y: -12.2 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 31.959; y: -16.666 }
+ PathCubic { control1X: 32.083; control1Y: -16.743; control2X: 31.928; control2Y: -17.166; x: 32.037; y: -17.382 }
+ PathCubic { control1X: 32.199; control1Y: -17.706; control2X: 32.602; control2Y: -17.894; x: 32.764; y: -18.218 }
+ PathCubic { control1X: 32.873; control1Y: -18.434; control2X: 32.71; control2Y: -18.814; x: 32.846; y: -18.956 }
+ PathCubic { control1X: 35.179; control1Y: -21.403; control2X: 35.436; control2Y: -24.427; x: 34.4; y: -27.4 }
+ PathCubic { control1X: 35.424; control1Y: -28.02; control2X: 35.485; control2Y: -29.282; x: 35.06; y: -30.129 }
+ PathCubic { control1X: 34.207; control1Y: -31.829; control2X: 34.014; control2Y: -33.755; x: 33.039; y: -35.298 }
+ PathCubic { control1X: 32.237; control1Y: -36.567; control2X: 30.659; control2Y: -37.811; x: 29.288; y: -36.508 }
+ PathCubic { control1X: 28.867; control1Y: -36.108; control2X: 28.546; control2Y: -35.321; x: 28.824; y: -34.609 }
+ PathCubic { control1X: 28.888; control1Y: -34.446; control2X: 29.173; control2Y: -34.3; x: 29.146; y: -34.218 }
+ PathCubic { control1X: 29.039; control1Y: -33.894; control2X: 28.493; control2Y: -33.67; x: 28.487; y: -33.398 }
+ PathCubic { control1X: 28.457; control1Y: -31.902; control2X: 27.503; control2Y: -30.391; x: 28.133; y: -29.062 }
+ PathCubic { control1X: 28.905; control1Y: -27.433; control2X: 29.724; control2Y: -25.576; x: 30.4; y: -23.8 }
+ PathCubic { control1X: 29.166; control1Y: -21.684; control2X: 30.199; control2Y: -19.235; x: 28.446; y: -17.358 }
+ PathCubic { control1X: 28.31; control1Y: -17.212; control2X: 28.319; control2Y: -16.826; x: 28.441; y: -16.624 }
+ PathCubic { control1X: 28.733; control1Y: -16.138; control2X: 29.139; control2Y: -15.732; x: 29.625; y: -15.44 }
+ PathCubic { control1X: 29.827; control1Y: -15.319; control2X: 30.175; control2Y: -15.317; x: 30.375; y: -15.441 }
+ PathCubic { control1X: 30.953; control1Y: -15.803; control2X: 31.351; control2Y: -16.29; x: 31.959; y: -16.666 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 94.771; y: -26.977 }
+ PathCubic { control1X: 96.16; control1Y: -25.185; control2X: 96.45; control2Y: -22.39; x: 94.401; y: -21 }
+ PathCubic { control1X: 94.951; control1Y: -17.691; control2X: 98.302; control2Y: -19.67; x: 100.401; y: -20.2 }
+ PathCubic { control1X: 100.292; control1Y: -20.588; control2X: 100.519; control2Y: -20.932; x: 100.802; y: -20.937 }
+ PathCubic { control1X: 101.859; control1Y: -20.952; control2X: 102.539; control2Y: -21.984; x: 103.601; y: -21.8 }
+ PathCubic { control1X: 104.035; control1Y: -23.357; control2X: 105.673; control2Y: -24.059; x: 106.317; y: -25.439 }
+ PathCubic { control1X: 108.043; control1Y: -29.134; control2X: 107.452; control2Y: -33.407; x: 104.868; y: -36.653 }
+ PathCubic { control1X: 104.666; control1Y: -36.907; control2X: 104.883; control2Y: -37.424; x: 104.759; y: -37.786 }
+ PathCubic { control1X: 104.003; control1Y: -39.997; control2X: 101.935; control2Y: -40.312; x: 100.001; y: -41 }
+ PathCubic { control1X: 98.824; control1Y: -44.875; control2X: 98.163; control2Y: -48.906; x: 96.401; y: -52.6 }
+ PathCubic { control1X: 94.787; control1Y: -52.85; control2X: 94.089; control2Y: -54.589; x: 92.752; y: -55.309 }
+ PathCubic { control1X: 91.419; control1Y: -56.028; control2X: 90.851; control2Y: -54.449; x: 90.892; y: -53.403 }
+ PathCubic { control1X: 90.899; control1Y: -53.198; control2X: 91.351; control2Y: -52.974; x: 91.181; y: -52.609 }
+ PathCubic { control1X: 91.105; control1Y: -52.445; control2X: 90.845; control2Y: -52.334; x: 90.845; y: -52.2 }
+ PathCubic { control1X: 90.846; control1Y: -52.065; control2X: 91.067; control2Y: -51.934; x: 91.201; y: -51.8 }
+ PathCubic { control1X: 90.283; control1Y: -50.98; control2X: 88.86; control2Y: -50.503; x: 88.565; y: -49.358 }
+ PathCubic { control1X: 87.611; control1Y: -45.648; control2X: 90.184; control2Y: -42.523; x: 91.852; y: -39.322 }
+ PathCubic { control1X: 92.443; control1Y: -38.187; control2X: 91.707; control2Y: -36.916; x: 90.947; y: -35.708 }
+ PathCubic { control1X: 90.509; control1Y: -35.013; control2X: 90.617; control2Y: -33.886; x: 90.893; y: -33.03 }
+ PathCubic { control1X: 91.645; control1Y: -30.699; control2X: 93.236; control2Y: -28.96; x: 94.771; y: -26.977 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 57.611; y: -8.591 }
+ PathCubic { control1X: 56.124; control1Y: -6.74; control2X: 52.712; control2Y: -4.171; x: 55.629; y: -2.243 }
+ PathCubic { control1X: 55.823; control1Y: -2.114; control2X: 56.193; control2Y: -2.11; x: 56.366; y: -2.244 }
+ PathCubic { control1X: 58.387; control1Y: -3.809; control2X: 60.39; control2Y: -4.712; x: 62.826; y: -5.294 }
+ PathCubic { control1X: 62.95; control1Y: -5.323; control2X: 63.224; control2Y: -4.856; x: 63.593; y: -5.017 }
+ PathCubic { control1X: 65.206; control1Y: -5.72; control2X: 67.216; control2Y: -5.662; x: 68.4; y: -7 }
+ PathCubic { control1X: 72.167; control1Y: -6.776; control2X: 75.732; control2Y: -7.892; x: 79.123; y: -9.2 }
+ PathCubic { control1X: 80.284; control1Y: -9.648; control2X: 81.554; control2Y: -10.207; x: 82.755; y: -10.709 }
+ PathCubic { control1X: 84.131; control1Y: -11.285; control2X: 85.335; control2Y: -12.213; x: 86.447; y: -13.354 }
+ PathCubic { control1X: 86.58; control1Y: -13.49; control2X: 86.934; control2Y: -13.4; x: 87.201; y: -13.4 }
+ PathCubic { control1X: 87.161; control1Y: -14.263; control2X: 88.123; control2Y: -14.39; x: 88.37; y: -15.012 }
+ PathCubic { control1X: 88.462; control1Y: -15.244; control2X: 88.312; control2Y: -15.64; x: 88.445; y: -15.742 }
+ PathCubic { control1X: 90.583; control1Y: -17.372; control2X: 91.503; control2Y: -19.39; x: 90.334; y: -21.767 }
+ PathCubic { control1X: 90.049; control1Y: -22.345; control2X: 89.8; control2Y: -22.963; x: 89.234; y: -23.439 }
+ PathCubic { control1X: 88.149; control1Y: -24.35; control2X: 87.047; control2Y: -23.496; x: 86; y: -23.8 }
+ PathCubic { control1X: 85.841; control1Y: -23.172; control2X: 85.112; control2Y: -23.344; x: 84.726; y: -23.146 }
+ PathCubic { control1X: 83.867; control1Y: -22.707; control2X: 82.534; control2Y: -23.292; x: 81.675; y: -22.854 }
+ PathCubic { control1X: 80.313; control1Y: -22.159; control2X: 79.072; control2Y: -21.99; x: 77.65; y: -21.613 }
+ PathCubic { control1X: 77.338; control1Y: -21.531; control2X: 76.56; control2Y: -21.627; x: 76.4; y: -21 }
+ PathCubic { control1X: 76.266; control1Y: -21.134; control2X: 76.118; control2Y: -21.368; x: 76.012; y: -21.346 }
+ PathCubic { control1X: 74.104; control1Y: -20.95; control2X: 72.844; control2Y: -20.736; x: 71.543; y: -19.044 }
+ PathCubic { control1X: 71.44; control1Y: -18.911; control2X: 70.998; control2Y: -19.09; x: 70.839; y: -18.955 }
+ PathCubic { control1X: 69.882; control1Y: -18.147; control2X: 69.477; control2Y: -16.913; x: 68.376; y: -16.241 }
+ PathCubic { control1X: 68.175; control1Y: -16.118; control2X: 67.823; control2Y: -16.286; x: 67.629; y: -16.157 }
+ PathCubic { control1X: 66.983; control1Y: -15.726; control2X: 66.616; control2Y: -15.085; x: 65.974; y: -14.638 }
+ PathCubic { control1X: 65.645; control1Y: -14.409; control2X: 65.245; control2Y: -14.734; x: 65.277; y: -14.99 }
+ PathCubic { control1X: 65.522; control1Y: -16.937; control2X: 66.175; control2Y: -18.724; x: 65.6; y: -20.6 }
+ PathCubic { control1X: 67.677; control1Y: -23.12; control2X: 70.194; control2Y: -25.069; x: 72; y: -27.8 }
+ PathCubic { control1X: 72.015; control1Y: -29.966; control2X: 72.707; control2Y: -32.112; x: 72.594; y: -34.189 }
+ PathCubic { control1X: 72.584; control1Y: -34.382; control2X: 72.296; control2Y: -35.115; x: 72.17; y: -35.462 }
+ PathCubic { control1X: 71.858; control1Y: -36.316; control2X: 72.764; control2Y: -37.382; x: 71.92; y: -38.106 }
+ PathCubic { control1X: 70.516; control1Y: -39.309; control2X: 69.224; control2Y: -38.433; x: 68.4; y: -37 }
+ PathCubic { control1X: 66.562; control1Y: -36.61; control2X: 64.496; control2Y: -35.917; x: 62.918; y: -37.151 }
+ PathCubic { control1X: 61.911; control1Y: -37.938; control2X: 61.333; control2Y: -38.844; x: 60.534; y: -39.9 }
+ PathCubic { control1X: 59.549; control1Y: -41.202; control2X: 59.884; control2Y: -42.638; x: 59.954; y: -44.202 }
+ PathCubic { control1X: 59.96; control1Y: -44.33; control2X: 59.645; control2Y: -44.466; x: 59.645; y: -44.6 }
+ PathCubic { control1X: 59.646; control1Y: -44.735; control2X: 59.866; control2Y: -44.866; x: 60; y: -45 }
+ PathCubic { control1X: 59.294; control1Y: -45.626; control2X: 59.019; control2Y: -46.684; x: 58; y: -47 }
+ PathCubic { control1X: 58.305; control1Y: -48.092; control2X: 57.629; control2Y: -48.976; x: 56.758; y: -49.278 }
+ PathCubic { control1X: 54.763; control1Y: -49.969; control2X: 53.086; control2Y: -48.057; x: 51.194; y: -47.984 }
+ PathCubic { control1X: 50.68; control1Y: -47.965; control2X: 50.213; control2Y: -49.003; x: 49.564; y: -49.328 }
+ PathCubic { control1X: 49.132; control1Y: -49.544; control2X: 48.428; control2Y: -49.577; x: 48.066; y: -49.311 }
+ PathCubic { control1X: 47.378; control1Y: -48.807; control2X: 46.789; control2Y: -48.693; x: 46.031; y: -48.488 }
+ PathCubic { control1X: 44.414; control1Y: -48.052; control2X: 43.136; control2Y: -46.958; x: 41.656; y: -46.103 }
+ PathCubic { control1X: 40.171; control1Y: -45.246; control2X: 39.216; control2Y: -43.809; x: 38.136; y: -42.489 }
+ PathCubic { control1X: 37.195; control1Y: -41.337; control2X: 37.059; control2Y: -38.923; x: 38.479; y: -38.423 }
+ PathCubic { control1X: 40.322; control1Y: -37.773; control2X: 41.626; control2Y: -40.476; x: 43.592; y: -40.15 }
+ PathCubic { control1X: 43.904; control1Y: -40.099; control2X: 44.11; control2Y: -39.788; x: 44; y: -39.4 }
+ PathCubic { control1X: 44.389; control1Y: -39.291; control2X: 44.607; control2Y: -39.52; x: 44.8; y: -39.8 }
+ PathCubic { control1X: 45.658; control1Y: -38.781; control2X: 46.822; control2Y: -38.444; x: 47.76; y: -37.571 }
+ PathCubic { control1X: 48.73; control1Y: -36.667; control2X: 50.476; control2Y: -37.085; x: 51.491; y: -36.088 }
+ PathCubic { control1X: 53.02; control1Y: -34.586; control2X: 52.461; control2Y: -31.905; x: 54.4; y: -30.6 }
+ PathCubic { control1X: 53.814; control1Y: -29.287; control2X: 53.207; control2Y: -28.01; x: 52.872; y: -26.583 }
+ PathCubic { control1X: 52.59; control1Y: -25.377; control2X: 53.584; control2Y: -24.18; x: 54.795; y: -24.271 }
+ PathCubic { control1X: 56.053; control1Y: -24.365; control2X: 56.315; control2Y: -25.124; x: 56.8; y: -26.2 }
+ PathCubic { control1X: 57.067; control1Y: -25.933; control2X: 57.536; control2Y: -25.636; x: 57.495; y: -25.42 }
+ PathCubic { control1X: 57.038; control1Y: -23.033; control2X: 56.011; control2Y: -21.04; x: 55.553; y: -18.609 }
+ PathCubic { control1X: 55.494; control1Y: -18.292; control2X: 55.189; control2Y: -18.09; x: 54.8; y: -18.2 }
+ PathCubic { control1X: 54.332; control1Y: -14.051; control2X: 50.28; control2Y: -11.657; x: 47.735; y: -8.492 }
+ PathCubic { control1X: 47.332; control1Y: -7.99; control2X: 47.328; control2Y: -6.741; x: 47.737; y: -6.338 }
+ PathCubic { control1X: 49.14; control1Y: -4.951; control2X: 51.1; control2Y: -6.497; x: 52.8; y: -7 }
+ PathCubic { control1X: 53.013; control1Y: -8.206; control2X: 53.872; control2Y: -9.148; x: 55.204; y: -9.092 }
+ PathCubic { control1X: 55.46; control1Y: -9.082; control2X: 55.695; control2Y: -9.624; x: 56.019; y: -9.754 }
+ PathCubic { control1X: 56.367; control1Y: -9.892; control2X: 56.869; control2Y: -9.668; x: 57.155; y: -9.866 }
+ PathCubic { control1X: 58.884; control1Y: -11.061; control2X: 60.292; control2Y: -12.167; x: 62.03; y: -13.356 }
+ PathCubic { control1X: 62.222; control1Y: -13.487; control2X: 62.566; control2Y: -13.328; x: 62.782; y: -13.436 }
+ PathCubic { control1X: 63.107; control1Y: -13.598; control2X: 63.294; control2Y: -13.985; x: 63.617; y: -14.17 }
+ PathCubic { control1X: 63.965; control1Y: -14.37; control2X: 64.207; control2Y: -14.08; x: 64.4; y: -13.8 }
+ PathCubic { control1X: 63.754; control1Y: -13.451; control2X: 63.75; control2Y: -12.494; x: 63.168; y: -12.292 }
+ PathCubic { control1X: 62.393; control1Y: -12.024; control2X: 61.832; control2Y: -11.511; x: 61.158; y: -11.064 }
+ PathCubic { control1X: 60.866; control1Y: -10.871; control2X: 60.207; control2Y: -11.119; x: 60.103; y: -10.94 }
+ PathCubic { control1X: 59.505; control1Y: -9.912; control2X: 58.321; control2Y: -9.474; x: 57.611; y: -8.591 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 2.2; y: -58 }
+ PathCubic { control1X: 2.2; control1Y: -58; control2X: -7.038; control2Y: -60.872; x: -18.2; y: -35.2 }
+ PathCubic { control1X: -18.2; control1Y: -35.2; control2X: -20.6; control2Y: -30; x: -23; y: -28 }
+ PathCubic { control1X: -25.4; control1Y: -26; control2X: -36.6; control2Y: -22.4; x: -38.6; y: -18.4 }
+ PathLine { x: -49; y: -2.4 }
+ PathCubic { control1X: -49; control1Y: -2.4; control2X: -34.2; control2Y: -18.4; x: -31; y: -20.8 }
+ PathCubic { control1X: -31; control1Y: -20.8; control2X: -23; control2Y: -29.2; x: -26.2; y: -22.4 }
+ PathCubic { control1X: -26.2; control1Y: -22.4; control2X: -40.2; control2Y: -11.6; x: -39; y: -2.4 }
+ PathCubic { control1X: -39; control1Y: -2.4; control2X: -44.6; control2Y: 12; x: -45.4; y: 14 }
+ PathCubic { control1X: -45.4; control1Y: 14; control2X: -29.4; control2Y: -18; x: -27; y: -19.2 }
+ PathCubic { control1X: -24.6; control1Y: -20.4; control2X: -23.4; control2Y: -20.4; x: -24.6; y: -16.8 }
+ PathCubic { control1X: -25.8; control1Y: -13.2; control2X: -26.2; control2Y: 3.2; x: -29; y: 5.2 }
+ PathCubic { control1X: -29; control1Y: 5.2; control2X: -21; control2Y: -15.2; x: -21.8; y: -18.4 }
+ PathCubic { control1X: -21.8; control1Y: -18.4; control2X: -18.6; control2Y: -22; x: -16.2; y: -16.8 }
+ PathLine { x: -17.4; y: -0.8 }
+ PathLine { x: -13; y: 11.2 }
+ PathCubic { control1X: -13; control1Y: 11.2; control2X: -15.4; control2Y: 0; x: -13.8; y: -15.6 }
+ PathCubic { control1X: -13.8; control1Y: -15.6; control2X: -15.8; control2Y: -26; x: -11.8; y: -20.4 }
+ PathCubic { control1X: -7.8; control1Y: -14.8; control2X: 1.8; control2Y: -8.8; x: 1.8; y: -4 }
+ PathCubic { control1X: 1.8; control1Y: -4; control2X: -3.4; control2Y: -21.6; x: -12.6; y: -26.4 }
+ PathLine { x: -16.6; y: -20.4 }
+ PathLine { x: -17.8; y: -22.4 }
+ PathCubic { control1X: -17.8; control1Y: -22.4; control2X: -21.4; control2Y: -23.2; x: -17; y: -30 }
+ PathCubic { control1X: -12.6; control1Y: -36.8; control2X: -13; control2Y: -37.6; x: -13; y: -37.6 }
+ PathCubic { control1X: -13; control1Y: -37.6; control2X: -6.6; control2Y: -30.4; x: -5; y: -30.4 }
+ PathCubic { control1X: -5; control1Y: -30.4; control2X: 8.2; control2Y: -38; x: 9.4; y: -13.6 }
+ PathCubic { control1X: 9.4; control1Y: -13.6; control2X: 16.2; control2Y: -28; x: 7; y: -34.8 }
+ PathCubic { control1X: 7; control1Y: -34.8; control2X: -7.8; control2Y: -36.8; x: -6.6; y: -42 }
+ PathLine { x: 0.6; y: -54.4 }
+ PathCubic { control1X: 4.2; control1Y: -59.6; control2X: 2.6; control2Y: -56.8; x: 2.6; y: -56.8 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -17.8; y: -41.6 }
+ PathCubic { control1X: -17.8; control1Y: -41.6; control2X: -30.6; control2Y: -41.6; x: -33.8; y: -36.4 }
+ PathLine { x: -41; y: -26.8 }
+ PathCubic { control1X: -41; control1Y: -26.8; control2X: -23.8; control2Y: -36.8; x: -19.8; y: -38 }
+ PathCubic { control1X: -15.8; control1Y: -39.2; control2X: -17.8; control2Y: -41.6; x: -17.8; y: -41.6 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -57.8; y: -35.2 }
+ PathCubic { control1X: -57.8; control1Y: -35.2; control2X: -59.8; control2Y: -34; x: -60.2; y: -31.2 }
+ PathCubic { control1X: -60.6; control1Y: -28.4; control2X: -63; control2Y: -28; x: -62.2; y: -25.2 }
+ PathCubic { control1X: -61.4; control1Y: -22.4; control2X: -59.4; control2Y: -20; x: -59.4; y: -24 }
+ PathCubic { control1X: -59.4; control1Y: -28; control2X: -57.8; control2Y: -30; x: -57; y: -31.2 }
+ PathCubic { control1X: -56.2; control1Y: -32.4; control2X: -54.6; control2Y: -36.8; x: -57.8; y: -35.2 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -66.6; y: 26 }
+ PathCubic { control1X: -66.6; control1Y: 26; control2X: -75; control2Y: 22; x: -78.2; y: 18.4 }
+ PathCubic { control1X: -81.4; control1Y: 14.8; control2X: -80.948; control2Y: 19.966; x: -85.8; y: 19.6 }
+ PathCubic { control1X: -91.647; control1Y: 19.159; control2X: -90.6; control2Y: 3.2; x: -90.6; y: 3.2 }
+ PathLine { x: -94.6; y: 10.8 }
+ PathCubic { control1X: -94.6; control1Y: 10.8; control2X: -95.8; control2Y: 25.2; x: -87.8; y: 22.8 }
+ PathCubic { control1X: -83.893; control1Y: 21.628; control2X: -82.6; control2Y: 23.2; x: -84.2; y: 24 }
+ PathCubic { control1X: -85.8; control1Y: 24.8; control2X: -78.6; control2Y: 25.2; x: -81.4; y: 26.8 }
+ PathCubic { control1X: -84.2; control1Y: 28.4; control2X: -69.8; control2Y: 23.2; x: -72.2; y: 33.6 }
+ PathLine { x: -66.6; y: 26 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -79.2; y: 40.4 }
+ PathCubic { control1X: -79.2; control1Y: 40.4; control2X: -94.6; control2Y: 44.8; x: -98.2; y: 35.2 }
+ PathCubic { control1X: -98.2; control1Y: 35.2; control2X: -103; control2Y: 37.6; x: -100.8; y: 40.6 }
+ PathCubic { control1X: -98.6; control1Y: 43.6; control2X: -97.4; control2Y: 44; x: -97.4; y: 44 }
+ PathCubic { control1X: -97.4; control1Y: 44; control2X: -92; control2Y: 45.2; x: -92.6; y: 46 }
+ PathCubic { control1X: -93.2; control1Y: 46.8; control2X: -95.6; control2Y: 50.2; x: -95.6; y: 50.2 }
+ PathCubic { control1X: -95.6; control1Y: 50.2; control2X: -85.4; control2Y: 44.2; x: -79.2; y: 40.4 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeWidth: -1
+ PathMove { x: 149.201; y: 118.601 }
+ PathCubic { control1X: 148.774; control1Y: 120.735; control2X: 147.103; control2Y: 121.536; x: 145.201; y: 122.201 }
+ PathCubic { control1X: 143.284; control1Y: 121.243; control2X: 140.686; control2Y: 118.137; x: 138.801; y: 120.201 }
+ PathCubic { control1X: 138.327; control1Y: 119.721; control2X: 137.548; control2Y: 119.661; x: 137.204; y: 118.999 }
+ PathCubic { control1X: 136.739; control1Y: 118.101; control2X: 137.011; control2Y: 117.055; x: 136.669; y: 116.257 }
+ PathCubic { control1X: 136.124; control1Y: 114.985; control2X: 135.415; control2Y: 113.619; x: 135.601; y: 112.201 }
+ PathCubic { control1X: 137.407; control1Y: 111.489; control2X: 138.002; control2Y: 109.583; x: 137.528; y: 107.82 }
+ PathCubic { control1X: 137.459; control1Y: 107.563; control2X: 137.03; control2Y: 107.366; x: 137.23; y: 107.017 }
+ PathCubic { control1X: 137.416; control1Y: 106.694; control2X: 137.734; control2Y: 106.467; x: 138.001; y: 106.2 }
+ PathCubic { control1X: 137.866; control1Y: 106.335; control2X: 137.721; control2Y: 106.568; x: 137.61; y: 106.548 }
+ PathCubic { control1X: 137; control1Y: 106.442; control2X: 137.124; control2Y: 105.805; x: 137.254; y: 105.418 }
+ PathCubic { control1X: 137.839; control1Y: 103.672; control2X: 139.853; control2Y: 103.408; x: 141.201; y: 104.6 }
+ PathCubic { control1X: 141.457; control1Y: 104.035; control2X: 141.966; control2Y: 104.229; x: 142.401; y: 104.2 }
+ PathCubic { control1X: 142.351; control1Y: 103.621; control2X: 142.759; control2Y: 103.094; x: 142.957; y: 102.674 }
+ PathCubic { control1X: 143.475; control1Y: 101.576; control2X: 145.104; control2Y: 102.682; x: 145.901; y: 102.07 }
+ PathCubic { control1X: 146.977; control1Y: 101.245; control2X: 148.04; control2Y: 100.546; x: 149.118; y: 101.149 }
+ PathCubic { control1X: 150.927; control1Y: 102.162; control2X: 152.636; control2Y: 103.374; x: 153.835; y: 105.115 }
+ PathCubic { control1X: 154.41; control1Y: 105.949; control2X: 154.65; control2Y: 107.23; x: 154.592; y: 108.188 }
+ PathCubic { control1X: 154.554; control1Y: 108.835; control2X: 153.173; control2Y: 108.483; x: 152.83; y: 109.412 }
+ PathCubic { control1X: 152.185; control1Y: 111.16; control2X: 154.016; control2Y: 111.679; x: 154.772; y: 113.017 }
+ PathCubic { control1X: 154.97; control1Y: 113.366; control2X: 154.706; control2Y: 113.67; x: 154.391; y: 113.768 }
+ PathCubic { control1X: 153.98; control1Y: 113.896; control2X: 153.196; control2Y: 113.707; x: 153.334; y: 114.16 }
+ PathCubic { control1X: 154.306; control1Y: 117.353; control2X: 151.55; control2Y: 118.031; x: 149.201; y: 118.601 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeWidth: -1
+ PathMove { x: 139.6; y: 138.201 }
+ PathCubic { control1X: 139.593; control1Y: 136.463; control2X: 137.992; control2Y: 134.707; x: 139.201; y: 133.001 }
+ PathCubic { control1X: 139.336; control1Y: 133.135; control2X: 139.467; control2Y: 133.356; x: 139.601; y: 133.356 }
+ PathCubic { control1X: 139.736; control1Y: 133.356; control2X: 139.867; control2Y: 133.135; x: 140.001; y: 133.001 }
+ PathCubic { control1X: 141.496; control1Y: 135.217; control2X: 145.148; control2Y: 136.145; x: 145.006; y: 138.991 }
+ PathCubic { control1X: 144.984; control1Y: 139.438; control2X: 143.897; control2Y: 140.356; x: 144.801; y: 141.001 }
+ PathCubic { control1X: 142.988; control1Y: 142.349; control2X: 142.933; control2Y: 144.719; x: 142.001; y: 146.601 }
+ PathCubic { control1X: 140.763; control1Y: 146.315; control2X: 139.551; control2Y: 145.952; x: 138.401; y: 145.401 }
+ PathCubic { control1X: 138.753; control1Y: 143.915; control2X: 138.636; control2Y: 142.231; x: 139.456; y: 140.911 }
+ PathCubic { control1X: 139.89; control1Y: 140.213; control2X: 139.603; control2Y: 139.134; x: 139.6; y: 138.201 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -26.6; y: 129.201 }
+ PathCubic { control1X: -26.6; control1Y: 129.201; control2X: -43.458; control2Y: 139.337; x: -29.4; y: 124.001 }
+ PathCubic { control1X: -20.6; control1Y: 114.401; control2X: -10.6; control2Y: 108.801; x: -10.6; y: 108.801 }
+ PathCubic { control1X: -10.6; control1Y: 108.801; control2X: -0.2; control2Y: 104.4; x: 3.4; y: 103.2 }
+ PathCubic { control1X: 7; control1Y: 102; control2X: 22.2; control2Y: 96.8; x: 25.4; y: 96.4 }
+ PathCubic { control1X: 28.6; control1Y: 96; control2X: 38.2; control2Y: 92; x: 45; y: 96 }
+ PathCubic { control1X: 51.8; control1Y: 100; control2X: 59.8; control2Y: 104.4; x: 59.8; y: 104.4 }
+ PathCubic { control1X: 59.8; control1Y: 104.4; control2X: 43.4; control2Y: 96; x: 39.8; y: 98.4 }
+ PathCubic { control1X: 36.2; control1Y: 100.8; control2X: 29; control2Y: 100.4; x: 23; y: 103.6 }
+ PathCubic { control1X: 23; control1Y: 103.6; control2X: 8.2; control2Y: 108.001; x: 5; y: 110.001 }
+ PathCubic { control1X: 1.8; control1Y: 112.001; control2X: -8.6; control2Y: 123.601; x: -10.2; y: 122.801 }
+ PathCubic { control1X: -11.8; control1Y: 122.001; control2X: -9.8; control2Y: 121.601; x: -8.6; y: 118.801 }
+ PathCubic { control1X: -7.4; control1Y: 116.001; control2X: -9.4; control2Y: 114.401; x: -17.4; y: 120.801 }
+ PathCubic { control1X: -25.4; control1Y: 127.201; control2X: -26.6; control2Y: 129.201; x: -26.6; y: 129.201 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -19.195; y: 123.234 }
+ PathCubic { control1X: -19.195; control1Y: 123.234; control2X: -17.785; control2Y: 110.194; x: -9.307; y: 111.859 }
+ PathCubic { control1X: -9.307; control1Y: 111.859; control2X: -1.081; control2Y: 107.689; x: 1.641; y: 105.721 }
+ PathCubic { control1X: 1.641; control1Y: 105.721; control2X: 9.78; control2Y: 104.019; x: 11.09; y: 103.402 }
+ PathCubic { control1X: 29.569; control1Y: 94.702; control2X: 44.288; control2Y: 99.221; x: 44.835; y: 98.101 }
+ PathCubic { control1X: 45.381; control1Y: 96.982; control2X: 65.006; control2Y: 104.099; x: 68.615; y: 108.185 }
+ PathCubic { control1X: 69.006; control1Y: 108.628; control2X: 58.384; control2Y: 102.588; x: 48.686; y: 100.697 }
+ PathCubic { control1X: 40.413; control1Y: 99.083; control2X: 18.811; control2Y: 100.944; x: 7.905; y: 106.48 }
+ PathCubic { control1X: 4.932; control1Y: 107.989; control2X: -4.013; control2Y: 113.773; x: -6.544; y: 113.662 }
+ PathCubic { control1X: -9.075; control1Y: 113.55; control2X: -19.195; control2Y: 123.234; x: -19.195; y: 123.234 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -23; y: 148.801 }
+ PathCubic { control1X: -23; control1Y: 148.801; control2X: -38.2; control2Y: 146.401; x: -21.4; y: 144.801 }
+ PathCubic { control1X: -21.4; control1Y: 144.801; control2X: -3.4; control2Y: 142.801; x: 0.6; y: 137.601 }
+ PathCubic { control1X: 0.6; control1Y: 137.601; control2X: 14.2; control2Y: 128.401; x: 17; y: 128.001 }
+ PathCubic { control1X: 19.8; control1Y: 127.601; control2X: 49.8; control2Y: 120.401; x: 50.2; y: 118.001 }
+ PathCubic { control1X: 50.6; control1Y: 115.601; control2X: 56.2; control2Y: 115.601; x: 57.8; y: 116.401 }
+ PathCubic { control1X: 59.4; control1Y: 117.201; control2X: 58.6; control2Y: 118.401; x: 55.8; y: 119.201 }
+ PathCubic { control1X: 53; control1Y: 120.001; control2X: 21.8; control2Y: 136.401; x: 15.4; y: 137.601 }
+ PathCubic { control1X: 9; control1Y: 138.801; control2X: -2.6; control2Y: 146.401; x: -7.4; y: 147.601 }
+ PathCubic { control1X: -12.2; control1Y: 148.801; control2X: -23; control2Y: 148.801; x: -23; y: 148.801 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -3.48; y: 141.403 }
+ PathCubic { control1X: -3.48; control1Y: 141.403; control2X: -12.062; control2Y: 140.574; x: -3.461; y: 139.755 }
+ PathCubic { control1X: -3.461; control1Y: 139.755; control2X: 5.355; control2Y: 136.331; x: 7.403; y: 133.668 }
+ PathCubic { control1X: 7.403; control1Y: 133.668; control2X: 14.367; control2Y: 128.957; x: 15.8; y: 128.753 }
+ PathCubic { control1X: 17.234; control1Y: 128.548; control2X: 31.194; control2Y: 124.861; x: 31.399; y: 123.633 }
+ PathCubic { control1X: 31.604; control1Y: 122.404; control2X: 65.67; control2Y: 109.823; x: 70.09; y: 113.013 }
+ PathCubic { control1X: 73.001; control1Y: 115.114; control2X: 63.1; control2Y: 113.437; x: 53.466; y: 117.847 }
+ PathCubic { control1X: 52.111; control1Y: 118.467; control2X: 18.258; control2Y: 133.054; x: 14.981; y: 133.668 }
+ PathCubic { control1X: 11.704; control1Y: 134.283; control2X: 5.765; control2Y: 138.174; x: 3.307; y: 138.788 }
+ PathCubic { control1X: 0.85; control1Y: 139.403; control2X: -3.48; control2Y: 141.403; x: -3.48; y: 141.403 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -11.4; y: 143.601 }
+ PathCubic { control1X: -11.4; control1Y: 143.601; control2X: -6.2; control2Y: 143.201; x: -7.4; y: 144.801 }
+ PathCubic { control1X: -8.6; control1Y: 146.401; control2X: -11; control2Y: 145.601; x: -11; y: 145.601 }
+ PathLine { x: -11.4; y: 143.601 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -18.6; y: 145.201 }
+ PathCubic { control1X: -18.6; control1Y: 145.201; control2X: -13.4; control2Y: 144.801; x: -14.6; y: 146.401 }
+ PathCubic { control1X: -15.8; control1Y: 148.001; control2X: -18.2; control2Y: 147.201; x: -18.2; y: 147.201 }
+ PathLine { x: -18.6; y: 145.201 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -29; y: 146.801 }
+ PathCubic { control1X: -29; control1Y: 146.801; control2X: -23.8; control2Y: 146.401; x: -25; y: 148.001 }
+ PathCubic { control1X: -26.2; control1Y: 149.601; control2X: -28.6; control2Y: 148.801; x: -28.6; y: 148.801 }
+ PathLine { x: -29; y: 146.801 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -36.6; y: 147.601 }
+ PathCubic { control1X: -36.6; control1Y: 147.601; control2X: -31.4; control2Y: 147.201; x: -32.6; y: 148.801 }
+ PathCubic { control1X: -33.8; control1Y: 150.401; control2X: -36.2; control2Y: 149.601; x: -36.2; y: 149.601 }
+ PathLine { x: -36.6; y: 147.601 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 1.8; y: 108.001 }
+ PathCubic { control1X: 1.8; control1Y: 108.001; control2X: 6.2; control2Y: 108.001; x: 5; y: 109.601 }
+ PathCubic { control1X: 3.8; control1Y: 111.201; control2X: 0.6; control2Y: 110.801; x: 0.6; y: 110.801 }
+ PathLine { x: 1.8; y: 108.001 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -8.2; y: 113.601 }
+ PathCubic { control1X: -8.2; control1Y: 113.601; control2X: -1.694; control2Y: 111.46; x: -4.2; y: 114.801 }
+ PathCubic { control1X: -5.4; control1Y: 116.401; control2X: -7.8; control2Y: 115.601; x: -7.8; y: 115.601 }
+ PathLine { x: -8.2; y: 113.601 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -19.4; y: 118.401 }
+ PathCubic { control1X: -19.4; control1Y: 118.401; control2X: -14.2; control2Y: 118.001; x: -15.4; y: 119.601 }
+ PathCubic { control1X: -16.6; control1Y: 121.201; control2X: -19; control2Y: 120.401; x: -19; y: 120.401 }
+ PathLine { x: -19.4; y: 118.401 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -27; y: 124.401 }
+ PathCubic { control1X: -27; control1Y: 124.401; control2X: -21.8; control2Y: 124.001; x: -23; y: 125.601 }
+ PathCubic { control1X: -24.2; control1Y: 127.201; control2X: -26.6; control2Y: 126.401; x: -26.6; y: 126.401 }
+ PathLine { x: -27; y: 124.401 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -33.8; y: 129.201 }
+ PathCubic { control1X: -33.8; control1Y: 129.201; control2X: -28.6; control2Y: 128.801; x: -29.8; y: 130.401 }
+ PathCubic { control1X: -31; control1Y: 132.001; control2X: -33.4; control2Y: 131.201; x: -33.4; y: 131.201 }
+ PathLine { x: -33.8; y: 129.201 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 5.282; y: 135.598 }
+ PathCubic { control1X: 5.282; control1Y: 135.598; control2X: 12.203; control2Y: 135.066; x: 10.606; y: 137.195 }
+ PathCubic { control1X: 9.009; control1Y: 139.325; control2X: 5.814; control2Y: 138.26; x: 5.814; y: 138.26 }
+ PathLine { x: 5.282; y: 135.598 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 15.682; y: 130.798 }
+ PathCubic { control1X: 15.682; control1Y: 130.798; control2X: 22.603; control2Y: 130.266; x: 21.006; y: 132.395 }
+ PathCubic { control1X: 19.409; control1Y: 134.525; control2X: 16.214; control2Y: 133.46; x: 16.214; y: 133.46 }
+ PathLine { x: 15.682; y: 130.798 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 26.482; y: 126.398 }
+ PathCubic { control1X: 26.482; control1Y: 126.398; control2X: 33.403; control2Y: 125.866; x: 31.806; y: 127.995 }
+ PathCubic { control1X: 30.209; control1Y: 130.125; control2X: 27.014; control2Y: 129.06; x: 27.014; y: 129.06 }
+ PathLine { x: 26.482; y: 126.398 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 36.882; y: 121.598 }
+ PathCubic { control1X: 36.882; control1Y: 121.598; control2X: 43.803; control2Y: 121.066; x: 42.206; y: 123.195 }
+ PathCubic { control1X: 40.609; control1Y: 125.325; control2X: 37.414; control2Y: 124.26; x: 37.414; y: 124.26 }
+ PathLine { x: 36.882; y: 121.598 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 9.282; y: 103.598 }
+ PathCubic { control1X: 9.282; control1Y: 103.598; control2X: 16.203; control2Y: 103.066; x: 14.606; y: 105.195 }
+ PathCubic { control1X: 13.009; control1Y: 107.325; control2X: 9.014; control2Y: 107.06; x: 9.014; y: 107.06 }
+ PathLine { x: 9.282; y: 103.598 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 19.282; y: 100.398 }
+ PathCubic { control1X: 19.282; control1Y: 100.398; control2X: 26.203; control2Y: 99.866; x: 24.606; y: 101.995 }
+ PathCubic { control1X: 23.009; control1Y: 104.125; control2X: 18.614; control2Y: 103.86; x: 18.614; y: 103.86 }
+ PathLine { x: 19.282; y: 100.398 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -3.4; y: 140.401 }
+ PathCubic { control1X: -3.4; control1Y: 140.401; control2X: 1.8; control2Y: 140.001; x: 0.6; y: 141.601 }
+ PathCubic { control1X: -0.6; control1Y: 143.201; control2X: -3; control2Y: 142.401; x: -3; y: 142.401 }
+ PathLine { x: -3.4; y: 140.401 }
+ }
+
+ ShapePath {
+ fillColor: "#992600"
+ strokeWidth: -1
+ PathMove { x: -76.6; y: 41.2 }
+ PathCubic { control1X: -76.6; control1Y: 41.2; control2X: -81; control2Y: 50; x: -81.4; y: 53.2 }
+ PathCubic { control1X: -81.4; control1Y: 53.2; control2X: -80.6; control2Y: 44.4; x: -79.4; y: 42.4 }
+ PathCubic { control1X: -78.2; control1Y: 40.4; control2X: -76.6; control2Y: 41.2; x: -76.6; y: 41.2 }
+ }
+
+ ShapePath {
+ fillColor: "#992600"
+ strokeWidth: -1
+ PathMove { x: -95; y: 55.2 }
+ PathCubic { control1X: -95; control1Y: 55.2; control2X: -98.2; control2Y: 69.6; x: -97.8; y: 72.4 }
+ PathCubic { control1X: -97.8; control1Y: 72.4; control2X: -99; control2Y: 60.8; x: -98.6; y: 59.6 }
+ PathCubic { control1X: -98.2; control1Y: 58.4; control2X: -95; control2Y: 55.2; x: -95; y: 55.2 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -74.2; y: -19.4 }
+ PathLine { x: -74.4; y: -16.2 }
+ PathLine { x: -76.6; y: -16 }
+ PathCubic { control1X: -76.6; control1Y: -16; control2X: -62.4; control2Y: -3.4; x: -61.8; y: 4.2 }
+ PathCubic { control1X: -61.8; control1Y: 4.2; control2X: -61; control2Y: -4; x: -74.2; y: -19.4 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -70.216; y: -18.135 }
+ PathCubic { control1X: -70.647; control1Y: -18.551; control2X: -70.428; control2Y: -19.296; x: -70.836; y: -19.556 }
+ PathCubic { control1X: -71.645; control1Y: -20.072; control2X: -69.538; control2Y: -20.129; x: -69.766; y: -20.845 }
+ PathCubic { control1X: -70.149; control1Y: -22.051; control2X: -69.962; control2Y: -22.072; x: -70.084; y: -23.348 }
+ PathCubic { control1X: -70.141; control1Y: -23.946; control2X: -69.553; control2Y: -25.486; x: -69.168; y: -25.926 }
+ PathCubic { control1X: -67.722; control1Y: -27.578; control2X: -69.046; control2Y: -30.51; x: -67.406; y: -32.061 }
+ PathCubic { control1X: -67.102; control1Y: -32.35; control2X: -66.726; control2Y: -32.902; x: -66.441; y: -33.32 }
+ PathCubic { control1X: -65.782; control1Y: -34.283; control2X: -64.598; control2Y: -34.771; x: -63.648; y: -35.599 }
+ PathCubic { control1X: -63.33; control1Y: -35.875; control2X: -63.531; control2Y: -36.702; x: -62.962; y: -36.61 }
+ PathCubic { control1X: -62.248; control1Y: -36.495; control2X: -61.007; control2Y: -36.625; x: -61.052; y: -35.784 }
+ PathCubic { control1X: -61.165; control1Y: -33.664; control2X: -62.494; control2Y: -31.944; x: -63.774; y: -30.276 }
+ PathCubic { control1X: -63.323; control1Y: -29.572; control2X: -63.781; control2Y: -28.937; x: -64.065; y: -28.38 }
+ PathCubic { control1X: -65.4; control1Y: -25.76; control2X: -65.211; control2Y: -22.919; x: -65.385; y: -20.079 }
+ PathCubic { control1X: -65.39; control1Y: -19.994; control2X: -65.697; control2Y: -19.916; x: -65.689; y: -19.863 }
+ PathCubic { control1X: -65.336; control1Y: -17.528; control2X: -64.752; control2Y: -15.329; x: -63.873; y: -13.1 }
+ PathCubic { control1X: -63.507; control1Y: -12.17; control2X: -63.036; control2Y: -11.275; x: -62.886; y: -10.348 }
+ PathCubic { control1X: -62.775; control1Y: -9.662; control2X: -62.672; control2Y: -8.829; x: -63.08; y: -8.124 }
+ PathCubic { control1X: -61.045; control1Y: -5.234; control2X: -62.354; control2Y: -2.583; x: -61.185; y: 0.948 }
+ PathCubic { control1X: -60.978; control1Y: 1.573; control2X: -59.286; control2Y: 3.487; x: -59.749; y: 3.326 }
+ PathCubic { control1X: -62.262; control1Y: 2.455; control2X: -62.374; control2Y: 2.057; x: -62.551; y: 1.304 }
+ PathCubic { control1X: -62.697; control1Y: 0.681; control2X: -63.027; control2Y: -0.696; x: -63.264; y: -1.298 }
+ PathCubic { control1X: -63.328; control1Y: -1.462; control2X: -63.499; control2Y: -3.346; x: -63.577; y: -3.468 }
+ PathCubic { control1X: -65.09; control1Y: -5.85; control2X: -63.732; control2Y: -5.674; x: -65.102; y: -8.032 }
+ PathCubic { control1X: -66.53; control1Y: -8.712; control2X: -67.496; control2Y: -9.816; x: -68.619; y: -10.978 }
+ PathCubic { control1X: -68.817; control1Y: -11.182; control2X: -67.674; control2Y: -11.906; x: -67.855; y: -12.119 }
+ PathCubic { control1X: -68.947; control1Y: -13.408; control2X: -70.1; control2Y: -14.175; x: -69.764; y: -15.668 }
+ PathCubic { control1X: -69.609; control1Y: -16.358; control2X: -69.472; control2Y: -17.415; x: -70.216; y: -18.135 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -73.8; y: -16.4 }
+ PathCubic { control1X: -73.8; control1Y: -16.4; control2X: -73.4; control2Y: -9.6; x: -71; y: -8 }
+ PathCubic { control1X: -68.6; control1Y: -6.4; control2X: -69.8; control2Y: -7.2; x: -73; y: -8.4 }
+ PathCubic { control1X: -76.2; control1Y: -9.6; control2X: -75; control2Y: -10.4; x: -75; y: -10.4 }
+ PathCubic { control1X: -75; control1Y: -10.4; control2X: -77.8; control2Y: -10; x: -75.4; y: -8 }
+ PathCubic { control1X: -73; control1Y: -6; control2X: -69.4; control2Y: -3.6; x: -71; y: -3.6 }
+ PathCubic { control1X: -72.6; control1Y: -3.6; control2X: -80.2; control2Y: -7.6; x: -80.2; y: -10.4 }
+ PathCubic { control1X: -80.2; control1Y: -13.2; control2X: -81.2; control2Y: -17.3; x: -81.2; y: -17.3 }
+ PathCubic { control1X: -81.2; control1Y: -17.3; control2X: -80.1; control2Y: -18.1; x: -75.3; y: -18 }
+ PathCubic { control1X: -75.3; control1Y: -18; control2X: -73.9; control2Y: -17.3; x: -73.8; y: -16.4 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: -74.6; y: 2.2 }
+ PathCubic { control1X: -74.6; control1Y: 2.2; control2X: -83.12; control2Y: -0.591; x: -101.6; y: 2.8 }
+ PathCubic { control1X: -101.6; control1Y: 2.8; control2X: -92.569; control2Y: 0.722; x: -73.8; y: 3 }
+ PathCubic { control1X: -63.5; control1Y: 4.25; control2X: -74.6; control2Y: 2.2; x: -74.6; y: 2.2 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: -72.502; y: 2.129 }
+ PathCubic { control1X: -72.502; control1Y: 2.129; control2X: -80.748; control2Y: -1.389; x: -99.453; y: 0.392 }
+ PathCubic { control1X: -99.453; control1Y: 0.392; control2X: -90.275; control2Y: -0.897; x: -71.774; y: 2.995 }
+ PathCubic { control1X: -61.62; control1Y: 5.131; control2X: -72.502; control2Y: 2.129; x: -72.502; y: 2.129 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: -70.714; y: 2.222 }
+ PathCubic { control1X: -70.714; control1Y: 2.222; control2X: -78.676; control2Y: -1.899; x: -97.461; y: -1.514 }
+ PathCubic { control1X: -97.461; control1Y: -1.514; control2X: -88.213; control2Y: -2.118; x: -70.052; y: 3.14 }
+ PathCubic { control1X: -60.086; control1Y: 6.025; control2X: -70.714; control2Y: 2.222; x: -70.714; y: 2.222 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: -69.444; y: 2.445 }
+ PathCubic { control1X: -69.444; control1Y: 2.445; control2X: -76.268; control2Y: -1.862; x: -93.142; y: -2.96 }
+ PathCubic { control1X: -93.142; control1Y: -2.96; control2X: -84.803; control2Y: -2.79; x: -68.922; y: 3.319 }
+ PathCubic { control1X: -60.206; control1Y: 6.672; control2X: -69.444; control2Y: 2.445; x: -69.444; y: 2.445 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 45.84; y: 12.961 }
+ PathCubic { control1X: 45.84; control1Y: 12.961; control2X: 44.91; control2Y: 13.605; x: 45.124; y: 12.424 }
+ PathCubic { control1X: 45.339; control1Y: 11.243; control2X: 73.547; control2Y: -1.927; x: 77.161; y: -1.677 }
+ PathCubic { control1X: 77.161; control1Y: -1.677; control2X: 46.913; control2Y: 11.529; x: 45.84; y: 12.961 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 42.446; y: 13.6 }
+ PathCubic { control1X: 42.446; control1Y: 13.6; control2X: 41.57; control2Y: 14.315; x: 41.691; y: 13.121 }
+ PathCubic { control1X: 41.812; control1Y: 11.927; control2X: 68.899; control2Y: -3.418; x: 72.521; y: -3.452 }
+ PathCubic { control1X: 72.521; control1Y: -3.452; control2X: 43.404; control2Y: 12.089; x: 42.446; y: 13.6 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 39.16; y: 14.975 }
+ PathCubic { control1X: 39.16; control1Y: 14.975; control2X: 38.332; control2Y: 15.747; x: 38.374; y: 14.547 }
+ PathCubic { control1X: 38.416; control1Y: 13.348; control2X: 58.233; control2Y: -2.149; x: 68.045; y: -4.023 }
+ PathCubic { control1X: 68.045; control1Y: -4.023; control2X: 50.015; control2Y: 4.104; x: 39.16; y: 14.975 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 36.284; y: 16.838 }
+ PathCubic { control1X: 36.284; control1Y: 16.838; control2X: 35.539; control2Y: 17.532; x: 35.577; y: 16.453 }
+ PathCubic { control1X: 35.615; control1Y: 15.373; control2X: 53.449; control2Y: 1.426; x: 62.28; y: -0.26 }
+ PathCubic { control1X: 62.28; control1Y: -0.26; control2X: 46.054; control2Y: 7.054; x: 36.284; y: 16.838 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 4.6; y: 164.801 }
+ PathCubic { control1X: 4.6; control1Y: 164.801; control2X: -10.6; control2Y: 162.401; x: 6.2; y: 160.801 }
+ PathCubic { control1X: 6.2; control1Y: 160.801; control2X: 24.2; control2Y: 158.801; x: 28.2; y: 153.601 }
+ PathCubic { control1X: 28.2; control1Y: 153.601; control2X: 41.8; control2Y: 144.401; x: 44.6; y: 144.001 }
+ PathCubic { control1X: 47.4; control1Y: 143.601; control2X: 63.8; control2Y: 140.001; x: 64.2; y: 137.601 }
+ PathCubic { control1X: 64.6; control1Y: 135.201; control2X: 70.6; control2Y: 132.801; x: 72.2; y: 133.601 }
+ PathCubic { control1X: 73.8; control1Y: 134.401; control2X: 73.8; control2Y: 143.601; x: 71; y: 144.401 }
+ PathCubic { control1X: 68.2; control1Y: 145.201; control2X: 49.4; control2Y: 152.401; x: 43; y: 153.601 }
+ PathCubic { control1X: 36.6; control1Y: 154.801; control2X: 25; control2Y: 162.401; x: 20.2; y: 163.601 }
+ PathCubic { control1X: 15.4; control1Y: 164.801; control2X: 4.6; control2Y: 164.801; x: 4.6; y: 164.801 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 77.6; y: 127.401 }
+ PathCubic { control1X: 77.6; control1Y: 127.401; control2X: 74.6; control2Y: 129.001; x: 73.4; y: 131.601 }
+ PathCubic { control1X: 73.4; control1Y: 131.601; control2X: 67; control2Y: 142.201; x: 52.8; y: 145.401 }
+ PathCubic { control1X: 52.8; control1Y: 145.401; control2X: 29.8; control2Y: 154.401; x: 22; y: 156.401 }
+ PathCubic { control1X: 22; control1Y: 156.401; control2X: 8.6; control2Y: 161.401; x: 1.2; y: 160.601 }
+ PathCubic { control1X: 1.2; control1Y: 160.601; control2X: -5.8; control2Y: 160.801; x: 0.4; y: 162.401 }
+ PathCubic { control1X: 0.4; control1Y: 162.401; control2X: 20.6; control2Y: 160.401; x: 24; y: 158.601 }
+ PathCubic { control1X: 24; control1Y: 158.601; control2X: 39.6; control2Y: 153.401; x: 42.6; y: 150.801 }
+ PathCubic { control1X: 45.6; control1Y: 148.201; control2X: 63.8; control2Y: 143.201; x: 66; y: 141.201 }
+ PathCubic { control1X: 68.2; control1Y: 139.201; control2X: 78; control2Y: 130.801; x: 77.6; y: 127.401 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 18.882; y: 158.911 }
+ PathCubic { control1X: 18.882; control1Y: 158.911; control2X: 24.111; control2Y: 158.685; x: 22.958; y: 160.234 }
+ PathCubic { control1X: 21.805; control1Y: 161.784; control2X: 19.357; control2Y: 160.91; x: 19.357; y: 160.91 }
+ PathLine { x: 18.882; y: 158.911 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 11.68; y: 160.263 }
+ PathCubic { control1X: 11.68; control1Y: 160.263; control2X: 16.908; control2Y: 160.037; x: 15.756; y: 161.586 }
+ PathCubic { control1X: 14.603; control1Y: 163.136; control2X: 12.155; control2Y: 162.263; x: 12.155; y: 162.263 }
+ PathLine { x: 11.68; y: 160.263 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 1.251; y: 161.511 }
+ PathCubic { control1X: 1.251; control1Y: 161.511; control2X: 6.48; control2Y: 161.284; x: 5.327; y: 162.834 }
+ PathCubic { control1X: 4.174; control1Y: 164.383; control2X: 1.726; control2Y: 163.51; x: 1.726; y: 163.51 }
+ PathLine { x: 1.251; y: 161.511 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -6.383; y: 162.055 }
+ PathCubic { control1X: -6.383; control1Y: 162.055; control2X: -1.154; control2Y: 161.829; x: -2.307; y: 163.378 }
+ PathCubic { control1X: -3.46; control1Y: 164.928; control2X: -5.908; control2Y: 164.054; x: -5.908; y: 164.054 }
+ PathLine { x: -6.383; y: 162.055 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 35.415; y: 151.513 }
+ PathCubic { control1X: 35.415; control1Y: 151.513; control2X: 42.375; control2Y: 151.212; x: 40.84; y: 153.274 }
+ PathCubic { control1X: 39.306; control1Y: 155.336; control2X: 36.047; control2Y: 154.174; x: 36.047; y: 154.174 }
+ PathLine { x: 35.415; y: 151.513 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 45.73; y: 147.088 }
+ PathCubic { control1X: 45.73; control1Y: 147.088; control2X: 51.689; control2Y: 143.787; x: 51.155; y: 148.849 }
+ PathCubic { control1X: 50.885; control1Y: 151.405; control2X: 46.362; control2Y: 149.749; x: 46.362; y: 149.749 }
+ PathLine { x: 45.73; y: 147.088 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 54.862; y: 144.274 }
+ PathCubic { control1X: 54.862; control1Y: 144.274; control2X: 62.021; control2Y: 140.573; x: 60.287; y: 146.035 }
+ PathCubic { control1X: 59.509; control1Y: 148.485; control2X: 55.493; control2Y: 146.935; x: 55.493; y: 146.935 }
+ PathLine { x: 54.862; y: 144.274 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 64.376; y: 139.449 }
+ PathCubic { control1X: 64.376; control1Y: 139.449; control2X: 68.735; control2Y: 134.548; x: 69.801; y: 141.21 }
+ PathCubic { control1X: 70.207; control1Y: 143.748; control2X: 65.008; control2Y: 142.11; x: 65.008; y: 142.11 }
+ PathLine { x: 64.376; y: 139.449 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 26.834; y: 155.997 }
+ PathCubic { control1X: 26.834; control1Y: 155.997; control2X: 32.062; control2Y: 155.77; x: 30.91; y: 157.32 }
+ PathCubic { control1X: 29.757; control1Y: 158.869; control2X: 27.308; control2Y: 157.996; x: 27.308; y: 157.996 }
+ PathLine { x: 26.834; y: 155.997 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 62.434; y: 34.603 }
+ PathCubic { control1X: 62.434; control1Y: 34.603; control2X: 61.708; control2Y: 35.268; x: 61.707; y: 34.197 }
+ PathCubic { control1X: 61.707; control1Y: 33.127; control2X: 79.191; control2Y: 19.863; x: 88.034; y: 18.479 }
+ PathCubic { control1X: 88.034; control1Y: 18.479; control2X: 71.935; control2Y: 25.208; x: 62.434; y: 34.603 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: 65.4; y: 98.4 }
+ PathCubic { control1X: 65.4; control1Y: 98.4; control2X: 87.401; control2Y: 120.801; x: 96.601; y: 124.401 }
+ PathCubic { control1X: 96.601; control1Y: 124.401; control2X: 105.801; control2Y: 135.601; x: 101.801; y: 161.601 }
+ PathCubic { control1X: 101.801; control1Y: 161.601; control2X: 98.601; control2Y: 169.201; x: 95.401; y: 148.401 }
+ PathCubic { control1X: 95.401; control1Y: 148.401; control2X: 98.601; control2Y: 123.201; x: 87.401; y: 139.201 }
+ PathCubic { control1X: 87.401; control1Y: 139.201; control2X: 79; control2Y: 129.301; x: 85.4; y: 129.601 }
+ PathCubic { control1X: 85.4; control1Y: 129.601; control2X: 88.601; control2Y: 131.601; x: 89.001; y: 130.001 }
+ PathCubic { control1X: 89.401; control1Y: 128.401; control2X: 81.4; control2Y: 114.801; x: 64.2; y: 100.4 }
+ PathCubic { control1X: 47; control1Y: 86; control2X: 65.4; control2Y: 98.4; x: 65.4; y: 98.4 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 7; y: 137.201 }
+ PathCubic { control1X: 7; control1Y: 137.201; control2X: 6.8; control2Y: 135.401; x: 8.6; y: 136.201 }
+ PathCubic { control1X: 10.4; control1Y: 137.001; control2X: 104.601; control2Y: 143.201; x: 136.201; y: 167.201 }
+ PathCubic { control1X: 136.201; control1Y: 167.201; control2X: 91.001; control2Y: 144.001; x: 7; y: 137.201 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 17.4; y: 132.801 }
+ PathCubic { control1X: 17.4; control1Y: 132.801; control2X: 17.2; control2Y: 131.001; x: 19; y: 131.801 }
+ PathCubic { control1X: 20.8; control1Y: 132.601; control2X: 157.401; control2Y: 131.601; x: 181.001; y: 164.001 }
+ PathCubic { control1X: 181.001; control1Y: 164.001; control2X: 159.001; control2Y: 138.801; x: 17.4; y: 132.801 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 29; y: 128.801 }
+ PathCubic { control1X: 29; control1Y: 128.801; control2X: 28.8; control2Y: 127.001; x: 30.6; y: 127.801 }
+ PathCubic { control1X: 32.4; control1Y: 128.601; control2X: 205.801; control2Y: 115.601; x: 229.401; y: 148.001 }
+ PathCubic { control1X: 229.401; control1Y: 148.001; control2X: 219.801; control2Y: 122.401; x: 29; y: 128.801 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 39; y: 124.001 }
+ PathCubic { control1X: 39; control1Y: 124.001; control2X: 38.8; control2Y: 122.201; x: 40.6; y: 123.001 }
+ PathCubic { control1X: 42.4; control1Y: 123.801; control2X: 164.601; control2Y: 85.2; x: 188.201; y: 117.601 }
+ PathCubic { control1X: 188.201; control1Y: 117.601; control2X: 174.801; control2Y: 93; x: 39; y: 124.001 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: -19; y: 146.801 }
+ PathCubic { control1X: -19; control1Y: 146.801; control2X: -19.2; control2Y: 145.001; x: -17.4; y: 145.801 }
+ PathCubic { control1X: -15.6; control1Y: 146.601; control2X: 2.2; control2Y: 148.801; x: 4.2; y: 187.601 }
+ PathCubic { control1X: 4.2; control1Y: 187.601; control2X: -3; control2Y: 145.601; x: -19; y: 146.801 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: -27.8; y: 148.401 }
+ PathCubic { control1X: -27.8; control1Y: 148.401; control2X: -28; control2Y: 146.601; x: -26.2; y: 147.401 }
+ PathCubic { control1X: -24.4; control1Y: 148.201; control2X: -10.2; control2Y: 143.601; x: -13; y: 182.401 }
+ PathCubic { control1X: -13; control1Y: 182.401; control2X: -11.8; control2Y: 147.201; x: -27.8; y: 148.401 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: -35.8; y: 148.801 }
+ PathCubic { control1X: -35.8; control1Y: 148.801; control2X: -36; control2Y: 147.001; x: -34.2; y: 147.801 }
+ PathCubic { control1X: -32.4; control1Y: 148.601; control2X: -17; control2Y: 149.201; x: -29.4; y: 171.601 }
+ PathCubic { control1X: -29.4; control1Y: 171.601; control2X: -19.8; control2Y: 147.601; x: -35.8; y: 148.801 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 11.526; y: 104.465 }
+ PathCubic { control1X: 11.526; control1Y: 104.465; control2X: 11.082; control2Y: 106.464; x: 12.631; y: 105.247 }
+ PathCubic { control1X: 28.699; control1Y: 92.622; control2X: 61.141; control2Y: 33.72; x: 116.826; y: 28.086 }
+ PathCubic { control1X: 116.826; control1Y: 28.086; control2X: 78.518; control2Y: 15.976; x: 11.526; y: 104.465 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 22.726; y: 102.665 }
+ PathCubic { control1X: 22.726; control1Y: 102.665; control2X: 21.363; control2Y: 101.472; x: 23.231; y: 100.847 }
+ PathCubic { control1X: 25.099; control1Y: 100.222; control2X: 137.541; control2Y: 27.72; x: 176.826; y: 35.686 }
+ PathCubic { control1X: 176.826; control1Y: 35.686; control2X: 149.719; control2Y: 28.176; x: 22.726; y: 102.665 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 1.885; y: 108.767 }
+ PathCubic { control1X: 1.885; control1Y: 108.767; control2X: 1.376; control2Y: 110.366; x: 3.087; y: 109.39 }
+ PathCubic { control1X: 12.062; control1Y: 104.27; control2X: 15.677; control2Y: 47.059; x: 59.254; y: 45.804 }
+ PathCubic { control1X: 59.254; control1Y: 45.804; control2X: 26.843; control2Y: 31.09; x: 1.885; y: 108.767 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: -18.038; y: 119.793 }
+ PathCubic { control1X: -18.038; control1Y: 119.793; control2X: -19.115; control2Y: 121.079; x: -17.162; y: 120.825 }
+ PathCubic { control1X: -6.916; control1Y: 119.493; control2X: 14.489; control2Y: 78.222; x: 58.928; y: 83.301 }
+ PathCubic { control1X: 58.928; control1Y: 83.301; control2X: 26.962; control2Y: 68.955; x: -18.038; y: 119.793 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: -6.8; y: 113.667 }
+ PathCubic { control1X: -6.8; control1Y: 113.667; control2X: -7.611; control2Y: 115.136; x: -5.742; y: 114.511 }
+ PathCubic { control1X: 4.057; control1Y: 111.237; control2X: 17.141; control2Y: 66.625; x: 61.729; y: 63.078 }
+ PathCubic { control1X: 61.729; control1Y: 63.078; control2X: 27.603; control2Y: 55.135; x: -6.8; y: 113.667 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: -25.078; y: 124.912 }
+ PathCubic { control1X: -25.078; control1Y: 124.912; control2X: -25.951; control2Y: 125.954; x: -24.369; y: 125.748 }
+ PathCubic { control1X: -16.07; control1Y: 124.669; control2X: 1.268; control2Y: 91.24; x: 37.264; y: 95.354 }
+ PathCubic { control1X: 37.264; control1Y: 95.354; control2X: 11.371; control2Y: 83.734; x: -25.078; y: 124.912 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: -32.677; y: 130.821 }
+ PathCubic { control1X: -32.677; control1Y: 130.821; control2X: -33.682; control2Y: 131.866; x: -32.091; y: 131.748 }
+ PathCubic { control1X: -27.923; control1Y: 131.439; control2X: 2.715; control2Y: 98.36; x: 21.183; y: 113.862 }
+ PathCubic { control1X: 21.183; control1Y: 113.862; control2X: 9.168; control2Y: 95.139; x: -32.677; y: 130.821 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 36.855; y: 98.898 }
+ PathCubic { control1X: 36.855; control1Y: 98.898; control2X: 35.654; control2Y: 97.543; x: 37.586; y: 97.158 }
+ PathCubic { control1X: 39.518; control1Y: 96.774; control2X: 160.221; control2Y: 39.061; x: 198.184; y: 51.927 }
+ PathCubic { control1X: 198.184; control1Y: 51.927; control2X: 172.243; control2Y: 41.053; x: 36.855; y: 98.898 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 3.4; y: 163.201 }
+ PathCubic { control1X: 3.4; control1Y: 163.201; control2X: 3.2; control2Y: 161.401; x: 5; y: 162.201 }
+ PathCubic { control1X: 6.8; control1Y: 163.001; control2X: 22.2; control2Y: 163.601; x: 9.8; y: 186.001 }
+ PathCubic { control1X: 9.8; control1Y: 186.001; control2X: 19.4; control2Y: 162.001; x: 3.4; y: 163.201 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 13.8; y: 161.601 }
+ PathCubic { control1X: 13.8; control1Y: 161.601; control2X: 13.6; control2Y: 159.801; x: 15.4; y: 160.601 }
+ PathCubic { control1X: 17.2; control1Y: 161.401; control2X: 35; control2Y: 163.601; x: 37; y: 202.401 }
+ PathCubic { control1X: 37; control1Y: 202.401; control2X: 29.8; control2Y: 160.401; x: 13.8; y: 161.601 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 20.6; y: 160.001 }
+ PathCubic { control1X: 20.6; control1Y: 160.001; control2X: 20.4; control2Y: 158.201; x: 22.2; y: 159.001 }
+ PathCubic { control1X: 24; control1Y: 159.801; control2X: 48.6; control2Y: 163.201; x: 72.2; y: 195.601 }
+ PathCubic { control1X: 72.2; control1Y: 195.601; control2X: 36.6; control2Y: 158.801; x: 20.6; y: 160.001 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 28.225; y: 157.972 }
+ PathCubic { control1X: 28.225; control1Y: 157.972; control2X: 27.788; control2Y: 156.214; x: 29.678; y: 156.768 }
+ PathCubic { control1X: 31.568; control1Y: 157.322; control2X: 52.002; control2Y: 155.423; x: 90.099; y: 189.599 }
+ PathCubic { control1X: 90.099; control1Y: 189.599; control2X: 43.924; control2Y: 154.656; x: 28.225; y: 157.972 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 38.625; y: 153.572 }
+ PathCubic { control1X: 38.625; control1Y: 153.572; control2X: 38.188; control2Y: 151.814; x: 40.078; y: 152.368 }
+ PathCubic { control1X: 41.968; control1Y: 152.922; control2X: 76.802; control2Y: 157.423; x: 128.499; y: 192.399 }
+ PathCubic { control1X: 128.499; control1Y: 192.399; control2X: 54.324; control2Y: 150.256; x: 38.625; y: 153.572 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: -1.8; y: 142.001 }
+ PathCubic { control1X: -1.8; control1Y: 142.001; control2X: -2; control2Y: 140.201; x: -0.2; y: 141.001 }
+ PathCubic { control1X: 1.6; control1Y: 141.801; control2X: 55; control2Y: 144.401; x: 85.4; y: 171.201 }
+ PathCubic { control1X: 85.4; control1Y: 171.201; control2X: 50.499; control2Y: 146.426; x: -1.8; y: 142.001 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: -11.8; y: 146.001 }
+ PathCubic { control1X: -11.8; control1Y: 146.001; control2X: -12; control2Y: 144.201; x: -10.2; y: 145.001 }
+ PathCubic { control1X: -8.4; control1Y: 145.801; control2X: 16.2; control2Y: 149.201; x: 39.8; y: 181.601 }
+ PathCubic { control1X: 39.8; control1Y: 181.601; control2X: 4.2; control2Y: 144.801; x: -11.8; y: 146.001 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 49.503; y: 148.962 }
+ PathCubic { control1X: 49.503; control1Y: 148.962; control2X: 48.938; control2Y: 147.241; x: 50.864; y: 147.655 }
+ PathCubic { control1X: 52.79; control1Y: 148.068; control2X: 87.86; control2Y: 150.004; x: 141.981; y: 181.098 }
+ PathCubic { control1X: 141.981; control1Y: 181.098; control2X: 64.317; control2Y: 146.704; x: 49.503; y: 148.962 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 57.903; y: 146.562 }
+ PathCubic { control1X: 57.903; control1Y: 146.562; control2X: 57.338; control2Y: 144.841; x: 59.264; y: 145.255 }
+ PathCubic { control1X: 61.19; control1Y: 145.668; control2X: 96.26; control2Y: 147.604; x: 150.381; y: 178.698 }
+ PathCubic { control1X: 150.381; control1Y: 178.698; control2X: 73.317; control2Y: 143.904; x: 57.903; y: 146.562 }
+ }
+
+ ShapePath {
+ fillColor: "#ffffff"
+ strokeColor: "#000000"
+ strokeWidth: 0.1
+ PathMove { x: 67.503; y: 141.562 }
+ PathCubic { control1X: 67.503; control1Y: 141.562; control2X: 66.938; control2Y: 139.841; x: 68.864; y: 140.255 }
+ PathCubic { control1X: 70.79; control1Y: 140.668; control2X: 113.86; control2Y: 145.004; x: 203.582; y: 179.298 }
+ PathCubic { control1X: 203.582; control1Y: 179.298; control2X: 82.917; control2Y: 138.904; x: 67.503; y: 141.562 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -43.8; y: 148.401 }
+ PathCubic { control1X: -43.8; control1Y: 148.401; control2X: -38.6; control2Y: 148.001; x: -39.8; y: 149.601 }
+ PathCubic { control1X: -41; control1Y: 151.201; control2X: -43.4; control2Y: 150.401; x: -43.4; y: 150.401 }
+ PathLine { x: -43.8; y: 148.401 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -13; y: 162.401 }
+ PathCubic { control1X: -13; control1Y: 162.401; control2X: -7.8; control2Y: 162.001; x: -9; y: 163.601 }
+ PathCubic { control1X: -10.2; control1Y: 165.201; control2X: -12.6; control2Y: 164.401; x: -12.6; y: 164.401 }
+ PathLine { x: -13; y: 162.401 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -21.8; y: 162.001 }
+ PathCubic { control1X: -21.8; control1Y: 162.001; control2X: -16.6; control2Y: 161.601; x: -17.8; y: 163.201 }
+ PathCubic { control1X: -19; control1Y: 164.801; control2X: -21.4; control2Y: 164.001; x: -21.4; y: 164.001 }
+ PathLine { x: -21.8; y: 162.001 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -117.169; y: 150.182 }
+ PathCubic { control1X: -117.169; control1Y: 150.182; control2X: -112.124; control2Y: 151.505; x: -113.782; y: 152.624 }
+ PathCubic { control1X: -115.439; control1Y: 153.744; control2X: -117.446; control2Y: 152.202; x: -117.446; y: 152.202 }
+ PathLine { x: -117.169; y: 150.182 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -115.169; y: 140.582 }
+ PathCubic { control1X: -115.169; control1Y: 140.582; control2X: -110.124; control2Y: 141.905; x: -111.782; y: 143.024 }
+ PathCubic { control1X: -113.439; control1Y: 144.144; control2X: -115.446; control2Y: 142.602; x: -115.446; y: 142.602 }
+ PathLine { x: -115.169; y: 140.582 }
+ }
+
+ ShapePath {
+ fillColor: "#000000"
+ strokeWidth: -1
+ PathMove { x: -122.369; y: 136.182 }
+ PathCubic { control1X: -122.369; control1Y: 136.182; control2X: -117.324; control2Y: 137.505; x: -118.982; y: 138.624 }
+ PathCubic { control1X: -120.639; control1Y: 139.744; control2X: -122.646; control2Y: 138.202; x: -122.646; y: 138.202 }
+ PathLine { x: -122.369; y: 136.182 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -42.6; y: 211.201 }
+ PathCubic { control1X: -42.6; control1Y: 211.201; control2X: -44.2; control2Y: 211.201; x: -48.2; y: 213.201 }
+ PathCubic { control1X: -50.2; control1Y: 213.201; control2X: -61.4; control2Y: 216.801; x: -67; y: 226.801 }
+ PathCubic { control1X: -67; control1Y: 226.801; control2X: -54.6; control2Y: 217.201; x: -42.6; y: 211.201 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 45.116; y: 303.847 }
+ PathCubic { control1X: 45.257; control1Y: 304.105; control2X: 45.312; control2Y: 304.525; x: 45.604; y: 304.542 }
+ PathCubic { control1X: 46.262; control1Y: 304.582; control2X: 47.495; control2Y: 304.883; x: 47.37; y: 304.247 }
+ PathCubic { control1X: 46.522; control1Y: 299.941; control2X: 45.648; control2Y: 295.004; x: 41.515; y: 293.197 }
+ PathCubic { control1X: 40.876; control1Y: 292.918; control2X: 39.434; control2Y: 293.331; x: 39.36; y: 294.215 }
+ PathCubic { control1X: 39.233; control1Y: 295.739; control2X: 39.116; control2Y: 297.088; x: 39.425; y: 298.554 }
+ PathCubic { control1X: 39.725; control1Y: 299.975; control2X: 41.883; control2Y: 299.985; x: 42.8; y: 298.601 }
+ PathCubic { control1X: 43.736; control1Y: 300.273; control2X: 44.168; control2Y: 302.116; x: 45.116; y: 303.847 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 34.038; y: 308.581 }
+ PathCubic { control1X: 34.786; control1Y: 309.994; control2X: 34.659; control2Y: 311.853; x: 36.074; y: 312.416 }
+ PathCubic { control1X: 36.814; control1Y: 312.71; control2X: 38.664; control2Y: 311.735; x: 38.246; y: 310.661 }
+ PathCubic { control1X: 37.444; control1Y: 308.6; control2X: 37.056; control2Y: 306.361; x: 35.667; y: 304.55 }
+ PathCubic { control1X: 35.467; control1Y: 304.288; control2X: 35.707; control2Y: 303.755; x: 35.547; y: 303.427 }
+ PathCubic { control1X: 34.953; control1Y: 302.207; control2X: 33.808; control2Y: 301.472; x: 32.4; y: 301.801 }
+ PathCubic { control1X: 31.285; control1Y: 304.004; control2X: 32.433; control2Y: 306.133; x: 33.955; y: 307.842 }
+ PathCubic { control1X: 34.091; control1Y: 307.994; control2X: 33.925; control2Y: 308.37; x: 34.038; y: 308.581 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -5.564; y: 303.391 }
+ PathCubic { control1X: -5.672; control1Y: 303.014; control2X: -5.71; control2Y: 302.551; x: -5.545; y: 302.23 }
+ PathCubic { control1X: -5.014; control1Y: 301.197; control2X: -4.221; control2Y: 300.075; x: -4.558; y: 299.053 }
+ PathCubic { control1X: -4.906; control1Y: 297.997; control2X: -6.022; control2Y: 298.179; x: -6.672; y: 298.748 }
+ PathCubic { control1X: -7.807; control1Y: 299.742; control2X: -7.856; control2Y: 301.568; x: -8.547; y: 302.927 }
+ PathCubic { control1X: -8.743; control1Y: 303.313; control2X: -8.692; control2Y: 303.886; x: -9.133; y: 304.277 }
+ PathCubic { control1X: -9.607; control1Y: 304.698; control2X: -10.047; control2Y: 306.222; x: -9.951; y: 306.793 }
+ PathCubic { control1X: -9.898; control1Y: 307.106; control2X: -10.081; control2Y: 317.014; x: -9.859; y: 316.751 }
+ PathCubic { control1X: -9.24; control1Y: 316.018; control2X: -6.19; control2Y: 306.284; x: -6.121; y: 305.392 }
+ PathCubic { control1X: -6.064; control1Y: 304.661; control2X: -5.332; control2Y: 304.196; x: -5.564; y: 303.391 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -31.202; y: 296.599 }
+ PathCubic { control1X: -28.568; control1Y: 294.1; control2X: -25.778; control2Y: 291.139; x: -26.22; y: 287.427 }
+ PathCubic { control1X: -26.336; control1Y: 286.451; control2X: -28.111; control2Y: 286.978; x: -28.298; y: 287.824 }
+ PathCubic { control1X: -29.1; control1Y: 291.449; control2X: -31.139; control2Y: 294.11; x: -33.707; y: 296.502 }
+ PathCubic { control1X: -35.903; control1Y: 298.549; control2X: -37.765; control2Y: 304.893; x: -38; y: 305.401 }
+ PathCubic { control1X: -34.303; control1Y: 300.145; control2X: -32.046; control2Y: 297.399; x: -31.202; y: 296.599 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -44.776; y: 290.635 }
+ PathCubic { control1X: -44.253; control1Y: 290.265; control2X: -44.555; control2Y: 289.774; x: -44.338; y: 289.442 }
+ PathCubic { control1X: -43.385; control1Y: 287.984; control2X: -42.084; control2Y: 286.738; x: -42.066; y: 285 }
+ PathCubic { control1X: -42.063; control1Y: 284.723; control2X: -42.441; control2Y: 284.414; x: -42.776; y: 284.638 }
+ PathCubic { control1X: -43.053; control1Y: 284.822; control2X: -43.395; control2Y: 284.952; x: -43.503; y: 285.082 }
+ PathCubic { control1X: -45.533; control1Y: 287.531; control2X: -46.933; control2Y: 290.202; x: -48.376; y: 293.014 }
+ PathCubic { control1X: -48.559; control1Y: 293.371; control2X: -49.703; control2Y: 297.862; x: -49.39; y: 297.973 }
+ PathCubic { control1X: -49.151; control1Y: 298.058; control2X: -47.431; control2Y: 293.877; x: -47.221; y: 293.763 }
+ PathCubic { control1X: -45.958; control1Y: 293.077; control2X: -45.946; control2Y: 291.462; x: -44.776; y: 290.635 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -28.043; y: 310.179 }
+ PathCubic { control1X: -27.599; control1Y: 309.31; control2X: -26.023; control2Y: 308.108; x: -26.136; y: 307.219 }
+ PathCubic { control1X: -26.254; control1Y: 306.291; control2X: -25.786; control2Y: 304.848; x: -26.698; y: 305.536 }
+ PathCubic { control1X: -27.955; control1Y: 306.484; control2X: -31.404; control2Y: 307.833; x: -31.674; y: 313.641 }
+ PathCubic { control1X: -31.7; control1Y: 314.212; control2X: -28.726; control2Y: 311.519; x: -28.043; y: 310.179 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -13.6; y: 293.001 }
+ PathCubic { control1X: -13.2; control1Y: 292.333; control2X: -12.492; control2Y: 292.806; x: -12.033; y: 292.543 }
+ PathCubic { control1X: -11.385; control1Y: 292.171; control2X: -10.774; control2Y: 291.613; x: -10.482; y: 290.964 }
+ PathCubic { control1X: -9.512; control1Y: 288.815; control2X: -7.743; control2Y: 286.995; x: -7.6; y: 284.601 }
+ PathCubic { control1X: -9.091; control1Y: 283.196; control2X: -9.77; control2Y: 285.236; x: -10.4; y: 286.201 }
+ PathCubic { control1X: -11.723; control1Y: 284.554; control2X: -12.722; control2Y: 286.428; x: -14.022; y: 286.947 }
+ PathCubic { control1X: -14.092; control1Y: 286.975; control2X: -14.305; control2Y: 286.628; x: -14.38; y: 286.655 }
+ PathCubic { control1X: -15.557; control1Y: 287.095; control2X: -16.237; control2Y: 288.176; x: -17.235; y: 288.957 }
+ PathCubic { control1X: -17.406; control1Y: 289.091; control2X: -17.811; control2Y: 288.911; x: -17.958; y: 289.047 }
+ PathCubic { control1X: -18.61; control1Y: 289.65; control2X: -19.583; control2Y: 289.975; x: -19.863; y: 290.657 }
+ PathCubic { control1X: -20.973; control1Y: 293.364; control2X: -24.113; control2Y: 295.459; x: -26; y: 303.001 }
+ PathCubic { control1X: -25.619; control1Y: 303.91; control2X: -21.488; control2Y: 296.359; x: -21.001; y: 295.661 }
+ PathCubic { control1X: -20.165; control1Y: 294.465; control2X: -20.047; control2Y: 297.322; x: -18.771; y: 296.656 }
+ PathCubic { control1X: -18.72; control1Y: 296.629; control2X: -18.534; control2Y: 296.867; x: -18.4; y: 297.001 }
+ PathCubic { control1X: -18.206; control1Y: 296.721; control2X: -17.988; control2Y: 296.492; x: -17.6; y: 296.601 }
+ PathCubic { control1X: -17.6; control1Y: 296.201; control2X: -17.734; control2Y: 295.645; x: -17.533; y: 295.486 }
+ PathCubic { control1X: -16.296; control1Y: 294.509; control2X: -16.38; control2Y: 293.441; x: -15.6; y: 292.201 }
+ PathCubic { control1X: -15.142; control1Y: 292.99; control2X: -14.081; control2Y: 292.271; x: -13.6; y: 293.001 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 46.2; y: 347.401 }
+ PathCubic { control1X: 46.2; control1Y: 347.401; control2X: 53.6; control2Y: 327.001; x: 49.2; y: 315.801 }
+ PathCubic { control1X: 49.2; control1Y: 315.801; control2X: 60.6; control2Y: 337.401; x: 56; y: 348.601 }
+ PathCubic { control1X: 56; control1Y: 348.601; control2X: 55.6; control2Y: 338.201; x: 51.6; y: 333.201 }
+ PathCubic { control1X: 51.6; control1Y: 333.201; control2X: 47.6; control2Y: 346.001; x: 46.2; y: 347.401 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 31.4; y: 344.801 }
+ PathCubic { control1X: 31.4; control1Y: 344.801; control2X: 36.8; control2Y: 336.001; x: 28.8; y: 317.601 }
+ PathCubic { control1X: 28.8; control1Y: 317.601; control2X: 28; control2Y: 338.001; x: 21.2; y: 349.001 }
+ PathCubic { control1X: 21.2; control1Y: 349.001; control2X: 35.4; control2Y: 328.801; x: 31.4; y: 344.801 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 21.4; y: 342.801 }
+ PathCubic { control1X: 21.4; control1Y: 342.801; control2X: 21.2; control2Y: 322.801; x: 21.6; y: 319.801 }
+ PathCubic { control1X: 21.6; control1Y: 319.801; control2X: 17.8; control2Y: 336.401; x: 7.6; y: 346.001 }
+ PathCubic { control1X: 7.6; control1Y: 346.001; control2X: 22; control2Y: 334.001; x: 21.4; y: 342.801 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 11.8; y: 310.801 }
+ PathCubic { control1X: 11.8; control1Y: 310.801; control2X: 17.8; control2Y: 324.401; x: 7.8; y: 342.801 }
+ PathCubic { control1X: 7.8; control1Y: 342.801; control2X: 14.2; control2Y: 330.601; x: 9.4; y: 323.601 }
+ PathCubic { control1X: 9.4; control1Y: 323.601; control2X: 12; control2Y: 320.201; x: 11.8; y: 310.801 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -7.4; y: 342.401 }
+ PathCubic { control1X: -7.4; control1Y: 342.401; control2X: -8.4; control2Y: 326.801; x: -6.6; y: 324.601 }
+ PathCubic { control1X: -6.6; control1Y: 324.601; control2X: -6.4; control2Y: 318.201; x: -6.8; y: 317.201 }
+ PathCubic { control1X: -6.8; control1Y: 317.201; control2X: -2.8; control2Y: 311.001; x: -2.6; y: 318.401 }
+ PathCubic { control1X: -2.6; control1Y: 318.401; control2X: -1.2; control2Y: 326.201; x: 1.6; y: 330.801 }
+ PathCubic { control1X: 1.6; control1Y: 330.801; control2X: 5.2; control2Y: 336.201; x: 5; y: 342.601 }
+ PathCubic { control1X: 5; control1Y: 342.601; control2X: -5; control2Y: 312.401; x: -7.4; y: 342.401 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -11; y: 314.801 }
+ PathCubic { control1X: -11; control1Y: 314.801; control2X: -17.6; control2Y: 325.601; x: -19.4; y: 344.601 }
+ PathCubic { control1X: -19.4; control1Y: 344.601; control2X: -20.8; control2Y: 338.401; x: -17; y: 324.001 }
+ PathCubic { control1X: -17; control1Y: 324.001; control2X: -12.8; control2Y: 308.601; x: -11; y: 314.801 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -32.8; y: 334.601 }
+ PathCubic { control1X: -32.8; control1Y: 334.601; control2X: -27.8; control2Y: 329.201; x: -26.4; y: 324.201 }
+ PathCubic { control1X: -26.4; control1Y: 324.201; control2X: -22.8; control2Y: 308.401; x: -29.2; y: 317.001 }
+ PathCubic { control1X: -29.2; control1Y: 317.001; control2X: -29; control2Y: 325.001; x: -37.2; y: 332.401 }
+ PathCubic { control1X: -37.2; control1Y: 332.401; control2X: -32.4; control2Y: 330.001; x: -32.8; y: 334.601 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -38.6; y: 329.601 }
+ PathCubic { control1X: -38.6; control1Y: 329.601; control2X: -35.2; control2Y: 312.201; x: -34.4; y: 311.401 }
+ PathCubic { control1X: -34.4; control1Y: 311.401; control2X: -32.6; control2Y: 308.001; x: -35.4; y: 311.201 }
+ PathCubic { control1X: -35.4; control1Y: 311.201; control2X: -44.2; control2Y: 330.401; x: -48.2; y: 337.001 }
+ PathCubic { control1X: -48.2; control1Y: 337.001; control2X: -40.2; control2Y: 327.801; x: -38.6; y: 329.601 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -44.4; y: 313.001 }
+ PathCubic { control1X: -44.4; control1Y: 313.001; control2X: -32.8; control2Y: 290.601; x: -54.6; y: 316.401 }
+ PathCubic { control1X: -54.6; control1Y: 316.401; control2X: -43.6; control2Y: 306.601; x: -44.4; y: 313.001 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: -59.8; y: 298.401 }
+ PathCubic { control1X: -59.8; control1Y: 298.401; control2X: -55; control2Y: 279.601; x: -52.4; y: 279.801 }
+ PathCubic { control1X: -52.4; control1Y: 279.801; control2X: -44.2; control2Y: 270.801; x: -50.8; y: 281.401 }
+ PathCubic { control1X: -50.8; control1Y: 281.401; control2X: -56.8; control2Y: 291.001; x: -56.2; y: 300.801 }
+ PathCubic { control1X: -56.2; control1Y: 300.801; control2X: -56.8; control2Y: 291.201; x: -59.8; y: 298.401 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 270.5; y: 287 }
+ PathCubic { control1X: 270.5; control1Y: 287; control2X: 258.5; control2Y: 277; x: 256; y: 273.5 }
+ PathCubic { control1X: 256; control1Y: 273.5; control2X: 269.5; control2Y: 292; x: 269.5; y: 299 }
+ PathCubic { control1X: 269.5; control1Y: 299; control2X: 272; control2Y: 291.5; x: 270.5; y: 287 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 276; y: 265 }
+ PathCubic { control1X: 276; control1Y: 265; control2X: 255; control2Y: 250; x: 251.5; y: 242.5 }
+ PathCubic { control1X: 251.5; control1Y: 242.5; control2X: 278; control2Y: 272; x: 278; y: 276.5 }
+ PathCubic { control1X: 278; control1Y: 276.5; control2X: 278.5; control2Y: 267.5; x: 276; y: 265 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 293; y: 111 }
+ PathCubic { control1X: 293; control1Y: 111; control2X: 281; control2Y: 103; x: 279.5; y: 105 }
+ PathCubic { control1X: 279.5; control1Y: 105; control2X: 290; control2Y: 111.5; x: 292.5; y: 120 }
+ PathCubic { control1X: 292.5; control1Y: 120; control2X: 291; control2Y: 111; x: 293; y: 111 }
+ }
+
+ ShapePath {
+ fillColor: "#cccccc"
+ strokeWidth: -1
+ PathMove { x: 301.5; y: 191.5 }
+ PathLine { x: 284; y: 179.5 }
+ PathCubic { control1X: 284; control1Y: 179.5; control2X: 303; control2Y: 196.5; x: 303.5; y: 200.5 }
+ PathLine { x: 301.5; y: 191.5 }
+ }
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "#000000"
+ strokeWidth: 1
+ PathMove { x: -89.25; y: 169 }
+ PathLine { x: -67.25; y: 173.75 }
+ }
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "#000000"
+ strokeWidth: 1
+ PathMove { x: -39; y: 331 }
+ PathCubic { control1X: -39; control1Y: 331; control2X: -39.5; control2Y: 327.5; x: -48.5; y: 338 }
+ }
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "#000000"
+ strokeWidth: 1
+ PathMove { x: -33.5; y: 336 }
+ PathCubic { control1X: -33.5; control1Y: 336; control2X: -31.5; control2Y: 329.5; x: -38; y: 334 }
+ }
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: "#000000"
+ strokeWidth: 1
+ PathMove { x: 20.5; y: 344.5 }
+ PathCubic { control1X: 20.5; control1Y: 344.5; control2X: 22; control2Y: 333.5; x: 10.5; y: 346.5 }
+ }
+
+ Shape {
+ x: -184; y: -144; width: parent.width; height: parent.height
+ opacity: tapHandler.pressed ? 1 : 0
+ containsMode: Shape.FillContains
+
+ TapHandler {
+ id: tapHandler
+ enabled: highlightOnTap
+ }
+
+ ShapePath {
+ strokeColor: "red"
+ strokeWidth: 4
+ fillColor: "transparent"
+ PathSvg { path: `m 325.03711,0.5
+ c -26.61408,6.4494547 -49.95197,2.1018066 -76.21132,1.0771669
+ -22.26577,7.6817151 -47.96405,9.3627181 -65.67832,25.8497861
+ -15.74718,12.80008 -41.1564,19.605644 -45.74903,40.600391
+ -12.46933,17.76181 -25.36105,35.720146 -29.20117,57.999996
+ -18.709864,3.10961 -16.347355,30.83801 -22.385143,46.675
+ -6.848711,11.2677 11.07278,24.69174 -8.514666,27.97383
+ -10.266901,5.61543 -12.859313,28.96588 -13.732346,5.78143
+ 0.940083,-11.53398 -13.486195,-38.30626 -16.81701,-34.20231
+ 14.608079,7.8234 21.299281,50.52979 11.380052,48.14418
+ -3.406456,-15.12428 -26.181106,-38.29457 -31.849471,-35.62945
+ 16.851912,6.41472 35.569884,31.75215 28.172486,47.93115
+ -7.906485,-15.42757 -37.758959,-35.53783 -44.275447,-31.28685
+ 18.975831,1.7428 37.986009,20.68109 42.87115,37.14427 C
+ 42.279655,225.774 9.879724,213.57795 4.7080253,219.04989
+ 20.780803,212.57418 55.055919,239.88547 49.602579,241.25683
+ 38.186641,230.40078 6.6930104,222.77983 2.5752529,228.41774 c
+ 13.6045481,-8.33065 49.4437901,14.89041 43.5525671,14.2358
+ -9.759981,-7.96123 -43.5842921,7.36937 -17.554974,-1.20248
+ 9.464499,-3.73452 40.555672,12.80659 16.398749,5.14121
+ -9.1987,-7.28225 -39.0013156,3.37352 -14.121965,-2.12828
+ 13.244874,-0.0206 35.758428,14.62706 10.562447,6.42228
+ -10.780465,-8.4873 -47.8282254,11.10651 -21.027329,-0.003
+ 11.640859,-4.82877 52.615601,10.74471 24.234828,8.2659
+ -10.695834,-7.03902 -42.9384162,8.93905 -34.227854,5.58373
+ 9.077539,-8.56443 49.068801,-5.28097 43.06838,0.45546
+ -10.900893,-0.7118 -27.449619,17.27258 -10.00187,3.46526
+ 15.705191,-9.18198 18.344231,9.31645 1.10807,8.73907
+ -9.908444,1.77856 -21.108189,20.66671 -7.974821,4.92019
+ 15.750746,-14.10374 34.01348,2.07267 9.796961,8.69337
+ -8.17128,5.49929 -12.642664,19.13654 -3.994573,4.19708
+ 9.044753,-8.7077 23.850399,-13.64552 21.404959,4.02329
+ 12.509737,17.12562 51.158782,11.0442 45.106112,43.34009
+ -0.65006,10.05318 -3.79228,13.95389 1.62128,14.30064
+ -4.30913,8.82737 -14.652714,37.9591 2.92144,17.46024
+ 7.37972,-3.68333 -7.62399,16.24161 -7.98007,23.83761
+ -9.336865,18.77418 19.74873,-18.55943 6.62229,5.46195
+ 5.46464,-3.7389 36.23886,-19.41901 14.78167,0.58987
+ -8.59505,4.55644 29.29441,-2.99423 8.95489,6.47134 -9.22562,5.54437
+ -24.09765,26.79976 -11.73274,22.20385 -0.81685,5.4936
+ -1.58629,21.47626 2.34158,9.14886 1.61237,14.67029
+ -2.38384,25.22225 12.26908,15.1741 -4.40761,8.01039
+ -8.23679,36.91214 5.12235,17.92578 1.53454,2.99551 9.37569,3.1726
+ 7.15304,14.93579 3.51234,-11.31873 18.4607,-29.83809
+ 12.36869,-6.48005 -0.22629,16.26174 5.44303,-7.24791
+ 6.56926,10.49819 12.45412,28.9931 3.40908,-41.89883
+ 17.52051,-9.19238 3.23093,11.1924 6.53006,29.46941 7.55984,5.1249
+ 15.37236,-19.52583 4.09776,20.07416 12.64063,1.48215
+ 18.11247,-24.55068 -8.92586,38.39355 6.73828,6.62225
+ 4.55353,-6.91007 15.35028,-38.88977 12.55806,-13.78666
+ 1.05309,27.02664 11.54743,-24.40259 12.40657,6.86306
+ -1.72561,13.28253 11.85393,-24.15909 13.85568,-1.38002
+ 3.12455,8.33539 8.76536,26.46432 8.73882,5.09231 3.57025,-10.37352
+ -16.025,-37.75672 0.20707,-22.5788 -1.2458,-14.17213
+ -2.38918,-16.90145 10.85489,-6.71468 -16.57629,-17.22152
+ 0.19706,-26.08949 5.7751,-19.14889 -14.91681,-16.1674
+ 19.74174,7.19334 2.31875,-9.86869 -4.32508,-15.23278
+ 27.25228,29.12341 20.27514,18.81172 -11.97527,-18.92603
+ -17.96305,-45.80333 11.70099,-51.52566 17.19069,-9.57351
+ 31.17452,21.93154 38.50541,1.56304 16.26048,-4.6633
+ 22.3749,38.26516 24.86349,9.11316 5.94153,-9.9731 30.14313,6.97379
+ 36.34294,4.75012 7.07435,18.27732 8.06778,14.78971 11.04264,3.86016
+ 2.73754,-15.85945 28.7269,10.06391 28.09146,25.96561 3.00672,2.4754
+ 6.55025,-22.10264 11.23552,-14.43872 2.84155,-11.4823
+ -3.28976,-27.88574 4.24895,-25.5189 -0.61494,-11.53957
+ 22.83611,0.11011 10.64648,-15.28756 -6.5587,-21.38598
+ 9.32959,-3.0159 13.5107,-4.69375 -1.38592,-16.74533
+ -8.66673,-31.83316 -1.90087,-41.0875 2.39623,-15.14303
+ -12.50533,-44.45478 -4.70573,-48.49375 15.08472,3.42779
+ -20.39159,-42.17451 -1.69776,-40.85728 24.07272,21.63552
+ -3.65989,-30.10299 2.27233,-33.17152 16.90643,17.53071
+ -12.7383,-38.42821 6.79531,-21.57013 -4.50946,-21.08135
+ -2.53357,-37.43561 -15.5535,-55.59527 -11.0035,-12.40086
+ -1.87775,-7.12745 1.34831,-8.11755 C 468.27562,118.9774
+ 451.40746,102.656 430.98897,92.119168 439.06192,78.203836
+ 455.88012,60.123881 457.38638,40.337815 463.2373,23.183067
+ 450.82861,4.7342783 435.04883,22.626367 409.5188,28.206712
+ 386.3569,24.131269 365.63904,8.0954152 352.788,2.8857182
+ 338.88892,0.40735091 325.03711,0.5 Z m -219.0625,357.04297
+ -0.97656,0.88476 z`
+ }
+ }
+ }
+}
+
diff --git a/examples/quick/quickshapes/shapes/tigerLoader.qml b/examples/quick/quickshapes/shapes/tigerLoader.qml
new file mode 100644
index 0000000000..e49d33a828
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/tigerLoader.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Rectangle {
+ color: "lightGray"
+ width: 256
+ height: 256
+
+ Item {
+ anchors.fill: parent
+
+ Text {
+ anchors.centerIn: parent
+ text: qsTr("Loading")
+ // Phase #1: Loader loads tiger.qml. After this we have our item.
+ // Phase #2: With some backends (generic) the item will start async processing. Wait for this too.
+ visible: shapeLoader.status != Loader.Ready || (shapeLoader.item as Shape)?.status === Shape.Processing
+ }
+
+ Loader {
+ id: shapeLoader
+ anchors.fill: parent
+ source: "tiger.qml"
+ asynchronous: true
+ visible: status == Loader.Ready
+ scale: 0.4
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/shapes/zoomtiger.qml b/examples/quick/quickshapes/shapes/zoomtiger.qml
new file mode 100644
index 0000000000..f23df0ca62
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/zoomtiger.qml
@@ -0,0 +1,152 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+import QtQuick.Controls
+
+Rectangle {
+ id: root
+ width: 1024
+ height: 768
+
+ readonly property color col: "lightsteelblue"
+ gradient: Gradient {
+ GradientStop {
+ position: 0.0
+ color: Qt.tint(root.col, "#20FFFFFF")
+ }
+ GradientStop {
+ position: 0.1
+ color: Qt.tint(root.col, "#20AAAAAA")
+ }
+ GradientStop {
+ position: 0.9
+ color: Qt.tint(root.col, "#20666666")
+ }
+ GradientStop {
+ position: 1.0
+ color: Qt.tint(root.col, "#20000000")
+ }
+ }
+
+ layer.enabled: msaaCheckBox.checked
+ layer.samples: 4
+
+ Item {
+ id: zoomView
+ anchors.fill: parent
+ anchors.margins: 10
+ anchors.leftMargin: 100
+ property bool zoomedIn: false
+ property rect zoomTarget: "0, 0, 100x100"
+ property rect zoomRect: zoomTarget
+ Behavior on zoomRect {
+ id: zoomBehavior
+ PropertyAnimation { id: zoomAnimation; duration: 800 }
+ }
+ property real zoomScale: Math.min(width / zoomRect.width, height / zoomRect.height)
+
+ Item {
+ width: loader1.width
+ height: loader1.height
+ scale: zoomView.zoomScale
+ transformOrigin: Item.TopLeft
+ Loader {
+ id: loader1
+ x: -zoomView.zoomRect.x
+ y: -zoomView.zoomRect.y
+ property rect br: item ? item.boundingRect : "0,0,100x100"
+ source: "tiger.qml"
+ asynchronous: true
+ visible: status === Loader.Ready
+ onLoaded: {
+ item.highlightOnTap = false
+ zoomView.zoomTarget = br
+ width = br
+ height = br
+ }
+ }
+ }
+ }
+ MouseArea {
+ anchors.fill: parent
+
+ property vector2d clickPoint
+ property vector2d zoomPoint
+ property bool dragged: false
+ property real targetSize: 30
+ enabled: !zoomAnimation.running
+ onPressed: (event) => {
+ clickPoint = Qt.vector2d(event.x, event.y)
+ zoomPoint = Qt.vector2d(zoomView.zoomRect.x, zoomView.zoomRect.y)
+ dragged = false
+ zoomBehavior.enabled = false
+ }
+ onReleased: (event) => {
+ if (!dragged)
+ doTap(Qt.point(event.x, event.y))
+ }
+ onPositionChanged: (event) => {
+ if (!dragged) {
+ let delta = Qt.vector2d(event.x, event.y).minus(clickPoint)
+ if (delta.length() < drag.threshold)
+ return
+ }
+ dragged = true
+ if (zoomView.zoomedIn) {
+ doDrag(Qt.point(event.x, event.y))
+ }
+ }
+ function doDrag(pos) {
+ let r = zoomView.zoomTarget
+ let xx = zoomPoint.x - (pos.x - clickPoint.x) / zoomView.zoomScale
+ let yy = zoomPoint.y - (pos.y - clickPoint.y) / zoomView.zoomScale
+ zoomView.zoomTarget = Qt.rect(xx, yy, r.width, r.height)
+ }
+ function doTap(pos) {
+ if (zoomView.zoomedIn) {
+ zoomBehavior.enabled = true
+ zoomView.zoomTarget = loader1.item.boundingRect
+ zoomView.zoomedIn = false
+ } else {
+ let localPos = loader1.mapFromItem(root, pos)
+ let xx = localPos.x - loader1.br.left
+ let yy = localPos.y - loader1.br.top
+ if (loader1.item.contains(Qt.point(xx,yy))) {
+ zoomBehavior.enabled = true
+ zoomView.zoomTarget = Qt.rect(xx - 184 - targetSize/2, yy - 144 - targetSize/2, targetSize, targetSize)
+ zoomView.zoomedIn = true
+ }
+ }
+ }
+ }
+
+ Rectangle {
+ opacity: 0.5
+ color: "white"
+ x: settings.childrenRect.x
+ y: settings.childrenRect.y
+ width: settings.childrenRect.width
+ height: settings.childrenRect.height
+ }
+ Column {
+ id: settings
+ RadioButton {
+ id: curveRendererCheckBox
+ text: "Curve Renderer"
+ onCheckedChanged: {
+ loader1.item.preferredRendererType = checked ? Shape.CurveRenderer : Shape.GeometryRenderer
+ }
+ }
+ RadioButton {
+ id: geometryRendererCheckBox
+ text: "Geometry Renderer"
+ checked: true
+ }
+ RadioButton {
+ id: msaaCheckBox
+ text: "Geometry Renderer 4x MSAA"
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/weatherforecast/BouncyShape.qml b/examples/quick/quickshapes/weatherforecast/BouncyShape.qml
new file mode 100644
index 0000000000..6b2de82d1b
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/BouncyShape.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+Item {
+ id: root
+ default property Item child
+ property real amount: 2
+ children: [child, hoverArea]
+ width: child.width
+ height: child.height
+ property real bounceScale: hoverArea.containsMouse ? amount : 1
+ property alias hoverEnabled: hoverArea.enabled
+ Binding {
+ target: child
+ property: "scale"
+ value: root.bounceScale
+ }
+
+ Behavior on bounceScale {
+ NumberAnimation {
+ duration: 300
+ easing.type: Easing.InOutQuad
+ }
+ }
+ z: hoverArea.containsMouse ? 1 : 0
+
+ MouseArea {
+ id: hoverArea
+ anchors.fill: parent
+ hoverEnabled: true
+ }
+}
diff --git a/examples/quick/quickshapes/weatherforecast/CMakeLists.txt b/examples/quick/quickshapes/weatherforecast/CMakeLists.txt
new file mode 100644
index 0000000000..f890b22a0c
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/CMakeLists.txt
@@ -0,0 +1,84 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(weatherforecast LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+add_subdirectory("../../shared" "shared")
+
+qt_add_executable(weatherforecastexample
+ WIN32
+ MACOSX_BUNDLE
+ main.cpp
+)
+
+target_link_libraries(weatherforecastexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+add_dependencies(weatherforecastexample weatherforecast_shared)
+
+qt_add_qml_module(weatherforecastexample
+ URI weatherforecast
+ QML_FILES
+ "main.qml"
+ "Europe.qml"
+ "Europe_generated.qml"
+ "BouncyShape.qml"
+ "Cloud.qml"
+ "Cloud_generated.qml"
+ "CloudWithLightning.qml"
+ "CloudWithLightning_generated.qml"
+ "CloudWithRain.qml"
+ "CloudWithRain_generated.qml"
+ "CloudWithSnow.qml"
+ "CloudWithSnow_generated.qml"
+ "Gear.qml"
+ "Gear_generated.qml"
+ "MapLabel.qml"
+ "SettingsDrawer.qml"
+ "Sun.qml"
+ "Sun_generated.qml"
+ "SunBehindCloud.qml"
+ "SunBehindCloud_generated.qml"
+ "SunBehindRainCloud.qml"
+ "SunBehindRainCloud_generated.qml"
+ "SunBehindSmallCloud.qml"
+ "SunBehindSmallCloud_generated.qml"
+ "DemoShape.qml"
+ RESOURCES
+ "assets/WorkSans-Regular.ttf"
+)
+
+set(resource_files
+ "qtquickcontrols2.conf"
+)
+
+qt_add_resources(weatherforecastexample "res"
+ PREFIX
+ "/"
+ FILES
+ ${resource_files}
+)
+
+install(TARGETS weatherforecastexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET weatherforecastexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/quickshapes/weatherforecast/Cloud.qml b/examples/quick/quickshapes/weatherforecast/Cloud.qml
new file mode 100644
index 0000000000..64a06d4c72
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/Cloud.qml
@@ -0,0 +1,5 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+Cloud_generated {
+}
diff --git a/examples/quick/quickshapes/weatherforecast/CloudWithLightning.qml b/examples/quick/quickshapes/weatherforecast/CloudWithLightning.qml
new file mode 100644
index 0000000000..da91eb2838
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/CloudWithLightning.qml
@@ -0,0 +1,5 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+CloudWithLightning_generated {
+}
diff --git a/examples/quick/quickshapes/weatherforecast/CloudWithLightningAndRain_generated.qml b/examples/quick/quickshapes/weatherforecast/CloudWithLightningAndRain_generated.qml
new file mode 100644
index 0000000000..6b54874636
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/CloudWithLightningAndRain_generated.qml
@@ -0,0 +1,140 @@
+// Copyright (C) 2023 Googlefonts
+// SPDX-License-Identifier: Apache-2.0
+// Generated from: assets/cloud-with-lightning-and-rain-svgrepo-com.svg
+import QtQuick
+import QtQuick.Shapes
+
+Item {
+ // viewBox 0, 0 128x128
+ // size 800x800
+ implicitWidth: 800
+ implicitHeight: 800
+ // START type: DOC 0
+ DemoShape { //combined path container
+ transform: [
+ Scale { xScale: width / 128; yScale: height / 128 }
+ ]
+ // PATH visit count: 27
+ ShapePath {
+ // boundingRect: 46.8504, 67.82 37.9392x46.8238
+ strokeColor: "transparent"
+ fillColor: "#fffeca18"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 78 67.82 L 55.17 71.79 C 55.17 71.79 47.57 91.15 47.1 92.46 C 46.63 93.77 46.65 95.84 48.72 95.84 C 51.35 95.84 64.7 95.77 64.7 95.77 C 64.7 95.77 61.46 111.4 61.27 112.8 C 61.08 114.2 62.58 115.43 63.9 114.02 C 65.22 112.61 83.41 89.23 84.2 88.09 C 85.61 86.05 84.25 84.17 82.65 84.08 C 81.05 83.99 70.33 84.22 70.33 84.22 L 78 67.82 " }
+ }
+ // PATH visit count: 11
+ ShapePath {
+ // boundingRect: 66.5578, 69.49 9.44218x14.9005
+ strokeColor: "transparent"
+ fillColor: "#fffdb900"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 71.92 70.54 C 71.92 70.54 66.83 81.8 66.64 82.44 C 66.08 84.34 68.54 85.11 69.24 83.57 C 69.94 82.02 76 69.49 76 69.49 L 71.92 70.54 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 48.3858, 92.0244 17.1635x2.46762
+ strokeColor: "transparent"
+ fillColor: "#fffdb900"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 49.99 92.17 C 51.33 92.13 63.09 92.1 64.07 92.03 C 65.9 91.89 66.18 94.42 64.07 94.42 C 61.88 94.42 50.34 94.46 49.64 94.49 C 48.02 94.57 47.8 92.24 49.99 92.17 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 52.8347, 68.3555 12.6443x20.6092
+ strokeColor: "transparent"
+ fillColor: "#ffffe36a"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 59.42 69.01 C 59.42 69.01 53.42 84.07 53.08 85.2 C 51.67 89.92 56.74 89.78 58.08 87.1 C 58.74 85.77 65.19 72.11 65.47 69.64 C 65.75 67.18 59.42 69.01 59.42 69.01 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 57.598, 86.3211 4.2165x4.82538
+ strokeColor: "transparent"
+ fillColor: "#ffffe36a"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 61.01 86.57 C 60.15 85.98 59.11 86.5 58.48 87.49 C 57.85 88.48 56.93 90.09 58.34 90.94 C 59.61 91.7 60.73 90.17 61.23 89.46 C 61.72 88.75 62.35 87.48 61.01 86.57 " }
+ }
+ // PATH visit count: 16
+ ShapePath {
+ // boundingRect: 65.0829, 89.7223 7.8611x17.1865
+ strokeColor: "transparent"
+ fillColor: "#ffffe36a"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 71.34 89.8 C 69.05 89.31 68.31 91.21 67.82 93.46 C 67.33 95.71 65.49 102.99 65.15 104.79 C 64.66 107.32 66.98 107.68 67.97 105.35 C 68.71 103.61 71.92 95.76 72.33 94.51 C 72.96 92.62 73.66 90.3 71.34 89.8 " }
+ }
+ // PATH visit count: 26
+ ShapePath {
+ // boundingRect: 4.48158, 6.41669 120.262x63.9578
+ strokeColor: "transparent"
+ fillColor: "#ffe4eaee"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 107.92 46.26 C 107.92 46.26 110.52 11.28 80.61 6.84 C 53.72 2.85 48.44 28.38 48.44 28.38 C 48.44 28.38 38.28 26.01 30.98 32.53 C 23.73 39.01 24.29 46.68 24.29 46.68 C 24.29 46.68 6.41 43.86 4.58 59.21 C 2.87 73.55 24.01 69.98 24.01 69.98 L 124.39 62.59 C 124.39 62.59 126.77 55.05 119.18 49.36 C 114.67 45.97 107.92 46.26 107.92 46.26 " }
+ }
+ // PATH visit count: 49
+ ShapePath {
+ // boundingRect: 4.42853, 47.15 120.397x26.7991
+ strokeColor: "transparent"
+ fillGradient: RadialGradient {
+ centerX: 65.811
+ centerY: 75.277
+ centerRadius: 29.434
+ focalX: centerX; focalY: centerY
+ GradientStop { position: 0.193; color: "#ffffe366" }
+ GradientStop { position: 0.331; color: "#ffeddd82" }
+ GradientStop { position: 0.571; color: "#ffd0d4ad" }
+ GradientStop { position: 0.759; color: "#ffbfcfc7" }
+ GradientStop { position: 0.87; color: "#ffb8cdd1" }
+ }
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 53.81 54.19 C 54.65 53.91 59.44 58 73.24 58.13 C 92.2 58.32 106.56 47.15 106.56 47.15 C 106.56 47.15 107.04 50.55 105.53 52.97 C 103.65 55.97 100.74 56.54 100.74 56.54 C 100.74 56.54 106 60.2 113.22 59.64 C 119.73 59.13 124.44 56.92 124.44 56.92 C 124.44 56.92 125.07 60.13 124.72 63.26 C 124.02 69.5 120.36 72.04 116.32 72.5 C 113.35 72.84 87.98 72.96 77.56 73.06 C 68.17 73.15 20.32 74.35 15.43 73.81 C 10.36 73.25 6.51 70.2 5.11 65.83 C 4.04 62.52 4.55 60.39 4.55 60.39 C 4.55 60.39 13.87 62.86 19.1 62.27 C 25.67 61.52 30.08 57.39 30.08 57.39 C 30.08 57.39 34.02 59.64 42.75 58.89 C 50.26 58.23 53.81 54.19 53.81 54.19 " }
+ }
+ // PATH visit count: 16
+ ShapePath {
+ // boundingRect: 91.3033, 74.1363 13.4678x20.2873
+ strokeColor: "transparent"
+ fillColor: "#ff52c0ee"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 103.9 74.2 C 102.88 73.63 99.25 77.02 97.21 79.06 C 95.96 80.31 91.98 83.58 91.44 86.73 C 90.1 94.47 98.97 96.23 102.49 92.64 C 105.15 89.93 104.67 84.64 104.67 82.86 C 104.68 80.39 105.17 74.9 103.9 74.2 " }
+ }
+ // PATH visit count: 16
+ ShapePath {
+ // boundingRect: 18.9213, 78.2966 12.9004x19.7846
+ strokeColor: "transparent"
+ fillColor: "#ff52c0ee"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 31.02 78.36 C 30.05 77.8 26.57 81.08 24.61 83.07 C 23.41 84.28 19.6 87.45 19.06 90.53 C 17.74 98.08 26.19 99.85 29.57 96.37 C 32.12 93.74 31.7 88.57 31.71 86.83 C 31.72 84.42 32.22 79.06 31.02 78.36 " }
+ }
+ // PATH visit count: 16
+ ShapePath {
+ // boundingRect: 34.7194, 100.706 13.1416x20.3505
+ strokeColor: "transparent"
+ fillColor: "#ff52c0ee"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 47.15 100.74 C 46.06 100.33 42.39 103.67 40.35 105.71 C 39.1 106.96 35.4 110.16 34.86 113.31 C 33.52 121.05 42.11 122.88 45.63 119.29 C 48.29 116.58 47.85 111.29 47.81 109.51 C 47.71 104.87 47.9 101.02 47.15 100.74 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 93.1117, 83.8677 5.96569x6.96478
+ strokeColor: "transparent"
+ fillColor: "#ffb2e6fe"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 97.78 84.22 C 96.38 83.49 94.68 83.8 93.6 86.05 C 92.52 88.3 93.41 90.09 94.54 90.6 C 95.84 91.2 97.45 90.65 98.53 88.82 C 99.61 86.99 98.95 84.83 97.78 84.22 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 36.0415, 110.757 5.61809x6.84249
+ strokeColor: "transparent"
+ fillColor: "#ffb2e6fe"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 40.01 110.93 C 38.57 110.43 36.99 110.96 36.27 113.27 C 35.55 115.58 36.66 117.16 37.81 117.5 C 39.14 117.89 40.6 117.14 41.38 115.23 C 42.15 113.32 41.21 111.35 40.01 110.93 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 20.2228, 87.8513 5.75099x7.08989
+ strokeColor: "transparent"
+ fillColor: "#ffb2e6fe"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 24.07 87.97 C 22.55 87.55 20.95 88.2 20.37 90.63 C 19.79 93.06 21.03 94.62 22.24 94.88 C 23.64 95.19 25.09 94.32 25.77 92.3 C 26.44 90.3 25.35 88.32 24.07 87.97 " }
+ }
+ } // END type: DOC 0
+}
diff --git a/examples/quick/quickshapes/weatherforecast/CloudWithLightning_generated.qml b/examples/quick/quickshapes/weatherforecast/CloudWithLightning_generated.qml
new file mode 100644
index 0000000000..5be18dc851
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/CloudWithLightning_generated.qml
@@ -0,0 +1,142 @@
+// Copyright (C) 2023 Googlefonts
+// SPDX-License-Identifier: Apache-2.0
+// Generated from: assets/cloud-with-lightning-svgrepo-com.svg
+import QtQuick
+import QtQuick.Shapes
+
+Item {
+ // viewBox 0, 0 128x128
+ // size 800x800
+ implicitWidth: 800
+ implicitHeight: 800
+ // START svg1314 type: DOC 0
+ Item { // structure node
+ transform: [
+ Scale { xScale: width / 128; yScale: height / 128 }
+ ]
+ objectName: "svg1314"
+ // skipping DEFS "defs1318"
+ // PATH visit path1287 count: 27
+ DemoShape {
+ objectName: "path1287"
+ ShapePath {
+ objectName: "svg_path:path1287"
+ // boundingRect: 48.6804, 71.24 37.9392x46.8238
+ strokeColor: "#b0ab9d"
+ strokeWidth: 1
+ fillColor: "#fffeca18"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 79.83 71.24 L 57 75.21 C 57 75.21 49.4 94.57 48.93 95.88 C 48.46 97.19 48.48 99.26 50.55 99.26 C 53.18 99.26 66.53 99.19 66.53 99.19 C 66.53 99.19 63.29 114.82 63.1 116.22 C 62.91 117.62 64.41 118.85 65.73 117.44 C 67.04 116.03 85.24 92.65 86.03 91.51 C 87.44 89.47 86.08 87.59 84.48 87.5 C 82.88 87.41 72.16 87.64 72.16 87.64 L 79.83 71.24 " }
+ }
+ }
+ // PATH visit path1289 count: 11
+ DemoShape {
+ objectName: "path1289"
+ ShapePath {
+ objectName: "svg_path:path1289"
+ // boundingRect: 68.3478, 73.99 9.44218x14.9005
+ strokeColor: "transparent"
+ fillColor: "#fffdb900"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 73.71 75.04 C 73.71 75.04 68.62 86.3 68.43 86.94 C 67.87 88.84 70.33 89.61 71.03 88.07 C 71.73 86.52 77.79 73.99 77.79 73.99 L 73.71 75.04 " }
+ }
+ }
+ // PATH visit path1291 count: 13
+ DemoShape {
+ objectName: "path1291"
+ ShapePath {
+ objectName: "svg_path:path1291"
+ // boundingRect: 49.2295, 96.1544 17.1598x2.46762
+ strokeColor: "transparent"
+ fillColor: "#fffdb900"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 50.83 96.3 C 52.17 96.26 63.93 96.23 64.91 96.16 C 66.74 96.02 67.02 98.55 64.91 98.55 C 62.72 98.55 51.18 98.59 50.48 98.62 C 48.86 98.7 48.65 96.37 50.83 96.3 " }
+ }
+ }
+ // PATH visit path1293 count: 13
+ DemoShape {
+ objectName: "path1293"
+ ShapePath {
+ objectName: "svg_path:path1293"
+ // boundingRect: 53.3947, 75.3055 12.645x20.6092
+ strokeColor: "transparent"
+ fillColor: "#ffffe36a"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 59.98 75.96 C 59.98 75.96 53.98 91.02 53.64 92.15 C 52.23 96.87 57.3 96.73 58.64 94.05 C 59.3 92.72 65.75 79.06 66.03 76.59 C 66.32 74.13 59.98 75.96 59.98 75.96 " }
+ }
+ }
+ // PATH visit path1295 count: 13
+ DemoShape {
+ objectName: "path1295"
+ ShapePath {
+ objectName: "svg_path:path1295"
+ // boundingRect: 59.108, 90.9111 4.20909x4.82538
+ strokeColor: "transparent"
+ fillColor: "#ffffe36a"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 62.52 91.16 C 61.66 90.57 60.62 91.09 59.99 92.08 C 59.36 93.07 58.44 94.68 59.85 95.53 C 61.12 96.29 62.24 94.76 62.74 94.05 C 63.22 93.35 63.85 92.08 62.52 91.16 " }
+ }
+ }
+ // PATH visit path1297 count: 16
+ DemoShape {
+ objectName: "path1297"
+ ShapePath {
+ objectName: "svg_path:path1297"
+ // boundingRect: 65.8329, 94.3223 7.8611x17.1865
+ strokeColor: "transparent"
+ fillColor: "#ffffe36a"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 72.09 94.4 C 69.8 93.91 69.06 95.81 68.57 98.06 C 68.08 100.31 66.24 107.59 65.9 109.39 C 65.41 111.92 67.73 112.28 68.72 109.95 C 69.46 108.21 72.67 100.36 73.08 99.11 C 73.71 97.22 74.41 94.89 72.09 94.4 " }
+ }
+ }
+ // PATH visit path1299 count: 26
+ DemoShape {
+ objectName: "path1299"
+ ShapePath {
+ objectName: "svg_path:path1299"
+ // boundingRect: 4.45246, 10.7839 119.361x62.1608
+ strokeColor: "transparent"
+ fillColor: "#ffe4eaee"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 107.35 50.2 C 107.35 50.2 108.64 15.42 79.9 11.2 C 53.01 7.26 48.23 32.6 48.23 32.6 C 48.23 32.6 36.55 29.93 30.21 37.39 C 23.87 44.85 23.73 50.62 23.73 50.62 C 23.73 50.62 6.13 48.93 4.58 63.29 C 3.03 77.65 16.12 71.74 16.12 71.74 L 123.25 67.02 C 123.25 67.02 126.2 58.99 118.6 53.29 C 114.11 49.92 107.35 50.2 107.35 50.2 " }
+ }
+ }
+ // PATH visit path1312 count: 49
+ DemoShape {
+ objectName: "path1312"
+ ShapePath {
+ objectName: "svg_path:path1312"
+ // boundingRect: 4.32853, 52.17 119.834x25.6097
+ strokeColor: "transparent"
+ fillGradient: RadialGradient {
+ centerX: 65.427
+ centerY: 79.054
+ centerRadius: 29.294
+ focalX: centerX; focalY: centerY
+ GradientStop { position: 0.193; color: "#ffffe366" }
+ GradientStop { position: 0.331; color: "#ffeddd82" }
+ GradientStop { position: 0.571; color: "#ffd0d4ad" }
+ GradientStop { position: 0.759; color: "#ffbfcfc7" }
+ GradientStop { position: 0.87; color: "#ffb8cdd1" }
+ }
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 58.78 55.69 C 59.62 55.41 64.83 59.91 78.63 59.49 C 92.43 59.07 105.24 52.17 105.24 52.17 C 105.24 52.17 104.54 57.1 102.99 59.49 C 101.44 61.88 98.77 64.7 98.77 64.7 C 98.77 64.7 105.95 66.39 112.43 65.54 C 118.91 64.7 123.69 61.6 123.69 61.6 C 123.69 61.6 124.53 64.84 123.97 67.94 C 123.25 71.91 119.75 74.84 116.79 75.26 C 113.83 75.68 87.23 77.02 76.81 77.37 C 68.36 77.66 20.18 78.05 15.29 77.51 C 10.22 76.95 6.42 74.69 5.01 70.33 C 3.94 67.02 4.45 64.98 4.45 64.98 C 4.45 64.98 10.81 67.71 15.99 66.81 C 22.47 65.68 25.99 60.62 25.99 60.62 C 25.99 60.62 32.33 63.86 41.48 62.73 C 50.62 61.6 58.78 55.69 58.78 55.69 " }
+ }
+ }
+ // PATH visit path1377 count: 49
+ DemoShape {
+ objectName: "path1377"
+ // Scale 0.16, 0.16 Translate 0, 0
+ transform: Scale { xScale: 0.16; yScale: 0.16 }
+ ShapePath {
+ objectName: "svg_path:path1377"
+ // boundingRect: 27.0533, 67.399 748.971x418.724
+ strokeColor: "#b0ab9d"
+ strokeWidth: 6.25
+ fillColor: "transparent"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 462.465 67.416 C 326.828 69.1539 301.438 203.75 301.438 203.75 C 301.438 203.75 228.438 187.063 188.813 233.688 C 149.188 280.313 148.313 316.375 148.313 316.375 C 148.313 316.375 38.3125 305.813 28.625 395.563 C 28.2196 399.318 27.9883 402.832 27.8906 406.156 C 27.8882 406.155 27.8125 406.125 27.8125 406.125 C 27.8125 406.125 24.625 418.875 31.3125 439.563 C 40.125 466.813 63.875 480.938 95.5625 484.438 C 126.125 487.813 427.25 485.375 480.063 483.563 C 545.188 481.375 711.438 473 729.938 470.375 C 748.438 467.75 770.313 449.438 774.813 424.625 C 778.042 406.75 773.87 388.338 773.197 385.563 C 771.117 369.235 763.281 349.585 741.25 333.063 C 713.188 312 670.938 313.75 670.938 313.75 C 670.938 313.75 679 96.375 499.375 70 C 486.245 68.0762 473.96 67.2687 462.465 67.416 " }
+ }
+ }
+ } // END svg1314 type: DOC 0
+}
diff --git a/examples/quick/quickshapes/weatherforecast/CloudWithRain.qml b/examples/quick/quickshapes/weatherforecast/CloudWithRain.qml
new file mode 100644
index 0000000000..e332d90a67
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/CloudWithRain.qml
@@ -0,0 +1,5 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+CloudWithRain_generated {
+}
diff --git a/examples/quick/quickshapes/weatherforecast/CloudWithRain_generated.qml b/examples/quick/quickshapes/weatherforecast/CloudWithRain_generated.qml
new file mode 100644
index 0000000000..5ee4aaef1d
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/CloudWithRain_generated.qml
@@ -0,0 +1,114 @@
+// Copyright (C) 2023 Googlefonts
+// SPDX-License-Identifier: Apache-2.0
+// Generated from: assets/cloud-with-rain-svgrepo-com.svg
+import QtQuick
+import QtQuick.Shapes
+
+Item {
+ // viewBox 0, 0 128x128
+ // size 800x800
+ implicitWidth: 800
+ implicitHeight: 800
+ // START type: DOC 0
+ DemoShape { //combined path container
+ transform: [
+ Scale { xScale: width / 128; yScale: height / 128 }
+ ]
+ // PATH visit count: 32
+ ShapePath {
+ // boundingRect: 4.51974, 6.33677 119.18x62.539
+ strokeColor: "transparent"
+ fillColor: "#ffe2ebee"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 107.62 46.29 C 107.62 46.29 109.34 13.97 83.73 7.57 C 54.12 0.17 48.29 28.49 48.29 28.49 C 48.29 28.49 36.74 26.3 29.55 34.11 C 23.52 40.66 24.09 47.07 24.09 47.07 C 24.09 47.07 16.13 45.35 9.88 50.82 C 3.63 56.29 4.57 61.43 4.57 61.43 L 23.15 68.61 C 23.15 68.61 116.98 69.08 117.45 68.77 C 117.92 68.46 123.7 59.4 123.7 59.4 C 123.7 59.4 122.76 51.59 117.3 48.47 C 111.83 45.35 107.62 46.29 107.62 46.29 " }
+ }
+ // PATH visit count: 49
+ ShapePath {
+ // boundingRect: 4.46833, 47.5237 119.634x26.5724
+ strokeColor: "transparent"
+ fillColor: "#ffb9ced2"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 14.25 73.45 C 18.93 73.61 49.54 74.23 68.11 74.07 C 86.68 73.91 114.92 74.21 118.84 72.36 C 121.91 70.91 123.74 68.51 124.03 65.15 C 124.31 61.94 123.69 59.4 123.69 59.4 C 123.69 59.4 119.32 62.56 111.04 62.68 C 105.89 62.75 95.43 61.9 97.46 60.03 C 98.03 59.5 106.12 53.37 105.73 47.7 C 105.64 46.36 98.39 53.01 91.52 55.82 C 84.65 58.63 78.13 60.8 69.05 60.22 C 61.4 59.72 58.08 56.61 58.08 56.61 C 58.08 56.61 54.39 60.94 43.3 61.87 C 32.21 62.81 29.82 58.64 29.82 58.64 C 29.82 58.64 24.45 62.7 15.43 62.58 C 6.43 62.44 4.66 59.2 4.66 59.2 C 4.66 59.2 3.81 64.97 5.69 68.34 C 7.61 71.77 11.1 73.35 14.25 73.45 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 58.0616, 81.5193 13.614x19.5023
+ strokeColor: "transparent"
+ fillColor: "#ff4fc4f8"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 69.99 81.57 C 68.28 80.97 62.18 85.8 59.43 90.57 C 56.67 95.36 58.47 98.86 61.42 100.3 C 64.74 101.92 69.52 100.92 70.88 96.2 C 72.22 91.53 71.83 82.22 69.99 81.57 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 25.6777, 79.1454 13.4492x19.7249
+ strokeColor: "transparent"
+ fillColor: "#ff4fc4f8"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 37.66 79.19 C 36.11 78.64 31.08 83.31 28.82 85.83 C 25.79 89.22 23.45 95.54 29.2 98.1 C 34.99 100.67 38.75 96.46 39.04 90.64 C 39.32 85.22 38.94 79.65 37.66 79.19 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 37.6925, 101.563 13.5018x19.9666
+ strokeColor: "transparent"
+ fillColor: "#ff4fc4f8"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 49.87 101.65 C 48.22 100.76 41.29 106.91 39.08 110.58 C 36.88 114.25 37.02 118.96 41.52 120.89 C 46.02 122.82 49.99 120.35 50.82 113.92 C 51.4 109.36 51.46 102.51 49.87 101.65 " }
+ }
+ // PATH visit count: 10
+ ShapePath {
+ // boundingRect: 71.433, 102.131 13.3742x19.7696
+ strokeColor: "transparent"
+ fillColor: "#ff4fc4f8"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 83.38 102.18 C 82.19 101.51 73.95 107.87 72.1 112.5 C 68.43 121.69 80.97 125.79 83.82 117.15 C 85.48 112.11 84.85 103.01 83.38 102.18 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 91.7795, 82.2534 13.8268x20.1662
+ strokeColor: "transparent"
+ fillColor: "#ff4fc4f8"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 103.87 82.37 C 102.24 81.37 95.39 87.01 93.11 91.25 C 90.23 96.61 92.47 100.65 95.61 101.93 C 98.87 103.25 103.06 101.98 104.48 97.15 C 106.53 90.19 105.45 83.35 103.87 82.37 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 93.752, 91.0753 4.98803x7.77652
+ strokeColor: "transparent"
+ fillColor: "#ffaee6fd"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 96.4 91.09 C 95.32 91.22 93.98 92.76 93.77 95.39 C 93.56 98.02 95.22 99.35 96.9 98.68 C 98.48 98.05 98.74 95.8 98.74 94.38 C 98.74 92.96 98.07 90.88 96.4 91.09 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 59.3141, 90.2226 5.39921x7.99531
+ strokeColor: "transparent"
+ fillColor: "#ffaee6fd"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 63 90.26 C 61.86 89.94 59.74 91.7 59.37 94.55 C 59.08 96.75 59.93 98.08 61.64 98.21 C 64.02 98.39 64.77 95.46 64.71 93.67 C 64.67 92.65 64.49 90.68 63 90.26 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 39.61, 109.787 5.08875x8.13799
+ strokeColor: "transparent"
+ fillColor: "#ffaee6fd"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 42.45 109.79 C 41.39 109.71 39.61 111.49 39.61 114.26 C 39.61 117.03 41.05 118.23 42.75 117.86 C 44.45 117.48 44.79 114.23 44.68 112.94 C 44.57 111.65 44.02 109.91 42.45 109.79 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 27.3958, 88.3815 5.24188x7.26814
+ strokeColor: "transparent"
+ fillColor: "#ffaee6fd"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 30.91 88.44 C 29.48 88.03 27.65 89.84 27.43 91.88 C 27.2 93.92 28.15 95.4 29.66 95.63 C 31.17 95.86 32.46 94.04 32.61 91.92 C 32.77 89.8 32.24 88.81 30.91 88.44 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 73.239, 110.966 5.19528x8.30781
+ strokeColor: "transparent"
+ fillColor: "#ffaee6fd"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 76.4 110.97 C 75.08 110.86 73.19 112.81 73.24 115.76 C 73.29 118.71 74.82 119.21 75.83 119.27 C 77.28 119.36 78.29 117.65 78.42 114.97 C 78.53 112.72 78.02 111.1 76.4 110.97 " }
+ }
+ } // END type: DOC 0
+}
diff --git a/examples/quick/quickshapes/weatherforecast/CloudWithSnow.qml b/examples/quick/quickshapes/weatherforecast/CloudWithSnow.qml
new file mode 100644
index 0000000000..d74648898f
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/CloudWithSnow.qml
@@ -0,0 +1,5 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+CloudWithSnow_generated {
+}
diff --git a/examples/quick/quickshapes/weatherforecast/CloudWithSnow_generated.qml b/examples/quick/quickshapes/weatherforecast/CloudWithSnow_generated.qml
new file mode 100644
index 0000000000..314defa445
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/CloudWithSnow_generated.qml
@@ -0,0 +1,74 @@
+// Copyright (C) 2023 Googlefonts
+// SPDX-License-Identifier: Apache-2.0
+// Generated from: assets/cloud-with-snow-svgrepo-com.svg
+import QtQuick
+import QtQuick.Shapes
+
+Item {
+ // viewBox 0, 0 128x128
+ // size 800x800
+ implicitWidth: 800
+ implicitHeight: 800
+ // START type: DOC 0
+ DemoShape { //combined path container
+ transform: [
+ Scale { xScale: width / 128; yScale: height / 128 }
+ ]
+ // PATH visit count: 26
+ ShapePath {
+ // boundingRect: 4.90965, 6.40871 119.834x64.0813
+ strokeColor: "transparent"
+ fillColor: "#ffe4eaee"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 108.55 45.69 C 108.55 45.69 110.52 11.27 80.61 6.83 C 53.72 2.85 48.44 28.38 48.44 28.38 C 48.44 28.38 38.92 25.94 31.62 32.46 C 24.36 38.93 25 46.11 25 46.11 C 25 46.11 6.84 44.28 5.01 59.63 C 3.3 73.97 24.01 69.98 24.01 69.98 L 124.39 62.59 C 124.39 62.59 126.77 55.05 119.18 49.36 C 114.67 45.97 108.55 45.69 108.55 45.69 " }
+ }
+ // PATH visit count: 49
+ ShapePath {
+ // boundingRect: 4.80443, 46.68 120.011x26.4483
+ strokeColor: "transparent"
+ fillColor: "#ffb9ced2"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 56.95 55.83 C 57.79 55.55 60.32 58.79 74.13 58.79 C 88.49 58.79 106.23 46.68 106.23 46.68 C 106.23 46.68 106.16 51.42 104.68 53.86 C 102.71 57.1 98.2 58.93 98.2 58.93 C 98.2 58.93 104.68 61.6 113.26 60.9 C 119.77 60.37 124.43 56.91 124.43 56.91 C 124.43 56.91 125.06 60.12 124.71 63.25 C 124.01 69.49 120.39 71.27 116.36 71.74 C 113.39 72.08 87.97 72.95 77.55 73.05 C 68.16 73.14 20.59 73.26 15.7 72.72 C 10.63 72.16 6.83 69.48 5.42 65.12 C 4.35 61.81 5 58.64 5 58.64 C 5 58.64 10.77 60.89 17.67 60.89 C 24.28 60.89 29.21 57.79 29.21 57.79 C 29.21 57.79 34.42 61.36 43.15 60.61 C 50.69 59.97 56.95 55.83 56.95 55.83 " }
+ }
+ // PATH visit count: 71
+ ShapePath {
+ // boundingRect: 92.5268, 76.076 22.6332x20.233
+ strokeColor: "transparent"
+ fillColor: "#ff92c9f4"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 104.07 81.59 C 104.07 81.59 106.32 77.93 106.92 77.19 C 107.52 76.45 108.54 75.64 109.81 76.35 C 111.08 77.05 110.65 78.5 110.3 79.13 C 109.95 79.76 107.84 83.85 107.84 83.85 C 107.84 83.85 111.82 83.89 112.7 83.89 C 113.58 83.89 115.16 84.59 115.16 86.14 C 115.16 87.48 114.53 88.32 113.01 88.39 C 111.49 88.46 107.7 88.46 107.7 88.46 C 107.7 88.46 109.74 91.8 110.34 92.82 C 110.94 93.84 111.01 95.07 110.13 95.81 C 109 96.76 107.53 96.23 106.65 94.86 C 105.99 93.82 103.94 90.85 103.94 90.85 C 103.94 90.85 101.51 94.37 100.88 95.14 C 100.25 95.91 99.09 96.83 97.92 95.95 C 96.48 94.86 97.31 93.63 97.92 92.68 L 100.52 88.6 C 100.52 88.6 96.09 88.49 94.82 88.49 C 93.55 88.49 92.46 87.79 92.53 86.34 C 92.6 84.86 93.52 84.26 95.03 84.23 C 96.54 84.19 100.56 84.19 100.56 84.19 C 100.56 84.19 98.1 80.67 97.46 79.65 C 96.83 78.63 96.76 77.33 97.74 76.59 C 98.73 75.85 99.89 76.27 100.63 77.22 C 101.37 78.17 104.07 81.59 104.07 81.59 " }
+ }
+ // PATH visit count: 71
+ ShapePath {
+ // boundingRect: 53.6668, 79.706 22.6332x20.233
+ strokeColor: "transparent"
+ fillColor: "#ff92c9f4"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 65.21 85.22 C 65.21 85.22 67.46 81.56 68.06 80.82 C 68.66 80.08 69.68 79.27 70.95 79.98 C 72.22 80.68 71.79 82.13 71.44 82.76 C 71.09 83.39 68.98 87.48 68.98 87.48 C 68.98 87.48 72.96 87.52 73.84 87.52 C 74.72 87.52 76.3 88.22 76.3 89.77 C 76.3 91.11 75.67 91.95 74.15 92.02 C 72.64 92.09 68.84 92.09 68.84 92.09 C 68.84 92.09 70.88 95.43 71.48 96.45 C 72.08 97.47 72.15 98.7 71.27 99.44 C 70.14 100.39 68.67 99.86 67.79 98.49 C 67.13 97.45 65.08 94.48 65.08 94.48 C 65.08 94.48 62.65 98 62.02 98.77 C 61.39 99.54 60.23 100.46 59.06 99.58 C 57.62 98.49 58.45 97.26 59.06 96.31 L 61.66 92.23 C 61.66 92.23 57.23 92.12 55.96 92.12 C 54.69 92.12 53.6 91.42 53.67 89.97 C 53.74 88.49 54.66 87.89 56.17 87.86 C 57.68 87.82 61.7 87.82 61.7 87.82 C 61.7 87.82 59.24 84.3 58.6 83.28 C 57.97 82.26 57.9 80.96 58.88 80.22 C 59.87 79.48 61.03 79.9 61.77 80.85 C 62.51 81.8 65.21 85.22 65.21 85.22 " }
+ }
+ // PATH visit count: 71
+ ShapePath {
+ // boundingRect: 32.6468, 99.916 22.6332x20.233
+ strokeColor: "transparent"
+ fillColor: "#ff92c9f4"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 44.19 105.43 C 44.19 105.43 46.44 101.77 47.04 101.03 C 47.64 100.29 48.66 99.48 49.93 100.19 C 51.2 100.89 50.77 102.34 50.42 102.97 C 50.07 103.6 47.96 107.69 47.96 107.69 C 47.96 107.69 51.94 107.73 52.82 107.73 C 53.7 107.73 55.28 108.43 55.28 109.98 C 55.28 111.32 54.65 112.16 53.13 112.23 C 51.62 112.3 47.82 112.3 47.82 112.3 C 47.82 112.3 49.86 115.64 50.46 116.66 C 51.06 117.68 51.13 118.91 50.25 119.65 C 49.12 120.6 47.65 120.07 46.77 118.7 C 46.11 117.66 44.06 114.69 44.06 114.69 C 44.06 114.69 41.63 118.21 41 118.98 C 40.37 119.75 39.21 120.67 38.04 119.79 C 36.6 118.7 37.43 117.47 38.04 116.52 L 40.64 112.44 C 40.64 112.44 36.21 112.33 34.94 112.33 C 33.67 112.33 32.58 111.63 32.65 110.18 C 32.72 108.7 33.64 108.1 35.15 108.07 C 36.66 108.03 40.68 108.03 40.68 108.03 C 40.68 108.03 38.22 104.51 37.58 103.49 C 36.95 102.47 36.88 101.17 37.86 100.43 C 38.85 99.69 40.01 100.11 40.75 101.06 C 41.49 102.01 44.19 105.43 44.19 105.43 " }
+ }
+ // PATH visit count: 71
+ ShapePath {
+ // boundingRect: 15.2836, 76.7159 22.6366x20.215
+ strokeColor: "transparent"
+ fillColor: "#ff92c9f4"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 26.9 82.16 C 26.9 82.16 29.21 78.53 29.82 77.8 C 30.43 77.07 31.47 76.28 32.72 77 C 33.98 77.72 33.53 79.16 33.17 79.79 C 32.81 80.42 30.63 84.47 30.63 84.47 C 30.63 84.47 34.61 84.57 35.49 84.58 C 36.37 84.59 37.94 85.32 37.92 86.87 C 37.9 88.21 37.25 89.04 35.74 89.09 C 34.23 89.14 30.43 89.08 30.43 89.08 C 30.43 89.08 32.42 92.45 33 93.48 C 33.58 94.51 33.64 95.74 32.74 96.47 C 31.6 97.4 30.13 96.85 29.27 95.47 C 28.62 94.42 26.62 91.42 26.62 91.42 C 26.62 91.42 24.14 94.9 23.49 95.67 C 22.84 96.43 21.68 97.34 20.52 96.43 C 19.09 95.32 19.95 94.1 20.57 93.16 L 23.24 89.12 C 23.24 89.12 18.81 88.95 17.54 88.93 C 16.27 88.91 15.19 88.19 15.29 86.75 C 15.38 85.27 16.31 84.69 17.82 84.68 C 19.33 84.67 23.35 84.73 23.35 84.73 C 23.35 84.73 20.94 81.17 20.32 80.14 C 19.7 79.11 19.65 77.81 20.65 77.08 C 21.65 76.36 22.8 76.8 23.53 77.76 C 24.24 78.7 26.9 82.16 26.9 82.16 " }
+ }
+ // PATH visit count: 71
+ ShapePath {
+ // boundingRect: 75.5368, 99.636 22.6332x20.233
+ strokeColor: "transparent"
+ fillColor: "#ff92c9f4"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 87.08 105.15 C 87.08 105.15 89.33 101.49 89.93 100.75 C 90.53 100.01 91.55 99.2 92.82 99.91 C 94.09 100.61 93.66 102.06 93.31 102.69 C 92.96 103.32 90.85 107.41 90.85 107.41 C 90.85 107.41 94.83 107.45 95.71 107.45 C 96.59 107.45 98.17 108.15 98.17 109.7 C 98.17 111.04 97.54 111.88 96.02 111.95 C 94.5 112.02 90.71 112.02 90.71 112.02 C 90.71 112.02 92.75 115.36 93.35 116.38 C 93.95 117.4 94.02 118.63 93.14 119.37 C 92.01 120.32 90.54 119.79 89.66 118.42 C 89 117.38 86.95 114.41 86.95 114.41 C 86.95 114.41 84.52 117.93 83.89 118.7 C 83.26 119.47 82.1 120.39 80.93 119.51 C 79.49 118.42 80.32 117.19 80.93 116.24 L 83.53 112.16 C 83.53 112.16 79.1 112.05 77.83 112.05 C 76.56 112.05 75.47 111.35 75.54 109.9 C 75.61 108.42 76.53 107.82 78.04 107.79 C 79.55 107.76 83.57 107.75 83.57 107.75 C 83.57 107.75 81.11 104.23 80.47 103.21 C 79.84 102.19 79.77 100.89 80.75 100.15 C 81.74 99.41 82.9 99.83 83.64 100.78 C 84.38 101.73 87.08 105.15 87.08 105.15 " }
+ }
+ } // END type: DOC 0
+}
diff --git a/examples/quick/quickshapes/weatherforecast/Cloud_generated.qml b/examples/quick/quickshapes/weatherforecast/Cloud_generated.qml
new file mode 100644
index 0000000000..6c097d5b76
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/Cloud_generated.qml
@@ -0,0 +1,59 @@
+// Copyright (C) 2023 Googlefonts
+// SPDX-License-Identifier: Apache-2.0
+// Generated from: assets/cloud-svgrepo-com.svg
+import QtQuick
+import QtQuick.Shapes
+
+Item {
+ // viewBox 0, 0 128x128
+ // size 800x800
+ implicitWidth: 800
+ implicitHeight: 800
+ // START svg1047 type: DOC 0
+ Item { // structure node
+ transform: [
+ Scale { xScale: width / 128; yScale: height / 128 }
+ ]
+ objectName: "svg1047"
+ // skipping DEFS "defs1051"
+ // PATH visit path1043 count: 33
+ DemoShape {
+ objectName: "path1043"
+ ShapePath {
+ objectName: "svg_path:path1043"
+ // boundingRect: 4.51543, 20.1148 119.331x70.3352
+ strokeColor: "transparent"
+ fillColor: "#ffe4eaee"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 23.45 62.3 C 24.17 61.58 22.18 53.01 31.05 46.39 C 39.92 39.77 45.97 43.72 46.82 43.43 C 47.66 43.15 51.61 25.83 68.22 21.33 C 84.83 16.83 102.15 25.27 106.23 39.35 C 109.96 52.22 107.07 60.89 107.5 61.45 C 107.92 62.01 115.95 61.73 120.59 69.19 C 125.23 76.65 123.55 81.3 123.55 81.3 L 93.99 90.45 L 46.69 90.45 C 46.69 90.45 5.02 79.47 4.6 77.5 C 4.18 75.53 5.13 69.13 11.92 65.25 C 17.82 61.88 22.18 63.57 23.45 62.3 " }
+ }
+ }
+ // PATH visit path1045 count: 52
+ DemoShape {
+ objectName: "path1045"
+ ShapePath {
+ objectName: "svg_path:path1045"
+ // boundingRect: 4.21403, 74.83 119.62x29.9249
+ strokeColor: "transparent"
+ fillColor: "#ffbacdd2"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 35.16 92.84 C 35.16 92.84 19.38 96.14 8.71 87.88 C 2.29 82.9 4.63 74.83 4.63 74.83 C 4.63 74.83 9.23 79.48 18.52 80.74 C 27.81 82.01 38.23 81.58 38.23 81.58 C 38.23 81.58 40.83 86.02 50.62 88.06 C 62.89 90.61 69.36 84.33 69.36 84.33 C 69.36 84.33 72.72 88.35 84.55 88.63 C 96.38 88.91 103.01 80.65 104.12 80.46 C 104.68 80.37 107.94 83.33 114.4 82.29 C 120.55 81.3 123.79 78.63 123.79 78.63 C 123.79 78.63 124.68 85.25 118.49 89.33 C 113.66 92.51 105.26 92.85 105.26 92.85 C 105.26 92.85 103.98 97.76 98.21 101.33 C 92.85 104.66 83.61 105.77 76.77 103.73 C 68.18 101.17 66.05 97.26 66.05 97.26 C 66.05 97.26 59.65 101.01 49.65 99.74 C 40.2 98.56 35.16 92.84 35.16 92.84 " }
+ }
+ }
+ // PATH visit path1183 count: 61
+ DemoShape {
+ objectName: "path1183"
+ // Scale 0.16, 0.16 Translate 0, 0
+ transform: Scale { xScale: 0.16; yScale: 0.16 }
+ ShapePath {
+ objectName: "svg_path:path1183"
+ // boundingRect: 26.3377, 125.717 747.693x529.001
+ strokeColor: "#000000"
+ strokeWidth: 6.25
+ fillColor: "transparent"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 484.662 125.721 C 465.46 125.608 445.84 128.039 426.375 133.313 C 322.563 161.438 297.875 269.688 292.625 271.438 C 287.313 273.25 249.5 248.563 194.063 289.938 C 138.625 331.313 151.063 384.875 146.563 389.375 C 138.625 397.313 111.375 386.75 74.5 407.813 C 44.2186 425.116 32.5285 450.433 29.2656 467.994 C 29.2126 467.942 28.9375 467.688 28.9375 467.688 C 28.9375 467.688 14.3125 518.125 54.4375 549.25 C 121.125 600.875 219.75 580.25 219.75 580.25 C 219.75 580.25 251.25 616 310.313 623.375 C 372.813 631.313 412.813 607.875 412.813 607.875 C 412.813 607.875 426.125 632.313 479.813 648.313 C 522.563 661.063 580.313 654.125 613.813 633.313 C 649.875 611 657.875 580.313 657.875 580.313 C 657.875 580.313 710.375 578.188 740.563 558.313 C 770.74 538.421 773.978 508.955 773.949 496.918 C 774.565 484.395 772.045 461.952 753.688 432.438 C 724.688 385.813 674.5 387.563 671.875 384.063 C 669.188 380.563 687.25 326.375 663.938 245.938 C 643.219 174.438 567.871 126.207 484.662 125.721 " }
+ }
+ }
+ } // END svg1047 type: DOC 0
+}
diff --git a/examples/quick/quickshapes/weatherforecast/DemoShape.qml b/examples/quick/quickshapes/weatherforecast/DemoShape.qml
new file mode 100644
index 0000000000..e0719d39f9
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/DemoShape.qml
@@ -0,0 +1,12 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Shape {
+ id: item
+ preferredRendererType: mainWindow.preferredRendererType
+ property string svg_id
+ containsMode: Shape.FillContains
+}
diff --git a/examples/quick/quickshapes/weatherforecast/Europe.qml b/examples/quick/quickshapes/weatherforecast/Europe.qml
new file mode 100644
index 0000000000..20a804c28b
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/Europe.qml
@@ -0,0 +1,176 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+Europe_generated {
+ id: map
+ property int containsMode: Shape.FillContains
+
+ property bool zoomedIn: false
+ signal zoomTo(Item child, string name, var childRect, var textRect)
+
+
+property var lookupTable: {
+ "fi" : "Finland"
+ ,"se" : "Sweden"
+ ,"dk" : "Denmark"
+ ,"gb-nir" : "Northern Ireland"
+ ,"gb-main" : "Great Britain"
+ ,"ie" : "Ireland"
+ ,"nl" : "The Netherlands"
+ ,"be" : "Belgium"
+ ,"lu" : "Luxembourg"
+ ,"de" : "Germany"
+ ,"fr" : "France"
+ ,"es" : "Spain"
+ ,"pt" : "Portugal"
+ ,"at" : "Austria"
+ ,"it" : "Italy"
+ ,"gr" : "Greece"
+ ,"ee" : "Estonia"
+ ,"lv" : "Latvia"
+ ,"lt" : "Lithuania"
+ ,"pl" : "Poland"
+ ,"cz" : "Czechia"
+ ,"sk" : "Slovakia"
+ ,"si" : "Slovenia"
+ ,"hu" : "Hungary"
+ ,"ro" : "Romania"
+ ,"bg" : "Bulgaria"
+ ,"cy" : "Cyprus"
+ ,"mt" : "Malta"
+ ,"hr" : "Croatia"
+ ,"ba" : "Bosnia and Herzegovina"
+ ,"me" : "Montenegro"
+ ,"rs" : "Serbia"
+ ,"rs-km" : "Kosovo"
+ ,"mk" : "North Makedonia"
+ ,"al" : "Albania"
+ ,"is" : "Iceland"
+ ,"by" : "Belarus"
+ ,"no" : "Norway"
+ ,"ua" : "Ukraine"
+ ,"ch" : "Switzerland"
+ ,"md" : "Moldova"
+ ,"ad" : "Andorra"
+ ,"mc" : "Monaco"
+ ,"li" : "Liechtenstein"
+ ,"ru-kgd" : "Kaliningrad"
+ ,"im" : "Isle of Man"
+ ,"fo" : "Faroe Islands"
+ }
+
+ property var overrideRects: {
+ "fi": {x: 6616, y: 1996, width: 1920, height: 800, rotation: 65},
+ "no": {x: 4794, y: 1967, width: 3360, height: 680, rotation: -65},
+ "se": {x: 5739, y: 2560, width: 1920, height: 800, rotation: -80},
+ "it": {x: 5734, y: 6483, width: 1680, height: 440, rotation: 45},
+ "pt": {x: 3105, y: 6783, width: 960, height: 320, rotation: -70},
+ "md": {x: 8294, y: 5472, width: 480, height: 200, rotation: 45},
+ "rs": {x: 7233, y: 6168, width: 840, height: 320, rotation: 45},
+ "gb-main": {x: 3943, y: 3998, width: 1800, height: 800, rotation: 75},
+ "ba": {x: 6570, y: 6289, width: 1440, height: 200, rotation: 0},
+ "al": {x: 7312, y: 6830, width: 600, height: 200, rotation: 75},
+ "be": {x: 5237, y: 5126, width: 600, height: 200, rotation: 40},
+ "hr": {x: 6705, y: 6053, width: 840, height: 200, rotation: 0},
+ "at": {x: 6191, y: 5556, width: 1080, height: 440, rotation: -25},
+ "cy": {x: 9509, y: 7497, width: 480, height: 200, rotation: -35},
+ }
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+
+ property Item currentChild: null
+ property color prevColor
+ property color selectedColor: "#dbd6c8"
+
+ acceptedButtons: Qt.LeftButton
+
+ function traverseChildren(item, x, y) {
+ let p = item.mapFromItem(mouseArea, x, y)
+ if (item.objectName) {
+ if (item.contains(p))
+ return item;
+ }
+ for (var i = 0; i < item.children.length; i++) {
+ let r = traverseChildren(item.children[i], x, y)
+ if (r)
+ return r;
+ }
+ return null;
+ }
+
+ function findChild(x, y) {
+ return traverseChildren(map, x, y)
+ }
+
+ function findMatchingPath(node) {
+ if (!node)
+ return null
+ let pathName = "svg_path:" + node.objectName
+ for (var i = 0; i < node.data.length; i++) {
+ let child = node.data[i]
+ if (child.objectName === pathName)
+ return child
+ }
+ return null
+ }
+
+ onPressed: (mouse)=> {
+ if (!map.zoomedIn) {
+ currentChild = findChild(mouse.x, mouse.y)
+ let path = findMatchingPath(currentChild)
+ if (path) {
+ prevColor = path.fillColor
+ path.fillColor = selectedColor
+ currentChild.z = 1
+ }
+ }
+ }
+
+ onPositionChanged: (mouse)=> {
+ if (currentChild) {
+ let localPos = currentChild.mapFromItem(mouseArea, mouse.x, mouse.y)
+ let path = findMatchingPath(currentChild)
+ if (path) {
+ if (currentChild.contains(localPos)) {
+ path.fillColor = selectedColor
+ } else {
+ path.fillColor = prevColor
+ }
+ }
+ }
+ }
+
+ onReleased: (mouse) => {
+ if (map.zoomedIn) {
+ zoomTo(null, null, null, null)
+ zoomedIn = false
+ if (currentChild) {
+ let path = findMatchingPath(currentChild)
+ if (path)
+ path.fillColor = prevColor
+ currentChild.z = 0
+ currentChild = null
+ }
+ } else if (currentChild) {
+ let localPos = currentChild.mapFromItem(mouseArea, mouse.x, mouse.y)
+ if (currentChild.contains(localPos)) {
+ let br = currentChild.boundingRect
+ let rot = 0
+ let or = overrideRects[currentChild.objectName]
+ if (or) {
+ rot = or.rotation
+ let r = currentChild.mapToItem(map, or.x, or.y, or.width, or.height)
+ or = {x: r.x, y: r.y, width: r.width, height: r.height, rotation: rot}
+ }
+ let rect = currentChild.mapToItem(map, br)
+ zoomTo(currentChild, lookupTable[currentChild.objectName], rect, or )
+ zoomedIn = true
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/weatherforecast/Europe_generated.qml b/examples/quick/quickshapes/weatherforecast/Europe_generated.qml
new file mode 100644
index 0000000000..4f03b87e37
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/Europe_generated.qml
@@ -0,0 +1,647 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// Copyright (C) 2010 Kolja21
+// SPDX-License-Identifier: CC-BY-3.0
+// Generated from: assets/Europe.svg
+import QtQuick
+import QtQuick.Shapes
+
+Item {
+ // viewBox 1754, 161 6480.48x6957.59
+ // size 443x455
+ implicitWidth: 443
+ implicitHeight: 455
+ // START Europakarte type: DOC 0
+ Item { // structure node
+ transform: [
+ Translate { x: -1754; y: -161 },
+ Scale { xScale: width / 6480.48; yScale: height / 6957.59 }
+ ]
+ objectName: "Europakarte"
+ // skipping DEFS "defs"
+ // START countries type: G 1
+ Item { // structure node
+ objectName: "countries"
+ // Translate -1630.41, -991.638
+ x: -1630.41
+ y: -991.638
+ // PATH visit fi count: 485
+ DemoShape {
+ objectName: "fi"
+ ShapePath {
+ objectName: "svg_path:fi"
+ // boundingRect: 6920, 1421.37 1086.48x1971.11
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7814.3 3152.63 C 7822.9 3119.67 7850.13 3085.28 7867.33 3056.61 C 7911.75 2977.79 7938.98 2887.5 7969.08 2802.94 C 7992.01 2741.32 7999.18 2725.55 8002.04 2659.63 C 8003.48 2649.59 8009.21 2638.13 8004.91 2628.1 C 7993.44 2595.13 7865.89 2547.84 7832.93 2524.91 C 7828.63 2522.04 7880.22 2443.22 7844.39 2415.99 C 7831.5 2405.96 7804.27 2415.99 7795.67 2401.66 C 7758.4 2337.16 7804.27 2367.26 7792.8 2348.63 C 7775.6 2322.83 7756.97 2342.9 7735.47 2317.1 C 7716.84 2295.6 7729.74 2294.17 7739.77 2274.1 C 7745.51 2261.21 7711.11 2261.21 7711.11 2255.47 C 7712.54 2245.44 7712.54 2193.85 7712.54 2192.41 C 7682.45 2166.62 7718.28 2182.38 7726.88 2172.35 C 7732.61 2163.75 7696.78 2112.16 7692.48 2106.42 C 7668.12 2073.46 7640.89 2034.77 7612.22 2006.1 C 7607.92 2001.8 7584.99 1984.6 7580.69 1976.01 C 7559.19 1935.88 7627.99 1834.12 7600.76 1809.76 C 7593.59 1801.16 7580.69 1801.16 7572.09 1795.43 C 7556.33 1783.96 7549.16 1763.9 7533.4 1753.86 C 7531.96 1753.86 7483.24 1746.7 7481.8 1746.7 C 7473.2 1739.53 7470.34 1728.07 7464.61 1718.04 C 7433.08 1666.44 7470.34 1670.74 7454.57 1633.48 C 7447.41 1616.28 7420.18 1632.05 7425.91 1622.01 C 7433.08 1609.12 7443.11 1600.52 7451.71 1589.05 C 7405.85 1567.55 7466.04 1533.16 7447.41 1501.63 C 7418.74 1451.47 7374.32 1470.1 7337.05 1429.97 L 7335.62 1422.8 C 7334.19 1422.8 7332.75 1422.8 7331.32 1424.24 C 7331.32 1422.8 7329.89 1422.8 7329.89 1421.37 L 7329.89 1424.24 C 7301.22 1429.97 7306.96 1462.93 7282.59 1470.1 C 7261.1 1475.83 7269.7 1445.73 7245.33 1472.96 C 7242.47 1477.26 7245.33 1484.43 7243.9 1490.16 C 7242.47 1491.6 7226.7 1521.69 7226.7 1523.13 C 7222.4 1534.59 7231 1571.85 7232.43 1581.89 C 7232.43 1586.18 7229.57 1589.05 7229.57 1593.35 C 7229.57 1601.95 7231 1609.12 7232.43 1617.71 C 7236.73 1629.18 7246.76 1637.78 7248.2 1649.24 C 7255.36 1699.4 7242.47 1665.01 7225.27 1680.77 C 7205.2 1700.84 7223.83 1706.57 7218.1 1730.93 C 7216.67 1736.67 7210.94 1739.53 7209.5 1745.27 C 7209.5 1746.7 7190.87 1729.5 7188 1728.07 C 7183.71 1725.2 7130.68 1706.57 7126.38 1712.3 C 7120.65 1718.04 7124.95 1729.5 7120.65 1735.23 C 7103.45 1765.33 7080.52 1746.7 7056.15 1751 C 7048.99 1751 7041.82 1755.3 7036.09 1753.86 L 7030.36 1749.57 C 7027.49 1743.83 7027.49 1735.23 7024.62 1729.5 C 7014.59 1712.3 6981.63 1667.87 6964.43 1657.84 C 6927.17 1636.35 6925.74 1666.44 6928.6 1689.37 L 6920 1719.47 C 6920 1719.47 6921.44 1719.47 6921.44 1719.47 L 6920 1720.9 L 6925.74 1728.07 C 6924.3 1730.93 6918.57 1732.37 6925.74 1736.67 C 6950.1 1755.3 6991.66 1789.69 7017.46 1801.16 C 7047.55 1814.06 7071.92 1802.59 7099.15 1829.82 C 7104.88 1834.12 7100.58 1847.02 7106.31 1849.89 C 7110.61 1851.32 7113.48 1844.15 7116.35 1845.59 C 7127.81 1849.89 7132.11 1864.22 7140.71 1872.82 C 7143.58 1875.68 7152.18 1875.68 7150.74 1879.98 C 7134.98 1910.08 7152.18 1911.51 7156.48 1945.91 C 7157.91 1951.64 7152.18 1957.37 7152.18 1963.11 C 7150.74 1964.54 7150.74 1964.54 7150.74 1964.54 C 7150.74 1978.87 7172.24 1967.41 7177.97 1973.14 C 7196.6 1987.47 7166.51 2007.54 7175.11 2021.87 C 7183.71 2041.93 7218.1 2060.56 7220.97 2083.49 C 7222.4 2100.69 7209.5 2155.15 7210.94 2162.32 C 7223.83 2208.18 7255.36 2223.94 7272.56 2261.21 C 7278.29 2251.17 7285.46 2242.57 7305.52 2254.04 C 7315.56 2259.77 7309.82 2279.84 7319.86 2285.57 C 7328.45 2291.3 7339.92 2279.84 7349.95 2282.7 C 7354.25 2282.7 7354.25 2291.3 7357.12 2294.17 C 7365.72 2298.47 7365.72 2281.27 7374.32 2295.6 C 7390.08 2328.56 7378.62 2357.23 7384.35 2371.56 C 7388.65 2384.46 7427.34 2355.79 7410.15 2397.36 C 7405.85 2407.39 7391.51 2404.52 7382.92 2410.25 C 7374.32 2415.99 7364.28 2420.29 7358.55 2428.89 C 7355.69 2431.75 7359.98 2438.92 7357.12 2441.78 C 7354.25 2444.65 7347.09 2437.49 7345.65 2440.35 C 7341.35 2450.38 7339.92 2463.28 7339.92 2474.75 C 7339.92 2481.91 7344.22 2489.08 7341.35 2496.24 C 7339.92 2509.14 7322.72 2514.88 7319.86 2526.34 C 7316.99 2534.94 7324.16 2544.97 7321.29 2552.14 C 7314.12 2567.9 7298.36 2565.04 7296.93 2586.53 C 7295.49 2590.83 7304.09 2595.13 7304.09 2600.87 C 7299.79 2628.1 7261.1 2623.8 7259.66 2648.16 C 7258.23 2658.19 7251.06 2683.99 7249.63 2685.42 C 7243.9 2685.42 7236.73 2671.09 7231 2675.39 C 7218.1 2686.86 7238.17 2715.52 7225.27 2724.12 C 7220.97 2726.98 7212.37 2708.35 7213.8 2714.09 C 7213.8 2721.25 7223.83 2724.12 7226.7 2731.28 C 7239.6 2778.58 7222.4 2747.05 7202.34 2769.98 C 7198.04 2775.71 7206.64 2790.04 7200.9 2790.04 C 7192.3 2788.61 7196.6 2771.41 7189.44 2769.98 C 7177.97 2767.11 7163.64 2771.41 7157.91 2781.44 C 7134.98 2820.14 7183.71 2792.91 7180.84 2815.84 C 7177.97 2830.17 7140.71 2854.54 7139.28 2870.3 C 7132.11 2964.89 7140.71 2867.43 7155.04 2903.26 C 7156.48 2904.7 7142.14 2930.49 7153.61 2937.66 C 7155.04 2939.09 7157.91 2931.93 7159.34 2933.36 C 7162.21 2937.66 7157.91 2947.69 7163.64 2949.13 C 7166.51 2950.56 7160.77 2936.23 7165.07 2936.23 C 7169.37 2934.79 7170.81 2940.53 7172.24 2944.83 C 7180.84 2967.76 7170.81 3005.02 7175.11 3013.62 C 7177.97 3019.35 7186.57 3016.48 7190.87 3020.78 C 7196.6 3027.95 7199.47 3036.55 7203.77 3043.71 C 7205.2 3046.58 7202.34 3050.88 7203.77 3053.75 C 7206.64 3058.05 7212.37 3058.05 7215.23 3060.91 C 7216.67 3062.35 7209.5 3060.91 7209.5 3062.35 C 7208.07 3065.21 7210.94 3068.08 7212.37 3070.94 C 7219.53 3079.54 7235.3 3083.84 7233.87 3093.87 C 7232.43 3102.47 7209.5 3095.31 7208.07 3103.91 C 7205.2 3115.37 7222.4 3122.54 7225.27 3132.57 C 7226.7 3136.87 7219.53 3141.17 7220.97 3146.9 C 7222.4 3149.77 7231 3149.77 7231 3154.07 C 7229.57 3172.7 7215.23 3152.63 7220.97 3168.4 C 7222.4 3174.13 7229.57 3178.43 7228.13 3182.73 C 7226.7 3188.46 7212.37 3181.3 7210.94 3185.6 C 7209.5 3222.86 7225.27 3227.16 7236.73 3242.92 C 7239.6 3245.79 7225.27 3248.66 7228.13 3252.96 C 7229.57 3260.12 7232.43 3265.85 7236.73 3271.59 C 7268.26 3313.15 7243.9 3270.15 7273.99 3264.42 C 7279.73 3264.42 7268.26 3280.19 7273.99 3284.49 C 7282.59 3288.79 7292.63 3281.62 7302.66 3281.62 C 7311.26 3283.05 7315.56 3297.38 7322.72 3297.38 C 7329.89 3297.38 7332.75 3288.79 7338.49 3288.79 C 7341.35 3287.35 7338.49 3293.08 7339.92 3294.52 C 7344.22 3295.95 7347.09 3294.52 7351.39 3293.08 C 7352.82 3291.65 7352.82 3283.05 7354.25 3285.92 C 7368.58 3317.45 7345.65 3323.18 7351.39 3324.61 C 7354.25 3324.61 7387.21 3300.25 7391.51 3297.38 C 7392.95 3295.95 7395.81 3288.79 7397.25 3287.35 C 7390.08 3308.85 7371.45 3333.21 7405.85 3346.11 C 7411.58 3348.98 7423.04 3336.08 7425.91 3341.81 C 7428.78 3350.41 7405.85 3363.31 7414.44 3366.18 C 7423.04 3370.48 7421.61 3346.11 7430.21 3344.68 C 7437.38 3343.25 7431.64 3359.01 7428.78 3364.74 C 7424.48 3371.91 7415.88 3374.78 7408.71 3380.51 C 7405.85 3384.81 7394.38 3394.84 7398.68 3391.97 C 7443.11 3374.78 7425.91 3346.11 7448.84 3331.78 C 7456.01 3327.48 7437.38 3350.41 7444.54 3354.71 C 7454.57 3360.44 7467.47 3353.28 7477.5 3347.55 C 7484.67 3344.68 7487.54 3333.21 7493.27 3328.91 C 7501.87 3321.75 7540.56 3317.45 7544.86 3311.72 C 7549.16 3307.42 7534.83 3300.25 7539.13 3295.95 C 7546.3 3290.22 7557.76 3294.52 7567.79 3293.08 C 7570.66 3293.08 7576.39 3294.52 7577.83 3291.65 C 7580.69 3287.35 7574.96 3281.62 7576.39 3278.75 C 7577.83 3275.89 7577.83 3285.92 7580.69 3287.35 C 7582.13 3288.79 7619.39 3265.85 7622.25 3261.56 C 7623.69 3260.12 7616.52 3231.46 7630.85 3234.33 C 7633.72 3234.33 7686.75 3283.05 7673.85 3230.03 C 7670.98 3219.99 7645.18 3218.56 7649.48 3207.1 C 7652.35 3197.06 7670.98 3202.8 7681.01 3205.66 C 7686.75 3207.1 7686.75 3222.86 7692.48 3219.99 C 7706.81 3209.96 7685.31 3161.23 7702.51 3171.27 C 7716.84 3181.3 7678.15 3217.13 7722.58 3202.8 C 7791.37 3179.86 7732.61 3194.2 7746.94 3172.7 C 7748.37 3171.27 7749.81 3175.57 7752.67 3175.57 C 7755.54 3175.57 7759.84 3175.57 7761.27 3172.7 C 7762.7 3169.83 7756.97 3159.8 7761.27 3159.8 C 7762.7 3159.8 7785.63 3179.86 7792.8 3177 C 7802.83 3174.13 7810 3165.53 7815.73 3158.37 C 7817.16 3158.37 7817.16 3156.93 7817.16 3155.5 L 7814.3 3152.63 " }
+ }
+ }
+ // PATH visit se count: 926
+ DemoShape {
+ objectName: "se"
+ ShapePath {
+ objectName: "svg_path:se"
+ // boundingRect: 6292.28, 1712.3 980.285x2639.89
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 6447.06 4352.19 C 6449.92 4343.6 6444.19 4339.3 6435.59 4335 L 6429.86 4320.66 C 6441.33 4327.83 6459.96 4332.13 6454.22 4345.03 C 6454.22 4347.89 6451.36 4350.76 6447.06 4352.19 M 6452.79 4286.27 C 6472.86 4263.34 6449.92 4264.77 6448.49 4236.11 C 6448.49 4227.51 6457.09 4221.78 6458.52 4213.18 C 6458.52 4210.31 6452.79 4207.44 6451.36 4204.58 C 6432.73 4201.71 6408.36 4195.98 6392.6 4207.44 C 6408.36 4187.38 6435.59 4193.11 6457.09 4197.41 C 6445.63 4178.78 6438.46 4164.45 6441.33 4161.58 C 6447.06 4148.68 6467.12 4177.35 6480.02 4171.62 C 6491.49 4167.32 6451.36 4150.12 6457.09 4138.65 C 6461.39 4128.62 6481.45 4140.09 6485.75 4131.49 C 6492.92 4121.45 6488.62 4107.12 6482.89 4097.09 C 6480.02 4091.36 6471.42 4095.66 6465.69 4094.22 C 6454.22 4089.93 6457.09 4069.86 6448.49 4059.83 C 6442.76 4052.66 6431.29 4052.66 6425.56 4045.5 C 6422.69 4039.76 6426.99 4032.6 6424.13 4026.87 C 6421.26 4019.7 6404.06 3996.77 6404.06 3995.34 C 6404.06 3992.47 6409.8 3991.04 6408.36 3989.6 C 6406.93 3986.74 6401.2 3988.17 6398.33 3986.74 C 6391.16 3981 6385.43 3972.41 6381.13 3965.24 C 6373.97 3952.34 6382.57 3917.95 6372.53 3902.18 C 6369.67 3897.88 6359.63 3903.61 6355.34 3899.31 C 6351.04 3893.58 6352.47 3883.55 6352.47 3874.95 C 6349.6 3853.45 6389.73 3803.29 6371.1 3780.36 C 6345.3 3747.4 6359.63 3836.25 6305.17 3781.79 C 6296.58 3773.2 6310.91 3747.4 6310.91 3737.37 C 6309.47 3720.17 6292.28 3655.68 6292.28 3655.68 C 6298.01 3648.51 6312.34 3661.41 6320.94 3659.98 C 6325.24 3674.31 6330.97 3688.64 6343.87 3670.01 C 6375.4 3625.58 6335.27 3568.25 6343.87 3542.46 C 6346.74 3532.42 6361.07 3530.99 6365.37 3522.39 C 6368.23 3516.66 6365.37 3509.49 6362.5 3503.76 C 6362.5 3499.46 6355.34 3498.03 6356.77 3495.16 C 6359.63 3485.13 6405.5 3482.26 6418.39 3449.3 L 6416.96 3407.74 C 6432.73 3326.05 6395.46 3341.81 6388.3 3280.19 C 6386.87 3265.85 6415.53 3273.02 6426.99 3262.99 L 6442.76 3205.66 C 6437.03 3169.83 6382.57 3172.7 6373.97 3139.74 C 6366.8 3109.64 6389.73 3069.51 6386.87 3037.98 C 6384 3016.48 6361.07 2997.85 6359.63 2976.36 C 6358.2 2967.76 6365.37 2957.72 6365.37 2949.13 C 6363.93 2939.09 6358.2 2930.49 6359.63 2920.46 C 6359.63 2911.86 6369.67 2906.13 6369.67 2897.53 C 6369.67 2724.12 6348.17 3025.08 6348.17 2851.67 C 6348.17 2835.91 6368.23 2825.87 6369.67 2810.11 C 6371.1 2804.38 6362.5 2798.64 6363.93 2791.48 C 6368.23 2768.55 6399.76 2719.82 6418.39 2708.35 C 6477.15 2671.09 6515.85 2738.45 6525.88 2671.09 C 6535.91 2600.87 6475.72 2615.2 6484.32 2589.4 C 6497.22 2549.27 6517.28 2509.14 6530.18 2470.45 C 6531.61 2464.72 6538.78 2463.28 6540.21 2457.55 L 6535.91 2404.52 C 6535.91 2403.09 6543.08 2360.09 6543.08 2360.09 L 6528.75 2304.2 C 6534.48 2291.3 6557.41 2304.2 6568.88 2298.47 L 6600.41 2271.24 C 6604.71 2258.34 6586.08 2246.87 6588.94 2233.98 C 6597.54 2208.18 6644.83 2152.29 6653.43 2127.92 C 6669.2 2089.23 6631.94 2086.36 6626.2 2054.83 C 6621.9 2029.03 6637.67 2044.8 6646.27 2034.77 C 6657.73 2020.43 6657.73 2000.37 6660.6 1984.6 C 6662.03 1973.14 6689.26 1922.98 6697.86 1922.98 L 6743.72 1943.04 C 6772.39 1931.58 6736.56 1849.89 6745.16 1838.42 C 6765.22 1812.62 6864.11 1861.35 6877.01 1852.75 C 6924.3 1822.66 6874.14 1825.52 6872.71 1812.62 C 6868.41 1795.43 6892.77 1782.53 6892.77 1765.33 C 6892.77 1755.3 6889.91 1745.27 6885.61 1736.67 C 6881.31 1729.5 6862.68 1725.2 6866.98 1718.04 C 6872.71 1708 6888.47 1715.17 6899.94 1712.3 L 6902.8 1712.3 C 6907.1 1715.17 6914.27 1715.17 6920 1719.47 C 6937.2 1730.93 6914.27 1729.5 6925.74 1736.67 C 6950.1 1755.3 6991.66 1789.69 7017.46 1801.16 C 7047.55 1814.06 7071.92 1802.59 7099.15 1829.82 C 7104.88 1834.12 7100.58 1847.02 7106.31 1849.89 C 7110.61 1851.32 7113.48 1844.15 7116.35 1845.59 C 7127.81 1849.89 7132.11 1864.22 7140.71 1872.82 C 7143.58 1875.68 7152.18 1875.68 7150.74 1879.98 C 7134.98 1910.08 7152.18 1911.51 7156.48 1945.91 C 7157.91 1951.64 7152.18 1957.37 7152.18 1963.11 C 7149.31 1980.31 7170.81 1967.41 7177.97 1973.14 C 7196.6 1987.47 7166.51 2007.54 7175.11 2021.87 C 7183.71 2041.93 7218.1 2060.56 7220.97 2083.49 C 7222.4 2100.69 7209.5 2155.15 7210.94 2162.32 C 7223.83 2208.18 7255.36 2223.94 7272.56 2261.21 C 7268.26 2266.94 7263.96 2274.1 7258.23 2276.97 C 7252.5 2279.84 7248.2 2265.51 7241.03 2266.94 C 7238.17 2268.37 7236.73 2275.54 7233.87 2275.54 C 7222.4 2276.97 7209.5 2266.94 7199.47 2272.67 C 7192.3 2276.97 7203.77 2294.17 7196.6 2298.47 C 7166.51 2317.1 7156.48 2282.7 7134.98 2278.4 C 7132.11 2278.4 7137.84 2287 7137.84 2291.3 C 7137.84 2294.17 7139.28 2297.03 7137.84 2299.9 C 7136.41 2309.93 7127.81 2318.53 7130.68 2327.13 C 7130.68 2328.56 7131.71 2330.54 7130.1 2330.49 C 7123.87 2330.33 7113.48 2327.13 7104.88 2322.83 C 7100.58 2321.4 7096.28 2309.93 7094.85 2314.23 C 7091.98 2330 7130.68 2324.26 7133.54 2340.03 C 7136.41 2348.63 7116.35 2342.9 7107.75 2347.2 C 7106.31 2348.63 7112.05 2348.63 7114.91 2348.63 C 7116.35 2350.06 7132.11 2360.09 7123.51 2367.26 C 7122.08 2368.69 7120.65 2360.09 7117.78 2361.53 C 7116.35 2362.96 7122.08 2368.69 7119.21 2370.13 C 7107.75 2377.29 7074.78 2370.13 7069.05 2391.62 C 7069.05 2395.92 7077.65 2391.62 7080.52 2393.06 C 7090.55 2400.22 7099.15 2410.25 7103.45 2421.72 C 7112.05 2447.52 7069.05 2458.98 7067.62 2487.65 C 7066.19 2522.04 7113.48 2524.91 7124.95 2550.71 C 7126.38 2552.14 7096.28 2589.4 7090.55 2602.3 C 7081.95 2619.5 7079.08 2689.72 7061.89 2692.59 C 7059.02 2692.59 7059.02 2682.56 7056.15 2683.99 C 7046.12 2685.42 7060.45 2708.35 7050.42 2712.65 C 7046.12 2715.52 7047.55 2695.45 7043.25 2698.32 C 7041.82 2698.32 7041.82 2699.75 7041.82 2701.19 L 7040.39 2701.19 C 7037.52 2705.49 7043.25 2714.09 7038.96 2716.95 C 7034.66 2722.69 7017.46 2719.82 7013.16 2728.42 C 7008.86 2734.15 7010.29 2745.62 7003.13 2748.48 C 6994.53 2751.35 6981.63 2735.58 6975.9 2742.75 C 6970.16 2751.35 6991.66 2762.81 6987.36 2772.85 C 6983.06 2780.01 6973.03 2758.51 6967.3 2762.81 C 6960.13 2768.55 6968.73 2780.01 6967.3 2788.61 C 6965.86 2798.64 6964.43 2812.97 6954.4 2818.71 C 6945.8 2823.01 6935.77 2808.67 6925.74 2810.11 C 6920 2810.11 6938.63 2814.41 6940.07 2820.14 C 6941.5 2823.01 6934.33 2824.44 6931.47 2824.44 C 6928.6 2824.44 6935.77 2817.27 6932.9 2814.41 C 6930.03 2812.97 6924.3 2812.97 6922.87 2815.84 C 6921.44 2820.14 6931.47 2824.44 6928.6 2828.74 C 6925.74 2831.61 6917.14 2823.01 6912.84 2827.31 C 6909.97 2830.17 6920 2831.61 6921.44 2835.91 C 6921.44 2837.34 6915.7 2834.47 6914.27 2835.91 C 6911.4 2841.64 6914.27 2851.67 6909.97 2855.97 C 6904.24 2861.7 6882.74 2857.4 6888.47 2861.7 C 6897.07 2868.87 6922.87 2857.4 6920 2867.43 C 6915.7 2878.9 6902.8 2886.07 6895.64 2896.1 C 6892.77 2898.96 6889.91 2904.7 6885.61 2906.13 C 6881.31 2907.56 6872.71 2906.13 6872.71 2901.83 C 6874.14 2897.53 6884.17 2900.4 6885.61 2896.1 C 6889.91 2887.5 6874.14 2898.96 6868.41 2900.4 C 6869.84 2904.7 6872.71 2909 6875.57 2913.3 C 6879.87 2923.33 6887.04 2950.56 6875.57 2947.69 C 6872.71 2947.69 6874.14 2933.36 6871.28 2936.23 C 6866.98 2943.39 6872.71 2954.86 6866.98 2962.02 C 6865.54 2966.32 6858.38 2960.59 6854.08 2960.59 C 6844.04 2962.02 6831.15 2960.59 6822.55 2966.32 C 6799.62 2983.52 6838.31 2990.69 6855.51 3010.75 C 6856.94 3012.18 6849.78 3013.62 6848.34 3012.18 C 6848.34 3010.75 6844.04 3010.75 6844.04 3012.18 C 6842.61 3023.65 6845.48 3035.12 6844.04 3046.58 C 6842.61 3053.75 6836.88 3059.48 6835.45 3066.64 C 6834.01 3075.24 6834.01 3083.84 6836.88 3092.44 C 6836.88 3093.87 6841.18 3089.58 6842.61 3091.01 C 6848.34 3101.04 6864.11 3115.37 6855.51 3123.97 C 6846.91 3132.57 6834.01 3108.21 6822.55 3112.51 C 6789.58 3123.97 6845.48 3154.07 6841.18 3185.6 C 6841.18 3191.33 6826.85 3182.73 6826.85 3187.03 C 6825.41 3194.2 6836.88 3195.63 6838.31 3201.36 C 6839.75 3204.23 6832.58 3202.8 6832.58 3205.66 C 6832.58 3211.39 6832.58 3218.56 6835.45 3224.29 C 6836.88 3230.03 6835.45 3237.19 6838.31 3242.92 C 6839.75 3245.79 6845.48 3240.06 6845.48 3242.92 C 6846.91 3244.36 6839.75 3244.36 6838.31 3245.79 C 6836.88 3248.66 6836.88 3252.96 6838.31 3255.82 C 6841.18 3262.99 6851.21 3267.29 6852.64 3275.89 C 6854.08 3284.49 6845.48 3293.08 6846.91 3301.68 C 6846.91 3304.55 6851.21 3300.25 6854.08 3301.68 C 6858.38 3303.12 6855.51 3313.15 6859.81 3313.15 C 6875.57 3313.15 6905.67 3304.55 6920 3313.15 C 6925.74 3316.02 6920 3326.05 6922.87 3331.78 C 6927.17 3340.38 6935.77 3346.11 6944.37 3351.84 C 6945.8 3353.28 6951.53 3347.55 6952.97 3350.41 C 6955.83 3353.28 6948.67 3359.01 6951.53 3360.44 C 6952.97 3360.44 7026.06 3331.78 6987.36 3374.78 C 6981.63 3381.94 6968.73 3361.88 6960.13 3364.74 C 6952.97 3367.61 6970.16 3373.34 6974.46 3379.07 C 6980.2 3387.67 6981.63 3400.57 6990.23 3406.3 C 6994.53 3407.74 6997.39 3391.97 7003.13 3394.84 C 7010.29 3397.71 7005.99 3410.6 7011.73 3414.9 C 7033.22 3439.27 7048.99 3423.5 7044.69 3462.2 C 7043.25 3476.53 7030.36 3460.77 7028.92 3460.77 C 7021.76 3462.2 7020.32 3470.8 7014.59 3475.1 C 7001.69 3489.43 7014.59 3502.33 6974.46 3520.96 C 6973.03 3522.39 6981.63 3535.29 6981.63 3536.72 C 6978.76 3541.02 6971.6 3533.86 6965.86 3535.29 C 6955.83 3536.72 6945.8 3545.32 6934.33 3545.32 C 6922.87 3545.32 6932.9 3523.82 6932.9 3513.79 C 6934.33 3503.76 6925.74 3505.19 6921.44 3499.46 C 6921.44 3498.03 6922.87 3495.16 6921.44 3492.29 C 6915.7 3483.7 6914.27 3470.8 6904.24 3466.5 C 6897.07 3463.63 6887.04 3470.8 6882.74 3477.96 C 6881.31 3482.26 6894.21 3476.53 6895.64 3479.4 C 6901.37 3489.43 6897.07 3502.33 6902.8 3510.93 C 6907.1 3518.09 6928.6 3516.66 6924.3 3523.82 C 6907.1 3556.79 6865.54 3506.63 6856.94 3509.49 C 6845.48 3512.36 6839.75 3528.12 6826.85 3528.12 C 6818.25 3528.12 6816.81 3509.49 6808.22 3510.93 C 6801.05 3512.36 6808.22 3526.69 6803.92 3533.86 C 6802.48 3536.72 6798.18 3530.99 6793.88 3530.99 C 6782.42 3532.42 6769.52 3532.42 6759.49 3538.16 C 6756.62 3539.59 6763.79 3543.89 6766.65 3546.76 C 6778.12 3553.92 6792.45 3542.46 6801.05 3539.59 C 6815.38 3538.16 6829.71 3556.79 6842.61 3552.49 C 6848.34 3549.62 6831.15 3532.42 6838.31 3533.86 C 6846.91 3533.86 6849.78 3549.62 6858.38 3553.92 C 6866.98 3556.79 6879.87 3546.76 6887.04 3553.92 C 6891.34 3558.22 6875.57 3566.82 6878.44 3573.99 C 6881.31 3578.28 6892.77 3575.42 6897.07 3571.12 C 6899.94 3568.25 6888.47 3561.09 6891.34 3559.65 C 6898.51 3556.79 6904.24 3565.39 6909.97 3566.82 C 6921.44 3569.69 6931.47 3576.85 6941.5 3572.55 C 6948.67 3569.69 6942.93 3553.92 6948.67 3549.62 C 6955.83 3545.32 6965.86 3553.92 6973.03 3549.62 C 6983.06 3545.32 6984.5 3526.69 6995.96 3525.26 C 7004.56 3523.82 7018.89 3538.16 7014.59 3545.32 C 7007.43 3555.35 6990.23 3545.32 6978.76 3549.62 C 6977.33 3549.62 6981.63 3553.92 6983.06 3555.35 C 6987.36 3563.95 6995.96 3572.55 6995.96 3582.58 C 6997.39 3585.45 6988.79 3581.15 6985.93 3584.02 C 6975.9 3589.75 6964.43 3595.48 6958.7 3605.52 C 6952.97 3615.55 6957.26 3628.45 6952.97 3638.48 C 6950.1 3644.21 6945.8 3616.98 6938.63 3619.85 C 6934.33 3622.71 6945.8 3638.48 6941.5 3635.61 C 6927.17 3629.88 6947.23 3581.15 6924.3 3584.02 C 6924.3 3584.02 6928.6 3647.08 6902.8 3665.71 C 6894.21 3671.44 6881.31 3667.14 6871.28 3668.57 C 6866.98 3670.01 6882.74 3672.87 6882.74 3677.17 C 6888.47 3694.37 6866.98 3682.91 6864.11 3685.77 C 6861.24 3687.21 6872.71 3687.21 6872.71 3691.51 C 6874.14 3692.94 6868.41 3690.07 6865.54 3691.51 C 6864.11 3692.94 6862.68 3695.8 6861.24 3695.8 C 6858.38 3695.8 6785.29 3685.77 6791.02 3698.67 C 6792.45 3701.54 6796.75 3701.54 6801.05 3701.54 C 6802.48 3701.54 6803.92 3697.24 6805.35 3697.24 C 6808.22 3698.67 6808.22 3707.27 6812.52 3705.84 C 6815.38 3705.84 6811.08 3697.24 6815.38 3697.24 C 6838.31 3691.51 6856.94 3697.24 6866.98 3720.17 C 6866.98 3723.03 6859.81 3718.74 6858.38 3720.17 C 6852.64 3725.9 6865.54 3734.5 6849.78 3734.5 C 6838.31 3734.5 6823.98 3718.74 6816.81 3727.33 C 6809.65 3735.93 6838.31 3731.63 6846.91 3737.37 C 6852.64 3741.67 6864.11 3767.46 6859.81 3774.63 C 6856.94 3780.36 6842.61 3770.33 6841.18 3776.06 C 6839.75 3783.23 6871.28 3821.92 6861.24 3834.82 C 6854.08 3843.42 6836.88 3830.52 6826.85 3834.82 C 6822.55 3834.82 6828.28 3840.55 6831.15 3843.42 C 6836.88 3850.59 6859.81 3857.75 6859.81 3869.22 C 6859.81 3879.25 6841.18 3884.98 6842.61 3896.45 C 6842.61 3905.05 6856.94 3905.05 6862.68 3912.21 C 6864.11 3915.08 6856.94 3915.08 6855.51 3916.51 C 6849.78 3926.54 6844.04 3938.01 6842.61 3949.47 C 6839.75 3958.07 6859.81 3989.6 6858.38 3992.47 C 6855.51 3995.34 6848.34 3989.6 6844.04 3993.9 C 6832.58 4005.37 6856.94 4028.3 6852.64 4046.93 C 6852.64 4051.23 6841.18 4046.93 6839.75 4051.23 C 6836.88 4055.53 6846.91 4061.26 6844.04 4065.56 C 6828.28 4112.86 6835.45 4031.17 6828.28 4079.89 C 6823.98 4109.99 6822.55 4157.28 6798.18 4180.21 C 6796.75 4181.65 6792.45 4180.21 6791.02 4177.35 C 6791.02 4174.48 6795.32 4171.62 6793.88 4168.75 C 6793.88 4164.45 6769.52 4167.32 6769.52 4167.32 C 6768.09 4165.88 6772.39 4160.15 6770.95 4160.15 C 6756.62 4161.58 6755.19 4168.75 6748.02 4175.91 C 6735.12 4185.95 6743.72 4164.45 6739.42 4165.88 C 6729.39 4171.62 6716.49 4174.48 6713.63 4174.48 C 6706.46 4175.91 6700.73 4173.05 6693.56 4173.05 C 6687.83 4173.05 6679.23 4168.75 6677.8 4174.48 C 6674.93 4183.08 6690.7 4191.68 6686.4 4198.85 C 6679.23 4206.01 6666.33 4197.41 6656.3 4200.28 C 6647.7 4203.15 6646.27 4213.18 6641.97 4220.34 C 6604.71 4274.8 6652 4257.61 6650.57 4294.87 C 6649.13 4306.33 6641.97 4316.37 6633.37 4324.96 C 6626.2 4332.13 6603.27 4317.8 6598.97 4317.8 C 6564.58 4314.93 6574.61 4339.3 6538.78 4339.3 C 6527.32 4339.3 6517.28 4332.13 6507.25 4330.7 C 6501.52 4330.7 6492.92 4335 6487.19 4332.13 C 6477.15 4326.4 6502.95 4322.1 6502.95 4322.1 C 6502.95 4313.5 6494.35 4306.33 6495.79 4297.73 C 6495.79 4289.14 6507.25 4284.84 6510.12 4277.67 C 6510.12 4277.67 6484.32 4241.84 6464.26 4210.31 C 6462.82 4216.04 6455.66 4221.78 6455.66 4228.94 C 6457.09 4259.04 6485.75 4256.17 6454.22 4284.84 C 6454.22 4286.27 6454.22 4286.27 6452.79 4286.27 M 6901.37 3930.84 C 6904.24 3926.54 6909.97 3927.98 6914.27 3926.54 C 6904.24 3949.47 6884.17 4048.36 6879.87 4078.46 C 6878.44 4085.63 6884.17 4141.52 6865.54 4142.95 C 6862.68 4142.95 6856.94 4078.46 6856.94 4074.16 C 6859.81 4032.6 6888.47 4011.1 6895.64 3972.41 C 6898.51 3955.21 6888.47 3948.04 6901.37 3930.84 M 7094.85 3892.15 C 7094.85 3900.75 7083.38 3902.18 7077.65 3907.91 C 7059.02 3929.41 7091.98 3913.65 7064.75 3935.14 C 7043.25 3950.91 7056.15 3950.91 7044.69 3972.41 C 7040.39 3979.57 7030.36 4001.07 7026.06 3992.47 C 7021.76 3983.87 7033.22 3972.41 7037.52 3962.37 C 7036.09 3963.81 7034.66 3966.67 7033.22 3966.67 C 7031.79 3966.67 7031.79 3962.37 7031.79 3960.94 C 7030.36 3950.91 7016.02 3933.71 7016.02 3930.84 C 7016.02 3922.24 7021.76 3913.65 7021.76 3905.05 C 7020.32 3895.01 7011.73 3887.85 7011.73 3877.82 C 7010.29 3870.65 7053.29 3801.86 7059.02 3798.99 C 7069.05 3794.69 7080.52 3798.99 7090.55 3797.56 C 7106.31 3820.49 7087.68 3823.36 7074.78 3853.45 C 7059.02 3890.72 7094.85 3879.25 7094.85 3892.15 M 7044.69 2716.95 C 7044.69 2719.82 7044.69 2715.52 7043.25 2711.22 C 7044.69 2712.65 7044.69 2715.52 7044.69 2716.95 M 6404.06 4257.61 L 6402.63 4253.31 C 6402.63 4244.71 6399.76 4238.97 6395.46 4236.11 L 6394.03 4230.38 C 6396.9 4230.38 6399.76 4231.81 6401.2 4234.67 C 6402.63 4240.41 6404.06 4249.01 6404.06 4257.61 " }
+ }
+ }
+ // PATH visit dk count: 398
+ DemoShape {
+ objectName: "dk"
+ ShapePath {
+ objectName: "svg_path:dk"
+ // boundingRect: 5979.04, 3895.01 481.94x581.976
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 6123.16 4443.92 C 6104.53 4441.05 6085.9 4431.02 6067.27 4428.15 C 6062.97 4428.15 6045.77 4429.59 6035.74 4428.15 C 6035.74 4420.99 6035.74 4413.82 6037.17 4405.22 C 6037.17 4398.06 6048.64 4389.46 6042.91 4383.72 C 6048.64 4376.56 6040.04 4365.09 6040.04 4355.06 C 6038.61 4346.46 6042.91 4333.56 6037.17 4327.83 C 6024.27 4314.93 5987.01 4329.26 5979.85 4303.47 C 5975.55 4287.7 5989.88 4270.5 5989.88 4251.87 L 5992.74 4254.74 C 6037.17 4276.24 6008.51 4218.91 6005.64 4213.18 C 6004.21 4210.31 6002.78 4201.71 5998.48 4204.58 C 5991.31 4207.44 5992.74 4220.34 5985.58 4221.78 C 5981.28 4223.21 5984.15 4211.74 5984.15 4207.44 C 5985.58 4197.41 5988.45 4187.38 5988.45 4178.78 C 5989.88 4170.18 5981.28 4158.72 5988.45 4152.98 C 5989.88 4151.55 5992.74 4150.12 5994.18 4150.12 C 5992.74 4147.25 5987.01 4085.63 6001.34 4091.36 C 6009.94 4094.22 6004.21 4108.56 6008.51 4115.72 C 6021.41 4145.82 6083.03 4071.29 6085.9 4071.29 C 6116 4062.69 6081.6 4109.99 6087.33 4117.16 C 6093.07 4124.32 6104.53 4118.59 6114.56 4115.72 C 6111.7 4115.72 6110.26 4115.72 6110.26 4114.29 C 6107.4 4107.12 6116 4098.52 6111.7 4092.79 C 6108.83 4088.49 6100.23 4099.96 6098.8 4095.66 C 6095.93 4089.93 6107.4 4085.63 6107.4 4079.89 C 6108.83 4046.93 6087.33 4056.96 6114.56 4036.9 C 6120.3 4031.17 6137.49 4032.6 6141.79 4036.9 C 6144.66 4039.76 6137.49 4052.66 6140.36 4049.8 C 6146.09 4044.06 6146.09 4031.17 6153.26 4026.87 C 6158.99 4024 6166.16 4026.87 6171.89 4026.87 C 6179.06 4031.17 6213.45 4039.76 6213.45 4039.76 C 6216.32 4048.36 6209.15 4058.4 6210.59 4068.43 C 6210.59 4075.59 6222.05 4082.76 6219.18 4089.93 C 6216.32 4095.66 6206.29 4088.49 6200.55 4089.93 C 6191.95 4091.36 6222.05 4097.09 6220.62 4105.69 C 6220.62 4108.56 6219.18 4109.99 6219.18 4111.42 C 6224.92 4112.86 6226.35 4125.75 6233.52 4127.19 C 6250.71 4131.49 6276.51 4107.12 6283.68 4140.09 C 6286.54 4151.55 6252.15 4208.88 6240.68 4203.15 C 6230.65 4197.41 6230.65 4178.78 6219.18 4174.48 C 6206.29 4170.18 6207.72 4244.71 6203.42 4253.31 C 6196.25 4271.94 6184.79 4284.84 6164.72 4284.84 C 6154.69 4284.84 6133.19 4269.07 6136.06 4279.1 C 6140.36 4289.13 6163.29 4283.4 6169.02 4294.87 L 6169.02 4299.17 L 6171.89 4299.17 C 6177.62 4299.17 6179.06 4309.2 6183.36 4309.2 C 6199.12 4304.9 6210.59 4280.54 6226.35 4286.27 C 6234.95 4290.57 6239.25 4303.47 6249.28 4304.9 C 6255.01 4306.33 6256.45 4296.3 6260.75 4293.43 C 6286.54 4346.46 6255.01 4300.6 6265.05 4320.66 C 6273.64 4336.43 6300.88 4402.36 6247.85 4396.62 C 6236.38 4395.19 6226.35 4386.59 6214.89 4383.72 C 6210.59 4383.72 6203.42 4390.89 6199.12 4386.59 C 6187.65 4377.99 6227.78 4380.86 6204.85 4367.96 C 6169.02 4349.33 6204.85 4380.86 6193.39 4380.86 C 6189.09 4380.86 6179.06 4337.86 6179.06 4336.43 C 6174.76 4326.4 6160.42 4320.66 6157.56 4309.2 C 6157.56 4307.77 6158.99 4307.77 6158.99 4307.77 C 6147.53 4312.07 6131.76 4314.93 6131.76 4316.37 C 6128.9 4322.1 6146.09 4316.37 6148.96 4322.1 C 6150.39 4326.4 6140.36 4327.83 6140.36 4332.13 C 6138.93 4340.73 6140.36 4349.33 6143.23 4356.49 C 6144.66 4360.79 6151.83 4362.23 6151.83 4366.53 C 6151.83 4382.29 6126.03 4388.02 6123.16 4403.79 C 6123.16 4409.52 6134.63 4400.92 6138.93 4403.79 C 6148.96 4410.95 6157.56 4420.99 6158.99 4432.45 C 6160.42 4438.18 6148.96 4420.99 6143.23 4422.42 C 6136.06 4425.29 6127.46 4438.18 6123.16 4443.92 M 6394.03 4206.01 L 6394.03 4207.44 C 6409.8 4195.98 6434.16 4201.71 6451.36 4204.58 C 6452.79 4207.44 6458.52 4210.31 6458.52 4213.18 C 6457.09 4221.78 6448.49 4227.51 6448.49 4236.11 C 6449.92 4264.77 6472.86 4263.34 6452.79 4286.27 C 6445.63 4293.43 6434.16 4294.87 6426.99 4302.03 C 6414.1 4316.37 6429.86 4320.66 6442.76 4327.83 L 6451.36 4349.33 C 6439.89 4359.36 6408.36 4355.06 6408.36 4367.96 C 6409.8 4383.72 6444.19 4405.22 6408.36 4406.65 C 6395.46 4406.65 6385.43 4398.06 6373.97 4392.32 C 6379.7 4395.19 6386.87 4398.06 6388.3 4393.76 C 6391.16 4383.72 6382.57 4372.26 6375.4 4363.66 C 6372.53 4360.79 6371.1 4369.39 6368.23 4369.39 C 6359.64 4369.39 6353.9 4362.23 6346.74 4360.79 C 6339.57 4359.36 6332.4 4365.09 6326.67 4363.66 C 6323.81 4363.66 6323.81 4359.36 6323.81 4357.93 C 6332.4 4335 6306.61 4340.73 6308.04 4336.43 C 6309.47 4330.7 6319.51 4332.13 6320.94 4326.4 C 6326.67 4284.84 6313.77 4296.3 6290.84 4276.24 C 6287.98 4273.37 6279.38 4266.2 6283.68 4264.77 C 6296.58 4257.61 6365.37 4273.37 6352.47 4228.94 C 6349.6 4218.91 6333.84 4221.78 6325.24 4216.04 C 6320.94 4213.18 6335.27 4218.91 6339.57 4218.91 C 6346.74 4221.78 6353.9 4224.64 6361.07 4224.64 C 6382.57 4224.64 6416.96 4214.61 6409.8 4259.04 C 6408.36 4266.2 6389.73 4273.37 6395.46 4277.67 C 6421.26 4299.17 6412.66 4247.57 6408.36 4227.51 C 6406.93 4218.91 6384 4226.08 6386.87 4218.91 C 6388.3 4213.18 6391.16 4210.31 6394.03 4206.01 M 6422.69 4435.32 L 6415.53 4435.32 L 6415.53 4438.18 C 6416.96 4441.05 6415.53 4442.48 6415.53 4443.92 C 6411.23 4446.78 6405.5 4451.08 6404.06 4453.95 C 6399.76 4456.82 6396.9 4459.68 6395.46 4463.98 L 6394.03 4465.41 L 6394.03 4466.85 L 6394.03 4463.98 C 6385.43 4463.98 6375.4 4462.55 6371.1 4463.98 C 6363.93 4465.41 6358.2 4478.31 6349.6 4476.88 C 6338.14 4475.45 6332.4 4461.12 6322.37 4455.38 C 6315.21 4451.08 6305.17 4448.22 6299.44 4442.48 C 6295.14 4439.62 6310.91 4436.75 6325.24 4410.95 C 6345.3 4428.15 6375.4 4432.45 6392.6 4446.78 L 6394.03 4448.22 C 6385.43 4435.32 6366.8 4425.29 6373.97 4413.82 C 6376.83 4408.09 6385.43 4410.95 6389.73 4409.52 C 6399.76 4419.55 6421.26 4418.12 6424.13 4431.02 C 6424.13 4432.45 6424.13 4433.88 6422.69 4435.32 M 5989.88 4226.08 L 5989.88 4237.54 C 5988.45 4228.94 5988.45 4220.34 5989.88 4226.08 M 6240.68 3952.34 C 6244.98 3968.11 6230.65 4045.5 6204.85 4036.9 C 6196.25 4034.03 6189.09 4024 6179.06 4024 C 6189.09 4011.1 6146.09 4021.13 6134.63 4024 C 6124.6 4026.87 6116 4035.46 6105.96 4036.9 C 6101.67 4036.9 6098.8 4029.73 6094.5 4029.73 C 6083.03 4028.3 6071.57 4029.73 6061.54 4032.6 C 6057.24 4034.03 6060.1 4042.63 6055.8 4045.5 C 6035.74 4054.1 6057.24 3996.77 6028.57 4072.73 C 6027.14 4074.16 6035.74 4114.29 6034.31 4114.29 C 5987.01 4112.86 6012.81 4024 6040.04 4013.97 C 6064.4 4002.5 6098.8 4015.4 6123.16 4005.37 C 6156.13 3989.6 6148.96 3943.74 6179.06 3926.54 C 6189.09 3922.24 6201.99 3925.11 6212.02 3920.81 C 6222.05 3915.08 6227.78 3895.01 6239.25 3895.01 C 6260.75 3895.01 6227.78 3910.78 6226.35 3923.68 C 6223.48 3943.74 6233.52 3930.84 6240.68 3952.34 M 6372.53 4439.62 L 6359.64 4441.05 C 6369.67 4443.92 6378.27 4448.22 6385.43 4455.38 L 6386.87 4455.38 C 6382.57 4449.65 6376.83 4445.35 6372.53 4439.62 " }
+ }
+ }
+ // START gb type: G 1
+ Item { // structure node
+ objectName: "gb"
+ // PATH visit gb-nir count: 74
+ DemoShape {
+ objectName: "gb-nir"
+ // Translate -2.36538e-05, 0
+ x: -2.36538e-05
+ y: 0
+ ShapePath {
+ objectName: "svg_path:gb-nir"
+ // boundingRect: 4213.87, 4152.48 293.249x235.614
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 4338.97 4169.72 C 4343.27 4175.45 4349 4179.75 4354.73 4176.88 C 4363.33 4172.58 4366.2 4158.25 4374.8 4153.95 C 4383.4 4148.22 4393.43 4161.12 4402.03 4159.69 C 4412.06 4159.69 4419.23 4152.52 4427.82 4153.95 C 4437.86 4155.39 4443.59 4165.42 4452.19 4168.29 C 4456.49 4171.15 4465.09 4165.42 4466.52 4169.72 C 4472.25 4179.75 4475.12 4194.08 4472.25 4205.55 C 4472.25 4209.85 4466.52 4211.28 4466.52 4214.15 C 4482.28 4275.77 4475.12 4195.52 4492.32 4249.98 C 4498.05 4265.74 4460.79 4287.24 4460.79 4287.24 C 4485.15 4281.51 4510.95 4262.87 4506.65 4320.2 C 4500.92 4376.09 4460.79 4346 4449.32 4358.9 C 4439.29 4368.93 4446.46 4391.86 4420.66 4387.56 C 4414.93 4387.56 4410.63 4381.83 4406.33 4377.53 L 4400.59 4370.36 C 4379.1 4357.46 4409.19 4390.43 4360.47 4373.23 C 4353.3 4371.8 4363.33 4358.9 4366.2 4351.73 C 4367.63 4341.7 4353.3 4344.56 4350.43 4338.83 C 4343.27 4324.5 4350.43 4290.1 4334.67 4292.97 C 4273.04 4301.57 4351.87 4330.23 4285.94 4335.97 C 4264.44 4337.4 4208.55 4262.87 4214.28 4255.71 C 4215.72 4255.71 4271.61 4241.38 4271.61 4241.38 C 4274.48 4232.78 4255.84 4228.48 4254.41 4219.88 C 4251.54 4211.28 4288.81 4222.75 4293.11 4219.88 C 4316.04 4205.55 4307.44 4169.72 4338.97 4169.72 " }
+ }
+ }
+ // PATH visit gb-main count: 901
+ DemoShape {
+ objectName: "gb-main"
+ ShapePath {
+ objectName: "svg_path:gb-main"
+ // boundingRect: 4309.6, 3292.84 941.871x1863.96
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 4586.2 4531.94 C 4611.99 4552.01 4633.49 4563.47 4606.26 4576.37 M 4590.5 4583.54 C 4586.2 4586.4 4581.9 4587.84 4577.6 4587.84 C 4573.3 4587.84 4581.9 4582.1 4580.46 4579.24 C 4571.87 4549.14 4550.37 4543.41 4586.2 4531.94 M 4733.81 3558.82 C 4742.41 3563.12 4761.04 3571.72 4762.48 3581.75 C 4762.48 3588.92 4742.41 3601.82 4748.14 3597.52 C 4756.74 3591.79 4759.61 3574.59 4769.64 3576.02 C 4778.24 3578.89 4768.21 3597.52 4775.38 3603.25 C 4781.11 3607.55 4783.97 3591.79 4789.71 3590.35 C 4811.2 3584.62 4859.93 3593.22 4888.6 3597.52 C 4900.06 3598.95 4915.83 3588.92 4922.99 3597.52 C 4930.16 3604.69 4911.53 3611.85 4907.23 3620.45 C 4904.36 3629.05 4907.23 3637.65 4904.36 3646.25 C 4901.49 3653.41 4811.2 3707.87 4794.01 3720.77 C 4765.34 3742.27 4806.9 3717.91 4821.24 3729.37 C 4826.97 3732.24 4814.07 3737.97 4808.34 3742.27 C 4804.04 3746.57 4801.17 3753.73 4794.01 3755.17 C 4791.14 3755.17 4794.01 3745.14 4791.14 3745.14 C 4785.41 3743.7 4781.11 3749.44 4776.81 3750.87 C 4766.78 3755.17 4765.34 3743.7 4761.04 3753.73 C 4749.58 3779.53 4776.81 3788.13 4783.97 3779.53 C 4785.41 3776.67 4778.24 3772.37 4781.11 3772.37 C 4788.27 3770.93 4795.44 3776.67 4804.04 3776.67 C 4819.8 3775.23 4839.87 3758.03 4859.93 3762.33 C 4869.96 3763.77 4878.56 3773.8 4888.6 3776.67 C 4912.96 3783.83 4993.22 3782.4 5006.11 3811.06 C 5008.98 3819.66 5010.41 3828.26 5007.55 3836.86 L 4974.58 3869.82 C 4970.29 3875.55 4967.42 3882.72 4965.99 3889.89 C 4964.55 3892.75 4967.42 3895.62 4965.99 3897.05 C 4954.52 3918.55 4894.33 4003.11 4875.7 4004.54 C 4847.03 4007.41 4837 3993.07 4812.64 4011.7 C 4808.34 4014.57 4821.24 4016 4825.54 4014.57 C 4837 4013.14 4847.03 4005.97 4857.07 4004.54 C 4877.13 4003.11 4861.37 4017.44 4862.8 4021.74 C 4867.1 4031.77 4885.73 4034.64 4884.3 4044.67 C 4880 4076.2 4849.9 4048.97 4841.3 4050.4 C 4796.87 4057.57 4877.13 4076.2 4783.97 4069.03 C 4782.54 4069.03 4782.54 4084.8 4783.97 4084.8 C 4794.01 4089.1 4782.54 4080.5 4792.57 4081.93 C 4804.04 4084.8 4828.4 4103.43 4841.3 4094.83 C 4847.03 4090.53 4848.47 4080.5 4854.2 4077.63 C 4857.07 4076.2 4911.53 4116.33 4917.26 4122.06 C 4927.29 4129.22 4931.59 4165.05 4941.62 4176.52 C 4947.35 4182.25 4955.95 4183.68 4960.25 4189.42 C 4961.69 4192.28 4958.82 4195.15 4958.82 4199.45 C 4957.39 4208.05 4957.39 4218.08 4957.39 4226.68 C 4958.82 4252.48 4968.85 4358.53 4977.45 4380.03 C 4978.88 4382.89 4981.75 4374.3 4984.62 4375.73 C 4990.35 4377.16 4994.65 4384.33 5000.38 4387.19 C 5026.18 4402.96 5020.45 4390.06 5044.81 4420.16 C 5053.41 4430.19 5049.11 4447.39 5056.28 4458.85 C 5063.44 4474.62 5083.51 4460.29 5083.51 4488.95 C 5083.51 4497.55 5067.74 4497.55 5066.31 4506.15 C 5060.57 4529.08 5087.81 4562.04 5093.54 4582.1 C 5100.7 4609.33 5077.77 4569.21 5076.34 4599.3 C 5076.34 4606.47 5127.93 4660.93 5102.14 4688.16 C 5082.07 4708.22 5073.47 4685.29 5059.14 4721.12 C 5057.71 4725.42 5069.17 4719.69 5072.04 4722.55 C 5077.77 4726.85 5079.21 4735.45 5083.51 4739.75 C 5087.81 4744.05 5094.97 4751.22 5099.27 4748.35 C 5127.93 4729.72 5106.44 4711.09 5136.53 4715.39 C 5185.26 4722.55 5264.08 4744.05 5249.75 4821.44 C 5245.45 4845.81 5212.49 4910.3 5188.13 4918.9 C 5179.53 4921.76 5166.63 4904.57 5163.76 4911.73 C 5150.86 4937.53 5218.22 4930.36 5160.9 4946.13 C 5156.6 4947.56 5153.73 4944.7 5149.43 4941.83 C 5148 4941.83 5148 4938.96 5146.56 4938.96 C 5135.1 4940.4 5117.9 4937.53 5112.17 4946.13 C 5107.87 4954.73 5133.67 4943.26 5139.4 4950.43 C 5145.13 4956.16 5140.83 4967.63 5136.53 4974.79 C 5125.07 4993.42 5093.54 4980.52 5077.77 4986.26 C 5073.47 4987.69 5062.01 4991.99 5066.31 4994.86 C 5067.74 4994.86 5109.3 4981.96 5107.87 5000.59 C 5106.44 5007.75 5090.67 4999.16 5084.94 5003.46 C 5080.64 5007.75 5096.4 5014.92 5102.14 5012.05 C 5105 5009.19 5105 5000.59 5109.3 5000.59 C 5115.04 4999.16 5120.77 5004.89 5126.5 5009.19 C 5146.56 5027.82 5084.94 5017.79 5126.5 5024.95 C 5146.56 5027.82 5168.06 5012.05 5189.56 5020.65 C 5195.29 5022.09 5180.96 5029.25 5179.53 5034.98 C 5176.66 5045.02 5178.09 5055.05 5176.66 5066.51 C 5172.36 5080.85 5146.56 5075.11 5132.23 5082.28 C 5126.5 5086.58 5130.8 5100.91 5123.63 5103.78 C 5097.84 5112.38 5110.74 5089.45 5094.97 5099.48 C 5079.21 5109.51 5064.87 5105.21 5049.11 5112.38 C 5041.94 5115.24 5039.08 5126.71 5030.48 5126.71 C 5017.58 5126.71 4994.65 5102.34 4981.75 5099.48 C 4971.72 5098.04 4900.06 5115.24 4895.76 5099.48 C 4894.33 5092.31 4914.39 5098.04 4900.06 5088.01 C 4891.46 5082.28 4895.76 5095.18 4892.89 5099.48 C 4890.03 5100.91 4885.73 5098.04 4884.3 5095.18 C 4884.3 5090.88 4894.33 5086.58 4890.03 5086.58 C 4885.73 5085.15 4881.43 5095.18 4877.13 5093.74 C 4872.83 5092.31 4881.43 5085.15 4878.56 5080.85 C 4868.53 5067.95 4874.26 5093.74 4869.96 5092.31 C 4852.77 5086.58 4839.87 5057.92 4835.57 5062.21 C 4829.84 5069.38 4847.03 5079.41 4845.6 5088.01 C 4844.17 5102.34 4763.91 5083.71 4761.04 5088.01 C 4756.74 5095.18 4771.08 5105.21 4769.64 5113.81 C 4768.21 5118.11 4761.04 5112.38 4756.74 5112.38 L 4755.31 5112.38 C 4748.14 5108.08 4725.21 5092.31 4718.05 5095.18 C 4709.45 5099.48 4712.32 5112.38 4708.02 5119.54 C 4705.15 5122.41 4710.88 5110.94 4709.45 5106.64 C 4706.58 5099.48 4699.42 5093.74 4692.25 5088.01 C 4673.62 5069.38 4619.16 5056.48 4593.36 5066.51 C 4593.36 5066.51 4577.6 5135.31 4556.1 5145.34 C 4538.9 5152.5 4508.81 5110.94 4497.34 5105.21 C 4490.17 5100.91 4511.67 5118.11 4493.04 5113.81 C 4475.84 5109.51 4451.48 5092.31 4431.42 5098.04 C 4424.25 5099.48 4427.12 5112.38 4421.38 5115.24 C 4412.78 5118.11 4402.75 5112.38 4392.72 5112.38 C 4391.29 5112.38 4389.85 5112.38 4388.42 5113.81 C 4385.55 5120.97 4368.36 5156.8 4362.62 5156.8 C 4354.02 5155.37 4358.32 5136.74 4352.59 5129.57 C 4343.99 5115.24 4309.6 5125.27 4309.6 5109.51 C 4309.6 5099.48 4366.92 5096.61 4368.36 5096.61 C 4374.09 5095.18 4379.82 5089.45 4384.12 5083.71 C 4386.99 5082.28 4384.12 5076.55 4386.99 5075.11 C 4389.85 5072.25 4395.59 5076.55 4398.45 5075.11 C 4408.48 5066.51 4411.35 5053.62 4421.38 5046.45 C 4425.68 5043.58 4432.85 5049.32 4437.15 5047.88 C 4441.45 5045.02 4440.01 5039.28 4444.31 5036.42 C 4451.48 5029.25 4464.38 5027.82 4471.54 5019.22 C 4475.84 5013.49 4474.41 4980.52 4484.44 4976.22 C 4490.17 4974.79 4495.91 4986.26 4501.64 4987.69 C 4534.6 4990.56 4495.91 4940.4 4576.16 4954.73 C 4603.4 4959.03 4639.22 4996.29 4666.45 4974.79 C 4675.05 4967.63 4672.19 4953.29 4676.49 4944.7 C 4677.92 4941.83 4746.71 4898.83 4755.31 4888.8 C 4763.91 4878.77 4718.05 4908.87 4712.32 4913.17 C 4705.15 4916.03 4697.98 4917.47 4690.82 4918.9 C 4686.52 4918.9 4683.65 4911.73 4679.35 4913.17 C 4643.52 4923.2 4652.12 4953.29 4609.13 4928.93 C 4594.8 4918.9 4597.66 4894.53 4584.76 4881.64 C 4573.3 4870.17 4551.8 4895.97 4537.47 4888.8 C 4534.6 4887.37 4531.74 4842.94 4530.3 4838.64 C 4528.87 4835.77 4527.44 4844.37 4524.57 4844.37 C 4514.54 4845.81 4527.44 4834.34 4493.04 4844.37 C 4488.74 4844.37 4490.17 4852.97 4487.31 4855.84 C 4478.71 4858.71 4467.24 4861.57 4458.65 4858.71 C 4451.48 4857.27 4438.58 4848.67 4441.45 4842.94 C 4445.75 4834.34 4460.08 4840.07 4468.68 4838.64 C 4472.98 4837.21 4432.85 4835.77 4428.55 4830.04 C 4422.82 4821.44 4425.68 4809.98 4425.68 4799.95 C 4425.68 4771.28 4478.71 4787.05 4485.88 4784.18 C 4494.47 4781.31 4495.91 4766.98 4505.94 4765.55 C 4513.11 4765.55 4520.27 4772.72 4527.44 4771.28 C 4550.37 4765.55 4596.23 4726.85 4604.83 4706.79 C 4607.69 4701.06 4601.96 4645.16 4593.36 4636.56 C 4569 4606.47 4541.77 4692.46 4531.74 4633.7 C 4528.87 4623.67 4558.97 4622.23 4577.6 4607.9 C 4580.46 4603.6 4579.03 4596.44 4581.9 4592.14 C 4584.76 4587.84 4587.63 4584.97 4590.5 4583.54 C 4596.23 4579.24 4601.96 4577.8 4606.26 4576.37 C 4616.29 4576.37 4624.89 4580.67 4644.96 4573.51 C 4647.82 4572.07 4639.22 4562.04 4643.52 4563.47 C 4653.56 4564.91 4659.29 4576.37 4669.32 4577.8 C 4689.39 4580.67 4693.68 4562.04 4708.02 4574.94 C 4715.18 4582.1 4718.05 4603.6 4726.65 4597.87 C 4735.25 4592.14 4719.48 4576.37 4722.35 4566.34 C 4723.78 4560.61 4749.58 4563.47 4768.21 4586.4 C 4772.51 4590.7 4756.74 4586.4 4751.01 4583.54 C 4738.11 4576.37 4732.38 4554.87 4735.25 4539.11 C 4736.68 4530.51 4745.28 4523.34 4752.44 4517.61 C 4758.18 4513.31 4772.51 4517.61 4771.08 4510.45 C 4768.21 4501.85 4751.01 4501.85 4748.14 4493.25 C 4729.51 4453.12 4778.24 4484.65 4778.24 4467.45 C 4779.67 4458.85 4768.21 4463.15 4772.51 4453.12 C 4776.81 4443.09 4789.71 4435.92 4788.27 4424.46 C 4786.84 4402.96 4769.64 4441.65 4749.58 4443.09 C 4736.68 4443.09 4753.88 4415.86 4749.58 4404.39 C 4746.71 4398.66 4739.55 4415.86 4733.81 4414.42 C 4716.62 4408.69 4730.95 4392.93 4729.51 4384.33 L 4712.32 4348.5 C 4710.88 4331.3 4758.18 4284.01 4759.61 4284.01 C 4762.48 4285.44 4761.04 4292.6 4763.91 4291.17 C 4775.38 4288.31 4791.14 4285.44 4794.01 4275.41 C 4796.87 4266.81 4776.81 4275.41 4768.21 4273.97 C 4762.48 4272.54 4756.74 4265.37 4749.58 4266.81 C 4740.98 4269.67 4736.68 4281.14 4728.08 4284.01 C 4720.91 4286.87 4712.32 4281.14 4705.15 4282.57 C 4696.55 4285.44 4692.25 4292.6 4685.09 4295.47 C 4682.22 4296.9 4677.92 4296.9 4676.49 4294.04 C 4675.05 4289.74 4683.65 4282.57 4679.35 4281.14 C 4675.05 4279.71 4676.49 4289.74 4673.62 4292.6 C 4672.19 4294.04 4669.32 4292.6 4667.89 4291.17 C 4660.72 4282.57 4660.72 4261.08 4644.96 4258.21 C 4624.89 4253.91 4652.12 4278.27 4637.79 4301.2 C 4632.06 4309.8 4624.89 4286.87 4619.16 4278.27 C 4577.6 4223.81 4620.59 4286.87 4564.7 4253.91 C 4550.37 4245.31 4584.76 4252.48 4583.33 4245.31 C 4581.9 4212.35 4587.63 4215.21 4607.69 4192.28 C 4644.96 4150.72 4581.9 4199.45 4627.76 4157.89 C 4632.06 4153.59 4642.09 4153.59 4644.96 4147.86 C 4650.69 4137.82 4623.46 4104.86 4622.03 4101.99 C 4620.59 4097.69 4629.19 4097.69 4630.63 4093.39 C 4634.92 4083.36 4630.63 4070.46 4634.92 4059 C 4640.66 4046.1 4652.12 4060.43 4665.02 4066.16 C 4712.32 4087.66 4640.66 4053.27 4640.66 4050.4 C 4636.36 4041.8 4640.66 4030.34 4642.09 4018.87 C 4642.09 4011.7 4647.82 4003.11 4643.52 3997.37 C 4642.09 3995.94 4584.76 4027.47 4580.46 4031.77 C 4569 4041.8 4587.63 4061.87 4584.76 4077.63 C 4583.33 4083.36 4571.87 4081.93 4567.57 4086.23 C 4564.7 4089.1 4561.83 4093.39 4561.83 4097.69 C 4560.4 4101.99 4563.27 4107.73 4561.83 4110.59 C 4557.53 4122.06 4546.07 4127.79 4541.77 4139.26 C 4540.34 4142.12 4548.93 4147.86 4546.07 4149.29 C 4536.04 4155.02 4523.14 4159.32 4511.67 4155.02 C 4503.07 4150.72 4523.14 4139.26 4527.44 4132.09 C 4536.04 4120.62 4533.17 4101.99 4541.77 4090.53 L 4571.87 4064.73 C 4569 4057.57 4553.23 4067.6 4550.37 4060.43 C 4547.5 4054.7 4589.06 4030.34 4569 4026.04 C 4560.4 4023.17 4556.1 4044.67 4548.93 4040.37 C 4540.34 4033.2 4569 4027.47 4574.73 4017.44 C 4580.46 4005.97 4576.16 3980.17 4580.46 3970.14 C 4583.33 3961.54 4590.5 3952.94 4597.66 3951.51 C 4604.83 3950.08 4617.73 3965.84 4617.73 3958.68 C 4617.73 3951.51 4601.96 3951.51 4597.66 3944.35 C 4587.63 3924.28 4646.39 3914.25 4647.82 3914.25 C 4652.12 3909.95 4629.19 3915.68 4629.19 3909.95 C 4629.19 3901.35 4643.52 3899.92 4646.39 3891.32 C 4649.26 3887.02 4637.79 3894.18 4633.49 3898.48 C 4623.46 3905.65 4624.89 3908.52 4616.29 3912.82 C 4597.66 3922.85 4580.46 3938.61 4567.57 3932.88 C 4569 3935.75 4570.43 3937.18 4573.3 3938.61 C 4574.73 3941.48 4580.46 3944.35 4577.6 3947.21 C 4566.13 3957.24 4508.81 3977.31 4498.77 3957.24 C 4497.34 3955.81 4498.77 3951.51 4500.21 3951.51 C 4528.87 3940.05 4505.94 3983.04 4541.77 3934.31 C 4564.7 3904.22 4474.41 3919.98 4538.9 3898.48 C 4541.77 3904.22 4544.64 3909.95 4548.93 3914.25 C 4550.37 3917.12 4553.23 3919.98 4556.1 3921.41 C 4553.23 3917.12 4550.37 3911.38 4548.93 3904.22 C 4547.5 3899.92 4558.97 3904.22 4563.27 3904.22 C 4574.73 3904.22 4586.2 3909.95 4596.23 3905.65 C 4609.13 3899.92 4518.84 3901.35 4530.3 3884.15 C 4538.9 3872.69 4576.16 3888.45 4579.03 3882.72 C 4584.76 3868.39 4543.2 3851.19 4583.33 3841.16 C 4593.36 3838.29 4603.4 3851.19 4614.86 3848.32 C 4653.56 3839.72 4604.83 3813.93 4604.83 3813.93 C 4609.13 3803.9 4630.63 3816.79 4637.79 3808.19 C 4644.96 3799.6 4639.22 3785.26 4639.22 3773.8 C 4639.22 3765.2 4640.66 3756.6 4637.79 3750.87 C 4636.36 3748 4589.06 3697.84 4620.59 3684.94 C 4627.76 3680.64 4629.19 3707.87 4637.79 3705.01 C 4649.26 3702.14 4633.49 3669.18 4650.69 3679.21 C 4673.62 3692.11 4675.05 3693.54 4675.05 3692.11 C 4679.35 3673.48 4663.59 3672.04 4665.02 3653.41 C 4665.02 3646.25 4683.65 3662.01 4686.52 3654.85 C 4692.25 3644.81 4679.35 3631.92 4680.79 3621.88 C 4680.79 3617.58 4685.09 3629.05 4689.39 3629.05 C 4699.42 3633.35 4715.18 3641.95 4722.35 3633.35 C 4728.08 3626.18 4708.02 3619.02 4705.15 3610.42 C 4697.98 3586.05 4719.48 3604.69 4719.48 3604.69 C 4722.35 3601.82 4715.18 3596.09 4716.62 3593.22 C 4719.48 3591.79 4726.65 3598.95 4726.65 3596.09 C 4726.65 3591.79 4716.62 3588.92 4718.05 3584.62 C 4719.48 3574.59 4728.08 3567.42 4733.81 3558.82 M 5155.5 3296.15 C 5158.49 3298.25 5158.23 3295.42 5159.46 3297.99 C 5160.85 3300.88 5162.19 3300.6 5162 3295.34 C 5161.79 3292.55 5163.76 3292.26 5170.93 3293.69 C 5175.23 3295.12 5163.76 3300.85 5160.9 3305.15 C 5160.9 3306.59 5166.63 3310.89 5165.2 3312.32 C 5162.33 3313.75 5156.6 3306.59 5155.16 3310.89 C 5155.16 3313.75 5163.76 3313.75 5163.76 3318.05 C 5165.2 3330.95 5146.56 3326.65 5148 3330.95 C 5149.43 3349.58 5163.65 3347.35 5134.99 3377.45 C 5133.55 3380.32 5128.43 3376.13 5129.87 3373.27 C 5138.46 3354.63 5149.43 3335.25 5142.27 3330.95 C 5136.53 3325.22 5133.82 3338.96 5126.66 3334.66 C 5116.63 3330.36 5121.66 3330.43 5118.8 3320.39 C 5117.36 3317.53 5123.41 3314.24 5126.27 3312.8 C 5137.74 3311.37 5135.46 3314.11 5145.5 3309.81 C 5152.66 3305.51 5151.2 3303.32 5155.5 3296.15 M 4967.42 3545.93 C 4948.79 3583.19 4862.8 3502.93 4922.99 3498.63 C 4931.59 3498.63 4940.19 3508.66 4940.19 3518.7 C 4941.62 3524.43 4922.99 3522.99 4925.86 3527.29 C 4930.16 3535.89 4943.06 3535.89 4951.65 3538.76 C 4955.95 3541.63 4961.69 3543.06 4967.42 3545.93 M 4611.99 3576.02 C 4604.83 3587.49 4584.76 3598.95 4581.9 3607.55 C 4580.46 3614.72 4579.03 3654.85 4560.4 3654.85 C 4550.37 3653.41 4551.8 3637.65 4544.64 3630.48 C 4536.04 3624.75 4547.5 3654.85 4538.9 3659.15 C 4534.6 3660.58 4528.87 3653.41 4526 3656.28 C 4515.97 3662.01 4514.54 3682.08 4503.07 3682.08 C 4493.04 3682.08 4484.44 3664.88 4490.17 3656.28 C 4495.91 3646.25 4520.27 3663.45 4524.57 3651.98 C 4528.87 3641.95 4504.51 3640.51 4500.21 3629.05 C 4498.77 3624.75 4510.24 3626.18 4513.11 3623.32 C 4514.54 3621.88 4508.81 3623.32 4508.81 3621.88 C 4505.94 3616.15 4504.51 3610.42 4505.94 3604.69 C 4518.84 3568.86 4528.87 3601.82 4548.93 3606.12 C 4550.37 3606.12 4541.77 3584.62 4546.07 3580.32 C 4560.4 3563.12 4560.4 3578.89 4574.73 3577.46 C 4576.16 3576.02 4576.16 3571.72 4577.6 3571.72 C 4586.2 3564.56 4594.8 3553.09 4604.83 3554.52 C 4611.99 3555.96 4609.13 3568.86 4611.99 3576.02 " }
+ }
+ }
+ } // END gb type: G 1
+ // PATH visit ie count: 395
+ DemoShape {
+ objectName: "ie"
+ ShapePath {
+ objectName: "svg_path:ie"
+ // boundingRect: 3847.16, 4125.47 570.555x643.865
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 4406.23 4375.13 C 4409.1 4382.29 4421.99 4389.46 4416.26 4395.19 C 4410.53 4403.79 4393.33 4396.62 4384.73 4402.36 C 4380.43 4406.65 4396.2 4409.52 4396.2 4415.25 C 4397.63 4426.72 4390.47 4438.18 4390.47 4449.65 C 4391.9 4459.68 4401.93 4465.41 4401.93 4475.45 C 4401.93 4482.61 4390.47 4486.91 4390.47 4495.51 C 4389.03 4501.24 4400.5 4506.98 4397.63 4512.71 C 4393.33 4518.44 4381.87 4505.54 4379 4511.28 C 4374.7 4517.01 4386.17 4522.74 4387.6 4529.91 C 4387.6 4532.77 4384.73 4535.64 4384.73 4538.51 C 4386.17 4557.14 4391.9 4568.6 4386.17 4587.23 C 4381.87 4600.13 4331.71 4673.22 4323.11 4680.39 C 4320.24 4683.26 4313.07 4684.69 4311.64 4690.42 C 4308.77 4700.45 4313.07 4711.92 4311.64 4721.95 C 4311.64 4723.38 4308.77 4723.38 4308.77 4721.95 C 4304.48 4711.92 4301.61 4724.82 4287.28 4719.08 C 4281.54 4717.65 4281.54 4709.05 4275.81 4707.62 C 4265.78 4704.75 4234.25 4720.52 4227.08 4711.92 C 4225.65 4709.05 4232.82 4709.05 4232.82 4706.19 C 4234.25 4701.89 4222.78 4710.49 4218.49 4709.05 C 4196.99 4707.62 4189.82 4696.15 4169.76 4703.32 C 4166.89 4704.75 4175.49 4710.49 4175.49 4714.79 C 4174.06 4721.95 4148.26 4727.68 4148.26 4727.68 C 4142.53 4727.68 4139.66 4719.08 4133.93 4720.52 C 4123.9 4724.82 4119.6 4737.72 4111 4743.45 C 4080.9 4759.21 4099.53 4716.22 4072.3 4720.52 C 4063.7 4721.95 4079.47 4737.72 4076.6 4744.88 C 4072.3 4750.61 4062.27 4750.61 4055.1 4754.91 C 4050.81 4757.78 4047.94 4766.38 4042.21 4767.81 C 4039.34 4767.81 4040.77 4762.08 4037.91 4760.65 C 4035.04 4757.78 4030.74 4754.91 4026.44 4756.35 C 4023.57 4759.21 4026.44 4767.81 4022.14 4769.25 C 4007.81 4770.68 3982.01 4753.48 3973.41 4754.91 C 3961.95 4756.35 3953.35 4764.95 3943.32 4766.38 C 3914.65 4769.25 3959.08 4746.31 3936.15 4750.61 C 3927.55 4753.48 3893.16 4757.78 3890.29 4754.91 C 3884.56 4746.31 3939.02 4730.55 3944.75 4717.65 C 3946.18 4714.79 3940.45 4714.79 3937.59 4713.35 C 3936.15 4710.49 3903.19 4717.65 3861.63 4713.35 C 3860.19 4713.35 3864.49 4711.92 3883.12 4706.19 C 3885.99 4706.19 3888.86 4704.75 3888.86 4701.89 C 3888.86 4700.45 3884.56 4699.02 3885.99 4697.59 C 3898.89 4686.12 3893.16 4704.75 3910.35 4697.59 C 3918.95 4694.72 3943.32 4693.29 3937.59 4686.12 C 3936.15 4684.69 3871.66 4693.29 3868.79 4693.29 C 3855.89 4690.42 3845.86 4670.36 3847.3 4656.03 C 3848.73 4650.29 3860.19 4661.76 3864.49 4658.89 C 3868.79 4656.03 3861.63 4651.73 3861.63 4647.43 C 3864.49 4634.53 3887.42 4641.69 3900.32 4638.83 C 3910.35 4637.39 3923.25 4638.83 3930.42 4631.66 C 3936.15 4627.36 3916.09 4617.33 3908.92 4621.63 C 3907.49 4624.5 3911.79 4630.23 3908.92 4631.66 C 3907.49 4633.09 3864.49 4611.6 3855.89 4600.13 C 3854.46 4597.27 3864.49 4604.43 3867.36 4603 C 3870.23 4601.57 3867.36 4595.83 3870.23 4594.4 C 3877.39 4590.1 3897.46 4591.53 3907.49 4592.97 C 3920.39 4592.97 3928.99 4605.86 3940.45 4611.6 C 3951.92 4617.33 3918.95 4588.67 3924.69 4577.2 C 3928.99 4567.17 3946.18 4574.34 3956.22 4570.04 C 3961.95 4567.17 3961.95 4558.57 3967.68 4557.14 C 3969.11 4557.14 4060.84 4572.9 4070.87 4567.17 C 4078.04 4562.87 4052.24 4564.3 4047.94 4557.14 C 4046.51 4552.84 4052.24 4545.67 4050.8 4541.37 C 4049.37 4538.51 4020.71 4567.17 4006.38 4565.74 C 4003.51 4564.3 4014.98 4557.14 4010.68 4555.7 C 4006.38 4554.27 4000.64 4560 3994.91 4558.57 C 3989.18 4557.14 3984.88 4552.84 3982.01 4548.54 C 3980.58 4545.67 3983.45 4542.81 3982.01 4541.37 C 3982.01 4541.37 3940.45 4549.97 3934.72 4547.1 C 3930.42 4545.67 3944.75 4547.1 3949.05 4545.67 C 3960.52 4539.94 3969.11 4532.77 3980.58 4528.47 C 3983.45 4525.61 3989.18 4529.91 3992.05 4528.47 C 3997.78 4522.74 3999.21 4512.71 4006.38 4505.54 C 4009.24 4502.68 4013.54 4501.24 4017.84 4499.81 C 4020.71 4496.94 4007.81 4499.81 4004.94 4495.51 C 3999.21 4488.35 4017.84 4482.61 4023.57 4476.88 C 4027.87 4471.15 4030.74 4463.98 4037.91 4462.55 C 4042.21 4461.12 4043.64 4472.58 4047.94 4471.15 C 4059.4 4471.15 4070.87 4466.85 4080.9 4461.12 C 4083.77 4459.68 4069.44 4462.55 4069.44 4458.25 C 4069.44 4453.95 4079.47 4455.38 4079.47 4451.08 C 4078.04 4446.78 4049.37 4452.52 4017.84 4443.92 C 3987.75 4435.32 4017.84 4436.75 4010.68 4412.39 C 4003.51 4386.59 3963.38 4405.22 3951.92 4388.02 C 3920.39 4346.46 3979.15 4363.66 3980.58 4363.66 C 3982.01 4362.23 3974.85 4357.93 3976.28 4356.49 C 3982.01 4346.46 3989.18 4336.43 4000.64 4333.56 C 4010.68 4330.7 4022.14 4339.3 4033.61 4339.3 C 4036.47 4339.3 4039.34 4337.86 4040.77 4335 C 4059.4 4290.57 4006.38 4323.53 4003.51 4310.63 C 4000.64 4304.9 4016.41 4310.63 4020.71 4306.33 C 4029.31 4300.6 4014.98 4286.27 4013.54 4284.84 C 4013.54 4274.8 4026.44 4261.9 4019.28 4253.31 C 4013.54 4247.57 4002.08 4269.07 3996.34 4263.34 C 3990.61 4257.61 4004.94 4250.44 4007.81 4243.27 C 4009.24 4237.54 3994.91 4238.97 4007.81 4236.11 C 4020.71 4233.24 4088.07 4233.24 4095.23 4251.87 C 4099.53 4261.9 4093.8 4277.67 4102.4 4280.54 C 4111 4283.4 4111 4266.2 4118.16 4261.9 C 4131.06 4254.74 4168.32 4297.73 4169.76 4293.43 C 4174.06 4283.4 4159.73 4271.94 4161.16 4260.47 C 4164.03 4247.57 4207.02 4251.87 4207.02 4250.44 C 4218.49 4246.14 4227.08 4237.54 4234.25 4228.94 C 4238.55 4223.21 4212.75 4228.94 4212.75 4226.08 C 4208.45 4210.31 4212.75 4231.81 4194.12 4230.38 C 4191.26 4230.38 4195.55 4224.64 4195.55 4221.78 C 4195.55 4220.34 4195.55 4217.48 4194.12 4217.48 C 4188.39 4214.61 4159.73 4213.18 4164.03 4195.98 C 4172.62 4167.32 4201.29 4198.85 4209.89 4195.98 C 4215.62 4193.11 4192.69 4184.51 4196.99 4178.78 C 4202.72 4173.05 4214.19 4184.51 4221.35 4183.08 C 4228.52 4181.65 4215.62 4171.62 4211.32 4167.32 C 4208.45 4164.45 4221.35 4164.45 4222.78 4160.15 C 4228.52 4135.79 4166.89 4160.15 4241.42 4125.75 C 4245.72 4124.32 4251.45 4128.62 4257.18 4130.05 C 4277.25 4135.79 4300.18 4134.35 4317.37 4145.82 C 4327.41 4152.98 4291.58 4167.32 4297.31 4177.35 C 4303.04 4183.08 4314.51 4173.05 4321.67 4165.88 C 4324.54 4163.02 4317.37 4150.12 4323.11 4150.12 C 4331.71 4152.98 4337.44 4164.45 4343.17 4171.62 C 4311.64 4171.62 4320.24 4207.44 4297.31 4221.78 C 4293.01 4224.64 4255.75 4213.18 4258.61 4221.78 C 4260.05 4230.38 4278.68 4234.67 4275.81 4243.27 C 4275.81 4243.27 4219.92 4257.61 4218.49 4257.61 C 4212.75 4264.77 4268.65 4339.3 4290.14 4337.86 C 4356.07 4332.13 4277.25 4303.47 4338.87 4294.87 C 4354.64 4292 4347.47 4326.4 4354.64 4340.73 C 4357.5 4346.46 4371.83 4343.6 4370.4 4353.63 C 4367.53 4360.79 4357.5 4373.69 4364.67 4375.13 C 4413.4 4392.32 4383.3 4359.36 4404.8 4372.26 L 4410.53 4379.42 C 4409.1 4377.99 4407.66 4376.56 4406.23 4375.13 " }
+ }
+ }
+ // PATH visit nl count: 240
+ DemoShape {
+ objectName: "nl"
+ ShapePath {
+ objectName: "svg_path:nl"
+ // boundingRect: 5402.28, 4689.92 473.179x508.107
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 5655.95 4754.91 L 5630.15 4774.69 C 5615.82 4824.85 5678.88 4800.78 5655.95 4817.97 C 5645.92 4825.14 5630.15 4822.27 5624.42 4832.3 C 5617.26 4842.34 5639.95 4851.49 5631.35 4860.08 C 5628.48 4864.38 5610.09 4873.87 5612.96 4878.17 C 5612.96 4878.17 5630.92 4885 5630.92 4885 C 5639.52 4885 5671.19 4827.02 5694.55 4840.9 C 5703.26 4846.08 5691.78 4836.6 5688.91 4826.57 C 5686.05 4816.54 5708.98 4806.51 5704.68 4796.48 C 5698.95 4783.58 5664.55 4800.78 5664.55 4787.88 C 5665.98 4777.84 5671.72 4769.25 5673.15 4759.21 C 5673.15 4756.35 5670.28 4753.48 5668.85 4750.61 C 5667.42 4747.75 5651.37 4763.46 5657.1 4756.29 L 5628.72 4773.55 C 5618.69 4776.41 5607.22 4772.11 5597.19 4772.11 C 5592.89 4772.11 5588.59 4769.25 5587.16 4770.68 C 5568.53 4793.61 5574.26 4839.47 5565.66 4863.83 C 5557.06 4885.33 5539.86 4909.7 5524.1 4926.89 C 5518.37 4934.06 5514.07 4942.66 5506.9 4946.96 C 5502.6 4949.82 5492.57 4944.09 5491.14 4949.82 C 5488.27 4958.42 5501.17 4969.89 5496.87 4978.49 C 5482.54 5001.42 5438.11 4989.95 5448.14 4995.69 C 5459.61 5002.85 5468.21 5012.88 5481.1 5018.62 C 5486.84 5020.05 5492.57 5011.45 5496.87 5012.88 C 5502.6 5014.32 5512.63 5022.92 5508.33 5027.22 C 5501.17 5031.51 5482.54 5015.75 5482.54 5024.35 C 5483.97 5037.25 5521.23 5035.81 5514.07 5045.85 C 5492.57 5074.51 5472.51 5021.48 5463.91 5020.05 C 5436.68 5012.88 5410.88 5017.18 5415.18 5027.22 C 5415.18 5028.65 5459.61 5058.75 5468.21 5057.31 C 5471.07 5057.31 5469.64 5051.58 5472.51 5048.71 C 5478.24 5044.41 5483.97 5054.45 5489.7 5055.88 C 5495.44 5058.74 5504.04 5053.01 5509.77 5058.74 C 5512.63 5061.61 5515.5 5065.91 5516.93 5070.21 C 5521.23 5071.64 5524.1 5073.08 5528.4 5071.64 C 5538.43 5071.64 5511.2 5038.68 5545.6 5048.71 C 5548.46 5048.71 5542.73 5055.88 5544.16 5057.31 C 5561.36 5071.64 5565.66 5037.25 5578.56 5047.28 C 5582.86 5051.58 5567.09 5060.18 5571.39 5063.04 C 5604.36 5080.24 5575.69 5058.75 5601.49 5053.01 C 5605.79 5051.58 5612.96 5093.14 5622.99 5094.57 C 5645.92 5098.87 5676.01 5097.44 5694.65 5121.8 C 5696.08 5124.67 5688.91 5127.54 5687.48 5130.4 C 5684.61 5139 5677.45 5146.17 5676.01 5154.77 C 5676.01 5157.63 5683.18 5156.2 5681.75 5159.07 C 5680.31 5163.37 5673.15 5164.8 5671.72 5170.53 C 5661.68 5206.36 5686.05 5196.33 5708.98 5197.76 L 5710.41 5197.76 C 5707.54 5193.46 5706.11 5189.16 5706.11 5187.73 C 5707.54 5182 5717.58 5182 5719.01 5176.26 C 5723.31 5151.9 5681.75 5143.3 5694.65 5140.44 C 5698.95 5139 5701.81 5144.73 5704.68 5144.73 C 5704.68 5144.73 5731.91 5120.37 5731.91 5120.37 C 5733.34 5113.21 5714.71 5121.8 5720.44 5110.34 C 5724.74 5100.31 5734.77 5093.14 5739.07 5083.11 C 5751.97 5051.58 5720.44 5028.65 5711.84 5012.88 C 5710.41 5010.02 5713.28 5005.72 5714.71 5002.85 C 5714.71 4999.99 5711.84 4995.69 5714.71 4994.25 C 5721.88 4989.95 5730.48 4994.25 5739.07 4991.39 C 5741.94 4989.95 5736.21 4981.35 5739.07 4982.79 C 5747.67 4985.65 5753.41 4995.69 5763.44 4995.69 C 5773.47 4997.12 5812.17 4984.22 5816.47 4974.19 C 5820.76 4964.16 5789.24 4962.72 5802.13 4954.12 C 5825.06 4938.36 5852.29 4932.63 5846.56 4896.8 C 5845.13 4876.73 5792.1 4885.33 5805 4863.83 C 5806.43 4859.54 5813.6 4863.83 5813.6 4860.97 C 5815.03 4856.67 5807.87 4852.37 5809.3 4848.07 C 5809.3 4845.2 5813.6 4845.2 5816.47 4845.2 C 5826.5 4845.2 5835.1 4849.5 5845.13 4849.5 C 5856.59 4849.5 5846.56 4826.57 5850.86 4815.11 C 5853.73 4805.07 5878.09 4759.21 5875.23 4734.85 C 5846.56 4749.18 5843.7 4696.15 5819.33 4690.42 C 5797.83 4686.12 5684.61 4710.49 5671.72 4730.55 C 5664.55 4739.15 5661.68 4747.75 5655.95 4754.91 M 5405.15 5058.74 C 5402.28 5096.01 5432.38 5071.64 5453.87 5081.68 C 5456.74 5083.11 5451.01 5088.84 5453.87 5091.71 C 5471.07 5103.17 5485.4 5083.11 5496.87 5073.08 C 5489.7 5065.91 5481.1 5060.18 5478.24 5058.74 C 5471.07 5057.31 5469.64 5070.21 5462.47 5070.21 C 5438.11 5070.21 5453.87 5055.88 5425.21 5051.58 C 5418.05 5050.15 5410.88 5050.15 5402.28 5053.01 L 5405.15 5058.74 " }
+ }
+ }
+ // PATH visit be count: 157
+ DemoShape {
+ objectName: "be"
+ ShapePath {
+ objectName: "svg_path:be"
+ // boundingRect: 5301.96, 5045.41 450.877x384.166
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 5671.72 5427.07 C 5667.42 5425.64 5663.12 5424.2 5658.82 5424.2 C 5648.78 5422.77 5638.75 5432.8 5630.15 5428.5 C 5622.99 5425.64 5628.72 5412.74 5624.42 5407 C 5621.55 5402.7 5614.39 5405.57 5610.09 5402.7 C 5608.66 5401.27 5615.82 5398.41 5615.82 5396.97 C 5614.39 5394.11 5612.96 5391.24 5610.09 5389.81 C 5607.22 5388.37 5602.92 5394.11 5601.49 5392.67 C 5595.76 5388.37 5594.32 5379.77 5588.59 5375.47 C 5578.56 5371.18 5564.23 5375.47 5558.5 5366.88 C 5552.76 5361.14 5564.23 5352.54 5564.23 5345.38 C 5562.79 5339.65 5554.2 5338.21 5554.2 5332.48 C 5554.2 5325.31 5559.93 5319.58 5561.36 5313.85 C 5562.79 5309.55 5569.96 5305.25 5567.09 5302.38 C 5557.06 5293.78 5548.46 5319.58 5538.43 5328.18 C 5518.37 5346.81 5471.07 5335.35 5475.37 5326.75 C 5479.67 5319.58 5486.84 5315.28 5486.84 5308.12 C 5486.84 5303.82 5475.37 5303.82 5476.8 5298.08 C 5476.8 5289.48 5488.27 5282.32 5488.27 5273.72 C 5485.4 5249.36 5426.64 5263.69 5423.78 5252.22 C 5422.34 5246.49 5426.64 5239.32 5425.21 5233.59 C 5420.91 5210.66 5389.38 5233.59 5380.78 5213.53 C 5375.05 5202.06 5383.65 5169.1 5365.02 5161.93 C 5356.42 5157.63 5349.25 5177.7 5337.79 5177.7 C 5306.26 5177.7 5304.82 5123.24 5301.96 5103.17 C 5303.39 5101.74 5303.39 5101.74 5303.39 5101.74 C 5329.19 5094.57 5369.32 5063.04 5402.28 5053.01 L 5405.15 5058.74 C 5402.28 5096.01 5432.38 5071.64 5453.87 5081.68 C 5456.74 5083.11 5451.01 5088.84 5453.87 5091.71 C 5471.07 5103.17 5485.4 5083.11 5496.87 5073.08 C 5505.47 5080.24 5514.07 5085.98 5516.93 5084.54 C 5521.23 5081.68 5519.8 5075.94 5516.93 5070.21 C 5521.23 5071.64 5524.1 5073.08 5528.4 5071.64 C 5538.43 5071.64 5511.2 5038.68 5545.6 5048.71 C 5548.46 5048.71 5542.73 5055.88 5544.16 5057.31 C 5561.36 5071.64 5565.66 5037.25 5578.56 5047.28 C 5582.86 5051.58 5567.09 5060.18 5571.39 5063.04 C 5604.36 5080.24 5575.69 5058.74 5601.49 5053.01 C 5605.79 5051.58 5612.96 5093.14 5622.99 5094.57 C 5645.92 5098.87 5676.01 5097.44 5694.65 5121.8 C 5696.08 5124.67 5688.91 5127.54 5687.48 5130.4 C 5684.61 5139 5677.45 5146.17 5676.01 5154.77 C 5676.01 5157.63 5683.18 5156.2 5681.75 5159.07 C 5680.31 5163.37 5673.15 5164.8 5671.72 5170.53 C 5661.68 5206.36 5686.05 5196.33 5708.98 5197.76 L 5710.41 5197.76 C 5716.14 5207.79 5724.74 5223.56 5726.18 5223.56 C 5729.04 5226.43 5737.64 5220.69 5737.64 5224.99 C 5739.07 5230.72 5727.61 5236.46 5729.04 5242.19 C 5731.91 5250.79 5744.81 5249.36 5749.11 5256.52 C 5764.87 5282.32 5726.18 5286.62 5716.14 5313.85 C 5700.38 5286.62 5671.72 5339.65 5665.98 5355.41 C 5661.68 5368.31 5704.68 5424.2 5673.15 5421.34 L 5671.72 5427.07 " }
+ }
+ }
+ // PATH visit lu count: 29
+ DemoShape {
+ objectName: "lu"
+ ShapePath {
+ objectName: "svg_path:lu"
+ // boundingRect: 5665.68, 5306.2 99.2084x135.428
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 5739.07 5441.4 C 5731.91 5438.53 5723.31 5434.23 5714.71 5434.23 C 5707.54 5434.23 5700.38 5441.4 5691.78 5441.4 C 5690.35 5442.83 5691.78 5437.1 5690.35 5435.67 C 5684.61 5432.8 5678.88 5429.93 5671.72 5427.07 L 5673.15 5421.34 C 5704.68 5424.2 5661.68 5368.31 5665.98 5355.41 C 5671.72 5339.65 5700.38 5286.62 5716.14 5313.85 C 5714.71 5321.01 5713.28 5328.18 5716.14 5339.65 C 5723.31 5369.74 5757.71 5372.61 5760.57 5376.91 C 5780.64 5401.27 5723.31 5412.74 5739.07 5441.4 " }
+ }
+ }
+ // PATH visit de count: 584
+ DemoShape {
+ objectName: "de"
+ ShapePath {
+ objectName: "svg_path:de"
+ // boundingRect: 5692.15, 4428.15 1080.38x1437.92
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 6657.73 4638.83 C 6660.6 4661.76 6683.53 4706.19 6686.4 4720.52 C 6690.7 4754.91 6644.83 4777.84 6654.87 4805.07 C 6660.6 4822.27 6715.06 4829.44 6715.06 4850.94 C 6715.06 4872.43 6697.86 4879.6 6710.76 4895.36 C 6715.06 4902.53 6725.09 4905.4 6727.96 4914 C 6732.26 4921.16 6726.53 4931.19 6727.96 4938.36 C 6729.39 4942.66 6735.12 4941.23 6736.56 4944.09 C 6743.72 4954.12 6726.53 4978.49 6722.23 4987.09 C 6713.63 4999.99 6735.12 5007.15 6739.42 5020.05 C 6742.29 5027.22 6732.26 5035.81 6736.56 5041.55 C 6742.29 5050.15 6755.19 5047.28 6760.92 5053.01 C 6780.99 5071.64 6772.39 5176.26 6755.19 5179.13 C 6736.56 5183.43 6706.46 5104.61 6690.7 5149.03 C 6687.83 5156.2 6713.63 5161.93 6707.89 5166.23 C 6690.7 5180.56 6666.33 5182 6649.13 5192.03 C 6646.27 5193.46 6649.13 5200.63 6646.27 5202.06 C 6634.8 5207.79 6619.04 5199.2 6610.44 5206.36 C 6603.27 5212.09 6606.14 5223.56 6598.97 5229.29 C 6596.11 5232.16 6593.24 5222.13 6588.94 5223.56 C 6576.04 5226.43 6574.61 5243.62 6566.01 5249.36 C 6561.71 5253.66 6553.11 5246.49 6548.81 5250.79 C 6544.51 5253.66 6548.81 5262.25 6544.51 5266.55 C 6538.78 5273.72 6523.02 5260.82 6518.72 5260.82 C 6482.89 5266.55 6477.15 5293.78 6465.69 5316.71 C 6462.82 5322.45 6462.82 5302.38 6457.09 5298.08 C 6452.79 5292.35 6444.19 5290.92 6437.03 5289.48 C 6424.13 5286.62 6451.36 5332.48 6480.02 5351.11 C 6482.89 5352.54 6492.92 5353.98 6494.35 5362.58 C 6498.65 5382.64 6480.02 5375.47 6477.15 5391.24 C 6475.72 5395.54 6507.25 5448.57 6511.55 5452.87 C 6535.91 5477.23 6541.65 5460.03 6557.41 5475.8 C 6567.44 5485.83 6568.88 5501.59 6578.91 5510.19 C 6601.84 5525.96 6663.47 5547.45 6662.03 5584.72 C 6660.6 5623.41 6652 5614.81 6621.9 5607.65 C 6619.04 5607.65 6616.17 5609.08 6614.74 5611.95 C 6611.87 5626.28 6620.47 5642.04 6606.14 5653.51 C 6593.24 5663.54 6533.05 5677.87 6531.61 5700.8 C 6531.61 5700.8 6566.01 5748.1 6566.01 5749.53 C 6567.44 5750.96 6547.38 5768.16 6554.55 5773.89 C 6570.31 5788.23 6586.08 5766.73 6573.18 5814.02 C 6573.18 5816.89 6570.31 5821.19 6567.44 5821.19 C 6521.58 5808.29 6557.41 5785.36 6535.91 5783.93 C 6524.45 5783.93 6514.42 5793.96 6502.95 5792.53 C 6497.22 5791.09 6498.65 5781.06 6494.35 5779.63 C 6485.75 5776.76 6477.15 5783.93 6469.99 5781.06 C 6467.12 5779.63 6472.86 5771.03 6469.99 5771.03 C 6452.79 5772.46 6468.56 5795.39 6464.26 5796.83 C 6444.19 5802.56 6411.23 5793.96 6392.6 5801.12 C 6386.87 5803.99 6389.73 5814.02 6384 5816.89 C 6378.27 5821.19 6371.1 5814.02 6365.37 5818.32 C 6361.07 5819.76 6366.8 5826.92 6363.93 5829.79 C 6362.5 5831.22 6313.77 5844.12 6308.04 5841.25 C 6305.17 5838.39 6308.04 5831.22 6305.17 5828.35 C 6303.74 5825.49 6296.58 5825.49 6295.14 5822.62 C 6293.71 5819.76 6302.31 5821.19 6300.88 5818.32 C 6295.14 5799.69 6255.01 5822.62 6243.55 5809.72 C 6243.55 5809.72 6246.41 5808.29 6246.41 5806.86 C 6237.82 5801.12 6246.41 5825.49 6243.55 5835.52 C 6243.55 5841.25 6216.32 5874.22 6206.29 5864.18 C 6200.55 5858.45 6216.32 5849.85 6212.02 5844.12 C 6210.59 5842.69 6206.29 5848.42 6203.42 5848.42 C 6200.55 5848.42 6196.25 5846.99 6194.82 5844.12 C 6191.95 5839.82 6201.99 5834.09 6194.82 5828.35 C 6189.09 5824.06 6186.22 5816.89 6180.49 5814.02 C 6176.19 5811.16 6170.46 5818.32 6164.72 5816.89 C 6161.86 5814.02 6164.72 5806.86 6161.86 5803.99 C 6154.69 5798.26 6156.13 5824.06 6133.19 5816.89 C 6117.43 5811.16 6107.4 5795.39 6091.63 5791.09 C 6090.2 5791.09 6042.91 5793.96 6042.91 5793.96 C 6037.17 5791.09 6037.17 5781.06 6031.44 5778.19 C 6030.01 5775.33 6034.31 5785.36 6031.44 5786.79 C 6028.57 5788.23 6022.84 5786.79 6021.41 5783.93 C 6019.97 5779.63 6027.14 5773.89 6024.27 5771.03 C 6002.78 5749.53 5978.41 5788.23 5982.71 5789.66 C 5991.31 5791.09 5999.91 5788.23 6008.51 5789.66 C 6014.24 5791.09 5998.48 5792.53 5994.18 5795.39 C 5991.31 5796.83 5995.61 5803.99 5994.18 5805.42 C 5958.35 5824.06 5984.15 5796.83 5955.48 5798.26 C 5951.18 5798.26 5885.26 5814.02 5880.96 5805.42 C 5879.52 5802.56 5889.56 5801.12 5888.12 5799.69 C 5875.22 5789.66 5869.49 5832.65 5869.49 5782.49 C 5868.06 5762.43 5882.39 5743.8 5883.82 5723.73 C 5883.82 5720.87 5878.09 5720.87 5878.09 5716.57 C 5876.66 5709.4 5879.52 5702.24 5882.39 5695.07 C 5882.39 5695.07 5902.46 5662.11 5902.46 5662.11 C 5903.89 5653.51 5905.32 5621.98 5909.62 5611.95 C 5921.09 5589.02 5949.75 5571.82 5965.51 5544.59 C 5971.25 5534.56 5885.26 5524.52 5879.52 5520.22 C 5875.22 5515.92 5878.09 5507.33 5873.79 5503.03 C 5866.63 5497.29 5820.76 5515.92 5817.9 5511.63 C 5816.47 5507.33 5822.2 5501.59 5819.33 5498.73 C 5776.34 5460.03 5805 5518.79 5787.8 5500.16 C 5773.47 5485.83 5766.3 5452.87 5754.84 5445.7 C 5750.54 5441.4 5741.94 5445.7 5739.07 5441.4 C 5723.31 5412.74 5780.64 5401.27 5760.57 5376.91 C 5757.71 5372.61 5723.31 5369.74 5716.14 5339.65 C 5703.24 5286.62 5769.17 5289.48 5749.11 5256.52 C 5744.81 5249.36 5731.91 5250.79 5729.04 5242.19 C 5727.61 5236.46 5739.07 5230.72 5737.64 5224.99 C 5737.64 5220.69 5729.04 5226.43 5726.18 5223.56 C 5724.74 5222.13 5704.68 5192.03 5706.11 5187.73 C 5707.54 5182 5717.58 5182 5719.01 5176.26 C 5723.31 5151.9 5681.75 5143.3 5694.65 5140.44 C 5698.95 5139 5701.81 5144.73 5704.68 5144.73 C 5704.68 5144.73 5731.91 5120.37 5731.91 5120.37 C 5733.34 5113.21 5714.71 5121.8 5720.44 5110.34 C 5724.74 5100.31 5734.77 5093.14 5739.07 5083.11 C 5751.97 5051.58 5720.44 5028.65 5711.84 5012.88 C 5710.41 5010.02 5713.28 5005.72 5714.71 5002.85 C 5714.71 4999.99 5711.84 4995.69 5714.71 4994.25 C 5721.88 4989.95 5730.48 4994.25 5739.07 4991.39 C 5741.94 4989.95 5736.21 4981.35 5739.07 4982.79 C 5747.67 4985.65 5753.41 4995.69 5763.44 4995.69 C 5773.47 4997.12 5812.17 4984.22 5816.47 4974.19 C 5820.76 4964.16 5789.24 4962.72 5802.13 4954.12 C 5825.06 4938.36 5852.29 4932.63 5846.56 4896.8 C 5845.13 4876.73 5792.1 4885.33 5805 4863.83 C 5806.43 4859.54 5813.6 4863.83 5813.6 4860.97 C 5815.03 4856.67 5807.87 4852.37 5809.3 4848.07 C 5809.3 4845.2 5813.6 4845.2 5816.47 4845.2 C 5826.5 4845.2 5835.1 4849.5 5845.13 4849.5 C 5856.59 4849.5 5846.56 4826.57 5850.86 4815.11 C 5853.73 4805.07 5878.09 4759.21 5875.23 4734.85 C 5879.52 4733.42 5883.82 4730.55 5888.12 4724.82 C 5893.86 4719.08 5880.96 4721.95 5868.06 4721.95 C 5865.19 4719.08 5860.89 4720.52 5858.03 4720.52 C 5855.16 4720.52 5853.73 4719.08 5852.29 4717.65 C 5840.83 4703.32 5872.36 4658.89 5883.82 4653.16 C 5890.99 4648.86 5899.59 4657.46 5906.75 4657.46 C 6014.24 4653.16 5794.97 4644.56 5958.35 4648.86 C 5959.78 4648.86 5964.08 4650.29 5965.51 4651.73 C 5974.11 4667.49 5979.85 4733.42 6015.68 4719.08 C 6027.14 4714.79 6004.21 4615.9 6037.17 4615.9 C 6040.04 4615.9 6040.04 4624.5 6044.34 4625.93 C 6048.64 4628.8 6055.8 4628.8 6061.54 4628.8 C 6075.87 4631.66 6091.63 4617.33 6104.53 4623.06 C 6114.56 4627.36 6114.56 4641.69 6120.3 4650.29 C 6127.46 4661.76 6166.16 4734.85 6166.16 4686.12 C 6166.16 4676.09 6144.66 4678.96 6136.06 4670.36 C 6121.73 4657.46 6124.6 4624.5 6097.37 4620.2 C 6093.07 4620.2 6060.1 4627.36 6062.97 4607.3 C 6064.4 4594.4 6084.47 4554.27 6071.57 4538.51 C 6067.27 4534.21 6035.74 4549.97 6031.44 4534.21 C 6030.01 4531.34 6040.04 4534.21 6041.47 4531.34 C 6044.34 4528.47 6031.44 4522.74 6034.31 4522.74 C 6048.64 4518.44 6073 4532.77 6077.3 4504.11 C 6077.3 4501.24 6044.34 4465.41 6041.47 4459.68 C 6037.17 4449.65 6035.74 4438.18 6035.74 4428.15 C 6045.77 4429.59 6062.97 4428.15 6067.27 4428.15 C 6085.9 4431.02 6104.53 4441.05 6123.16 4443.92 C 6121.73 4448.22 6121.73 4449.65 6124.6 4448.22 C 6130.33 4443.92 6133.19 4436.75 6138.93 4435.32 C 6141.79 4435.32 6137.49 4442.48 6138.93 4445.35 C 6143.23 4448.22 6148.96 4446.78 6153.26 4448.22 C 6163.29 4449.65 6173.32 4449.65 6180.49 4453.95 C 6184.79 4456.82 6186.22 4462.55 6186.22 4466.85 C 6186.22 4468.28 6183.36 4466.85 6183.36 4466.85 C 6180.49 4468.28 6174.76 4471.15 6177.62 4472.58 C 6179.06 4475.45 6186.22 4469.71 6187.66 4472.58 C 6191.95 4479.75 6190.52 4488.35 6187.66 4495.51 C 6184.79 4502.68 6164.72 4506.98 6170.46 4514.14 C 6177.62 4524.17 6204.85 4498.38 6206.29 4511.28 C 6207.72 4519.87 6191.95 4535.64 6200.55 4538.51 C 6210.59 4542.81 6210.59 4518.44 6220.62 4517.01 C 6229.22 4515.58 6262.18 4544.24 6269.35 4541.37 C 6270.78 4541.37 6299.44 4508.41 6309.47 4525.61 C 6329.54 4562.87 6229.22 4601.57 6283.68 4607.3 C 6295.14 4608.73 6303.74 4594.4 6315.21 4594.4 C 6329.54 4595.83 6313.77 4637.39 6345.3 4615.9 C 6352.47 4611.6 6356.77 4575.77 6369.67 4568.6 C 6388.3 4558.57 6408.36 4554.27 6416.96 4574.34 C 6415.53 4570.04 6414.1 4562.87 6415.53 4561.44 C 6424.13 4551.4 6435.59 4547.1 6442.76 4538.51 C 6451.36 4528.47 6452.79 4512.71 6461.39 4502.68 C 6464.26 4499.81 6482.89 4506.98 6500.09 4512.71 C 6507.25 4511.28 6514.42 4509.84 6517.28 4509.84 C 6527.32 4509.84 6521.58 4529.91 6527.32 4538.51 C 6531.61 4544.24 6541.65 4541.37 6545.95 4547.1 C 6554.55 4554.27 6558.84 4574.34 6571.74 4572.9 C 6581.78 4572.9 6593.24 4565.74 6604.71 4568.6 C 6609.01 4570.04 6598.97 4577.2 6598.97 4581.5 C 6600.41 4592.97 6604.71 4604.43 6609.01 4615.9 C 6613.31 4627.36 6627.64 4631.66 6639.1 4635.96 C 6647.7 4638.83 6653.43 4640.26 6657.73 4638.83 M 6527.32 4528.47 C 6530.18 4515.58 6524.45 4499.81 6528.75 4486.91 C 6533.05 4474.01 6576.04 4511.28 6567.44 4498.38 C 6561.71 4489.78 6543.08 4494.08 6538.78 4484.05 C 6537.35 4475.45 6550.25 4468.28 6555.98 4461.12 C 6561.71 4456.82 6551.68 4478.31 6557.41 4479.75 C 6567.44 4482.61 6577.48 4478.31 6586.08 4481.18 C 6594.67 4484.05 6574.61 4495.51 6577.48 4504.11 C 6580.34 4514.14 6593.24 4515.58 6597.54 4525.61 C 6600.41 4528.47 6581.78 4542.81 6558.84 4548.54 C 6547.38 4552.84 6537.35 4535.64 6527.32 4528.47 " }
+ }
+ }
+ // PATH visit fr count: 891
+ DemoShape {
+ objectName: "fr"
+ ShapePath {
+ objectName: "svg_path:fr"
+ // boundingRect: 4338.59, 5103.17 1784.64x1875.74
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 5301.96 5103.17 C 5304.82 5123.24 5306.26 5177.7 5337.79 5177.7 C 5349.25 5177.7 5356.42 5157.63 5365.02 5161.93 C 5383.65 5169.1 5375.05 5202.06 5380.78 5213.53 C 5389.38 5233.59 5420.91 5210.66 5425.21 5233.59 C 5426.64 5239.32 5422.34 5246.49 5423.78 5252.22 C 5426.64 5263.69 5485.4 5249.36 5488.27 5273.72 C 5488.27 5282.32 5476.8 5289.48 5476.8 5298.08 C 5475.37 5303.82 5486.84 5303.82 5486.84 5308.12 C 5486.84 5315.28 5479.67 5319.58 5475.37 5326.75 C 5471.07 5335.35 5518.37 5346.81 5538.43 5328.18 C 5548.46 5319.58 5557.06 5293.78 5567.09 5302.38 C 5569.96 5305.25 5562.79 5309.55 5561.36 5313.85 C 5559.93 5319.58 5554.2 5325.31 5554.2 5332.48 C 5554.2 5338.21 5562.79 5339.65 5564.23 5345.38 C 5564.23 5352.54 5552.76 5361.14 5558.5 5366.88 C 5564.23 5375.47 5578.56 5371.18 5588.59 5375.47 C 5594.32 5379.77 5595.76 5388.37 5601.49 5392.67 C 5602.92 5394.11 5607.22 5388.37 5610.09 5389.81 C 5612.96 5391.24 5614.39 5394.11 5615.82 5396.97 C 5615.82 5398.41 5608.66 5401.27 5610.09 5402.7 C 5614.39 5405.57 5621.55 5402.7 5624.42 5407 C 5628.72 5412.74 5622.99 5425.64 5630.15 5428.5 C 5638.75 5432.8 5648.78 5422.77 5658.82 5424.2 C 5663.12 5424.2 5667.42 5425.64 5671.72 5427.07 C 5678.88 5429.93 5684.61 5432.8 5690.35 5435.67 C 5691.78 5437.1 5690.35 5442.83 5691.78 5441.4 C 5700.38 5441.4 5707.54 5434.23 5714.71 5434.23 C 5723.31 5434.23 5731.91 5438.53 5739.07 5441.4 C 5741.94 5445.7 5750.54 5441.4 5754.84 5445.7 C 5766.3 5452.87 5773.47 5485.83 5787.8 5500.16 C 5805 5518.79 5776.34 5460.03 5819.33 5498.73 C 5822.2 5501.59 5816.47 5507.33 5817.9 5511.63 C 5820.76 5515.92 5866.63 5497.29 5873.79 5503.03 C 5878.09 5507.33 5875.23 5515.92 5879.52 5520.22 C 5885.26 5524.52 5971.25 5534.56 5965.51 5544.59 C 5949.75 5571.82 5921.09 5589.02 5909.62 5611.95 C 5905.32 5621.98 5903.89 5653.51 5902.46 5662.11 L 5882.39 5695.07 C 5879.52 5702.24 5876.66 5709.4 5878.09 5716.57 C 5878.09 5720.87 5883.82 5720.87 5883.82 5723.73 C 5882.39 5743.8 5868.06 5762.43 5869.49 5782.49 C 5869.49 5801.12 5869.49 5806.86 5870.93 5806.86 C 5822.2 5857.02 5839.4 5802.56 5799.27 5814.02 C 5796.4 5815.46 5802.13 5821.19 5802.13 5824.06 C 5802.13 5825.49 5799.27 5824.06 5799.27 5824.06 C 5794.97 5829.79 5783.5 5835.52 5786.37 5842.69 C 5787.8 5849.85 5809.3 5835.52 5809.3 5842.69 C 5807.87 5862.75 5800.7 5846.99 5793.53 5852.72 C 5780.64 5862.75 5769.17 5891.41 5759.14 5900.01 C 5750.54 5910.05 5730.48 5905.75 5724.74 5917.21 C 5720.44 5927.24 5729.04 5940.14 5724.74 5948.74 C 5719.01 5964.51 5693.21 5964.51 5683.18 5978.84 C 5665.98 6000.33 5684.61 6020.4 5677.45 6043.33 C 5676.01 6047.63 5661.68 6040.46 5661.68 6059.09 C 5661.68 6061.96 5654.52 6064.83 5655.95 6064.83 C 5673.15 6069.13 5693.21 6061.96 5701.81 6044.76 C 5703.24 6041.9 5696.08 6039.03 5694.65 6036.16 C 5694.65 6031.86 5693.21 6029 5696.08 6026.13 C 5708.98 6006.07 5749.11 6006.07 5767.74 6014.67 C 5773.47 6016.1 5762 6024.7 5763.44 6029 C 5763.44 6036.16 5772.04 6039.03 5773.47 6046.2 C 5774.9 6054.8 5754.84 6053.36 5763.44 6067.69 C 5766.3 6070.56 5774.9 6066.26 5776.34 6070.56 C 5779.2 6074.86 5772.04 6082.03 5773.47 6086.32 C 5774.9 6089.19 5780.64 6080.59 5782.07 6083.46 C 5789.23 6090.62 5789.23 6100.66 5794.97 6109.26 C 5729.04 6147.95 5766.3 6130.75 5786.37 6165.15 C 5789.23 6170.88 5783.5 6180.91 5787.8 6186.65 C 5792.1 6196.68 5806.43 6198.11 5810.73 6206.71 C 5817.9 6219.61 5772.04 6256.87 5764.87 6258.3 C 5760.57 6259.74 5757.71 6251.14 5753.41 6251.14 C 5746.24 6252.57 5733.34 6252.57 5733.34 6259.74 C 5730.48 6282.67 5777.77 6301.3 5784.94 6312.77 C 5789.23 6321.36 5790.67 6332.83 5790.67 6344.29 C 5789.23 6348.59 5776.34 6341.43 5774.9 6345.73 C 5773.47 6348.59 5777.77 6351.46 5776.34 6352.89 C 5772.04 6360.06 5764.87 6364.36 5759.14 6370.09 C 5754.84 6378.69 5769.17 6382.99 5770.6 6387.29 C 5770.6 6390.16 5763.44 6390.16 5763.44 6393.02 C 5762 6413.09 5799.27 6440.32 5815.03 6444.62 C 5823.63 6447.48 5833.66 6443.18 5842.26 6443.18 C 5850.86 6441.75 5860.89 6436.02 5868.06 6440.32 C 5889.56 6456.08 5840.83 6489.04 5847.99 6514.84 C 5846.56 6514.84 5822.2 6523.44 5819.33 6526.31 C 5817.9 6527.74 5822.2 6533.47 5819.33 6533.47 C 5817.9 6532.04 5819.33 6526.31 5817.9 6526.31 C 5809.3 6527.74 5799.27 6529.17 5793.53 6534.91 C 5789.23 6539.21 5796.4 6549.24 5790.67 6553.54 C 5784.94 6557.84 5774.9 6552.1 5767.74 6556.4 C 5762 6560.7 5763.44 6572.17 5756.27 6577.9 C 5750.54 6580.77 5743.37 6573.6 5737.64 6576.47 C 5733.34 6577.9 5736.21 6585.07 5731.91 6589.37 C 5727.61 6595.1 5716.14 6596.53 5713.28 6603.7 C 5711.84 6609.43 5724.74 6618.03 5719.01 6622.33 C 5711.84 6629.49 5697.51 6622.33 5687.48 6623.76 C 5674.58 6626.63 5665.98 6639.53 5654.52 6643.83 C 5641.62 6648.13 5651.65 6628.06 5622.99 6626.63 C 5604.36 6625.2 5624.42 6633.79 5621.55 6636.66 C 5618.69 6639.53 5612.96 6639.53 5608.66 6638.09 C 5604.36 6638.09 5600.06 6638.09 5598.62 6635.23 C 5598.62 6632.36 5608.66 6625.2 5588.59 6615.16 C 5584.29 6613.73 5579.99 6615.16 5574.26 6615.16 C 5564.23 6612.3 5552.76 6613.73 5545.6 6606.56 C 5538.43 6599.4 5545.6 6585.07 5539.86 6577.9 C 5537 6573.6 5531.27 6583.63 5525.53 6583.63 C 5516.93 6583.63 5499.74 6586.5 5501.17 6577.9 C 5502.6 6566.44 5528.4 6570.73 5529.83 6559.27 C 5529.83 6547.8 5514.07 6539.21 5504.04 6540.64 C 5495.44 6542.07 5511.2 6557.84 5506.9 6563.57 C 5499.74 6570.73 5488.27 6575.03 5478.24 6573.6 C 5455.31 6572.17 5462.47 6532.04 5458.17 6537.77 C 5438.11 6560.7 5482.54 6570.73 5469.64 6576.47 C 5423.78 6595.1 5443.84 6565 5442.41 6559.27 C 5440.98 6553.54 5390.81 6547.8 5386.52 6544.94 C 5375.05 6539.21 5360.72 6520.57 5346.39 6529.17 C 5330.62 6537.77 5307.69 6566.44 5291.93 6575.03 C 5277.59 6582.2 5248.93 6576.47 5231.73 6600.83 C 5228.87 6603.7 5236.03 6609.43 5236.03 6613.73 C 5233.17 6628.06 5214.54 6636.66 5213.1 6652.43 C 5213.1 6656.72 5223.13 6655.29 5224.57 6659.59 C 5231.73 6685.39 5213.1 6678.22 5223.13 6706.89 C 5226 6715.48 5234.6 6722.65 5243.2 6729.82 L 5237.47 6729.82 C 5214.54 6724.08 5188.74 6711.19 5167.24 6725.52 C 5162.94 6728.38 5168.67 6739.85 5162.94 6741.28 C 5148.61 6745.58 5124.25 6716.92 5109.91 6716.92 C 5097.02 6716.92 5086.98 6724.08 5075.52 6725.52 C 5066.92 6726.95 5065.49 6711.19 5062.62 6708.32 C 5055.45 6702.59 5043.99 6699.72 5033.96 6695.42 C 5048.29 6676.79 5045.42 6658.16 5008.16 6661.02 C 5006.73 6661.02 5002.43 6666.76 4999.56 6673.92 L 4999.56 6672.49 C 4992.39 6668.19 4996.69 6655.29 4989.53 6649.56 C 4985.23 6645.26 4976.63 6645.26 4969.46 6643.83 C 4966.6 6643.83 4962.3 6645.26 4960.87 6643.83 C 4945.1 6629.49 4930.77 6612.3 4906.4 6608 C 4889.21 6605.13 4896.37 6638.09 4896.37 6638.09 C 4880.61 6636.66 4867.71 6625.2 4853.38 6626.63 C 4849.08 6626.63 4849.08 6635.23 4844.78 6635.23 C 4836.18 6633.79 4831.88 6623.76 4823.28 6622.33 C 4814.68 6620.9 4808.95 6629.49 4800.35 6628.06 C 4781.72 6628.06 4788.89 6609.43 4778.85 6600.83 C 4758.79 6583.63 4740.16 6609.43 4721.53 6595.1 C 4720.09 6595.1 4705.76 6562.14 4704.33 6560.7 C 4685.7 6546.37 4654.17 6553.54 4634.1 6534.91 C 4631.24 6532.04 4635.54 6524.87 4634.1 6522.01 C 4631.24 6519.14 4622.64 6534.91 4614.04 6532.04 C 4595.41 6523.44 4636.97 6506.24 4624.07 6491.91 C 4619.77 6486.18 4611.17 6483.31 4604.01 6481.88 C 4602.57 6481.88 4604.01 6489.04 4601.14 6487.61 C 4601.14 6487.61 4585.38 6473.28 4576.78 6464.68 C 4585.38 6463.25 4591.11 6461.81 4596.84 6458.95 C 4638.4 6438.88 4655.6 6301.3 4671.37 6258.3 C 4674.23 6251.14 4677.1 6241.11 4684.26 6238.24 C 4690 6235.37 4702.9 6248.27 4705.76 6241.11 C 4710.06 6233.94 4700.03 6222.48 4691.43 6221.04 C 4684.26 6219.61 4682.83 6239.67 4675.67 6236.81 C 4661.33 6232.51 4682.83 6209.58 4685.7 6195.25 C 4691.43 6172.31 4707.19 6087.76 4722.96 6076.29 C 4728.69 6073.43 4748.76 6104.96 4754.49 6119.29 C 4774.55 6162.28 4747.32 6122.15 4761.66 6168.02 C 4764.52 6176.61 4773.12 6183.78 4775.99 6192.38 C 4777.42 6196.68 4771.69 6209.58 4775.99 6208.14 C 4783.15 6206.71 4787.45 6196.68 4786.02 6190.95 C 4783.15 6182.35 4773.12 6179.48 4767.39 6172.31 C 4755.92 6153.68 4771.69 6119.29 4760.22 6097.79 C 4754.49 6086.32 4744.46 6076.29 4735.86 6066.26 C 4730.13 6059.09 4722.96 6051.93 4714.36 6046.2 C 4722.96 6049.06 4732.99 6051.93 4741.59 6047.63 C 4751.62 6041.9 4720.09 6027.57 4722.96 6016.1 C 4725.83 6004.63 4738.72 5998.9 4740.16 5987.44 C 4741.59 5978.84 4731.56 5971.67 4731.56 5963.07 C 4731.56 5953.04 4740.16 5943.01 4740.16 5932.98 C 4740.16 5930.11 4732.99 5930.11 4728.69 5931.54 C 4725.83 5932.98 4728.69 5941.58 4725.83 5940.14 C 4718.66 5937.28 4717.23 5925.81 4711.49 5921.51 C 4707.19 5920.08 4701.46 5925.81 4697.16 5922.94 C 4692.86 5920.08 4697.16 5910.05 4692.86 5907.18 C 4667.07 5882.82 4681.4 5935.84 4657.03 5888.55 C 4655.6 5884.25 4654.17 5852.72 4648.44 5845.55 C 4647 5844.12 4642.7 5845.55 4641.27 5844.12 C 4635.54 5835.52 4628.37 5825.49 4624.07 5815.46 C 4618.34 5801.12 4647 5786.79 4649.87 5781.06 C 4655.6 5768.16 4621.2 5759.56 4621.2 5758.13 C 4618.34 5748.1 4618.34 5742.37 4619.77 5738.07 L 4618.34 5738.07 C 4559.58 5732.33 4614.04 5718 4615.47 5686.47 C 4616.91 5667.84 4556.71 5683.61 4555.28 5676.44 C 4552.41 5664.97 4569.61 5660.67 4578.21 5654.94 C 4579.64 5653.51 4571.04 5657.81 4569.61 5656.38 C 4568.18 5654.94 4569.61 5650.64 4568.18 5649.21 C 4563.88 5649.21 4562.45 5653.51 4558.15 5654.94 C 4546.68 5654.94 4535.21 5646.34 4525.18 5650.64 C 4523.75 5652.08 4522.32 5653.51 4522.32 5654.94 L 4522.32 5653.51 C 4525.18 5634.88 4539.51 5616.25 4509.42 5613.38 C 4493.65 5611.95 4497.95 5632.01 4486.49 5624.85 C 4477.89 5619.11 4466.42 5600.48 4457.82 5596.18 C 4452.09 5594.75 4444.93 5600.48 4440.63 5596.18 C 4421.99 5581.85 4444.93 5564.65 4409.1 5567.52 C 4406.23 5568.95 4411.96 5576.12 4409.1 5577.55 C 4399.06 5581.85 4384.73 5590.45 4376.13 5583.28 C 4367.53 5577.55 4376.13 5561.79 4373.27 5551.75 C 4368.97 5534.56 4350.34 5538.86 4338.87 5531.69 C 4337.44 5530.26 4341.74 5525.96 4344.6 5525.96 C 4358.94 5523.09 4373.27 5524.52 4387.6 5524.52 C 4390.47 5524.52 4397.63 5530.26 4397.63 5527.39 C 4397.63 5524.52 4384.73 5504.46 4376.13 5490.13 L 4377.57 5491.56 C 4384.73 5494.43 4393.33 5491.56 4401.93 5492.99 C 4407.66 5492.99 4420.56 5498.73 4416.26 5495.86 C 4406.23 5490.13 4389.03 5492.99 4384.73 5482.96 C 4381.87 5474.36 4404.8 5477.23 4406.23 5468.63 C 4410.53 5451.43 4320.24 5517.36 4350.34 5439.97 C 4351.77 5439.97 4399.06 5421.34 4411.96 5421.34 C 4427.73 5421.34 4391.9 5439.97 4426.29 5429.93 C 4436.33 5428.5 4446.36 5417.04 4456.39 5419.9 C 4464.99 5422.77 4460.69 5439.97 4469.29 5442.83 C 4475.02 5442.83 4470.72 5425.64 4476.46 5424.2 C 4486.49 5424.2 4493.65 5442.83 4503.69 5439.97 C 4512.28 5437.1 4506.55 5418.47 4515.15 5412.74 C 4518.02 5409.87 4523.75 5418.47 4528.05 5418.47 C 4536.65 5418.47 4546.68 5409.87 4553.85 5414.17 C 4561.01 5418.47 4555.28 5432.8 4562.45 5437.1 C 4566.74 5439.97 4566.74 5429.93 4571.04 5427.07 C 4578.21 5421.34 4601.14 5482.96 4606.87 5494.43 C 4608.31 5495.86 4608.31 5488.69 4611.17 5488.69 C 4619.77 5482.96 4628.37 5481.53 4638.4 5477.23 C 4645.57 5472.93 4651.3 5461.46 4658.47 5464.33 C 4671.37 5470.06 4659.9 5520.22 4694.3 5505.89 C 4704.33 5501.59 4698.6 5482.96 4705.76 5472.93 C 4712.93 5462.9 4714.36 5492.99 4722.96 5494.43 C 4731.56 5495.86 4738.72 5491.56 4747.32 5492.99 C 4755.92 5492.99 4773.12 5505.89 4775.99 5497.29 C 4778.85 5481.53 4745.89 5470.06 4750.19 5454.3 C 4753.06 5444.27 4755.92 5434.23 4760.22 5424.2 C 4757.36 5424.2 4754.49 5422.77 4755.92 5417.04 C 4758.79 5407 4767.39 5395.54 4767.39 5384.07 C 4767.39 5381.21 4758.79 5385.51 4757.36 5382.64 C 4754.49 5375.47 4757.36 5364.01 4753.06 5356.84 C 4751.62 5352.54 4743.02 5352.54 4740.16 5348.24 C 4737.29 5339.65 4735.86 5328.18 4737.29 5319.58 C 4737.29 5315.28 4744.46 5313.85 4744.46 5310.98 C 4744.46 5300.95 4738.72 5290.92 4737.29 5280.89 C 4737.29 5278.02 4740.16 5286.62 4741.59 5288.05 C 4753.06 5293.78 4763.09 5299.52 4774.55 5302.38 C 4777.42 5303.82 4781.72 5300.95 4784.59 5300.95 C 4796.05 5300.95 4807.52 5295.22 4817.55 5300.95 C 4823.28 5302.38 4820.41 5310.98 4817.55 5316.71 C 4816.12 5319.58 4811.82 5318.15 4808.95 5321.01 C 4804.65 5325.31 4820.41 5371.18 4821.85 5371.18 C 4880.61 5379.77 4796.05 5343.95 4841.91 5361.14 C 4863.41 5369.74 4890.64 5374.04 4910.7 5384.07 C 4917.87 5388.37 4922.17 5398.41 4929.34 5399.84 C 4962.3 5404.14 4955.13 5385.51 4979.5 5378.34 C 4985.23 5376.91 4990.96 5376.91 4998.13 5376.91 C 4982.36 5374.04 4968.03 5364.01 4988.1 5329.61 C 5002.43 5306.68 5098.45 5303.82 5124.25 5289.48 C 5134.28 5285.19 5141.44 5276.59 5151.48 5270.85 C 5160.08 5266.55 5175.84 5267.99 5180.14 5259.39 C 5184.44 5250.79 5168.67 5246.49 5167.24 5237.89 C 5165.81 5233.59 5167.24 5226.43 5170.11 5223.56 C 5172.97 5220.69 5178.71 5226.43 5178.71 5223.56 C 5178.71 5220.69 5171.54 5220.69 5171.54 5216.39 C 5171.54 5206.36 5183.01 5137.57 5185.87 5130.4 C 5191.6 5113.21 5238.9 5110.34 5251.8 5108.91 C 5269 5107.47 5286.19 5106.04 5301.96 5103.17 M 6105.96 6666.76 C 6126.03 6681.09 6106.97 6713.83 6106.97 6729.59 C 6113.9 6739.57 6115.28 6745.68 6118.86 6754.18 C 6123.16 6764.21 6123.16 6795.74 6123.16 6804.34 C 6124.6 6828.7 6100.23 6847.34 6100.23 6864.53 C 6100.23 6883.16 6107.4 6908.96 6091.63 6926.16 C 6090.2 6929.03 6083.03 6926.16 6083.03 6929.03 C 6083.03 6933.33 6093.07 6929.03 6091.63 6931.89 C 6091.63 6937.63 6083.03 6937.63 6080.17 6941.92 C 6075.87 6951.96 6080.17 6964.86 6073 6973.45 C 6052.94 6993.52 6058.67 6951.96 6054.37 6950.52 C 6035.74 6944.79 6024.27 6959.12 6011.38 6937.63 C 6008.51 6933.33 6017.11 6927.59 6014.24 6921.86 C 6009.94 6913.26 5992.74 6910.4 5994.18 6900.36 C 5994.18 6888.9 6017.11 6883.16 6015.68 6871.7 C 6014.24 6863.1 5991.31 6880.3 5989.88 6871.7 C 5987.01 6860.23 6009.94 6854.5 6008.51 6844.47 C 6007.08 6833 5985.58 6835.87 5982.71 6824.41 C 5981.28 6815.81 5999.91 6812.94 5999.91 6802.91 C 5999.91 6794.31 5985.58 6790.01 5981.28 6781.41 C 5979.85 6775.68 5995.61 6779.98 5998.48 6775.68 C 6001.34 6765.65 5999.91 6752.75 6005.64 6744.15 C 6007.08 6741.28 6009.94 6751.31 6012.81 6749.88 C 6019.97 6748.45 6021.41 6738.42 6028.57 6735.55 C 6034.31 6732.68 6041.47 6738.42 6047.2 6735.55 C 6054.37 6731.25 6054.37 6718.35 6061.54 6716.92 C 6070.14 6715.48 6077.3 6726.95 6087.33 6726.95 C 6095.93 6726.95 6085.9 6708.32 6087.33 6698.29 C 6088.77 6686.82 6100.23 6678.22 6105.96 6666.76 M 5774.9 6543.5 C 5786.37 6543.5 5796.4 6533.47 5796.4 6523.44 C 5796.4 6513.41 5786.37 6504.81 5774.9 6504.81 C 5763.44 6504.81 5753.41 6513.41 5753.41 6523.44 C 5753.41 6533.47 5763.44 6543.5 5774.9 6543.5 C 5786.37 6543.5 5763.44 6543.5 5774.9 6543.5 " }
+ }
+ }
+ // PATH visit es count: 617
+ DemoShape {
+ objectName: "es"
+ ShapePath {
+ objectName: "svg_path:es"
+ // boundingRect: 3543.69, 6217.38 1812.65x1726.33
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 5033.96 6695.42 C 5043.99 6699.72 5055.45 6702.59 5062.62 6708.32 C 5065.49 6711.18 5066.92 6726.95 5075.52 6725.52 C 5086.98 6724.08 5097.02 6716.92 5109.91 6716.92 C 5124.25 6716.92 5148.61 6745.58 5162.94 6741.28 C 5168.67 6739.85 5162.94 6728.38 5167.24 6725.52 C 5188.74 6711.19 5214.54 6724.08 5237.47 6729.82 L 5243.2 6729.82 C 5250.36 6736.98 5256.1 6744.15 5253.23 6752.75 C 5250.36 6764.21 5231.73 6761.35 5224.57 6768.51 C 5218.84 6774.24 5241.77 6807.21 5227.43 6831.57 C 5220.27 6847.34 5158.64 6871.7 5141.44 6878.87 C 5125.68 6884.6 5101.32 6890.33 5089.85 6900.36 C 5081.25 6906.1 5068.35 6927.59 5055.45 6930.46 C 5006.73 6944.79 4919.3 6934.76 4880.61 6966.29 C 4870.58 6974.89 4850.51 6982.05 4853.38 6994.95 C 4857.68 7004.98 4879.17 7003.55 4877.74 7013.58 C 4877.74 7017.88 4833.31 7027.91 4830.45 7029.35 C 4813.25 7042.25 4807.52 7066.61 4793.18 7080.94 C 4753.06 7122.5 4700.03 7162.63 4674.23 7215.66 C 4662.77 7237.16 4678.53 7305.95 4691.43 7324.58 C 4695.73 7330.31 4748.76 7360.41 4735.86 7369.01 C 4725.83 7377.61 4701.46 7380.47 4691.43 7387.64 C 4688.56 7390.51 4688.56 7397.67 4685.7 7399.1 C 4682.83 7401.97 4678.53 7397.67 4675.67 7397.67 C 4664.2 7400.54 4651.3 7401.97 4641.27 7409.14 C 4636.97 7413.44 4639.84 7423.47 4634.1 7427.77 C 4629.8 7430.63 4622.64 7424.9 4619.77 7427.77 C 4614.04 7434.93 4618.34 7446.4 4614.04 7452.13 C 4608.31 7457.86 4596.84 7452.13 4592.54 7459.3 C 4586.81 7467.9 4595.41 7480.79 4591.11 7489.39 C 4579.64 7518.06 4553.85 7485.09 4552.41 7530.96 C 4552.41 7542.42 4575.34 7546.72 4572.48 7556.75 C 4568.18 7566.78 4552.41 7565.35 4540.95 7563.92 C 4533.78 7563.92 4526.62 7556.75 4519.45 7555.32 C 4489.35 7546.72 4453.52 7561.05 4427.73 7578.25 C 4383.3 7606.91 4383.3 7662.81 4337.44 7685.74 C 4320.24 7695.77 4314.51 7648.48 4271.51 7659.94 C 4262.91 7662.81 4258.61 7674.27 4248.58 7677.14 C 4235.68 7681.44 4205.59 7657.07 4192.69 7655.64 C 4175.49 7651.34 4156.86 7661.37 4138.23 7658.51 C 4128.2 7655.64 4122.46 7647.04 4112.43 7644.18 C 4093.8 7637.01 4009.24 7624.11 3993.48 7626.98 C 3976.28 7631.28 3967.68 7652.77 3951.92 7659.94 C 3928.99 7668.54 3900.32 7642.74 3868.79 7658.51 C 3843 7671.41 3845.86 7682.87 3832.96 7701.5 C 3831.53 7702.94 3822.93 7694.34 3817.2 7698.64 C 3808.6 7705.8 3801.43 7717.27 3789.97 7721.57 C 3785.67 7723 3785.67 7712.97 3781.37 7710.1 C 3775.64 7705.8 3767.04 7704.37 3762.74 7700.07 C 3757.01 7692.9 3755.57 7682.87 3748.41 7677.14 C 3744.11 7672.84 3735.51 7677.14 3731.21 7672.84 C 3721.18 7662.81 3706.85 7615.51 3703.98 7601.18 C 3703.98 7599.75 3725.48 7621.25 3722.61 7608.35 C 3722.61 7604.05 3714.01 7608.35 3712.58 7605.48 C 3711.14 7602.61 3718.31 7599.75 3716.88 7596.88 C 3712.58 7572.52 3691.08 7601.18 3692.51 7559.62 C 3692.51 7559.62 3748.41 7533.82 3735.51 7530.96 C 3724.04 7528.09 3716.88 7552.45 3705.41 7549.59 C 3695.38 7548.15 3699.68 7530.96 3695.38 7522.36 C 3691.08 7513.76 3685.35 7506.59 3679.62 7499.43 C 3679.62 7499.43 3640.92 7462.16 3640.92 7462.16 C 3640.92 7460.73 3640.92 7460.73 3640.92 7459.3 C 3639.49 7462.16 3638.05 7463.6 3635.19 7463.6 C 3626.59 7465.03 3622.29 7453.56 3615.12 7449.27 C 3609.39 7446.4 3583.59 7442.1 3564.96 7442.1 C 3567.83 7381.91 3553.5 7371.87 3600.79 7330.31 C 3609.39 7323.15 3607.96 7307.38 3616.56 7303.08 C 3619.42 7301.65 3689.65 7300.22 3672.45 7271.55 C 3668.15 7264.39 3653.82 7275.85 3646.65 7271.55 C 3639.49 7265.82 3640.92 7254.35 3638.05 7245.76 C 3635.19 7237.16 3635.19 7227.12 3629.45 7219.96 C 3628.02 7217.09 3619.42 7219.96 3619.42 7217.09 C 3623.72 7207.06 3633.75 7199.89 3638.05 7189.86 C 3646.65 7172.66 3622.29 7185.56 3646.65 7165.5 C 3668.15 7148.3 3696.81 7151.17 3699.68 7113.9 C 3699.68 7111.04 3672.45 7092.41 3666.72 7080.94 C 3658.12 7062.31 3668.15 7032.21 3668.15 7029.35 C 3666.72 7027.91 3643.79 6983.49 3643.79 6982.05 C 3642.35 6979.19 3648.09 6983.49 3650.95 6983.49 C 3663.85 6987.79 3672.45 6989.22 3685.35 6992.09 C 3718.31 7000.68 3725.48 7003.55 3742.67 6970.59 C 3762.74 6930.46 3741.24 6944.79 3736.94 6914.69 C 3732.64 6887.46 3777.07 6900.36 3778.5 6880.3 C 3779.94 6865.97 3764.17 6878.87 3772.77 6861.67 C 3774.2 6858.8 3779.94 6858.8 3781.37 6854.5 C 3785.67 6844.47 3785.67 6834.44 3787.1 6824.41 C 3788.54 6812.94 3797.13 6801.47 3795.7 6790.01 C 3795.7 6790.01 3782.8 6755.61 3782.8 6755.61 C 3787.1 6751.31 3797.13 6759.91 3802.87 6757.05 C 3802.87 6757.05 3832.96 6725.52 3832.96 6725.52 C 3854.46 6714.05 3894.59 6712.62 3906.06 6681.09 C 3914.65 6652.43 3877.39 6655.29 3867.36 6653.86 C 3860.19 6652.43 3873.09 6597.97 3867.36 6595.1 C 3840.13 6580.77 3834.4 6593.67 3801.43 6580.77 C 3795.7 6577.9 3797.13 6563.57 3784.24 6572.17 C 3781.37 6575.03 3787.1 6582.2 3784.24 6585.07 C 3764.17 6602.26 3742.67 6582.2 3736.94 6580.77 C 3731.21 6577.9 3724.04 6585.07 3719.74 6582.2 C 3716.88 6580.77 3728.34 6577.9 3725.48 6575.03 C 3724.04 6569.3 3716.88 6567.87 3711.14 6567.87 C 3702.55 6566.44 3692.51 6569.3 3683.91 6567.87 C 3682.48 6566.44 3685.35 6563.57 3685.35 6560.7 C 3685.35 6559.27 3686.78 6553.54 3685.35 6554.97 C 3678.18 6556.4 3660.98 6576.47 3648.09 6567.87 C 3613.69 6543.5 3681.05 6537.77 3663.85 6520.57 C 3660.98 6517.71 3655.25 6520.57 3652.38 6517.71 C 3650.95 6514.84 3658.12 6509.11 3655.25 6507.68 C 3629.45 6501.94 3593.63 6510.54 3572.13 6522.01 C 3574.99 6510.54 3559.23 6500.51 3559.23 6489.04 C 3557.8 6484.74 3566.4 6494.78 3569.26 6491.91 C 3572.13 6490.48 3566.4 6484.74 3567.83 6481.88 C 3570.69 6468.98 3592.19 6473.28 3602.22 6464.68 C 3605.09 6463.25 3610.82 6456.08 3606.52 6457.51 C 3597.92 6458.95 3589.33 6467.55 3580.73 6468.98 C 3573.56 6470.41 3570.69 6457.51 3576.43 6451.78 C 3585.03 6446.05 3603.66 6450.35 3606.52 6440.32 C 3607.96 6431.72 3587.89 6443.18 3580.73 6440.32 C 3574.99 6437.45 3570.69 6430.28 3569.26 6424.55 C 3567.83 6410.22 3582.16 6428.85 3583.59 6427.42 C 3586.46 6421.69 3583.59 6414.52 3587.89 6408.79 C 3592.19 6401.62 3605.09 6400.19 3606.52 6391.59 C 3613.69 6321.36 3556.36 6401.62 3544.9 6332.83 C 3536.3 6285.53 3576.43 6299.87 3577.86 6292.7 C 3579.29 6288.4 3566.4 6292.7 3562.1 6289.83 C 3560.66 6286.97 3566.4 6284.1 3567.83 6284.1 C 3583.59 6281.24 3592.19 6285.53 3603.66 6284.1 C 3640.92 6281.24 3691.08 6249.71 3725.48 6235.37 C 3738.37 6229.64 3752.71 6211.01 3765.61 6219.61 C 3771.34 6223.91 3757.01 6241.11 3764.17 6242.54 C 3775.64 6243.97 3782.8 6223.91 3794.27 6223.91 C 3832.96 6223.91 3830.1 6291.27 3865.93 6299.87 C 3873.09 6301.3 3875.96 6285.53 3883.12 6286.97 C 3923.25 6297 3901.76 6298.43 3941.88 6304.17 C 3951.92 6305.6 3970.55 6301.3 3979.15 6302.73 C 3987.75 6305.6 3992.05 6314.2 4000.64 6314.2 C 4012.11 6314.2 4022.14 6299.87 4033.61 6302.73 C 4043.64 6305.6 4045.07 6322.8 4053.67 6329.96 C 4062.27 6337.13 4079.47 6328.53 4088.07 6337.13 C 4090.93 6340 4082.33 6344.29 4085.2 6345.73 C 4088.07 6350.03 4096.67 6340 4100.97 6342.86 C 4136.8 6367.23 4229.95 6413.09 4277.25 6398.75 C 4280.11 6397.32 4280.11 6391.59 4282.98 6390.16 C 4288.71 6388.72 4294.44 6390.16 4300.18 6390.16 C 4311.64 6391.59 4341.74 6388.72 4350.34 6405.92 C 4350.34 6407.35 4348.9 6410.22 4347.47 6411.65 C 4358.94 6414.52 4390.47 6444.62 4401.93 6444.62 C 4406.23 6444.62 4399.06 6434.58 4401.93 6431.72 C 4404.8 6427.42 4410.53 6425.99 4416.26 6424.55 C 4457.82 6418.82 4430.59 6423.12 4447.79 6443.18 C 4453.52 6448.92 4464.99 6440.32 4470.72 6444.62 C 4479.32 6448.92 4483.62 6458.95 4490.79 6463.25 C 4509.42 6473.28 4549.55 6471.85 4576.78 6464.68 C 4585.38 6473.28 4601.14 6487.61 4601.14 6487.61 C 4604.01 6489.04 4602.57 6481.88 4604.01 6481.88 C 4611.17 6483.31 4619.77 6486.18 4624.07 6491.91 C 4636.97 6506.24 4595.41 6523.44 4614.04 6532.04 C 4622.64 6534.91 4631.24 6519.14 4634.1 6522.01 C 4635.54 6524.87 4631.24 6532.04 4634.1 6534.91 C 4654.17 6553.54 4685.7 6546.37 4704.33 6560.7 C 4705.76 6562.14 4720.09 6595.1 4721.53 6595.1 C 4740.16 6609.43 4758.79 6583.63 4778.85 6600.83 C 4788.89 6609.43 4781.72 6628.06 4800.35 6628.06 C 4808.95 6629.49 4814.68 6620.9 4823.28 6622.33 C 4831.88 6623.76 4836.18 6633.79 4844.78 6635.23 C 4849.08 6635.23 4849.08 6626.63 4853.38 6626.63 C 4867.71 6625.19 4880.61 6636.66 4896.37 6638.09 C 4896.37 6638.09 4889.21 6605.13 4906.4 6608 C 4930.77 6612.3 4945.1 6629.49 4960.87 6643.83 C 4962.3 6645.26 4966.6 6643.83 4969.46 6643.83 C 4976.63 6645.26 4985.23 6645.26 4989.53 6649.56 C 4996.69 6655.29 4992.39 6668.19 4999.56 6672.49 L 4999.56 6673.92 C 4992.39 6688.25 4989.53 6708.32 5033.96 6695.42 M 3785.67 7755.96 L 3795.7 7797.52 L 3827.23 7797.52 C 3827.23 7793.23 3825.8 7790.36 3825.8 7786.06 C 3824.36 7777.46 3821.5 7768.86 3824.36 7760.26 C 3825.8 7755.96 3838.7 7754.53 3837.26 7750.23 C 3828.66 7730.17 3788.54 7754.53 3785.67 7755.96 M 4155.43 7929.38 L 4176.92 7943.71 C 4176.92 7930.81 4179.79 7916.48 4178.36 7905.01 C 4175.49 7893.55 4164.03 7922.21 4155.43 7929.38 M 4182.66 7940.84 L 4185.52 7936.54 C 4184.09 7936.54 4182.66 7936.54 4182.66 7939.41 C 4182.66 7940.84 4182.66 7940.84 4182.66 7940.84 M 5193.04 7188.43 C 5171.54 7261.52 5197.34 7209.93 5233.17 7240.02 C 5243.2 7248.62 5170.11 7318.85 5164.37 7317.41 C 5157.21 7317.41 5158.64 7301.65 5151.48 7297.35 C 5129.98 7284.45 5128.55 7307.38 5121.38 7285.88 C 5118.51 7275.85 5121.38 7262.95 5114.21 7257.22 C 5108.48 7251.49 5099.88 7261.52 5094.15 7260.09 C 5084.12 7258.65 5074.09 7254.35 5065.49 7248.62 C 5064.05 7247.19 5066.92 7244.32 5068.35 7242.89 C 5104.18 7215.66 5148.61 7197.03 5193.04 7188.43 M 5343.52 7189.86 C 5376.48 7272.99 5337.79 7215.66 5317.72 7205.63 C 5309.12 7202.76 5297.66 7209.93 5289.06 7204.19 C 5253.23 7179.83 5300.53 7169.8 5343.52 7189.86 M 5088.42 7324.58 C 5079.82 7333.18 5066.92 7333.18 5066.92 7340.34 C 5066.92 7346.08 5072.65 7357.54 5079.82 7357.54 C 5088.42 7357.54 5094.15 7357.54 5105.61 7347.51 C 5117.08 7337.48 5105.61 7330.31 5105.61 7330.31 L 5089.85 7324.58 L 5088.42 7324.58 M 5054.02 7281.59 C 5042.56 7284.45 5039.69 7291.62 5033.96 7298.78 C 5028.22 7307.38 5019.63 7320.28 5032.52 7326.01 C 5039.69 7330.31 5061.19 7318.85 5065.49 7310.25 C 5068.35 7303.08 5076.95 7301.65 5076.95 7293.05 C 5076.95 7285.88 5066.92 7280.15 5066.92 7280.15 L 5054.02 7281.59 " }
+ }
+ }
+ // PATH visit pt count: 265
+ DemoShape {
+ objectName: "pt"
+ ShapePath {
+ objectName: "svg_path:pt"
+ // boundingRect: 3325.32, 6505.85 582.011x959.21
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 3564.96 7442.1 C 3567.83 7381.91 3553.5 7371.87 3600.79 7330.31 C 3609.39 7323.15 3607.96 7307.38 3616.56 7303.08 C 3619.42 7301.65 3689.65 7300.22 3672.45 7271.55 C 3668.15 7264.39 3653.82 7275.85 3646.65 7271.55 C 3639.49 7265.82 3640.92 7254.35 3638.05 7245.76 C 3635.19 7237.16 3635.19 7227.12 3629.45 7219.96 C 3628.02 7217.09 3619.42 7219.96 3619.42 7217.09 C 3623.72 7207.06 3633.75 7199.89 3638.05 7189.86 C 3646.65 7172.66 3622.29 7185.56 3646.65 7165.5 C 3668.15 7148.3 3696.81 7151.17 3699.68 7113.9 C 3699.68 7111.04 3672.45 7092.41 3666.72 7080.94 C 3658.12 7062.31 3668.15 7032.21 3668.15 7029.35 C 3666.72 7027.91 3643.79 6983.49 3643.79 6982.05 C 3642.35 6979.19 3648.09 6983.49 3650.95 6983.49 C 3663.85 6987.79 3672.45 6989.22 3685.35 6992.09 C 3718.31 7000.68 3725.48 7003.55 3742.67 6970.59 C 3762.74 6930.46 3741.24 6944.79 3736.94 6914.69 C 3732.64 6887.46 3777.07 6900.36 3778.5 6880.3 C 3779.94 6865.97 3764.17 6878.87 3772.77 6861.67 C 3774.2 6858.8 3779.94 6858.8 3781.37 6854.5 C 3785.67 6844.47 3785.67 6834.44 3787.1 6824.41 C 3788.54 6812.94 3797.13 6801.47 3795.7 6790.01 C 3795.7 6790.01 3782.8 6755.61 3782.8 6755.61 C 3787.1 6751.31 3797.13 6759.91 3802.87 6757.05 C 3802.87 6757.05 3832.96 6725.52 3832.96 6725.52 C 3854.46 6714.05 3894.59 6712.62 3906.06 6681.09 C 3914.65 6652.43 3877.39 6655.29 3867.36 6653.86 C 3860.19 6652.43 3873.09 6597.97 3867.36 6595.1 C 3840.13 6580.77 3834.4 6593.67 3801.43 6580.77 C 3795.7 6577.9 3797.13 6563.57 3784.24 6572.17 C 3781.37 6575.03 3787.1 6582.2 3784.24 6585.07 C 3764.17 6602.26 3742.67 6582.2 3736.94 6580.77 C 3731.21 6577.9 3724.04 6585.07 3719.74 6582.2 C 3716.88 6580.77 3728.34 6577.9 3725.48 6575.03 C 3724.04 6569.3 3716.88 6567.87 3711.14 6567.87 C 3702.55 6566.44 3692.51 6569.3 3683.91 6567.87 C 3682.48 6566.44 3685.35 6563.57 3685.35 6560.7 C 3685.35 6559.27 3686.78 6553.54 3685.35 6554.97 C 3678.18 6556.4 3660.98 6576.47 3648.09 6567.87 C 3613.69 6543.5 3681.05 6537.77 3663.85 6520.57 C 3660.98 6517.71 3655.25 6520.57 3652.38 6517.71 C 3650.95 6514.84 3658.12 6509.11 3655.25 6507.68 C 3629.45 6501.94 3593.63 6510.54 3572.13 6522.01 C 3569.26 6536.34 3533.43 6543.5 3542.03 6556.4 C 3547.76 6563.57 3564.96 6560.7 3567.83 6569.3 C 3570.69 6576.47 3552.06 6567.87 3547.76 6573.6 C 3539.17 6586.5 3540.6 6648.13 3543.46 6663.89 C 3543.46 6668.19 3550.63 6669.62 3550.63 6675.36 C 3549.2 6699.72 3539.17 6714.05 3529.13 6734.12 C 3524.83 6742.71 3506.2 6761.35 3516.23 6759.91 C 3526.27 6757.05 3526.27 6735.55 3536.3 6732.68 C 3543.46 6731.25 3547.76 6745.58 3544.9 6751.31 C 3537.73 6761.35 3517.67 6757.05 3510.5 6768.51 C 3500.47 6785.71 3494.74 6805.77 3483.27 6822.97 C 3478.97 6830.14 3470.37 6834.44 3471.81 6841.6 C 3471.81 6848.77 3484.7 6851.64 3487.57 6858.8 C 3489 6861.67 3480.41 6850.2 3476.11 6853.07 C 3468.94 6857.37 3466.07 6868.83 3460.34 6877.43 C 3446.01 6900.36 3430.24 6929.03 3413.05 6949.09 C 3408.75 6954.82 3400.15 6956.26 3394.42 6963.42 C 3392.98 6964.86 3401.58 6969.15 3398.71 6970.59 C 3387.25 6973.45 3372.92 6963.42 3365.75 6970.59 C 3358.59 6977.75 3371.48 6989.22 3368.62 6997.82 C 3364.32 7012.15 3321.32 7072.34 3325.62 7086.67 C 3328.49 7096.71 3335.66 7105.31 3341.39 7115.34 C 3355.72 7139.7 3349.99 7151.17 3349.99 7151.17 C 3361.45 7154.03 3374.35 7152.6 3385.82 7151.17 C 3391.55 7151.17 3394.42 7144 3400.15 7145.43 C 3405.88 7145.43 3408.75 7154.03 3415.91 7155.47 C 3420.21 7156.9 3420.21 7136.84 3423.08 7141.13 C 3427.38 7148.3 3420.21 7158.33 3423.08 7164.07 C 3427.38 7169.8 3447.44 7172.66 3441.71 7175.53 C 3403.01 7194.16 3425.94 7145.43 3394.42 7149.73 C 3385.82 7151.17 3404.45 7162.63 3407.31 7169.8 C 3408.75 7178.4 3407.31 7188.43 3405.88 7198.46 C 3403.01 7217.09 3378.65 7234.29 3378.65 7248.62 C 3378.65 7254.35 3387.25 7258.65 3387.25 7264.39 C 3388.68 7274.42 3372.92 7293.05 3382.95 7295.92 C 3385.82 7295.92 3395.85 7291.62 3392.98 7294.48 C 3390.12 7298.78 3381.52 7295.92 3378.65 7300.22 C 3371.48 7314.55 3375.78 7331.75 3368.62 7346.08 C 3362.89 7357.54 3328.49 7404.84 3331.36 7420.6 C 3332.79 7426.33 3342.82 7414.87 3348.55 7414.87 C 3357.15 7413.44 3365.75 7416.3 3374.35 7414.87 C 3378.65 7414.87 3382.95 7410.57 3387.25 7412 C 3410.18 7417.74 3484.7 7466.46 3494.74 7465.03 C 3499.04 7465.03 3543.46 7443.53 3546.33 7442.1 C 3550.63 7442.1 3557.8 7442.1 3564.96 7442.1 " }
+ }
+ }
+ // PATH visit at count: 269
+ DemoShape {
+ objectName: "at"
+ ShapePath {
+ objectName: "svg_path:at"
+ // boundingRect: 6123.16, 5513.73 961.654x499.661
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 6128.9 5816.89 C 6128.9 5826.92 6147.53 5829.79 6141.79 5844.12 C 6140.36 5846.99 6134.63 5845.55 6133.19 5846.99 C 6131.76 5851.29 6127.46 5862.75 6123.16 5875.65 L 6130.33 5891.41 L 6130.33 5908.61 C 6144.66 5910.05 6167.59 5912.91 6169.02 5912.91 C 6171.89 5915.78 6164.72 5920.08 6167.59 5922.94 C 6174.76 5931.54 6183.36 5937.28 6193.39 5941.58 C 6216.32 5953.04 6220.62 5914.34 6236.38 5917.21 C 6266.48 5921.51 6234.95 5937.28 6244.98 5941.58 C 6267.91 5953.04 6247.85 5938.71 6270.78 5941.58 C 6282.24 5943.01 6293.71 5973.1 6316.64 5960.21 C 6316.64 5960.21 6335.27 5921.51 6335.27 5921.51 C 6346.74 5912.91 6396.9 5918.64 6409.8 5917.21 C 6431.29 5915.78 6448.49 5897.15 6469.99 5897.15 C 6475.72 5897.15 6459.96 5904.31 6458.52 5910.05 C 6451.36 5940.14 6469.99 5920.08 6481.45 5937.28 C 6484.32 5941.58 6477.15 5947.31 6480.02 5953.04 C 6481.45 5955.91 6485.75 5950.17 6488.62 5953.04 C 6515.85 5973.1 6523.02 5975.97 6560.28 5981.7 C 6603.27 5987.44 6647.7 5988.87 6692.13 5996.04 C 6703.59 5997.47 6715.06 6006.07 6726.53 6007.5 C 6737.99 6008.93 6749.46 6000.33 6760.92 6001.77 C 6768.09 6003.2 6772.39 6013.23 6779.55 6013.23 C 6782.42 6014.67 6780.99 6006.07 6783.85 6004.63 C 6791.02 5997.47 6802.48 5994.6 6809.65 5986 C 6815.38 5981.7 6811.08 5971.67 6815.38 5967.37 C 6842.61 5945.87 6871.28 5973.1 6897.07 5961.64 C 6905.67 5957.34 6907.1 5944.44 6915.7 5941.58 C 6917.14 5940.14 6964.43 5947.31 6965.86 5945.87 C 6970.16 5944.44 6961.56 5938.71 6960.13 5934.41 C 6957.26 5920.08 6963 5911.48 6973.03 5908.61 C 6998.83 5879.95 7010.29 5875.65 7023.19 5854.15 C 7026.06 5848.42 7000.26 5818.32 7007.43 5803.99 C 7017.46 5783.93 7041.82 5805.42 7038.96 5776.76 C 7037.52 5752.4 6994.53 5755.26 7003.13 5748.1 C 7023.19 5730.9 7074.78 5753.83 7083.38 5738.07 C 7084.82 5732.33 7064.75 5686.47 7084.82 5677.87 C 7067.62 5659.24 7053.29 5640.61 7040.39 5619.11 C 7028.92 5600.48 7070.49 5570.39 7040.39 5548.89 C 7036.09 5546.02 7030.36 5554.62 7026.06 5554.62 C 7018.89 5553.19 7004.56 5534.56 6994.53 5537.42 C 6987.36 5540.29 6984.5 5551.75 6975.9 5556.05 C 6970.16 5557.49 6963 5554.62 6957.26 5554.62 C 6918.57 5550.32 6885.61 5518.79 6844.04 5518.79 C 6836.88 5518.79 6831.15 5527.39 6823.98 5527.39 C 6821.11 5525.96 6823.98 5518.79 6821.11 5517.36 C 6815.38 5514.49 6806.78 5511.63 6802.48 5515.92 C 6801.05 5518.79 6803.92 5560.35 6801.05 5563.22 C 6798.18 5567.52 6788.15 5557.49 6782.42 5561.79 C 6782.42 5561.79 6770.95 5599.05 6770.95 5599.05 C 6760.92 5601.91 6750.89 5589.02 6740.86 5589.02 C 6735.12 5589.02 6736.56 5600.48 6730.82 5601.91 C 6700.73 5613.38 6683.53 5583.28 6660.6 5571.82 L 6659.17 5571.82 C 6660.6 5576.12 6662.03 5580.42 6662.03 5584.72 C 6660.6 5623.41 6652 5614.81 6621.9 5607.65 C 6619.04 5607.65 6616.17 5609.08 6614.74 5611.95 C 6611.87 5626.28 6620.47 5642.04 6606.14 5653.51 C 6593.24 5663.54 6533.05 5677.87 6531.61 5700.8 C 6531.61 5700.8 6566.01 5748.1 6566.01 5749.53 C 6567.44 5750.96 6547.38 5768.16 6554.55 5773.89 C 6570.31 5788.23 6586.08 5766.73 6573.18 5814.02 C 6573.18 5816.89 6570.31 5821.19 6567.44 5821.19 C 6521.58 5808.29 6557.41 5785.36 6535.91 5783.93 C 6524.45 5783.93 6514.42 5793.96 6502.95 5792.53 C 6497.22 5791.09 6498.65 5781.06 6494.35 5779.63 C 6485.75 5776.76 6477.15 5783.93 6469.99 5781.06 C 6467.12 5779.63 6472.86 5771.03 6469.99 5771.03 C 6452.79 5772.46 6468.56 5795.39 6464.26 5796.83 C 6444.19 5802.56 6411.23 5793.96 6392.6 5801.12 C 6386.87 5803.99 6389.73 5814.02 6384 5816.89 C 6378.27 5821.19 6371.1 5814.02 6365.37 5818.32 C 6361.07 5819.76 6366.8 5826.92 6363.93 5829.79 C 6362.5 5831.22 6313.77 5844.12 6308.04 5841.25 C 6305.17 5838.39 6308.04 5831.22 6305.17 5828.35 C 6303.74 5825.49 6296.58 5825.49 6295.14 5822.62 C 6293.71 5819.76 6302.31 5821.19 6300.88 5818.32 C 6295.14 5799.69 6255.01 5822.62 6243.55 5809.72 C 6243.55 5809.72 6246.41 5808.29 6246.41 5806.86 C 6237.82 5801.12 6246.41 5825.49 6243.55 5835.52 C 6243.55 5841.25 6216.32 5874.22 6206.29 5864.18 C 6200.55 5858.45 6216.32 5849.85 6212.02 5844.12 C 6210.59 5842.69 6206.29 5848.42 6203.42 5848.42 C 6200.55 5848.42 6196.25 5846.99 6194.82 5844.12 C 6191.95 5839.82 6201.99 5834.09 6194.82 5828.35 C 6189.09 5824.06 6186.22 5816.89 6180.49 5814.02 C 6176.19 5811.16 6170.46 5818.32 6164.72 5816.89 C 6161.86 5814.02 6164.72 5806.86 6161.86 5803.99 C 6154.69 5798.26 6156.13 5824.06 6133.19 5816.89 C 6131.76 5815.46 6130.33 5815.46 6128.9 5815.46 L 6128.9 5816.89 " }
+ }
+ }
+ // PATH visit it count: 711
+ DemoShape {
+ objectName: "it"
+ ShapePath {
+ objectName: "svg_path:it"
+ // boundingRect: 5733.22, 5897.15 1686.97x1929.69
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7023.19 7523.79 C 7004.56 7533.82 6942.93 7682.87 6957.27 7702.94 C 6963 7711.53 6991.66 7711.53 6983.06 7717.27 C 6975.9 7721.57 6977.33 7707.24 6973.03 7717.27 C 6973.03 7720.13 6970.16 7723 6971.6 7727.3 C 6974.46 7738.76 6991.66 7744.5 6995.96 7755.96 C 6997.39 7758.83 6991.66 7757.4 6988.79 7760.26 C 6981.63 7764.56 6974.46 7768.86 6970.16 7776.03 C 6965.86 7783.19 6964.43 7791.79 6963 7798.96 C 6961.56 7807.56 6967.3 7819.02 6963 7826.19 C 6960.13 7830.49 6955.83 7811.86 6928.6 7813.29 C 6898.51 7816.16 6911.4 7826.19 6871.28 7807.56 C 6854.08 7800.39 6849.78 7768.86 6831.15 7757.4 C 6805.35 7741.63 6782.42 7757.4 6753.76 7745.93 C 6749.46 7744.5 6745.16 7743.06 6740.86 7740.2 C 6735.12 7735.9 6732.26 7725.87 6725.09 7723 C 6719.36 7718.7 6712.19 7723 6705.03 7720.13 C 6676.36 7710.1 6656.3 7682.87 6624.77 7674.27 C 6611.87 7671.41 6597.54 7684.3 6584.64 7678.57 C 6581.78 7677.14 6547.38 7639.88 6548.81 7634.14 C 6548.81 7628.41 6557.41 7625.54 6557.41 7621.25 C 6558.84 7616.95 6553.11 7615.51 6553.11 7611.21 C 6553.11 7605.48 6555.98 7598.31 6560.28 7592.58 C 6564.58 7586.85 6573.18 7585.42 6578.91 7579.68 C 6586.08 7573.95 6593.24 7552.45 6598.97 7559.62 C 6601.84 7563.92 6606.14 7592.58 6619.04 7591.15 C 6667.77 7583.98 6619.04 7548.15 6680.66 7551.02 C 6696.43 7551.02 6683.53 7568.22 6692.13 7572.52 C 6697.86 7575.38 6706.46 7568.22 6713.63 7571.08 C 6717.93 7572.52 6716.49 7581.12 6719.36 7582.55 C 6727.96 7588.28 6739.42 7594.02 6749.46 7594.02 C 6750.89 7594.02 6786.72 7576.82 6786.72 7576.82 C 6798.18 7575.38 6822.55 7583.98 6839.75 7579.68 C 6875.57 7572.52 6874.14 7558.19 6892.77 7548.15 C 6935.77 7525.22 6904.24 7556.75 6945.8 7553.89 C 6974.46 7552.45 6954.4 7536.69 6965.86 7525.22 C 6970.16 7520.92 6970.16 7538.12 6974.46 7536.69 C 7000.26 7530.96 7000.26 7508.03 7023.19 7523.79 M 6077.3 6994.95 C 6081.6 7015.02 6144.66 7010.72 6136.06 7042.25 C 6134.63 7050.85 6110.26 7047.98 6113.13 7058.01 C 6116 7068.04 6136.06 7065.18 6143.23 7073.78 C 6146.09 7076.64 6136.06 7078.08 6136.06 7082.37 C 6144.66 7133.97 6157.56 7060.88 6160.42 7129.67 C 6161.86 7154.03 6136.06 7162.63 6128.9 7182.7 C 6121.73 7201.33 6143.23 7201.33 6146.09 7217.09 C 6146.09 7222.83 6138.93 7228.56 6138.93 7235.72 C 6134.63 7283.02 6140.36 7348.94 6113.13 7396.24 C 6111.7 7399.1 6113.13 7391.94 6110.26 7390.51 C 6090.2 7383.34 6064.4 7363.28 6040.04 7364.71 C 6035.74 7364.71 6050.07 7370.44 6050.07 7374.74 C 6048.64 7380.47 6041.47 7383.34 6040.04 7390.51 C 6031.44 7423.47 6054.37 7417.74 6014.24 7436.37 C 5958.35 7462.16 5992.74 7409.14 5965.51 7397.67 C 5972.45 7414.82 5952.05 7381.82 5944.02 7373.31 C 5935.42 7344.64 5955.48 7326.01 5959.78 7301.65 C 5961.21 7291.62 5955.48 7283.02 5958.35 7272.99 C 5959.78 7264.39 5975.55 7260.09 5972.68 7251.49 C 5971.25 7244.32 5955.48 7251.49 5951.18 7245.76 C 5946.88 7238.59 5954.05 7229.99 5954.05 7222.83 C 5954.05 7221.39 5948.32 7221.39 5949.75 7219.96 C 5952.62 7215.66 5961.21 7217.09 5964.08 7211.36 C 5969.81 7197.03 5948.32 7126.8 5939.72 7116.77 C 5922.52 7098.14 5911.05 7159.77 5915.35 7088.11 C 5916.79 7078.08 5926.82 7070.91 5928.25 7060.88 C 5929.69 7055.14 5922.52 7049.41 5926.82 7045.11 C 5928.25 7043.68 5938.28 7073.78 5964.08 7073.78 C 5985.58 7075.21 6064.4 7010.72 6077.3 6994.95 M 6667.77 5991.74 C 6664.9 6020.4 6629.07 6014.67 6626.2 6037.6 C 6623.34 6054.8 6656.3 6051.93 6663.47 6057.66 C 6673.5 6066.26 6646.27 6077.73 6641.97 6090.62 C 6636.24 6109.26 6659.17 6089.19 6662.03 6096.36 C 6664.9 6103.52 6649.13 6122.15 6659.17 6127.89 C 6673.5 6136.49 6730.82 6170.88 6680.66 6168.02 C 6683.53 6160.85 6683.53 6155.12 6677.8 6147.95 C 6650.57 6122.15 6651.2 6140.92 6640.24 6150.79 C 6637.93 6153.84 6637.67 6150.82 6637.67 6150.82 C 6637.67 6136.49 6610.44 6133.62 6597.54 6139.35 C 6590.37 6143.65 6597.54 6159.42 6591.81 6165.15 C 6586.08 6170.88 6576.04 6166.58 6567.44 6169.45 C 6547.38 6178.05 6528.75 6200.98 6505.82 6205.28 C 6498.65 6206.71 6491.49 6199.55 6485.75 6203.84 C 6480.02 6205.28 6485.75 6213.88 6482.89 6219.61 C 6481.45 6223.91 6477.15 6229.64 6474.29 6233.94 C 6475.72 6232.51 6475.72 6231.07 6477.15 6231.07 C 6484.32 6231.07 6478.59 6246.84 6484.32 6249.71 C 6487.19 6251.14 6488.62 6241.11 6491.49 6243.97 C 6494.35 6249.71 6500.09 6261.17 6494.35 6265.47 C 6491.49 6266.9 6490.05 6269.77 6491.49 6272.64 C 6492.92 6274.07 6495.79 6271.2 6498.65 6271.2 C 6507.25 6278.37 6521.58 6282.67 6523.02 6292.7 C 6531.61 6332.83 6497.22 6317.06 6487.19 6341.43 C 6484.32 6348.59 6502.95 6425.99 6507.25 6434.58 C 6515.85 6448.92 6616.17 6520.57 6636.24 6532.04 C 6656.3 6543.5 6662.03 6536.34 6680.66 6552.1 C 6700.73 6569.3 6727.96 6682.52 6743.72 6711.19 C 6759.49 6741.28 6792.45 6768.51 6818.25 6788.58 C 6826.85 6794.31 6839.75 6795.74 6846.91 6802.91 C 6851.21 6805.77 6846.91 6814.37 6849.78 6817.24 C 6888.47 6857.37 6961.56 6844.47 7007.43 6837.3 C 7017.46 6835.87 7038.96 6820.11 7051.85 6834.44 C 7087.68 6874.57 6980.2 6888.9 7034.66 6926.16 C 7086.25 6960.56 7157.91 6957.69 7210.94 6984.92 C 7229.57 6994.95 7236.73 7010.72 7258.23 7017.88 C 7275.43 7025.05 7322.72 7032.21 7337.05 7043.68 C 7342.79 7047.98 7337.05 7058.01 7341.35 7062.31 C 7358.55 7086.67 7404.41 7082.37 7418.74 7132.54 C 7424.48 7151.17 7411.58 7145.43 7407.28 7158.33 C 7404.41 7165.5 7408.71 7194.16 7402.98 7197.03 C 7397.25 7201.33 7387.21 7197.03 7378.62 7192.73 C 7334.19 7175.53 7352.82 7149.73 7329.89 7119.64 C 7316.99 7102.44 7275.43 7119.64 7253.93 7112.47 C 7225.27 7102.44 7209.5 7069.48 7182.27 7098.14 C 7179.41 7102.44 7143.58 7174.1 7143.58 7176.96 C 7143.58 7181.26 7150.74 7185.56 7149.31 7191.3 C 7143.58 7218.53 7114.91 7217.09 7139.28 7248.62 C 7153.61 7265.82 7157.91 7250.06 7173.67 7254.35 C 7190.87 7260.09 7202.34 7277.29 7218.1 7284.45 C 7223.83 7287.32 7232.43 7284.45 7235.3 7290.18 C 7238.17 7294.48 7229.57 7300.22 7229.57 7305.95 C 7231 7346.08 7249.63 7308.82 7246.76 7360.41 C 7245.33 7390.51 7188 7379.04 7162.21 7409.14 C 7143.58 7430.63 7167.94 7452.13 7162.21 7477.93 C 7157.91 7499.43 7143.58 7493.69 7129.24 7505.16 C 7094.85 7535.26 7119.21 7604.05 7047.55 7583.98 C 7033.22 7579.68 7017.46 7542.42 7026.06 7526.66 C 7031.79 7518.06 7046.12 7519.49 7053.29 7512.32 C 7057.59 7506.59 7057.59 7497.99 7059.02 7490.83 C 7060.45 7483.66 7066.19 7477.93 7064.75 7470.76 C 7063.32 7462.16 7048.99 7457.86 7050.42 7449.27 C 7056.15 7423.47 7090.55 7437.8 7100.58 7423.47 C 7124.95 7394.81 7096.28 7390.51 7084.82 7374.74 C 7073.35 7357.54 7079.08 7333.18 7070.49 7314.55 C 7066.19 7303.08 7060.45 7293.05 7053.29 7284.45 C 7051.85 7281.59 7046.12 7281.59 7043.26 7278.72 C 7017.46 7240.02 7044.69 7262.95 7027.49 7219.96 C 7005.99 7165.5 6993.09 7192.73 6950.1 7195.6 C 6948.67 7195.6 6951.53 7191.3 6950.1 7188.43 C 6944.37 7182.7 6937.2 7175.53 6928.6 7171.23 C 6920 7166.93 6902.8 7171.23 6897.07 7161.2 C 6891.34 7151.17 6908.54 7141.13 6907.1 7129.67 C 6905.67 7118.2 6897.07 7108.17 6891.34 7099.57 C 6856.94 7052.28 6851.21 7118.2 6811.08 7103.87 C 6806.78 7102.44 6838.31 7079.51 6823.98 7069.48 C 6772.39 7032.21 6822.55 7070.91 6766.65 7063.74 C 6762.35 7062.31 6766.65 7055.14 6765.22 7050.85 C 6759.49 7033.65 6729.39 6987.79 6715.06 6982.05 C 6676.36 6967.72 6706.46 6994.95 6693.56 6992.09 C 6680.66 6989.22 6669.2 6973.45 6654.87 6974.89 C 6641.97 6977.75 6631.94 6994.95 6620.47 6992.09 C 6607.57 6989.22 6609.01 6970.59 6600.41 6961.99 C 6590.37 6953.39 6564.58 6956.26 6555.98 6950.52 L 6534.48 6920.43 C 6524.45 6911.83 6508.68 6910.4 6500.09 6900.36 C 6482.89 6874.57 6502.95 6878.87 6482.89 6863.1 C 6474.29 6855.93 6464.26 6850.2 6454.22 6844.47 C 6451.36 6843.04 6445.62 6847.34 6442.76 6845.9 C 6426.99 6833 6426.99 6808.64 6411.23 6795.74 C 6384 6772.81 6366.8 6790.01 6338.14 6778.54 C 6333.84 6777.11 6345.3 6772.81 6348.17 6769.94 C 6356.77 6758.48 6339.57 6739.85 6335.27 6735.55 C 6332.4 6732.68 6326.67 6735.55 6323.81 6732.68 C 6319.51 6726.95 6319.51 6718.35 6313.77 6714.05 C 6306.61 6708.32 6292.28 6712.62 6286.54 6704.02 C 6282.24 6698.29 6295.14 6686.82 6287.98 6682.52 C 6279.38 6675.36 6265.05 6683.95 6253.58 6679.66 C 6246.41 6676.79 6257.88 6663.89 6257.88 6655.29 C 6262.18 6626.63 6257.88 6616.6 6242.12 6592.23 C 6212.02 6549.24 6233.52 6510.54 6197.69 6477.58 C 6194.82 6473.28 6189.09 6471.85 6184.79 6470.41 C 6183.36 6470.41 6181.92 6474.71 6180.49 6473.28 C 6173.32 6470.41 6169.02 6461.81 6161.86 6461.81 C 6157.56 6461.81 6166.16 6474.71 6161.86 6473.28 C 6150.39 6470.41 6141.79 6461.81 6131.76 6454.65 C 6127.46 6451.78 6091.63 6414.52 6080.17 6414.52 C 6077.3 6414.52 6081.6 6421.69 6078.73 6423.12 C 6075.87 6424.55 6071.57 6423.12 6070.14 6420.25 C 6062.97 6411.65 6032.87 6397.32 6018.54 6397.32 C 6012.81 6397.32 5975.55 6418.82 5972.68 6424.55 C 5969.81 6430.28 5974.11 6438.88 5969.81 6443.18 C 5965.51 6448.92 5954.05 6447.48 5949.75 6451.78 C 5939.72 6461.81 5932.55 6484.74 5921.09 6494.78 C 5902.46 6513.41 5869.49 6511.98 5847.99 6514.84 C 5840.83 6489.04 5889.56 6456.08 5868.06 6440.32 C 5860.89 6436.02 5850.86 6441.75 5842.26 6443.18 C 5833.66 6443.18 5823.63 6447.48 5815.03 6444.62 C 5799.27 6440.32 5762 6413.09 5763.44 6393.02 C 5763.44 6390.16 5770.6 6390.16 5770.6 6387.29 C 5769.17 6382.99 5754.84 6378.69 5759.14 6370.09 C 5764.87 6364.36 5772.04 6360.06 5776.34 6352.89 C 5777.77 6351.46 5773.47 6348.59 5774.9 6345.73 C 5776.34 6341.43 5789.23 6348.59 5790.67 6344.29 C 5790.67 6332.83 5789.23 6321.36 5784.94 6312.77 C 5777.77 6301.3 5730.48 6282.67 5733.34 6259.74 C 5733.34 6252.57 5746.24 6252.57 5753.41 6251.14 C 5757.71 6251.14 5760.57 6259.74 5764.87 6258.3 C 5772.04 6256.87 5817.9 6219.61 5810.73 6206.71 C 5806.43 6198.11 5792.1 6196.68 5787.8 6186.65 C 5783.5 6180.91 5789.24 6170.88 5786.37 6165.15 C 5766.3 6130.75 5729.04 6147.95 5794.97 6109.26 C 5809.3 6135.05 5847.99 6106.39 5866.63 6102.09 C 5879.52 6099.22 5889.56 6116.42 5902.46 6116.42 C 5903.89 6116.42 5944.02 6074.86 5944.02 6067.69 C 5945.45 6060.53 5932.55 6057.66 5933.98 6051.93 C 5936.85 6043.33 5948.32 6040.46 5955.48 6034.73 C 5962.65 6029 5968.38 6023.27 5975.55 6017.53 C 5978.41 6016.1 5981.28 6013.23 5982.71 6014.67 C 5985.58 6023.27 5984.15 6031.86 5984.15 6040.46 C 5984.15 6044.76 5979.85 6050.5 5981.28 6056.23 C 5991.31 6074.86 6014.24 6079.16 6030.01 6084.89 C 6031.44 6084.89 6034.31 6087.76 6034.31 6090.62 C 6032.87 6096.36 6022.84 6100.66 6024.27 6106.39 C 6025.71 6112.12 6035.74 6109.26 6040.04 6113.56 C 6045.77 6120.72 6048.64 6145.08 6057.24 6137.92 C 6081.6 6119.29 6052.94 6125.02 6052.94 6110.69 C 6052.94 6079.16 6087.33 6070.56 6093.07 6044.76 C 6093.07 6041.9 6077.3 6003.2 6101.67 6007.5 C 6120.3 6010.37 6097.37 6039.03 6134.63 6047.63 C 6157.56 6054.8 6138.93 6026.13 6177.62 6033.3 C 6189.09 6034.73 6183.36 6057.66 6193.39 6063.39 C 6199.12 6066.26 6210.59 6060.53 6209.15 6054.8 C 6206.29 6050.5 6200.55 6047.63 6199.12 6041.9 C 6199.12 6036.16 6207.72 6031.86 6206.29 6026.13 C 6203.42 6018.97 6177.62 6003.2 6197.69 5988.87 C 6223.48 5970.24 6213.45 6011.8 6243.55 6004.63 C 6260.75 5998.9 6233.52 5978.84 6233.52 5975.97 C 6236.38 5970.24 6240.68 5965.94 6242.12 5960.21 C 6244.98 5954.47 6243.55 5947.31 6244.98 5941.58 C 6267.91 5953.04 6247.85 5938.71 6270.78 5941.58 C 6282.24 5943.01 6293.71 5973.1 6316.64 5960.21 L 6335.27 5921.51 C 6346.74 5912.91 6396.9 5918.64 6409.8 5917.21 C 6431.29 5915.78 6448.49 5897.15 6469.99 5897.15 C 6475.72 5897.15 6459.96 5904.31 6458.52 5910.05 C 6451.36 5940.14 6469.99 5920.08 6481.45 5937.28 C 6484.32 5941.58 6477.15 5947.31 6480.02 5953.04 C 6481.45 5955.91 6485.75 5950.17 6488.62 5953.04 C 6515.85 5973.1 6523.02 5975.97 6560.28 5981.7 C 6596.11 5986 6631.94 5988.87 6667.77 5991.74 L 6667.77 5991.74 " }
+ }
+ }
+ // PATH visit gr count: 707
+ DemoShape {
+ objectName: "gr"
+ ShapePath {
+ objectName: "svg_path:gr"
+ // boundingRect: 7642.32, 6646.69 1068.32x1299.36
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 8708.59 7823.32 C 8692.83 7853.42 8721.49 7833.35 8705.73 7877.78 C 8704.29 7882.08 8588.21 7907.88 8576.74 7912.18 C 8568.14 7915.04 8487.89 7952.31 8479.29 7945.14 C 8453.49 7916.48 8499.35 7919.34 8417.66 7909.31 C 8334.54 7899.28 8437.73 7919.34 8367.5 7919.34 C 8363.2 7919.34 8361.77 7912.18 8357.47 7912.18 C 8348.87 7910.74 8338.84 7912.18 8328.8 7913.61 C 8318.77 7916.48 8307.31 7922.21 8297.27 7923.64 C 8275.78 7923.64 8284.38 7896.41 8285.81 7887.81 C 8285.81 7876.35 8281.51 7863.45 8285.81 7853.42 C 8301.57 7808.99 8315.91 7859.15 8325.94 7863.45 C 8335.97 7867.75 8347.44 7862.02 8357.47 7857.72 C 8364.63 7854.85 8368.93 7836.22 8374.67 7841.95 C 8381.83 7847.69 8357.47 7853.42 8360.33 7860.58 C 8361.77 7867.75 8374.67 7863.45 8381.83 7866.32 C 8389 7869.18 8394.73 7879.22 8403.33 7880.65 C 8410.5 7882.08 8416.23 7876.35 8423.39 7873.48 C 8437.73 7869.18 8447.76 7857.72 8460.66 7853.42 C 8476.42 7849.12 8492.19 7850.55 8507.95 7847.69 C 8517.98 7844.82 8509.38 7856.28 8517.98 7857.72 C 8533.75 7862.02 8549.51 7849.12 8566.71 7850.55 C 8571.01 7850.55 8573.88 7859.15 8578.18 7857.72 C 8585.34 7856.28 8611.14 7834.79 8624.04 7837.65 C 8626.9 7839.09 8602.54 7869.18 8636.94 7879.22 C 8644.1 7882.08 8644.1 7866.32 8649.83 7862.02 C 8679.93 7831.92 8675.63 7870.62 8708.59 7823.32 M 8413.36 6738.42 L 8414.79 6736.98 L 8416.23 6736.98 C 8417.66 6736.98 8462.09 6722.65 8462.09 6722.65 C 8493.62 6698.29 8403.33 6658.16 8459.22 6646.69 L 8460.66 6646.69 L 8464.96 6646.69 L 8466.39 6646.69 L 8467.82 6646.69 C 8470.69 6646.69 8473.55 6646.69 8474.99 6648.13 L 8477.85 6648.13 C 8509.38 6655.29 8552.38 6685.39 8530.88 6711.19 C 8515.12 6728.38 8499.35 6719.78 8493.62 6748.45 L 8505.08 6790.01 C 8503.65 6800.04 8483.59 6833 8473.55 6838.74 L 8472.12 6854.5 C 8447.76 6841.6 8493.62 6840.17 8470.69 6820.11 C 8459.22 6811.51 8413.36 6831.57 8399.03 6830.14 C 8353.17 6827.27 8347.44 6797.18 8317.34 6834.44 C 8310.17 6843.04 8303.01 6850.2 8294.41 6855.93 C 8254.28 6877.43 8275.78 6827.27 8235.65 6851.64 C 8219.88 6861.67 8231.35 6886.03 8199.82 6900.36 C 8172.59 6911.83 8169.72 6877.43 8143.93 6910.4 C 8133.89 6923.29 8151.09 6921.86 8155.39 6924.73 C 8168.29 6931.89 8166.86 6953.39 8178.32 6964.86 C 8181.19 6967.72 8186.92 6966.29 8192.65 6964.86 C 8194.09 6964.86 8195.52 6963.42 8196.95 6960.56 C 8196.95 6957.69 8191.22 6951.96 8195.52 6951.96 C 8201.25 6950.52 8201.25 6963.42 8206.99 6964.86 C 8222.75 6969.15 8255.71 6974.89 8261.45 6996.39 C 8272.91 7037.95 8224.18 6977.75 8224.18 6977.75 C 8208.42 6969.15 8162.56 6963.42 8158.26 6990.65 C 8153.96 7007.85 8191.22 7002.12 8202.69 7013.58 C 8211.28 7022.18 8209.85 7050.85 8199.82 7046.55 C 8176.89 7037.95 8175.46 7012.15 8152.53 7000.68 C 8146.79 6999.25 8141.06 7002.12 8135.33 7000.68 C 8128.16 7000.68 8119.56 6993.52 8115.26 6999.25 C 8082.3 7035.08 8178.32 7045.11 8171.16 7058.01 C 8168.29 7062.31 8131.03 7060.88 8119.56 7058.01 C 8115.26 7056.58 8105.23 7010.72 8105.23 7010.72 C 8093.77 6996.39 8053.64 7004.98 8037.87 6993.52 C 8007.78 6970.59 8037.87 6974.89 8037.87 6946.22 C 8037.87 6940.49 8022.11 6956.26 8013.51 6963.42 C 8006.34 6970.59 7994.88 6976.32 7993.44 6986.35 C 7992.01 6993.52 8006.34 6994.95 8007.78 7002.12 L 7997.74 7045.11 C 8002.04 7072.34 8035.01 7085.24 8050.77 7102.44 L 8069.4 7139.7 C 8079.43 7149.73 8152.53 7185.56 8141.06 7202.76 C 8138.19 7207.06 8082.3 7178.4 8078 7179.83 C 8073.7 7179.83 8078 7188.43 8078 7192.73 C 8075.13 7202.76 8059.37 7224.26 8069.4 7222.83 C 8072.27 7221.39 8070.83 7214.23 8073.7 7215.66 C 8078 7217.09 8076.57 7224.26 8080.87 7227.12 C 8090.9 7234.29 8122.43 7234.29 8098.06 7255.79 C 8078 7272.99 8057.94 7274.42 8030.71 7285.88 C 8026.41 7287.32 8039.31 7291.62 8043.6 7290.18 C 8047.9 7288.75 8050.77 7281.59 8056.5 7281.59 C 8062.24 7281.59 8062.24 7290.18 8066.54 7293.05 C 8069.4 7294.48 8072.27 7291.62 8075.13 7290.18 C 8086.6 7290.18 8098.06 7287.32 8108.1 7291.62 C 8116.7 7294.48 8115.26 7308.82 8123.86 7310.25 C 8133.89 7313.11 8143.93 7297.35 8152.53 7301.65 C 8161.12 7305.95 8151.09 7324.58 8159.69 7328.88 C 8171.16 7336.05 8185.49 7315.98 8195.52 7323.15 C 8201.25 7326.01 8195.52 7348.94 8218.45 7350.38 C 8247.11 7351.81 8255.71 7341.78 8275.78 7364.71 C 8291.54 7381.91 8267.18 7374.74 8267.18 7384.77 C 8267.18 7391.94 8275.78 7396.24 8277.21 7401.97 C 8280.08 7409.14 8275.78 7417.74 8278.64 7423.47 C 8285.81 7436.37 8304.44 7442.1 8288.68 7466.46 C 8285.81 7470.76 8280.08 7467.9 8275.78 7466.46 C 8272.91 7463.6 8275.78 7459.3 8274.34 7456.43 C 8272.91 7453.56 8255.71 7442.1 8254.28 7442.1 C 8251.41 7440.67 8249.98 7447.83 8247.11 7446.4 C 8237.08 7439.23 8221.32 7410.57 8206.99 7406.27 C 8188.35 7400.54 8198.39 7422.04 8188.35 7424.9 C 8171.16 7430.63 8122.43 7444.97 8126.73 7452.13 C 8131.03 7462.16 8148.23 7457.86 8158.26 7462.16 C 8162.56 7463.6 8149.66 7466.46 8149.66 7470.76 C 8149.66 7475.06 8156.82 7475.06 8158.26 7477.93 C 8161.12 7483.66 8156.82 7492.26 8161.12 7496.56 C 8176.89 7512.32 8204.12 7503.73 8218.45 7520.92 C 8227.05 7530.96 8195.52 7533.82 8182.62 7533.82 C 8162.56 7535.26 8146.79 7533.82 8141.06 7532.39 C 8136.76 7530.96 8139.63 7523.79 8136.76 7519.49 C 8135.33 7518.06 8131.03 7518.06 8129.59 7518.06 C 8118.13 7518.06 8102.36 7509.46 8095.2 7518.06 C 8083.73 7533.82 8131.03 7569.65 8136.76 7579.68 C 8138.19 7585.42 8133.89 7591.15 8135.33 7595.45 C 8138.19 7599.75 8146.79 7595.45 8149.66 7599.75 C 8155.39 7609.78 8172.59 7641.31 8178.32 7654.21 C 8184.05 7667.11 8166.86 7658.51 8166.86 7662.81 C 8166.86 7667.11 8172.59 7668.54 8174.02 7671.41 C 8174.02 7674.27 8168.29 7678.57 8169.72 7681.44 C 8171.16 7684.3 8204.12 7702.94 8201.25 7714.4 C 8198.39 7718.7 8188.35 7718.7 8182.62 7717.27 C 8178.32 7714.4 8179.76 7705.8 8175.46 7702.94 C 8172.59 7700.07 8166.86 7707.24 8162.56 7704.37 C 8138.19 7685.74 8128.16 7628.41 8092.33 7678.57 C 8090.9 7681.44 8093.77 7711.53 8096.63 7728.73 C 8098.06 7733.03 8098.06 7743.06 8093.77 7741.63 C 8057.94 7737.33 8080.87 7701.5 8069.4 7685.74 C 8067.97 7684.3 8063.67 7685.74 8062.24 7684.3 C 8053.64 7675.71 8049.34 7665.67 8042.17 7655.64 C 8037.87 7648.48 8035.01 7635.58 8026.41 7634.14 C 7957.61 7618.38 8019.24 7684.3 7994.88 7695.77 C 7953.32 7714.4 7964.78 7667.11 7963.35 7657.07 C 7963.35 7654.21 7959.05 7654.21 7957.61 7654.21 C 7944.72 7655.64 7937.55 7638.44 7934.68 7622.68 C 7931.82 7601.18 7949.02 7625.54 7951.88 7592.58 C 7953.32 7569.65 7916.05 7540.99 7897.42 7535.26 C 7893.12 7533.82 7888.82 7543.85 7885.96 7539.55 C 7880.22 7532.39 7885.96 7519.49 7878.79 7512.32 C 7870.19 7503.73 7831.5 7515.19 7851.56 7487.96 C 7852.99 7486.53 7858.73 7489.39 7860.16 7486.53 C 7883.09 7470.76 7871.62 7457.86 7878.79 7430.63 C 7878.79 7427.77 7881.66 7436.37 7884.52 7436.37 C 7885.96 7436.37 7881.66 7430.63 7883.09 7430.63 C 7897.42 7430.63 7911.75 7444.97 7923.22 7433.5 C 7938.98 7417.74 7917.49 7416.3 7946.15 7397.67 C 7966.21 7384.77 7980.55 7406.27 7996.31 7412 C 8019.24 7420.6 8046.47 7417.74 8070.83 7424.9 C 8085.17 7427.77 8093.77 7444.97 8108.1 7446.4 C 8113.83 7447.83 8125.3 7440.67 8123.86 7433.5 C 8121 7427.77 8105.23 7434.93 8102.36 7427.77 C 8088.03 7394.81 8138.19 7443.53 8155.39 7396.24 C 8156.82 7391.94 8145.36 7399.1 8139.63 7396.24 C 8136.76 7394.81 8139.63 7387.64 8136.76 7387.64 C 8133.89 7387.64 8132.46 7404.84 8125.3 7396.24 C 8113.83 7381.91 8105.23 7401.97 8086.6 7393.37 C 8076.57 7387.64 8073.7 7370.44 8062.24 7369.01 C 8055.07 7367.58 8059.37 7390.51 8050.77 7390.51 C 8024.97 7389.07 8042.17 7330.31 8023.54 7363.28 C 8020.67 7369.01 8030.71 7380.47 8024.97 7384.77 C 8014.94 7394.81 7969.08 7376.17 7959.05 7380.47 C 7940.42 7387.64 7926.09 7404.84 7898.85 7412 C 7883.09 7416.3 7878.79 7391.94 7870.19 7387.64 C 7865.89 7386.21 7871.62 7397.67 7868.76 7400.54 C 7863.03 7409.14 7852.99 7416.3 7844.39 7420.6 C 7841.53 7422.04 7842.96 7414.87 7841.53 7414.87 C 7825.76 7407.7 7841.53 7394.81 7831.5 7379.04 C 7825.76 7370.44 7818.6 7361.84 7810 7356.11 C 7807.13 7354.68 7802.83 7360.41 7801.4 7357.54 C 7794.23 7351.81 7797.1 7338.91 7789.93 7334.61 C 7775.6 7324.58 7749.81 7363.28 7771.3 7310.25 C 7768.44 7308.82 7765.57 7307.38 7761.27 7304.52 C 7756.97 7300.22 7759.84 7293.05 7756.97 7288.75 C 7741.21 7268.69 7701.08 7250.06 7683.88 7235.72 C 7678.15 7232.86 7686.75 7218.53 7682.45 7214.23 C 7678.15 7209.93 7656.65 7225.69 7642.32 7191.3 C 7643.75 7189.86 7643.75 7189.86 7645.18 7188.43 C 7646.62 7187 7643.75 7185.56 7645.18 7185.56 C 7669.55 7181.26 7685.31 7201.33 7683.88 7164.07 C 7683.88 7155.47 7703.94 7168.36 7699.64 7155.47 L 7681.01 7126.8 C 7682.45 7116.77 7726.88 7102.44 7729.74 7098.14 C 7729.74 7096.71 7738.34 7039.38 7738.34 7039.38 C 7748.37 7000.68 7756.97 7047.98 7771.3 6993.52 C 7775.6 6976.32 7755.54 6970.59 7755.54 6951.96 C 7765.57 6953.39 7861.59 6923.29 7867.33 6918.99 C 7883.09 6901.8 7871.62 6878.87 7900.29 6868.83 C 7910.32 6864.53 7966.21 6871.7 7974.81 6865.97 C 7979.11 6863.1 7977.68 6854.5 7981.98 6851.64 C 7984.84 6850.2 7989.14 6858.8 7992.01 6855.93 C 8009.08 6842.57 8015.32 6824.48 8011.68 6807.71 C 8017.85 6823.69 8018.06 6796.74 8017.81 6794.31 C 8016.62 6813.43 8016.88 6812.94 8035.01 6812.94 C 8040.74 6812.94 8047.9 6817.24 8052.2 6812.94 C 8057.94 6810.07 8057.94 6798.61 8063.67 6795.74 C 8079.43 6785.71 8100.93 6791.44 8118.13 6785.71 C 8158.26 6771.38 8168.29 6754.18 8194.09 6738.42 C 8198.39 6735.55 8205.55 6747.01 8211.29 6744.15 C 8219.88 6742.71 8224.18 6728.38 8232.78 6731.25 C 8244.25 6732.68 8247.11 6748.45 8257.15 6754.18 C 8258.58 6757.05 8262.88 6751.31 8265.75 6752.75 C 8270.04 6754.18 8272.91 6764.21 8277.21 6762.78 C 8282.94 6761.35 8282.94 6749.88 8288.68 6748.45 C 8304.44 6744.15 8323.07 6752.75 8337.4 6759.91 C 8340.27 6761.35 8337.4 6768.51 8341.7 6768.51 C 8361.77 6769.94 8393.3 6745.58 8413.36 6738.42 M 7830.06 7293.05 C 7847.26 7261.52 7804.27 7295.92 7802.83 7294.48 C 7792.8 7290.18 7784.2 7271.55 7775.6 7277.29 C 7772.74 7277.29 7782.77 7298.78 7781.34 7307.38 C 7795.67 7307.38 7821.46 7307.38 7830.06 7293.05 M 7805.7 7463.6 C 7794.23 7473.63 7789.93 7459.3 7779.9 7457.86 C 7774.17 7457.86 7768.44 7465.03 7762.7 7463.6 C 7752.67 7460.73 7756.97 7427.77 7748.37 7434.93 C 7744.07 7437.8 7751.24 7447.83 7748.37 7453.56 C 7736.91 7477.93 7729.74 7436.37 7761.27 7394.81 C 7765.57 7401.97 7771.3 7409.14 7774.17 7417.74 C 7774.17 7419.17 7769.87 7432.07 7777.04 7433.5 C 7784.2 7434.93 7821.46 7450.7 7805.7 7463.6 M 8295.84 7341.78 C 8288.68 7333.18 8278.64 7326.01 8267.18 7321.71 C 8249.98 7315.98 8225.62 7343.21 8206.99 7324.58 C 8204.12 7320.28 8212.72 7314.55 8209.85 7310.25 C 8205.55 7297.35 8121 7257.22 8105.23 7260.09 C 8096.63 7262.95 8092.33 7272.99 8085.17 7277.29 C 8080.87 7278.72 8088.03 7268.69 8090.9 7265.82 C 8095.2 7261.52 8100.93 7257.22 8105.23 7252.92 C 8110.96 7247.19 8115.26 7242.89 8121 7238.59 C 8129.59 7232.86 8138.19 7228.56 8146.79 7224.26 C 8171.16 7237.16 8168.29 7250.06 8192.65 7262.95 C 8196.95 7265.82 8202.69 7267.25 8208.42 7267.25 C 8211.28 7267.25 8212.72 7261.52 8215.58 7262.95 C 8222.75 7265.82 8228.48 7274.42 8237.08 7277.29 C 8245.68 7278.72 8275.78 7261.52 8281.51 7271.55 C 8282.94 7272.99 8280.08 7274.42 8280.08 7275.85 C 8278.64 7277.29 8277.21 7280.15 8278.64 7281.59 C 8284.38 7287.32 8294.41 7287.32 8298.71 7294.48 C 8298.71 7295.92 8295.84 7338.91 8310.17 7348.94 C 8325.94 7360.41 8390.43 7338.91 8364.63 7381.91 C 8350.3 7404.84 8311.61 7376.17 8303.01 7366.14 C 8301.57 7363.28 8307.31 7361.84 8307.31 7358.98 C 8305.87 7354.68 8301.57 7350.38 8297.27 7347.51 C 8294.41 7347.51 8291.54 7354.68 8290.11 7351.81 C 8290.11 7348.94 8298.71 7344.64 8295.84 7341.78 " }
+ }
+ }
+ // PATH visit ee count: 241
+ DemoShape {
+ objectName: "ee"
+ ShapePath {
+ objectName: "svg_path:ee"
+ // boundingRect: 7343.68, 3343.25 605.443x415.507
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7607.92 3723.03 C 7619.39 3720.17 7663.82 3678.61 7676.71 3668.57 C 7685.31 3662.84 7701.08 3690.07 7696.78 3671.44 C 7696.78 3670.01 7695.35 3670.01 7695.35 3668.57 C 7695.35 3665.71 7692.48 3661.41 7695.35 3661.41 C 7708.24 3661.41 7724.01 3682.91 7732.61 3685.77 C 7736.91 3687.21 7741.21 3678.61 7745.51 3678.61 C 7749.81 3680.04 7748.37 3688.64 7752.67 3690.07 C 7761.27 3692.94 7769.87 3684.34 7778.47 3687.21 C 7782.77 3688.64 7777.04 3697.24 7779.9 3700.1 C 7785.63 3708.7 7831.5 3738.8 7841.53 3737.37 C 7842.96 3737.37 7870.19 3707.27 7870.19 3707.27 C 7875.92 3705.84 7918.92 3721.6 7920.35 3714.44 C 7923.22 3707.27 7913.19 3687.21 7917.49 3682.91 C 7920.35 3680.04 7927.52 3680.04 7928.95 3675.74 C 7930.38 3672.87 7924.65 3671.44 7924.65 3667.14 C 7923.22 3664.27 7923.22 3659.98 7924.65 3657.11 C 7941.85 3642.78 7943.28 3658.54 7949.02 3641.34 C 7950.45 3637.04 7937.55 3639.91 7933.25 3635.61 C 7923.22 3625.58 7928.95 3618.41 7926.09 3608.38 C 7924.65 3604.08 7901.72 3591.18 7897.42 3586.88 C 7885.96 3566.82 7898.85 3575.42 7898.85 3556.79 C 7898.85 3530.99 7870.19 3503.76 7865.89 3477.96 C 7864.46 3462.2 7881.66 3450.73 7885.96 3439.27 C 7885.96 3439.27 7887.39 3403.44 7887.39 3403.44 C 7887.39 3396.27 7881.66 3387.67 7885.96 3381.94 C 7900.29 3351.84 7924.65 3364.74 7890.26 3343.25 C 7888.82 3348.98 7885.96 3354.71 7875.92 3360.44 C 7863.03 3369.04 7728.31 3370.48 7705.38 3367.61 C 7701.08 3367.61 7698.21 3360.44 7692.48 3361.88 C 7665.25 3367.61 7726.88 3383.37 7681.01 3377.64 C 7673.85 3376.21 7672.41 3360.44 7665.25 3361.88 C 7659.52 3363.31 7669.55 3374.78 7666.68 3380.51 C 7662.38 3389.11 7653.78 3397.71 7645.18 3402.01 C 7630.85 3409.17 7615.09 3412.04 7599.32 3409.17 C 7593.59 3407.74 7589.29 3396.27 7584.99 3399.14 C 7577.83 3403.44 7595.02 3419.2 7587.86 3420.64 C 7573.53 3424.94 7530.53 3426.37 7521.93 3447.87 C 7519.07 3455.03 7534.83 3462.2 7530.53 3467.93 C 7523.37 3479.4 7480.37 3476.53 7474.64 3489.43 C 7454.57 3543.89 7491.84 3509.49 7500.43 3532.42 C 7504.73 3545.32 7483.24 3561.09 7488.97 3573.99 C 7494.7 3589.75 7517.63 3605.51 7520.5 3611.25 C 7529.1 3624.15 7514.77 3638.48 7533.4 3648.51 C 7540.56 3651.38 7549.16 3644.21 7556.33 3647.08 C 7563.49 3648.51 7567.79 3662.84 7574.96 3658.54 C 7584.99 3652.81 7584.99 3598.35 7615.09 3634.18 C 7617.95 3638.48 7607.92 3642.78 7607.92 3648.51 C 7607.92 3659.98 7613.66 3671.44 7613.66 3682.91 C 7613.66 3711.57 7602.19 3695.8 7605.06 3721.6 L 7607.92 3723.03 M 7451.71 3612.68 C 7470.34 3625.58 7468.91 3627.01 7491.84 3637.04 C 7501.87 3642.78 7474.64 3624.15 7480.37 3635.61 C 7486.1 3648.51 7481.8 3629.88 7471.77 3631.31 C 7463.17 3632.75 7471.77 3651.38 7464.61 3658.54 C 7463.17 3659.98 7457.44 3651.38 7456.01 3654.24 C 7453.14 3657.11 7457.44 3664.27 7456.01 3670.01 C 7448.84 3688.64 7434.51 3682.91 7430.21 3684.34 C 7427.34 3684.34 7427.34 3690.07 7424.48 3691.51 C 7415.88 3695.8 7405.85 3698.67 7398.68 3702.97 C 7397.25 3702.97 7397.25 3704.4 7397.25 3705.84 C 7397.25 3717.3 7400.11 3730.2 7397.25 3741.67 C 7394.38 3748.83 7384.35 3763.16 7378.62 3757.43 C 7361.42 3737.37 7394.38 3725.9 7391.51 3710.14 C 7390.08 3705.84 7382.92 3711.57 7378.62 3708.7 C 7370.02 3704.4 7357.12 3701.54 7352.82 3691.51 C 7349.95 3685.77 7365.72 3682.91 7364.28 3677.17 C 7362.85 3665.71 7339.92 3661.41 7344.22 3651.38 C 7347.09 3642.78 7361.42 3662.84 7371.45 3662.84 C 7380.05 3662.84 7367.15 3639.91 7375.75 3635.61 C 7380.05 3634.18 7385.78 3648.51 7387.21 3644.21 C 7397.25 3609.81 7418.74 3622.71 7451.71 3612.68 M 7400.11 3529.56 C 7402.98 3529.56 7407.28 3528.12 7408.71 3530.99 C 7411.58 3533.86 7407.28 3541.02 7411.58 3543.89 C 7417.31 3546.76 7427.34 3539.59 7433.08 3542.46 C 7481.8 3571.12 7435.94 3565.39 7433.08 3571.12 C 7421.61 3598.35 7461.74 3575.42 7408.71 3605.51 C 7392.95 3614.11 7391.51 3579.72 7391.51 3579.72 C 7385.78 3563.95 7359.98 3569.69 7349.95 3566.82 C 7339.92 3565.39 7371.45 3561.09 7381.48 3558.22 C 7394.38 3555.35 7397.25 3538.16 7400.11 3529.56 " }
+ }
+ }
+ // PATH visit lv count: 185
+ DemoShape {
+ objectName: "lv"
+ ShapePath {
+ objectName: "svg_path:lv"
+ // boundingRect: 7317.75, 3661.41 750.748x453.11
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7341.35 4114.29 C 7347.09 4114.29 7352.82 4115.72 7357.12 4111.42 C 7362.85 4102.82 7361.42 4089.93 7367.15 4081.33 C 7378.62 4066.99 7424.48 4038.33 7441.68 4034.03 C 7451.71 4031.17 7497.57 4034.03 7507.6 4031.17 C 7513.33 4029.73 7517.63 4018.27 7523.37 4018.27 C 7533.4 4019.7 7539.13 4044.06 7544.86 4036.9 C 7549.16 4034.03 7547.73 4026.87 7552.03 4022.57 C 7564.93 4009.67 7570.66 4024 7586.42 4022.57 C 7595.02 4021.13 7599.32 4012.53 7607.92 4012.53 C 7609.36 4011.1 7652.35 4022.57 7653.78 4021.13 C 7660.95 4019.7 7663.82 4009.67 7670.98 4008.23 C 7683.88 4005.37 7683.88 4026.87 7695.35 4009.67 C 7703.94 3999.64 7703.94 3975.27 7721.14 3972.41 C 7735.47 3969.54 7741.21 4015.4 7759.84 4015.4 C 7778.47 4015.4 7797.1 4003.94 7815.73 4009.67 C 7842.96 4016.83 7885.96 4069.86 7918.92 4075.59 C 7954.75 4081.33 7956.18 4026.87 7977.68 4028.3 C 7984.84 4028.3 7989.14 4036.9 7994.88 4036.9 C 7999.18 4036.9 7996.31 4026.87 7999.18 4025.43 C 8007.78 4022.57 8019.24 4031.17 8026.41 4025.43 C 8026.41 4025.43 8033.57 3982.44 8036.44 3978.14 C 8039.31 3969.54 8066.54 3948.04 8066.54 3946.61 C 8078 3905.05 8036.44 3866.35 8012.08 3846.29 C 8002.04 3839.12 8022.11 3826.22 8002.04 3823.36 C 7994.88 3821.92 7989.14 3833.39 7981.98 3831.96 C 7979.11 3831.96 7981.98 3827.66 7981.98 3824.79 C 7981.98 3823.36 7983.41 3820.49 7983.41 3819.06 C 7983.41 3809.02 7986.28 3798.99 7984.84 3788.96 C 7983.41 3784.66 7973.38 3786.09 7973.38 3781.79 C 7973.38 3763.16 8007.78 3751.7 7960.48 3734.5 C 7954.75 3733.07 7946.15 3733.07 7941.85 3728.77 C 7937.55 3723.03 7944.72 3713 7938.98 3710.14 C 7933.25 3705.84 7927.52 3713 7920.35 3714.44 C 7918.92 3721.6 7875.92 3705.84 7870.19 3707.27 C 7870.19 3707.27 7842.96 3737.37 7841.53 3737.37 C 7831.5 3738.8 7785.63 3708.7 7779.9 3700.1 C 7777.04 3697.24 7782.77 3688.64 7778.47 3687.21 C 7769.87 3684.34 7761.27 3692.94 7752.67 3690.07 C 7748.37 3688.64 7749.81 3680.04 7745.51 3678.61 C 7741.21 3678.61 7736.91 3687.21 7732.61 3685.77 C 7724.01 3682.91 7708.24 3661.41 7695.35 3661.41 C 7692.48 3661.41 7695.35 3665.71 7695.35 3668.57 C 7695.35 3670.01 7696.78 3670.01 7696.78 3671.44 C 7701.08 3690.07 7685.31 3662.84 7676.71 3668.57 C 7663.82 3678.61 7619.39 3720.17 7607.92 3723.03 L 7605.06 3721.6 C 7606.49 3724.47 7606.49 3728.77 7606.49 3733.07 C 7612.22 3763.16 7649.48 3804.73 7640.89 3837.69 C 7636.59 3857.75 7602.19 3899.31 7580.69 3902.18 C 7572.09 3903.61 7566.36 3895.01 7559.19 3893.58 C 7544.86 3889.28 7542 3899.31 7533.4 3884.98 C 7523.37 3870.65 7523.37 3850.59 7510.47 3839.12 C 7497.57 3826.22 7467.47 3820.49 7453.14 3807.59 C 7444.54 3800.43 7453.14 3781.79 7444.54 3777.49 C 7431.64 3771.76 7421.61 3791.83 7410.15 3798.99 C 7395.81 3810.46 7375.75 3813.32 7362.85 3827.66 C 7328.45 3863.48 7358.55 3905.05 7345.65 3940.88 C 7341.35 3955.21 7322.72 3960.94 7318.42 3975.27 C 7315.56 3983.87 7322.72 3992.47 7322.72 4002.5 C 7322.72 4012.53 7318.42 4022.57 7321.29 4031.17 C 7321.29 4032.6 7322.72 4034.03 7324.16 4034.03 C 7309.82 4051.23 7332.75 4094.22 7341.35 4114.29 " }
+ }
+ }
+ // PATH visit lt count: 204
+ DemoShape {
+ objectName: "lt"
+ ShapePath {
+ objectName: "svg_path:lt"
+ // boundingRect: 7341.35, 3972.28 628.209x494.871
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7579.26 4400.92 C 7582.13 4398.06 7582.13 4392.32 7586.42 4390.89 C 7607.92 4383.72 7597.89 4402.36 7612.22 4408.09 C 7652.35 4425.29 7636.59 4393.76 7662.38 4431.02 C 7670.98 4442.48 7662.38 4458.25 7670.98 4463.98 C 7688.18 4475.45 7729.74 4452.52 7741.21 4446.78 C 7752.67 4442.48 7758.4 4468.28 7771.3 4456.82 C 7779.9 4451.08 7781.34 4436.75 7789.93 4431.02 C 7797.1 4426.72 7805.7 4431.02 7812.86 4429.59 C 7820.03 4426.72 7799.97 4410.95 7805.7 4405.22 C 7812.86 4396.62 7827.2 4399.49 7837.23 4395.19 C 7860.16 4382.29 7828.63 4383.72 7844.39 4367.96 C 7848.69 4362.23 7881.66 4346.46 7884.52 4365.09 C 7885.96 4369.39 7878.79 4372.26 7878.79 4376.56 C 7877.36 4389.46 7906.02 4379.42 7908.89 4372.26 C 7921.79 4340.73 7877.36 4349.33 7877.36 4343.6 C 7875.92 4337.86 7890.26 4297.73 7890.26 4296.3 C 7890.26 4296.3 7877.36 4256.17 7877.36 4256.17 C 7877.36 4254.74 7883.09 4254.74 7883.09 4251.87 C 7900.29 4198.85 7887.39 4254.74 7914.62 4211.74 C 7921.79 4203.15 7914.62 4188.81 7920.35 4178.78 C 7927.52 4168.75 7949.02 4183.08 7957.61 4173.05 C 7961.91 4167.32 7956.18 4158.72 7957.61 4152.98 C 7960.48 4148.68 7967.65 4148.68 7969.08 4144.39 C 7974.81 4124.32 7927.52 4150.12 7928.95 4137.22 C 7930.38 4115.72 7940.42 4097.09 7931.82 4075.59 L 7931.82 4074.16 C 7927.52 4075.59 7923.22 4075.59 7918.92 4075.59 C 7885.96 4069.86 7842.96 4016.83 7815.73 4009.67 C 7797.1 4003.94 7778.47 4015.4 7759.84 4015.4 C 7741.21 4015.4 7735.47 3969.54 7721.14 3972.41 C 7703.94 3975.27 7703.94 3999.64 7695.35 4009.67 C 7683.88 4026.87 7683.88 4005.37 7670.98 4008.23 C 7663.82 4009.67 7660.95 4019.7 7653.78 4021.13 C 7652.35 4022.57 7609.36 4011.1 7607.92 4012.53 C 7599.32 4012.53 7595.02 4021.13 7586.42 4022.57 C 7570.66 4024 7564.93 4009.67 7552.03 4022.57 C 7547.73 4026.87 7549.16 4034.03 7544.86 4036.9 C 7539.13 4044.06 7533.4 4019.7 7523.37 4018.27 C 7517.63 4018.27 7513.33 4029.73 7507.6 4031.17 C 7497.57 4034.03 7451.71 4031.17 7441.67 4034.03 C 7424.48 4038.33 7378.62 4066.99 7367.15 4081.33 C 7361.42 4089.93 7362.85 4102.82 7357.12 4111.42 C 7352.82 4115.72 7347.09 4114.29 7341.35 4114.29 C 7342.79 4117.16 7342.79 4118.59 7344.22 4120.02 C 7354.25 4157.28 7337.05 4134.35 7351.39 4170.18 C 7352.82 4173.05 7354.25 4175.91 7357.12 4178.78 C 7359.98 4184.51 7362.85 4188.81 7365.72 4193.11 C 7372.88 4203.15 7378.62 4214.61 7380.05 4226.08 C 7381.48 4234.67 7375.75 4243.27 7377.18 4251.87 C 7378.62 4254.74 7380.05 4244.71 7382.92 4244.71 C 7388.65 4243.27 7388.65 4254.74 7390.08 4259.04 C 7390.08 4261.9 7390.08 4263.34 7390.08 4264.77 C 7394.38 4263.34 7395.81 4257.61 7400.11 4257.61 C 7404.41 4259.04 7404.41 4266.2 7408.71 4269.07 C 7425.91 4279.1 7454.57 4277.67 7473.2 4283.4 C 7476.07 4284.84 7471.77 4289.13 7474.64 4289.13 C 7496.14 4289.13 7516.2 4270.5 7536.26 4276.24 C 7542 4277.67 7539.13 4289.13 7544.86 4293.43 C 7546.3 4294.87 7550.6 4290.57 7553.46 4292 C 7559.19 4294.87 7564.93 4299.17 7569.23 4304.9 C 7577.83 4319.23 7547.73 4357.93 7579.26 4400.92 M 7357.12 4178.78 C 7355.69 4180.21 7355.69 4181.65 7355.69 4181.65 C 7351.39 4193.11 7361.42 4204.58 7362.85 4216.04 C 7364.28 4230.38 7361.42 4246.14 7355.69 4263.34 C 7355.69 4263.34 7357.12 4263.34 7357.12 4263.34 C 7361.42 4254.74 7362.85 4246.14 7364.28 4234.67 C 7364.28 4228.94 7365.72 4208.88 7365.72 4193.11 C 7365.72 4174.48 7364.28 4161.58 7357.12 4178.78 " }
+ }
+ }
+ // PATH visit pl count: 369
+ DemoShape {
+ objectName: "pl"
+ ShapePath {
+ objectName: "svg_path:pl"
+ // boundingRect: 6620.47, 4386.96 1245.42x1032.41
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 6763.79 5169.1 C 6802.48 5163.37 6756.62 5131.84 6796.75 5139 C 6822.55 5141.87 6801.05 5153.33 6816.81 5164.8 C 6839.75 5183.43 6858.38 5170.53 6877.01 5182 C 6882.74 5186.3 6881.31 5193.46 6884.17 5197.76 C 6887.04 5199.2 6888.47 5194.9 6889.91 5194.9 C 6894.21 5193.46 6898.51 5190.6 6899.94 5193.46 C 6904.24 5197.76 6899.94 5204.93 6904.24 5209.23 C 6904.24 5209.23 6935.77 5192.03 6942.93 5196.33 C 6981.63 5214.96 6927.17 5222.13 6930.03 5240.76 C 6930.03 5240.76 6963 5260.82 6963 5260.82 C 6967.3 5266.55 6975.9 5303.82 6997.39 5295.22 C 7003.13 5292.35 7001.69 5282.32 7005.99 5278.02 C 7013.16 5272.29 7027.49 5275.15 7031.79 5266.55 C 7033.22 5263.69 7001.69 5232.16 7010.29 5230.72 C 7031.79 5227.86 7056.15 5249.36 7069.05 5253.66 C 7074.78 5255.09 7081.95 5252.22 7087.68 5252.22 C 7093.42 5252.22 7100.58 5255.09 7106.31 5252.22 C 7109.18 5250.79 7107.75 5245.06 7109.18 5242.19 C 7110.61 5240.76 7113.48 5240.76 7113.48 5242.19 C 7130.68 5276.59 7119.21 5255.09 7100.58 5272.29 C 7094.85 5276.59 7114.91 5278.02 7120.65 5282.32 C 7124.95 5286.62 7123.51 5293.78 7127.81 5298.08 C 7130.68 5300.95 7134.98 5302.38 7137.84 5302.38 C 7179.41 5298.08 7132.11 5295.22 7156.48 5285.19 C 7159.34 5283.75 7159.34 5289.48 7162.21 5290.92 C 7167.94 5295.22 7183.71 5299.52 7190.87 5300.95 C 7199.47 5303.82 7212.37 5299.52 7219.53 5305.25 C 7220.97 5306.68 7233.87 5341.08 7235.3 5342.51 C 7241.03 5346.81 7252.5 5342.51 7258.23 5348.24 C 7263.96 5355.41 7259.66 5368.31 7265.4 5375.47 C 7268.26 5379.77 7278.29 5372.61 7282.59 5376.91 C 7286.89 5381.21 7279.73 5391.24 7284.03 5395.54 C 7306.96 5414.17 7325.59 5341.08 7339.92 5351.11 C 7348.52 5356.84 7348.52 5369.74 7355.69 5376.91 C 7357.12 5378.34 7362.85 5374.04 7364.28 5375.47 C 7365.72 5378.34 7359.98 5384.07 7362.85 5385.51 C 7370.02 5386.94 7377.18 5379.77 7382.92 5382.64 C 7392.95 5386.94 7384.35 5414.17 7384.35 5417.04 C 7384.35 5424.2 7397.25 5412.74 7404.41 5411.3 C 7410.15 5409.87 7415.88 5421.34 7421.61 5418.47 C 7423.04 5417.04 7440.24 5372.61 7460.31 5368.31 C 7466.04 5366.88 7471.77 5372.61 7477.5 5372.61 C 7483.24 5371.18 7486.1 5362.58 7491.84 5364.01 C 7503.3 5365.44 7510.47 5381.21 7521.93 5381.21 C 7530.53 5381.21 7537.7 5372.61 7542 5365.44 C 7543.43 5362.58 7534.83 5362.58 7534.83 5359.71 C 7539.13 5339.65 7547.73 5359.71 7553.46 5356.84 C 7557.76 5355.41 7557.76 5346.81 7562.06 5346.81 C 7583.56 5341.08 7632.29 5342.51 7650.92 5356.84 C 7655.22 5361.14 7653.78 5371.18 7659.52 5374.04 C 7668.12 5379.77 7678.15 5379.77 7688.18 5382.64 C 7706.81 5388.37 7724.01 5389.81 7741.21 5392.67 C 7748.37 5392.67 7755.54 5389.81 7762.7 5391.24 C 7765.57 5392.67 7771.3 5399.84 7769.87 5396.97 C 7752.67 5342.51 7767 5399.84 7742.64 5369.74 C 7736.91 5364.01 7748.37 5353.98 7746.94 5346.81 C 7742.64 5332.48 7728.31 5321.01 7725.44 5305.25 C 7721.14 5293.78 7808.57 5131.84 7820.03 5121.8 C 7845.83 5100.31 7861.59 5131.84 7865.89 5080.24 C 7865.89 5068.78 7837.23 5042.98 7835.8 5041.55 C 7828.63 5027.22 7861.59 5028.65 7857.29 5024.35 C 7834.36 5007.15 7792.8 4979.92 7779.9 4952.69 C 7777.04 4945.52 7782.77 4935.49 7779.9 4926.89 C 7775.6 4916.86 7762.7 4909.7 7758.4 4899.66 C 7746.94 4873.87 7777.04 4825.14 7748.37 4802.21 C 7736.91 4793.61 7722.58 4789.31 7709.68 4787.88 C 7706.81 4786.44 7703.94 4793.61 7701.08 4792.18 C 7659.52 4776.41 7749.81 4700.45 7759.84 4690.42 C 7761.27 4688.99 7764.14 4686.12 7764.14 4683.26 C 7759.84 4604.43 7696.78 4537.07 7670.98 4463.98 C 7662.38 4458.25 7670.98 4442.48 7662.38 4431.02 C 7636.59 4393.76 7652.35 4425.29 7612.22 4408.09 C 7597.89 4402.36 7607.92 4383.72 7586.42 4390.89 C 7582.13 4392.32 7582.13 4399.49 7577.83 4402.36 C 7511.9 4441.05 7318.42 4448.22 7236.73 4436.75 C 7210.94 4463.98 7170.81 4479.75 7137.84 4466.85 C 7109.18 4455.38 7114.91 4428.15 7106.31 4410.95 C 7103.45 4406.65 7093.42 4395.19 7099.15 4396.62 C 7103.45 4396.62 7107.75 4396.62 7110.61 4398.06 C 7103.45 4393.76 7094.85 4389.46 7086.25 4388.02 C 7034.66 4379.42 6977.33 4425.29 6938.63 4448.22 C 6925.74 4455.38 6909.97 4452.52 6899.94 4461.12 C 6875.57 4482.61 6869.84 4517.01 6862.68 4518.44 C 6809.65 4531.34 6759.49 4554.27 6709.33 4574.34 C 6696.43 4580.07 6687.83 4595.83 6674.93 4598.7 C 6667.77 4601.57 6660.6 4594.4 6653.43 4597.27 C 6640.54 4604.43 6670.63 4635.96 6657.73 4638.83 C 6660.6 4661.76 6683.53 4706.19 6686.4 4720.52 C 6690.7 4754.91 6644.83 4777.84 6654.87 4805.07 C 6660.6 4822.27 6715.06 4829.44 6715.06 4850.94 C 6715.06 4872.43 6697.86 4879.6 6710.76 4895.36 C 6715.06 4902.53 6725.09 4905.4 6727.96 4914 C 6732.26 4921.16 6726.53 4931.19 6727.96 4938.36 C 6729.39 4942.66 6735.12 4941.23 6736.56 4944.09 C 6743.72 4954.12 6726.53 4978.49 6722.23 4987.09 C 6713.63 4999.99 6735.12 5007.15 6739.42 5020.05 C 6742.29 5027.22 6732.26 5035.81 6736.56 5041.55 C 6742.29 5050.15 6755.19 5047.28 6760.92 5053.01 C 6778.12 5068.78 6775.25 5141.87 6763.79 5169.1 M 6620.47 4628.8 C 6620.47 4628.8 6621.9 4628.8 6621.9 4628.8 M 6621.9 4628.8 C 6623.34 4630.23 6624.77 4630.23 6626.2 4631.66 C 6624.77 4630.23 6623.34 4630.23 6621.9 4628.8 M 6629.07 4631.66 C 6629.07 4633.09 6629.07 4633.09 6629.07 4633.09 C 6630.5 4633.09 6630.5 4633.09 6630.5 4633.09 M 6630.5 4633.09 C 6630.5 4633.09 6630.5 4633.09 6631.94 4633.09 C 6630.5 4633.09 6630.5 4633.09 6630.5 4633.09 M 6633.37 4633.09 C 6633.37 4633.09 6633.37 4634.53 6634.8 4634.53 C 6633.37 4634.53 6633.37 4633.09 6633.37 4633.09 M 6634.8 4634.53 C 6636.24 4634.53 6636.24 4634.53 6636.24 4634.53 M 6636.24 4634.53 C 6637.67 4634.53 6637.67 4634.53 6637.67 4635.96 C 6637.67 4634.53 6637.67 4634.53 6636.24 4634.53 M 6637.67 4635.96 C 6639.1 4635.96 6639.1 4635.96 6639.1 4635.96 M 6639.1 4635.96 C 6640.54 4635.96 6640.54 4635.96 6640.54 4635.96 C 6640.54 4635.96 6640.54 4635.96 6639.1 4635.96 M 6652 4638.83 C 6652 4638.83 6652 4638.83 6653.43 4638.83 C 6653.43 4638.83 6652 4638.83 6652 4638.83 M 7129.24 4408.09 C 7134.98 4410.95 7140.71 4413.82 7145.01 4419.55 C 7146.44 4420.99 7146.44 4426.72 7143.58 4425.29 C 7133.54 4418.12 7130.68 4412.39 7129.24 4408.09 " }
+ }
+ }
+ // PATH visit cz count: 218
+ DemoShape {
+ objectName: "cz"
+ ShapePath {
+ objectName: "svg_path:cz"
+ // boundingRect: 6433.73, 5135.41 831.662x469.065
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7050.42 5566.09 C 7071.92 5481.53 7119.21 5553.19 7162.21 5498.73 C 7165.07 5494.43 7160.77 5487.26 7163.64 5482.96 C 7167.94 5477.23 7177.97 5480.1 7182.27 5474.36 C 7182.27 5474.36 7193.74 5429.93 7193.74 5428.5 C 7206.64 5405.57 7241.03 5386.94 7265.4 5375.47 C 7259.66 5368.31 7263.96 5355.41 7258.23 5348.24 C 7252.5 5342.51 7241.03 5346.81 7235.3 5342.51 C 7233.87 5341.08 7220.97 5306.68 7219.53 5305.25 C 7212.37 5299.52 7199.47 5303.82 7190.87 5300.95 C 7183.71 5299.52 7167.94 5295.22 7162.21 5290.92 C 7159.34 5289.48 7159.34 5283.75 7156.48 5285.19 C 7132.11 5295.22 7179.41 5298.08 7137.84 5302.38 C 7134.98 5302.38 7130.68 5300.95 7127.81 5298.08 C 7123.51 5293.78 7124.95 5286.62 7120.65 5282.32 C 7114.91 5278.02 7094.85 5276.59 7100.58 5272.29 C 7119.21 5255.09 7130.68 5276.59 7113.48 5242.19 C 7113.48 5240.76 7110.61 5240.76 7109.18 5242.19 C 7107.75 5245.06 7109.18 5250.79 7106.31 5252.22 C 7100.58 5255.09 7093.42 5252.22 7087.68 5252.22 C 7081.95 5252.22 7074.78 5255.09 7069.05 5253.66 C 7056.15 5249.36 7031.79 5227.86 7010.29 5230.72 C 7001.69 5232.16 7033.22 5263.69 7031.79 5266.55 C 7027.49 5275.15 7013.16 5272.29 7005.99 5278.02 C 7001.69 5282.32 7003.13 5292.35 6997.39 5295.22 C 6975.9 5303.82 6967.3 5266.55 6963 5260.82 C 6963 5260.82 6930.03 5240.76 6930.03 5240.76 C 6927.17 5222.13 6981.63 5214.96 6942.93 5196.33 C 6935.77 5192.03 6904.24 5209.23 6904.24 5209.23 C 6899.94 5204.93 6904.24 5197.76 6899.94 5193.46 C 6898.51 5190.6 6894.21 5193.46 6889.91 5194.9 C 6888.47 5194.9 6887.04 5199.2 6884.17 5197.76 C 6881.31 5193.46 6882.74 5186.3 6877.01 5182 C 6858.38 5170.53 6839.75 5183.43 6816.81 5164.8 C 6801.05 5153.33 6822.55 5141.87 6796.75 5139 C 6756.62 5131.84 6802.48 5163.37 6763.79 5169.1 C 6760.92 5174.83 6759.49 5179.13 6755.19 5179.13 C 6736.56 5183.43 6706.46 5104.61 6690.7 5149.03 C 6687.83 5156.2 6713.63 5161.93 6707.89 5166.23 C 6690.7 5180.56 6666.33 5182 6649.13 5192.03 C 6646.27 5193.46 6649.13 5200.63 6646.27 5202.06 C 6634.8 5207.79 6619.04 5199.2 6610.44 5206.36 C 6603.27 5212.09 6606.14 5223.56 6598.97 5229.29 C 6596.11 5232.16 6593.24 5222.13 6588.94 5223.56 C 6576.04 5226.43 6574.61 5243.62 6566.01 5249.36 C 6561.71 5253.66 6553.11 5246.49 6548.81 5250.79 C 6544.51 5253.66 6548.81 5262.25 6544.51 5266.55 C 6538.78 5273.72 6523.02 5260.82 6518.72 5260.82 C 6482.89 5266.55 6477.15 5293.78 6465.69 5316.71 C 6462.82 5322.45 6462.82 5302.38 6457.09 5298.08 C 6452.79 5292.35 6444.19 5290.92 6437.03 5289.48 C 6424.13 5286.62 6451.36 5332.48 6480.02 5351.11 C 6482.89 5352.54 6492.92 5353.98 6494.35 5362.58 C 6498.65 5382.64 6480.02 5375.47 6477.15 5391.24 C 6475.72 5395.54 6507.25 5448.57 6511.55 5452.87 C 6535.91 5477.23 6541.65 5460.03 6557.41 5475.8 C 6567.44 5485.83 6568.88 5501.59 6578.91 5510.19 C 6598.97 5524.52 6649.13 5543.16 6659.17 5571.82 L 6660.6 5571.82 C 6683.53 5583.28 6700.73 5613.38 6730.82 5601.91 C 6736.56 5600.48 6735.12 5589.02 6740.86 5589.02 C 6750.89 5589.02 6760.92 5601.91 6770.95 5599.05 C 6770.95 5599.05 6782.42 5561.79 6782.42 5561.79 C 6788.15 5557.49 6798.18 5567.52 6801.05 5563.22 C 6803.92 5560.35 6801.05 5518.79 6802.48 5515.92 C 6806.78 5511.63 6815.38 5514.49 6821.11 5517.36 C 6823.98 5518.79 6821.11 5525.96 6823.98 5527.39 C 6831.15 5527.39 6836.88 5518.79 6844.05 5518.79 C 6885.61 5518.79 6918.57 5550.32 6957.27 5554.62 C 6963 5554.62 6970.16 5557.49 6975.9 5556.05 C 6984.5 5551.75 6987.36 5540.29 6994.53 5537.42 C 7004.56 5534.56 7018.89 5553.19 7026.06 5554.62 C 7030.36 5554.62 7036.09 5546.02 7040.39 5548.89 C 7047.55 5554.62 7050.42 5560.35 7050.42 5566.09 " }
+ }
+ }
+ // PATH visit sk count: 145
+ DemoShape {
+ objectName: "sk"
+ ShapePath {
+ objectName: "svg_path:sk"
+ // boundingRect: 7038.35, 5343.67 688.663x378.89
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7726.88 5389.81 C 7728.31 5404.14 7718.28 5424.2 7716.84 5438.53 C 7715.41 5448.57 7716.84 5458.6 7712.54 5467.2 C 7708.24 5477.23 7695.35 5480.1 7693.91 5490.13 C 7691.05 5500.16 7698.21 5510.19 7698.21 5521.66 C 7698.21 5533.12 7676.71 5533.12 7665.25 5535.99 C 7659.52 5537.42 7653.78 5544.59 7649.48 5541.72 C 7622.25 5533.12 7643.75 5505.89 7607.92 5504.46 C 7593.59 5504.46 7584.99 5524.52 7570.66 5525.96 C 7546.3 5530.26 7514.77 5504.46 7493.27 5531.69 C 7484.67 5543.15 7490.4 5581.85 7474.64 5589.02 C 7468.91 5590.45 7460.31 5584.72 7454.57 5587.58 C 7431.64 5601.91 7464.61 5611.95 7428.78 5617.68 C 7417.31 5619.11 7391.51 5587.58 7380.05 5607.65 C 7375.75 5614.81 7382.92 5627.71 7377.18 5633.44 C 7361.42 5649.21 7316.99 5639.18 7296.93 5653.51 C 7278.29 5664.97 7298.36 5685.04 7304.09 5693.64 C 7309.82 5703.67 7188 5725.17 7170.81 5722.3 C 7143.58 5716.57 7123.51 5679.31 7097.72 5676.44 C 7091.98 5675.01 7087.68 5676.44 7084.82 5677.87 C 7067.62 5659.24 7053.29 5640.61 7040.39 5619.11 C 7031.79 5604.78 7053.29 5584.72 7051.85 5566.09 C 7071.92 5481.53 7119.21 5551.75 7162.21 5498.73 C 7165.07 5494.43 7160.77 5487.26 7163.64 5482.96 C 7167.94 5477.23 7177.97 5480.1 7182.27 5474.36 C 7182.27 5474.36 7193.74 5429.93 7193.74 5428.5 C 7206.64 5405.57 7241.03 5386.94 7265.4 5375.47 C 7268.26 5379.77 7278.29 5372.61 7282.59 5376.91 C 7286.89 5381.21 7279.73 5391.24 7284.03 5395.54 C 7306.96 5414.17 7325.59 5341.08 7339.92 5351.11 C 7348.52 5356.84 7348.52 5369.74 7355.69 5376.91 C 7357.12 5378.34 7362.85 5374.04 7364.28 5375.47 C 7365.72 5378.34 7359.98 5384.07 7362.85 5385.51 C 7370.02 5386.94 7377.18 5379.77 7382.92 5382.64 C 7392.95 5386.94 7384.35 5414.17 7384.35 5417.04 C 7384.35 5424.2 7397.25 5412.74 7404.41 5411.3 C 7410.15 5409.87 7415.88 5421.34 7421.61 5418.47 C 7423.04 5417.04 7440.24 5372.61 7460.31 5368.31 C 7466.04 5366.88 7471.77 5372.61 7477.5 5372.61 C 7483.24 5371.18 7486.1 5362.58 7491.84 5364.01 C 7503.3 5365.44 7510.47 5381.21 7521.93 5381.21 C 7530.53 5381.21 7537.7 5372.61 7542 5365.44 C 7543.43 5362.58 7534.83 5362.58 7534.83 5359.71 C 7539.13 5339.65 7547.73 5359.71 7553.46 5356.84 C 7557.76 5355.41 7557.76 5346.81 7562.06 5346.81 C 7583.56 5341.08 7632.29 5342.51 7650.92 5356.84 C 7655.22 5361.14 7653.78 5371.18 7659.52 5374.04 C 7668.12 5379.77 7678.15 5379.77 7688.18 5382.64 C 7701.08 5386.94 7713.98 5388.37 7726.88 5389.81 " }
+ }
+ }
+ // PATH visit si count: 115
+ DemoShape {
+ objectName: "si"
+ ShapePath {
+ objectName: "svg_path:si"
+ // boundingRect: 6626.03, 5905.75 415.794x290.052
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7041.82 5974.54 C 7031.79 5973.1 7007.43 5967.37 7001.69 5968.81 C 6985.93 5971.67 7007.43 5991.74 6998.83 5997.47 C 6991.66 6000.33 6983.06 5996.04 6975.9 5998.9 C 6973.03 6000.33 6977.33 6006.07 6974.46 6008.93 C 6960.13 6020.4 6937.2 6021.83 6922.87 6034.73 C 6905.67 6050.5 6954.4 6090.62 6932.9 6106.39 C 6882.74 6142.22 6914.27 6082.03 6881.31 6129.32 C 6877.01 6135.05 6894.21 6136.49 6897.07 6143.65 C 6899.94 6149.38 6882.74 6147.95 6882.74 6153.68 C 6882.74 6156.55 6897.07 6175.18 6891.34 6182.35 C 6875.57 6198.11 6852.64 6173.75 6838.31 6173.75 C 6816.81 6173.75 6858.38 6193.81 6822.55 6183.78 C 6812.52 6180.91 6799.62 6165.15 6795.32 6156.55 C 6792.45 6153.68 6789.58 6145.08 6788.15 6147.95 C 6782.42 6156.55 6783.85 6166.58 6778.12 6173.75 C 6759.49 6198.11 6733.69 6173.75 6712.19 6180.91 C 6709.33 6182.35 6715.06 6188.08 6712.19 6190.95 C 6699.3 6198.11 6673.5 6196.68 6660.6 6190.95 C 6660.6 6190.95 6660.6 6189.51 6662.03 6189.51 C 6669.2 6182.35 6677.8 6175.18 6680.66 6168.02 C 6730.82 6170.88 6673.5 6136.49 6659.17 6127.89 C 6649.13 6122.15 6664.9 6103.52 6662.03 6096.36 C 6659.17 6089.19 6636.24 6109.26 6641.97 6090.62 C 6646.27 6077.73 6673.5 6066.26 6663.47 6057.66 C 6656.3 6051.93 6623.34 6054.8 6626.2 6037.6 C 6642.26 6003.66 6667.17 5992.19 6692.13 5996.04 C 6703.59 5997.47 6715.06 6006.07 6726.53 6007.5 C 6737.99 6008.93 6749.46 6000.33 6760.92 6001.77 C 6768.09 6003.2 6772.39 6013.23 6779.55 6013.23 C 6782.42 6014.67 6780.99 6006.07 6783.85 6004.63 C 6791.02 5997.47 6802.48 5994.6 6809.65 5986 C 6815.38 5981.7 6811.08 5971.67 6815.38 5967.37 C 6842.61 5945.87 6871.28 5973.1 6897.07 5961.64 C 6905.67 5957.34 6907.1 5944.44 6915.7 5941.58 C 6917.14 5940.14 6964.43 5947.31 6965.86 5945.87 C 6970.16 5944.44 6961.56 5938.71 6960.13 5934.41 C 6955.83 5911.48 6973.03 5905.75 6994.53 5905.75 C 7000.26 5905.75 7011.73 5950.17 7041.82 5974.54 " }
+ }
+ }
+ // PATH visit hu count: 167
+ DemoShape {
+ objectName: "hu"
+ ShapePath {
+ objectName: "svg_path:hu"
+ // boundingRect: 6971.6, 5504.46 834.102x584.228
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 6994.53 5905.75 C 7000.26 5905.75 7011.73 5950.17 7041.82 5974.54 C 7080.52 6006.07 7113.48 6023.27 7143.58 6061.96 C 7147.88 6067.69 7176.54 6063.39 7179.41 6064.83 C 7190.87 6069.13 7199.47 6079.16 7209.5 6083.46 C 7229.57 6092.06 7292.63 6090.62 7311.26 6074.86 C 7314.12 6071.99 7315.56 6051.93 7325.59 6051.93 C 7352.82 6047.63 7348.52 6053.36 7372.88 6026.13 C 7377.18 6021.83 7382.92 6036.16 7395.81 6026.13 C 7408.71 6016.1 7417.31 5998.9 7433.08 5990.3 C 7466.04 5968.81 7438.81 5990.3 7463.17 5991.74 C 7464.61 5991.74 7501.87 5980.27 7503.3 5980.27 C 7510.47 5980.27 7517.63 5987.44 7524.8 5987.44 C 7527.66 5986 7529.1 5980.27 7531.96 5978.84 C 7540.56 5975.97 7583.56 5971.67 7586.42 5961.64 C 7589.29 5955.91 7567.79 5948.74 7593.59 5944.44 C 7603.62 5943.01 7613.65 5953.04 7622.25 5950.17 C 7649.48 5940.14 7640.89 5888.55 7648.05 5872.78 C 7650.92 5868.48 7658.08 5868.48 7660.95 5864.18 C 7660.95 5864.18 7676.71 5814.02 7676.71 5814.02 C 7679.58 5806.86 7683.88 5801.12 7683.88 5793.96 C 7683.88 5791.09 7676.71 5791.09 7676.71 5788.23 C 7678.15 5775.33 7693.91 5735.2 7701.08 5723.73 C 7703.94 5720.87 7711.11 5723.73 7711.11 5719.43 C 7718.28 5692.2 7708.24 5672.14 7739.77 5642.04 C 7749.81 5630.58 7761.27 5637.74 7777.04 5632.01 C 7792.8 5624.85 7794.23 5603.35 7805.7 5591.88 C 7788.5 5577.55 7811.43 5580.42 7792.8 5567.52 C 7789.93 5566.09 7785.63 5563.22 7781.34 5563.22 C 7775.6 5564.65 7771.3 5571.82 7765.57 5570.39 C 7756.97 5564.65 7755.54 5550.32 7746.94 5544.59 C 7742.64 5541.72 7736.91 5548.89 7732.61 5547.45 C 7709.68 5538.86 7731.17 5523.09 7698.21 5521.66 C 7698.21 5533.12 7676.71 5533.12 7665.25 5535.99 C 7659.52 5537.42 7653.78 5544.59 7649.48 5541.72 C 7622.25 5533.12 7643.75 5505.89 7607.92 5504.46 C 7593.59 5504.46 7584.99 5524.52 7570.66 5525.96 C 7546.3 5530.26 7514.77 5504.46 7493.27 5531.69 C 7484.67 5543.15 7490.4 5581.85 7474.64 5589.02 C 7468.91 5590.45 7460.31 5584.72 7454.57 5587.58 C 7431.64 5601.91 7464.61 5611.95 7428.78 5617.68 C 7417.31 5619.11 7391.51 5587.58 7380.05 5607.65 C 7375.75 5614.81 7382.92 5627.71 7377.18 5633.44 C 7361.42 5649.21 7316.99 5639.18 7296.93 5653.51 C 7278.29 5664.97 7298.36 5685.04 7304.09 5693.64 C 7309.82 5703.67 7188 5725.17 7170.81 5722.3 C 7143.58 5716.57 7123.51 5679.31 7097.72 5676.44 C 7091.98 5675.01 7087.68 5676.44 7084.82 5677.87 C 7064.75 5686.47 7084.82 5732.33 7083.38 5738.07 C 7074.78 5753.83 7023.19 5730.9 7003.13 5748.1 C 6994.53 5755.26 7037.52 5752.4 7038.96 5776.76 C 7041.82 5805.42 7017.46 5783.93 7007.43 5803.99 C 7000.26 5818.32 7026.06 5848.42 7023.19 5854.15 C 7010.29 5875.65 6998.83 5879.95 6973.03 5908.61 C 6973.03 5908.61 6973.03 5908.61 6971.6 5910.05 C 6974.46 5908.61 6975.9 5907.18 6978.76 5907.18 L 6994.53 5905.75 " }
+ }
+ }
+ // PATH visit ro count: 264
+ DemoShape {
+ objectName: "ro"
+ ShapePath {
+ objectName: "svg_path:ro"
+ // boundingRect: 7524.8, 5424.2 1255.45x932.997
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 8695.69 6202.41 C 8672.76 6206.71 8635.5 6219.61 8614 6200.98 C 8606.84 6195.25 8605.41 6175.18 8596.81 6179.48 C 8592.51 6180.91 8589.64 6186.65 8585.34 6188.08 C 8550.95 6206.71 8596.81 6178.05 8559.54 6179.48 C 8548.08 6179.48 8539.48 6192.38 8528.01 6193.81 C 8503.65 6196.68 8523.72 6162.28 8459.22 6186.65 C 8431.99 6198.11 8381.83 6221.04 8360.33 6242.54 C 8335.97 6266.9 8331.67 6297 8300.14 6317.06 C 8271.48 6334.26 8249.98 6322.8 8221.32 6321.36 C 8198.39 6319.93 8174.02 6318.5 8152.53 6325.66 C 8143.93 6328.53 8141.06 6340 8132.46 6342.86 C 8092.33 6357.19 8045.04 6334.26 8004.91 6338.56 C 7973.38 6341.43 7963.35 6367.23 7928.95 6352.89 C 7904.59 6342.86 7959.05 6311.33 7946.15 6305.6 C 7923.22 6295.57 7854.43 6281.24 7858.73 6243.97 C 7860.16 6231.07 7907.45 6229.64 7893.12 6222.48 C 7741.21 6146.52 7877.36 6215.31 7815.73 6251.14 C 7805.7 6258.3 7799.97 6232.51 7789.93 6228.21 C 7782.77 6223.91 7772.74 6228.21 7765.57 6228.21 C 7756.97 6228.21 7748.37 6232.51 7739.77 6229.64 C 7735.47 6226.77 7738.34 6219.61 7735.47 6213.88 C 7728.31 6199.54 7666.68 6222.48 7701.08 6198.11 C 7709.68 6192.38 7731.17 6186.65 7724.01 6180.91 C 7716.84 6176.61 7702.51 6180.91 7699.64 6172.31 C 7698.21 6163.72 7728.31 6147.95 7708.24 6136.49 C 7681.01 6120.72 7626.55 6127.89 7607.92 6094.92 C 7603.62 6087.76 7603.62 6053.36 7603.62 6044.76 L 7603.62 6041.9 C 7599.32 6043.33 7596.46 6051.93 7593.59 6049.06 C 7583.56 6043.33 7582.13 6027.56 7573.53 6020.4 C 7564.93 6014.67 7552.03 6016.1 7543.43 6008.93 C 7534.83 6004.63 7530.53 5994.6 7524.8 5987.44 C 7527.66 5986 7529.1 5980.27 7531.96 5978.84 C 7540.56 5975.97 7583.56 5971.67 7586.42 5961.64 C 7589.29 5955.91 7567.79 5948.74 7593.59 5944.44 C 7603.62 5943.01 7613.65 5953.04 7622.25 5950.17 C 7649.48 5940.14 7640.89 5888.55 7648.05 5872.78 C 7650.92 5868.48 7658.08 5868.48 7660.95 5864.18 L 7676.71 5814.02 C 7679.58 5806.86 7683.88 5801.12 7683.88 5793.96 C 7683.88 5791.09 7676.71 5791.09 7676.71 5788.23 C 7678.15 5775.33 7693.91 5735.2 7701.08 5723.73 C 7703.94 5720.87 7711.11 5723.73 7711.11 5719.43 C 7718.28 5692.2 7708.24 5672.14 7739.77 5642.04 C 7749.81 5630.58 7761.27 5637.74 7777.04 5632.01 C 7792.8 5624.85 7794.23 5603.35 7805.7 5591.88 C 7810 5594.75 7818.6 5589.02 7828.63 5561.79 C 7830.06 5558.92 7830.06 5554.62 7832.93 5554.62 C 7837.23 5554.62 7873.06 5571.82 7877.36 5571.82 C 7880.22 5571.82 7881.66 5564.65 7884.52 5563.22 C 7903.15 5556.05 7950.45 5574.68 7973.38 5568.95 C 7986.28 5564.65 7994.88 5553.19 8007.78 5551.75 C 8030.71 5550.32 8046.47 5580.42 8062.24 5584.72 C 8083.73 5591.88 8090.9 5551.75 8096.63 5546.02 C 8122.43 5518.79 8188.35 5521.66 8208.42 5501.59 C 8247.11 5464.33 8191.22 5495.86 8218.45 5460.03 C 8225.62 5451.43 8237.08 5444.27 8248.55 5441.4 L 8249.98 5437.1 L 8255.71 5424.2 C 8254.28 5427.07 8254.28 5432.8 8254.28 5435.67 C 8274.34 5425.64 8287.24 5434.23 8303.01 5447.13 C 8333.1 5468.63 8338.84 5504.46 8363.2 5528.82 C 8403.33 5567.52 8512.25 5636.31 8525.15 5692.2 C 8535.18 5728.03 8522.28 5768.16 8530.88 5803.99 C 8533.75 5819.76 8559.54 5855.59 8558.11 5871.35 C 8558.11 5877.08 8546.65 5878.52 8548.08 5884.25 C 8549.51 5889.98 8558.11 5887.11 8562.41 5889.98 C 8566.71 5892.85 8566.71 5902.88 8572.44 5902.88 C 8575.31 5904.31 8579.61 5901.45 8582.47 5904.31 C 8586.77 5908.61 8585.34 5917.21 8591.07 5921.51 C 8596.81 5927.24 8658.43 5930.11 8657 5922.94 C 8657 5921.51 8636.94 5917.21 8651.27 5908.61 C 8659.87 5904.31 8669.9 5905.75 8678.5 5901.45 C 8692.83 5894.28 8698.56 5874.22 8714.33 5868.48 C 8745.86 5857.02 8761.62 5868.48 8768.79 5895.71 C 8767.35 5897.15 8763.05 5895.71 8763.05 5897.15 C 8763.05 5901.45 8765.92 5904.31 8768.79 5905.75 C 8771.65 5907.18 8774.52 5901.45 8775.95 5904.31 C 8778.82 5910.05 8780.25 5958.77 8780.25 5964.51 C 8778.82 5983.14 8735.82 5984.57 8724.36 5993.17 C 8717.19 5998.9 8717.19 6018.97 8708.59 6017.53 C 8707.16 6016.1 8718.63 5968.81 8698.56 5957.34 C 8691.4 5954.47 8682.8 5965.94 8678.5 5973.1 C 8672.76 5983.14 8698.56 5991.74 8697.13 6003.2 C 8697.13 6014.67 8675.63 6021.83 8681.36 6030.43 C 8687.1 6039.03 8698.28 6018.2 8708.31 6018.2 C 8711.18 6016.77 8707.16 6024.7 8704.29 6027.56 C 8700.9 6029.41 8703.48 6030 8702.86 6031.86 C 8711.46 6039.03 8677.06 6094.92 8677.06 6096.36 C 8678.5 6106.39 8691.4 6156.55 8698.56 6202.41 L 8695.69 6202.41 " }
+ }
+ }
+ // PATH visit bg count: 211
+ DemoShape {
+ objectName: "bg"
+ ShapePath {
+ objectName: "svg_path:bg"
+ // boundingRect: 7863.73, 6177.87 840.036x636.981
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 8477.85 6648.13 C 8470.69 6646.69 8463.52 6646.69 8459.22 6646.69 C 8403.33 6658.16 8493.62 6698.29 8462.09 6722.65 C 8462.09 6722.65 8417.66 6736.98 8416.23 6736.98 C 8396.16 6744.15 8363.2 6769.94 8341.7 6768.51 C 8337.4 6768.51 8340.27 6761.35 8337.4 6759.91 C 8323.07 6752.75 8304.44 6744.15 8288.68 6748.45 C 8282.94 6749.88 8282.94 6761.35 8277.21 6762.78 C 8272.91 6764.21 8270.04 6754.18 8265.75 6752.75 C 8262.88 6751.31 8258.58 6757.05 8257.15 6754.18 C 8247.11 6748.45 8244.25 6732.68 8232.78 6731.25 C 8224.18 6728.38 8219.88 6742.71 8211.29 6744.15 C 8205.55 6747.01 8198.39 6735.55 8194.09 6738.42 C 8168.29 6754.18 8158.26 6771.38 8118.13 6785.71 C 8100.93 6791.44 8079.43 6785.71 8063.67 6795.74 C 8057.94 6798.61 8057.94 6810.07 8052.2 6812.94 C 8047.9 6817.24 8040.74 6812.94 8035.01 6812.94 C 8000.45 6809.98 8017.43 6764.43 8014.94 6734.12 C 8004.91 6724.08 7989.14 6695.42 7976.25 6686.82 C 7969.08 6682.52 7959.05 6686.82 7950.45 6682.52 C 7947.58 6681.09 7908.89 6650.99 7908.89 6648.13 C 7916.05 6635.23 7936.12 6632.36 7928.95 6613.73 C 7927.52 6608 7923.22 6605.13 7918.92 6602.26 C 7916.05 6600.83 7911.75 6603.7 7910.32 6600.83 C 7908.89 6593.67 7910.32 6586.5 7910.32 6579.33 C 7908.89 6570.73 7898.85 6562.14 7903.15 6554.97 C 7944.72 6486.18 7897.42 6570.73 7943.28 6534.91 C 7947.58 6530.61 7977.68 6477.58 7969.08 6468.98 C 7957.61 6460.38 7903.15 6434.58 7900.29 6431.72 C 7883.09 6417.39 7855.86 6357.19 7865.89 6335.7 C 7870.19 6325.66 7885.96 6327.1 7891.69 6318.5 C 7895.99 6308.47 7890.26 6295.57 7894.56 6285.53 C 7913.19 6294.13 7936.12 6299.87 7946.15 6305.6 C 7959.05 6311.33 7904.59 6342.86 7928.95 6352.89 C 7963.35 6367.23 7973.38 6341.43 8004.91 6338.56 C 8045.04 6334.26 8092.33 6357.19 8132.46 6342.86 C 8141.06 6340 8143.93 6328.53 8152.53 6325.66 C 8174.02 6318.5 8198.39 6319.93 8221.32 6321.36 C 8249.98 6322.8 8271.48 6334.26 8300.14 6317.06 C 8331.67 6297 8335.97 6266.9 8360.33 6242.54 C 8381.83 6221.04 8431.99 6198.11 8459.22 6186.65 C 8523.72 6162.28 8503.65 6196.68 8528.01 6193.81 C 8539.48 6192.38 8548.08 6179.48 8559.54 6179.48 C 8596.81 6178.05 8550.95 6206.71 8585.34 6188.08 C 8589.64 6186.65 8592.51 6180.91 8596.81 6179.48 C 8605.41 6175.18 8606.84 6195.25 8614 6200.98 C 8635.5 6219.61 8672.76 6206.71 8695.69 6202.41 L 8698.56 6202.41 C 8704.29 6238.24 8707.16 6271.2 8697.13 6276.94 C 8691.4 6279.8 8684.23 6269.77 8677.06 6271.2 C 8624.04 6285.53 8658.43 6284.1 8642.67 6315.63 C 8641.23 6321.36 8631.2 6321.36 8628.34 6325.66 C 8628.34 6328.53 8636.94 6327.1 8636.94 6329.96 C 8639.8 6352.89 8638.37 6367.23 8644.1 6390.16 C 8645.53 6398.75 8654.13 6410.22 8649.83 6417.39 C 8645.53 6424.55 8632.64 6420.25 8625.47 6424.55 C 8624.04 6424.55 8629.77 6427.42 8629.77 6428.85 C 8626.9 6434.58 8619.74 6436.02 8618.3 6441.75 C 8616.87 6446.05 8625.47 6450.35 8622.6 6453.22 C 8616.87 6461.81 8603.97 6464.68 8598.24 6473.28 C 8572.44 6507.68 8635.5 6456.08 8651.27 6494.78 C 8652.7 6497.64 8648.4 6501.94 8648.4 6504.81 C 8649.83 6506.24 8681.36 6524.87 8688.53 6530.61 C 8692.83 6536.34 8697.13 6540.64 8698.56 6544.94 L 8695.7 6544.94 C 8687.1 6546.37 8678.5 6544.94 8669.9 6547.8 C 8658.43 6552.1 8649.83 6562.14 8639.8 6569.3 C 8636.94 6570.73 8639.8 6576.47 8638.37 6575.03 C 8605.41 6567.87 8595.37 6542.07 8562.41 6559.27 L 8538.05 6586.5 C 8528.01 6590.8 8515.12 6583.63 8507.95 6590.8 C 8499.35 6597.96 8507.95 6612.3 8502.22 6620.9 C 8493.62 6630.93 8464.96 6626.63 8477.85 6648.13 " }
+ }
+ }
+ // PATH visit cy count: 64
+ DemoShape {
+ objectName: "cy"
+ ShapePath {
+ objectName: "svg_path:cy"
+ // boundingRect: 9613.09, 7409.12 313.697x281.029
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 9926.78 7409.14 C 9925.35 7432.07 9860.86 7487.96 9849.39 7513.76 C 9836.49 7545.29 9900.99 7549.59 9893.82 7561.05 C 9889.52 7566.78 9878.06 7559.62 9872.32 7562.49 C 9866.59 7563.92 9865.16 7572.52 9859.43 7575.38 C 9850.83 7581.12 9836.49 7575.38 9829.33 7582.55 C 9823.6 7589.72 9830.76 7602.61 9826.46 7609.78 C 9815 7629.84 9764.84 7644.18 9753.37 7659.94 C 9749.07 7665.67 9757.67 7675.71 9753.37 7682.87 C 9741.91 7704.37 9730.44 7671.41 9726.14 7671.41 C 9717.54 7671.41 9711.81 7682.87 9703.21 7685.74 C 9698.91 7687.17 9651.62 7680.01 9650.18 7680.01 C 9645.88 7677.14 9647.32 7669.97 9644.45 7665.67 C 9640.15 7661.37 9602.89 7621.25 9615.79 7622.68 C 9622.95 7622.68 9627.25 7629.84 9634.42 7629.84 C 9647.32 7628.41 9650.18 7602.61 9653.05 7598.31 C 9663.08 7582.55 9690.31 7594.02 9700.34 7585.42 C 9707.51 7581.12 9706.08 7569.65 9704.64 7561.05 C 9703.21 7553.89 9690.31 7545.29 9696.04 7538.12 C 9700.34 7532.39 9711.81 7540.99 9720.41 7539.55 C 9737.61 7538.12 9779.17 7528.09 9794.93 7519.49 C 9815 7508.03 9925.35 7407.7 9926.78 7409.14 " }
+ }
+ }
+ // PATH visit mt count: 16
+ DemoShape {
+ objectName: "mt"
+ ShapePath {
+ objectName: "svg_path:mt"
+ // boundingRect: 6811.81, 7968.28 95.416x55.3057
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 6829.95 7968.49 C 6819.72 7970.54 6811.81 7987.11 6811.81 7987.11 C 6830 7987.11 6837.23 7979.49 6829.95 8008.6 C 6822.67 8037.71 6917.26 8019.74 6906.35 7994.27 C 6895.43 7968.8 6855.01 7986.86 6840.46 7972.31 C 6836.82 7968.67 6833.36 7967.81 6829.95 7968.49 " }
+ }
+ }
+ // PATH visit hr count: 339
+ DemoShape {
+ objectName: "hr"
+ ShapePath {
+ objectName: "svg_path:hr"
+ // boundingRect: 6647.7, 5968.58 787.166x732.576
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7367.15 6701.15 L 7364.28 6691.12 C 7347.09 6662.46 7319.86 6672.49 7288.33 6648.13 C 7279.73 6640.96 7276.86 6628.06 7266.83 6625.2 C 7261.1 6622.33 7253.93 6628.06 7246.76 6629.49 C 7249.63 6630.93 7251.06 6630.93 7253.93 6632.36 C 7256.8 6633.79 7259.66 6642.39 7256.8 6642.39 C 7233.87 6640.96 7216.67 6619.46 7193.74 6616.6 C 7183.71 6615.16 7172.24 6618.03 7162.21 6616.6 C 7159.34 6616.6 7156.48 6609.43 7155.04 6610.86 C 7152.18 6612.3 7152.18 6619.46 7155.04 6620.9 C 7163.64 6623.76 7173.67 6619.46 7183.71 6620.9 C 7192.3 6622.33 7202.34 6625.2 7212.37 6630.93 C 7215.23 6632.36 7213.8 6638.09 7216.67 6639.53 C 7265.4 6665.32 7255.36 6623.76 7331.32 6683.95 C 7341.35 6691.12 7354.25 6698.29 7367.15 6701.15 M 7391.51 6241.11 C 7378.62 6226.78 7400.11 6233.94 7405.85 6223.91 C 7407.28 6222.48 7407.28 6219.61 7405.85 6218.18 C 7387.21 6199.55 7400.11 6192.38 7401.55 6173.75 C 7402.98 6166.58 7438.81 6195.25 7434.51 6166.58 C 7414.44 6166.58 7391.51 6160.85 7374.32 6149.38 C 7367.15 6143.65 7380.05 6140.79 7380.05 6139.35 C 7380.05 6135.05 7365.72 6132.19 7374.32 6123.59 C 7375.75 6122.15 7385.78 6130.75 7387.21 6122.15 C 7388.65 6106.39 7358.55 6125.02 7358.55 6110.69 C 7361.42 6077.73 7367.15 6086.32 7342.79 6051.93 L 7341.35 6049.06 C 7337.05 6050.5 7332.75 6050.5 7325.59 6051.93 C 7315.56 6051.93 7314.12 6071.99 7311.26 6074.86 C 7292.63 6090.62 7229.57 6092.06 7209.5 6083.46 C 7199.47 6079.16 7190.87 6069.13 7179.41 6064.83 C 7176.54 6063.39 7147.88 6067.69 7143.58 6061.96 C 7113.48 6023.27 7080.52 6006.07 7041.82 5974.54 C 7031.79 5973.1 7007.43 5967.37 7001.69 5968.81 C 6985.93 5971.67 7007.43 5991.74 6998.83 5997.47 C 6991.66 6000.33 6983.06 5996.04 6975.9 5998.9 C 6973.03 6000.33 6977.33 6006.07 6974.46 6008.93 C 6960.13 6020.4 6937.2 6021.83 6922.87 6034.73 C 6905.67 6050.5 6954.4 6090.62 6932.9 6106.39 C 6882.74 6142.22 6914.27 6082.03 6881.31 6129.32 C 6877.01 6135.05 6894.21 6136.49 6897.07 6143.65 C 6899.94 6149.38 6882.74 6147.95 6882.74 6153.68 C 6882.74 6156.55 6897.07 6175.18 6891.34 6182.35 C 6875.57 6198.11 6852.64 6173.75 6838.31 6173.75 C 6816.81 6173.75 6858.38 6193.81 6822.55 6183.78 C 6812.52 6180.91 6799.62 6165.15 6795.32 6156.55 C 6792.45 6153.68 6789.58 6145.08 6788.15 6147.95 C 6782.42 6156.55 6783.85 6166.58 6778.12 6173.75 C 6759.49 6198.11 6733.69 6173.75 6712.19 6180.91 C 6709.33 6182.35 6715.06 6188.08 6712.19 6190.95 C 6699.3 6198.11 6673.5 6196.68 6660.6 6190.95 C 6656.3 6190.95 6647.7 6186.65 6647.7 6190.95 C 6649.13 6202.41 6659.17 6211.01 6663.47 6221.04 C 6663.47 6222.48 6660.6 6222.48 6660.6 6223.91 C 6662.03 6235.37 6659.17 6246.84 6664.9 6255.44 C 6664.9 6255.44 6666.33 6255.44 6666.33 6256.87 C 6660.6 6265.47 6683.53 6275.5 6690.7 6285.53 C 6696.43 6294.13 6700.73 6331.4 6707.89 6322.8 C 6715.06 6314.2 6719.36 6302.73 6725.09 6292.7 C 6726.53 6288.4 6727.96 6284.1 6727.96 6279.8 C 6727.96 6278.37 6723.66 6279.8 6723.66 6276.94 C 6723.66 6275.5 6723.66 6269.77 6725.09 6271.2 C 6730.82 6272.64 6726.53 6305.6 6742.29 6279.8 C 6745.16 6272.64 6745.16 6265.47 6745.16 6256.87 C 6745.16 6255.44 6742.29 6254.01 6742.29 6251.14 C 6742.29 6249.71 6743.72 6255.44 6745.16 6254.01 C 6756.62 6248.27 6746.59 6209.58 6759.49 6209.58 C 6801.05 6206.71 6786.72 6222.48 6812.52 6243.97 C 6818.25 6248.27 6826.85 6243.97 6831.15 6248.27 C 6856.94 6278.37 6826.85 6315.63 6855.51 6347.16 C 6864.11 6357.19 6888.47 6378.69 6898.51 6385.86 C 6909.97 6391.59 6945.8 6397.32 6934.33 6401.62 C 6914.27 6407.35 6877.01 6365.79 6882.74 6420.25 C 6884.17 6437.45 6950.1 6474.71 6960.13 6487.61 C 6963 6489.04 6948.67 6483.31 6951.53 6484.74 C 6960.13 6490.48 6997.39 6501.94 6998.83 6506.24 C 7001.69 6516.27 6993.09 6532.04 7000.26 6540.64 C 7004.56 6543.5 7048.99 6527.74 7050.42 6526.31 C 7079.08 6520.57 7059.02 6532.04 7094.85 6544.94 C 7106.31 6547.8 7119.21 6543.5 7130.68 6547.8 C 7146.44 6553.54 7156.48 6579.33 7173.67 6587.93 C 7193.74 6596.53 7206.64 6602.26 7212.37 6608 C 7212.37 6609.43 7213.8 6608 7213.8 6608 C 7216.67 6608 7219.53 6605.13 7220.97 6608 C 7226.7 6618.03 7218.1 6618.03 7231 6623.76 C 7235.3 6619.46 7245.33 6619.46 7246.76 6613.73 C 7253.93 6595.1 7192.3 6570.73 7186.57 6560.7 C 7180.84 6552.1 7185.14 6539.21 7179.41 6530.61 C 7175.11 6524.87 7165.07 6526.31 7157.91 6523.44 C 7127.81 6504.81 7109.18 6470.41 7083.38 6448.92 C 7074.78 6443.18 7041.82 6410.22 7031.79 6405.92 C 7027.49 6404.49 7021.76 6410.22 7017.46 6407.35 C 7010.29 6400.19 7027.49 6384.42 7027.49 6381.56 C 7026.06 6375.82 7018.89 6374.39 7014.59 6370.09 C 7003.13 6352.89 6998.83 6329.96 6983.06 6315.63 C 6977.33 6308.47 6965.86 6308.47 6958.7 6302.73 C 6952.97 6298.43 6942.93 6215.31 6974.46 6216.74 C 6988.79 6216.74 7013.16 6248.27 7026.06 6255.44 L 7037.52 6254.01 L 7026.06 6255.44 C 7043.25 6254.01 7040.39 6226.77 7048.99 6215.31 C 7064.75 6196.68 7071.92 6219.61 7091.98 6215.31 C 7097.72 6213.88 7097.72 6202.41 7103.45 6198.11 C 7103.45 6198.11 7112.05 6206.71 7136.41 6213.88 C 7139.28 6215.31 7143.58 6216.74 7147.88 6215.31 C 7150.74 6215.31 7152.18 6209.58 7156.48 6208.14 C 7173.67 6206.71 7212.37 6228.21 7231 6225.34 C 7235.3 6225.34 7239.6 6222.48 7241.03 6218.18 C 7245.33 6215.31 7243.9 6205.28 7249.63 6205.28 C 7258.23 6203.84 7263.96 6212.44 7272.56 6215.31 C 7288.33 6219.61 7269.7 6208.14 7278.29 6205.28 C 7286.89 6202.41 7296.93 6202.41 7305.52 6205.28 C 7311.26 6206.71 7315.56 6215.31 7321.29 6215.31 C 7325.59 6215.31 7321.29 6205.28 7325.59 6205.28 C 7358.55 6206.71 7349.95 6242.54 7365.72 6245.41 C 7375.75 6246.84 7384.35 6243.97 7391.51 6241.11 " }
+ }
+ }
+ // PATH visit ba count: 150
+ DemoShape {
+ objectName: "ba"
+ ShapePath {
+ objectName: "svg_path:ba"
+ // boundingRect: 6952.52, 6198.11 537.243x503.041
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7430.21 6546.37 C 7415.88 6536.34 7415.88 6526.31 7400.11 6527.74 L 7402.98 6523.44 L 7400.11 6527.74 C 7380.05 6550.67 7382.92 6583.63 7377.18 6590.8 C 7365.72 6605.13 7361.42 6583.63 7357.12 6605.13 C 7349.95 6646.69 7394.38 6648.13 7361.42 6679.66 L 7368.58 6678.22 L 7370.02 6701.15 C 7352.82 6659.59 7324.16 6673.92 7288.33 6648.13 C 7279.73 6640.96 7276.86 6628.06 7266.83 6625.19 C 7259.66 6622.33 7251.06 6630.93 7242.47 6630.93 C 7238.17 6630.93 7228.13 6629.49 7229.57 6625.19 C 7232.43 6619.46 7245.33 6620.9 7246.76 6613.73 C 7253.93 6595.1 7192.3 6570.73 7186.57 6560.7 C 7180.84 6552.1 7185.14 6539.21 7179.41 6530.61 C 7175.11 6524.87 7165.07 6526.31 7157.91 6523.44 C 7127.81 6504.81 7109.18 6470.41 7083.38 6448.92 C 7074.78 6443.18 7041.82 6410.22 7031.79 6405.92 C 7027.49 6404.49 7021.76 6410.22 7017.46 6407.35 C 7010.29 6400.19 7027.49 6384.42 7027.49 6381.56 C 7026.06 6375.82 7018.89 6374.39 7014.59 6370.09 C 7003.13 6352.89 6998.83 6329.96 6983.06 6315.63 C 6977.33 6308.47 6965.86 6308.47 6958.7 6302.73 C 6952.97 6298.43 6942.93 6215.31 6974.46 6216.74 C 6988.79 6216.74 7013.16 6248.27 7026.06 6255.44 L 7037.52 6254.01 L 7026.06 6255.44 C 7043.25 6254.01 7040.39 6226.77 7048.99 6215.31 C 7064.75 6196.68 7071.92 6219.61 7091.98 6215.31 C 7097.72 6213.88 7097.72 6202.41 7103.45 6198.11 C 7103.45 6198.11 7112.05 6206.71 7136.41 6213.88 C 7139.28 6215.31 7143.58 6216.74 7147.88 6215.31 C 7150.74 6215.31 7152.18 6209.58 7156.48 6208.14 C 7173.67 6206.71 7212.37 6228.21 7231 6225.34 C 7235.3 6225.34 7239.6 6222.48 7241.03 6218.18 C 7245.33 6215.31 7243.9 6205.28 7249.63 6205.28 C 7258.23 6203.84 7263.96 6212.44 7272.56 6215.31 C 7288.33 6219.61 7269.7 6208.14 7278.29 6205.28 C 7286.89 6202.41 7296.93 6202.41 7305.52 6205.28 C 7311.26 6206.71 7315.56 6215.31 7321.29 6215.31 C 7325.59 6215.31 7321.29 6205.28 7325.59 6205.28 C 7358.55 6206.71 7349.95 6242.54 7365.72 6245.41 C 7392.95 6248.27 7407.28 6228.21 7433.08 6229.64 C 7433.08 6274.07 7407.28 6304.17 7411.58 6331.4 C 7417.31 6362.93 7425.91 6340 7445.97 6348.59 C 7458.87 6354.33 7461.74 6372.96 7474.64 6380.12 C 7478.94 6381.56 7493.27 6377.26 7488.97 6390.16 C 7480.37 6418.82 7444.54 6387.29 7437.38 6397.32 C 7437.38 6397.32 7501.87 6457.51 7484.67 6476.15 C 7478.94 6480.45 7471.77 6466.11 7464.61 6468.98 C 7456.01 6471.85 7454.57 6483.31 7448.84 6490.48 C 7438.81 6493.34 7411.58 6487.61 7410.15 6494.78 C 7405.85 6514.84 7441.67 6516.27 7430.21 6546.37 L 7424.48 6546.37 L 7430.21 6546.37 " }
+ }
+ }
+ // PATH visit me count: 95
+ DemoShape {
+ objectName: "me"
+ ShapePath {
+ objectName: "svg_path:me"
+ // boundingRect: 7357.01, 6465.39 262.356x329.8
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7364.97 6687.77 L 7367.84 6697.8 C 7375.01 6699.23 7380.74 6699.23 7387.9 6699.23 C 7385.04 6702.09 7382.17 6704.96 7383.61 6709.26 C 7403.67 6753.66 7407.97 6712.12 7428.03 6722.15 C 7432.33 6725.01 7429.47 6730.74 7432.33 6735.04 C 7443.8 6749.36 7458.13 6746.49 7468.16 6762.25 C 7471.03 6766.55 7468.16 6775.14 7472.46 6779.44 C 7481.06 6788.03 7492.53 6792.33 7503.99 6795.19 C 7503.99 6785.17 7503.99 6775.14 7503.99 6766.55 C 7503.99 6760.82 7506.86 6753.66 7503.99 6747.93 C 7499.69 6740.77 7486.79 6740.77 7485.36 6733.6 C 7485.36 6732.17 7531.22 6639.08 7535.52 6636.21 C 7536.95 6634.78 7544.12 6670.59 7555.59 6672.02 C 7555.59 6672.02 7588.55 6646.95 7588.55 6646.95 C 7585.54 6631.87 7588.54 6632.67 7583.46 6618.14 C 7580.05 6608.4 7591.54 6613.99 7599.36 6607.55 C 7602.79 6604.72 7601.08 6600.33 7596.56 6595.16 C 7591.96 6589.89 7626.09 6589.56 7618.17 6583.5 C 7602.45 6571.48 7583.24 6550.99 7567.94 6543.88 C 7558.06 6539.29 7570.45 6519.73 7560.82 6510.26 C 7542.78 6492.52 7499.02 6481.72 7485.36 6472.93 C 7479.63 6477.23 7472.46 6462.91 7465.3 6465.77 C 7456.7 6468.64 7455.26 6480.1 7449.53 6487.26 C 7439.5 6490.12 7412.27 6484.39 7410.84 6491.55 C 7406.54 6511.61 7442.36 6513.04 7430.9 6543.11 L 7425.17 6543.11 L 7430.9 6543.11 C 7416.57 6533.09 7416.57 6523.06 7400.8 6524.5 L 7403.67 6520.2 L 7400.8 6524.5 C 7380.74 6547.41 7383.61 6580.35 7377.87 6587.51 C 7366.41 6601.84 7362.11 6580.35 7357.81 6601.84 C 7350.64 6643.37 7395.07 6644.8 7362.11 6676.31 L 7369.27 6674.88 L 7370.71 6697.8 C 7369.27 6693.5 7367.84 6690.64 7364.97 6687.77 " }
+ }
+ }
+ // PATH visit rs count: 210
+ DemoShape {
+ objectName: "rs"
+ ShapePath {
+ objectName: "svg_path:rs"
+ // boundingRect: 7329.87, 5973.8 653.296x724.318
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7686.47 6519.21 C 7710.27 6519.21 7743.85 6594.24 7757.24 6601.67 C 7761.71 6604.65 7793.42 6622.31 7799.37 6623.8 C 7809.79 6626.77 7800.22 6642.13 7807.66 6649.57 C 7827 6670.39 7807.61 6669.72 7803.14 6690.54 C 7803.14 6690.54 7802.46 6680.35 7802.46 6680.35 L 7798.59 6688.08 C 7835.79 6713.35 7799.84 6683.67 7808.77 6677.72 C 7825.14 6667.31 7792.71 6681.11 7812.05 6679.62 C 7819.49 6679.62 7806.4 6677.77 7809.37 6670.34 C 7810.86 6664.39 7800.51 6689.04 7802 6684.58 C 7815.39 6651.86 7783.7 6698.19 7811.97 6693.73 C 7835.77 6689.27 7899.74 6648.87 7919.08 6666.72 C 7926.52 6653.34 7947.35 6650.36 7939.91 6631.03 C 7938.42 6625.08 7933.96 6622.11 7929.49 6619.14 C 7926.52 6617.65 7922.05 6620.62 7920.57 6617.65 C 7919.08 6610.21 7920.57 6602.78 7920.57 6595.34 C 7919.08 6586.42 7908.66 6577.5 7913.13 6570.07 C 7956.28 6498.69 7907.18 6586.42 7954.79 6549.25 C 7959.25 6544.79 7990.5 6489.77 7981.57 6480.85 C 7969.67 6471.93 7913.13 6445.16 7910.15 6442.19 C 7892.3 6427.32 7864.03 6364.87 7874.44 6342.56 C 7878.91 6332.16 7895.27 6333.64 7901.22 6324.72 C 7905.69 6314.31 7899.74 6300.93 7904.2 6290.52 C 7883.37 6281.6 7864.03 6268.22 7867 6247.4 C 7868.49 6234.02 7917.59 6232.53 7902.71 6225.1 C 7745 6146.29 7886.35 6217.66 7822.37 6254.83 C 7811.95 6262.27 7806 6235.5 7795.58 6231.04 C 7788.14 6226.58 7777.73 6231.04 7770.29 6231.04 C 7761.36 6231.04 7752.43 6235.5 7743.51 6232.53 C 7739.04 6229.56 7742.02 6222.12 7739.04 6216.17 C 7731.6 6201.3 7667.62 6225.1 7703.33 6199.82 C 7712.26 6193.87 7734.58 6187.92 7727.14 6181.97 C 7719.7 6177.51 7704.82 6181.97 7701.85 6173.05 C 7700.36 6164.13 7731.6 6147.77 7710.77 6135.88 C 7682.5 6119.52 7625.96 6126.96 7606.62 6092.76 C 7602.16 6085.32 7602.16 6049.64 7602.16 6040.71 C 7602.16 6039.23 7602.16 6037.74 7602.16 6037.74 C 7597.69 6039.23 7594.72 6048.15 7591.74 6045.17 C 7581.33 6039.23 7579.84 6022.87 7570.91 6015.44 C 7561.98 6009.49 7548.59 6010.98 7539.67 6003.54 C 7530.74 5999.08 7526.27 5988.67 7520.32 5981.24 C 7512.88 5981.24 7505.44 5973.8 7498 5973.8 C 7496.52 5973.8 7457.83 5985.7 7456.34 5985.7 C 7431.05 5984.21 7459.32 5961.91 7425.1 5984.21 C 7408.73 5993.13 7399.8 6010.98 7386.41 6021.38 C 7373.02 6031.79 7367.07 6016.92 7362.6 6021.38 C 7343.26 6043.69 7341.77 6045.17 7329.87 6045.17 L 7331.36 6048.15 C 7356.65 6083.84 7350.7 6074.91 7347.73 6109.11 C 7347.73 6123.98 7378.97 6104.65 7377.48 6121.01 C 7376 6129.93 7365.58 6121.01 7364.09 6122.5 C 7355.17 6131.42 7370.04 6134.39 7370.04 6138.85 C 7370.04 6140.34 7356.65 6143.31 7364.09 6149.26 C 7381.95 6161.16 7405.75 6167.1 7426.58 6167.1 C 7431.05 6196.84 7393.85 6167.1 7392.36 6174.54 C 7390.88 6193.87 7377.48 6201.3 7396.83 6220.63 C 7398.31 6222.12 7398.31 6225.1 7396.83 6226.58 C 7390.88 6236.99 7368.56 6229.56 7381.95 6244.43 C 7396.83 6239.96 7408.73 6231.04 7425.1 6232.53 C 7425.1 6278.63 7398.31 6309.85 7402.78 6338.1 C 7408.73 6370.82 7417.66 6347.02 7438.49 6355.95 C 7451.88 6361.89 7454.85 6381.22 7468.25 6388.66 C 7472.71 6390.15 7487.59 6385.69 7483.13 6399.07 C 7474.2 6428.81 7437 6396.09 7429.56 6406.5 C 7429.56 6406.5 7496.52 6468.95 7478.66 6488.28 C 7513.64 6506.5 7496.1 6499.47 7550.63 6522.44 C 7569.16 6528.4 7551.87 6560.03 7568.26 6566.54 C 7594.22 6576.84 7585.73 6586.82 7603.45 6596.18 C 7619.99 6604.9 7586.21 6581.29 7596.56 6588.65 C 7613.68 6600.84 7622.04 6574.55 7619 6582.51 C 7640.91 6586.18 7688.39 6511.04 7686.47 6519.21 " }
+ }
+ }
+ // PATH visit rs-km count: 77
+ DemoShape {
+ objectName: "rs-km"
+ ShapePath {
+ objectName: "svg_path:rs-km"
+ // boundingRect: 7585.83, 6524.48 229.594x247.068
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7673.25 6767.22 C 7673.25 6767.22 7679.97 6731.22 7667.49 6711.54 C 7655 6691.86 7618.04 6686.58 7618.04 6686.58 L 7601.24 6653.93 L 7589.72 6642.41 C 7589.72 6642.41 7582.04 6612.65 7588.28 6613.61 C 7591.4 6614.09 7596.27 6613.15 7599.01 6609.48 C 7601.74 6605.81 7603.51 6599.41 7612.11 6593.65 C 7619.29 6588.84 7636.24 6580.56 7639.48 6577.69 C 7647.63 6570.47 7659.58 6559.6 7659.58 6559.6 C 7659.58 6559.6 7684.51 6528.38 7687.01 6525.43 C 7693.08 6518.26 7715.44 6553.98 7718.92 6555.67 C 7726.84 6559.51 7749.14 6604.1 7752.98 6605.06 C 7756.82 6606.02 7796.14 6627.05 7799.02 6628.01 C 7801.9 6628.97 7805.74 6637.61 7802.86 6640.49 C 7799.98 6643.37 7816.78 6658.25 7815.34 6661.61 C 7813.9 6664.97 7814.38 6676.01 7811.02 6678.41 C 7807.66 6680.81 7815.76 6695.1 7811.92 6696.06 C 7808.08 6697.02 7797.1 6688.5 7797.1 6688.5 L 7793.92 6681.24 C 7793.92 6681.24 7788.46 6675.05 7780.3 6680.33 C 7772.14 6685.62 7763.02 6700.5 7765.42 6703.86 C 7767.82 6707.22 7773.58 6710.1 7771.66 6712.5 C 7769.74 6714.9 7763.5 6703.38 7751.01 6702.42 C 7738.53 6701.46 7708.77 6715.38 7706.37 6718.74 C 7703.97 6722.1 7700.13 6724.98 7698.69 6726.9 C 7697.25 6728.82 7695.33 6748.5 7695.33 6752.34 C 7695.33 6756.18 7691.01 6771.54 7691.01 6771.54 L 7673.25 6767.22 " }
+ }
+ }
+ // PATH visit mk count: 74
+ DemoShape {
+ objectName: "mk"
+ ShapePath {
+ objectName: "svg_path:mk"
+ // boundingRect: 7665.12, 6644.19 351.987x307.82
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7669.54 6768.51 C 7668.11 6778.54 7666.68 6788.58 7668.11 6797.18 C 7668.11 6807.21 7676.71 6815.81 7676.71 6824.41 C 7675.28 6828.71 7663.81 6828.71 7665.24 6833 C 7666.68 6843.04 7681.01 6848.77 7682.44 6858.8 C 7683.88 6863.1 7675.28 6867.4 7675.28 6871.7 C 7675.28 6883.17 7712.54 6936.19 7718.27 6944.79 C 7726.87 6954.82 7732.6 6939.06 7736.9 6939.06 C 7742.64 6937.63 7749.8 6939.06 7754.1 6941.93 C 7756.97 6944.79 7752.67 6951.96 7755.53 6951.96 C 7765.57 6953.39 7861.59 6923.29 7867.32 6918.99 C 7883.09 6901.8 7871.62 6878.87 7900.28 6868.83 C 7910.32 6864.53 7966.21 6871.7 7974.81 6865.97 C 7979.11 6863.1 7977.68 6854.5 7981.97 6851.64 C 7984.84 6850.2 7989.14 6858.8 7992.01 6855.94 C 8009.71 6803.88 8022.37 6809.24 8014.94 6734.12 C 8004.91 6724.08 7989.14 6695.42 7976.24 6686.82 C 7969.08 6682.52 7959.04 6686.82 7950.44 6682.52 C 7947.58 6681.09 7908.88 6650.99 7908.88 6648.13 C 7890.25 6630.93 7844.39 6675.36 7821.46 6679.66 C 7794.23 6683.96 7776.33 6672.35 7763.43 6703.88 C 7761.99 6708.18 7774.17 6706.89 7772.73 6712.62 C 7769.87 6719.78 7756.97 6702.59 7749.8 6702.59 C 7731.17 6704.02 7713.97 6716.92 7698.21 6726.95 C 7689.61 6732.68 7709.67 6792.88 7673.84 6768.51 L 7669.54 6768.51 " }
+ }
+ }
+ // PATH visit al count: 145
+ DemoShape {
+ objectName: "al"
+ ShapePath {
+ objectName: "svg_path:al"
+ // boundingRect: 7484.67, 6639.48 287.237x551.811
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7755.54 6951.96 C 7755.54 6970.59 7775.6 6976.32 7771.3 6993.52 C 7756.97 7047.98 7748.37 7000.68 7738.34 7039.38 C 7738.34 7039.38 7729.74 7096.71 7729.74 7098.14 C 7726.88 7102.44 7682.45 7116.77 7681.01 7126.8 C 7681.01 7126.8 7699.64 7155.47 7699.64 7155.47 C 7703.94 7168.36 7683.88 7155.47 7683.88 7164.07 C 7685.31 7201.33 7669.55 7181.26 7645.18 7185.56 C 7643.75 7185.56 7646.62 7187 7645.18 7188.43 C 7643.75 7189.86 7643.75 7189.86 7642.32 7191.3 C 7640.89 7189.86 7640.89 7188.43 7639.45 7185.56 C 7639.45 7182.7 7639.45 7179.83 7639.45 7176.96 C 7639.45 7168.36 7643.75 7161.2 7640.89 7154.03 C 7638.02 7149.73 7629.42 7154.03 7626.55 7149.73 C 7619.39 7144 7620.82 7132.54 7615.09 7126.8 C 7605.06 7113.9 7513.33 7089.54 7523.37 7066.61 C 7527.67 7056.58 7547.73 7068.04 7552.03 7059.44 C 7553.46 7056.58 7524.8 7037.95 7520.5 7022.18 C 7519.07 7017.88 7526.23 7016.45 7526.23 7012.15 C 7527.67 7006.42 7526.23 6999.25 7527.67 6993.52 C 7527.67 6986.35 7523.37 6979.19 7527.67 6974.89 C 7530.53 6969.15 7542 6973.45 7546.3 6969.15 C 7549.16 6964.86 7546.3 6953.39 7542 6953.39 C 7536.26 6954.82 7540.56 6966.29 7536.26 6970.59 C 7527.67 6977.75 7536.26 6921.86 7537.7 6907.53 C 7540.56 6890.33 7516.2 6898.93 7516.2 6881.73 C 7516.2 6868.83 7514.77 6855.93 7521.93 6845.9 C 7526.23 6840.17 7539.13 6845.9 7544.86 6840.17 C 7547.73 6837.3 7537.7 6835.87 7536.26 6831.57 C 7534.83 6821.54 7544.86 6807.21 7537.7 6800.04 C 7529.1 6791.44 7514.77 6801.47 7503.3 6798.61 C 7503.3 6788.58 7503.3 6778.54 7503.3 6769.94 C 7503.3 6764.21 7506.17 6757.05 7503.3 6751.31 C 7499 6744.15 7486.1 6744.15 7484.67 6736.98 C 7484.67 6735.55 7530.53 6642.39 7534.83 6639.53 C 7536.26 6638.09 7543.43 6673.92 7554.9 6675.36 C 7554.9 6675.36 7584.99 6650.99 7584.99 6650.99 C 7607.92 6650.99 7603.62 6686.82 7616.52 6693.99 C 7620.82 6696.85 7625.12 6691.12 7630.85 6692.55 C 7640.89 6695.42 7650.92 6699.72 7658.08 6706.89 C 7685.31 6736.98 7665.25 6767.08 7668.12 6797.18 C 7668.12 6807.21 7676.71 6815.81 7676.71 6824.41 C 7675.28 6828.7 7663.82 6828.7 7665.25 6833 C 7666.68 6843.04 7681.01 6848.77 7682.45 6858.8 C 7683.88 6863.1 7675.28 6867.4 7675.28 6871.7 C 7675.28 6883.16 7712.54 6936.19 7718.28 6944.79 C 7726.88 6954.82 7732.61 6939.06 7736.91 6939.06 C 7742.64 6937.63 7749.81 6939.06 7754.11 6941.92 C 7756.97 6944.79 7752.67 6951.96 7755.54 6951.96 " }
+ }
+ }
+ // PATH visit is count: 553
+ DemoShape {
+ objectName: "is"
+ ShapePath {
+ objectName: "svg_path:is"
+ // boundingRect: 3559.94, 1656.42 811.066x675.17
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 3676.75 2152.28 C 3672.45 2150.85 3580.73 2106.42 3576.43 2103.56 C 3570.69 2099.26 3589.33 2093.53 3593.63 2087.79 C 3597.92 2080.63 3593.63 2059.13 3600.79 2062 C 3612.26 2066.3 3605.09 2084.93 3612.26 2093.53 C 3613.69 2096.39 3615.12 2086.36 3619.42 2086.36 C 3630.89 2084.93 3643.79 2094.96 3653.82 2090.66 C 3698.25 2073.46 3639.49 2057.7 3693.95 2053.4 C 3703.98 2053.4 3714.01 2060.56 3724.04 2062 C 3731.21 2063.43 3712.58 2051.96 3706.85 2049.1 C 3703.98 2049.1 3701.11 2049.1 3698.25 2049.1 C 3686.78 2047.66 3675.32 2050.53 3665.28 2046.23 C 3658.12 2041.93 3682.48 2049.1 3688.21 2043.36 C 3691.08 2040.5 3676.75 2039.06 3678.18 2034.77 C 3678.18 2027.6 3683.91 2021.87 3691.08 2019 C 3695.38 2017.57 3702.55 2021.87 3708.28 2021.87 C 3718.31 2020.43 3729.78 2019 3738.37 2011.83 C 3742.67 2008.97 3726.91 2010.4 3722.61 2007.54 C 3718.31 2006.1 3682.48 2023.3 3672.45 2021.87 C 3665.28 2020.43 3676.75 2006.1 3678.18 1998.94 C 3678.18 1990.34 3672.45 1983.17 3673.88 1974.57 C 3675.32 1965.97 3691.08 1960.24 3688.21 1950.21 C 3686.78 1944.48 3673.88 1953.08 3668.15 1950.21 C 3663.85 1948.78 3665.28 1937.31 3660.98 1940.18 C 3659.55 1941.61 3665.28 1948.78 3662.42 1947.34 C 3650.95 1941.61 3639.49 1922.98 3629.45 1915.81 C 3628.02 1912.95 3623.72 1914.38 3620.86 1914.38 C 3617.99 1914.38 3615.12 1918.68 3613.69 1917.25 C 3610.82 1915.81 3612.26 1908.65 3607.96 1907.21 C 3602.22 1904.35 3523.4 1904.35 3580.73 1877.12 C 3596.49 1869.95 3593.63 1884.28 3607.96 1892.88 C 3620.86 1900.05 3640.92 1881.42 3653.82 1888.58 C 3659.55 1891.45 3643.79 1902.91 3649.52 1907.21 C 3653.82 1911.51 3656.68 1898.61 3662.42 1897.18 C 3672.45 1894.32 3683.91 1888.58 3692.51 1894.32 C 3698.25 1900.05 3689.65 1911.51 3691.08 1918.68 C 3691.08 1922.98 3691.08 1911.51 3692.51 1910.08 C 3699.68 1901.48 3807.17 1971.71 3769.9 1910.08 C 3764.17 1901.48 3749.84 1917.25 3738.37 1915.81 C 3725.48 1914.38 3715.44 1898.61 3709.71 1887.15 C 3709.71 1887.15 3711.14 1885.72 3712.58 1884.28 C 3728.34 1872.82 3754.14 1869.95 3771.34 1868.52 C 3779.94 1868.52 3789.97 1877.12 3795.7 1869.95 C 3807.17 1859.92 3752.71 1864.22 3754.14 1848.45 C 3755.57 1838.42 3782.8 1842.72 3782.8 1831.26 C 3781.37 1763.9 3732.64 1838.42 3729.78 1825.52 C 3728.34 1816.92 3735.51 1808.33 3732.64 1801.16 C 3731.21 1798.29 3726.91 1806.89 3724.04 1806.89 C 3721.18 1806.89 3726.91 1799.73 3724.04 1799.73 C 3714.01 1802.59 3714.01 1819.79 3706.85 1801.16 C 3705.41 1799.73 3708.28 1793.99 3706.85 1793.99 C 3701.11 1798.29 3701.11 1808.33 3693.95 1809.76 C 3689.65 1809.76 3691.08 1799.73 3686.78 1798.29 C 3678.18 1795.43 3638.05 1815.49 3636.62 1792.56 C 3636.62 1788.26 3643.79 1788.26 3643.79 1783.96 C 3639.49 1771.06 3605.09 1772.5 3607.96 1758.16 C 3619.42 1697.97 3653.82 1783.96 3660.98 1779.66 C 3681.05 1766.76 3638.05 1725.2 3666.72 1725.2 C 3692.51 1723.77 3675.32 1821.22 3708.28 1776.8 C 3712.58 1771.06 3691.08 1763.9 3696.81 1759.6 C 3702.55 1752.43 3718.31 1768.2 3725.48 1761.03 C 3729.78 1753.86 3706.85 1761.03 3701.11 1755.3 C 3692.51 1746.7 3689.65 1733.8 3688.21 1722.34 C 3682.48 1673.61 3715.44 1766.76 3728.34 1752.43 C 3732.64 1748.13 3683.91 1709.44 3705.41 1699.4 C 3715.44 1695.11 3722.61 1722.34 3732.64 1718.04 C 3738.37 1713.74 3705.41 1667.87 3746.97 1682.21 C 3781.37 1695.11 3742.67 1755.3 3781.37 1779.66 C 3781.37 1781.1 3805.73 1769.63 3807.17 1740.97 C 3807.17 1735.23 3798.57 1738.1 3795.7 1733.8 C 3791.4 1729.5 3775.64 1702.27 3781.37 1693.67 C 3791.4 1682.21 3811.47 1703.7 3825.8 1710.87 C 3830.1 1712.3 3812.9 1708 3812.9 1703.7 C 3811.47 1699.4 3820.07 1700.84 3822.93 1699.4 C 3824.36 1697.97 3824.36 1695.11 3822.93 1695.11 C 3804.3 1696.54 3805.73 1725.2 3784.24 1677.91 C 3765.61 1636.35 3805.73 1667.87 3807.17 1667.87 C 3807.17 1667.87 3808.6 1666.44 3808.6 1665.01 C 3808.6 1662.14 3805.73 1656.41 3808.6 1657.84 C 3812.9 1662.14 3812.9 1670.74 3818.63 1675.04 C 3824.36 1679.34 3834.4 1677.91 3840.13 1682.21 C 3854.46 1693.67 3832.96 1708 3834.4 1715.17 C 3834.4 1718.04 3841.56 1715.17 3844.43 1716.6 C 3845.86 1718.04 3855.89 1726.63 3853.03 1732.37 C 3850.16 1733.8 3843 1732.37 3844.43 1735.23 C 3847.3 1740.97 3858.76 1739.53 3858.76 1746.7 C 3860.19 1756.73 3845.86 1766.76 3848.73 1776.8 C 3851.59 1785.39 3873.09 1779.66 3871.66 1788.26 C 3871.66 1796.86 3850.16 1782.53 3847.3 1789.69 C 3845.86 1796.86 3911.79 1825.52 3845.86 1835.56 C 3834.4 1838.42 3830.1 1818.36 3818.63 1814.06 C 3814.33 1812.62 3820.07 1822.66 3822.93 1826.96 C 3825.8 1838.42 3838.7 1848.45 3835.83 1858.49 C 3832.96 1869.95 3811.47 1869.95 3810.03 1881.42 C 3807.17 1888.58 3827.23 1884.28 3828.66 1891.45 C 3831.53 1898.61 3820.07 1905.78 3817.2 1912.95 C 3814.33 1921.55 3804.3 1938.74 3812.9 1940.18 C 3843 1945.91 3841.56 1885.72 3860.19 1875.68 C 3918.95 1844.15 3878.83 1884.28 3877.39 1890.02 C 3868.79 1925.84 3911.79 1887.15 3914.65 1884.28 C 3933.29 1864.22 3926.12 1806.89 3940.45 1808.33 C 3990.61 1812.62 3946.18 1875.68 3974.85 1898.61 C 3997.78 1918.68 3984.88 1872.82 3990.61 1861.35 C 3992.05 1854.19 3997.78 1845.59 4004.94 1842.72 C 4009.24 1841.29 4014.98 1844.15 4020.71 1847.02 C 4022.14 1848.45 4022.14 1852.75 4023.57 1852.75 C 4035.04 1849.89 4046.51 1834.12 4056.54 1839.85 C 4066.57 1844.15 4065.14 1859.92 4066.57 1871.38 C 4066.57 1878.55 4057.97 1882.85 4059.4 1890.02 C 4066.57 1925.84 4083.77 1864.22 4073.74 1917.25 C 4069.44 1947.34 4059.4 1931.58 4066.57 1958.81 C 4078.04 2007.54 4078.04 1865.65 4092.37 1862.79 C 4129.63 1852.75 4121.03 1914.38 4123.9 1928.71 C 4123.9 1931.58 4123.9 1921.55 4126.76 1920.11 C 4128.2 1918.68 4133.93 1920.11 4132.5 1918.68 C 4123.9 1900.05 4135.36 1927.28 4135.36 1927.28 C 4136.79 1927.28 4136.79 1922.98 4138.23 1921.55 C 4145.39 1910.08 4159.73 1890.02 4175.49 1888.58 C 4191.26 1887.15 4189.82 1920.11 4202.72 1928.71 C 4208.45 1931.58 4199.85 1915.81 4204.15 1911.51 C 4212.75 1901.48 4218.49 1924.41 4218.49 1924.41 C 4219.92 1927.28 4217.05 1917.25 4218.49 1914.38 C 4221.35 1910.08 4228.52 1907.21 4229.95 1901.48 C 4232.82 1895.75 4229.95 1888.58 4229.95 1881.42 C 4231.38 1872.82 4229.95 1861.35 4237.12 1857.05 C 4247.15 1852.75 4257.18 1859.92 4267.21 1862.79 C 4293.01 1868.52 4271.51 1879.98 4274.38 1890.02 C 4277.25 1895.75 4285.84 1894.32 4288.71 1898.61 C 4298.74 1920.11 4245.72 1925.84 4293.01 1951.64 C 4298.74 1954.51 4298.74 1938.74 4304.48 1935.88 C 4310.21 1933.01 4317.37 1938.74 4323.11 1935.88 C 4336.01 1931.58 4350.34 1900.05 4368.97 1934.44 C 4371.83 1940.18 4356.07 1937.31 4348.9 1938.74 C 4327.41 1943.04 4318.81 1940.18 4304.48 1963.11 C 4303.04 1965.97 4311.64 1965.97 4311.64 1968.84 C 4313.07 1973.14 4304.48 1976.01 4307.34 1977.44 C 4314.51 1983.17 4327.41 1978.87 4334.57 1984.6 C 4357.5 2001.8 4303.04 2033.33 4300.18 2036.2 C 4297.31 2037.63 4305.91 2031.9 4310.21 2033.33 C 4320.24 2036.2 4330.27 2043.36 4338.87 2050.53 C 4340.3 2051.96 4331.71 2051.96 4331.71 2054.83 C 4331.71 2059.13 4338.87 2063.43 4338.87 2067.73 C 4338.87 2070.59 4333.14 2066.3 4331.71 2067.73 C 4321.67 2073.46 4294.44 2084.93 4304.48 2089.23 C 4317.37 2093.53 4328.84 2062 4338.87 2070.59 C 4343.17 2076.33 4347.47 2082.06 4353.2 2086.36 C 4356.07 2089.23 4361.8 2083.49 4363.24 2087.79 C 4370.4 2100.69 4377.57 2125.05 4360.37 2136.52 C 4351.77 2142.25 4338.87 2140.82 4330.27 2145.12 C 4325.97 2147.99 4320.24 2153.72 4323.11 2156.58 C 4327.41 2160.88 4401.93 2169.48 4343.17 2203.88 C 4330.27 2211.04 4297.31 2180.95 4297.31 2179.52 C 4287.28 2166.62 4343.17 2202.45 4328.84 2215.34 C 4321.67 2221.08 4310.21 2201.01 4303.04 2206.75 C 4297.31 2211.04 4317.37 2215.34 4320.24 2222.51 C 4321.67 2225.38 4314.51 2228.24 4311.64 2229.68 C 4298.74 2235.41 4281.54 2251.17 4271.51 2241.14 C 4264.35 2233.98 4265.78 2205.31 4258.61 2212.48 C 4251.45 2221.08 4274.38 2233.98 4268.65 2244.01 C 4264.35 2252.61 4245.72 2242.57 4238.55 2249.74 C 4229.95 2256.91 4235.68 2274.1 4228.52 2282.7 C 4225.65 2287 4217.05 2278.4 4212.75 2279.84 C 4202.72 2282.7 4196.99 2295.6 4186.96 2297.03 C 4178.36 2298.47 4182.66 2261.21 4159.73 2255.47 C 4152.56 2254.04 4161.16 2271.24 4156.86 2278.4 C 4155.43 2281.27 4149.69 2275.54 4146.83 2278.4 C 4145.39 2278.4 4152.56 2282.7 4151.13 2282.7 C 4112.43 2289.87 4133.93 2279.84 4098.1 2285.57 C 4079.47 2288.44 4063.7 2304.2 4045.07 2311.37 C 4042.21 2312.8 4036.47 2314.23 4033.61 2312.8 C 4023.57 2308.5 4020.71 2292.74 4010.68 2292.74 C 4002.08 2294.17 4004.94 2312.8 3997.78 2315.67 C 3992.05 2317.1 3990.61 2305.63 3984.88 2302.77 C 3976.28 2299.9 3944.75 2298.47 3933.29 2294.17 C 3913.22 2288.44 3911.79 2322.83 3907.49 2327.13 C 3897.46 2335.73 3844.43 2330 3834.4 2325.7 C 3808.6 2317.1 3787.1 2275.54 3774.2 2262.64 C 3755.57 2246.87 3739.81 2259.77 3729.78 2231.11 C 3728.34 2223.94 3721.18 2215.34 3724.04 2208.18 C 3726.91 2198.15 3754.14 2193.85 3745.54 2189.55 C 3736.94 2185.25 3729.78 2212.48 3722.61 2206.75 C 3714.01 2199.58 3732.64 2183.81 3726.91 2173.78 C 3724.04 2168.05 3716.88 2186.68 3711.14 2183.81 C 3701.11 2178.08 3701.11 2163.75 3692.51 2156.58 C 3688.21 2152.29 3682.48 2153.72 3676.75 2152.28 " }
+ }
+ }
+ // PATH visit by count: 321
+ DemoShape {
+ objectName: "by"
+ ShapePath {
+ objectName: "svg_path:by"
+ // boundingRect: 7670.98, 3935.51 1022.16x977.052
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7768.44 4911.13 C 7785.63 4906.83 7751.24 4893.93 7774.17 4886.77 C 7781.34 4883.9 7791.37 4883.9 7799.97 4885.33 C 7802.83 4885.33 7802.83 4892.5 7807.13 4893.93 C 7821.46 4898.23 7841.53 4830.87 7847.26 4826.57 C 7858.73 4820.84 7873.06 4823.71 7884.52 4819.41 C 7901.72 4812.24 7914.62 4797.91 7933.25 4792.18 C 7940.42 4790.74 7947.58 4793.61 7954.75 4793.61 C 7961.91 4793.61 7969.08 4793.61 7976.25 4793.61 C 7997.74 4790.74 8017.81 4777.84 8037.87 4779.28 C 8042.17 4779.28 8043.6 4785.01 8047.9 4786.44 C 8083.73 4790.74 8128.16 4786.44 8161.12 4777.84 C 8176.89 4773.55 8165.42 4787.88 8174.02 4795.04 C 8176.89 4796.48 8182.62 4789.31 8185.49 4792.18 C 8188.35 4795.04 8179.76 4803.64 8184.05 4805.07 C 8219.88 4819.41 8194.09 4796.48 8211.29 4792.18 C 8268.61 4776.41 8217.02 4800.78 8235.65 4810.81 C 8238.52 4813.67 8242.81 4817.97 8244.25 4815.11 C 8251.41 4810.81 8244.25 4785.01 8251.41 4785.01 C 8258.58 4783.58 8271.48 4796.48 8280.08 4786.44 C 8285.81 4780.71 8285.81 4759.21 8294.41 4763.51 C 8307.31 4772.11 8275.78 4785.01 8311.61 4785.01 C 8324.51 4785.01 8317.34 4756.35 8337.4 4770.68 C 8374.67 4796.48 8330.24 4787.88 8360.33 4795.04 C 8368.93 4796.48 8357.47 4774.98 8363.2 4767.81 C 8371.8 4756.35 8384.7 4736.28 8396.16 4742.02 C 8407.63 4747.75 8419.09 4787.88 8430.56 4785.01 C 8450.62 4779.28 8437.73 4754.91 8460.66 4749.18 C 8469.25 4747.75 8476.42 4757.78 8483.59 4756.35 C 8530.88 4747.75 8452.06 4731.98 8517.98 4736.28 C 8550.95 4739.15 8533.75 4774.98 8571.01 4766.38 C 8606.84 4759.21 8549.51 4720.52 8549.51 4704.75 C 8549.51 4693.29 8552.38 4666.06 8553.81 4656.03 C 8560.98 4615.9 8571.01 4601.57 8576.74 4600.13 C 8586.77 4597.27 8598.24 4601.57 8606.84 4597.27 C 8612.57 4594.4 8609.71 4584.37 8615.44 4581.5 C 8628.34 4572.9 8646.97 4574.34 8662.73 4570.04 C 8658.43 4567.17 8661.3 4561.44 8658.43 4557.14 C 8658.43 4557.14 8628.34 4538.51 8628.34 4537.07 C 8626.9 4534.21 8632.64 4529.91 8631.2 4527.04 C 8626.9 4517.01 8616.87 4511.28 8615.44 4502.68 C 8614 4498.38 8622.6 4496.94 8622.6 4492.64 C 8619.74 4482.61 8599.67 4482.61 8598.24 4471.15 C 8596.81 4466.85 8605.41 4465.41 8606.84 4461.11 C 8611.14 4443.92 8559.54 4433.88 8555.24 4422.42 C 8549.51 4410.95 8559.54 4396.62 8558.11 4383.72 C 8558.11 4360.79 8626.9 4390.89 8645.53 4379.42 C 8658.43 4372.26 8672.76 4345.03 8671.33 4330.7 C 8671.33 4329.26 8665.6 4330.7 8667.03 4329.26 C 8674.2 4322.1 8687.1 4319.23 8691.4 4310.63 C 8695.7 4304.9 8691.4 4292 8685.66 4289.13 C 8661.3 4280.54 8658.43 4290.57 8645.53 4276.24 C 8641.23 4270.5 8655.57 4250.44 8639.8 4251.87 C 8622.6 4253.31 8614 4247.57 8589.64 4254.74 C 8581.04 4257.61 8572.44 4266.2 8563.84 4263.34 C 8556.68 4260.47 8569.58 4220.34 8556.68 4211.74 C 8552.38 4208.88 8507.95 4208.88 8493.62 4198.85 C 8470.69 4184.51 8485.02 4170.18 8452.06 4160.15 C 8446.32 4157.28 8460.66 4132.92 8454.92 4131.49 C 8434.86 4131.49 8427.69 4130.05 8404.76 4114.29 C 8394.73 4108.56 8413.36 4078.46 8410.5 4072.73 C 8401.9 4059.83 8421.96 4069.86 8416.23 4061.26 C 8411.93 4054.1 8377.53 4026.87 8378.97 4019.7 C 8384.7 3999.64 8387.56 3985.3 8376.1 3965.24 C 8373.23 3959.51 8364.63 3970.97 8358.9 3970.97 C 8357.47 3970.97 8311.61 3942.31 8311.61 3942.31 C 8275.78 3927.98 8301.57 3939.44 8281.51 3948.04 C 8278.64 3949.47 8261.45 3946.61 8257.15 3950.91 C 8249.98 3960.94 8238.52 3988.17 8227.05 3993.9 C 8204.12 4005.37 8205.55 3946.61 8205.55 3946.61 C 8161.12 3936.58 8169.72 3942.31 8139.63 3965.24 C 8132.46 3970.97 8126.73 3950.91 8119.56 3945.18 C 8095.2 3927.98 8102.36 3975.27 8066.54 3946.61 C 8066.54 3948.04 8039.31 3969.54 8036.44 3978.14 C 8033.57 3982.44 8026.41 4025.43 8026.41 4025.43 C 8019.24 4031.17 8007.78 4022.57 7999.18 4025.43 C 7996.31 4026.87 7999.18 4036.9 7994.88 4036.9 C 7989.14 4036.9 7984.84 4028.3 7977.68 4028.3 C 7959.05 4026.87 7956.18 4068.43 7931.82 4074.16 L 7931.82 4075.59 C 7940.42 4097.09 7930.38 4115.72 7928.95 4137.22 C 7927.52 4150.12 7974.81 4124.32 7969.08 4144.39 C 7967.65 4148.68 7960.48 4148.68 7957.61 4152.98 C 7956.18 4158.72 7961.91 4167.32 7957.61 4173.05 C 7949.02 4183.08 7927.52 4168.75 7920.35 4178.78 C 7914.62 4188.81 7921.79 4203.15 7914.62 4211.74 C 7887.39 4254.74 7900.29 4198.85 7883.09 4251.87 C 7883.09 4254.74 7877.36 4254.74 7877.36 4256.17 C 7877.36 4256.17 7890.26 4296.3 7890.26 4296.3 C 7890.26 4297.73 7875.92 4337.86 7877.36 4343.6 C 7877.36 4349.33 7921.79 4340.73 7908.89 4372.26 C 7906.02 4379.42 7877.36 4389.46 7878.79 4376.56 C 7878.79 4372.26 7885.96 4369.39 7884.52 4365.09 C 7881.66 4346.46 7848.69 4362.23 7844.39 4367.96 C 7828.63 4383.72 7860.16 4382.29 7837.23 4395.19 C 7827.2 4399.49 7812.86 4396.62 7805.7 4405.22 C 7799.97 4410.95 7820.03 4426.72 7812.86 4429.59 C 7805.7 4431.02 7797.1 4426.72 7789.93 4431.02 C 7781.34 4436.75 7779.9 4451.08 7771.3 4456.82 C 7758.4 4468.28 7752.67 4442.48 7741.21 4446.78 C 7729.74 4452.52 7688.18 4475.45 7670.98 4463.98 C 7696.78 4537.07 7759.84 4604.43 7764.14 4683.26 C 7764.14 4686.12 7761.27 4688.99 7759.84 4690.42 C 7749.81 4700.45 7659.52 4776.41 7701.08 4792.18 C 7703.94 4793.61 7706.81 4786.44 7709.68 4787.88 C 7722.58 4789.31 7736.91 4793.61 7748.37 4802.21 C 7777.04 4825.14 7746.94 4873.87 7758.4 4899.66 C 7759.84 4903.96 7764.14 4908.26 7767 4912.56 L 7768.44 4911.13 " }
+ }
+ }
+ // PATH visit no count: 1982
+ DemoShape {
+ objectName: "no"
+ ShapePath {
+ objectName: "svg_path:no"
+ // boundingRect: 5717.75, 1239.32 1829.56x2604.54
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 6918.57 1718.04 C 6920 1718.04 6920 1718.04 6920 1719.47 M 7152.18 1963.11 L 7150.74 1963.11 M 7529.1 1421.37 C 7537.7 1432.84 7557.76 1460.07 7540.56 1465.8 C 7523.37 1471.53 7478.94 1448.6 7493.27 1461.5 C 7520.5 1484.43 7466.04 1517.39 7458.87 1534.59 C 7458.87 1536.02 7476.07 1597.65 7456.01 1590.48 C 7401.55 1568.99 7466.04 1533.16 7447.41 1501.63 C 7418.74 1451.47 7374.32 1470.1 7337.05 1429.97 L 7335.62 1422.8 C 7334.19 1422.8 7332.75 1422.8 7331.32 1424.24 C 7331.32 1422.8 7329.89 1422.8 7329.89 1421.37 L 7329.89 1424.24 C 7301.22 1429.97 7306.96 1462.93 7282.59 1470.1 C 7261.1 1475.83 7269.7 1445.73 7245.33 1472.96 C 7242.47 1477.26 7245.33 1484.43 7243.9 1490.16 C 7242.47 1491.6 7226.7 1521.69 7226.7 1523.13 C 7222.4 1534.59 7231 1571.85 7232.43 1581.89 C 7232.43 1586.18 7229.57 1589.05 7229.57 1593.35 C 7229.57 1601.95 7231 1609.12 7232.43 1617.71 C 7236.73 1629.18 7246.76 1637.78 7248.2 1649.24 C 7255.36 1699.4 7242.47 1665.01 7225.27 1680.77 C 7205.2 1700.84 7223.83 1706.57 7218.1 1730.93 C 7216.67 1736.67 7210.94 1739.53 7209.5 1745.27 C 7209.5 1746.7 7190.87 1729.5 7188 1728.07 C 7183.71 1725.2 7130.68 1706.57 7126.38 1712.3 C 7120.65 1718.04 7124.95 1729.5 7120.65 1735.23 C 7103.45 1765.33 7080.52 1746.7 7056.15 1751 C 7048.99 1751 7038.96 1758.16 7033.22 1753.86 C 7026.06 1748.13 7028.92 1736.67 7024.62 1729.5 C 7014.59 1712.3 6981.63 1667.87 6964.43 1657.84 C 6907.1 1624.88 6932.9 1710.87 6932.9 1710.87 C 6924.3 1712.3 6917.14 1702.27 6908.54 1702.27 C 6904.24 1702.27 6897.07 1706.57 6898.51 1709.44 C 6899.94 1710.87 6901.37 1712.3 6902.8 1712.3 L 6899.94 1712.3 C 6888.47 1715.17 6872.71 1708 6866.98 1718.04 C 6862.68 1725.2 6881.31 1729.5 6885.61 1736.67 C 6889.91 1745.27 6892.77 1755.3 6892.77 1765.33 C 6892.77 1782.53 6868.41 1795.43 6872.71 1812.62 C 6874.14 1825.52 6924.3 1822.66 6877.01 1852.75 C 6864.11 1861.35 6765.22 1812.62 6745.16 1838.42 C 6736.56 1849.89 6772.39 1931.58 6743.72 1943.04 L 6697.86 1922.98 C 6689.26 1922.98 6662.03 1973.14 6660.6 1984.6 C 6657.73 2000.37 6657.73 2020.43 6646.27 2034.77 C 6637.67 2044.8 6621.9 2029.03 6626.2 2054.83 C 6631.94 2086.36 6669.2 2089.23 6653.43 2127.92 C 6644.83 2152.28 6597.54 2208.18 6588.94 2233.98 C 6586.08 2246.87 6604.71 2258.34 6600.41 2271.24 L 6568.88 2298.47 C 6557.41 2304.2 6534.48 2291.3 6528.75 2304.2 L 6543.08 2360.09 C 6543.08 2360.09 6535.91 2403.09 6535.91 2404.52 L 6540.21 2457.55 C 6538.78 2463.28 6531.61 2464.72 6530.18 2470.45 C 6517.28 2509.14 6497.22 2549.27 6484.32 2589.4 C 6475.72 2615.2 6535.91 2600.87 6525.88 2671.09 C 6515.85 2738.45 6477.15 2671.09 6418.39 2708.35 C 6399.76 2719.82 6368.23 2768.55 6363.93 2791.48 C 6362.5 2798.64 6371.1 2804.38 6369.67 2810.11 C 6368.23 2825.87 6348.17 2835.91 6348.17 2851.67 C 6348.17 3025.08 6369.67 2724.12 6369.67 2897.53 C 6369.67 2906.13 6359.64 2911.86 6359.64 2920.46 C 6358.2 2930.49 6363.93 2939.09 6365.37 2949.13 C 6365.37 2957.72 6358.2 2967.76 6359.64 2976.36 C 6361.07 2997.85 6384 3016.48 6386.87 3037.98 C 6389.73 3069.51 6366.8 3109.64 6373.97 3139.74 C 6382.57 3172.7 6437.03 3169.83 6442.76 3205.66 L 6426.99 3262.99 C 6415.53 3273.02 6386.87 3265.85 6388.3 3280.19 C 6395.46 3341.81 6432.73 3326.05 6416.96 3407.74 L 6418.39 3449.3 C 6405.5 3482.26 6359.64 3485.13 6356.77 3495.16 C 6355.34 3498.03 6362.5 3499.46 6362.5 3503.76 C 6365.37 3509.49 6368.23 3516.66 6365.37 3522.39 C 6361.07 3530.99 6346.74 3532.42 6343.87 3542.46 C 6335.27 3568.25 6375.4 3625.58 6343.87 3670.01 C 6330.97 3688.64 6325.24 3674.31 6320.94 3659.98 C 6322.37 3659.98 6322.37 3659.98 6323.81 3658.54 C 6329.54 3654.24 6320.94 3642.78 6316.64 3637.04 C 6286.54 3589.75 6302.31 3659.98 6255.01 3615.55 C 6250.71 3611.25 6259.31 3602.65 6259.31 3596.92 C 6259.31 3588.32 6250.71 3596.92 6250.71 3596.92 C 6242.12 3584.02 6244.98 3562.52 6247.85 3565.39 C 6247.85 3562.52 6246.41 3561.09 6246.41 3559.65 C 6243.55 3545.32 6239.25 3532.42 6236.38 3518.09 C 6234.95 3509.49 6247.85 3490.86 6237.82 3490.86 C 6201.99 3490.86 6263.61 3535.29 6227.78 3559.65 C 6226.35 3559.65 6224.92 3558.22 6224.92 3556.79 C 6223.48 3548.19 6227.78 3538.16 6224.92 3530.99 C 6220.62 3523.82 6206.29 3510.93 6204.85 3518.09 C 6203.42 3529.56 6217.75 3536.72 6222.05 3546.76 C 6224.92 3552.49 6216.32 3565.39 6219.18 3572.55 C 6230.65 3602.65 6239.25 3586.88 6230.65 3606.95 C 6230.65 3608.38 6230.65 3612.68 6227.78 3612.68 C 6224.92 3612.68 6222.05 3604.08 6219.18 3606.95 C 6209.15 3625.58 6222.05 3649.94 6210.59 3649.94 C 6204.85 3649.94 6212.02 3631.31 6207.72 3634.18 C 6183.36 3649.94 6229.22 3665.71 6169.02 3665.71 C 6161.86 3665.71 6169.02 3651.38 6163.29 3647.08 C 6156.13 3642.78 6143.23 3627.01 6138.93 3634.18 C 6134.63 3644.21 6153.26 3649.94 6157.56 3659.98 C 6158.99 3664.27 6120.3 3667.14 6116 3681.47 C 6114.56 3687.21 6130.33 3692.94 6126.03 3697.24 C 6118.86 3705.84 6100.23 3698.67 6093.07 3705.84 C 6088.77 3711.57 6107.4 3713 6105.96 3718.73 C 6097.37 3777.49 6085.9 3701.54 6078.73 3731.63 C 6077.3 3734.5 6083.03 3737.37 6081.6 3740.23 C 6074.43 3750.26 6037.17 3794.69 6035.74 3796.13 C 6032.87 3798.99 6028.57 3790.39 6025.71 3793.26 C 6017.11 3800.43 6018.54 3819.06 6007.08 3820.49 C 5998.48 3823.36 5997.04 3798.99 5987.01 3801.86 C 5976.98 3804.72 5981.28 3823.36 5974.11 3829.09 C 5968.38 3833.39 5958.35 3826.22 5952.62 3829.09 C 5948.32 3830.52 5946.88 3836.25 5942.58 3837.69 C 5928.25 3846.29 5932.55 3833.39 5912.49 3833.39 C 5902.46 3833.39 5890.99 3849.15 5885.26 3841.99 C 5879.52 3834.82 5903.89 3829.09 5901.02 3820.49 C 5896.72 3813.32 5888.12 3831.96 5879.52 3831.96 C 5868.06 3833.39 5856.59 3829.09 5845.13 3824.79 C 5820.76 3813.32 5868.06 3797.56 5872.36 3787.53 C 5873.79 3781.79 5863.76 3776.06 5858.03 3777.49 C 5852.29 3778.93 5853.73 3791.83 5846.56 3793.26 C 5837.96 3794.69 5829.36 3788.96 5820.76 3784.66 C 5803.57 3777.49 5793.53 3751.7 5784.94 3745.97 C 5780.64 3741.67 5772.04 3744.53 5766.3 3741.67 C 5756.27 3735.93 5739.07 3698.67 5740.51 3688.64 C 5740.51 3680.04 5750.54 3674.31 5753.41 3664.27 C 5754.84 3655.68 5743.37 3634.18 5753.41 3637.04 C 5764.87 3639.91 5756.27 3664.27 5767.74 3668.57 C 5773.47 3672.87 5774.9 3654.24 5782.07 3651.38 C 5784.94 3648.51 5787.8 3651.38 5790.67 3654.24 C 5787.8 3647.08 5786.37 3639.91 5783.5 3632.75 C 5782.07 3622.71 5803.57 3625.58 5809.3 3618.41 C 5812.17 3615.55 5796.4 3618.41 5797.83 3614.11 C 5800.7 3606.95 5807.87 3602.65 5815.03 3599.78 C 5823.63 3594.05 5840.83 3598.35 5845.13 3588.32 C 5850.86 3575.42 5810.73 3594.05 5802.13 3585.45 C 5796.4 3592.62 5793.53 3592.62 5793.53 3579.72 C 5794.97 3568.25 5819.33 3565.39 5816.47 3555.35 C 5812.17 3543.89 5794.97 3541.02 5783.5 3543.89 C 5764.87 3549.62 5772.04 3594.05 5753.41 3592.62 C 5743.37 3592.62 5750.54 3573.99 5746.24 3566.82 C 5743.37 3562.52 5737.64 3559.65 5731.91 3556.79 C 5731.91 3556.79 5731.91 3558.22 5733.34 3558.22 C 5731.91 3558.22 5731.91 3558.22 5730.48 3559.65 C 5730.48 3558.22 5731.91 3556.79 5731.91 3556.79 C 5727.61 3553.92 5723.31 3551.05 5723.31 3546.76 C 5723.31 3539.59 5740.51 3552.49 5746.24 3548.19 C 5754.84 3541.02 5751.97 3522.39 5762 3518.09 C 5769.17 3513.79 5773.47 3529.56 5780.64 3530.99 C 5783.5 3532.42 5779.2 3523.82 5782.07 3522.39 C 5784.94 3519.53 5789.24 3523.82 5792.1 3522.39 C 5797.83 3520.96 5777.77 3520.96 5779.2 3515.23 C 5779.2 3513.79 5837.96 3488 5833.66 3488 C 5787.8 3485.13 5816.47 3523.82 5772.04 3483.7 C 5770.6 3482.26 5779.2 3483.7 5780.64 3480.83 C 5783.5 3477.96 5780.64 3470.8 5784.94 3469.36 C 5790.67 3465.06 5797.83 3470.8 5803.57 3466.5 C 5806.43 3465.06 5802.13 3460.77 5802.13 3457.9 C 5805 3452.17 5807.87 3447.87 5810.73 3445 C 5817.9 3440.7 5833.66 3445 5835.1 3437.83 C 5836.53 3429.24 5816.47 3430.67 5816.47 3423.5 C 5815.03 3420.64 5817.9 3416.34 5820.76 3412.04 C 5817.9 3412.04 5813.6 3404.87 5810.73 3407.74 C 5803.57 3412.04 5799.27 3419.2 5794.97 3424.94 C 5789.24 3436.4 5792.1 3450.73 5783.5 3459.33 C 5779.2 3463.63 5780.64 3447.87 5779.2 3443.57 C 5770.6 3427.8 5763.44 3432.1 5769.17 3417.77 C 5774.9 3406.3 5797.83 3380.51 5784.94 3383.37 C 5770.6 3387.67 5760.57 3450.73 5743.37 3419.2 C 5739.07 3409.17 5734.77 3397.71 5731.91 3386.24 C 5730.48 3374.78 5751.97 3386.24 5777.77 3377.64 C 5783.5 3376.21 5786.37 3370.48 5787.8 3363.31 C 5777.77 3373.34 5759.14 3351.84 5759.14 3346.11 C 5759.14 3333.21 5779.2 3330.35 5790.67 3324.61 C 5787.8 3308.85 5774.9 3323.18 5763.44 3336.08 C 5763.44 3336.08 5762 3336.08 5762 3334.65 C 5760.57 3333.21 5759.14 3330.35 5756.27 3327.48 C 5760.57 3331.78 5762 3337.51 5763.44 3336.08 C 5756.27 3343.25 5750.54 3348.98 5746.24 3350.41 C 5739.07 3350.41 5741.94 3336.08 5739.07 3330.35 C 5737.64 3327.48 5711.84 3301.68 5719.01 3300.25 C 5729.04 3300.25 5737.64 3308.85 5746.24 3316.02 C 5746.24 3314.58 5744.81 3311.72 5746.24 3308.85 C 5749.11 3298.82 5766.3 3298.82 5774.9 3291.65 C 5776.34 3290.22 5773.47 3284.49 5770.6 3285.92 C 5759.14 3287.35 5740.51 3301.68 5730.48 3295.95 C 5717.58 3288.79 5727.61 3255.82 5734.77 3251.52 C 5744.81 3244.36 5756.27 3265.85 5769.17 3265.85 C 5770.6 3267.29 5799.27 3232.89 5830.8 3248.66 C 5840.83 3252.96 5842.26 3267.29 5852.29 3271.59 C 5862.33 3275.89 5843.7 3250.09 5876.66 3241.49 C 5918.22 3230.03 5875.22 3303.12 5919.65 3300.25 C 5946.88 3297.38 5909.62 3274.45 5911.05 3255.82 C 5912.49 3235.76 5985.58 3283.05 5975.55 3232.89 C 5974.11 3222.86 5955.48 3241.49 5946.88 3238.62 C 5941.15 3237.19 5939.72 3228.59 5939.72 3222.86 C 5939.72 3207.09 5979.85 3191.33 5965.51 3185.6 C 5929.69 3171.27 5941.15 3237.19 5938.28 3244.36 C 5938.28 3245.79 5921.09 3250.09 5906.75 3251.52 C 5903.89 3252.96 5905.32 3247.22 5903.89 3245.79 C 5893.86 3240.06 5882.39 3237.19 5872.36 3231.46 L 5870.93 3230.03 C 5866.63 3240.06 5862.33 3247.22 5859.46 3250.09 C 5858.03 3251.52 5813.6 3231.46 5802.13 3231.46 C 5797.83 3230.03 5800.7 3238.62 5797.83 3240.06 C 5782.07 3247.22 5763.44 3250.09 5747.67 3245.79 C 5744.81 3245.79 5723.31 3221.43 5726.18 3217.13 C 5733.34 3207.09 5746.24 3202.8 5756.27 3199.93 C 5767.74 3197.06 5789.23 3209.96 5789.23 3198.5 C 5790.67 3188.46 5767.74 3195.63 5756.27 3197.06 C 5749.11 3197.06 5743.37 3207.09 5736.21 3204.23 C 5706.11 3192.76 5741.94 3177 5750.54 3177 C 5764.87 3178.43 5789.23 3195.63 5806.43 3184.16 C 5823.63 3171.27 5756.27 3188.46 5747.67 3168.4 C 5744.81 3159.8 5780.64 3161.23 5773.47 3156.93 C 5764.87 3152.63 5751.97 3158.37 5744.81 3151.2 C 5721.88 3132.57 5756.27 3095.31 5777.77 3093.87 C 5793.53 3093.87 5813.6 3096.74 5822.2 3109.64 C 5826.5 3115.37 5813.6 3125.4 5817.9 3131.14 C 5822.2 3136.87 5819.33 3113.94 5825.06 3112.51 C 5832.23 3111.07 5835.1 3125.4 5842.26 3126.84 C 5847.99 3126.84 5830.8 3116.81 5833.66 3113.94 C 5840.83 3105.34 5875.22 3135.44 5901.02 3111.07 C 5905.32 3106.77 5893.86 3103.91 5888.12 3103.91 C 5837.96 3101.04 5912.49 3115.37 5870.93 3118.24 C 5863.76 3119.67 5819.33 3098.17 5799.27 3095.31 C 5792.1 3095.31 5786.37 3091.01 5779.2 3091.01 C 5770.6 3091.01 5754.84 3103.91 5753.41 3095.31 C 5751.97 3085.28 5774.9 3085.28 5777.77 3075.24 C 5780.64 3062.35 5751.97 3056.61 5751.97 3042.28 C 5751.97 3036.55 5766.3 3042.28 5769.17 3046.58 C 5773.47 3053.75 5773.47 3070.94 5782.07 3069.51 C 5790.67 3068.08 5772.04 3045.15 5780.64 3043.71 C 5792.1 3042.28 5797.83 3065.21 5809.3 3065.21 C 5817.9 3065.21 5815.03 3037.98 5820.76 3043.71 C 5827.93 3049.45 5817.9 3062.35 5817.9 3072.38 C 5817.9 3073.81 5815.03 3078.11 5816.47 3078.11 C 5825.06 3075.24 5820.76 3056.61 5829.36 3056.61 C 5833.66 3056.61 5830.8 3066.64 5835.1 3069.51 C 5843.7 3073.81 5858.03 3082.41 5862.33 3073.81 C 5865.19 3066.64 5843.7 3069.51 5839.4 3063.78 C 5832.23 3055.18 5829.36 3045.15 5829.36 3035.12 C 5827.93 3022.22 5849.43 3012.18 5862.33 3015.05 C 5868.06 3016.48 5865.19 3027.95 5868.06 3033.68 C 5872.36 3042.28 5879.52 3048.01 5882.39 3056.61 C 5882.39 3059.48 5875.22 3065.21 5878.09 3065.21 C 5882.39 3065.21 5883.82 3059.48 5883.82 3056.61 C 5878.09 3027.95 5846.56 3009.32 5896.72 3000.72 C 5913.92 2997.85 5916.79 3022.22 5916.79 3045.15 C 5918.22 3042.28 5919.65 3037.98 5922.52 3036.55 C 5931.12 3029.38 5955.48 3045.15 5952.62 3035.12 C 5949.75 3023.65 5929.69 3033.68 5919.65 3026.52 C 5912.49 3020.78 5915.35 3007.88 5909.62 3000.72 C 5902.46 2990.69 5863.76 2977.79 5858.03 2973.49 C 5856.59 2972.06 5862.33 2967.76 5866.63 2967.76 C 5872.36 2966.32 5879.52 2966.32 5885.26 2969.19 C 5888.12 2970.62 5886.69 2977.79 5889.56 2977.79 C 5893.86 2979.22 5911.05 2949.13 5931.12 2964.89 C 5936.85 2969.19 5928.25 2983.52 5935.42 2986.39 C 5941.15 2989.25 5932.55 2970.62 5938.28 2967.76 C 5948.32 2962.02 5969.81 2993.55 5969.81 2994.99 C 5978.41 2996.42 5995.61 2989.25 5991.31 2982.09 C 5987.01 2973.49 5969.81 2987.82 5962.65 2982.09 C 5952.62 2973.49 5972.68 2957.72 5988.45 2951.99 C 5976.98 2956.29 5966.95 2959.16 5956.92 2959.16 C 5870.93 2960.59 5946.88 2950.56 5944.02 2933.36 C 5942.58 2921.89 5923.95 2923.33 5916.79 2913.3 C 5906.75 2901.83 5911.05 2891.8 5949.75 2896.1 C 5958.35 2897.53 5958.35 2913.3 5966.95 2916.16 C 5972.68 2917.6 5976.98 2907.56 5982.71 2907.56 C 5991.31 2906.13 5998.48 2906.13 6007.08 2907.56 C 6005.64 2906.13 6004.21 2903.26 6002.78 2901.83 C 6001.34 2893.23 6012.81 2884.63 6021.41 2883.2 C 6025.71 2881.77 6021.41 2891.8 6024.27 2896.1 C 6028.57 2901.83 6038.61 2901.83 6041.47 2909 C 6044.34 2914.73 6035.74 2923.33 6041.47 2927.63 C 6048.64 2934.79 6067.27 2947.69 6073 2937.66 C 6077.3 2927.63 6050.07 2923.33 6048.64 2911.86 C 6048.64 2904.7 6064.4 2910.43 6070.14 2906.13 C 6073 2903.26 6060.1 2909 6057.24 2906.13 C 6055.8 2904.7 6065.84 2898.96 6062.97 2900.4 C 6055.8 2901.83 6050.07 2911.86 6044.34 2909 C 6034.31 2903.26 6031.44 2890.37 6028.57 2880.33 C 6025.71 2876.03 6035.74 2884.63 6040.04 2886.07 C 6044.34 2888.93 6025.71 2871.73 6040.04 2874.6 C 6041.47 2874.6 6098.8 2904.7 6093.07 2866 C 6087.33 2818.71 6047.2 2907.56 6055.8 2845.94 C 6057.24 2833.04 6091.63 2810.11 6101.67 2815.84 C 6110.26 2820.14 6100.23 2838.77 6107.4 2847.37 C 6110.26 2851.67 6114.56 2840.2 6118.86 2837.34 C 6126.03 2834.47 6146.09 2834.47 6140.36 2828.74 C 6136.06 2823.01 6116 2843.07 6117.43 2834.47 C 6117.43 2824.44 6133.19 2821.57 6140.36 2812.97 C 6148.96 2804.38 6148.96 2787.18 6160.42 2785.74 C 6169.02 2782.88 6164.72 2800.08 6169.02 2807.24 C 6171.89 2812.97 6181.92 2815.84 6181.92 2823.01 C 6181.92 2831.61 6169.02 2835.91 6170.46 2844.5 C 6171.89 2850.24 6179.06 2837.34 6184.79 2838.77 C 6193.39 2840.2 6203.42 2861.7 6207.72 2854.54 C 6212.02 2843.07 6190.52 2834.47 6191.95 2823.01 C 6191.95 2811.54 6250.71 2825.87 6252.15 2825.87 C 6262.18 2818.71 6263.61 2802.94 6262.18 2791.48 C 6260.75 2785.74 6243.55 2797.21 6244.98 2791.48 C 6249.28 2772.85 6308.04 2769.98 6305.17 2755.65 C 6303.74 2744.18 6269.35 2744.18 6276.51 2734.15 C 6282.24 2724.12 6308.04 2726.98 6309.47 2715.52 C 6313.77 2658.19 6262.18 2728.42 6250.71 2738.45 C 6244.98 2742.75 6227.78 2747.05 6232.08 2754.21 C 6237.82 2764.25 6255.01 2758.51 6265.05 2762.81 C 6266.48 2762.81 6262.18 2764.25 6260.75 2765.68 C 6253.58 2769.98 6244.98 2772.85 6237.82 2778.58 C 6230.65 2784.31 6194.82 2815.84 6183.36 2812.97 C 6176.19 2811.54 6179.06 2800.08 6176.19 2794.34 C 6173.32 2788.61 6163.29 2784.31 6166.16 2778.58 C 6170.46 2768.55 6184.79 2767.11 6193.39 2759.95 C 6194.82 2758.51 6187.66 2764.25 6184.79 2762.81 C 6181.92 2762.81 6189.09 2755.65 6187.66 2757.08 C 6177.62 2761.38 6161.86 2784.31 6147.53 2778.58 C 6126.03 2769.98 6157.56 2751.35 6173.32 2741.32 C 6181.92 2737.02 6193.39 2737.02 6199.12 2728.42 C 6203.42 2724.12 6186.22 2732.72 6180.49 2731.28 C 6177.62 2731.28 6179.06 2728.42 6179.06 2725.55 C 6180.49 2715.52 6179.06 2705.49 6184.79 2696.89 C 6187.65 2692.59 6196.25 2699.75 6200.55 2696.89 C 6203.42 2696.89 6194.82 2696.89 6194.82 2694.02 C 6194.82 2689.72 6196.25 2685.42 6197.69 2681.12 C 6201.99 2676.82 6212.02 2686.86 6214.89 2681.12 C 6217.75 2676.82 6213.45 2668.22 6217.75 2662.49 C 6222.05 2656.76 6234.95 2658.19 6237.82 2649.59 C 6239.25 2643.86 6219.18 2636.69 6224.92 2635.26 C 6234.95 2632.4 6243.55 2649.59 6253.58 2646.73 C 6260.75 2645.29 6242.12 2638.13 6237.82 2630.96 C 6230.65 2620.93 6252.15 2609.46 6263.61 2602.3 C 6275.08 2595.13 6279.38 2628.1 6293.71 2633.83 C 6302.31 2636.69 6313.77 2633.83 6319.51 2626.66 C 6322.37 2622.36 6299.44 2626.66 6302.31 2620.93 C 6306.61 2612.33 6325.24 2613.76 6329.54 2605.17 C 6336.7 2585.1 6285.11 2638.13 6298.01 2583.67 C 6299.44 2575.07 6302.31 2569.34 6303.74 2566.47 C 6298.01 2570.77 6292.28 2575.07 6285.11 2577.94 C 6263.61 2587.97 6325.24 2550.7 6320.94 2544.97 C 6319.51 2542.11 6316.64 2542.11 6312.34 2543.54 L 6312.34 2542.11 C 6312.34 2539.24 6302.31 2542.11 6303.74 2539.24 C 6308.04 2529.21 6352.47 2532.07 6359.63 2529.21 C 6362.5 2526.34 6356.77 2519.18 6359.63 2516.31 C 6381.13 2496.24 6409.8 2509.14 6416.96 2467.58 C 6416.96 2460.42 6405.5 2474.75 6399.76 2477.61 C 6392.6 2479.05 6385.43 2477.61 6378.27 2477.61 C 6372.53 2479.05 6362.5 2487.65 6362.5 2481.91 C 6365.37 2463.28 6416.96 2463.28 6402.63 2438.92 C 6401.2 2434.62 6388.3 2437.48 6378.27 2437.48 C 6379.7 2440.35 6382.57 2443.22 6385.43 2448.95 C 6378.27 2456.12 6372.53 2464.72 6365.37 2471.88 C 6362.5 2473.31 6356.77 2481.91 6355.34 2477.61 C 6353.9 2470.45 6353.9 2430.32 6365.37 2428.89 C 6365.37 2424.59 6365.37 2421.72 6368.23 2415.99 C 6372.53 2404.52 6391.16 2410.25 6401.2 2404.52 C 6404.06 2403.09 6394.03 2404.52 6392.6 2403.09 C 6388.3 2397.36 6384 2390.19 6382.57 2384.46 C 6381.13 2375.86 6394.03 2342.9 6402.63 2342.9 C 6414.1 2341.46 6419.83 2360.09 6431.29 2362.96 C 6435.59 2364.39 6426.99 2352.93 6425.56 2347.2 C 6422.69 2340.03 6424.13 2327.13 6416.96 2322.83 C 6409.8 2318.53 6396.9 2330 6389.73 2324.26 C 6366.8 2305.63 6414.1 2312.8 6421.26 2309.93 C 6434.16 2304.2 6435.59 2285.57 6455.66 2289.87 C 6464.26 2292.74 6468.56 2304.2 6477.15 2304.2 C 6484.32 2304.2 6465.69 2295.6 6464.26 2289.87 L 6464.26 2288.44 C 6462.82 2288.44 6461.39 2289.87 6459.96 2289.87 C 6457.09 2289.87 6459.96 2281.27 6457.09 2279.84 C 6442.76 2276.97 6432.73 2302.77 6416.96 2301.33 C 6366.8 2294.17 6444.19 2284.14 6452.79 2276.97 C 6455.66 2275.54 6447.06 2275.54 6442.76 2275.54 C 6432.73 2274.1 6424.13 2278.4 6414.1 2276.97 C 6401.2 2274.1 6405.5 2251.17 6408.36 2239.71 C 6418.39 2186.68 6439.89 2209.61 6475.72 2195.28 C 6495.79 2186.68 6452.79 2172.35 6447.06 2162.32 C 6444.19 2156.58 6459.96 2160.88 6465.69 2158.02 C 6471.42 2155.15 6441.33 2133.65 6477.15 2145.12 C 6480.02 2145.12 6472.86 2150.85 6472.86 2153.72 C 6474.29 2173.78 6481.45 2143.69 6481.45 2140.82 C 6481.45 2139.39 6484.32 2132.22 6485.75 2135.09 C 6490.05 2139.39 6484.32 2152.28 6491.49 2153.72 C 6502.95 2155.15 6518.72 2149.42 6521.58 2139.39 C 6525.88 2129.35 6505.82 2125.05 6504.38 2115.02 C 6504.38 2113.59 6538.78 2093.53 6550.25 2099.26 C 6557.41 2102.12 6543.08 2125.05 6551.68 2123.62 C 6560.28 2123.62 6550.25 2103.56 6557.41 2099.26 C 6558.84 2097.82 6558.84 2097.82 6560.28 2096.39 C 6558.84 2094.96 6557.41 2093.53 6555.98 2092.09 C 6551.68 2089.23 6564.58 2080.63 6560.28 2079.19 C 6555.98 2077.76 6553.11 2087.79 6547.38 2090.66 C 6533.05 2096.39 6515.85 2107.86 6501.52 2099.26 C 6495.79 2094.96 6512.98 2086.36 6517.28 2079.19 C 6525.88 2060.56 6528.75 2017.57 6550.25 2033.33 C 6557.41 2039.06 6528.75 2047.66 6535.91 2053.4 C 6541.65 2059.13 6550.25 2043.36 6560.28 2041.93 C 6567.44 2041.93 6574.61 2044.8 6580.34 2050.53 C 6588.94 2059.13 6604.71 2090.66 6600.41 2079.19 C 6597.54 2069.16 6583.21 2060.56 6586.08 2049.1 C 6587.51 2039.06 6604.71 2037.63 6610.44 2029.03 C 6613.31 2024.73 6601.84 2031.9 6597.54 2033.33 C 6576.04 2040.5 6568.88 2050.53 6558.84 2023.3 C 6553.11 2008.97 6566.01 2017.57 6567.44 2010.4 C 6568.88 2008.97 6563.14 2011.83 6563.14 2010.4 C 6558.84 1997.5 6598.97 2017.57 6604.71 2010.4 C 6614.74 1993.2 6570.31 1978.87 6567.44 1978.87 C 6564.58 1978.87 6570.31 1984.6 6568.88 1987.47 C 6564.58 1996.07 6540.21 2026.17 6531.61 2021.87 C 6521.58 2017.57 6520.15 2001.8 6524.45 1991.77 C 6527.32 1983.17 6541.65 1988.9 6547.38 1983.17 C 6551.68 1978.87 6534.48 1988.9 6531.61 1984.6 C 6525.88 1976.01 6550.25 1970.27 6557.41 1976.01 C 6560.28 1977.44 6554.55 1984.6 6555.98 1983.17 C 6578.91 1960.24 6616.17 1974.57 6613.31 1943.04 C 6613.31 1938.74 6604.71 1947.34 6600.41 1944.48 C 6597.54 1943.04 6601.84 1937.31 6598.97 1935.88 C 6597.54 1934.44 6597.54 1941.61 6596.11 1941.61 C 6590.37 1944.48 6586.08 1943.04 6581.78 1943.04 C 6573.18 1944.48 6561.71 1951.64 6558.84 1944.48 C 6540.21 1907.21 6596.11 1933.01 6597.54 1933.01 C 6606.14 1925.84 6598.97 1910.08 6603.27 1900.05 C 6604.71 1895.75 6607.57 1910.08 6609.01 1915.81 C 6610.44 1917.25 6614.74 1914.38 6614.74 1915.81 C 6614.74 1924.41 6609.01 1933.01 6611.87 1940.18 C 6611.87 1943.04 6643.4 1988.9 6650.57 1980.31 C 6667.77 1960.24 6596.11 1897.18 6617.6 1887.15 C 6624.77 1882.85 6639.1 1894.32 6650.57 1904.35 C 6649.13 1900.05 6649.13 1895.75 6646.27 1892.88 C 6639.1 1887.15 6617.6 1890.02 6620.47 1879.98 C 6621.9 1868.52 6640.54 1869.95 6652 1868.52 C 6713.63 1858.49 6662.03 1888.58 6700.73 1907.21 C 6727.96 1920.11 6669.2 1862.79 6695 1862.79 C 6702.16 1862.79 6706.46 1871.38 6712.19 1871.38 C 6720.79 1869.95 6733.69 1869.95 6732.26 1862.79 C 6723.66 1802.59 6687.83 1862.79 6673.5 1859.92 C 6670.63 1858.49 6679.23 1855.62 6677.8 1852.75 C 6677.8 1849.89 6673.5 1845.59 6670.63 1847.02 C 6666.33 1848.45 6666.33 1857.05 6660.6 1857.05 C 6652 1858.49 6637.67 1859.92 6633.37 1851.32 C 6630.5 1845.59 6631.94 1838.42 6634.8 1832.69 C 6627.64 1834.12 6619.04 1835.56 6614.74 1839.85 C 6607.57 1847.02 6614.74 1865.65 6606.14 1871.38 C 6600.41 1875.68 6606.14 1854.19 6600.41 1849.89 C 6593.24 1845.59 6584.64 1847.02 6577.48 1848.45 C 6571.74 1849.89 6574.61 1861.35 6570.31 1865.65 C 6566.01 1869.95 6560.28 1874.25 6555.98 1878.55 C 6550.25 1884.28 6545.95 1890.02 6541.65 1895.75 L 6541.65 1890.02 C 6545.95 1879.98 6554.55 1869.95 6555.98 1859.92 C 6557.41 1854.19 6550.25 1847.02 6553.11 1841.29 C 6560.28 1834.12 6574.61 1836.99 6581.78 1829.82 C 6611.87 1801.16 6534.48 1809.76 6576.04 1765.33 C 6606.14 1730.93 6600.41 1795.43 6593.24 1826.96 C 6596.11 1821.22 6600.41 1816.92 6604.71 1815.49 C 6607.57 1814.06 6610.44 1824.09 6611.87 1821.22 C 6616.17 1814.06 6609 1745.27 6633.37 1778.23 C 6646.27 1795.43 6650.57 1808.33 6650.57 1815.49 C 6656.3 1812.62 6660.6 1809.76 6664.9 1809.76 C 6670.63 1809.76 6673.5 1821.22 6679.23 1821.22 C 6690.7 1822.66 6703.59 1819.79 6713.63 1814.06 C 6727.96 1805.46 6683.53 1816.92 6680.66 1798.29 C 6680.66 1792.56 6687.83 1785.39 6695 1785.39 L 6697.86 1785.39 C 6696.43 1783.96 6695 1783.96 6695 1781.1 C 6695 1772.5 6712.19 1775.36 6719.36 1769.63 C 6720.79 1768.2 6713.63 1768.2 6712.19 1766.76 C 6702.16 1759.6 6697.86 1743.83 6700.73 1730.93 C 6702.16 1719.47 6730.82 1729.5 6733.69 1718.04 C 6736.56 1709.44 6729.39 1700.84 6726.53 1692.24 C 6726.53 1702.27 6725.09 1708 6723.66 1709.44 C 6713.63 1709.44 6703.59 1700.84 6695 1706.57 C 6680.66 1712.3 6677.8 1730.93 6669.2 1743.83 C 6662.03 1739.53 6649.13 1739.53 6649.13 1732.37 C 6652 1720.9 6670.63 1719.47 6673.5 1708 C 6676.36 1702.27 6657.73 1715.17 6656.3 1709.44 C 6653.43 1700.84 6669.2 1693.67 6667.77 1683.64 C 6667.77 1677.91 6647.7 1685.07 6652 1682.21 C 6672.07 1672.17 6705.03 1680.77 6690.7 1662.14 C 6684.96 1656.41 6663.47 1659.28 6669.2 1654.98 C 6676.36 1650.68 6687.83 1663.58 6696.43 1659.28 C 6705.03 1653.54 6700.73 1634.91 6709.33 1632.05 C 6723.66 1627.75 6726.53 1654.98 6727.96 1677.91 C 6727.96 1669.31 6730.82 1662.14 6733.69 1654.98 C 6740.86 1643.51 6743.72 1683.64 6753.76 1689.37 C 6763.79 1695.11 6776.69 1689.37 6786.72 1685.07 C 6788.15 1685.07 6743.72 1669.31 6746.59 1659.28 C 6749.46 1649.24 6759.49 1636.35 6769.52 1637.78 C 6779.55 1637.78 6778.12 1656.41 6785.29 1663.58 C 6792.45 1670.74 6802.48 1669.31 6811.08 1676.47 C 6815.38 1680.77 6819.68 1699.4 6822.55 1693.67 C 6834.01 1659.28 6749.46 1667.87 6780.99 1600.52 C 6786.72 1589.05 6811.08 1574.72 6822.55 1583.32 C 6832.58 1589.05 6819.68 1656.41 6819.68 1659.28 C 6822.55 1662.14 6826.85 1654.98 6828.28 1650.68 C 6829.71 1642.08 6822.55 1630.61 6828.28 1623.45 C 6832.58 1616.28 6851.21 1627.75 6852.64 1619.15 C 6852.64 1610.55 6832.58 1611.98 6829.71 1603.38 C 6826.85 1596.22 6841.18 1534.59 6862.68 1560.39 C 6868.41 1568.99 6862.68 1649.24 6862.68 1652.11 C 6859.81 1662.14 6841.18 1679.34 6851.21 1682.21 C 6877.01 1690.81 6864.11 1640.64 6872.71 1634.91 C 6881.31 1629.18 6894.21 1634.91 6902.8 1630.61 C 6907.1 1627.75 6895.64 1624.88 6892.77 1622.01 C 6882.74 1613.41 6861.24 1601.95 6869.84 1581.89 C 6907.1 1498.76 6869.84 1593.35 6912.84 1564.69 C 6924.3 1557.52 6912.84 1536.02 6921.44 1525.99 C 6924.3 1523.13 6928.6 1527.42 6931.47 1530.29 C 6934.33 1533.16 6932.9 1538.89 6935.77 1541.76 C 6942.93 1547.49 6951.53 1548.92 6958.7 1554.65 C 6964.43 1558.95 6968.73 1567.55 6975.9 1570.42 C 6983.06 1571.85 6963 1560.39 6960.13 1553.22 C 6960.13 1551.79 6965.86 1551.79 6965.86 1548.92 C 6968.73 1528.86 6964.43 1498.76 6961.56 1500.19 C 6954.4 1500.19 6912.84 1536.02 6901.37 1494.46 C 6895.64 1471.53 6937.2 1461.5 6948.67 1464.37 C 6958.7 1465.8 6964.43 1478.7 6974.46 1481.56 C 6977.33 1481.56 6973.03 1472.96 6975.9 1471.53 C 6978.76 1468.66 6984.5 1471.53 6987.36 1472.96 C 6995.96 1472.96 7005.99 1471.53 7013.16 1474.4 C 7031.79 1480.13 7007.43 1521.69 7046.12 1518.83 C 7053.29 1517.39 7057.59 1507.36 7056.15 1500.19 C 7056.15 1495.9 7047.55 1501.63 7043.26 1500.19 C 7038.96 1498.76 7031.79 1497.33 7031.79 1493.03 C 7031.79 1487.3 7048.99 1490.16 7043.26 1480.13 C 7037.52 1471.53 7036.09 1462.93 7041.82 1435.7 L 7041.82 1432.84 C 7038.96 1438.57 7034.66 1444.3 7030.36 1451.47 C 7023.19 1444.3 7010.29 1440 7007.43 1431.4 C 7000.26 1405.61 7086.25 1343.98 7053.29 1412.77 C 7066.19 1401.31 7084.82 1414.2 7089.12 1409.91 C 7096.28 1405.61 7073.35 1405.61 7070.49 1398.44 C 7060.45 1374.08 7103.45 1378.38 7106.31 1374.08 C 7112.05 1361.18 7067.62 1345.41 7067.62 1341.11 C 7069.05 1332.51 7089.12 1352.58 7091.98 1345.41 C 7097.72 1335.38 7079.08 1323.92 7081.95 1312.45 C 7086.25 1300.98 7165.07 1308.15 7166.51 1312.45 C 7169.37 1316.75 7130.68 1386.97 7132.11 1391.27 C 7132.11 1392.71 7133.54 1392.71 7134.98 1392.71 C 7132.11 1392.71 7130.68 1392.71 7130.68 1394.14 C 7133.54 1398.44 7142.14 1391.27 7146.44 1394.14 C 7165.07 1407.04 7122.08 1412.77 7146.44 1419.94 C 7155.04 1422.8 7140.71 1435.7 7139.28 1444.3 C 7139.28 1447.17 7136.41 1488.73 7160.77 1464.37 C 7165.07 1460.07 7160.77 1451.47 7162.21 1445.73 C 7163.64 1437.14 7167.94 1431.4 7170.81 1424.24 C 7173.67 1415.64 7157.91 1425.67 7162.21 1412.77 C 7170.81 1388.41 7193.74 1293.82 7209.5 1285.22 C 7209.5 1285.22 7219.53 1322.48 7219.53 1325.35 C 7216.67 1333.95 7202.34 1338.25 7203.77 1348.28 C 7205.2 1354.01 7218.1 1338.25 7222.4 1343.98 C 7228.13 1351.15 7216.67 1369.78 7225.27 1374.08 C 7235.3 1381.24 7249.63 1374.08 7258.23 1366.91 C 7263.96 1361.18 7245.33 1356.88 7245.33 1349.71 C 7245.33 1339.68 7241.03 1326.78 7246.76 1318.18 C 7251.06 1308.15 7265.4 1306.72 7272.56 1298.12 C 7275.43 1295.25 7265.4 1298.12 7262.53 1296.69 C 7252.5 1292.39 7235.3 1289.52 7235.3 1278.05 C 7233.87 1269.45 7256.8 1279.49 7261.1 1272.32 C 7266.83 1262.29 7253.93 1250.82 7256.8 1240.79 C 7258.23 1233.63 7268.26 1255.12 7275.43 1250.82 C 7286.89 1246.52 7295.49 1236.49 7318.42 1252.26 C 7335.62 1263.72 7288.33 1325.35 7284.03 1333.95 C 7282.59 1336.81 7292.63 1329.65 7294.06 1326.78 C 7302.66 1319.62 7306.96 1303.85 7316.99 1300.98 C 7324.16 1299.55 7319.86 1313.88 7318.42 1321.05 C 7314.12 1331.08 7296.93 1341.11 7302.66 1351.15 C 7308.39 1359.74 7322.72 1333.95 7331.32 1339.68 C 7332.75 1341.11 7334.19 1342.55 7334.19 1343.98 C 7337.05 1342.55 7342.79 1346.85 7345.65 1345.41 C 7354.25 1336.81 7332.75 1329.65 7332.75 1329.65 C 7331.32 1323.92 7329.89 1275.19 7335.62 1266.59 C 7361.42 1233.63 7378.62 1296.69 7380.05 1296.69 C 7473.2 1300.98 7332.75 1240.79 7424.48 1269.45 C 7471.77 1283.79 7437.38 1285.22 7430.21 1303.85 C 7428.78 1306.72 7437.38 1305.28 7440.24 1303.85 C 7448.84 1300.98 7456.01 1293.82 7464.61 1292.39 C 7467.47 1292.39 7464.61 1298.12 7466.04 1299.55 C 7470.34 1302.42 7476.07 1302.42 7480.37 1303.85 C 7481.8 1305.28 7483.24 1308.15 7486.1 1309.58 C 7493.27 1315.32 7504.73 1319.62 7510.47 1328.21 C 7511.9 1331.08 7504.73 1331.08 7501.87 1333.95 C 7494.7 1338.25 7484.67 1339.68 7480.37 1346.85 C 7471.77 1358.31 7478.94 1378.38 7467.47 1384.11 C 7435.94 1399.87 7397.25 1378.38 7371.45 1407.04 C 7367.15 1409.91 7380.05 1402.74 7385.78 1402.74 C 7392.95 1402.74 7398.68 1404.17 7405.85 1405.61 C 7407.28 1407.04 7408.71 1408.47 7410.15 1408.47 C 7421.61 1409.91 7437.38 1401.31 7444.54 1411.34 C 7450.27 1418.5 7427.34 1428.54 7431.64 1437.14 C 7435.94 1444.3 7441.68 1417.07 7450.27 1418.5 C 7460.31 1421.37 7457.44 1444.3 7453.14 1458.63 C 7454.57 1455.77 7456.01 1454.33 7457.44 1452.9 C 7467.47 1448.6 7481.8 1455.77 7493.27 1451.47 C 7496.14 1450.03 7484.67 1445.73 7484.67 1441.43 C 7483.24 1431.4 7484.67 1422.8 7487.54 1414.2 C 7488.97 1411.34 7486.1 1422.8 7490.4 1422.8 C 7501.87 1425.67 7513.33 1422.8 7524.8 1421.37 L 7529.1 1421.37 M 6914.27 1716.6 L 6915.7 1716.6 L 6914.27 1716.6 M 7175.11 1278.05 C 7176.54 1289.52 7156.48 1292.39 7149.31 1300.98 C 7091.98 1245.09 7169.37 1245.09 7175.11 1278.05 M 6957.27 1389.84 C 6963 1389.84 6965.86 1399.87 6970.16 1397.01 C 6975.9 1392.71 6960.13 1376.94 6965.86 1378.38 C 6968.73 1379.81 6968.73 1386.97 6973.03 1386.97 C 6975.9 1385.54 6970.16 1378.38 6973.03 1376.94 C 6985.93 1371.21 6980.2 1407.04 6993.09 1388.41 C 6995.96 1385.54 6985.93 1379.81 6988.79 1376.94 C 6997.39 1365.48 7011.73 1361.18 7024.62 1352.58 C 7024.62 1354.01 7023.19 1354.01 7023.19 1354.01 C 7023.19 1355.44 7028.92 1355.44 7028.92 1356.88 C 7027.49 1362.61 7021.76 1368.34 7018.89 1374.08 C 7007.43 1405.61 6991.66 1418.5 6957.27 1424.24 C 6960.13 1415.64 6970.16 1405.61 6965.86 1397.01 C 6964.43 1395.57 6961.56 1394.14 6958.7 1394.14 C 6958.7 1392.71 6955.83 1389.84 6957.27 1389.84 M 6947.23 1395.57 L 6941.5 1395.57 C 6938.63 1394.14 6941.5 1395.57 6947.23 1395.57 M 6861.24 1497.33 C 6864.11 1491.6 6872.71 1488.73 6879.87 1485.86 C 6881.31 1484.43 6885.61 1485.86 6884.17 1487.3 C 6879.87 1498.76 6872.71 1508.79 6866.98 1518.83 C 6865.54 1511.66 6858.38 1504.49 6861.24 1497.33 M 6834.01 1533.16 L 6835.45 1536.02 C 6835.45 1537.46 6834.01 1538.89 6834.01 1540.32 C 6834.01 1537.46 6832.58 1536.02 6834.01 1533.16 M 6758.06 1560.39 C 6769.52 1528.86 6884.17 1536.02 6785.29 1581.89 C 6778.12 1573.29 6755.19 1570.42 6758.06 1560.39 M 6558.84 1793.99 C 6561.71 1796.86 6553.11 1799.73 6554.55 1804.03 C 6557.41 1819.79 6594.67 1818.36 6543.08 1839.85 C 6537.35 1841.29 6531.61 1834.12 6524.45 1831.26 C 6561.71 1801.16 6540.21 1796.86 6540.21 1805.46 C 6541.65 1822.66 6523.02 1811.19 6514.42 1816.92 C 6507.25 1819.79 6501.52 1844.15 6500.09 1835.56 C 6495.79 1811.19 6533.05 1769.63 6558.84 1793.99 M 6444.19 1924.41 C 6447.06 1915.81 6441.33 1900.05 6449.92 1898.61 C 6502.95 1888.58 6455.66 1938.74 6438.46 1943.04 C 6438.46 1941.61 6435.59 1941.61 6435.59 1940.18 C 6438.46 1934.44 6442.76 1930.14 6444.19 1924.41 M 6090.2 2742.75 C 6097.37 2744.18 6093.07 2754.21 6094.5 2761.38 C 6093.07 2762.81 6090.2 2764.25 6088.77 2764.25 C 6083.03 2765.68 6075.87 2765.68 6070.14 2767.11 C 6009.94 2775.71 6088.77 2741.32 6090.2 2742.75 M 5823.63 3010.75 C 5829.36 3007.88 5836.53 3010.75 5843.7 3012.18 C 5843.7 3010.75 5843.7 3009.32 5845.13 3009.32 C 5845.13 3007.88 5846.56 3010.75 5846.56 3012.18 C 5845.13 3013.62 5843.7 3013.62 5842.26 3015.05 L 5843.7 3013.62 C 5837.96 3016.48 5832.23 3023.65 5826.5 3023.65 C 5822.2 3023.65 5820.76 3013.62 5823.63 3010.75 M 5730.48 3561.09 L 5733.34 3558.22 C 5736.21 3572.55 5741.94 3588.32 5734.77 3602.65 C 5719.01 3631.31 5727.61 3578.28 5730.48 3561.09 M 5753.41 3455.03 L 5753.41 3453.6 L 5753.41 3452.17 C 5756.27 3455.03 5760.57 3456.47 5760.57 3459.33 C 5769.17 3520.96 5737.64 3476.53 5750.54 3456.47 C 5750.54 3456.47 5750.54 3457.9 5749.11 3459.33 C 5750.54 3457.9 5753.41 3456.47 5753.41 3455.03 M 6303.74 2546.41 C 6298.01 2547.84 6293.71 2549.27 6289.41 2549.27 C 6279.38 2547.84 6292.28 2547.84 6303.74 2546.41 M 7145.01 1391.27 C 7142.14 1392.71 7137.84 1392.71 7134.98 1392.71 C 7139.28 1392.71 7147.88 1389.84 7145.01 1391.27 M 6902.8 1713.74 L 6904.24 1713.74 L 6902.8 1713.74 M 6907.1 1715.17 L 6909.97 1715.17 L 6907.1 1715.17 M 6911.4 1715.17 C 6911.4 1716.6 6911.4 1716.6 6912.84 1716.6 C 6911.4 1716.6 6911.4 1716.6 6911.4 1715.17 " }
+ }
+ }
+ // PATH visit ua count: 886
+ DemoShape {
+ objectName: "ua"
+ ShapePath {
+ objectName: "svg_path:ua"
+ // boundingRect: 7693.24, 4446.56 2146.03x1480.63
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 9710.38 5187.73 L 9710.38 5186.3 C 9698.91 5173.4 9706.08 5169.1 9708.94 5156.2 C 9711.81 5140.44 9691.75 5160.5 9691.75 5151.9 C 9693.18 5141.87 9684.58 5107.47 9688.88 5098.87 C 9690.31 5098.87 9731.87 5060.18 9731.87 5060.18 C 9734.74 5054.45 9727.57 5047.28 9727.57 5041.55 C 9726.14 5035.81 9724.71 5028.65 9729.01 5022.92 C 9750.51 4997.12 9817.86 5008.58 9837.93 4978.49 C 9842.23 4972.76 9835.06 4964.16 9832.2 4956.99 C 9830.76 4954.12 9825.03 4952.69 9825.03 4949.82 C 9825.03 4945.53 9833.63 4945.53 9833.63 4942.66 C 9833.63 4938.36 9827.9 4935.49 9826.46 4931.19 C 9825.03 4924.03 9826.46 4915.43 9827.9 4906.83 C 9827.9 4903.96 9832.2 4901.1 9832.2 4898.23 C 9837.93 4881.03 9812.13 4896.8 9812.13 4896.8 C 9807.83 4893.93 9816.43 4886.77 9815 4881.03 C 9809.26 4871 9800.67 4860.97 9793.5 4852.37 C 9783.47 4842.34 9767.7 4866.7 9766.27 4850.94 C 9759.1 4805.07 9763.4 4817.97 9789.2 4806.51 C 9790.63 4805.07 9802.1 4780.71 9793.5 4783.58 C 9773.44 4787.88 9763.4 4802.21 9746.21 4787.88 C 9727.57 4772.11 9760.54 4767.81 9764.84 4760.65 C 9769.14 4756.35 9763.4 4749.18 9764.84 4744.88 C 9769.14 4726.25 9786.33 4716.22 9769.14 4697.59 C 9763.4 4690.42 9753.37 4688.99 9747.64 4683.26 C 9740.47 4674.66 9757.67 4656.03 9746.21 4654.59 C 9718.98 4653.16 9736.17 4676.09 9714.68 4680.39 C 9641.58 4691.85 9733.31 4670.36 9674.55 4660.32 C 9655.92 4657.46 9654.48 4678.96 9638.72 4668.92 C 9632.99 4666.06 9628.69 4658.89 9624.39 4654.59 C 9611.49 4645.99 9617.22 4678.96 9601.46 4678.96 C 9591.42 4678.96 9581.39 4676.09 9571.36 4671.79 C 9567.06 4668.92 9564.19 4658.89 9558.46 4660.32 C 9551.29 4660.32 9548.43 4674.66 9539.83 4674.66 C 9529.8 4674.66 9522.63 4664.62 9511.17 4663.19 C 9473.9 4657.46 9529.8 4713.35 9491.1 4706.19 C 9481.07 4704.75 9478.2 4691.85 9469.6 4687.56 C 9463.87 4684.69 9455.27 4688.99 9448.11 4686.12 C 9426.61 4678.96 9410.84 4651.73 9392.21 4637.39 C 9386.48 4633.09 9333.45 4687.56 9314.82 4713.35 C 9309.09 4721.95 9294.76 4706.19 9284.73 4704.75 C 9278.99 4704.75 9278.99 4713.35 9274.69 4716.22 C 9267.53 4720.52 9261.8 4703.32 9253.2 4700.45 C 9218.8 4691.85 9211.63 4742.02 9187.27 4729.12 C 9177.24 4724.82 9168.64 4719.08 9161.47 4711.92 C 9155.74 4706.19 9150.01 4699.02 9148.58 4690.42 C 9148.58 4686.12 9157.17 4684.69 9155.74 4680.39 C 9155.74 4674.66 9118.48 4641.69 9117.05 4637.39 C 9115.61 4633.09 9124.21 4625.93 9121.35 4623.06 C 9119.91 4621.63 9117.05 4621.63 9115.61 4621.63 C 9109.88 4623.06 9105.58 4627.36 9099.85 4627.36 C 9089.82 4628.8 9088.38 4611.6 9082.65 4604.43 C 9081.22 4601.57 9078.35 4601.57 9075.48 4603 C 9069.75 4605.86 9039.65 4624.5 9033.92 4624.5 C 9031.06 4625.93 9031.06 4617.33 9026.76 4617.33 C 9016.72 4617.33 9006.69 4618.76 8998.09 4621.63 C 8995.23 4623.06 8986.63 4643.13 8979.46 4628.8 C 8978.03 4625.93 8983.76 4623.06 8983.76 4620.2 C 8985.19 4615.9 8985.19 4610.16 8982.33 4607.3 C 8978.03 4603 8972.3 4605.86 8968 4601.57 C 8960.83 4597.27 8969.43 4582.93 8963.7 4577.2 C 8957.96 4570.04 8937.9 4565.74 8942.2 4557.14 C 8947.93 4549.97 8980.9 4542.81 8972.3 4529.91 C 8960.83 4512.71 8933.6 4514.14 8925 4506.98 C 8919.27 4502.68 8914.97 4496.94 8913.54 4491.21 C 8910.67 4485.48 8914.97 4478.31 8912.1 4475.45 C 8906.37 4469.71 8897.77 4469.71 8892.04 4465.41 C 8883.44 4459.68 8879.14 4448.22 8869.11 4446.78 C 8857.64 4443.92 8853.34 4469.71 8840.44 4469.71 C 8836.15 4469.71 8837.58 4459.68 8833.28 4459.68 C 8777.39 4455.38 8811.78 4486.91 8778.82 4501.24 C 8778.82 4501.24 8717.19 4505.54 8715.76 4505.54 C 8712.89 4505.54 8722.93 4548.54 8710.03 4561.44 C 8701.43 4568.6 8691.4 4575.77 8679.93 4577.2 C 8675.63 4577.2 8677.06 4568.6 8672.76 4565.74 C 8669.9 4564.3 8665.6 4571.47 8662.73 4570.04 C 8646.97 4574.33 8628.34 4572.9 8615.44 4581.5 C 8609.7 4584.37 8612.57 4594.4 8606.84 4597.27 C 8598.24 4601.57 8586.77 4597.27 8576.74 4600.13 C 8571.01 4601.57 8560.98 4615.9 8553.81 4656.03 C 8552.38 4666.06 8549.51 4693.29 8549.51 4704.75 C 8549.51 4720.52 8606.84 4759.21 8571.01 4766.38 C 8533.75 4774.98 8550.95 4739.15 8517.98 4736.28 C 8452.06 4731.98 8530.88 4747.75 8483.59 4756.35 C 8476.42 4757.78 8469.25 4747.75 8460.66 4749.18 C 8437.73 4754.91 8450.62 4779.28 8430.56 4785.01 C 8419.09 4787.88 8407.63 4747.75 8396.16 4742.02 C 8384.7 4736.28 8371.8 4756.35 8363.2 4767.81 C 8357.47 4774.98 8368.93 4796.48 8360.33 4795.04 C 8330.24 4787.88 8374.67 4796.48 8337.4 4770.68 C 8317.34 4756.35 8324.51 4785.01 8311.61 4785.01 C 8275.78 4785.01 8307.31 4772.11 8294.41 4763.51 C 8285.81 4759.21 8285.81 4780.71 8280.08 4786.44 C 8271.48 4796.48 8258.58 4783.58 8251.41 4785.01 C 8244.25 4785.01 8251.41 4810.81 8244.25 4815.11 C 8242.81 4817.97 8238.52 4813.67 8235.65 4810.81 C 8217.02 4800.78 8268.61 4776.41 8211.28 4792.18 C 8194.09 4796.48 8219.88 4819.41 8184.05 4805.07 C 8179.76 4803.64 8188.35 4795.04 8185.49 4792.18 C 8182.62 4789.31 8176.89 4796.48 8174.02 4795.04 C 8165.42 4787.88 8176.89 4773.55 8161.12 4777.84 C 8128.16 4786.44 8083.73 4790.74 8047.9 4786.44 C 8043.6 4785.01 8042.17 4779.28 8037.87 4779.28 C 8017.81 4777.84 7997.74 4790.74 7976.25 4793.61 C 7969.08 4793.61 7961.91 4793.61 7954.75 4793.61 C 7947.58 4793.61 7940.42 4790.74 7933.25 4792.18 C 7914.62 4797.91 7901.72 4812.24 7884.52 4819.41 C 7873.06 4823.71 7858.73 4820.84 7847.26 4826.57 C 7841.53 4830.87 7821.46 4898.23 7807.13 4893.93 C 7802.83 4892.5 7802.83 4885.33 7799.97 4885.33 C 7791.37 4883.9 7781.34 4883.9 7774.17 4886.77 C 7751.24 4893.93 7785.63 4906.83 7768.44 4911.13 L 7767 4912.56 C 7767 4912.56 7767 4911.13 7767 4911.13 C 7771.3 4916.86 7777.04 4921.16 7779.9 4926.89 C 7782.77 4935.49 7777.04 4945.52 7779.9 4952.69 C 7792.8 4979.92 7834.36 5007.15 7857.29 5024.35 C 7861.59 5028.65 7828.63 5027.22 7835.8 5041.55 C 7837.23 5042.98 7865.89 5068.78 7865.89 5080.24 C 7861.59 5131.84 7845.83 5100.31 7820.03 5121.8 C 7808.57 5131.84 7721.14 5293.78 7725.44 5305.25 C 7728.31 5321.01 7742.64 5332.48 7746.94 5346.81 C 7748.37 5353.98 7736.91 5364.01 7742.64 5369.74 C 7767 5399.84 7752.67 5342.51 7769.87 5396.97 C 7771.3 5399.84 7765.57 5392.67 7762.7 5391.24 C 7755.54 5389.81 7748.37 5392.67 7741.21 5392.67 C 7736.91 5391.24 7731.17 5391.24 7726.88 5389.81 C 7728.31 5404.14 7718.28 5424.2 7716.84 5438.53 C 7715.41 5448.57 7716.84 5458.6 7712.54 5467.2 C 7708.24 5477.23 7695.35 5480.1 7693.91 5490.13 C 7691.05 5500.16 7698.21 5510.19 7698.21 5521.66 C 7731.17 5523.09 7709.68 5538.86 7732.61 5547.45 C 7736.91 5548.89 7742.64 5541.72 7746.94 5544.59 C 7755.54 5550.32 7756.97 5564.65 7765.57 5570.39 C 7771.3 5571.82 7775.6 5564.65 7781.34 5563.22 C 7785.63 5563.22 7789.93 5566.09 7792.8 5567.52 C 7811.43 5580.42 7788.5 5577.55 7805.7 5591.88 C 7810 5594.75 7818.6 5589.02 7828.63 5561.79 C 7830.06 5558.92 7830.06 5554.62 7832.93 5554.62 C 7837.23 5554.62 7873.06 5571.82 7877.36 5571.82 C 7880.22 5571.82 7881.66 5564.65 7884.52 5563.22 C 7903.15 5556.05 7950.45 5574.68 7973.38 5568.95 C 7986.28 5564.65 7994.88 5553.19 8007.78 5551.75 C 8030.71 5550.32 8046.47 5580.42 8062.24 5584.72 C 8083.73 5591.88 8090.9 5551.75 8096.63 5546.02 C 8122.43 5518.79 8188.35 5521.66 8208.42 5501.59 C 8247.11 5464.33 8191.22 5495.86 8218.45 5460.03 C 8225.62 5451.43 8237.08 5444.27 8248.55 5441.4 L 8249.98 5437.1 L 8255.71 5424.2 C 8255.71 5422.77 8255.71 5421.34 8255.71 5421.34 L 8257.15 5415.6 L 8271.48 5418.47 C 8270.04 5415.6 8267.18 5412.74 8267.18 5409.87 C 8267.18 5408.44 8321.64 5401.27 8324.51 5399.84 C 8351.74 5386.94 8343.14 5365.44 8381.83 5368.31 C 8397.6 5369.74 8414.79 5375.47 8427.69 5385.51 C 8431.99 5388.37 8427.69 5398.41 8431.99 5398.41 C 8442.02 5398.41 8452.06 5388.37 8463.52 5386.94 C 8469.25 5385.51 8462.09 5399.84 8463.52 5405.57 C 8466.39 5417.04 8473.55 5395.54 8476.42 5398.41 C 8480.72 5404.14 8480.72 5411.3 8485.02 5415.6 C 8490.75 5421.34 8485.02 5396.97 8493.62 5394.11 C 8542.35 5381.21 8520.85 5409.87 8555.24 5424.2 C 8569.58 5429.93 8559.54 5401.27 8572.44 5408.44 C 8605.41 5429.93 8582.47 5460.03 8592.51 5491.56 C 8593.94 5498.73 8629.77 5524.52 8638.37 5527.39 C 8655.57 5533.12 8634.07 5501.59 8654.13 5513.06 C 8679.93 5527.39 8646.97 5567.52 8665.6 5556.05 C 8672.76 5551.75 8668.46 5574.68 8674.2 5580.42 C 8682.8 5586.15 8718.63 5587.58 8727.22 5594.75 L 8741.56 5639.18 C 8741.56 5642.04 8732.96 5642.04 8734.39 5644.91 C 8737.26 5654.94 8770.22 5659.24 8770.22 5660.67 C 8761.62 5666.41 8751.59 5667.84 8744.42 5673.57 C 8741.56 5676.44 8742.99 5679.31 8741.56 5682.17 C 8734.39 5689.34 8727.22 5662.11 8715.76 5662.11 C 8707.16 5662.11 8715.76 5689.34 8707.16 5687.9 C 8701.43 5686.47 8682.8 5672.14 8682.8 5672.14 C 8679.93 5676.44 8681.36 5685.04 8675.63 5686.47 C 8672.76 5687.9 8671.33 5676.44 8669.9 5679.31 C 8662.73 5685.04 8664.17 5695.07 8659.87 5700.8 C 8658.43 5702.24 8655.57 5700.8 8654.13 5699.37 C 8654.13 5696.5 8657 5695.07 8657 5692.2 C 8655.57 5685.04 8652.7 5677.87 8649.83 5672.14 C 8644.1 5662.11 8631.2 5683.61 8624.04 5692.2 C 8603.97 5715.13 8639.8 5726.6 8642.67 5738.07 C 8644.1 5745.23 8636.94 5752.4 8636.94 5759.56 C 8636.94 5766.73 8645.53 5772.46 8642.67 5778.19 C 8639.8 5783.93 8629.77 5783.93 8624.04 5789.66 C 8611.14 5799.69 8631.2 5805.42 8624.04 5815.46 C 8618.3 5822.62 8609.7 5826.92 8605.41 5832.65 C 8592.51 5852.72 8614 5884.25 8603.97 5885.68 C 8596.81 5887.11 8589.64 5884.25 8582.47 5885.68 L 8583.91 5885.68 L 8576.74 5895.71 C 8576.74 5900.01 8575.31 5904.31 8572.44 5902.88 C 8575.31 5904.31 8579.61 5901.45 8582.47 5904.31 C 8586.77 5908.61 8585.34 5917.21 8591.07 5921.51 C 8596.81 5927.24 8658.43 5930.11 8657 5922.94 C 8657 5921.51 8636.94 5917.21 8651.27 5908.61 C 8659.87 5904.31 8669.9 5905.75 8678.5 5901.45 C 8692.83 5894.28 8698.56 5874.22 8714.33 5868.48 C 8745.86 5857.02 8761.62 5868.48 8768.79 5895.71 C 8771.65 5887.11 8783.12 5854.15 8765.92 5848.42 C 8763.05 5846.99 8767.35 5854.15 8764.49 5854.15 C 8763.05 5855.59 8763.05 5849.85 8761.62 5848.42 C 8753.02 5845.55 8758.75 5871.35 8748.72 5852.72 C 8740.12 5839.82 8741.56 5819.76 8740.12 5805.42 C 8740.12 5799.69 8730.09 5785.36 8735.82 5788.23 C 8748.72 5792.53 8745.86 5825.49 8758.75 5821.19 C 8801.75 5803.99 8773.09 5799.69 8773.09 5781.06 C 8773.09 5778.19 8775.95 5786.79 8778.82 5785.36 C 8783.12 5783.93 8771.65 5772.46 8775.95 5769.6 C 8783.12 5766.73 8791.72 5772.46 8798.88 5769.6 C 8804.62 5768.16 8808.92 5762.43 8811.78 5756.7 C 8823.25 5730.9 8836.15 5699.37 8844.74 5670.71 C 8846.18 5664.97 8834.71 5659.24 8837.58 5653.51 C 8839.01 5649.21 8847.61 5647.78 8850.48 5643.48 C 8860.51 5624.85 8831.85 5627.71 8843.31 5611.95 C 8874.84 5571.82 8917.84 5589.02 8917.84 5576.12 C 8919.27 5564.65 8903.5 5548.89 8913.54 5541.72 C 8920.7 5535.99 8916.4 5564.65 8926.43 5570.39 C 8930.73 5574.68 8936.47 5563.22 8943.63 5561.79 C 8950.8 5560.35 8959.4 5561.79 8968 5560.35 C 8986.63 5557.49 8963.7 5525.96 8963.7 5525.96 C 8962.26 5508.76 8976.6 5511.63 8968 5497.29 C 8972.3 5497.29 8976.6 5495.86 8976.6 5498.73 C 8978.03 5581.85 9025.32 5554.62 9069.75 5524.52 C 9075.48 5520.22 9056.85 5534.56 9051.12 5540.29 C 9043.95 5548.89 9053.99 5564.65 9041.09 5566.09 C 9016.72 5570.39 8989.49 5571.82 8965.13 5574.68 C 8963.7 5574.68 8927.87 5574.68 8932.17 5578.98 C 8940.77 5586.15 8949.37 5596.18 8960.83 5599.05 C 8965.13 5600.48 8957.96 5587.58 8962.26 5586.15 C 8970.86 5581.85 8980.9 5587.58 8990.93 5586.15 C 8993.79 5586.15 9005.26 5578.98 9006.69 5587.58 C 9009.56 5601.91 8973.73 5611.95 8983.76 5621.98 C 8988.06 5627.71 9038.22 5616.25 9045.39 5617.68 C 9049.69 5619.11 9045.39 5629.15 9049.69 5630.58 C 9059.72 5634.88 9072.62 5636.31 9084.08 5632.01 C 9095.55 5629.15 9101.28 5614.81 9111.31 5610.51 C 9121.35 5604.78 9134.24 5607.65 9142.84 5603.35 C 9145.71 5601.91 9139.98 5594.75 9142.84 5593.32 C 9145.71 5590.45 9151.44 5597.62 9154.31 5596.18 C 9161.47 5593.32 9157.17 5573.25 9164.34 5576.12 C 9177.24 5578.98 9188.7 5606.21 9198.74 5597.62 C 9205.9 5590.45 9204.47 5577.55 9213.07 5571.82 C 9237.43 5557.49 9211.63 5596.18 9227.4 5610.51 C 9233.13 5614.81 9247.46 5597.62 9246.03 5604.78 C 9246.03 5609.08 9201.6 5654.94 9193 5659.24 C 9188.7 5660.67 9184.4 5653.51 9180.1 5656.38 C 9178.67 5659.24 9187.27 5662.11 9185.84 5664.97 C 9185.84 5664.97 9155.74 5692.2 9154.31 5692.2 C 9151.44 5695.07 9148.58 5699.37 9147.14 5703.67 C 9147.14 5706.54 9151.44 5707.97 9151.44 5709.4 C 9150.01 5710.84 9098.41 5746.66 9117.05 5753.83 C 9152.87 5768.16 9145.71 5743.8 9175.81 5743.8 C 9185.84 5745.23 9217.37 5771.03 9227.4 5766.73 C 9240.3 5762.43 9250.33 5746.66 9267.53 5763.86 C 9306.22 5803.99 9273.26 5798.26 9280.43 5821.19 C 9287.59 5841.25 9297.62 5848.42 9296.19 5849.85 C 9290.46 5855.59 9270.39 5855.59 9273.26 5864.18 C 9277.56 5874.22 9296.19 5868.48 9306.22 5872.78 C 9316.26 5875.65 9316.26 5885.68 9329.15 5885.68 C 9400.81 5877.08 9386.48 5793.96 9432.34 5762.43 C 9440.94 5755.26 9449.54 5749.53 9461.01 5748.1 C 9466.74 5748.1 9473.9 5755.26 9478.2 5752.4 C 9488.24 5742.37 9479.64 5722.3 9489.67 5713.7 C 9499.7 5706.54 9505.43 5709.4 9508.3 5696.5 C 9509.73 5695.07 9505.43 5696.5 9504 5695.07 C 9496.83 5687.9 9508.3 5673.57 9512.6 5672.14 C 9519.77 5667.84 9529.8 5667.84 9538.4 5669.27 C 9547 5670.71 9552.73 5682.17 9561.33 5680.74 C 9571.36 5679.31 9574.23 5666.41 9582.82 5662.11 C 9589.99 5659.24 9598.59 5662.11 9605.76 5659.24 C 9634.42 5649.21 9611.49 5621.98 9614.35 5599.05 C 9617.22 5587.58 9634.42 5576.12 9627.25 5567.52 C 9627.25 5567.52 9568.49 5578.98 9567.06 5580.42 C 9558.46 5586.15 9565.63 5603.35 9557.03 5607.65 C 9551.29 5610.51 9544.13 5607.65 9538.4 5604.78 C 9534.1 5603.35 9535.53 5594.75 9531.23 5594.75 C 9521.2 5594.75 9529.8 5616.25 9524.06 5624.85 C 9516.9 5632.01 9509.73 5640.61 9499.7 5643.48 C 9475.34 5650.64 9395.08 5573.25 9382.18 5556.05 C 9377.88 5551.75 9357.82 5515.92 9360.68 5513.06 C 9369.28 5507.33 9377.88 5528.82 9387.91 5527.39 C 9420.88 5521.66 9412.28 5455.73 9425.18 5435.67 C 9429.48 5429.93 9438.07 5428.5 9440.94 5422.77 C 9448.11 5412.74 9448.11 5399.84 9455.27 5391.24 C 9476.77 5362.58 9488.24 5365.44 9506.87 5374.04 C 9508.3 5375.47 9508.3 5371.18 9509.73 5369.74 C 9522.63 5355.41 9506.87 5328.18 9541.26 5326.75 C 9552.73 5325.31 9559.89 5348.24 9568.49 5342.51 C 9578.53 5336.78 9565.63 5319.58 9569.93 5308.12 C 9569.93 5305.25 9602.89 5267.99 9604.32 5267.99 C 9610.05 5265.12 9617.22 5279.45 9620.09 5275.15 C 9622.95 5270.85 9624.39 5232.16 9632.99 5224.99 C 9644.45 5216.39 9680.28 5202.06 9694.61 5199.2 C 9698.91 5199.2 9700.34 5213.53 9703.21 5209.23 C 9707.51 5203.49 9706.08 5193.46 9710.38 5187.73 " }
+ }
+ }
+ // PATH visit ch count: 232
+ DemoShape {
+ objectName: "ch"
+ ShapePath {
+ objectName: "svg_path:ch"
+ // boundingRect: 5655.76, 5764.54 593.483x374.682
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 6244.98 5941.58 C 6243.55 5947.31 6244.98 5954.47 6242.12 5960.21 C 6240.68 5965.94 6236.38 5970.24 6233.52 5975.97 C 6233.52 5978.84 6260.75 5998.9 6243.55 6004.63 C 6213.45 6011.8 6223.48 5970.24 6197.69 5988.87 C 6177.62 6003.2 6203.42 6018.97 6206.29 6026.13 C 6207.72 6031.86 6199.12 6036.16 6199.12 6041.9 C 6200.55 6047.63 6206.29 6050.5 6209.15 6054.8 C 6210.59 6060.53 6199.12 6066.26 6193.39 6063.39 C 6183.36 6057.66 6189.09 6034.73 6177.62 6033.3 C 6138.93 6026.13 6157.56 6054.8 6134.63 6047.63 C 6097.37 6039.03 6120.3 6010.37 6101.67 6007.5 C 6077.3 6003.2 6093.07 6041.9 6093.07 6044.76 C 6087.33 6070.56 6052.94 6079.16 6052.94 6110.69 C 6052.94 6125.02 6081.6 6119.29 6057.24 6137.92 C 6048.64 6145.08 6045.77 6120.72 6040.04 6113.56 C 6035.74 6109.26 6025.71 6112.12 6024.27 6106.39 C 6022.84 6100.66 6032.87 6096.36 6034.31 6090.62 C 6034.31 6087.76 6031.44 6084.89 6030.01 6084.89 C 6014.24 6079.16 5991.31 6074.86 5981.28 6056.23 C 5979.85 6050.5 5984.15 6044.76 5984.15 6040.46 C 5984.15 6031.86 5985.58 6023.27 5982.71 6014.67 C 5981.28 6013.23 5978.41 6016.1 5975.55 6017.53 C 5968.38 6023.27 5962.65 6029 5955.48 6034.73 C 5948.32 6040.46 5936.85 6043.33 5933.98 6051.93 C 5932.55 6057.66 5945.45 6060.53 5944.02 6067.69 C 5944.02 6074.86 5903.89 6116.42 5902.46 6116.42 C 5889.56 6116.42 5879.52 6099.22 5866.63 6102.09 C 5847.99 6106.39 5809.3 6135.05 5794.97 6109.26 C 5789.23 6100.66 5789.23 6090.62 5782.07 6083.46 C 5780.64 6080.59 5774.9 6089.19 5773.47 6086.32 C 5772.04 6082.03 5779.2 6074.86 5776.34 6070.56 C 5774.9 6066.26 5766.3 6070.56 5763.44 6067.69 C 5754.84 6053.36 5774.9 6054.8 5773.47 6046.2 C 5772.04 6039.03 5763.44 6036.16 5763.44 6029 C 5762 6024.7 5773.47 6016.1 5767.74 6014.67 C 5749.11 6006.07 5708.98 6006.07 5696.08 6026.13 C 5693.21 6029 5694.65 6031.86 5694.65 6036.16 C 5696.08 6039.03 5703.24 6041.9 5701.81 6044.76 C 5693.21 6061.96 5673.15 6069.13 5655.95 6064.83 C 5654.52 6064.83 5661.68 6061.96 5661.68 6059.09 C 5661.68 6040.46 5676.01 6047.63 5677.45 6043.33 C 5684.61 6020.4 5665.98 6000.33 5683.18 5978.84 C 5693.21 5964.51 5719.01 5964.51 5724.74 5948.74 C 5729.04 5940.14 5720.44 5927.24 5724.74 5917.21 C 5730.48 5905.75 5750.54 5910.05 5759.14 5900.01 C 5769.17 5891.41 5780.64 5862.75 5793.53 5852.72 C 5800.7 5846.99 5807.87 5862.75 5809.3 5842.69 C 5809.3 5835.52 5787.8 5849.85 5786.37 5842.69 C 5783.5 5835.52 5794.97 5829.79 5799.27 5824.06 C 5799.27 5824.06 5802.13 5825.49 5802.13 5824.06 C 5802.13 5821.19 5796.4 5815.46 5799.27 5814.02 C 5839.4 5802.56 5822.2 5857.02 5870.93 5806.86 C 5872.36 5806.86 5875.22 5803.99 5876.66 5801.12 L 5879.52 5798.26 C 5882.39 5796.83 5885.26 5796.83 5888.12 5799.69 C 5889.56 5801.12 5879.52 5802.56 5880.96 5805.42 C 5885.26 5814.02 5951.18 5798.26 5955.48 5798.26 C 5984.15 5796.83 5958.35 5824.06 5994.18 5805.42 C 5995.61 5803.99 5991.31 5796.83 5994.18 5795.39 C 5998.48 5792.53 6014.24 5791.09 6008.51 5789.66 C 5999.91 5788.23 5991.31 5791.09 5982.71 5789.66 C 5978.41 5788.23 6002.78 5749.53 6024.27 5771.03 C 6027.14 5773.89 6019.97 5779.63 6021.41 5783.93 C 6022.84 5786.79 6028.57 5788.23 6031.44 5786.79 C 6034.31 5785.36 6030.01 5775.33 6031.44 5778.19 C 6037.17 5781.06 6037.17 5791.09 6042.91 5793.96 C 6042.91 5793.96 6090.2 5791.09 6091.63 5791.09 C 6105.96 5793.96 6116 5808.29 6128.9 5815.46 L 6128.9 5816.89 C 6128.9 5826.92 6147.53 5829.79 6141.79 5844.12 C 6140.36 5846.99 6134.63 5845.55 6133.19 5846.99 C 6128.9 5854.15 6114.56 5905.75 6117.43 5907.18 C 6120.3 5908.61 6167.59 5912.91 6169.02 5912.91 C 6171.89 5915.78 6164.72 5920.08 6167.59 5922.94 C 6174.76 5931.54 6183.36 5937.28 6193.39 5941.58 C 6216.32 5953.04 6220.62 5914.34 6236.38 5917.21 C 6240.68 5917.21 6243.55 5918.64 6246.41 5920.08 L 6244.98 5932.98 C 6243.55 5937.28 6242.12 5940.14 6244.98 5941.58 " }
+ }
+ }
+ // PATH visit md count: 155
+ DemoShape {
+ objectName: "md"
+ ShapePath {
+ objectName: "svg_path:md"
+ // boundingRect: 8254.28, 5368.05 515.94x534.916
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 8254.28 5435.67 C 8274.34 5425.64 8287.24 5434.23 8303.01 5447.13 C 8333.1 5468.63 8338.84 5504.46 8363.2 5528.82 C 8403.33 5567.52 8512.25 5636.31 8525.15 5692.2 C 8535.18 5728.03 8522.28 5768.16 8530.88 5803.99 C 8533.75 5819.76 8559.54 5855.59 8558.11 5871.35 C 8558.11 5877.08 8546.65 5878.52 8548.08 5884.25 C 8549.51 5889.98 8558.11 5887.11 8562.41 5889.98 C 8566.71 5892.85 8566.71 5902.88 8572.44 5902.88 C 8579.61 5904.31 8573.88 5887.11 8579.61 5885.68 C 8588.21 5884.25 8596.81 5887.11 8603.97 5885.68 C 8614 5884.25 8592.51 5852.72 8605.41 5832.65 C 8609.71 5826.92 8618.3 5822.62 8624.04 5815.46 C 8631.2 5805.42 8611.14 5799.69 8624.04 5789.66 C 8629.77 5783.93 8639.8 5783.93 8642.67 5778.19 C 8645.53 5772.46 8636.94 5766.73 8636.94 5759.56 C 8636.94 5752.4 8644.1 5745.23 8642.67 5738.07 C 8639.8 5726.6 8603.97 5715.13 8624.04 5692.2 C 8631.2 5683.61 8644.1 5662.11 8649.83 5672.14 C 8652.7 5677.87 8655.57 5685.04 8657 5692.2 C 8657 5695.07 8654.13 5696.5 8654.13 5699.37 C 8655.57 5700.8 8658.43 5702.24 8659.87 5700.8 C 8664.17 5695.07 8662.73 5685.04 8669.9 5679.31 C 8671.33 5676.44 8672.76 5687.9 8675.63 5686.47 C 8681.36 5685.04 8679.93 5676.44 8682.8 5672.14 C 8682.8 5672.14 8701.43 5686.47 8707.16 5687.9 C 8715.76 5689.34 8707.16 5662.11 8715.76 5662.11 C 8727.22 5662.11 8734.39 5689.34 8741.56 5682.17 C 8742.99 5679.31 8741.56 5676.44 8744.42 5673.57 C 8751.59 5667.84 8761.62 5666.41 8770.22 5660.67 C 8770.22 5659.24 8737.26 5654.94 8734.39 5644.91 C 8732.96 5642.04 8741.56 5642.04 8741.56 5639.18 L 8727.22 5594.75 C 8718.63 5587.58 8682.8 5586.15 8674.2 5580.42 C 8668.46 5574.68 8672.76 5551.75 8665.6 5556.05 C 8646.97 5567.52 8679.93 5527.39 8654.13 5513.06 C 8634.07 5501.59 8655.57 5533.12 8638.37 5527.39 C 8629.77 5524.52 8593.94 5498.73 8592.51 5491.56 C 8582.47 5460.03 8605.41 5429.93 8572.44 5408.44 C 8559.54 5401.27 8569.58 5429.93 8555.24 5424.2 C 8520.85 5409.87 8542.35 5381.21 8493.62 5394.11 C 8485.02 5396.97 8490.75 5421.34 8485.02 5415.6 C 8480.72 5411.3 8480.72 5404.14 8476.42 5398.41 C 8473.55 5395.54 8466.39 5417.04 8463.52 5405.57 C 8462.09 5399.84 8469.25 5385.51 8463.52 5386.94 C 8452.06 5388.37 8442.02 5398.41 8431.99 5398.41 C 8427.69 5398.41 8431.99 5388.37 8427.69 5385.51 C 8414.79 5375.47 8397.6 5369.74 8381.83 5368.31 C 8343.14 5365.44 8351.74 5386.94 8324.51 5399.84 C 8321.64 5401.27 8267.18 5408.44 8267.18 5409.87 C 8267.18 5415.6 8274.34 5418.47 8274.34 5424.2 C 8275.78 5429.93 8262.88 5415.6 8258.58 5418.47 C 8252.85 5421.34 8255.71 5429.93 8254.28 5435.67 " }
+ }
+ }
+ // PATH visit ad count: 7
+ DemoShape {
+ objectName: "ad"
+ ShapePath {
+ objectName: "svg_path:ad"
+ // boundingRect: 4995.66, 6660.73 46.2837x38.6574
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 5033.96 6695.42 C 4969.46 6714.05 5005.29 6661.02 5008.16 6661.02 C 5045.42 6658.16 5048.29 6676.79 5033.96 6695.42 " }
+ }
+ }
+ // PATH visit mc count: 16
+ DemoShape {
+ objectName: "mc"
+ ShapePath {
+ objectName: "svg_path:mc"
+ // boundingRect: 5753.41, 6504.81 42.995x38.6956
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 5774.9 6543.5 C 5786.37 6543.5 5796.4 6533.47 5796.4 6523.44 C 5796.4 6513.41 5786.37 6504.81 5774.9 6504.81 C 5763.44 6504.81 5753.41 6513.41 5753.41 6523.44 C 5753.41 6533.47 5763.44 6543.5 5774.9 6543.5 C 5786.37 6543.5 5763.44 6543.5 5774.9 6543.5 " }
+ }
+ }
+ // PATH visit li count: 9
+ DemoShape {
+ objectName: "li"
+ ShapePath {
+ objectName: "svg_path:li"
+ // boundingRect: 6117.15, 5875.65 13.1832x32.9627
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 6123.16 5875.65 L 6130.33 5891.41 L 6130.33 5908.61 C 6123.16 5908.61 6118.86 5907.18 6117.43 5907.18 C 6116 5905.75 6120.3 5891.41 6123.16 5875.65 " }
+ }
+ }
+ // PATH visit ru-kgd count: 71
+ DemoShape {
+ objectName: "ru-kgd"
+ ShapePath {
+ objectName: "svg_path:ru-kgd"
+ // boundingRect: 7236.73, 4257.61 342.527x184.111
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 7579.26 4400.92 C 7547.73 4357.93 7577.83 4319.23 7569.23 4304.9 C 7564.93 4299.17 7559.2 4294.87 7553.46 4292 C 7550.6 4290.57 7546.3 4294.87 7544.87 4293.44 C 7539.13 4289.14 7542 4277.67 7536.27 4276.24 C 7516.2 4270.51 7496.14 4289.14 7474.64 4289.14 C 7471.77 4289.14 7476.07 4284.84 7473.21 4283.4 C 7454.58 4277.67 7425.91 4279.1 7408.71 4269.07 C 7404.41 4266.21 7404.41 4259.04 7400.12 4257.61 C 7395.82 4257.61 7394.38 4263.34 7390.08 4264.77 C 7391.52 4269.07 7391.52 4271.94 7390.08 4274.8 C 7388.65 4277.67 7381.48 4273.37 7381.48 4276.24 C 7380.05 4292 7400.12 4306.33 7395.82 4322.1 C 7391.52 4340.73 7315.56 4339.3 7318.43 4330.7 C 7319.86 4327.83 7321.29 4324.97 7322.72 4322.1 C 7306.96 4339.3 7289.76 4336.43 7266.83 4342.16 C 7263.96 4342.16 7259.67 4340.73 7259.67 4343.6 C 7258.23 4355.06 7263.96 4366.53 7263.96 4377.99 C 7263.96 4398.06 7253.93 4419.55 7236.73 4436.75 C 7318.43 4448.22 7511.9 4441.05 7577.83 4402.36 C 7577.83 4402.36 7577.83 4402.36 7579.26 4400.92 M 7357.12 4263.34 C 7357.12 4263.34 7355.69 4263.34 7355.69 4263.34 C 7354.25 4267.64 7351.39 4273.37 7349.95 4277.67 C 7352.82 4273.37 7355.69 4267.64 7357.12 4263.34 " }
+ }
+ }
+ // PATH visit im count: 10
+ DemoShape {
+ objectName: "im"
+ ShapePath {
+ objectName: "svg_path:im"
+ // boundingRect: 4575.97, 4351.37 54.7176x60.3339
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 4630.62 4351.37 C 4623.46 4352.8 4616.29 4352.8 4609.13 4357.1 C 4603.39 4361.4 4601.96 4371.43 4596.23 4377.16 C 4534.6 4433.06 4633.49 4418.73 4630.62 4351.37 " }
+ }
+ }
+ // PATH visit fo count: 26
+ DemoShape {
+ objectName: "fo"
+ ShapePath {
+ objectName: "svg_path:fo"
+ // boundingRect: 4732.49, 2985.47 44.4281x176.62
+ strokeColor: "#aa805d"
+ strokeWidth: 4.58365
+ fillColor: "#fffff7df"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 4736.79 3126.26 C 4735.36 3139.16 4732.49 3162.09 4732.49 3162.09 C 4732.49 3162.09 4735.36 3139.16 4736.79 3126.26 M 4758.29 2985.81 C 4741.09 3021.64 4765.45 2977.21 4769.75 2998.71 C 4769.75 3001.58 4762.59 3001.58 4762.59 3003.01 C 4765.45 3008.74 4776.92 3007.31 4776.92 3013.04 C 4776.92 3023.07 4774.05 3040.27 4764.02 3040.27 C 4755.42 3038.84 4765.45 3021.64 4764.02 3013.04 C 4759.72 2998.71 4716.72 2982.95 4758.29 2985.81 " }
+ }
+ }
+ } // END countries type: G 1
+ } // END Europakarte type: DOC 0
+}
diff --git a/examples/quick/quickshapes/weatherforecast/Gear.qml b/examples/quick/quickshapes/weatherforecast/Gear.qml
new file mode 100644
index 0000000000..ef6db2b090
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/Gear.qml
@@ -0,0 +1,5 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+Gear_generated {
+}
diff --git a/examples/quick/quickshapes/weatherforecast/Gear_generated.qml b/examples/quick/quickshapes/weatherforecast/Gear_generated.qml
new file mode 100644
index 0000000000..473f7235e0
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/Gear_generated.qml
@@ -0,0 +1,36 @@
+// Copyright (C) 2023 Framework7
+// SPDX-License-Identifier: MIT
+// Generated from: assets/gear-alt-stroke.svg
+import QtQuick
+import QtQuick.Shapes
+
+Item {
+ // viewBox 0, 0 56x56
+ // size 56x56
+ implicitWidth: 56
+ implicitHeight: 56
+ // START svg4 type: DOC 0
+ Item { // structure node
+ transform: [
+ Scale { xScale: width / 56; yScale: height / 56 }
+ ]
+ objectName: "svg4"
+ // skipping DEFS "defs8"
+ // PATH visit path2 count: 78
+ DemoShape {
+ objectName: "path2"
+ // Translate 4, 4
+ x: 4
+ y: 4
+ ShapePath {
+ objectName: "svg_path:path2"
+ // boundingRect: 0.682945, 0.682945 46.7504x46.7504
+ strokeColor: "#333333"
+ strokeWidth: 3
+ fillColor: "transparent"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 18.7918 47.4333 C 16.3367 46.8901 14.0229 45.9709 11.9139 44.7392 L 12.0378 42.3144 C 12.2067 39.0073 9.65397 36.4638 6.35565 36.6322 L 3.67513 36.7691 C 2.41991 34.7754 1.44994 32.584 0.822479 30.2522 L 2.92622 28.3529 C 5.38411 26.1339 5.37761 22.5303 2.92622 20.3171 L 0.682945 18.2919 C 1.23975 16.0095 2.12294 13.855 3.28025 11.8807 L 6.35565 12.0378 C 9.66271 12.2067 12.2062 9.65397 12.0378 6.35565 L 11.8807 3.28025 C 13.855 2.12294 16.0095 1.23975 18.2919 0.682945 L 20.3171 2.92622 C 22.5361 5.38411 26.1397 5.37761 28.3529 2.92622 L 30.2522 0.822479 C 32.584 1.44994 34.7754 2.41991 36.7691 3.67513 L 36.6322 6.35565 C 36.4633 9.66271 39.016 12.2062 42.3144 12.0378 L 44.7392 11.9139 C 45.9709 14.0229 46.8901 16.3367 47.4333 18.7918 L 45.7438 20.3171 C 43.2859 22.5361 43.2924 26.1397 45.7438 28.3529 L 47.304 29.7614 C 46.6874 32.2638 45.6783 34.6117 44.3457 36.736 L 42.3144 36.6322 C 39.0073 36.4633 36.4638 39.016 36.6322 42.3144 L 36.736 44.3457 C 34.6117 45.6783 32.2638 46.6874 29.7614 47.304 L 28.3529 45.7438 C 26.1339 43.2859 22.5303 43.2924 20.3171 45.7438 L 18.7918 47.4333 M 24 34 C 29.5228 34 34 29.5228 34 24 C 34 18.4772 29.5228 14 24 14 C 18.4772 14 14 18.4772 14 24 C 14 29.5228 18.4772 34 24 34 " }
+ }
+ }
+ } // END svg4 type: DOC 0
+}
diff --git a/examples/quick/quickshapes/weatherforecast/MapLabel.qml b/examples/quick/quickshapes/weatherforecast/MapLabel.qml
new file mode 100644
index 0000000000..66ba91ecde
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/MapLabel.qml
@@ -0,0 +1,65 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Rectangle {
+ id: mapLabel
+ property url iconSource
+ property string label
+ property int degrees
+
+ radius: 8 * mainWindow.designWindowWidthRatio
+ color: Qt.rgba(0, 0, 0, 0.05)
+ height: 42 * mainWindow.designWindowHeightRatio
+ width: labelText.width + divider.width + labelDegrees.width + iconLoader.width + row.padding * 5
+
+ x: -height / 2
+ y: -height / 2
+
+ Row {
+ id: row
+ anchors.fill: parent
+ padding: 8 * mainWindow.designWindowWidthRatio
+ spacing: padding
+
+ Text {
+ id: labelText
+ text: mapLabel.label
+ color: "#333"
+ font.family: workSansRegular.font.family
+ font.pixelSize: 22 * mainWindow.designWindowHeightRatio
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ Rectangle {
+ id: divider
+ color: "#333"
+ width: 2 * mainWindow.designWindowWidthRatio
+ antialiasing: true
+ height: labelText.implicitHeight
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ Text {
+ id: labelDegrees
+ text: degrees+"°"
+ color: "#333"
+ font.family: workSansRegular.font.family
+ font.pixelSize: 22 * mainWindow.designWindowHeightRatio
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ Loader {
+ id: iconLoader
+ source: mapLabel.iconSource
+
+ // TODO: implement PreserveAspectRatio in Shapes
+ property real aspectRatio: implicitWidth / implicitHeight
+ width: 25 * mainWindow.designWindowWidthRatio
+ height: width / aspectRatio
+
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/weatherforecast/SettingsDrawer.qml b/examples/quick/quickshapes/weatherforecast/SettingsDrawer.qml
new file mode 100644
index 0000000000..deb6b02b95
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/SettingsDrawer.qml
@@ -0,0 +1,117 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+
+Page {
+ id: settingsDrawer
+ default property alias content: contentLayout.children
+ required property bool isLandscape
+ readonly property bool isMobile: Qt.platform.os === "android" || Qt.platform.os === "ios"
+ property bool isOpen: false
+
+ title: "Settings"
+
+ onIsLandscapeChanged: updateState();
+ Component.onCompleted: updateState();
+ onIsOpenChanged: updateState();
+ x: 0
+ y: 0
+
+ function updateState() {
+ if (isOpen)
+ if (isLandscape)
+ settingsDrawer.state = "Landscape_Visible"
+ else
+ settingsDrawer.state = "Portrait_Visible"
+ else
+ if (isLandscape)
+ settingsDrawer.state = "Landscape_Hidden"
+ else
+ settingsDrawer.state = "Portrait_Hidden"
+ }
+
+ states: [
+ State {
+ name: "Landscape_Visible"
+ PropertyChanges {
+ settingsDrawer.x: 0
+ }
+ },
+ State {
+ name: "Landscape_Hidden"
+ PropertyChanges {
+ settingsDrawer.x: -settingsDrawer.width
+ }
+ },
+ State {
+ name: "Portrait_Visible"
+ PropertyChanges {
+ settingsDrawer.y: 0
+ }
+ },
+ State {
+ name: "Portrait_Hidden"
+ PropertyChanges {
+ settingsDrawer.y: -settingsDrawer.height
+ }
+ }
+ ]
+
+ transitions: [
+ Transition {
+ from: "Landscape_Visible"
+ to: "Landscape_Hidden"
+ NumberAnimation {
+ duration: 400
+ property: "x"
+ easing.type: Easing.InOutQuad
+ }
+ },
+ Transition {
+ from: "Landscape_Hidden"
+ to: "Landscape_Visible"
+ NumberAnimation {
+ duration: 400
+ property: "x"
+ easing.type: Easing.InOutQuad
+ }
+ },
+ Transition {
+ from: "Portrait_Visible"
+ to: "Portrait_Hidden"
+ NumberAnimation {
+ duration: 400
+ property: "y"
+ easing.type: Easing.InOutQuad
+ }
+ },
+ Transition {
+ from: "Portrait_Hidden"
+ to: "Portrait_Visible"
+ NumberAnimation {
+ duration: 400
+ property: "y"
+ easing.type: Easing.InOutQuad
+ }
+ }
+ ]
+
+ header: Label {
+ text: settingsDrawer.title
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ font.pointSize: 20
+ }
+
+ ScrollView {
+ anchors.fill: parent
+ padding: 10
+
+ ColumnLayout {
+ id: contentLayout
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/weatherforecast/Sun.qml b/examples/quick/quickshapes/weatherforecast/Sun.qml
new file mode 100644
index 0000000000..b65a11371d
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/Sun.qml
@@ -0,0 +1,5 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+Sun_generated {
+}
diff --git a/examples/quick/quickshapes/weatherforecast/SunBehindCloud.qml b/examples/quick/quickshapes/weatherforecast/SunBehindCloud.qml
new file mode 100644
index 0000000000..7ca3eee981
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/SunBehindCloud.qml
@@ -0,0 +1,5 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+SunBehindCloud_generated {
+}
diff --git a/examples/quick/quickshapes/weatherforecast/SunBehindCloud_generated.qml b/examples/quick/quickshapes/weatherforecast/SunBehindCloud_generated.qml
new file mode 100644
index 0000000000..b64fe5bf57
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/SunBehindCloud_generated.qml
@@ -0,0 +1,90 @@
+// Copyright (C) 2023 Googlefonts
+// SPDX-License-Identifier: Apache-2.0
+// Generated from: assets/sun-behind-cloud-svgrepo-com.svg
+import QtQuick
+import QtQuick.Shapes
+
+Item {
+ // viewBox 0, 0 128x128
+ // size 800x800
+ implicitWidth: 800
+ implicitHeight: 800
+ // START type: DOC 0
+ DemoShape { //combined path container
+ transform: [
+ Scale { xScale: width / 128; yScale: height / 128 }
+ ]
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 24.455, 35.8525 49.3712x49.8728
+ strokeColor: "transparent"
+ fillColor: "#fffcc11a"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 29.53 45.25 C 22.39 54.42 22.51 70.73 31.64 78.8 C 42 87.97 56.57 87.88 65.74 79.44 C 76.73 69.33 76.1 52.49 66.38 42.96 C 56.61 33.37 39.15 32.87 29.53 45.25 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 32.2619, 41.832 10.7315x13.1421
+ strokeColor: "transparent"
+ fillColor: "#fffee269"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 40.99 42.1 C 38.17 40.85 35.08 44.25 33.73 46.58 C 32.38 48.91 31.13 53.48 34 54.64 C 36.87 55.8 38.93 53.83 40.99 50.43 C 43.05 47.03 44.21 43.54 40.99 42.1 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 47.9692, 15.7549 13.1149x17.8884
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 48.34 29.31 C 47.66 30.59 47.89 31.57 49.24 31.9 C 50.6 32.22 59.06 33.6 59.77 33.64 C 60.8 33.7 61.19 32.93 61.06 32.02 C 60.93 31.12 58.86 18.45 58.67 17.28 C 58.48 16.12 57.25 14.95 56.08 16.5 C 54.93 18.07 48.85 28.34 48.34 29.31 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 69.1814, 34.4063 18.2257x15.4262
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 70.25 38.1 C 68.92 38.51 68.96 39.33 69.67 40.36 C 70.38 41.39 75.29 48.89 75.75 49.41 C 76.21 49.93 76.98 50.06 77.62 49.28 C 78.26 48.5 86.34 37.19 86.93 36.48 C 87.9 35.32 87.32 34.09 85.83 34.48 C 84.69 34.78 71.09 37.85 70.25 38.1 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 10.8789, 71.5427 18.0836x15.5928
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 19.84 72.49 C 20.74 71 21.91 71.39 22.75 72.81 C 23.33 73.78 28.18 80.31 28.63 81.02 C 29.08 81.73 29.28 83.09 27.85 83.41 C 26.43 83.73 14.86 86.77 13.05 87.09 C 11.24 87.41 10.21 85.99 11.37 84.44 C 12.05 83.54 19.32 73.33 19.84 72.49 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 3.98165, 48.399 18.0509x13.2527
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 17.38 61.24 C 19.03 61.98 19.81 61.71 20.16 60.53 C 20.61 58.98 21.97 51.87 22.03 50.25 C 22.07 49.2 21.64 48.18 20.03 48.44 C 18.41 48.7 6.78 50.31 5.29 50.83 C 3.56 51.43 3.69 53.33 4.84 53.93 C 6.2 54.65 16.22 60.72 17.38 61.24 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 22.4845, 22.1259 15.5758x18.5311
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 37.48 34.1 C 38.41 33.36 38.13 32.29 37.29 31.71 C 36.45 31.13 26.07 23.62 24.75 22.6 C 23.59 21.7 22.16 22.02 22.55 24.09 C 22.83 25.57 26.14 38.57 26.36 39.47 C 26.62 40.5 27.39 41.02 28.3 40.37 C 29.21 39.72 36.51 34.87 37.48 34.1 " }
+ }
+ // PATH visit count: 28
+ ShapePath {
+ // boundingRect: 19.1486, 46.294 104.389x55.916
+ strokeColor: "transparent"
+ fillColor: "#ffe2ebee"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 109.13 81.18 C 109.13 81.18 110.58 52.73 87.55 47.18 C 64.52 41.63 57.81 63.97 57.81 63.97 C 57.81 63.97 50.13 62.18 43.01 68.1 C 37.42 72.75 36.63 79.73 36.63 79.73 C 36.63 79.73 29.28 78.61 23.16 84.55 C 18.73 88.85 19.16 94.37 19.16 94.37 L 28.08 102.21 L 118.73 99.76 L 123.5 94.64 C 123.5 94.64 124.26 88.96 118.96 84.69 C 113.66 80.41 109.13 81.18 109.13 81.18 " }
+ }
+ // PATH visit count: 43
+ ShapePath {
+ // boundingRect: 19.168, 92.23 104.332x12.3586
+ strokeColor: "transparent"
+ fillColor: "#ffb9ced3"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 40.64 92.23 C 40.64 92.23 44.25 96.31 55.7 96.04 C 67.15 95.77 70.16 92.77 70.16 92.77 C 70.16 92.77 75.18 98.04 89.69 96.92 C 104.2 95.8 108.37 92.74 108.37 92.74 C 108.37 92.74 111.91 95.27 116.39 95.34 C 120.86 95.41 123.5 94.63 123.5 94.63 C 123.5 94.63 123.03 98.19 121.47 100.47 C 119.91 102.75 117.31 104.49 113.2 104.46 C 109.08 104.43 96.56 104.54 83.85 104.52 C 71.14 104.5 34.82 104.71 29.45 104.48 C 25.36 104.31 22.39 101.9 21.02 99.86 C 18.83 96.6 19.19 93.16 19.19 93.16 C 19.19 93.16 23.31 96.39 28.87 96.15 C 36.47 95.83 40.64 92.23 40.64 92.23 " }
+ }
+ } // END type: DOC 0
+}
diff --git a/examples/quick/quickshapes/weatherforecast/SunBehindLargeCloud_generated.qml b/examples/quick/quickshapes/weatherforecast/SunBehindLargeCloud_generated.qml
new file mode 100644
index 0000000000..3122c64b9c
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/SunBehindLargeCloud_generated.qml
@@ -0,0 +1,90 @@
+// Copyright (C) 2023 Googlefonts
+// SPDX-License-Identifier: Apache-2.0
+// Generated from: assets/sun-behind-large-cloud-svgrepo-com.svg
+import QtQuick
+import QtQuick.Shapes
+
+Item {
+ // viewBox 0, 0 128x128
+ // size 800x800
+ implicitWidth: 800
+ implicitHeight: 800
+ // START type: DOC 0
+ DemoShape { //combined path container
+ transform: [
+ Scale { xScale: width / 128; yScale: height / 128 }
+ ]
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 25.7146, 32.9147 33.1229x33.4701
+ strokeColor: "transparent"
+ fillColor: "#fffcc11a"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 29.12 39.22 C 24.33 45.38 24.41 56.32 30.53 61.74 C 37.48 67.89 47.26 67.83 53.41 62.17 C 60.79 55.38 60.36 44.08 53.84 37.69 C 47.29 31.25 35.58 30.91 29.12 39.22 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 30.9585, 36.9296 7.20214x8.82548
+ strokeColor: "transparent"
+ fillColor: "#fffee269"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 36.81 37.11 C 34.92 36.27 32.84 38.55 31.94 40.12 C 31.04 41.68 30.2 44.75 32.12 45.53 C 34.04 46.31 35.43 44.99 36.81 42.7 C 38.2 40.41 38.98 38.07 36.81 37.11 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 41.4903, 19.4387 8.81367x11.9934
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 41.74 28.53 C 41.28 29.39 41.44 30.05 42.35 30.26 C 43.26 30.48 48.94 31.4 49.42 31.43 C 50.11 31.47 50.37 30.95 50.29 30.35 C 50.21 29.75 48.82 21.24 48.69 20.46 C 48.56 19.68 47.74 18.9 46.96 19.94 C 46.18 20.98 42.09 27.88 41.74 28.53 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 55.7317, 31.9409 12.2375x10.3504
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 56.45 34.42 C 55.56 34.7 55.58 35.24 56.06 35.94 C 56.54 36.63 59.83 41.66 60.14 42.01 C 60.44 42.36 60.96 42.44 61.4 41.92 C 61.83 41.4 67.25 33.81 67.65 33.33 C 68.3 32.55 67.91 31.73 66.91 31.99 C 66.14 32.19 57.01 34.25 56.45 34.42 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 16.6111, 56.8641 12.1295x10.4676
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 22.62 57.5 C 23.23 56.5 24.01 56.76 24.57 57.72 C 24.96 58.37 28.21 62.75 28.52 63.23 C 28.82 63.71 28.95 64.62 28 64.83 C 27.05 65.05 19.28 67.09 18.07 67.3 C 16.86 67.52 16.16 66.56 16.94 65.52 C 17.39 64.91 22.27 58.06 22.62 57.5 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 11.9801, 41.3307 12.1119x8.89368
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 20.97 49.95 C 22.08 50.44 22.6 50.27 22.83 49.47 C 23.13 48.43 24.04 43.66 24.09 42.57 C 24.12 41.86 23.83 41.18 22.75 41.36 C 21.67 41.53 13.86 42.62 12.86 42.96 C 11.7 43.36 11.78 44.64 12.56 45.04 C 13.47 45.53 20.19 49.6 20.97 49.95 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 24.4062, 23.699 10.4393x12.4393
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 34.46 31.74 C 35.08 31.24 34.89 30.53 34.33 30.14 C 33.77 29.75 26.8 24.71 25.92 24.02 C 25.14 23.41 24.19 23.63 24.45 25.02 C 24.64 26.02 26.86 34.74 27.01 35.34 C 27.18 36.03 27.7 36.38 28.31 35.95 C 28.91 35.51 33.81 32.26 34.46 31.74 " }
+ }
+ // PATH visit count: 28
+ ShapePath {
+ // boundingRect: 4.23467, 37.495 119.251x63.625
+ strokeColor: "transparent"
+ fillColor: "#ffe2ebee"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 107.33 76.86 C 107.19 76.4 111.85 42.97 81.48 38.03 C 54.28 33.61 48.38 58.03 48.38 58.03 C 48.38 58.03 38.05 56.3 30.62 63.64 C 24.49 69.69 23.69 76.5 23.69 76.5 C 23.69 76.5 16.1 75 9.46 80.07 C 2.78 85.17 4.41 90.5 4.41 90.5 L 19.77 101.12 L 110.32 98.4 L 123.18 94.96 C 123.18 94.96 125.39 87.15 117.93 81.16 C 111.91 76.33 107.33 76.86 107.33 76.86 " }
+ }
+ // PATH visit count: 40
+ ShapePath {
+ // boundingRect: 4.26296, 87.98 119.212x15.8916
+ strokeColor: "transparent"
+ fillColor: "#ffb9ced3"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 30.29 90.24 C 30.29 90.24 24.88 93.78 16.16 92.84 C 6.17 91.76 4.34 87.98 4.34 87.98 C 4.34 87.98 3.25 95.38 9.27 100.37 C 14.71 104.88 21.56 103.72 31.1 103.78 C 40.64 103.84 104.73 103.75 110.79 103.81 C 115.75 103.86 119.76 102.31 121.88 98.18 C 123.89 94.28 123.43 92.16 123.43 92.16 C 123.43 92.16 119.82 94.4 111.96 93.48 C 105.17 92.69 101.85 89.95 101.85 89.95 C 101.85 89.95 93.22 94.37 78.81 94.19 C 63.71 94 58.58 88.46 58.58 88.46 C 58.58 88.46 53.68 93.1 42.91 92.83 C 32.14 92.56 30.29 90.24 30.29 90.24 " }
+ }
+ } // END type: DOC 0
+}
diff --git a/examples/quick/quickshapes/weatherforecast/SunBehindRainCloud.qml b/examples/quick/quickshapes/weatherforecast/SunBehindRainCloud.qml
new file mode 100644
index 0000000000..9a3c593174
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/SunBehindRainCloud.qml
@@ -0,0 +1,5 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+SunBehindRainCloud_generated {
+}
diff --git a/examples/quick/quickshapes/weatherforecast/SunBehindRainCloud_generated.qml b/examples/quick/quickshapes/weatherforecast/SunBehindRainCloud_generated.qml
new file mode 100644
index 0000000000..130129af53
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/SunBehindRainCloud_generated.qml
@@ -0,0 +1,138 @@
+// Copyright (C) 2023 Googlefonts
+// SPDX-License-Identifier: Apache-2.0
+// Generated from: assets/sun-behind-rain-cloud-svgrepo-com.svg
+import QtQuick
+import QtQuick.Shapes
+
+Item {
+ // viewBox 0, 0 128x128
+ // size 800x800
+ implicitWidth: 800
+ implicitHeight: 800
+ // START type: DOC 0
+ DemoShape { //combined path container
+ transform: [
+ Scale { xScale: width / 128; yScale: height / 128 }
+ ]
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 34.0183, 21.2222 41.6055x42.0205
+ strokeColor: "transparent"
+ fillColor: "#fffcc11a"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 38.29 29.14 C 32.28 36.87 32.38 50.61 40.07 57.41 C 48.8 65.13 61.08 65.06 68.81 57.95 C 78.07 49.43 77.54 35.24 69.35 27.21 C 61.11 19.13 46.4 18.71 38.29 29.14 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 40.5962, 26.2619 9.04604x11.0908
+ strokeColor: "transparent"
+ fillColor: "#fffee269"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 47.95 26.49 C 45.57 25.43 42.97 28.3 41.83 30.27 C 40.7 32.23 39.64 36.08 42.06 37.07 C 44.48 38.05 46.21 36.39 47.95 33.52 C 49.69 30.64 50.67 27.7 47.95 26.49 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 53.8243, 4.29781 11.0661x15.0649
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 54.14 15.71 C 53.56 16.79 53.76 17.62 54.9 17.89 C 56.04 18.16 63.18 19.32 63.78 19.36 C 64.65 19.41 64.98 18.76 64.87 18 C 64.76 17.24 63.02 6.56 62.85 5.58 C 62.69 4.6 61.65 3.62 60.67 4.93 C 59.69 6.24 54.58 14.89 54.14 15.71 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 71.6983, 20.0076 15.3551x12.9961
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 72.6 23.12 C 71.48 23.47 71.51 24.15 72.11 25.03 C 72.71 25.9 76.85 32.22 77.23 32.65 C 77.61 33.09 78.26 33.19 78.81 32.54 C 79.36 31.89 86.16 22.35 86.65 21.76 C 87.47 20.78 86.98 19.74 85.72 20.07 C 84.78 20.32 73.31 22.9 72.6 23.12 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 22.5769, 51.2931 15.2318x13.1453
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 30.12 52.09 C 30.88 50.84 31.86 51.16 32.57 52.36 C 33.05 53.18 37.14 58.68 37.53 59.28 C 37.91 59.88 38.07 61.02 36.88 61.3 C 35.68 61.57 25.93 64.13 24.41 64.4 C 22.89 64.67 22.01 63.47 22.99 62.17 C 23.56 61.4 29.69 52.8 30.12 52.09 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 16.7694, 31.7949 15.2134x11.1614
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 28.06 42.61 C 29.45 43.23 30.11 43.01 30.4 42.01 C 30.78 40.7 31.92 34.71 31.98 33.35 C 32.02 32.46 31.65 31.61 30.29 31.83 C 28.93 32.05 19.13 33.41 17.87 33.85 C 16.42 34.36 16.52 35.96 17.49 36.46 C 18.63 37.06 27.08 42.18 28.06 42.61 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 32.3542, 9.63925 13.1208x15.6136
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 44.99 19.74 C 45.77 19.11 45.53 18.22 44.83 17.72 C 44.12 17.23 35.37 10.9 34.26 10.04 C 33.28 9.28 32.08 9.55 32.41 11.29 C 32.64 12.54 35.43 23.5 35.62 24.25 C 35.84 25.12 36.49 25.56 37.25 25.01 C 38.02 24.48 44.18 20.39 44.99 19.74 " }
+ }
+ // PATH visit count: 27
+ ShapePath {
+ // boundingRect: 19.6233, 35.0519 92.0786x46.5981
+ strokeColor: "transparent"
+ fillColor: "#ffe2ebee"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 99.22 65.16 C 99.22 65.16 102.76 41.69 81.62 36.13 C 58.67 30.09 53.29 51.4 53.29 51.4 C 53.29 51.4 46.61 49.58 40.44 54.54 C 35.61 58.42 34.78 65.26 34.78 65.26 C 34.78 65.26 25.37 64.94 21.33 71.43 C 17.49 77.6 21.33 81.65 21.33 81.65 L 76.87 79.42 L 111.06 79.62 C 111.06 79.62 113.53 73.2 108.78 68.75 C 104.02 64.31 99.22 65.16 99.22 65.16 " }
+ }
+ // PATH visit count: 52
+ ShapePath {
+ // boundingRect: 19.64, 64.4059 92.0852x22.3779
+ strokeColor: "transparent"
+ fillColor: "#ffb9ced3"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 61.29 67.49 C 61.29 67.49 65.54 71.74 76.67 71.03 C 87.8 70.32 93.66 66.38 94.98 65.77 C 96.3 65.16 97.81 63.75 98.32 64.76 C 98.83 65.77 97.71 68.6 96.2 70.63 C 94.68 72.65 93.83 73.88 93.57 74.78 C 93.37 75.49 96.71 76.5 102.98 76.8 C 108.34 77.06 111.72 75.98 111.72 75.98 C 111.72 75.98 111.87 79.35 110.56 81.98 C 109.34 84.41 108.07 85.2 106.05 85.61 C 105.01 85.82 85.38 85.81 68.49 86.21 C 51.6 86.61 29.54 87.32 25.8 86.11 C 22.06 84.9 21.14 82.53 20.66 81.61 C 19.82 80.03 19.64 77.56 19.64 77.56 C 19.64 77.56 23.78 79.64 29.65 78.83 C 35.52 78.02 38.65 74.99 39.46 74.68 C 40.27 74.38 44.11 76.3 50.18 74.78 C 58.66 72.65 61.29 67.49 61.29 67.49 " }
+ }
+ // PATH visit count: 10
+ ShapePath {
+ // boundingRect: 37.616, 90.8719 11.1663x16.7914
+ strokeColor: "transparent"
+ fillColor: "#ff4fc2f7"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 47.26 90.91 C 45.94 90.43 40.21 94.54 38.15 100.02 C 35.11 108.11 45.94 110.81 48.22 103.02 C 49.09 100.06 49.08 91.57 47.26 90.91 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 80.0867, 96.7588 11.3411x16.8179
+ strokeColor: "transparent"
+ fillColor: "#ff4fc2f7"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 90.07 96.81 C 88.9 96.29 84.25 99.83 82.14 102.8 C 80.12 105.64 78.32 110.44 83.28 112.9 C 88.69 115.57 91.15 109.76 91.38 105.54 C 91.59 101.72 91.1 97.27 90.07 96.81 " }
+ }
+ // PATH visit count: 10
+ ShapePath {
+ // boundingRect: 56.5834, 106.381 11.2326x16.7162
+ strokeColor: "transparent"
+ fillColor: "#ff4fc2f7"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 66.52 106.4 C 65.05 106.05 59.41 110.63 57.39 114.9 C 53.34 123.46 65.78 126.48 67.32 118.27 C 68.3 113.06 67.72 106.68 66.52 106.4 " }
+ }
+ // PATH visit count: 10
+ ShapePath {
+ // boundingRect: 58.021, 112.999 4.24576x7.23228
+ strokeColor: "transparent"
+ fillColor: "#ffafe6f8"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 61.24 113.05 C 60.07 112.58 57.79 115.45 58.04 118 C 58.3 120.55 60.4 120.78 61.4 119.37 C 62.74 117.5 62.4 113.51 61.24 113.05 " }
+ }
+ // PATH visit count: 10
+ ShapePath {
+ // boundingRect: 38.6898, 97.5009 4.26287x6.93974
+ strokeColor: "transparent"
+ fillColor: "#ffafe6f8"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 41.68 97.56 C 40.57 97.04 38.67 100.08 38.69 101.65 C 38.74 104.85 41.1 105.06 42.2 103.48 C 43.3 101.91 43.25 98.3 41.68 97.56 " }
+ }
+ // PATH visit count: 10
+ ShapePath {
+ // boundingRect: 81.401, 103.683 4.67559x7.32839
+ strokeColor: "transparent"
+ fillColor: "#ffafe6f8"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 84.83 103.77 C 83.51 103.14 81.24 106.05 81.41 108.16 C 81.71 111.8 84.6 111.58 85.57 109.59 C 86.54 107.6 86.02 104.34 84.83 103.77 " }
+ }
+ } // END type: DOC 0
+}
diff --git a/examples/quick/quickshapes/weatherforecast/SunBehindSmallCloud.qml b/examples/quick/quickshapes/weatherforecast/SunBehindSmallCloud.qml
new file mode 100644
index 0000000000..b9d39522bf
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/SunBehindSmallCloud.qml
@@ -0,0 +1,5 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+SunBehindSmallCloud_generated {
+}
diff --git a/examples/quick/quickshapes/weatherforecast/SunBehindSmallCloud_generated.qml b/examples/quick/quickshapes/weatherforecast/SunBehindSmallCloud_generated.qml
new file mode 100644
index 0000000000..da849732cf
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/SunBehindSmallCloud_generated.qml
@@ -0,0 +1,106 @@
+// Copyright (C) 2023 Googlefonts
+// SPDX-License-Identifier: Apache-2.0
+// Generated from: assets/sun-behind-small-cloud-svgrepo-com.svg
+import QtQuick
+import QtQuick.Shapes
+
+Item {
+ // viewBox 0, 0 128x128
+ // size 800x800
+ implicitWidth: 800
+ implicitHeight: 800
+ // START type: DOC 0
+ DemoShape { //combined path container
+ transform: [
+ Scale { xScale: width / 128; yScale: height / 128 }
+ ]
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 27.7018, 34.4865 57.227x57.809
+ strokeColor: "transparent"
+ fillColor: "#fffcc11a"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 33.58 45.38 C 25.31 56.01 25.45 74.91 36.02 84.27 C 48.03 94.9 64.92 94.79 75.55 85.01 C 88.3 73.29 87.56 53.77 76.3 42.72 C 64.98 31.61 44.74 31.03 33.58 45.38 " }
+ }
+ // PATH visit count: 13
+ ShapePath {
+ // boundingRect: 36.7609, 41.4189 12.4351x15.2413
+ strokeColor: "transparent"
+ fillColor: "#fffee269"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 46.87 41.73 C 43.6 40.28 40.02 44.22 38.46 46.92 C 36.9 49.62 35.45 54.92 38.77 56.27 C 42.09 57.62 44.48 55.34 46.87 51.39 C 49.26 47.44 50.61 43.39 46.87 41.73 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 54.9601, 11.2148 15.2177x20.7191
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 55.39 26.91 C 54.6 28.4 54.87 29.53 56.44 29.91 C 58.01 30.28 67.83 31.88 68.65 31.93 C 69.85 32 70.3 31.11 70.15 30.06 C 70 29.01 67.6 14.32 67.38 12.98 C 67.16 11.64 65.73 10.28 64.38 12.08 C 63.03 13.87 55.99 25.79 55.39 26.91 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 78.1267, 30.7303 20.5286x19.0219
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 79.23 37.03 C 77.75 37.67 77.9 38.61 78.85 39.71 C 79.8 40.81 86.41 48.83 86.99 49.37 C 87.58 49.91 88.49 49.96 89.13 48.98 C 89.77 48 97.65 33.95 98.24 33.06 C 99.21 31.6 98.39 30.26 96.72 30.89 C 95.46 31.38 80.16 36.63 79.23 37.03 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 68.7867, 86.5617 18.1037x20.9806
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 80.19 86.84 C 81.38 86.2 82.44 86.69 82.74 88.04 C 83.04 89.39 86.34 103.17 86.86 105.72 C 87.12 107 85.66 108.04 84.46 107.29 C 83.26 106.54 70.24 97.46 69.4 96.73 C 68.2 95.68 69.03 94.59 69.62 94.03 C 70.82 92.91 79.06 87.44 80.19 86.84 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 42.1527, 94.3999 15.7215x21.5623
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 43.93 94.41 C 42.42 94.27 41.98 95.61 42.21 96.81 C 42.43 98.01 44.68 113.21 44.83 114.34 C 45.05 115.99 46.78 116.66 47.9 115.01 C 49.02 113.36 56.72 101.03 57.34 99.88 C 58.46 97.78 57.64 97.33 56.52 96.81 C 55.39 96.28 45.5 94.56 43.93 94.41 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 11.9586, 75.8565 20.9654x18.0662
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 22.35 76.95 C 23.4 75.23 24.75 75.68 25.72 77.32 C 26.39 78.45 32.01 86.01 32.54 86.83 C 33.06 87.65 33.29 89.23 31.64 89.6 C 29.99 89.97 16.58 93.5 14.48 93.87 C 12.38 94.24 11.18 92.6 12.53 90.8 C 13.32 89.76 21.76 77.93 22.35 76.95 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 3.98342, 49.0428 20.9099x15.3499
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 19.5 63.92 C 21.42 64.77 22.32 64.46 22.72 63.1 C 23.24 61.3 24.82 53.06 24.89 51.19 C 24.94 49.97 24.44 48.79 22.57 49.09 C 20.7 49.39 7.22 51.26 5.5 51.86 C 3.5 52.56 3.64 54.76 4.98 55.46 C 6.54 56.28 18.16 63.32 19.5 63.92 " }
+ }
+ // PATH visit count: 19
+ ShapePath {
+ // boundingRect: 25.4244, 18.5677 18.0479x21.4831
+ strokeColor: "transparent"
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 42.8 32.45 C 43.88 31.59 43.55 30.35 42.58 29.68 C 41.61 29.01 29.57 20.3 28.05 19.12 C 26.7 18.07 25.05 18.45 25.5 20.84 C 25.82 22.56 29.66 37.63 29.92 38.67 C 30.22 39.87 31.12 40.47 32.17 39.72 C 33.22 38.97 41.68 33.35 42.8 32.45 " }
+ }
+ // PATH visit count: 28
+ ShapePath {
+ // boundingRect: 40.2592, 40.77 84.0624x44.63
+ strokeColor: "transparent"
+ fillColor: "#ffe2ebee"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 112.86 68.59 C 112.87 67.94 115.07 45.51 95.37 41.36 C 76.33 37.34 71.34 55.18 71.34 55.18 C 71.34 55.18 64.59 54.35 59.64 58.11 C 54.69 61.88 54.41 68.09 54.41 68.09 C 54.41 68.09 46.45 67.79 42.7 72.22 C 39.31 76.22 40.44 79.83 40.44 79.83 L 62.41 85.4 L 117.94 83.91 L 124.31 80.05 C 124.31 80.05 124.67 75 121.38 71.8 C 116.84 67.4 112.86 68.59 112.86 68.59 " }
+ }
+ // PATH visit count: 34
+ ShapePath {
+ // boundingRect: 40.262, 77.3 84.038x10.2109
+ strokeColor: "transparent"
+ fillColor: "#ffbacdd2"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 61.29 77.3 C 61.29 77.3 55.2 79.98 47.66 79.32 C 43.18 78.93 40.32 77.6 40.32 77.6 C 40.32 77.6 39.55 82.78 43.62 85.33 C 46.67 87.24 49.58 87.53 55 87.51 C 60.42 87.49 109.74 87.39 113.29 87.35 C 116.85 87.31 120.23 86.68 121.96 85.07 C 124.14 83.04 124.3 80.05 124.3 80.05 C 124.3 80.05 120.88 81.07 116.12 80.45 C 111.38 79.83 108.62 77.71 108.62 77.71 C 108.62 77.71 105.21 80.62 87.58 80.94 C 68.56 81.29 61.29 77.3 61.29 77.3 " }
+ }
+ } // END type: DOC 0
+}
diff --git a/examples/quick/quickshapes/weatherforecast/Sun_generated.qml b/examples/quick/quickshapes/weatherforecast/Sun_generated.qml
new file mode 100644
index 0000000000..c5711f12a2
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/Sun_generated.qml
@@ -0,0 +1,119 @@
+// Copyright (C) 2023 Googlefonts
+// SPDX-License-Identifier: Apache-2.0
+// Generated from: assets/sun-svgrepo-com.svg
+import QtQuick
+import QtQuick.Shapes
+
+Item {
+ // viewBox 0, 0 128x128
+ // size 800x800
+ implicitWidth: 800
+ implicitHeight: 800
+ // START svg1524 type: DOC 0
+ DemoShape { //combined path container
+ transform: [
+ Scale { xScale: width / 128; yScale: height / 128 }
+ ]
+ objectName: "svg1524"
+ // skipping DEFS "defs1528"
+ // PATH visit path1504 count: 13
+ ShapePath {
+ objectName: "svg_path:path1504"
+ // boundingRect: 30.5107, 29.1663 67.158x67.8384
+ strokeColor: "#b0ab9d"
+ strokeWidth: 0.888
+ fillColor: "#fffcc11a"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 37.41 41.95 C 27.7 54.43 27.87 76.6 40.28 87.59 C 54.37 100.06 74.2 99.93 86.67 88.46 C 101.62 74.7 100.76 51.8 87.54 38.83 C 74.25 25.79 50.5 25.11 37.41 41.95 " }
+ }
+ // PATH visit path1506 count: 13
+ ShapePath {
+ objectName: "svg_path:path1506"
+ // boundingRect: 41.1383, 37.3059 14.591x17.8796
+ strokeColor: "transparent"
+ fillColor: "#fffee269"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 53 37.67 C 49.16 35.97 44.96 40.6 43.13 43.76 C 41.3 46.93 39.6 53.14 43.5 54.73 C 47.4 56.31 50.2 53.63 53.01 49 C 55.8 44.37 57.39 39.62 53 37.67 " }
+ }
+ // PATH visit path1508 count: 19
+ ShapePath {
+ objectName: "svg_path:path1508"
+ // boundingRect: 62.4917, 1.85223 17.8593x24.3131
+ strokeColor: "#b0ab9d"
+ strokeWidth: 0.888
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 63 20.27 C 62.07 22.01 62.38 23.35 64.23 23.79 C 66.08 24.23 77.59 26.1 78.56 26.16 C 79.97 26.25 80.49 25.19 80.32 23.96 C 80.14 22.73 77.33 5.5 77.07 3.92 C 76.81 2.34 75.14 0.76 73.55 2.87 C 71.96 4.98 63.7 18.96 63 20.27 " }
+ }
+ // PATH visit path1510 count: 19
+ ShapePath {
+ objectName: "svg_path:path1510"
+ // boundingRect: 91.3437, 27.2032 24.7856x20.9868
+ strokeColor: "#b0ab9d"
+ strokeWidth: 0.888
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 92.8 32.23 C 90.99 32.79 91.04 33.9 92.01 35.31 C 92.98 36.72 99.66 46.91 100.27 47.62 C 100.89 48.32 101.94 48.5 102.82 47.44 C 103.7 46.39 114.68 30.99 115.48 30.03 C 116.8 28.45 116.01 26.78 113.99 27.3 C 112.45 27.71 93.94 31.88 92.8 32.23 " }
+ }
+ // PATH visit path1512 count: 19
+ ShapePath {
+ objectName: "svg_path:path1512"
+ // boundingRect: 100.595, 61.4539 24.575x18.2962
+ strokeColor: "#b0ab9d"
+ strokeWidth: 0.888
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 106.6 61.86 C 105.3 61.12 103.61 61.33 103.17 63 C 102.73 64.67 100.8 76.8 100.62 77.86 C 100.44 78.92 101.24 79.97 102.55 79.71 C 103.86 79.45 122 76.76 123.21 76.46 C 125.32 75.93 126.02 73.82 123.83 72.24 C 122.41 71.21 107.83 62.56 106.6 61.86 " }
+ }
+ // PATH visit path1514 count: 19
+ ShapePath {
+ objectName: "svg_path:path1514"
+ // boundingRect: 78.7207, 90.2732 21.2359x24.6316
+ strokeColor: "#b0ab9d"
+ strokeWidth: 0.888
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 92.09 90.6 C 93.49 89.85 94.73 90.42 95.08 92.01 C 95.43 93.59 99.3 109.77 99.92 112.76 C 100.23 114.26 98.51 115.49 97.11 114.61 C 95.7 113.73 80.42 103.08 79.44 102.21 C 78.03 100.98 79.01 99.7 79.7 99.05 C 81.1 97.72 90.77 91.31 92.09 90.6 " }
+ }
+ // PATH visit path1516 count: 19
+ ShapePath {
+ objectName: "svg_path:path1516"
+ // boundingRect: 47.4529, 99.4674 18.4556x25.2985
+ strokeColor: "#b0ab9d"
+ strokeWidth: 0.888
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 49.54 99.48 C 47.77 99.31 47.25 100.89 47.52 102.29 C 47.78 103.7 50.42 121.53 50.6 122.86 C 50.86 124.79 52.89 125.59 54.2 123.65 C 55.51 121.71 64.55 107.25 65.28 105.89 C 66.6 103.43 65.63 102.9 64.31 102.29 C 63 101.68 51.39 99.66 49.54 99.48 " }
+ }
+ // PATH visit path1518 count: 19
+ ShapePath {
+ objectName: "svg_path:path1518"
+ // boundingRect: 12.0424, 77.7167 24.6027x21.2165
+ strokeColor: "#b0ab9d"
+ strokeWidth: 0.888
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 24.23 79 C 25.46 76.98 27.04 77.51 28.19 79.44 C 28.97 80.76 35.57 89.64 36.19 90.6 C 36.81 91.57 37.07 93.41 35.14 93.85 C 33.19 94.3 17.46 98.43 15 98.87 C 12.54 99.31 11.13 97.38 12.71 95.27 C 13.63 94.03 23.53 80.15 24.23 79 " }
+ }
+ // PATH visit path1520 count: 19
+ ShapePath {
+ objectName: "svg_path:path1520"
+ // boundingRect: 2.66887, 46.235 24.5552x18.0221
+ strokeColor: "#b0ab9d"
+ strokeWidth: 0.888
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 20.89 63.7 C 23.14 64.7 24.2 64.34 24.67 62.73 C 25.29 60.62 27.13 50.95 27.22 48.75 C 27.28 47.32 26.69 45.94 24.49 46.29 C 22.29 46.64 6.47 48.85 4.45 49.55 C 2.1 50.37 2.27 52.95 3.83 53.77 C 5.68 54.74 19.3 63 20.89 63.7 " }
+ }
+ // PATH visit path1522 count: 19
+ ShapePath {
+ objectName: "svg_path:path1522"
+ // boundingRect: 27.8408, 10.482 21.1791x25.207
+ strokeColor: "#b0ab9d"
+ strokeWidth: 0.888
+ fillColor: "#ffffa722"
+ fillRule: ShapePath.WindingFill
+ PathSvg { path: "M 48.23 26.78 C 49.5 25.77 49.11 24.32 47.97 23.53 C 46.83 22.74 32.71 12.53 30.92 11.13 C 29.34 9.9 27.4 10.34 27.93 13.15 C 28.31 15.17 32.81 32.85 33.12 34.07 C 33.47 35.48 34.53 36.18 35.76 35.3 C 36.97 34.43 46.91 27.84 48.23 26.78 " }
+ }
+ } // END svg1524 type: DOC 0
+}
diff --git a/examples/quick/quickshapes/weatherforecast/assets/Europe.svg b/examples/quick/quickshapes/weatherforecast/assets/Europe.svg
new file mode 100644
index 0000000000..2717687f51
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/Europe.svg
@@ -0,0 +1,395 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xml:space="preserve"
+ width="443.42206"
+ height="455.37424"
+ viewBox="1754 161 6480.483 6957.5929"
+ version="1.0"
+ id="Europakarte"
+ sodipodi:version="0.32"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ sodipodi:docname="Europe.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ style="fill:none;enable-background:new"
+ 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"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"><sodipodi:namedview
+ inkscape:window-height="1833"
+ inkscape:window-width="2935"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="2.8284271"
+ inkscape:cx="147.78532"
+ inkscape:cy="236.88077"
+ inkscape:window-x="1670"
+ inkscape:window-y="50"
+ inkscape:current-layer="countries"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ showgrid="false"
+ inkscape:pagecheckerboard="0"
+ inkscape:window-maximized="0"
+ fit-margin-top="5"
+ fit-margin-left="5"
+ fit-margin-right="5"
+ fit-margin-bottom="5"><inkscape:grid
+ type="xygrid"
+ id="grid2717"
+ originx="-1559.5366"
+ originy="-991.63777" /></sodipodi:namedview>
+ <metadata
+ id="metadata"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF>
+ </metadata>
+
+ <defs
+ style="fill:none"
+ id="defs">
+ <inkscape:perspective
+ id="perspective81"
+ inkscape:persp3d-origin="340 : -814.07375 : 1"
+ inkscape:vp_z="680 : -727.40708 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : -727.40708 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <style
+ id="style10"
+ type="text/css">
+ * { fill:none; }
+ path { fill:#C0C0C0; stroke:white; stroke-width:8; }
+ .europe {}
+ .eu {}
+ #ad {}
+ #al {}
+ #am {}
+ #at {}
+ #az {}
+ #ba {}
+ #be {}
+ #bg {}
+ #by {}
+ #ch {}
+ #cs {}
+ #cy {}
+ #cz {}
+ #de {}
+ #dk {}
+ #dz {}
+ #ee {}
+ #es {}
+ #fi {}
+ #fr {}
+ #gb {}
+ #ge {}
+ #gl {}
+ #gr {}
+ #hr {}
+ #hu {}
+ #ie {}
+ #il {}
+ #iq {}
+ #ir {}
+ #is {}
+ #it {}
+ #jo {}
+ #kz {}
+ #lb {}
+ #li {}
+ #lt {}
+ #lu {}
+ #lv {}
+ #ma {}
+ #mc {}
+ #md {}
+ #mk {}
+ #mt {}
+ #nl {}
+ #no {}
+ #pl {}
+ #pt {}
+ #rs {}
+ #rs-km {}
+ #ro {}
+ #ru {}
+ #ru-kgd {}
+ #sa {}
+ #se {}
+ #si {}
+ #sk {}
+ #sm {}
+ #sy {}
+ #tm {}
+ #tn {}
+ #tr {}
+ #ua {}
+ </style>
+ <style
+ type="text/css"
+ id="style2412">
+ * { fill:none; }
+ path { fill:#C0C0C0; stroke:white; stroke-width:8; }
+
+ .gmt /* GMT/WET (UTC) */
+ { fill:#5F61BF; }
+ .gmt-nodst
+ { fill:#C0BFFD; }
+
+ .cet /* CET (UTC+1) */
+ { fill:#C15F61; }
+ .cet-nodst
+ { fill:#FBBFC0; }
+
+ .eet /* EET (UTC+2) */
+ { fill:#D7D65C; }
+
+ .msk /* MSK (UTC+3) */
+ { fill:#5EBF5F }
+ </style>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : -461.226 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09449 : -461.226 : 1"
+ inkscape:persp3d-origin="372.04724 : -636.6197 : 1"
+ id="perspective2459" /><inkscape:perspective
+ id="perspective2460"
+ inkscape:persp3d-origin="372.04724 : -636.6197 : 1"
+ inkscape:vp_z="744.09449 : -461.226 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : -461.226 : 1"
+ sodipodi:type="inkscape:persp3d" /></defs><g
+ style="display:inline;opacity:1;fill:none"
+ inkscape:label="countries"
+ id="countries"
+ inkscape:groupmode="layer"
+ transform="translate(-1630.407,-991.63776)"><path
+ id="fi"
+ class="eu europe"
+ d="m 7814.2981,3152.6347 c 8.599,-32.9629 35.8292,-67.3588 53.0271,-96.0222 44.4282,-78.824 71.6583,-169.1135 101.7548,-253.6703 22.9306,-61.6261 30.0965,-77.391 32.9628,-143.3165 1.4332,-10.0322 7.1658,-21.4975 2.8663,-31.5297 -11.4653,-32.9628 -139.0171,-80.2573 -171.9798,-103.1879 -4.2995,-2.8663 47.2944,-81.6905 11.4653,-108.9207 -12.8985,-10.032 -40.1287,0 -48.7276,-14.3315 -37.2624,-64.4925 8.5989,-34.3961 -2.8663,-53.0273 -17.198,-25.7969 -35.8292,-5.7325 -57.3266,-31.5296 -18.6312,-21.4975 -5.7327,-22.9305 4.2995,-42.9949 5.7325,-12.8985 -28.6634,-12.8985 -28.6634,-18.6312 1.4332,-10.0322 1.4332,-61.6261 1.4332,-63.0593 -30.0966,-25.7969 5.7326,-10.0322 14.3317,-20.0642 5.7326,-8.599 -30.0966,-60.1931 -34.3961,-65.9258 -24.3637,-32.9627 -51.5939,-71.6582 -80.2572,-100.3215 -4.2995,-4.2995 -27.2302,-21.4974 -31.5297,-30.0964 -21.4975,-40.1286 47.2945,-141.8835 20.0644,-166.2473 -7.1659,-8.5989 -20.0644,-8.5989 -28.6634,-14.3316 -15.7647,-11.4654 -22.9306,-31.5297 -38.6954,-41.5619 -1.4332,0 -50.1608,-7.1658 -51.594,-7.1658 -8.599,-7.1659 -11.4653,-18.6311 -17.198,-28.6633 -31.5297,-51.5939 5.7327,-47.2944 -10.0322,-84.5568 -7.1658,-17.1979 -34.3959,-1.4332 -28.6632,-11.4652 7.1657,-12.8987 17.1979,-21.4976 25.7969,-32.9629 -45.8613,-21.4975 14.3317,-55.8935 -4.2995,-87.4232 -28.6633,-50.1607 -73.0915,-31.5295 -110.3537,-71.6583 l -1.4332,-7.1657 c -1.4332,0 -2.8663,0 -4.2995,1.4332 0,-1.4332 -1.4332,-1.4332 -1.4332,-2.8665 v 2.8665 c -28.6632,5.7325 -22.9307,38.6954 -47.2944,45.8613 -21.4975,5.7326 -12.8985,-24.3639 -37.2624,2.8663 -2.8662,4.2995 0,11.4652 -1.4332,17.1979 -1.433,1.4333 -17.1979,31.5297 -17.1979,32.9629 -4.2995,11.4653 4.2995,48.7276 5.7327,58.7598 0,4.2995 -2.8663,7.1658 -2.8663,11.4653 0,8.599 1.4331,15.7647 2.8663,24.3639 4.2995,11.4652 14.3317,20.0642 15.7647,31.5296 7.1659,50.1607 -5.7325,15.7648 -22.9305,31.5295 -20.0644,20.0644 -1.4332,25.7971 -7.1659,50.1608 -1.4332,5.7328 -7.1658,8.599 -8.599,14.3317 0,1.4332 -18.6312,-15.7647 -21.4975,-17.1979 -4.2994,-2.8663 -57.3265,-21.4975 -61.626,-15.7649 -5.7327,5.7327 -1.4333,17.1981 -5.7327,22.9306 -17.198,30.0966 -40.1287,11.4654 -64.4926,15.7649 -7.1657,0 -14.3316,4.2995 -20.0642,2.8663 l -5.7327,-4.2995 c -2.8663,-5.7327 -2.8663,-14.3317 -5.7327,-20.0642 -10.0321,-17.1981 -42.9949,-61.6263 -60.1929,-71.6583 -37.2623,-21.4976 -38.6956,8.599 -35.8291,31.5296 l -8.599,30.0965 c 0,0 1.4331,0 1.4331,0 l -1.4331,1.4332 5.7325,7.1658 c -1.433,2.8662 -7.1657,4.2995 0,8.599 24.3639,18.6311 65.9258,53.0271 91.7227,64.4925 30.0965,12.8984 54.4603,1.433 81.6905,28.6632 5.7326,4.2995 1.4331,17.198 7.1658,20.0644 4.2995,1.433 7.1657,-5.7327 10.0322,-4.2995 11.4652,4.2995 15.7647,18.6312 24.3637,27.2301 2.8664,2.8663 11.4654,2.8663 10.0322,7.1658 -15.7648,30.0965 1.4332,31.5297 5.7327,65.9256 1.4332,5.7327 -4.2995,11.4654 -4.2995,17.198 0,0 0,0 0,0 0,0 0,0 0,0 -1.4332,1.4332 -1.4332,1.4332 -1.4332,1.4332 0,0 0,0 0,0 0,14.3317 21.4975,2.8663 27.2302,8.599 18.6311,14.3316 -11.4653,34.396 -2.8663,48.7276 8.599,20.0644 42.9949,38.6955 45.8612,61.6262 1.4332,17.198 -11.4653,71.6583 -10.0321,78.8241 12.8985,45.8613 44.4281,61.6261 61.6261,98.8884 5.7327,-10.0322 12.8985,-18.6312 32.9629,-7.1659 10.032,5.7327 4.2995,25.7971 14.3315,31.5296 8.599,5.7327 20.0644,-5.7325 30.0966,-2.8662 4.2995,0 4.2995,8.5989 7.1658,11.4654 8.5989,4.2995 8.5989,-12.8986 17.1979,1.433 15.7649,32.9629 4.2995,61.6261 10.0322,75.9578 4.2995,12.8985 42.9949,-15.7647 25.797,25.797 -4.2995,10.0322 -18.6312,7.1659 -27.2302,12.8986 -8.599,5.7325 -18.6312,10.032 -24.3637,18.631 -2.8664,2.8664 1.433,10.0322 -1.4332,12.8986 -2.8663,2.8663 -10.0322,-4.2995 -11.4653,-1.4332 -4.2995,10.0322 -5.7327,22.9307 -5.7327,34.396 0,7.1659 4.2995,14.3316 1.4332,21.4974 -1.4332,12.8986 -18.6312,18.6312 -21.4976,30.0966 -2.8663,8.599 4.2995,18.6312 1.4332,25.7969 -7.1657,15.7648 -22.9306,12.8985 -24.3637,34.396 -1.4332,4.2995 7.1658,8.599 7.1658,14.3317 -4.2995,27.2301 -42.995,22.9306 -44.4282,47.2944 -1.4332,10.0322 -8.5989,35.8291 -10.0322,37.2623 -5.7327,0 -12.8984,-14.3317 -18.6311,-10.0322 -12.8985,11.4654 7.1659,40.1287 -5.7326,48.7278 -4.2996,2.8663 -12.8986,-15.7649 -11.4654,-10.0322 0,7.1658 10.0322,10.0322 12.8985,17.1979 12.8984,47.2945 -4.2995,15.7648 -24.3638,38.6955 -4.2995,5.7327 4.2995,20.0644 -1.4332,20.0644 -8.599,-1.4333 -4.2995,-18.6312 -11.4652,-20.0644 -11.4654,-2.8663 -25.7971,1.4332 -31.5297,11.4654 -22.9307,38.6954 25.797,11.4652 22.9305,34.3959 -2.8662,14.3317 -40.1286,38.6954 -41.5617,54.4603 -7.1659,94.589 1.4331,-2.8663 15.7648,32.9629 1.4332,1.4331 -12.8985,27.23 -1.4331,34.3959 1.4331,1.4332 4.2995,-5.7327 5.7326,-4.2995 2.8664,4.2995 -1.4331,14.3317 4.2995,15.7648 2.8664,1.4332 -2.8663,-12.8985 1.4332,-12.8985 4.2995,-1.4332 5.7327,4.2995 7.1658,8.599 8.5989,22.9307 -1.4331,60.193 2.8664,68.792 2.8663,5.7327 11.4652,2.8663 15.7647,7.1658 5.7327,7.1659 8.599,15.7649 12.8985,22.9306 1.4332,2.8665 -1.4331,7.1659 0,10.0322 2.8664,4.2995 8.599,4.2995 11.4654,7.1658 1.4331,1.4332 -5.7327,0 -5.7327,1.4332 -1.4332,2.8663 1.4332,5.7327 2.8663,8.599 7.1659,8.599 22.9307,12.8985 21.4976,22.9307 -1.4332,8.5989 -24.3639,1.4332 -25.7971,10.0322 -2.8663,11.4652 14.3317,18.6311 17.1981,28.6632 1.4331,4.2995 -5.7327,8.599 -4.2996,14.3317 1.4332,2.8662 10.0322,2.8662 10.0322,7.1659 -1.4331,18.631 -15.7648,-1.4332 -10.0322,14.3315 1.4332,5.7327 8.5991,10.0322 7.1659,14.3317 -1.4332,5.7327 -15.7649,-1.4332 -17.198,2.8663 -1.4332,37.2623 14.3317,41.5618 25.797,57.3267 2.8662,2.8663 -11.4653,5.7326 -8.599,10.0321 1.4332,7.1659 4.2995,12.8986 8.599,18.6312 31.5296,41.5618 7.1657,-1.4331 37.2623,-7.1658 5.7326,0 -5.7327,15.7647 0,20.0642 8.599,4.2995 18.6311,-2.8662 28.6632,-2.8662 8.599,1.4332 12.8985,15.7649 20.0644,15.7649 7.1658,0 10.0322,-8.5992 15.7648,-8.5992 2.8664,-1.433 0,4.2995 1.4332,5.7327 4.2995,1.4332 7.1658,0 11.4653,-1.4332 1.4332,-1.4331 1.4332,-10.032 2.8664,-7.1658 14.3317,31.5297 -8.599,37.2624 -2.8664,38.6955 2.8664,0 35.8291,-24.3638 40.1286,-27.23 1.4332,-1.4333 4.2995,-8.5992 5.7327,-10.0322 0,0 0,0 0,0 -7.1658,21.4974 -25.7969,45.8613 8.599,58.7598 5.7327,2.8662 17.1979,-10.0322 20.0644,-4.2995 2.8663,8.599 -20.0644,21.4974 -11.4654,24.3637 8.5989,4.2995 7.1659,-20.0642 15.7649,-21.4974 7.1657,-1.4333 1.433,14.3316 -1.4332,20.0642 -4.2995,7.1659 -12.8985,10.0322 -20.0643,15.7649 -2.8664,4.2995 -14.3317,14.3317 -10.0322,11.4653 44.4281,-17.198 27.2302,-45.8612 50.1608,-60.1929 7.1658,-4.2995 -11.4654,18.6312 -4.2995,22.9307 10.0321,5.7325 22.9306,-1.4333 32.9628,-7.166 7.1659,-2.8662 10.0322,-14.3315 15.7649,-18.6311 8.5989,-7.1658 47.2944,-11.4653 51.5939,-17.198 4.2995,-4.2995 -10.0322,-11.4653 -5.7327,-15.7648 7.1659,-5.7327 18.6311,-1.4332 28.6633,-2.8664 2.8663,0 8.599,1.4332 10.0322,-1.4331 2.8663,-4.2994 -2.8664,-10.0321 -1.4332,-12.8984 1.4332,-2.8664 1.4332,7.1657 4.2995,8.599 1.4332,1.433 38.6956,-21.4975 41.5618,-25.797 1.4333,-1.4332 -5.7327,-30.0966 8.599,-27.2301 2.8663,0 55.8934,48.7276 42.9949,-4.2995 -2.8662,-10.0322 -28.6632,-11.4654 -24.3637,-22.9307 2.8663,-10.0322 21.4975,-4.2995 31.5297,-1.4332 5.7325,1.4332 5.7325,17.1979 11.4652,14.3317 14.3317,-10.0322 -7.1658,-58.7598 10.0322,-48.7277 14.3317,10.0321 -24.3639,45.8612 20.0643,31.5297 68.792,-22.9307 10.0322,-8.599 24.3638,-30.0966 1.4332,-1.4331 2.8663,2.8664 5.7327,2.8664 2.8663,0 7.1658,0 8.599,-2.8664 1.4332,-2.8663 -4.2995,-12.8985 0,-12.8985 1.4332,0 24.3638,20.0644 31.5297,17.198 10.0322,-2.8663 17.1979,-11.4653 22.9306,-18.631 1.4331,0 1.4331,-1.4332 1.4331,-2.8664 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="ccccccccccccccsscccccccsccccscccccccscccssscccccccccccccccccsccccccccccccsccccccscsssccccccccsccccccccccscccscsssscscscccscccscccscccccscccccsccccscccccsssscccsccccssscccc" /><path
+ id="se"
+ class="eu europe"
+ d="m 6447.058,4352.1943 c 2.8665,-8.599 -2.8663,-12.8984 -11.4652,-17.1979 l -5.7327,-14.3317 c 11.4654,7.1657 30.0964,11.4652 24.3638,24.3639 0,2.8662 -2.8664,5.7325 -7.1659,7.1657 z m 5.7327,-65.9256 c 20.0644,-22.9306 -2.8662,-21.4974 -4.2995,-50.1608 0,-8.599 8.599,-14.3317 10.0322,-22.9306 0,-2.8663 -5.7327,-5.7328 -7.1659,-8.599 -18.6312,-2.8663 -42.9949,-8.599 -58.7598,2.8662 15.7649,-20.0642 42.9951,-14.3315 64.4925,-10.032 -11.4652,-18.6312 -18.6312,-32.9629 -15.7647,-35.8291 5.7325,-12.8987 25.7969,15.7647 38.6954,10.032 11.4653,-4.2995 -28.6634,-21.4975 -22.9307,-32.9627 4.2995,-10.0322 24.3639,1.4331 28.6634,-7.1659 7.1658,-10.0321 2.8663,-24.3638 -2.8664,-34.396 -2.8663,-5.7327 -11.4653,-1.4332 -17.198,-2.8662 -11.4653,-4.2995 -8.599,-24.3639 -17.198,-34.3961 -5.7327,-7.1658 -17.1979,-7.1658 -22.9306,-14.3317 -2.8663,-5.7326 1.4332,-12.8985 -1.4332,-18.631 -2.8663,-7.1659 -20.0643,-30.0966 -20.0643,-31.5297 0,-2.8664 5.7327,-4.2995 4.2995,-5.7327 -1.4332,-2.8663 -7.1658,-1.4332 -10.0322,-2.8663 -7.1658,-5.7327 -12.8985,-14.3316 -17.198,-21.4976 -7.1657,-12.8984 1.4333,-47.2944 -8.5989,-63.0593 -2.8663,-4.2995 -12.8985,1.4332 -17.198,-2.8662 -4.2995,-5.7327 -2.8664,-15.7648 -2.8664,-24.3638 -2.8663,-21.4976 37.2623,-71.6583 18.6312,-94.5889 -25.797,-32.9629 -11.4653,55.8934 -65.9256,1.433 -8.599,-8.5989 5.7327,-34.3959 5.7327,-44.4281 -1.4332,-17.198 -18.6312,-81.6903 -18.6312,-81.6903 5.7327,-7.1659 20.0642,5.7325 28.6632,4.2995 4.2995,14.3315 10.0322,28.6632 22.9307,10.032 31.5296,-44.4281 -8.599,-101.7547 0,-127.5517 2.8664,-10.0321 17.198,-11.4654 21.4976,-20.0643 2.8663,-5.7326 0,-12.8985 -2.8664,-18.6312 0,-4.2995 -7.1658,-5.7326 -5.7327,-8.599 2.8664,-10.0321 48.7277,-12.8985 61.6262,-45.8612 l -1.4332,-41.5618 c 15.7647,-81.6905 -21.4975,-65.9256 -28.6634,-127.5519 -1.4331,-14.3315 27.2302,-7.1657 38.6956,-17.1979 l 15.7647,-57.3266 c -5.7325,-35.8292 -60.1928,-32.9629 -68.7918,-65.9256 -7.1659,-30.0966 15.7647,-70.2252 12.8984,-101.7549 -2.8664,-21.4974 -25.797,-40.1286 -27.2301,-61.6261 -1.4332,-8.5989 5.7327,-18.6311 5.7327,-27.2301 -1.4332,-10.0321 -7.1659,-18.6312 -5.7327,-28.6632 0,-8.599 10.0322,-14.3317 10.0322,-22.9307 0,-173.413 -21.4976,127.5517 -21.4976,-45.8613 0,-15.7648 20.0644,-25.797 21.4976,-41.5619 1.4331,-5.7326 -7.1659,-11.4653 -5.7327,-18.6312 4.2995,-22.9305 35.8291,-71.6583 54.4603,-83.1235 58.7598,-37.2624 97.4552,30.0964 107.4874,-37.2624 10.0321,-70.225 -50.1608,-55.8934 -41.5618,-81.6903 12.8985,-40.1286 32.9628,-80.2573 45.8613,-118.9528 1.4331,-5.7327 8.599,-7.1658 10.0321,-12.8985 l -4.2995,-53.0271 c 0,-1.4332 7.1659,-44.4281 7.1659,-44.4281 l -14.3317,-55.8936 c 5.7327,-12.8985 28.6634,0 40.1286,-5.7325 l 31.5297,-27.2302 c 4.2995,-12.8985 -14.3317,-24.3639 -11.4653,-37.2623 8.599,-25.797 55.8934,-81.6905 64.4924,-106.0543 15.7649,-38.6955 -21.4975,-41.5618 -27.2302,-73.0915 -4.2995,-25.7969 11.4654,-10.0322 20.0644,-20.0643 11.4653,-14.3316 11.4653,-34.396 14.3317,-50.1607 1.4331,-11.4654 28.6632,-61.6263 37.2622,-61.6263 l 45.8614,20.0644 c 28.6633,-11.4654 -7.1658,-93.1557 1.4332,-104.6211 20.0642,-25.797 118.9527,22.9306 131.8511,14.3317 47.2946,-30.0965 -2.8662,-27.2302 -4.2995,-40.1287 -4.2994,-17.1979 20.0644,-30.0964 20.0644,-47.2944 0,-10.0322 -2.8664,-20.0644 -7.1659,-28.6633 -4.2995,-7.1658 -22.9307,-11.4653 -18.631,-18.6312 5.7325,-10.0322 21.4974,-2.8663 32.9627,-5.7327 h 2.8664 c 4.2995,2.8664 11.4653,2.8664 17.198,7.1659 17.198,11.4652 -5.7327,10.0322 5.7325,17.198 24.3639,18.6311 65.9258,53.0271 91.7227,64.4925 30.0965,12.8984 54.4603,1.433 81.6905,28.6632 5.7326,4.2995 1.4331,17.198 7.1658,20.0644 4.2995,1.433 7.1657,-5.7327 10.0322,-4.2995 11.4652,4.2995 15.7647,18.6312 24.3637,27.2301 2.8664,2.8663 11.4654,2.8663 10.0322,7.1658 -15.7648,30.0965 1.4332,31.5297 5.7327,65.9256 1.4332,5.7327 -4.2995,11.4654 -4.2995,17.198 -2.8664,17.1981 18.6312,4.2995 25.797,10.0322 18.6311,14.3316 -11.4653,34.396 -2.8663,48.7276 8.599,20.0644 42.9949,38.6955 45.8612,61.6262 1.4332,17.198 -11.4653,71.6583 -10.0321,78.8241 12.8985,45.8613 44.4281,61.6261 61.6261,98.8884 -4.2995,5.7327 -8.599,12.8985 -14.3317,15.7648 -5.7327,2.8664 -10.0322,-11.4653 -17.1979,-10.0321 -2.8663,1.4331 -4.2995,8.599 -7.1658,8.599 -11.4654,1.4331 -24.3639,-8.599 -34.3961,-2.8664 -7.1658,4.2995 4.2995,21.4976 -2.8663,25.7971 -30.0964,18.631 -40.1286,-15.7649 -61.6261,-20.0644 -2.8664,0 2.8663,8.599 2.8663,12.8984 0,2.8665 1.4332,5.7328 0,8.599 -1.4332,10.0322 -10.0322,18.6312 -7.1657,27.2302 0,1.4332 1.0302,3.4038 -0.5785,3.3619 -6.2271,-0.1621 -16.6197,-3.3619 -25.2186,-7.6614 -4.2995,-1.4332 -8.599,-12.8985 -10.0321,-8.599 -2.8664,15.7649 35.8292,10.0322 38.6954,25.797 2.8663,8.5989 -17.1979,2.8664 -25.7969,7.1659 -1.4332,1.433 4.2995,1.433 7.1658,1.433 1.4332,1.4333 17.1979,11.4655 8.5989,18.6312 -1.433,1.4332 -2.8662,-7.1657 -5.7325,-5.7327 -1.4332,1.4332 4.2995,7.1659 1.433,8.5991 -11.4652,7.1658 -44.4281,0 -50.1608,21.4975 0,4.2995 8.599,0 11.4654,1.4331 10.0322,7.1659 18.6312,17.1981 22.9307,28.6633 8.599,25.797 -34.3961,37.2624 -35.8292,65.9256 -1.4332,34.3961 45.8612,37.2624 57.3266,63.0593 1.4333,1.4332 -28.6633,38.6956 -34.3959,51.5941 -8.599,17.1979 -11.4654,87.423 -28.6634,90.2894 -2.8662,0 -2.8662,-10.0322 -5.7327,-8.5991 -10.032,1.4332 4.2995,24.3639 -5.7325,28.6634 -4.2995,2.8663 -2.8664,-17.198 -7.1659,-14.3317 -1.4332,0 -1.4332,1.4332 -1.4332,2.8664 h -1.4331 c -2.8664,4.2995 2.8663,12.8985 -1.4332,15.7648 -4.2995,5.7327 -21.4975,2.8662 -25.797,11.4654 -4.2995,5.7325 -2.8662,17.1979 -10.0322,20.0642 -8.5989,2.8663 -21.4974,-12.8985 -27.2301,-5.7327 -5.7327,8.599 15.7649,20.0644 11.4654,30.0966 -4.2995,7.1658 -14.3317,-14.3317 -20.0644,-10.0322 -7.1658,5.7327 1.4332,17.198 0,25.7969 -1.4332,10.0322 -2.8663,24.3639 -12.8985,30.0965 -8.599,4.2995 -18.6312,-10.0321 -28.6634,-8.599 -5.7325,0 12.8987,4.2995 14.3317,10.0322 1.4332,2.8663 -5.7327,4.2995 -8.5989,4.2995 -2.8663,0 4.2994,-7.1658 1.4332,-10.0322 -2.8665,-1.4331 -8.599,-1.4331 -10.0322,1.4332 -1.4332,4.2995 8.599,8.599 5.7327,12.8985 -2.8665,2.8664 -11.4654,-5.7327 -15.7649,-1.4332 -2.8663,2.8664 7.1659,4.2996 8.599,8.5991 0,1.4331 -5.7326,-1.4332 -7.1658,0 -2.8663,5.7326 0,15.7648 -4.2995,20.0642 -5.7327,5.7327 -27.2302,1.4333 -21.4975,5.7327 8.599,7.1658 34.396,-4.2994 31.5297,5.7327 -4.2995,11.4653 -17.198,18.6311 -24.3639,28.6633 -2.8663,2.8663 -5.7327,8.599 -10.0322,10.0322 -4.2995,1.4332 -12.8985,0 -12.8985,-4.2995 1.4333,-4.2995 11.4654,-1.4332 12.8985,-5.7327 4.2995,-8.599 -11.4652,2.8663 -17.1979,4.2995 1.4332,4.2995 4.2994,8.5989 7.1659,12.8984 4.2995,10.0322 11.4652,37.2624 0,34.3961 -2.8665,0 -1.4332,-14.3317 -4.2995,-11.4654 -4.2995,7.1659 1.433,18.6312 -4.2995,25.797 -1.4332,4.2994 -8.5991,-1.4331 -12.8986,-1.4331 -10.0321,1.4331 -22.9306,0 -31.5297,5.7325 -22.9305,17.1982 15.7649,24.3639 32.9629,44.4283 1.4332,1.4331 -5.7327,2.8663 -7.1658,1.4331 0,-1.4331 -4.2995,-1.4331 -4.2995,0 -1.4332,11.4654 1.4331,22.9307 0,34.3961 -1.4332,7.1657 -7.1659,12.8984 -8.599,20.0642 -1.4332,8.599 -1.4332,17.198 1.4331,25.797 0,1.4332 4.2995,-2.8663 5.7327,-1.4331 5.7327,10.032 21.4975,24.3637 12.8985,32.9627 -8.599,8.599 -21.4975,-15.7648 -32.9629,-11.4653 -32.9627,11.4653 22.9307,41.5619 18.6312,73.0914 0,5.7327 -14.3317,-2.8663 -14.3317,1.4332 -1.4331,7.1659 10.0322,8.599 11.4654,14.3317 1.4332,2.8663 -5.7327,1.4332 -5.7327,4.2995 0,5.7327 0,12.8985 2.8664,18.6312 1.4331,5.7327 0,12.8984 2.8663,18.6311 1.4332,2.8663 7.1658,-2.8664 7.1658,0 1.4332,1.4331 -5.7326,1.4331 -7.1658,2.8663 -1.4332,2.8663 -1.4332,7.1658 0,10.0322 2.8663,7.1658 12.8985,11.4653 14.3317,20.0643 1.4331,8.5989 -7.1659,17.1979 -5.7327,25.797 0,2.8663 4.2995,-1.4332 7.1658,0 4.2995,1.4331 1.4332,11.4653 5.7327,11.4653 15.7649,0 45.8613,-8.599 60.193,0 5.7325,2.8663 0,12.8985 2.8663,18.6312 4.2995,8.599 12.8984,14.3317 21.4974,20.0642 1.4332,1.4332 7.1659,-4.2995 8.599,-1.433 2.8664,2.8662 -4.2995,8.5989 -1.4331,10.032 1.4331,0 74.5246,-28.6632 35.8292,14.3317 -5.7327,7.1659 -18.6312,-12.8985 -27.2302,-10.0322 -7.1659,2.8664 10.0321,8.5991 14.3317,14.3317 5.7326,8.599 7.1658,21.4974 15.7648,27.2301 4.2995,1.4333 7.1657,-14.3316 12.8984,-11.4652 7.166,2.8663 2.8663,15.7647 8.599,20.0642 21.4975,24.3639 37.2624,8.599 32.9629,47.2946 -1.4332,14.3317 -14.3317,-1.4332 -15.7649,-1.4332 -7.1658,1.4332 -8.599,10.0322 -14.3316,14.3317 -12.8986,14.3316 0,27.2301 -40.1286,45.8613 -1.4332,1.4331 7.1658,14.3315 7.1658,15.7647 -2.8663,4.2995 -10.0322,-2.8662 -15.7649,-1.4332 -10.0321,1.4332 -20.0643,10.0322 -31.5297,10.0322 -11.4652,0 -1.433,-21.4974 -1.433,-31.5296 1.433,-10.0322 -7.166,-8.599 -11.4654,-14.3317 0,-1.4331 1.4332,-4.2995 0,-7.1658 -5.7326,-8.599 -7.1658,-21.4974 -17.198,-25.7969 -7.1658,-2.8665 -17.198,4.2995 -21.4975,11.4652 -1.4332,4.2995 11.4653,-1.433 12.8985,1.4332 5.7327,10.0322 1.4332,22.9307 7.1659,31.5297 4.2995,7.1658 25.797,5.7327 21.4975,12.8985 -17.198,32.9628 -58.7598,-17.198 -67.3588,-14.3317 -11.4654,2.8664 -17.198,18.6312 -30.0966,18.6312 -8.599,0 -10.032,-18.6312 -18.631,-17.198 -7.1659,1.4332 0,15.7647 -4.2995,22.9307 -1.4332,2.8662 -5.7327,-2.8665 -10.0322,-2.8665 -11.4654,1.4333 -24.3639,1.4333 -34.3959,7.166 -2.8665,1.433 4.2994,5.7325 7.1657,8.5989 11.4653,7.1658 25.797,-4.2995 34.396,-7.1659 14.3316,-1.433 28.6633,17.1981 41.5618,12.8986 5.7327,-2.8664 -11.4653,-20.0643 -4.2995,-18.6311 8.599,0 11.4653,15.7647 20.0643,20.0642 8.5991,2.8664 21.4976,-7.1658 28.6633,0 4.2995,4.2995 -11.4652,12.8985 -8.599,20.0644 2.8663,4.2995 14.3317,1.4331 18.6312,-2.8664 2.8663,-2.8663 -8.599,-10.0321 -5.7327,-11.4653 7.1658,-2.8663 12.8985,5.7327 18.6312,7.1658 11.4653,2.8664 21.4975,10.0322 31.5296,5.7327 7.1658,-2.8663 1.4333,-18.6312 7.1658,-22.9307 7.1659,-4.2995 17.198,4.2995 24.3639,0 10.0322,-4.2995 11.4653,-22.9307 22.9307,-24.3637 8.5989,-1.4332 22.9306,12.8985 18.6311,20.0642 -7.1659,10.0322 -24.3638,0 -35.8291,4.2995 -1.4332,0 2.8663,4.2995 4.2995,5.7327 4.2995,8.599 12.8985,17.198 12.8985,27.2302 1.433,2.8663 -7.1659,-1.4332 -10.0322,1.4332 -10.0322,5.7325 -21.4975,11.4653 -27.2302,21.4974 -5.7327,10.0321 -1.4332,22.9307 -5.7327,32.9628 -2.8663,5.7327 -7.1658,-21.4975 -14.3315,-18.6311 -4.2997,2.8663 7.1657,18.6311 2.8662,15.7648 -14.3316,-5.7327 5.7327,-54.4603 -17.1979,-51.5939 0,0 4.2995,63.0591 -21.4975,81.6903 -8.5991,5.7327 -21.4976,1.4332 -31.5296,2.8664 -4.2995,1.4331 11.4652,4.2995 11.4652,8.599 5.7327,17.198 -15.7647,5.7326 -18.6311,8.599 -2.8663,1.4331 8.5989,1.4331 8.5989,5.7327 1.4333,1.4331 -4.2994,-1.4332 -7.1657,0 -1.4332,1.4331 -2.8665,4.2995 -4.2995,4.2995 -2.8664,0 -75.9578,-10.0322 -70.2252,2.8663 1.4332,2.8663 5.7327,2.8663 10.0322,2.8663 1.4332,0 2.8664,-4.2995 4.2994,-4.2995 2.8665,1.4332 2.8665,10.0322 7.166,8.599 2.8662,0 -1.4332,-8.599 2.8662,-8.599 22.9307,-5.7326 41.5619,0 51.5941,22.9306 0,2.8663 -7.1659,-1.4332 -8.5991,0 -5.7326,5.7327 7.1659,14.3317 -8.599,14.3317 -11.4653,0 -25.797,-15.7649 -32.9627,-7.1657 -7.166,8.5989 21.4974,4.2994 30.0964,10.032 5.7327,4.2995 17.198,30.0966 12.8985,37.2624 -2.8663,5.7327 -17.198,-4.2995 -18.6312,1.4332 -1.4331,7.1657 30.0966,45.8612 20.0644,58.7598 -7.1659,8.599 -24.3639,-4.2996 -34.3961,0 -4.2995,0 1.4332,5.7325 4.2996,8.599 5.7326,7.1657 28.6633,14.3315 28.6633,25.7969 0,10.0322 -18.6312,15.7648 -17.198,27.2302 0,8.599 14.3317,8.599 20.0642,15.7647 1.4333,2.8665 -5.7325,2.8665 -7.1657,4.2995 -5.7327,10.0322 -11.4653,21.4975 -12.8985,32.9629 -2.8663,8.599 17.198,40.1286 15.7648,42.9949 -2.8663,2.8664 -10.0321,-2.8663 -14.3316,1.4332 -11.4654,11.4653 12.8985,34.3959 8.599,53.0271 0,4.2994 -11.4654,0 -12.8985,4.2994 -2.8664,4.2995 7.1658,10.0323 4.2995,14.3318 -15.7649,47.2944 -8.599,-34.3959 -15.7649,14.3317 -4.2995,30.0964 -5.7327,77.391 -30.0964,100.3215 -1.4332,1.4332 -5.7327,0 -7.1659,-2.8663 0,-2.8663 4.2996,-5.7327 2.8664,-8.599 0,-4.2995 -24.3639,-1.4332 -24.3639,-1.4332 -1.4331,-1.4331 2.8664,-7.1658 1.4332,-7.1658 -14.3317,1.4333 -15.7649,8.599 -22.9307,15.7648 -12.8984,10.0322 -4.2994,-11.4653 -8.5989,-10.0321 -10.0322,5.7326 -22.9307,8.599 -25.797,8.599 -7.1659,1.4331 -12.8985,-1.4332 -20.0644,-1.4332 -5.7325,0 -14.3317,-4.2995 -15.7647,1.4332 -2.8664,8.599 12.8985,17.198 8.599,24.3638 -7.166,7.1659 -20.0644,-1.4331 -30.0965,1.4332 -8.5991,2.8663 -10.0322,12.8985 -14.3317,20.0642 -37.2623,54.4603 10.0322,37.2624 8.599,74.5247 -1.4332,11.4653 -8.599,21.4975 -17.1979,30.0965 -7.166,7.1657 -30.0966,-7.1658 -34.3961,-7.1658 -34.396,-2.8664 -24.3638,21.4975 -60.1929,21.4975 -11.4654,0 -21.4975,-7.166 -31.5297,-8.599 -5.7327,0 -14.3316,4.2995 -20.0643,1.433 -10.0321,-5.7325 15.7649,-10.032 15.7649,-10.032 0,-8.599 -8.599,-15.7649 -7.166,-24.3639 0,-8.599 11.4654,-12.8985 14.3317,-20.0642 0,0 -25.7969,-35.8292 -45.8613,-67.3588 -1.4331,5.7325 -8.599,11.4652 -8.599,18.6311 1.4332,30.0965 30.0966,27.2301 -1.4331,55.8934 0,1.4332 0,1.4332 -1.4332,1.4332 z m 448.5809,-355.4251 c 2.8663,-4.2995 8.599,-2.8663 12.8985,-4.2995 -10.0322,22.9307 -30.0965,121.8191 -34.3959,151.9155 -1.4333,7.166 4.2994,63.0594 -14.3317,64.4926 -2.8665,0 -8.599,-64.4926 -8.599,-68.792 2.8663,-41.5619 31.5296,-63.0593 38.6954,-101.7547 2.8663,-17.198 -7.1658,-24.3639 5.7327,-41.5619 z m 193.4774,-38.6954 c 0,8.599 -11.4654,10.032 -17.1981,15.7647 -18.631,21.4975 14.3317,5.7327 -12.8985,27.2302 -21.4974,15.7649 -8.599,15.7649 -20.0642,37.2624 -4.2995,7.1657 -14.3317,28.6632 -18.6312,20.0642 -4.2995,-8.599 7.1658,-20.0642 11.4653,-30.0964 -1.4331,1.4332 -2.8663,4.2994 -4.2995,4.2994 -1.4331,0 -1.4331,-4.2994 -1.4331,-5.7327 -1.4332,-10.032 -15.7649,-27.2301 -15.7649,-30.0964 0,-8.599 5.7327,-17.198 5.7327,-25.7969 -1.4332,-10.0322 -10.0322,-17.198 -10.0322,-27.2302 -1.433,-7.1658 41.5619,-75.9578 47.2946,-78.8241 10.032,-4.2996 21.4974,0 31.5296,-1.4332 15.7648,22.9307 -2.8664,25.797 -15.7649,55.8934 -15.7647,37.2624 20.0644,25.7971 20.0644,38.6956 z m -50.1608,-1175.1959 c 0,2.8662 0,-1.4332 -1.4332,-5.7327 1.4332,1.4332 1.4332,4.2995 1.4332,5.7327 z m -640.6251,1540.6531 -1.4332,-4.2995 c 0,-8.599 -2.8663,-14.3317 -7.1658,-17.198 l -1.4332,-5.7327 c 2.8663,0 5.7327,1.4332 7.1659,4.2995 1.4331,5.7327 2.8663,14.3317 2.8663,22.9307 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cccccccccccccccccccccccscccccccscccccsccccccccccccssccccccccccccccccccccccsccccccccccsccccccccscccccscccccccccccccccccccccccccccccccccscccsccscccsccccccccccccccccsccccscscccsccscscccccccccccccccscccccccccscccccccccscscscccccccccsccccccccccscsccccsssccccccscccccsccccccccccccscccccscsccccccccccccccccscccscscsccccccccsccc" /><path
+ id="dk"
+ class="eu europe"
+ d="m 6123.1627,4443.917 c -18.6312,-2.8664 -37.2624,-12.8986 -55.8936,-15.7649 -4.2994,0 -21.4974,1.4332 -31.5296,0 0,-7.1658 0,-14.3317 1.4332,-22.9307 0,-7.1657 11.4653,-15.7647 5.7327,-21.4974 5.7326,-7.1658 -2.8664,-18.6312 -2.8664,-28.6634 -1.4332,-8.599 2.8664,-21.4974 -2.8663,-27.2302 -12.8985,-12.8984 -50.1608,1.4333 -57.3266,-24.3637 -4.2995,-15.7649 10.0321,-32.9628 10.0321,-51.594 l 2.8664,2.8664 c 44.4281,21.4975 15.7647,-35.8291 12.8985,-41.5618 -1.4333,-2.8663 -2.8665,-11.4653 -7.166,-8.599 -7.1657,2.8662 -5.7325,15.7647 -12.8984,17.1979 -4.2995,1.4332 -1.4331,-10.0322 -1.4331,-14.3317 1.4331,-10.032 4.2995,-20.0642 4.2995,-28.6632 1.4331,-8.599 -7.1659,-20.0644 0,-25.7971 1.4331,-1.433 4.2995,-2.8663 5.7326,-2.8663 -1.4331,-2.8662 -7.1658,-64.4923 7.1659,-58.7598 8.599,2.8665 2.8662,17.198 7.1657,24.3639 12.8985,30.0965 74.5247,-44.4281 77.391,-44.4281 30.0965,-8.5991 -4.2995,38.6954 1.4332,45.8612 5.7326,7.1659 17.198,1.4332 27.2302,-1.4331 -2.8664,0 -4.2996,0 -4.2996,-1.4332 -2.8663,-7.1658 5.7327,-15.7647 1.4332,-21.4974 -2.8663,-4.2995 -11.4653,7.1657 -12.8985,2.8662 -2.8663,-5.7325 8.599,-10.032 8.599,-15.7647 1.4332,-32.9629 -20.0643,-22.9307 7.1659,-42.9951 5.7326,-5.7325 22.9305,-4.2995 27.23,0 2.8664,2.8664 -4.2995,15.7649 -1.4331,12.8986 5.7326,-5.7327 5.7326,-18.6311 12.8985,-22.9306 5.7327,-2.8665 12.8985,0 18.6312,0 7.1658,4.2995 41.5617,12.8984 41.5617,12.8984 2.8664,8.599 -4.2995,18.6311 -2.8663,28.6633 0,7.1659 11.4654,14.3316 8.599,21.4976 -2.8663,5.7325 -12.8985,-1.4332 -18.6312,0 -8.599,1.433 21.4976,7.1657 20.0644,15.7647 0,2.8663 -1.4332,4.2995 -1.4332,5.7327 5.7327,1.4331 7.1659,14.3317 14.3317,15.7648 17.198,4.2995 42.9949,-20.0643 50.1608,12.8985 2.8663,11.4654 -31.5296,68.792 -42.995,63.0593 -10.0321,-5.7326 -10.0321,-24.3638 -21.4975,-28.6633 -12.8985,-4.2995 -11.4653,70.2251 -15.7648,78.8241 -7.1659,18.6312 -18.6311,31.5296 -38.6955,31.5296 -10.0321,0 -31.5297,-15.7647 -28.6632,-5.7327 4.2994,10.0322 27.2301,4.2995 32.9627,15.7649 v 4.2995 h 2.8664 c 5.7326,0 7.1658,10.0322 11.4653,10.0322 15.7649,-4.2995 27.2301,-28.6634 42.995,-22.9307 8.599,4.2995 12.8985,17.198 22.9305,18.6312 5.7327,1.4331 7.166,-8.5991 11.4654,-11.4654 25.797,53.0271 -5.7327,7.1659 4.2995,27.2302 8.599,15.7649 35.8292,81.6905 -17.1979,75.9578 -11.4654,-1.4333 -21.4975,-10.0322 -32.9629,-12.8985 -4.2995,0 -11.4653,7.1658 -15.7647,2.8663 -11.4655,-8.599 28.6632,-5.7326 5.7325,-18.6312 -35.8291,-18.6311 0,12.8986 -11.4652,12.8986 -4.2995,0 -14.3317,-42.9951 -14.3317,-44.4281 -4.2995,-10.0322 -18.6312,-15.7649 -21.4975,-27.2302 0,-1.4332 1.4332,-1.4332 1.4332,-1.4332 -11.4654,4.2995 -27.2301,7.1658 -27.2301,8.599 -2.8665,5.7327 14.3315,0 17.1979,5.7327 1.4332,4.2995 -8.599,5.7325 -8.599,10.032 -1.4332,8.5992 0,17.1981 2.8663,24.3639 1.4332,4.2995 8.599,5.7327 8.599,10.0322 0,15.7648 -25.7969,21.4975 -28.6632,37.2622 0,5.7327 11.4652,-2.8663 15.7647,0 10.0322,7.1659 18.6312,17.1981 20.0644,28.6634 1.4331,5.7327 -10.0322,-11.4653 -15.7649,-10.0322 -7.1657,2.8664 -15.7647,15.7649 -20.0642,21.4976 z m 270.8682,-237.9055 v 1.433 c 15.7649,-11.4652 40.1287,-5.7325 57.3266,-2.8662 1.4332,2.8662 7.1659,5.7327 7.1659,8.599 -1.4332,8.5989 -10.0322,14.3316 -10.0322,22.9306 1.4333,28.6634 24.3639,27.2302 4.2995,50.1608 -7.1657,7.1658 -18.6311,8.599 -25.7969,15.7648 -12.8985,14.3317 2.8663,18.6312 15.7647,25.7969 l 8.599,21.4976 c -11.4652,10.0321 -42.9949,5.7326 -42.9949,18.6311 1.4332,15.7649 35.8291,37.2623 0,38.6955 -12.8985,0 -22.9307,-8.5989 -34.3959,-14.3316 5.7325,2.8662 12.8984,5.7327 14.3315,1.4332 2.8664,-10.0322 -5.7325,-21.4975 -12.8985,-30.0966 -2.8662,-2.8663 -4.2994,5.7327 -7.1657,5.7327 -8.599,0 -14.3317,-7.1658 -21.4975,-8.599 -7.1659,-1.4332 -14.3317,4.2995 -20.0644,2.8663 -2.8663,0 -2.8663,-4.2995 -2.8663,-5.7326 8.599,-22.9306 -17.1979,-17.1979 -15.7649,-21.4974 1.4333,-5.7327 11.4655,-4.2997 12.8985,-10.0322 5.7327,-41.5619 -7.1657,-30.0966 -30.0964,-50.1608 -2.8663,-2.8663 -11.4653,-10.0322 -7.1658,-11.4653 12.8985,-7.1659 81.6905,8.599 68.7919,-35.8292 -2.8663,-10.0321 -18.6311,-7.1659 -27.2302,-12.8986 -4.2995,-2.8662 10.0322,2.8665 14.3317,2.8665 7.1659,2.8662 14.3317,5.7325 21.4975,5.7325 21.4976,0 55.8935,-10.032 48.7277,34.3961 -1.4332,7.1658 -20.0644,14.3317 -14.3317,18.6312 25.797,21.4974 17.198,-30.0966 12.8985,-50.1609 -1.4332,-8.5989 -24.3639,-1.4332 -21.4975,-8.5989 1.4331,-5.7327 4.2995,-8.599 7.1658,-12.8985 z m 28.6634,229.3064 h -7.1659 v 2.8664 c 1.4332,2.8663 0,4.2995 0,5.7327 -4.2995,2.8663 -10.0321,7.1658 -11.4653,10.0321 -4.2995,2.8664 -7.1659,5.7327 -8.599,10.0321 l -1.4332,1.4333 v 1.433 -2.8663 c -8.599,0 -18.6312,-1.4332 -22.9306,0 -7.1658,1.4333 -12.8985,14.3317 -21.4975,12.8985 -11.4653,-1.4332 -17.198,-15.7647 -27.2302,-21.4974 -7.1657,-4.2995 -17.1979,-7.1658 -22.9306,-12.8985 -4.2995,-2.8664 11.4654,-5.7327 25.7969,-31.5297 20.0644,17.198 50.1608,21.4975 67.3588,35.8292 l 1.4332,1.4332 c -8.599,-12.8986 -27.2301,-22.9307 -20.0642,-34.3961 2.8663,-5.7325 11.4652,-2.8663 15.7647,-4.2995 10.0322,10.0322 31.5297,8.599 34.396,21.4975 0,1.4332 0,2.8664 -1.4331,4.2995 z m -432.8161,-209.2422 v 11.4654 c -1.4331,-8.599 -1.4331,-17.1981 0,-11.4654 z m 250.804,-273.7346 c 4.2994,15.7649 -10.0321,93.1557 -35.8292,84.5567 -8.599,-2.8663 -15.7647,-12.8985 -25.7969,-12.8985 10.0322,-12.8984 -32.9629,-2.8662 -44.4282,0 -10.0322,2.8665 -18.6311,11.4655 -28.6633,12.8985 -4.2995,0 -7.1658,-7.1658 -11.4653,-7.1658 -11.4653,-1.4332 -22.9307,0 -32.9629,2.8663 -4.2994,1.4332 -1.433,10.0322 -5.7325,12.8985 -20.0644,8.5991 1.4331,-48.7276 -27.2302,27.2302 -1.4332,1.4332 7.1658,41.5618 5.7326,41.5618 -47.2944,-1.4332 -21.4975,-90.2895 5.7327,-100.3215 24.3639,-11.4654 58.7598,1.4331 83.1237,-8.5991 32.9627,-15.7648 25.7969,-61.6261 55.8934,-78.8241 10.0322,-4.2995 22.9306,-1.4332 32.9628,-5.7327 10.0322,-5.7325 15.7648,-25.7969 27.2302,-25.7969 21.4974,0 -11.4654,15.7649 -12.8985,28.6633 -2.8664,20.0643 7.1658,7.1658 14.3316,28.6633 z m 131.8513,487.2763 -12.8985,1.4332 c 10.0322,2.8664 18.6312,7.1659 25.7969,14.3317 h 1.4332 c -4.2994,-5.7327 -10.0321,-10.0322 -14.3316,-15.7649 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="ccccccscccscccccccccsccccccsscccccccccccccscccscccccccccscccccccscccccccccccccccccccsscccccccscscccccccccccccccccccccccccccccsccccccccccccsccccccc" /><g
+ id="gb"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"><path
+ sodipodi:nodetypes="csccscccccccccccccscccccccc"
+ style="display:inline;opacity:1;fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 4338.9677,4169.7186 c 4.2995,5.7328 10.0322,10.0322 15.7649,7.1658 8.599,-4.2995 11.4653,-18.6312 20.0643,-22.9306 8.5991,-5.7326 18.6312,7.1659 27.2301,5.7327 10.0322,0 17.1982,-7.1658 25.7971,-5.7327 10.0321,1.4332 15.7648,11.4654 24.3638,14.3316 4.2995,2.8665 12.8984,-2.8662 14.3317,1.4332 5.7327,10.0322 8.5989,24.3638 5.7327,35.8292 0,4.2995 -5.7327,5.7327 -5.7327,8.599 15.7647,61.6261 8.5989,-18.6312 25.7969,35.8291 5.7327,15.7648 -31.5296,37.2624 -31.5296,37.2624 24.3638,-5.7327 50.1608,-24.3639 45.8613,32.9627 -5.7327,55.8935 -45.8613,25.7971 -57.3266,38.6956 -10.0322,10.032 -2.8664,32.9627 -28.6634,28.6632 -5.7327,0 -10.0322,-5.7326 -14.3317,-10.0322 l -5.7325,-7.1658 c -21.4976,-12.8985 8.599,20.0644 -40.1287,2.8663 -7.1659,-1.4331 2.8663,-14.3315 5.7326,-21.4975 1.4332,-10.0322 -12.8985,-7.1657 -15.7648,-12.8984 -7.1659,-14.3317 0,-48.7277 -15.7648,-45.8614 -61.6261,8.599 17.1981,37.2624 -48.7277,42.9951 -21.4974,1.4331 -77.3908,-73.0915 -71.6582,-80.2573 1.4332,0 57.3266,-14.3317 57.3266,-14.3317 2.8664,-8.5989 -15.7648,-12.8984 -17.198,-21.4974 -2.8663,-8.599 34.3961,2.8663 38.6955,0 22.9307,-14.3317 14.3316,-50.1609 45.8612,-50.1609 z"
+ class="eu europe"
+ id="gb-nir"
+ transform="translate(-2.3653846e-5)" /><path
+ sodipodi:nodetypes="cccsccccccssccccsccccccccccsccccccccccssccccsccccccccccsccccccssccccccsccssccccccccscccscsccccccscsccscccccscccccccscccsscccscccccccssccccsssccccsccscccccccsccccscssccsscccsccccccsccccccsssssccccccccscccccsccscccscccccccccssccscccccccccccccsscccccsssccccccccscccscccscccsccccsccccccccccccccccccsccsscccccccc"
+ style="display:inline;opacity:1;fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 4586.1972,4531.9437 c 25.7969,20.0642 47.2944,31.5296 20.0642,44.4281 m -15.7647,7.1658 c -4.2995,2.8662 -8.599,4.2995 -12.8985,4.2995 -4.2995,0 4.2995,-5.7328 2.8663,-8.599 -8.599,-30.0965 -30.0965,-35.8292 5.7327,-47.2944 m 147.616,-973.1196 c 8.599,4.2995 27.2302,12.8985 28.6634,22.9307 0,7.1658 -20.0644,20.0642 -14.3317,15.7647 8.599,-5.7325 11.4653,-22.9306 21.4975,-21.4974 8.599,2.8663 -1.4332,21.4974 5.7327,27.2301 5.7325,4.2995 8.599,-11.4652 14.3317,-12.8984 21.4974,-5.7327 70.225,2.8663 98.8883,7.1657 11.4654,1.4333 27.2301,-8.5989 34.396,0 7.1658,7.166 -11.4654,14.3317 -15.7648,22.9307 -2.8663,8.599 0,17.198 -2.8663,25.797 -2.8663,7.1659 -93.1558,61.6262 -110.3537,74.5247 -28.6634,21.4974 12.8984,-2.8665 27.23,8.599 5.7327,2.8662 -7.1658,8.5989 -12.8985,12.8984 -4.2995,4.2995 -7.1658,11.4653 -14.3315,12.8985 -2.8665,0 0,-10.0322 -2.8665,-10.0322 -5.7327,-1.4331 -10.0322,4.2995 -14.3316,5.7327 -10.0321,4.2995 -11.4653,-7.1658 -15.7648,2.8663 -11.4654,25.7971 15.7648,34.3961 22.9307,25.7971 1.433,-2.8664 -5.7327,-7.1659 -2.8665,-7.1659 7.166,-1.4331 14.3317,4.2995 22.9307,4.2995 15.7649,-1.4331 35.8292,-18.6312 55.8935,-14.3317 10.0322,1.4332 18.6312,11.4654 28.6633,14.3317 24.3639,7.1659 104.6211,5.7327 117.5196,34.396 2.8664,8.599 4.2995,17.198 1.4332,25.797 l -32.9629,32.9627 c -4.2994,5.7327 -7.1657,12.8986 -8.5989,20.0644 -1.4332,2.8663 1.4332,5.7327 0,7.1658 -11.4653,21.4976 -71.6583,106.0543 -90.2895,107.4874 -28.6632,2.8664 -38.6954,-11.4653 -63.0593,7.1659 -4.2995,2.8663 8.599,4.2995 12.8986,2.8663 11.4653,-1.4332 21.4975,-8.599 31.5295,-10.0322 20.0644,-1.4331 4.2997,12.8986 5.7327,17.1981 4.2995,10.032 22.9307,12.8985 21.4975,22.9305 -4.2995,31.5297 -34.3959,4.2995 -42.9949,5.7327 -44.4282,7.1659 35.8291,25.797 -57.3266,18.6311 -1.4332,0 -1.4332,15.7649 0,15.7649 10.0322,4.2996 -1.4332,-4.2995 8.599,-2.8663 11.4652,2.8663 35.8291,21.4974 48.7276,12.8984 5.7327,-4.2994 7.1657,-14.3316 12.8984,-17.1979 2.8663,-1.4332 57.3266,38.6954 63.0593,44.4281 10.0322,7.1659 14.3317,42.9951 24.3639,54.4603 5.7326,5.7327 14.3316,7.1658 18.6311,12.8985 1.4332,2.8663 -1.4331,5.7327 -1.4331,10.0322 -1.4332,8.599 -1.4332,18.6312 -1.4332,27.2302 1.4332,25.7969 11.4654,131.8511 20.0644,153.3487 1.433,2.8663 4.2995,-5.7327 7.1657,-4.2995 5.7327,1.4331 10.0322,8.599 15.7648,11.4653 25.7971,15.7647 20.0644,2.8663 44.4283,32.9628 8.5989,10.0321 4.2995,27.2302 11.4652,38.6955 7.1658,15.7647 27.2302,1.4332 27.2302,30.0964 0,8.599 -15.7649,8.599 -17.198,17.198 -5.7327,22.9306 21.4975,55.8935 27.2302,75.9577 7.1657,27.2302 -15.7649,-12.8984 -17.198,17.1982 0,7.1657 51.5939,61.626 25.797,88.8562 -20.0644,20.0643 -28.6634,-2.8664 -42.9951,32.9627 -1.4331,4.2995 10.0322,-1.433 12.8985,1.4332 5.7327,4.2995 7.1659,12.8985 11.4654,17.198 4.2995,4.2995 11.4652,11.4654 15.7647,8.599 28.6634,-18.6312 7.166,-37.2622 37.2624,-32.9627 48.7276,7.1657 127.5518,28.6632 113.2201,106.0542 -4.2995,24.3639 -37.2623,88.8562 -61.6261,97.4552 -8.5991,2.8664 -21.4976,-14.3317 -24.3639,-7.1658 -12.8984,25.797 54.4604,18.6312 -2.8662,34.396 -4.2995,1.4332 -7.1659,-1.4332 -11.4654,-4.2995 -1.4331,0 -1.4331,-2.8663 -2.8663,-2.8663 -11.4654,1.4331 -28.6634,-1.4332 -34.3959,7.1658 -4.2997,8.599 21.4974,-2.8663 27.23,4.2995 5.7327,5.7327 1.4332,17.1979 -2.8663,24.3638 -11.4653,18.6312 -42.9949,5.7326 -58.7598,11.4653 -4.2995,1.4332 -15.7648,5.7327 -11.4653,8.599 1.4331,0 42.9949,-12.8985 41.5617,5.7327 -1.433,7.1658 -17.1979,-1.4332 -22.9305,2.8663 -4.2995,4.2995 11.4653,11.4654 17.198,8.599 2.8662,-2.8663 2.8662,-11.4653 7.1657,-11.4653 5.7327,-1.4332 11.4654,4.2995 17.198,8.599 20.0644,18.6312 -41.5617,8.599 0,15.7649 20.0644,2.8663 41.5618,-12.8986 63.0593,-4.2995 5.7327,1.433 -8.599,8.599 -10.0322,14.3315 -2.8663,10.0322 -1.4331,20.0644 -2.8663,31.5297 -4.2995,14.3317 -30.0964,8.599 -44.4281,15.7649 -5.7327,4.2995 -1.4332,18.6311 -8.599,21.4974 -25.7969,8.599 -12.8985,-14.3317 -28.6634,-4.2995 -15.7647,10.0322 -30.0964,5.7327 -45.8611,12.8985 -7.166,2.8663 -10.0322,14.3317 -18.6312,14.3317 -12.8985,0 -35.8292,-24.3639 -48.7276,-27.2302 -10.0322,-1.4332 -81.6905,15.7648 -85.99,0 -1.4332,-7.1657 18.6312,-1.4332 4.2995,-11.4654 -8.599,-5.7325 -4.2995,7.1659 -7.1659,11.4654 -2.8663,1.4332 -7.1658,-1.4332 -8.599,-4.2995 0,-4.2994 10.0322,-8.5989 5.7327,-8.5989 -4.2995,-1.4332 -8.599,8.5989 -12.8985,7.1657 -4.2995,-1.433 4.2995,-8.5989 1.4332,-12.8984 -10.0322,-12.8985 -4.2995,12.8984 -8.599,11.4654 -17.1981,-5.7327 -30.0965,-34.3961 -34.396,-30.0966 -5.7326,7.1659 11.4654,17.1979 10.0322,25.7969 -1.4332,14.3317 -81.6905,-4.2995 -84.5568,0 -4.2995,7.1659 10.0322,17.1981 8.599,25.7971 -1.4332,4.2995 -8.599,-1.4332 -12.8985,-1.4332 h -1.4332 c -7.1658,-4.2995 -30.0964,-20.0642 -37.2622,-17.198 -8.5991,4.2995 -5.7327,17.198 -10.0322,24.3638 -2.8664,2.8664 2.8663,-8.599 1.4331,-12.8985 -2.8663,-7.1658 -10.0321,-12.8985 -17.198,-18.6312 -18.6312,-18.631 -73.0914,-31.5295 -98.8884,-21.4974 0,0 -15.7648,68.792 -37.2623,78.8242 -17.1979,7.1657 -47.2945,-34.3961 -58.7598,-40.1287 -7.1659,-4.2995 14.3317,12.8985 -4.2995,8.599 -17.1979,-4.2995 -41.5618,-21.4974 -61.626,-15.7649 -7.166,1.4332 -4.2997,14.3317 -10.0322,17.198 -8.599,2.8664 -18.6312,-2.8663 -28.6634,-2.8663 -1.4332,0 -2.8663,0 -4.2995,1.4332 -2.8663,7.1658 -20.0642,42.9949 -25.797,42.9949 -8.5989,-1.4332 -4.2994,-20.0642 -10.0321,-27.2301 -8.599,-14.3317 -42.995,-4.2995 -42.995,-20.0643 0,-10.0322 57.3266,-12.8984 58.7599,-12.8984 5.7325,-1.4333 11.4652,-7.166 15.7647,-12.8987 2.8663,-1.433 0,-7.1657 2.8663,-8.5989 2.8664,-2.8663 8.5991,1.4332 11.4654,0 10.0322,-8.599 12.8985,-21.4975 22.9307,-28.6633 4.2995,-2.8664 11.4652,2.8663 15.7647,1.4331 4.2995,-2.8663 2.8664,-8.599 7.1659,-11.4653 7.1658,-7.1657 20.0643,-8.5989 27.2302,-17.1979 4.2995,-5.7327 2.8663,-38.6956 12.8985,-42.9951 5.7325,-1.4331 11.4652,10.0322 17.1979,11.4654 32.9627,2.8663 -5.7327,-47.2945 74.5246,-32.9628 27.2301,4.2994 63.0593,41.5618 90.2895,20.0643 8.5989,-7.1659 5.7327,-21.4974 10.0321,-30.0965 1.4331,-2.8663 70.2251,-45.8612 78.8241,-55.8934 8.599,-10.0322 -37.2622,20.0642 -42.9949,24.3639 -7.1659,2.8662 -14.3317,4.2994 -21.4975,5.7325 -4.2995,0 -7.1659,-7.1658 -11.4654,-5.7325 -35.8291,10.032 -27.2301,40.1286 -70.225,15.7647 -14.3317,-10.0322 -11.4655,-34.3959 -24.3639,-47.2944 -11.4653,-11.4654 -32.9627,14.3315 -47.2944,7.1658 -2.8665,-1.4332 -5.7327,-45.8614 -7.1659,-50.1609 -1.4331,-2.8662 -2.8663,5.7327 -5.7326,5.7327 -10.0322,1.4333 2.8663,-10.0321 -31.5297,0 -4.2994,0 -2.8664,8.599 -5.7327,11.4653 -8.5989,2.8664 -20.0642,5.7327 -28.6633,2.8664 -7.1658,-1.4332 -20.0643,-10.0322 -17.198,-15.7649 4.2995,-8.5989 18.6312,-2.8662 27.2302,-4.2995 4.2995,-1.4332 -35.8292,-2.8662 -40.1287,-8.5989 -5.7327,-8.599 -2.8662,-20.0643 -2.8662,-30.0965 0,-28.6633 53.0271,-12.8984 60.1928,-15.7649 8.599,-2.8663 10.0322,-17.1979 20.0644,-18.6311 7.1658,0 14.3317,7.1659 21.4975,5.7327 22.9306,-5.7327 68.792,-44.4282 77.391,-64.4924 2.8662,-5.7327 -2.8665,-61.6262 -11.4654,-70.2252 -24.3638,-30.0965 -51.5939,55.8935 -61.6261,-2.8663 -2.8663,-10.0322 27.2301,-11.4654 45.8613,-25.797 2.8663,-4.2995 1.4332,-11.4654 4.2995,-15.7649 2.8663,-4.2994 5.7327,-7.1657 8.599,-8.5989 5.7327,-4.2995 11.4652,-5.7327 15.7647,-7.1658 10.0322,0 18.6312,4.2995 38.6956,-2.8664 2.8663,-1.4331 -5.7327,-11.4653 -1.4332,-10.0321 10.0322,1.4331 15.7649,12.8985 25.7969,14.3316 20.0644,2.8664 24.3639,-15.7648 38.6956,-2.8663 7.1658,7.1657 10.0322,28.6633 18.6312,22.9306 8.599,-5.7327 -7.1659,-21.4974 -4.2995,-31.5296 1.433,-5.7327 27.23,-2.8663 45.8612,20.0642 4.2995,4.2997 -11.4653,0 -17.198,-2.8662 -12.8985,-7.1658 -18.6312,-28.6633 -15.7647,-44.4282 1.433,-8.5989 10.032,-15.7647 17.1979,-21.4974 5.7327,-4.2995 20.0643,0 18.6312,-7.1659 -2.8664,-8.599 -20.0644,-8.599 -22.9307,-17.198 -18.6311,-40.1286 30.0965,-8.599 30.0965,-25.7969 1.4332,-8.599 -10.0322,-4.2995 -5.7327,-14.3317 4.2995,-10.0322 17.1981,-17.198 15.7649,-28.6633 -1.4332,-21.4976 -18.6312,17.198 -38.6956,18.6311 -12.8985,0 4.2996,-27.23 0,-38.6955 -2.8663,-5.7327 -10.0321,11.4655 -15.7648,10.0322 -17.1979,-5.7327 -2.8662,-21.4974 -4.2994,-30.0964 l -17.198,-35.8291 c -1.4332,-17.1981 45.8613,-64.4926 47.2944,-64.4926 2.8664,1.4333 1.4332,8.599 4.2995,7.1658 11.4654,-2.8663 27.2301,-5.7325 30.0966,-15.7647 2.8662,-8.599 -17.1981,0 -25.7971,-1.4332 -5.7326,-1.4331 -11.4653,-8.599 -18.6312,-7.1658 -8.599,2.8663 -12.8985,14.3317 -21.4975,17.1979 -7.1657,2.8663 -15.7647,-2.8662 -22.9306,-1.4332 -8.599,2.8665 -12.8985,10.0322 -20.0643,12.8985 -2.8663,1.4332 -7.1659,1.4332 -8.599,-1.4331 -1.4332,-4.2994 7.1658,-11.4654 2.8663,-12.8984 -4.2995,-1.4332 -2.8663,8.599 -5.7327,11.4652 -1.433,1.4332 -4.2995,0 -5.7325,-1.4332 -7.166,-8.599 -7.166,-30.0964 -22.9307,-32.9627 -20.0644,-4.2995 7.1658,20.0642 -7.1659,42.9949 -5.7326,8.599 -12.8985,-14.3317 -18.6311,-22.9307 -41.5618,-54.4603 1.4331,8.599 -54.4603,-24.3637 -14.3317,-8.599 20.0643,-1.4332 18.6312,-8.599 -1.4332,-32.9628 4.2995,-30.0966 24.3637,-53.0272 37.2624,-41.5617 -25.7969,7.1659 20.0644,-34.396 4.2995,-4.2994 14.3316,-4.2994 17.198,-10.0321 5.7327,-10.0321 -21.4975,-42.995 -22.9307,-45.8612 -1.4332,-4.2995 7.1658,-4.2995 8.599,-8.599 4.2995,-10.0322 0,-22.9307 4.2995,-34.3961 5.7327,-12.8986 17.198,1.4332 30.0964,7.1659 47.2946,21.4975 -24.3637,-12.8986 -24.3637,-15.7649 -4.2995,-8.5991 0,-20.0642 1.4331,-31.5296 0,-7.1658 5.7327,-15.7648 1.4332,-21.4975 -1.4332,-1.4332 -58.7598,30.0965 -63.0593,34.3959 -11.4653,10.0321 7.1659,30.0966 4.2995,45.8614 -1.4331,5.7327 -12.8985,4.2995 -17.198,8.599 -2.8663,2.8664 -5.7327,7.1659 -5.7327,11.4654 -1.4331,4.2995 1.4332,10.032 0,12.8984 -4.2995,11.4653 -15.7647,17.198 -20.0642,28.6633 -1.4333,2.8664 7.1657,8.599 4.2995,10.0322 -10.0322,5.7327 -22.9307,10.0322 -34.396,5.7327 -8.599,-4.2995 11.4653,-15.7649 15.7648,-22.9307 8.599,-11.4654 5.7327,-30.0964 14.3317,-41.5618 l 30.0964,-25.797 c -2.8663,-7.1658 -18.6312,2.8663 -21.4975,-4.2995 -2.8662,-5.7327 38.6955,-30.0964 18.6312,-34.3959 -8.599,-2.8664 -12.8985,18.631 -20.0644,14.3315 -8.599,-7.1657 20.0644,-12.8984 25.7971,-22.9305 5.7326,-11.4654 1.4331,-37.2624 5.7326,-47.2945 2.8664,-8.599 10.0322,-17.198 17.1979,-18.6312 7.166,-1.4331 20.0644,14.3317 20.0644,7.1659 0,-7.1659 -15.7649,-7.1659 -20.0644,-14.3317 -10.032,-20.0644 48.7278,-30.0964 50.1609,-30.0964 4.2995,-4.2995 -18.6312,1.433 -18.6312,-4.2995 0,-8.5992 14.3317,-10.0322 17.1981,-18.6312 2.8663,-4.2995 -8.5991,2.8663 -12.8986,7.1658 -10.0321,7.1657 -8.599,10.0322 -17.198,14.3317 -18.6312,10.0321 -35.8291,25.7969 -48.7276,20.0642 1.4332,2.8664 2.8663,4.2995 5.7327,5.7327 1.4332,2.8663 7.1658,5.7327 4.2995,8.599 -11.4654,10.0322 -68.792,30.0964 -78.8242,10.0322 -1.4331,-1.4332 0,-5.7327 1.4332,-5.7327 28.6634,-11.4653 5.7327,31.5296 41.5619,-17.198 22.9306,-30.0964 -67.3588,-14.3317 -2.8663,-35.8291 2.8663,5.7327 5.7325,11.4654 10.032,15.7649 1.4332,2.8662 4.2995,5.7325 7.1659,7.1657 -2.8664,-4.2995 -5.7327,-10.0322 -7.1659,-17.1979 -1.433,-4.2995 10.0322,0 14.3317,0 11.4654,0 22.9307,5.7327 32.9629,1.433 12.8985,-5.7325 -77.391,-4.2995 -65.9257,-21.4974 8.5991,-11.4653 45.8613,4.2995 48.7277,-1.4331 5.7326,-14.3317 -35.8291,-31.5296 4.2995,-41.5618 10.0321,-2.8663 20.0642,10.0322 31.5297,7.1657 38.6954,-8.5989 -10.0322,-34.3959 -10.0322,-34.3959 4.2995,-10.0322 25.7969,2.8663 32.9627,-5.7327 7.1659,-8.599 1.4332,-22.9307 1.4332,-34.3959 0,-8.599 1.4332,-17.198 -1.4332,-22.9307 -1.4331,-2.8663 -48.7276,-53.0271 -17.198,-65.9256 7.1659,-4.2995 8.599,22.9307 17.198,20.0643 11.4654,-2.8663 -4.2995,-35.8292 12.8986,-25.797 22.9305,12.8985 24.3637,14.3317 24.3637,12.8985 4.2995,-18.6312 -11.4652,-20.0642 -10.0322,-38.6954 0,-7.1659 18.6312,8.599 21.4976,1.433 5.7326,-10.032 -7.1659,-22.9305 -5.7327,-32.9627 0,-4.2995 4.2995,7.1658 8.599,7.1658 10.0322,4.2995 25.797,12.8985 32.9629,4.2995 5.7325,-7.1658 -14.3317,-14.3317 -17.1981,-22.9307 -7.1658,-24.3637 14.3317,-5.7325 14.3317,-5.7325 2.8664,-2.8665 -4.2995,-8.599 -2.8663,-11.4654 2.8663,-1.4331 10.0322,5.7327 10.0322,2.8664 0,-4.2995 -10.0322,-7.1659 -8.599,-11.4654 1.4331,-10.0322 10.032,-17.198 15.7647,-25.797 z m 421.6906,-262.675 c 2.9907,2.103 2.7244,-0.7325 3.9597,1.8388 1.3878,2.8888 2.7299,2.6131 2.5377,-2.6496 -0.2081,-2.7926 1.7617,-3.0831 8.9275,-1.6499 4.2995,1.4333 -7.1658,7.166 -10.032,11.4654 0,1.4331 5.7325,5.7326 4.2995,7.1658 -2.8665,1.4332 -8.599,-5.7327 -10.0322,-1.4332 0,2.8664 8.5989,2.8664 8.5989,7.1659 1.4333,12.8985 -17.1979,8.599 -15.7647,12.8985 1.4331,18.6312 15.6514,16.4032 -13.012,46.4998 -1.4331,2.8663 -6.5543,-1.3185 -5.1211,-4.1848 8.599,-18.6312 19.5662,-38.0155 12.4004,-42.315 -5.7327,-5.7327 -8.4407,8.0069 -15.6065,3.7074 -10.0322,-4.2995 -4.9978,-4.2318 -7.864,-14.264 -1.4333,-2.8663 4.613,-6.1584 7.4793,-7.5916 11.4654,-1.4332 9.1889,1.3057 19.2211,-2.9938 7.1658,-4.2995 5.709,-6.4937 10.0084,-13.6597 z m -188.0845,249.7765 c -18.6312,37.2623 -104.6212,-42.995 -44.4282,-47.2945 8.599,0 17.198,10.0322 17.198,20.0644 1.4332,5.7327 -17.198,4.2995 -14.3317,8.599 4.2995,8.599 17.198,8.599 25.797,11.4652 4.2995,2.8665 10.0322,4.2995 15.7649,7.1659 z m -355.4252,30.0965 c -7.1657,11.4654 -27.2301,22.9307 -30.0964,31.5296 -1.4332,7.1658 -2.8663,47.2944 -21.4975,47.2944 -10.0322,-1.433 -8.5989,-17.1979 -15.7649,-24.3637 -8.5989,-5.7327 2.8665,24.3637 -5.7325,28.6634 -4.2997,1.433 -10.0322,-5.7327 -12.8986,-2.8664 -10.0321,5.7327 -11.4653,25.7969 -22.9306,25.7969 -10.0322,0 -18.6311,-17.198 -12.8986,-25.7969 5.7327,-10.0322 30.0966,7.1659 34.3961,-4.2995 4.2995,-10.0322 -20.0644,-11.4653 -24.3639,-22.9307 -1.4332,-4.2995 10.0322,-2.8663 12.8985,-5.7326 1.4332,-1.4332 -4.2995,0 -4.2995,-1.4332 -2.8663,-5.7327 -4.2995,-11.4654 -2.8663,-17.1979 12.8985,-35.8292 22.9307,-2.8665 42.9949,1.433 1.4332,0 -7.1657,-21.4974 -2.8662,-25.7969 14.3316,-17.198 14.3316,-1.4332 28.6633,-2.8663 1.4331,-1.4332 1.4331,-5.7327 2.8663,-5.7327 8.599,-7.1658 17.198,-18.6312 27.2302,-17.198 7.1657,1.4332 4.2995,14.3317 7.1657,21.4975 z"
+ class="eu europe"
+ id="gb-main" /></g><path
+ id="ie"
+ class="eu europe"
+ d="m 4406.2301,4375.125 c 2.8663,7.1658 15.7648,14.3317 10.0322,20.0642 -5.7327,8.599 -22.9306,1.4333 -31.5296,7.166 -4.2995,4.2994 11.4652,7.1657 11.4652,12.8984 1.4333,11.4653 -5.7327,22.9307 -5.7327,34.396 1.4333,10.0322 11.4654,15.7649 11.4654,25.7969 0,7.1659 -11.4654,11.4654 -11.4654,20.0644 -1.433,5.7327 10.0322,11.4653 7.166,17.198 -4.2995,5.7327 -15.7649,-7.1658 -18.6312,-1.4332 -4.2995,5.7327 7.1657,11.4654 8.599,18.6311 0,2.8665 -2.8663,5.7327 -2.8663,8.599 1.433,18.6312 7.1658,30.0966 1.433,48.7278 -4.2994,12.8984 -54.4601,85.9898 -63.0591,93.1557 -2.8664,2.8663 -10.0322,4.2995 -11.4654,10.0321 -2.8663,10.0322 1.4332,21.4976 0,31.5296 0,1.4332 -2.8663,1.4332 -2.8663,0 -4.2995,-10.032 -7.1659,2.8664 -21.4975,-2.8663 -5.7327,-1.4332 -5.7327,-10.0322 -11.4654,-11.4652 -10.0322,-2.8665 -41.5618,12.8984 -48.7276,4.2995 -1.4332,-2.8665 5.7327,-2.8665 5.7327,-5.7327 1.4331,-4.2995 -10.0322,4.2995 -14.3317,2.8662 -21.4974,-1.433 -28.6633,-12.8984 -48.7276,-5.7325 -2.8664,1.433 5.7326,7.1658 5.7326,11.4652 -1.4331,7.1658 -27.23,12.8985 -27.23,12.8985 -5.7327,0 -8.5992,-8.599 -14.3317,-7.1658 -10.0322,4.2995 -14.3317,17.198 -22.9307,22.9307 -30.0964,15.7648 -11.4654,-27.2301 -38.6954,-22.9307 -8.5991,1.4331 7.1658,17.198 4.2995,24.3638 -4.2995,5.7327 -14.3317,5.7327 -21.4976,10.0322 -4.2995,2.8663 -7.1658,11.4654 -12.8985,12.8984 -2.8663,0 -1.4331,-5.7327 -4.2995,-7.1657 -2.8663,-2.8664 -7.1658,-5.7327 -11.4652,-4.2995 -2.8665,2.8663 0,11.4652 -4.2995,12.8985 -14.3317,1.4332 -40.1287,-15.7649 -48.7276,-14.3317 -11.4655,1.4332 -20.0644,10.0322 -30.0966,11.4654 -28.6633,2.8663 15.7649,-20.0644 -7.1658,-15.7649 -8.599,2.8663 -42.9949,7.1658 -45.8613,4.2995 -5.7327,-8.599 48.7276,-24.3638 54.4603,-37.2624 1.4332,-2.8663 -4.2995,-2.8663 -7.1658,-4.2995 -1.4332,-2.8662 -34.3961,4.2995 -75.9578,0 -1.4332,0 2.8663,-1.433 21.4975,-7.1657 2.8663,0 5.7325,-1.4333 5.7325,-4.2995 0,-1.4332 -4.2994,-2.8663 -2.8662,-4.2995 12.8984,-11.4654 7.1659,7.1657 24.3638,0 8.599,-2.8663 32.9628,-4.2995 27.2302,-11.4654 -1.4332,-1.4331 -65.9257,7.1659 -68.792,7.1659 -12.8985,-2.8664 -22.9307,-22.9307 -21.4975,-37.2624 1.4331,-5.7327 12.8985,5.7327 17.198,2.8665 4.2995,-2.8665 -2.8663,-7.166 -2.8663,-11.4655 2.8663,-12.8984 25.797,-5.7327 38.6955,-8.5989 10.0321,-1.4332 22.9306,0 30.0964,-7.1658 5.7327,-4.2995 -14.3317,-14.3317 -21.4975,-10.0322 -1.4332,2.8663 2.8663,8.599 0,10.0322 -1.4332,1.4331 -44.4281,-20.0644 -53.0271,-31.5297 -1.4332,-2.8664 8.599,4.2995 11.4653,2.8663 2.8664,-1.4332 0,-7.1657 2.8664,-8.599 7.1658,-4.2995 27.2302,-2.8662 37.2622,-1.4332 12.8985,0 21.4976,12.8985 32.9629,18.6312 11.4653,5.7327 -21.4975,-22.9307 -15.7649,-34.3959 4.2996,-10.0322 21.4976,-2.8664 31.5296,-7.1659 5.7327,-2.8663 5.7327,-11.4653 11.4654,-12.8985 1.4333,0 93.1558,15.7649 103.188,10.0322 7.1658,-4.2995 -18.6312,-2.8663 -22.9307,-10.0322 -1.4332,-4.2995 4.2995,-11.4653 2.8663,-15.7648 -1.4331,-2.8664 -30.0964,25.797 -44.4281,24.3638 -2.8663,-1.4331 8.599,-8.599 4.2995,-10.0321 -4.2995,-1.4332 -10.0321,4.2995 -15.7648,2.8663 -5.7327,-1.4332 -10.0322,-5.7327 -12.8985,-10.0322 -1.4332,-2.8663 1.4331,-5.7327 0,-7.1658 0,0 -41.5618,8.599 -47.2945,5.7326 -4.2995,-1.4331 10.0322,0 14.3317,-1.4331 11.4652,-5.7327 20.0644,-12.8984 31.5296,-17.1979 2.8663,-2.8665 8.599,1.433 11.4653,0 5.7327,-5.7327 7.1659,-15.7649 14.3317,-22.9307 2.8664,-2.8664 7.1659,-4.2995 11.4654,-5.7327 2.8663,-2.8663 -10.0322,0 -12.8985,-4.2995 -5.7327,-7.1658 12.8985,-12.8985 18.631,-18.6312 4.2995,-5.7327 7.1659,-12.8985 14.3317,-14.3317 4.2995,-1.433 5.7327,10.0322 10.0322,8.599 11.4653,0 22.9307,-4.2995 32.9629,-10.032 2.8663,-1.4332 -11.4654,1.433 -11.4654,-2.8665 0,-4.2994 10.0322,-2.8662 10.0322,-7.1657 -1.4332,-4.2995 -30.0965,1.4332 -61.6261,-7.1658 -30.0966,-8.5991 0,-7.1659 -7.1659,-31.5296 -7.1658,-25.7971 -47.2944,-7.166 -58.7598,-24.3639 -31.5297,-41.5619 27.2301,-24.3639 28.6633,-24.3639 1.4332,-1.4331 -5.7327,-5.7326 -4.2995,-7.1658 5.7327,-10.0322 12.8985,-20.0642 24.3639,-22.9306 10.0321,-2.8663 21.4975,5.7327 32.9627,5.7327 2.8665,0 5.7327,-1.4333 7.1659,-4.2995 18.6311,-44.4282 -34.396,-11.4654 -37.2623,-24.3639 -2.8663,-5.7326 12.8985,0 17.198,-4.2995 8.5989,-5.7326 -5.7327,-20.0643 -7.1658,-21.4975 0,-10.0322 12.8985,-22.9306 5.7325,-31.5296 -5.7325,-5.7327 -17.1979,15.7649 -22.9306,10.0322 -5.7326,-5.7327 8.5991,-12.8985 11.4654,-20.0644 1.4332,-5.7326 -12.8985,-4.2995 0,-7.1658 12.8985,-2.8663 80.2572,-2.8663 87.423,15.7648 4.2995,10.0322 -1.433,25.7971 7.1659,28.6633 8.599,2.8663 8.599,-14.3316 15.7648,-18.6311 12.8985,-7.1658 50.1608,35.8291 51.594,31.5296 4.2995,-10.0322 -10.0322,-21.4974 -8.599,-32.9628 2.8663,-12.8985 45.8612,-8.599 45.8612,-10.0321 11.4654,-4.2995 20.0644,-12.8985 27.2302,-21.4975 4.2995,-5.7327 -21.4975,0 -21.4975,-2.8664 -4.2995,-15.7647 0,5.7327 -18.6311,4.2995 -2.8663,0 1.4332,-5.7327 1.4332,-8.599 0,-1.4332 0,-4.2995 -1.4332,-4.2995 -5.7326,-2.8662 -34.396,-4.2994 -30.0965,-21.4974 8.599,-28.6634 37.2624,2.8663 45.8614,0 5.7327,-2.8663 -17.198,-11.4654 -12.8985,-17.198 5.7325,-5.7327 17.198,5.7326 24.3637,4.2995 7.1659,-1.4332 -5.7325,-11.4654 -10.0322,-15.7649 -2.8663,-2.8663 10.0322,-2.8663 11.4654,-7.1658 5.7327,-24.3638 -55.8935,0 18.6312,-34.3959 4.2995,-1.4332 10.0322,2.8663 15.7648,4.2995 20.0644,5.7326 42.995,4.2995 60.193,15.7648 10.0322,7.1657 -25.797,21.4974 -20.0644,31.5296 5.7327,5.7327 17.198,-4.2995 24.3639,-11.4653 2.8663,-2.8664 -4.2995,-15.7649 1.4332,-15.7649 8.599,2.8663 14.3315,14.3317 20.0642,21.4975 v 0 c -31.5296,0 -22.9306,35.8291 -45.8613,50.1608 -4.2995,2.8663 -41.5617,-8.5989 -38.6954,0 1.4332,8.599 20.0642,12.8985 17.1979,21.4975 0,0 -55.8933,14.3317 -57.3266,14.3317 -5.7327,7.1659 50.1609,81.6905 71.6583,80.2572 65.9256,-5.7327 -12.8984,-34.3959 48.7276,-42.9949 15.7648,-2.8664 8.599,31.5297 15.7648,45.8614 2.8664,5.7325 17.1981,2.8662 15.7649,12.8984 -2.8663,7.1658 -12.8985,20.0643 -5.7327,21.4975 48.7276,17.198 18.6312,-15.7649 40.1286,-2.8663 l 5.7327,7.1658 c -1.4332,-1.4332 -2.8663,-2.8663 -4.2995,-4.2995 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="nl"
+ class="eu europe"
+ d="m 5655.9506,4754.9139 -25.7969,19.779 c -14.3317,50.1608 48.7276,26.0823 25.7969,43.2803 -10.0322,7.1657 -25.7969,4.2995 -31.5296,14.3317 -7.1658,10.0322 15.529,19.1809 6.93,27.7799 -2.8662,4.2996 -21.2617,13.7819 -18.3953,18.0814 0,0 17.9643,6.8323 17.9643,6.8323 8.599,0 40.2665,-57.9742 63.6283,-44.0947 8.7124,5.1761 -2.7685,-4.2994 -5.6348,-14.3316 -2.8664,-10.0322 20.0642,-20.0643 15.7647,-30.0965 -5.7327,-12.8985 -40.1286,4.2995 -40.1286,-8.599 1.4332,-10.0322 7.1658,-18.6311 8.599,-28.6633 0,-2.8663 -2.8663,-5.7327 -4.2995,-8.599 -1.4332,-2.8663 -17.4834,12.8426 -11.7507,5.6768 l -28.3779,17.2539 c -10.0322,2.8662 -21.4975,-1.4333 -31.5297,-1.4333 -4.2995,0 -8.599,-2.8662 -10.0322,-1.433 -18.6312,22.9305 -12.8985,68.7918 -21.4974,93.1557 -8.599,21.4975 -25.797,45.8613 -41.5619,63.0593 -5.7325,7.1658 -10.032,15.7648 -17.198,20.0643 -4.2994,2.8664 -14.3316,-2.8663 -15.7647,2.8664 -2.8664,8.599 10.032,20.0642 5.7326,28.6632 -14.3316,22.9307 -58.7597,11.4654 -48.7277,17.198 11.4654,7.1659 20.0644,17.1979 32.9629,22.9306 5.7327,1.4333 11.4653,-7.1657 15.7648,-5.7327 5.7327,1.4333 15.7649,10.0322 11.4654,14.3317 -7.166,4.2995 -25.797,-11.4652 -25.797,-2.8663 1.4331,12.8985 38.6954,11.4653 31.5297,21.4975 -21.4976,28.6634 -41.5619,-24.3637 -50.1609,-25.7969 -27.2301,-7.166 -53.0271,-2.8663 -48.7276,7.1657 0,1.4332 44.4281,31.5297 53.0271,30.0966 2.8663,0 1.4332,-5.7327 4.2995,-8.5991 5.7327,-4.2995 11.4653,5.7327 17.198,7.1659 5.7327,2.8663 14.3317,-2.8663 20.0644,2.8663 2.8663,2.8664 5.7325,7.1659 7.1657,11.4654 4.2995,1.4331 7.1658,2.8663 11.4653,1.4331 10.0322,0 -17.198,-32.9628 17.1981,-22.9307 2.8663,0 -2.8664,7.1659 -1.4332,8.5991 17.198,14.3316 21.4975,-20.0644 34.3959,-10.0322 4.2995,4.2995 -11.4652,12.8985 -7.1657,15.7648 32.9627,17.1979 4.2995,-4.2995 30.0964,-10.0321 4.2995,-1.4332 11.4654,40.1287 21.4975,41.5617 22.9306,4.2995 53.0271,2.8664 71.6582,27.2302 1.4333,2.8664 -5.7325,5.7327 -7.1657,8.599 -2.8663,8.5989 -10.0322,15.7649 -11.4654,24.3638 0,2.8663 7.1659,1.4331 5.7327,4.2995 -1.4332,4.2995 -8.599,5.7327 -10.0322,11.4653 -10.0321,35.8291 14.3317,25.7971 37.2623,27.2302 h 1.4332 c -2.8664,-4.2995 -4.2995,-8.599 -4.2995,-10.0322 1.4331,-5.7326 11.4653,-5.7326 12.8985,-11.4653 4.2995,-24.3639 -37.2623,-32.9629 -24.3639,-35.8291 4.2995,-1.4333 7.166,4.2994 10.0322,4.2994 0,0 27.2302,-24.3638 27.2302,-24.3638 1.4332,-7.1658 -17.198,1.4332 -11.4653,-10.0321 4.2995,-10.0322 14.3316,-17.1979 18.6311,-27.2301 12.8984,-31.5297 -18.6311,-54.4604 -27.2302,-70.2253 -1.4331,-2.8662 1.4332,-7.1657 2.8664,-10.032 0,-2.8664 -2.8664,-7.1659 0,-8.599 7.1658,-4.2995 15.7648,0 24.3638,-2.8664 2.8664,-1.4331 -2.8663,-10.0321 0,-8.599 8.5989,2.8664 14.3317,12.8985 24.3638,12.8985 10.0322,1.4332 48.7277,-11.4653 53.0272,-21.4975 4.2994,-10.0322 -27.2302,-11.4652 -14.3317,-20.0642 22.9306,-15.7649 50.1608,-21.4976 44.4281,-57.3268 -1.4331,-20.0642 -54.4602,-11.4652 -41.5617,-32.9627 1.4331,-4.2995 8.599,0 8.599,-2.8664 1.433,-4.2995 -5.7327,-8.599 -4.2995,-12.8985 0,-2.8663 4.2995,-2.8663 7.1658,-2.8663 10.0321,0 18.6311,4.2995 28.6633,4.2995 11.4653,0 1.4331,-22.9306 5.7326,-34.3959 2.8664,-10.0322 27.2301,-55.8935 24.3639,-80.2573 -28.6634,14.3316 -31.5297,-38.6955 -55.8936,-44.4282 -21.4974,-4.2995 -134.7174,20.0644 -147.616,40.1287 -7.1658,8.599 -10.0321,17.198 -15.7648,24.3638 z m -250.804,303.8311 c -2.8663,37.2623 27.2302,12.8985 48.7276,22.9306 2.8663,1.4333 -2.8662,7.166 0,10.0322 17.198,11.4653 31.5297,-8.5989 42.995,-18.6311 -7.1658,-7.1658 -15.7648,-12.8985 -18.6311,-14.3317 -7.1659,-1.4331 -8.599,11.4654 -15.7649,11.4654 -24.3637,0 -8.599,-14.3317 -37.2623,-18.6312 -7.1658,-1.4332 -14.3316,-1.4332 -22.9306,1.4332 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cccccccssscccccscccsccccsccccccccscccccccccccscccsccccccscscccscccccssccccccscccsccc" /><path
+ id="be"
+ class="eu europe"
+ d="m 5671.7154,5427.0686 c -4.2995,-1.4332 -8.599,-2.8663 -12.8985,-2.8663 -10.0321,-1.4332 -20.0642,8.599 -28.6632,4.2995 -7.1659,-2.8664 -1.4332,-15.7649 -5.7327,-21.4976 -2.8663,-4.2995 -10.0322,-1.4331 -14.3317,-4.2995 -1.4332,-1.4331 5.7327,-4.2995 5.7327,-5.7325 -1.4332,-2.8665 -2.8663,-5.7327 -5.7327,-7.166 -2.8663,-1.433 -7.1658,4.2995 -8.599,2.8665 -5.7327,-4.2995 -7.1658,-12.8985 -12.8985,-17.198 -10.0322,-4.2996 -24.3639,0 -30.0964,-8.5991 -5.7327,-5.7326 5.7325,-14.3316 5.7325,-21.4975 -1.433,-5.7325 -10.032,-7.1658 -10.032,-12.8985 0,-7.1657 5.7326,-12.8984 7.1658,-18.6311 1.4332,-4.2995 8.599,-8.599 5.7327,-11.4653 -10.0322,-8.599 -18.6312,17.198 -28.6634,25.7969 -20.0642,18.6312 -67.3588,7.1658 -63.0593,-1.4332 4.2995,-7.1657 11.4654,-11.4652 11.4654,-18.631 0,-4.2995 -11.4654,-4.2995 -10.0322,-10.0322 0,-8.599 11.4653,-15.7649 11.4653,-24.3639 -2.8663,-24.3637 -61.6261,-10.0322 -64.4924,-21.4974 -1.4332,-5.7327 2.8663,-12.8985 1.4331,-18.6312 -4.2995,-22.9307 -35.8292,0 -44.4282,-20.0642 -5.7325,-11.4655 2.8665,-44.4282 -15.7647,-51.5941 -8.599,-4.2995 -15.7649,15.7649 -27.2302,15.7649 -31.5296,0 -32.9628,-54.4603 -35.8291,-74.5247 1.4332,-1.4331 1.4332,-1.4331 1.4332,-1.4331 25.7969,-7.1659 65.9256,-38.6955 98.8884,-48.7276 l 2.8663,5.7326 c -2.8663,37.2623 27.2302,12.8985 48.7276,22.9306 2.8663,1.4333 -2.8662,7.166 0,10.0322 17.198,11.4653 31.5297,-8.5989 42.995,-18.6311 8.5991,7.1657 17.1981,12.8984 20.0643,11.4652 4.2995,-2.8663 2.8663,-8.599 0,-14.3315 4.2995,1.4331 7.1658,2.8663 11.4653,1.4331 10.0322,0 -17.198,-32.9628 17.1981,-22.9307 2.8663,0 -2.8664,7.1659 -1.4332,8.5991 17.198,14.3316 21.4975,-20.0644 34.3959,-10.0322 4.2995,4.2995 -11.4652,12.8985 -7.1657,15.7648 32.9627,17.1979 4.2995,-4.2995 30.0964,-10.0321 4.2995,-1.4332 11.4654,40.1287 21.4975,41.5617 22.9306,4.2995 53.0271,2.8664 71.6582,27.2302 1.4333,2.8664 -5.7325,5.7327 -7.1657,8.599 -2.8663,8.5989 -10.0322,15.7649 -11.4654,24.3638 0,2.8663 7.1659,1.4331 5.7327,4.2995 -1.4332,4.2995 -8.599,5.7327 -10.0322,11.4653 -10.0321,35.8291 14.3317,25.7971 37.2623,27.2302 h 1.4332 c 5.7326,10.0321 14.3317,25.7969 15.7648,25.7969 2.8664,2.8664 11.4654,-2.8663 11.4654,1.4332 1.4331,5.7327 -10.0322,11.4654 -8.599,17.198 2.8663,8.599 15.7648,7.1659 20.0643,14.3317 15.7649,25.7969 -22.9307,30.0964 -32.9629,57.3266 -15.7648,-27.2302 -44.4281,25.7971 -50.1607,41.5618 -4.2995,12.8985 38.6954,68.792 7.1658,65.9256 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="lu"
+ class="eu europe"
+ d="m 5739.0742,5441.4003 c -7.1658,-2.8664 -15.7648,-7.1659 -24.3638,-7.1659 -7.1659,0 -14.3317,7.1659 -22.9306,7.1659 -1.4332,1.433 0,-4.2995 -1.4332,-5.7327 -5.7326,-2.8663 -11.4653,-5.7327 -18.6312,-8.599 l 1.4332,-5.7327 c 31.5296,2.8664 -11.4653,-53.0271 -7.1658,-65.9256 5.7326,-15.7647 34.3959,-68.792 50.1607,-41.5618 -1.4331,7.1659 -2.8663,14.3316 0,25.7971 7.1659,30.0964 41.5618,32.9627 44.4283,37.2622 20.0642,24.3638 -37.2624,35.8291 -21.4976,64.4925 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="de"
+ class="eu europe"
+ d="m 6657.7334,4638.8275 c 2.8664,22.9306 25.7969,67.3588 28.6634,81.6904 4.2995,34.396 -41.5619,57.3266 -31.5297,84.5568 5.7327,17.198 60.1929,24.3637 60.1929,45.8613 0,21.4975 -17.198,28.6633 -4.2995,44.4282 4.2995,7.1657 14.3317,10.032 17.1981,18.6311 4.2995,7.1658 -1.4332,17.198 0,24.3638 1.4331,4.2995 7.1658,2.8663 8.599,5.7327 7.1658,10.0322 -10.0322,34.3959 -14.3317,42.9949 -8.599,12.8985 12.8985,20.0644 17.198,32.9629 2.8662,7.1657 -7.1658,15.7647 -2.8663,21.4974 5.7325,8.599 18.631,5.7327 24.3637,11.4654 20.0644,18.6311 11.4654,123.2522 -5.7327,126.1185 -18.631,4.2995 -48.7276,-74.5246 -64.4923,-30.0965 -2.8663,7.1658 22.9306,12.8985 17.1979,17.198 -17.1979,14.3317 -41.5618,15.7649 -58.7598,25.797 -2.8663,1.4332 0,8.5991 -2.8663,10.0321 -11.4654,5.7327 -27.2301,-2.8662 -35.8291,4.2995 -7.1659,5.7327 -4.2995,17.198 -11.4654,22.9307 -2.8663,2.8664 -5.7326,-7.1658 -10.0321,-5.7327 -12.8986,2.8664 -14.3317,20.0644 -22.9306,25.7971 -4.2995,4.2995 -12.8985,-2.8664 -17.198,1.4331 -4.2995,2.8664 0,11.4654 -4.2995,15.7649 -5.7327,7.1657 -21.4976,-5.7327 -25.7971,-5.7327 -35.8291,5.7327 -41.5617,32.9628 -53.0271,55.8935 -2.8663,5.7325 -2.8663,-14.3317 -8.599,-18.6312 -4.2995,-5.7327 -12.8985,-7.1659 -20.0642,-8.599 -12.8986,-2.8664 14.3315,42.9949 42.9949,61.6261 2.8663,1.4332 12.8985,2.8663 14.3317,11.4653 4.2995,20.0644 -14.3317,12.8986 -17.198,28.6634 -1.4332,4.2994 30.0964,57.3265 34.3959,61.626 24.3638,24.3639 30.0965,7.166 45.8614,22.9307 10.032,10.0322 11.4652,25.797 21.4974,34.3959 22.9307,15.7649 84.5568,37.2624 83.1236,74.5247 -1.4331,38.6955 -10.0321,30.0965 -40.1287,22.9307 -2.8662,0 -5.7325,1.4331 -7.1657,4.2995 -2.8664,14.3317 5.7327,30.0964 -8.599,41.5617 -12.8985,10.0322 -73.0915,24.3639 -74.5247,47.2946 0,0 34.3961,47.2944 34.3961,48.7276 1.433,1.4332 -18.6312,18.6311 -11.4654,24.3639 15.7649,14.3315 31.5296,-7.166 18.6311,40.1286 0,2.8663 -2.8662,7.1658 -5.7327,7.1658 -45.8612,-12.8985 -10.032,-35.8292 -31.5296,-37.2624 -11.4653,0 -21.4975,10.0322 -32.9627,8.599 -5.7327,-1.4331 -4.2995,-11.4653 -8.599,-12.8985 -8.599,-2.8663 -17.198,4.2995 -24.3639,1.4332 -2.8663,-1.4332 2.8664,-10.0322 0,-10.0322 -17.198,1.4332 -1.4332,24.3639 -5.7327,25.797 -20.0643,5.7327 -53.0271,-2.8663 -71.6583,4.2995 -5.7326,2.8664 -2.8663,12.8986 -8.599,15.7649 -5.7325,4.2995 -12.8984,-2.8663 -18.631,1.4332 -4.2996,1.433 1.4331,8.599 -1.4332,11.4652 -1.4332,1.4333 -50.1608,14.3317 -55.8936,11.4654 -2.8662,-2.8664 0,-10.0321 -2.8662,-12.8986 -1.4332,-2.8663 -8.599,-2.8663 -10.0322,-5.7325 -1.4331,-2.8665 7.1659,-1.4332 5.7327,-4.2995 -5.7327,-18.6312 -45.8614,4.2995 -57.3266,-8.599 0,0 2.8663,-1.4332 2.8663,-2.8664 -8.599,-5.7327 0,18.6311 -2.8663,28.6633 0,5.7327 -27.2302,38.6955 -37.2624,28.6633 -5.7327,-5.7326 10.0322,-14.3316 5.7327,-20.0643 -1.4332,-1.4332 -5.7327,4.2995 -8.599,4.2995 -2.8664,0 -7.1659,-1.4332 -8.5989,-4.2995 -2.8665,-4.2995 7.1657,-10.0322 0,-15.7649 -5.7327,-4.2995 -8.599,-11.4652 -14.3317,-14.3315 -4.2995,-2.8664 -10.0322,4.2995 -15.7649,2.8663 -2.8663,-2.8663 0,-10.0322 -2.8663,-12.8985 -7.1658,-5.7327 -5.7327,20.0642 -28.6634,12.8985 -15.7647,-5.7327 -25.7969,-21.4975 -41.5617,-25.797 -1.4332,0 -48.7276,2.8663 -48.7276,2.8663 -5.7327,-2.8663 -5.7327,-12.8985 -11.4654,-15.7648 -1.4332,-2.8664 2.8663,7.1658 0,8.599 -2.8663,1.4331 -8.599,0 -10.0322,-2.8664 -1.4331,-4.2995 5.7327,-10.032 2.8664,-12.8985 -21.4976,-21.4974 -45.8613,17.198 -41.5618,18.6312 8.599,1.4332 17.198,-1.4332 25.7969,0 5.7327,1.4332 -10.0322,2.8663 -14.3316,5.7327 -2.8663,1.4331 1.4332,8.599 0,10.0322 -35.8292,18.631 -10.0321,-8.5991 -38.6955,-7.1659 -4.2995,0 -70.225,15.7649 -74.5245,7.1659 -1.4332,-2.8664 8.5989,-4.2996 7.1657,-5.7327 -12.8984,-10.0322 -18.6311,32.9627 -18.6311,-17.198 -1.4331,-20.0644 12.8984,-38.6955 14.3316,-58.7598 0,-2.8664 -5.7327,-2.8664 -5.7327,-7.1659 -1.433,-7.1658 1.4333,-14.3315 4.2995,-21.4974 0,0 20.0644,-32.9628 20.0644,-32.9628 1.4332,-8.5991 2.8663,-40.1287 7.1658,-50.1608 11.4654,-22.9307 40.1286,-40.1286 55.8935,-67.3588 5.7327,-10.0322 -80.2572,-20.0644 -85.9899,-24.3639 -4.2995,-4.2995 -1.4333,-12.8984 -5.7327,-17.1979 -7.1658,-5.7327 -53.0272,12.8984 -55.8934,8.599 -1.4332,-4.2995 4.2995,-10.0322 1.433,-12.8985 -42.9949,-38.6954 -14.3315,20.0644 -31.5296,1.4332 -14.3316,-14.3317 -21.4975,-47.2946 -32.9627,-54.4603 -4.2995,-4.2995 -12.8985,0 -15.7649,-4.2995 -15.7648,-28.6634 41.5618,-40.1287 21.4976,-64.4925 -2.8665,-4.2995 -37.2624,-7.1658 -44.4283,-37.2622 -12.8985,-53.0273 53.0272,-50.1609 32.9629,-83.1237 -4.2995,-7.1658 -17.198,-5.7327 -20.0643,-14.3317 -1.4332,-5.7326 10.0321,-11.4653 8.599,-17.198 0,-4.2995 -8.599,1.4332 -11.4654,-1.4332 -1.4331,-1.4331 -21.4975,-31.5296 -20.0643,-35.8291 1.4331,-5.7326 11.4653,-5.7326 12.8985,-11.4653 4.2995,-24.3639 -37.2623,-32.9629 -24.3639,-35.8291 4.2995,-1.4333 7.166,4.2994 10.0322,4.2994 0,0 27.2302,-24.3638 27.2302,-24.3638 1.4332,-7.1658 -17.198,1.4332 -11.4653,-10.0321 4.2995,-10.0322 14.3316,-17.1979 18.6311,-27.2301 12.8984,-31.5297 -18.6311,-54.4604 -27.2302,-70.2253 -1.4331,-2.8662 1.4332,-7.1657 2.8664,-10.032 0,-2.8664 -2.8664,-7.1659 0,-8.599 7.1658,-4.2995 15.7648,0 24.3638,-2.8664 2.8664,-1.4331 -2.8663,-10.0321 0,-8.599 8.5989,2.8664 14.3317,12.8985 24.3638,12.8985 10.0322,1.4332 48.7277,-11.4653 53.0272,-21.4975 4.2994,-10.0322 -27.2302,-11.4652 -14.3317,-20.0642 22.9306,-15.7649 50.1608,-21.4976 44.4281,-57.3268 -1.4331,-20.0642 -54.4602,-11.4652 -41.5617,-32.9627 1.4331,-4.2995 8.599,0 8.599,-2.8664 1.433,-4.2995 -5.7327,-8.599 -4.2995,-12.8985 0,-2.8663 4.2995,-2.8663 7.1658,-2.8663 10.0321,0 18.6311,4.2995 28.6633,4.2995 11.4653,0 1.4331,-22.9306 5.7326,-34.3959 2.8664,-10.0322 27.2301,-55.8935 24.3639,-80.2573 4.2995,-1.4332 8.5989,-4.2995 12.8984,-10.0322 5.7327,-5.7327 -7.1657,-2.8664 -20.0642,-2.8664 0,0 0,0 0,0 -2.8664,-2.8663 -7.1659,-1.4331 -10.0322,-1.4331 -2.8664,0 -4.2995,-1.4332 -5.7327,-2.8664 -11.4653,-14.3315 20.0644,-58.7596 31.5296,-64.4923 7.1658,-4.2995 15.7649,4.2994 22.9307,4.2994 107.4874,-4.2994 -111.7869,-12.8984 51.5939,-8.5989 1.4332,0 5.7327,1.433 7.1659,2.8662 8.599,15.7649 14.3317,81.6905 50.1609,67.3588 11.4652,-4.2995 -11.4655,-103.1879 21.4974,-103.1879 2.8663,0 2.8663,8.599 7.1658,10.0322 4.2995,2.8663 11.4654,2.8663 17.1979,2.8663 14.3317,2.8664 30.0966,-11.4653 42.9951,-5.7326 10.0322,4.2995 10.0322,18.631 15.7648,27.23 7.1659,11.4654 45.8613,84.5569 45.8613,35.8292 0,-10.0321 -21.4975,-7.1658 -30.0964,-15.7648 -14.3317,-12.8985 -11.4655,-45.8613 -38.6956,-50.1608 -4.2995,0 -37.2622,7.1659 -34.3959,-12.8985 1.4332,-12.8985 21.4974,-53.0271 8.5989,-68.792 -4.2995,-4.2995 -35.8291,11.4654 -40.1286,-4.2995 -1.4332,-2.8663 8.599,0 10.0322,-2.8663 2.8663,-2.8662 -10.0322,-8.5989 -7.1659,-8.5989 14.3317,-4.2995 38.6956,10.0322 42.995,-18.6312 0,-2.8663 -32.9628,-38.6954 -35.8291,-44.4281 -4.2995,-10.0322 -5.7327,-21.4975 -5.7327,-31.5297 10.0322,1.4332 27.2302,0 31.5296,0 18.6312,2.8663 37.2624,12.8985 55.8936,15.7649 -1.4332,4.2995 -1.4332,5.7326 1.433,4.2995 5.7328,-4.2995 8.599,-11.4654 14.3317,-12.8986 2.8663,0 -1.4332,7.1659 0,10.0322 4.2995,2.8664 10.0322,1.4332 14.3317,2.8664 10.0322,1.4331 20.0643,1.4331 27.2302,5.7326 4.2995,2.8664 5.7327,8.5989 5.7327,12.8984 0,1.4332 -2.8664,0 -2.8664,0 -2.8663,1.4332 -8.599,4.2995 -5.7327,5.7327 1.4332,2.8663 8.5991,-2.8663 10.0321,0 4.2995,7.1659 2.8665,15.7649 0,22.9307 -2.8662,7.1658 -22.9306,11.4653 -17.1979,18.6312 7.1658,10.0322 34.3959,-15.7649 35.8291,-2.8664 1.4332,8.5991 -14.3317,24.3638 -5.7327,27.2301 10.0322,4.2995 10.0322,-20.0642 20.0644,-21.4974 8.599,-1.4331 41.5619,27.2301 48.7276,24.3638 1.4332,0 30.0965,-32.9628 40.1287,-15.7649 20.0643,37.2624 -80.2573,75.9578 -25.797,81.6905 11.4653,1.4332 20.0643,-12.8985 31.5297,-12.8985 14.3316,1.4333 -1.4332,42.995 30.0964,21.4975 7.1658,-4.2995 11.4653,-40.1286 24.3639,-47.2944 18.631,-10.0322 38.6954,-14.3317 47.2944,5.7326 -1.4332,-4.2995 -2.8663,-11.4653 -1.4332,-12.8985 8.599,-10.0321 20.0644,-14.3317 27.2301,-22.9307 8.599,-10.032 10.0322,-25.7969 18.6312,-35.8291 2.8663,-2.8663 21.4975,4.2995 38.6954,10.0322 7.1659,-1.4332 14.3317,-2.8663 17.1981,-2.8663 10.0321,0 4.2995,20.0642 10.0321,28.6632 4.2995,5.7327 14.3317,2.8664 18.6312,8.599 8.599,7.1659 12.8984,27.2302 25.7969,25.7971 10.0322,0 21.4976,-7.1659 32.9629,-4.2995 4.2995,1.4331 -5.7327,8.599 -5.7327,12.8985 1.4332,11.4652 5.7327,22.9306 10.0322,34.3959 4.2995,11.4654 18.6311,15.7649 30.0964,20.0644 8.599,2.8663 14.3317,4.2995 18.6312,2.8663 z m -130.4181,-110.3537 c 2.8664,-12.8985 -2.8663,-28.6634 1.4332,-41.5619 4.2995,-12.8985 47.2944,24.3638 38.6954,11.4653 -5.7325,-8.599 -24.3637,-4.2995 -28.6632,-14.3316 -1.4332,-8.5991 11.4653,-15.7649 17.198,-22.9306 5.7327,-4.2995 -4.2995,17.1979 1.4332,18.6311 10.032,2.8663 20.0642,-1.4332 28.6632,1.4331 8.599,2.8664 -11.4653,14.3317 -8.599,22.9307 2.8664,10.0322 15.7649,11.4654 20.0644,21.4974 2.8663,2.8665 -15.7649,17.198 -38.6956,22.9307 -11.4652,4.2995 -21.4974,-12.8985 -31.5296,-20.0642 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="fr"
+ class="eu europe"
+ d="m 5301.9587,5103.1731 c 2.8663,20.0644 4.2995,74.5247 35.8291,74.5247 11.4653,0 18.6312,-20.0644 27.2302,-15.7649 18.6312,7.1659 10.0322,40.1286 15.7647,51.5941 8.599,20.0642 40.1287,-2.8665 44.4282,20.0642 1.4332,5.7327 -2.8663,12.8985 -1.4331,18.6312 2.8663,11.4652 61.6261,-2.8663 64.4924,21.4974 0,8.599 -11.4653,15.7649 -11.4653,24.3639 -1.4332,5.7327 10.0322,5.7327 10.0322,10.0322 0,7.1658 -7.1659,11.4653 -11.4654,18.631 -4.2995,8.599 42.9951,20.0644 63.0593,1.4332 10.0322,-8.5989 18.6312,-34.3959 28.6634,-25.7969 2.8663,2.8663 -4.2995,7.1658 -5.7327,11.4653 -1.4332,5.7327 -7.1658,11.4654 -7.1658,18.6311 0,5.7327 8.599,7.166 10.032,12.8985 0,7.1659 -11.4652,15.7649 -5.7325,21.4975 5.7325,8.5991 20.0642,4.2995 30.0964,8.5991 5.7327,4.2995 7.1658,12.8985 12.8985,17.198 1.4332,1.433 5.7327,-4.2995 8.599,-2.8665 2.8664,1.4333 4.2995,4.2995 5.7327,7.166 0,1.433 -7.1659,4.2994 -5.7327,5.7325 4.2995,2.8664 11.4654,0 14.3317,4.2995 4.2995,5.7327 -1.4332,18.6312 5.7327,21.4976 8.599,4.2995 18.6311,-5.7327 28.6632,-4.2995 4.2995,0 8.599,1.4331 12.8985,2.8663 7.1659,2.8663 12.8986,5.7327 18.6312,8.599 1.4332,1.4332 0,7.1657 1.4332,5.7327 8.5989,0 15.7647,-7.1659 22.9306,-7.1659 8.599,0 17.198,4.2995 24.3638,7.1659 2.8664,4.2995 11.4654,0 15.7649,4.2995 11.4652,7.1657 18.6311,40.1286 32.9627,54.4603 17.1981,18.6312 -11.4653,-40.1286 31.5296,-1.4332 2.8665,2.8663 -2.8662,8.599 -1.433,12.8985 2.8662,4.2994 48.7276,-14.3317 55.8934,-8.599 4.2994,4.2995 1.4332,12.8984 5.7327,17.1979 5.7327,4.2995 91.7226,14.3317 85.9899,24.3639 -15.7649,27.2302 -44.4281,44.4281 -55.8935,67.3588 -4.2995,10.0321 -5.7326,41.5617 -7.1658,50.1608 l -20.0644,32.9628 c -2.8662,7.1659 -5.7325,14.3316 -4.2995,21.4974 0,4.2995 5.7327,4.2995 5.7327,7.1659 -1.4332,20.0643 -15.7647,38.6954 -14.3316,58.7598 0,18.6311 0,24.3638 1.4332,24.3638 -48.7276,50.1608 -31.5297,-4.2995 -71.6583,7.1659 -2.8663,1.4331 2.8663,7.1658 2.8663,10.032 0,1.4332 -2.8663,0 -2.8663,0 -4.2995,5.7327 -15.7649,11.4654 -12.8985,18.6312 1.4331,7.1659 22.9307,-7.1658 22.9307,0 -1.4332,20.0644 -8.599,4.2995 -15.7649,10.0322 -12.8985,10.0322 -24.3638,38.6954 -34.3959,47.2944 -8.599,10.0322 -28.6634,5.7327 -34.396,17.1981 -4.2995,10.0321 4.2995,22.9305 0,31.5297 -5.7327,15.7647 -31.5296,15.7647 -41.5618,30.0964 -17.198,21.4975 1.4332,41.5619 -5.7327,64.4924 -1.4332,4.2995 -15.7648,-2.8663 -15.7648,15.7649 0,2.8663 -7.1659,5.7327 -5.7327,5.7327 17.198,4.2995 37.2624,-2.8664 45.8614,-20.0644 1.433,-2.8663 -5.7327,-5.7327 -7.166,-8.599 0,-4.2995 -1.433,-7.1658 1.4333,-10.0322 12.8984,-20.0642 53.0271,-20.0642 71.6582,-11.4652 5.7327,1.433 -5.7327,10.0321 -4.2995,14.3316 0,7.1658 8.599,10.0321 10.0322,17.198 1.4331,8.599 -18.6311,7.1658 -10.0322,21.4975 2.8663,2.8662 11.4653,-1.4333 12.8985,2.8662 2.8663,4.2995 -4.2995,11.4654 -2.8663,15.7649 1.4331,2.8663 7.1658,-5.7327 8.599,-2.8664 7.1658,7.1659 7.1658,17.1981 12.8985,25.7971 -65.9256,38.6954 -28.6634,21.4975 -8.599,55.8934 2.8663,5.7327 -2.8664,15.7649 1.4331,21.4974 4.2996,10.0322 18.6312,11.4655 22.9307,20.0644 7.1659,12.8985 -38.6955,50.1609 -45.8612,51.5939 -4.2995,1.4332 -7.166,-7.1657 -11.4654,-7.1657 -7.1658,1.4332 -20.0643,1.4332 -20.0643,8.5989 -2.8664,22.9307 44.4281,41.5619 51.5939,53.0272 4.2995,8.5989 5.7327,20.0643 5.7327,31.5296 -1.4332,4.2995 -14.3317,-2.8663 -15.7649,1.4332 -1.4331,2.8663 2.8664,5.7327 1.4332,7.1658 -4.2995,7.1659 -11.4652,11.4654 -17.1979,17.198 -4.2995,8.5991 10.0321,12.8986 11.4652,17.1981 0,2.8662 -7.1658,2.8662 -7.1658,5.7325 -1.4332,20.0644 35.8292,47.2946 51.5939,51.5941 8.599,2.8662 18.6312,-1.4333 27.2302,-1.4333 8.599,-1.4332 18.6312,-7.1657 25.7971,-2.8662 21.4974,15.7647 -27.2302,48.7276 -20.0644,74.5245 -1.4332,0 -25.7969,8.599 -28.6634,11.4654 -1.433,1.4331 2.8665,7.1658 0,7.1658 -1.433,-1.4332 0,-7.1658 -1.433,-7.1658 -8.599,1.4331 -18.6312,2.8663 -24.3639,8.599 -4.2995,4.2995 2.8664,14.3316 -2.8663,18.6311 -5.7327,4.2996 -15.7649,-1.4331 -22.9307,2.8664 -5.7327,4.2995 -4.2995,15.7647 -11.4652,21.4974 -5.7327,2.8663 -12.8986,-4.2995 -18.6312,-1.4332 -4.2995,1.4332 -1.4332,8.599 -5.7327,12.8985 -4.2995,5.7327 -15.7649,7.1659 -18.6312,14.3317 -1.4332,5.7327 11.4654,14.3317 5.7327,18.6312 -7.1659,7.1659 -21.4974,0 -31.5296,1.4332 -12.8985,2.8662 -21.4975,15.7647 -32.9629,20.0642 -12.8985,4.2995 -2.8663,-15.7647 -31.5296,-17.198 -18.6312,-1.4332 1.4332,7.166 -1.4331,10.0322 -2.8664,2.8663 -8.599,2.8663 -12.8986,1.4333 -4.2995,0 -8.599,0 -10.0321,-2.8665 0,-2.8662 10.0321,-10.0322 -10.0322,-20.0642 -4.2995,-1.4332 -8.599,0 -14.3317,0 -10.0322,-2.8664 -21.4974,-1.4332 -28.6632,-8.599 -7.1659,-7.1659 0,-21.4976 -5.7327,-28.6634 -2.8664,-4.2995 -8.599,5.7327 -14.3317,5.7327 -8.599,0 -25.7969,2.8663 -24.3639,-5.7327 1.4333,-11.4652 27.2302,-7.1657 28.6634,-18.6311 0,-11.4653 -15.7647,-20.0643 -25.7969,-18.6312 -8.599,1.4332 7.1657,17.1981 2.8662,22.9306 -7.1657,7.166 -18.6311,11.4655 -28.6632,10.0322 -22.9306,-1.4332 -15.7649,-41.5618 -20.0644,-35.8291 -20.0642,22.9307 24.3639,32.9629 11.4654,38.6954 -45.8613,18.6312 -25.7971,-11.4652 -27.2301,-17.1979 -1.4332,-5.7327 -51.5941,-11.4653 -55.8936,-14.3317 -11.4652,-5.7326 -25.7969,-24.3638 -40.1286,-15.7648 -15.7647,8.599 -38.6954,37.2624 -54.4603,45.8614 -14.3317,7.1657 -42.9949,1.433 -60.1929,25.7969 -2.8664,2.8663 4.2995,8.599 4.2995,12.8985 -2.8664,14.3317 -21.4976,22.9306 -22.9307,38.6954 0,4.2995 10.0322,2.8664 11.4653,7.1659 7.1659,25.797 -11.4653,18.6312 -1.4331,47.2944 2.8663,8.599 11.4653,15.7649 20.0643,22.9307 h -5.7327 c -22.9307,-5.7327 -48.7276,-18.6312 -70.2251,-4.2995 -4.2995,2.8663 1.4332,14.3317 -4.2995,15.7649 -14.3317,4.2995 -38.6954,-24.3639 -53.0271,-24.3639 -12.8985,0 -22.9307,7.1658 -34.3959,8.599 -8.5992,1.4332 -10.0322,-14.3317 -12.8986,-17.198 -7.1658,-5.7327 -18.6311,-8.599 -28.6633,-12.8984 14.3317,-18.6312 11.4653,-37.2624 -25.7969,-34.3961 -1.4332,0 -5.7327,5.7327 -8.5991,12.8986 v -1.4332 c -7.1658,-4.2995 -2.8663,-17.198 -10.0321,-22.9307 -4.2995,-4.2995 -12.8985,-4.2995 -20.0644,-5.7327 -2.8663,0 -7.1658,1.4332 -8.599,0 -15.7647,-14.3315 -30.0964,-31.5296 -54.4603,-35.8291 -17.198,-2.8663 -10.032,30.0966 -10.032,30.0966 -15.7649,-1.4333 -28.6634,-12.8987 -42.9951,-11.4655 -4.2995,0 -4.2995,8.599 -8.599,8.599 -8.599,-1.433 -12.8984,-11.4652 -21.4974,-12.8984 -8.599,-1.4333 -14.3317,7.1659 -22.9307,5.7327 -18.6312,0 -11.4653,-18.6312 -21.4975,-27.2302 -20.0643,-17.198 -38.6955,8.599 -57.3266,-5.7327 -1.4332,0 -15.7649,-32.9627 -17.1981,-34.3959 -18.631,-14.3317 -50.1606,-7.1659 -70.225,-25.797 -2.8663,-2.8664 1.4332,-10.0322 0,-12.8985 -2.8663,-2.8664 -11.4653,12.8985 -20.0643,10.0321 -18.6312,-8.599 22.9305,-25.797 10.0321,-40.1286 -4.2995,-5.7326 -12.8985,-8.599 -20.0643,-10.0322 -1.4332,0 0,7.1659 -2.8664,5.7327 0,0 -15.7648,-14.3317 -24.3637,-22.9307 8.5989,-1.4331 14.3316,-2.8663 20.0642,-5.7326 41.5619,-20.0643 58.7598,-157.6482 74.5247,-200.6433 2.8663,-7.1657 5.7326,-17.1979 12.8985,-20.0642 5.7327,-2.8663 18.6312,10.0322 21.4974,2.8663 4.2995,-7.1658 -5.7327,-18.6312 -14.3316,-20.0643 -7.1658,-1.4332 -8.599,18.6312 -15.7648,15.7648 -14.3317,-4.2995 7.1658,-27.2302 10.0322,-41.5619 5.7326,-22.9305 21.4975,-107.4874 37.2622,-118.9527 5.7327,-2.8662 25.797,28.6634 31.5297,42.995 20.0644,42.995 -7.1658,2.8664 7.1659,48.7277 2.8663,8.599 11.4652,15.7648 14.3315,24.3638 1.4332,4.2994 -4.2995,17.1979 0,15.7648 7.1659,-1.4332 11.4654,-11.4654 10.0322,-17.1981 -2.8663,-8.5989 -12.8985,-11.4652 -18.6312,-18.631 -11.4652,-18.6312 4.2995,-53.0272 -7.1657,-74.5247 -5.7327,-11.4653 -15.7649,-21.4975 -24.3639,-31.5297 -5.7326,-7.1657 -12.8985,-14.3316 -21.4975,-20.0642 v 0 c 8.599,2.8663 18.6312,5.7326 27.2302,1.4331 10.0322,-5.7326 -21.4975,-20.0643 -18.6312,-31.5297 2.8664,-11.4652 15.7649,-17.1979 17.198,-28.6632 1.4332,-8.599 -8.599,-15.7649 -8.599,-24.3639 0,-10.032 8.599,-20.0642 8.599,-30.0964 0,-2.8663 -7.1658,-2.8663 -11.4653,-1.4332 -2.8663,1.4332 0,10.0322 -2.8663,8.5989 -7.1659,-2.8662 -8.5989,-14.3315 -14.3316,-18.631 -4.2995,-1.4332 -10.0322,4.2995 -14.3317,1.4331 -4.2995,-2.8663 0,-12.8985 -4.2995,-15.7648 -25.797,-24.3639 -11.4653,28.6633 -35.8292,-18.6312 -1.4332,-4.2994 -2.8662,-35.8291 -8.599,-42.9949 -1.4332,-1.4332 -5.7327,0 -7.1659,-1.4332 -5.7325,-8.599 -12.8984,-18.6312 -17.1979,-28.6633 -5.7326,-14.3317 22.9306,-28.6633 25.7971,-34.396 5.7325,-12.8985 -28.6634,-21.4974 -28.6634,-22.9306 -2.8663,-10.0322 -2.8663,-15.7648 -1.4332,-20.0643 h -1.4331 c -58.7598,-5.7327 -4.2995,-20.0644 -2.8664,-51.594 1.4332,-18.6312 -58.7598,-2.8663 -60.1929,-10.0322 -2.8664,-11.4653 14.3316,-15.7648 22.9307,-21.4975 1.433,-1.4332 -7.1659,2.8663 -8.5991,1.4332 -1.4331,-1.4332 0,-5.7327 -1.4331,-7.1659 -4.2995,0 -5.7327,4.2995 -10.0322,5.7327 -11.4653,0 -22.9307,-8.599 -32.9629,-4.2995 -1.433,1.4332 -2.8663,2.8663 -2.8663,4.2995 v -1.4332 c 2.8663,-18.631 17.198,-37.2622 -12.8984,-40.1286 -15.7649,-1.4331 -11.4654,18.6312 -22.9307,11.4654 -8.599,-5.7327 -20.0642,-24.3639 -28.6634,-28.6634 -5.7325,-1.4331 -12.8984,4.2995 -17.1979,0 -18.6312,-14.3317 4.2995,-31.5296 -31.5297,-28.6632 -2.8663,1.4331 2.8664,8.599 0,10.032 -10.032,4.2995 -24.3637,12.8986 -32.9627,5.7327 -8.599,-5.7327 0,-21.4974 -2.8664,-31.5296 -4.2995,-17.198 -22.9307,-12.8985 -34.396,-20.0643 -1.4332,-1.4332 2.8663,-5.7327 5.7327,-5.7327 14.3317,-2.8662 28.6633,-1.4332 42.995,-1.4332 2.8662,0 10.0322,5.7327 10.0322,2.8664 0,-2.8664 -12.8985,-22.9306 -21.4975,-37.2623 l 1.4331,1.4332 c 7.1659,2.8663 15.7649,0 24.3638,1.4331 5.7327,0 18.6312,5.7327 14.3317,2.8664 -10.0322,-5.7327 -27.2301,-2.8664 -31.5296,-12.8985 -2.8664,-8.5991 20.0642,-5.7327 21.4974,-14.3317 4.2995,-17.1979 -85.9899,48.7277 -55.8935,-28.6633 1.4332,0 48.7278,-18.6312 61.6262,-18.6312 15.7648,0 -20.0643,18.6312 14.3316,8.599 10.0322,-1.4331 20.0644,-12.8985 30.0966,-10.0321 8.5989,2.8663 4.2995,20.0643 12.8984,22.9305 5.7327,0 1.4332,-17.1979 7.1658,-18.631 10.0322,0 17.198,18.631 27.2302,15.7648 8.599,-2.8663 2.8664,-21.4975 11.4654,-27.2302 2.8663,-2.8663 8.599,5.7327 12.8984,5.7327 8.599,0 18.6312,-8.599 25.797,-4.2995 7.1658,4.2995 1.4332,18.6312 8.599,22.9307 4.2995,2.8663 4.2995,-7.1659 8.599,-10.0322 7.1659,-5.7327 30.0964,55.8935 35.8291,67.3588 1.4332,1.4332 1.4332,-5.7327 4.2995,-5.7327 8.599,-5.7326 17.198,-7.1658 27.2302,-11.4653 7.1659,-4.2995 12.8984,-15.7649 20.0643,-12.8985 12.8985,5.7326 1.4331,55.8934 35.8292,41.5617 10.032,-4.2994 4.2995,-22.9305 11.4652,-32.9627 7.1658,-10.0322 8.599,20.0643 17.198,21.4975 8.599,1.4332 15.7649,-2.8663 24.3639,-1.4332 8.599,0 25.7969,12.8984 28.6632,4.2995 2.8664,-15.7648 -30.0964,-27.2302 -25.7969,-42.9949 2.8664,-10.0322 5.7327,-20.0644 10.0322,-30.0965 -2.8663,0 -5.7327,-1.4332 -4.2995,-7.1659 2.8663,-10.0322 11.4652,-21.4975 11.4652,-32.9627 0,-2.8664 -8.5989,1.433 -10.032,-1.4332 -2.8664,-7.1658 0,-18.6312 -4.2995,-25.797 -1.4332,-4.2995 -10.0322,-4.2995 -12.8986,-8.599 -2.8663,-8.5989 -4.2995,-20.0644 -2.8663,-28.6633 0,-4.2995 7.1658,-5.7327 7.1658,-8.599 0,-10.0322 -5.7326,-20.0644 -7.1658,-30.0965 0,-2.8664 2.8663,5.7326 4.2995,7.1658 11.4654,5.7327 21.4974,11.4653 32.9629,14.3317 2.8662,1.4332 7.1657,-1.4332 10.032,-1.4332 11.4654,0 22.9307,-5.7327 32.9629,0 5.7327,1.4332 2.8662,10.0322 0,15.7649 -1.4332,2.8663 -5.7327,1.4331 -8.599,4.2995 -4.2995,4.2995 11.4652,50.1607 12.8985,50.1607 58.7598,8.5991 -25.797,-27.2301 20.0643,-10.0321 21.4975,8.599 48.7277,12.8985 68.7919,22.9307 7.1659,4.2995 11.4654,14.3315 18.6312,15.7647 32.9628,4.2995 25.7969,-14.3317 50.1608,-21.4974 5.7327,-1.4332 11.4653,-1.4332 18.6312,-1.4332 -15.7649,-2.8663 -30.0965,-12.8985 -10.0322,-47.2944 14.3317,-22.9307 110.3537,-25.797 136.1508,-40.1287 10.032,-4.2995 17.198,-12.8984 27.2302,-18.6311 8.5989,-4.2995 24.3637,-2.8663 28.6632,-11.4655 4.2995,-8.5989 -11.4653,-12.8984 -12.8985,-21.4974 -1.4332,-4.2995 0,-11.4653 2.8663,-14.3317 2.8664,-2.8663 8.599,2.8664 8.599,0 0,-2.8663 -7.1658,-2.8663 -7.1658,-7.1658 0,-10.0322 11.4654,-78.824 14.3317,-85.9899 5.7327,-17.198 53.0271,-20.0643 65.9256,-21.4975 17.1979,-1.4332 34.3959,-2.8663 50.1608,-5.7327 z m 804.0059,1563.5838 c 20.0644,14.3317 1.0072,47.0705 1.0072,62.8354 6.9309,9.9826 8.3042,16.0925 11.8914,24.5878 4.2995,10.032 4.2995,41.5617 4.2995,50.1606 1.433,24.3639 -22.9307,42.9951 -22.9307,60.1931 0,18.6311 7.1658,44.4281 -8.599,61.6261 -1.4332,2.8664 -8.599,0 -8.599,2.8664 0,4.2995 10.0321,0 8.599,2.8663 0,5.7327 -8.599,5.7327 -11.4654,10.0322 -4.2995,10.0322 0,22.9306 -7.1657,31.5296 -20.0644,20.0643 -14.3317,-21.4974 -18.6312,-22.9307 -18.6312,-5.7327 -30.0965,8.599 -42.9949,-12.8984 -2.8665,-4.2995 5.7325,-10.0322 2.8662,-15.7649 -4.2994,-8.599 -21.4974,-11.4653 -20.0643,-21.4975 0,-11.4653 22.9306,-17.198 21.4976,-28.6634 -1.4333,-8.5989 -24.3639,8.5992 -25.7971,0 -2.8663,-11.4652 20.0644,-17.1979 18.6311,-27.23 -1.433,-11.4654 -22.9306,-8.5991 -25.7969,-20.0644 -1.4332,-8.5989 17.198,-11.4652 17.198,-21.4974 0,-8.599 -14.3317,-12.8985 -18.6312,-21.4975 -1.4331,-5.7327 14.3317,-1.4332 17.1979,-5.7327 2.8665,-10.0322 1.4333,-22.9306 7.166,-31.5296 1.4332,-2.8663 4.2995,7.1657 7.1657,5.7327 7.1659,-1.4332 8.599,-11.4654 15.7649,-14.3317 5.7326,-2.8664 12.8985,2.8663 18.6312,0 7.1658,-4.2995 7.1658,-17.198 14.3315,-18.6312 8.599,-1.4332 15.7649,10.0322 25.7971,10.0322 8.599,0 -1.4332,-18.6312 0,-28.6634 1.4331,-11.4652 12.8985,-20.0642 18.6311,-31.5296 z m -331.0613,-123.2522 c 11.4654,0 21.4976,-10.0322 21.4976,-20.0644 0,-10.0322 -10.0322,-18.6312 -21.4976,-18.6312 -11.4653,0 -21.4974,8.599 -21.4974,18.6312 0,10.0322 10.0321,20.0644 21.4974,20.0644 11.4654,0 -11.4653,0 0,0 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cscccsccsccccsccccsccccccccsccccccccccccccccscccccccccscscccccccccccccccccccccccccccsccsscccccccccsccccscscccccccsccccccccccscscccccccccccccscscccccccccccccccccccscccccsscscsscccsccccccccccccscccccccccccccccsscccccccsccccccsscccccccsscccccsccccscccscsscccccccccscssscccccccscscccccscccccscccccccsccssssss" /><path
+ id="es"
+ class="eu europe"
+ d="m 5033.9567,6695.4203 c 10.0322,4.2994 21.4975,7.1657 28.6633,12.8984 2.8664,2.8663 4.2994,18.6312 12.8986,17.198 11.4652,-1.4332 21.4974,-8.599 34.3959,-8.599 14.3317,0 38.6954,28.6634 53.0271,24.3639 5.7327,-1.4332 0,-12.8986 4.2995,-15.7649 21.4975,-14.3317 47.2944,-1.4332 70.2251,4.2995 h 5.7327 c 7.1658,7.1659 12.8985,14.3317 10.0322,22.9307 -2.8664,11.4652 -21.4975,8.5989 -28.6634,15.7647 -5.7326,5.7327 17.198,38.6956 2.8664,63.0593 -7.1659,15.7649 -68.792,40.1286 -85.9899,47.2946 -15.7649,5.7327 -40.1287,11.4652 -51.5941,21.4974 -8.599,5.7327 -21.4974,27.2302 -34.3959,30.0965 -48.7276,14.3316 -136.1508,4.2994 -174.8462,35.8291 -10.0322,8.599 -30.0965,15.7649 -27.2302,28.6634 4.2995,10.0322 25.797,8.5989 24.3639,18.6311 0,4.2995 -44.4281,14.3317 -47.2946,15.7648 -17.1979,12.8985 -22.9306,37.2623 -37.2622,51.594 -40.1286,41.5617 -93.1559,81.6904 -118.9528,134.7176 -11.4653,21.4975 4.2995,90.2893 17.198,108.9205 4.2995,5.7327 57.3266,35.8292 44.4281,44.4281 -10.0321,8.599 -34.3959,11.4654 -44.4281,18.6312 -2.8663,2.8664 -2.8663,10.0322 -5.7326,11.4654 -2.8664,2.8663 -7.1659,-1.4332 -10.0322,-1.4332 -11.4654,2.8663 -24.3639,4.2995 -34.3961,11.4653 -4.2995,4.2995 -1.433,14.3317 -7.1657,18.6312 -4.2995,2.8664 -11.4653,-2.8663 -14.3317,0 -5.7326,7.1659 -1.4331,18.6311 -5.7326,24.3638 -5.7327,5.7327 -17.1981,0 -21.4976,7.1658 -5.7325,8.599 2.8664,21.4975 -1.4331,30.0966 -11.4654,28.6632 -37.2623,-4.2997 -38.6955,41.5617 0,11.4654 22.9307,15.7649 20.0644,25.7969 -4.2995,10.0322 -20.0644,8.5992 -31.5297,7.1659 -7.1659,0 -14.3317,-7.1659 -21.4974,-8.5989 -30.0966,-8.599 -65.9258,5.7327 -91.7227,22.9306 -44.4281,28.6633 -44.4281,84.5568 -90.2895,107.4875 -17.1979,10.032 -22.9306,-37.2624 -65.9255,-25.7971 -8.599,2.8664 -12.8985,14.3317 -22.9307,17.1981 -12.8985,4.2995 -42.9949,-20.0644 -55.8934,-21.4976 -17.1981,-4.2995 -35.8291,5.7327 -54.4603,2.8664 -10.0322,-2.8664 -15.7649,-11.4654 -25.797,-14.3317 -18.6311,-7.1658 -103.1879,-20.0644 -118.9528,-17.198 -17.198,4.2995 -25.797,25.797 -41.5618,32.9628 -22.9306,8.5991 -51.5939,-17.198 -83.1236,-1.4331 -25.7969,12.8985 -22.9307,24.3637 -35.8291,42.9949 -1.4332,1.4332 -10.0322,-7.1658 -15.7649,-2.8663 -8.599,7.1658 -15.7648,18.6312 -27.2301,22.9307 -4.2994,1.4331 -4.2994,-8.599 -8.5991,-11.4654 -5.7325,-4.2995 -14.3315,-5.7326 -18.631,-10.0322 -5.7327,-7.1658 -7.1659,-17.198 -14.3317,-22.9305 -4.2995,-4.2995 -12.8985,0 -17.198,-4.2995 -10.0322,-10.0322 -24.3638,-57.3268 -27.2301,-71.6583 0,-1.4332 21.4974,20.0642 18.6312,7.1658 0,-4.2995 -8.599,0 -10.0322,-2.8663 -1.4332,-2.8664 5.7327,-5.7327 4.2995,-8.599 -4.2995,-24.3639 -25.797,4.2995 -24.3639,-37.2623 0,0 55.8935,-25.797 42.995,-28.6634 -11.4654,-2.8663 -18.6311,21.4974 -30.0966,18.6312 -10.032,-1.4332 -5.7325,-18.6312 -10.032,-27.2302 -4.2995,-8.599 -10.0322,-15.7648 -15.7649,-22.9307 0,0 -38.6954,-37.2622 -38.6954,-37.2622 0,-1.4332 0,-1.4332 0,-2.8664 -1.4332,2.8664 -2.8664,4.2995 -5.7327,4.2995 -8.599,1.4332 -12.8985,-10.0321 -20.0643,-14.3317 -5.7327,-2.8663 -31.5296,-7.1658 -50.1608,-7.1658 2.8663,-60.1928 -11.4654,-70.225 35.8291,-111.7869 8.599,-7.1658 7.1658,-22.9307 15.7648,-27.2301 2.8664,-1.4333 73.0915,-2.8663 55.8935,-31.5297 -4.2995,-7.1658 -18.6311,4.2995 -25.7969,0 -7.1659,-5.7327 -5.7327,-17.198 -8.5991,-25.7969 -2.8663,-8.599 -2.8663,-18.6312 -8.599,-25.797 -1.4331,-2.8664 -10.0321,0 -10.0321,-2.8664 4.2995,-10.0321 14.3316,-17.198 18.6311,-27.2302 8.5991,-17.1979 -15.7648,-4.2995 8.5991,-24.3637 21.4974,-17.198 50.1607,-14.3317 53.0271,-51.594 0,-2.8663 -27.2302,-21.4975 -32.9629,-32.9628 -8.599,-18.6311 1.4332,-48.7276 1.4332,-51.594 -1.4332,-1.4331 -24.3638,-45.8613 -24.3638,-47.2944 -1.4331,-2.8664 4.2994,1.4331 7.1659,1.4331 12.8984,4.2996 21.4974,5.7327 34.3959,8.5991 32.9629,8.599 40.1286,11.4652 57.3266,-21.4976 20.0644,-40.1286 -1.4332,-25.797 -5.7327,-55.8934 -4.2995,-27.2302 40.1286,-14.3317 41.5618,-34.3959 1.4333,-14.3317 -14.3316,-1.4332 -5.7327,-18.6312 1.4333,-2.8664 7.166,-2.8664 8.599,-7.1659 4.2997,-10.0321 4.2997,-20.0643 5.7327,-30.0965 1.4332,-11.4652 10.0322,-22.9306 8.599,-34.3959 0,0 -12.8985,-34.3961 -12.8985,-34.3961 4.2995,-4.2995 14.3317,4.2995 20.0644,1.4332 0,0 30.0965,-31.5296 30.0965,-31.5296 21.4974,-11.4653 61.6261,-12.8985 73.0915,-44.4281 8.5989,-28.6634 -28.6634,-25.797 -38.6956,-27.2302 -7.1658,-1.4332 5.7327,-55.8934 0,-58.7598 -27.2302,-14.3317 -32.9627,-1.4331 -65.9256,-14.3317 -5.7327,-2.8663 -4.2995,-17.198 -17.198,-8.599 -2.8664,2.8665 2.8663,10.0322 0,12.8985 -20.0643,17.1981 -41.5618,-2.8663 -47.2945,-4.2995 -5.7326,-2.8663 -12.8985,4.2995 -17.198,1.4332 -2.8662,-1.4332 8.599,-4.2995 5.7327,-7.1657 -1.4332,-5.7327 -8.5989,-7.166 -14.3316,-7.166 -8.599,-1.433 -18.6312,1.4333 -27.2302,0 -1.4331,-1.433 1.4332,-4.2995 1.4332,-7.1657 0,-1.4332 1.4332,-7.1659 0,-5.7327 -7.1658,1.4332 -24.3639,21.4974 -37.2624,12.8984 -34.3959,-24.3637 32.9629,-30.0964 15.7649,-47.2944 -2.8664,-2.8664 -8.5989,0 -11.4654,-2.8664 -1.433,-2.8663 5.7327,-8.599 2.8665,-10.032 -25.7971,-5.7327 -61.6263,2.8662 -83.1237,14.3316 2.8664,-11.4654 -12.8985,-21.4976 -12.8985,-32.9628 -1.4332,-4.2995 7.1658,5.7327 10.0322,2.8663 2.8663,-1.4331 -2.8664,-7.1658 -1.4332,-10.0322 2.8664,-12.8985 24.3639,-8.599 34.3959,-17.198 2.8664,-1.4331 8.5991,-8.599 4.2996,-7.1658 -8.5991,1.4332 -17.1981,10.0322 -25.797,11.4653 -7.1658,1.4332 -10.0321,-11.4653 -4.2995,-17.198 8.5989,-5.7327 27.2301,-1.433 30.0965,-11.4652 1.4331,-8.599 -18.6311,2.8662 -25.797,0 -5.7326,-2.8665 -10.0321,-10.0322 -11.4653,-15.7649 -1.4332,-14.3317 12.8985,4.2995 14.3317,2.8664 2.8663,-5.7327 0,-12.8985 4.2995,-18.6312 4.2995,-7.1659 17.1979,-8.599 18.6311,-17.1979 7.1658,-70.2253 -50.1608,10.032 -61.6262,-58.7599 -8.599,-47.2945 31.5297,-32.9628 32.9629,-40.1286 1.4332,-4.2995 -11.4654,0 -15.7649,-2.8664 -1.4331,-2.8663 4.2995,-5.7326 5.7327,-5.7326 15.7649,-2.8664 24.3639,1.4331 35.8291,0 37.2624,-2.8664 87.4232,-34.396 121.8191,-48.7276 12.8985,-5.7327 27.2302,-24.3639 40.1287,-15.7649 5.7327,4.2995 -8.599,21.4975 -1.4332,22.9307 11.4654,1.4332 18.6311,-18.6312 30.0965,-18.6312 38.6955,0 35.8292,67.3588 71.6583,75.9578 7.1658,1.4332 10.0321,-14.3317 17.198,-12.8985 40.1286,10.0322 18.6312,11.4653 58.7598,17.198 10.0321,1.4332 28.6632,-2.8663 37.2622,-1.4332 8.599,2.8664 12.8985,11.4654 21.4976,11.4654 11.4653,0 21.4975,-14.3317 32.9627,-11.4654 10.0322,2.8664 11.4654,20.0643 20.0644,27.2301 8.599,7.1659 25.797,-1.4331 34.3959,7.1659 2.8663,2.8663 -5.7327,7.1658 -2.8662,8.599 2.8662,4.2995 11.4652,-5.7327 15.7647,-2.8663 35.8292,24.3638 128.9849,70.2251 176.2795,55.8934 2.8662,-1.4332 2.8662,-7.1657 5.7325,-8.599 5.7327,-1.4332 11.4654,0 17.1981,0 11.4653,1.4333 41.5617,-1.4332 50.1607,15.7648 0,1.4332 -1.4331,4.2995 -2.8663,5.7327 11.4654,2.8664 42.9949,32.9629 54.4603,32.9629 4.2995,0 -2.8662,-10.0322 0,-12.8985 2.8663,-4.2995 8.599,-5.7327 14.3317,-7.1659 41.5617,-5.7326 14.3317,-1.4331 31.5297,18.6311 5.7325,5.7327 17.1979,-2.8662 22.9306,1.4333 8.599,4.2994 12.8985,14.3316 20.0643,18.6311 18.6312,10.0321 58.7598,8.599 85.99,1.4331 8.5989,8.599 24.3637,22.9307 24.3637,22.9307 2.8664,1.4332 1.4332,-5.7327 2.8664,-5.7327 7.1658,1.4332 15.7648,4.2996 20.0643,10.0322 12.8984,14.3316 -28.6633,31.5296 -10.0321,40.1286 8.599,2.8664 17.198,-12.8985 20.0643,-10.0321 1.4332,2.8663 -2.8663,10.0321 0,12.8985 20.0644,18.6311 51.594,11.4653 70.225,25.797 1.4332,1.4332 15.7649,34.3959 17.1981,34.3959 18.6311,14.3317 37.2623,-11.4653 57.3266,5.7327 10.0322,8.599 2.8663,27.2302 21.4975,27.2302 8.599,1.4332 14.3317,-7.166 22.9307,-5.7327 8.599,1.4332 12.8984,11.4654 21.4974,12.8984 4.2995,0 4.2995,-8.599 8.599,-8.599 14.3317,-1.4332 27.2302,10.0322 42.9951,11.4655 0,0 -7.166,-32.9629 10.032,-30.0966 24.3639,4.2995 38.6956,21.4976 54.4603,35.8291 1.4332,1.4332 5.7327,0 8.599,0 7.1659,1.4332 15.7649,1.4332 20.0644,5.7327 7.1658,5.7327 2.8663,18.6312 10.0321,22.9307 v 1.4332 c -7.1658,14.3315 -10.0321,34.3959 34.396,21.4975 z m -1248.2872,1060.5425 10.032,41.5619 h 31.5297 c 0,-4.2995 -1.4331,-7.1659 -1.4331,-11.4654 -1.4332,-8.599 -4.2995,-17.198 -1.4332,-25.797 1.4332,-4.2995 14.3317,-5.7327 12.8985,-10.0322 -8.599,-20.0642 -48.7277,4.2995 -51.5939,5.7327 0,0 0,0 0,0 z m 369.7566,173.413 21.4975,14.3317 c 0,-12.8984 2.8664,-27.2301 1.4332,-38.6954 -2.8664,-11.4654 -14.3317,17.198 -22.9307,24.3637 0,0 0,0 0,0 z m 27.2302,11.4654 2.8663,-4.2994 c -1.4331,0 -2.8663,0 -2.8663,2.8662 0,1.4332 0,1.4332 0,1.4332 z m 1010.3818,-752.4119 c -21.4975,73.0913 4.2994,21.4974 40.1286,51.5939 10.0322,8.5989 -63.0593,78.8242 -68.7919,77.3909 -7.1659,0 -5.7327,-15.7649 -12.8984,-20.0643 -21.4976,-12.8985 -22.9307,10.0321 -30.0966,-11.4653 -2.8663,-10.0322 0,-22.9307 -7.1658,-28.6634 -5.7327,-5.7325 -14.3317,4.2995 -20.0644,2.8664 -10.032,-1.4332 -20.0642,-5.7327 -28.6632,-11.4654 -1.4332,-1.433 1.433,-4.2995 2.8663,-5.7325 35.8291,-27.2302 80.2572,-45.8614 124.6854,-54.4603 z m 150.4824,1.433 c 32.9628,83.1237 -5.7327,25.7971 -25.7971,15.7649 -8.5989,-2.8663 -20.0642,4.2995 -28.6632,-1.4332 -35.8291,-24.3637 11.4653,-34.3959 54.4603,-14.3317 z m -255.1035,134.7176 c -8.5989,8.599 -21.4976,8.599 -21.4976,15.7649 0,5.7327 5.7328,17.198 12.8987,17.198 8.5989,0 14.3315,0 25.7969,-10.0322 11.4653,-10.0322 0,-17.198 0,-17.198 l -15.7649,-5.7327 z m -34.396,-42.9949 c -11.4653,2.8663 -14.3316,10.0322 -20.0643,17.198 -5.7327,8.5989 -14.3317,21.4974 -1.4332,27.2301 7.1659,4.2995 28.6634,-7.1657 32.9629,-15.7647 2.8663,-7.1659 11.4652,-8.5992 11.4652,-17.1981 0,-7.1658 -10.0322,-12.8985 -10.0322,-12.8985 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="pt"
+ class="eu europe"
+ d="m 3564.9619,7442.0995 c 2.8663,-60.1928 -11.4654,-70.225 35.8291,-111.7869 8.599,-7.1658 7.1658,-22.9307 15.7648,-27.2301 2.8664,-1.4333 73.0915,-2.8663 55.8935,-31.5297 -4.2995,-7.1658 -18.6311,4.2995 -25.7969,0 -7.1659,-5.7327 -5.7327,-17.198 -8.5991,-25.7969 -2.8663,-8.599 -2.8663,-18.6312 -8.599,-25.797 -1.4331,-2.8664 -10.0321,0 -10.0321,-2.8664 4.2995,-10.0321 14.3316,-17.198 18.6311,-27.2302 8.5991,-17.1979 -15.7648,-4.2995 8.5991,-24.3637 21.4974,-17.198 50.1607,-14.3317 53.0271,-51.594 0,-2.8663 -27.2302,-21.4975 -32.9629,-32.9628 -8.599,-18.6311 1.4332,-48.7276 1.4332,-51.594 -1.4332,-1.4331 -24.3638,-45.8613 -24.3638,-47.2944 -1.4331,-2.8664 4.2994,1.4331 7.1659,1.4331 12.8984,4.2996 21.4974,5.7327 34.3959,8.5991 32.9629,8.599 40.1286,11.4652 57.3266,-21.4976 20.0644,-40.1286 -1.4332,-25.797 -5.7327,-55.8934 -4.2995,-27.2302 40.1286,-14.3317 41.5618,-34.3959 1.4333,-14.3317 -14.3316,-1.4332 -5.7327,-18.6312 1.4333,-2.8664 7.166,-2.8664 8.599,-7.1659 4.2997,-10.0321 4.2997,-20.0643 5.7327,-30.0965 1.4332,-11.4652 10.0322,-22.9306 8.599,-34.3959 0,0 -12.8985,-34.3961 -12.8985,-34.3961 4.2995,-4.2995 14.3317,4.2995 20.0644,1.4332 0,0 30.0965,-31.5296 30.0965,-31.5296 21.4974,-11.4653 61.6261,-12.8985 73.0915,-44.4281 8.5989,-28.6634 -28.6634,-25.797 -38.6956,-27.2302 -7.1658,-1.4332 5.7327,-55.8934 0,-58.7598 -27.2302,-14.3317 -32.9627,-1.4331 -65.9256,-14.3317 -5.7327,-2.8663 -4.2995,-17.198 -17.198,-8.599 -2.8664,2.8665 2.8663,10.0322 0,12.8985 -20.0643,17.1981 -41.5618,-2.8663 -47.2945,-4.2995 -5.7326,-2.8663 -12.8985,4.2995 -17.198,1.4332 -2.8662,-1.4332 8.599,-4.2995 5.7327,-7.1657 -1.4332,-5.7327 -8.5989,-7.166 -14.3316,-7.166 -8.599,-1.433 -18.6312,1.4333 -27.2302,0 -1.4331,-1.433 1.4332,-4.2995 1.4332,-7.1657 0,-1.4332 1.4332,-7.1659 0,-5.7327 -7.1658,1.4332 -24.3639,21.4974 -37.2624,12.8984 -34.3959,-24.3637 32.9629,-30.0964 15.7649,-47.2944 -2.8664,-2.8664 -8.5989,0 -11.4654,-2.8664 -1.433,-2.8663 5.7327,-8.599 2.8665,-10.032 -25.7971,-5.7327 -61.6263,2.8662 -83.1237,14.3316 -2.8663,14.3316 -38.6954,21.4975 -30.0965,34.396 5.7327,7.1657 22.9307,4.2995 25.797,12.8985 2.8664,7.1657 -15.7648,-1.4333 -20.0643,4.2994 -8.5989,12.8985 -7.1659,74.5246 -4.2995,90.2895 0,4.2995 7.1658,5.7327 7.1658,11.4653 -1.4332,24.3638 -11.4652,38.6955 -21.4974,58.7598 -4.2995,8.599 -22.9307,27.2301 -12.8985,25.7969 10.032,-2.8663 10.032,-24.3637 20.0642,-27.2301 7.1659,-1.4331 11.4654,12.8986 8.599,18.6311 -7.1658,10.0322 -27.2301,5.7327 -34.3959,17.198 -10.0322,17.1981 -15.7649,37.2624 -27.2302,54.4603 -4.2995,7.1659 -12.8985,11.4654 -11.4652,18.6312 0,7.1659 12.8984,10.0322 15.7647,17.198 1.4332,2.8664 -7.1658,-8.599 -11.4652,-5.7326 -7.166,4.2995 -10.0322,15.7648 -15.7649,24.3637 -14.3317,22.9307 -30.0965,51.5941 -47.2944,71.6583 -4.2995,5.7327 -12.8985,7.1659 -18.6312,14.3317 -1.4332,1.4332 7.1657,5.7327 4.2995,7.1658 -11.4654,2.8664 -25.797,-7.1658 -32.9629,0 -7.1658,7.1659 5.7327,18.6312 2.8664,27.2301 -4.2995,14.3317 -47.2945,74.5248 -42.995,88.8563 2.8664,10.0322 10.0322,18.6312 15.7649,28.6634 14.3317,24.3638 8.5989,35.8291 8.5989,35.8291 11.4653,2.8663 24.3638,1.4332 35.8292,0 5.7327,0 8.599,-7.1658 14.3317,-5.7327 5.7325,0 8.599,8.599 15.7647,10.0322 4.2995,1.4332 4.2995,-18.6312 7.1658,-14.3317 4.2996,7.1659 -2.8663,17.198 0,22.9307 4.2996,5.7327 24.3639,8.599 18.6312,11.4654 -38.6954,18.631 -15.7648,-30.0966 -47.2944,-25.7971 -8.599,1.4332 10.0322,12.8985 12.8984,20.0644 1.4333,8.599 0,18.6312 -1.4332,28.6632 -2.8662,18.6312 -27.2301,35.8292 -27.2301,50.1608 0,5.7327 8.599,10.0322 8.599,15.7649 1.4332,10.0322 -14.3316,28.6633 -4.2995,31.5297 2.8664,0 12.8986,-4.2995 10.0322,-1.4332 -2.8663,4.2995 -11.4653,1.4332 -14.3317,5.7327 -7.1658,14.3317 -2.8663,31.5296 -10.0321,45.8613 -5.7327,11.4653 -40.1286,58.7597 -37.2623,74.5246 1.4332,5.7327 11.4652,-5.7327 17.1979,-5.7327 8.599,-1.4332 17.198,1.4332 25.797,0 4.2995,0 8.599,-4.2995 12.8985,-2.8663 22.9306,5.7327 97.4553,54.4603 107.4874,53.0271 4.2996,0 48.7277,-21.4975 51.594,-22.9307 4.2995,0 11.4653,0 18.6312,0 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="at"
+ class="eu europe"
+ d="m 6128.8952,5816.8897 c 0,10.0322 18.6312,12.8984 12.8985,27.2301 -1.4331,2.8663 -7.1658,1.4332 -8.599,2.8663 -1.433,4.2995 -5.7325,15.7649 -10.032,28.6634 l 7.1658,15.7647 v 17.198 c 14.3316,1.4332 37.2623,4.2996 38.6954,4.2996 2.8664,2.8663 -4.2995,7.1658 -1.4331,10.0321 7.1658,8.599 15.7648,14.3317 25.797,18.6312 22.9306,11.4654 27.2301,-27.2302 42.9949,-24.3638 30.0965,4.2995 -1.4331,20.0643 8.5989,24.3638 22.9307,11.4654 2.8665,-2.8663 25.7971,0 11.4653,1.4332 22.9307,31.5296 45.8612,18.6311 0,0 18.6312,-38.6954 18.6312,-38.6954 11.4654,-8.599 61.6261,-2.8664 74.5247,-4.2995 21.4975,-1.4332 38.6954,-20.0644 60.1929,-20.0644 5.7327,0 -10.0322,7.1658 -11.4653,12.8985 -7.1659,30.0964 11.4653,10.0322 22.9307,27.2302 2.8663,4.2995 -4.2995,10.0322 -1.4332,15.7649 1.4332,2.8662 5.7327,-2.8665 8.599,0 27.2301,20.0642 34.3959,22.9305 71.6583,28.6632 42.9949,5.7327 87.423,7.1659 131.8513,14.3317 11.4652,1.4332 22.9305,10.0322 34.3959,11.4652 11.4653,1.4332 22.9307,-7.1657 34.3959,-5.7325 7.1659,1.433 11.4654,11.4652 18.6312,11.4652 2.8663,1.4333 1.4332,-7.1657 4.2995,-8.5989 7.1658,-7.1658 18.6312,-10.0322 25.7969,-18.6312 5.7327,-4.2995 1.4333,-14.3317 5.7327,-18.6312 27.2302,-21.4975 55.8936,5.7327 81.6905,-5.7326 8.599,-4.2994 10.0322,-17.1981 18.6312,-20.0643 1.4331,-1.4333 48.7276,5.7327 50.1607,4.2994 4.2995,-1.4332 -4.2995,-7.1657 -5.7326,-11.4652 -2.8664,-14.3317 2.8663,-22.9307 12.8985,-25.7971 v 0 c 25.7969,-28.6632 37.2624,-32.9627 50.1608,-54.4602 2.8663,-5.7327 -22.9306,-35.8291 -15.7649,-50.1608 10.0322,-20.0644 34.396,1.4332 31.5297,-27.2302 -1.4332,-24.3638 -44.4281,-21.4974 -35.8292,-28.6633 20.0644,-17.198 71.6583,5.7327 80.2573,-10.0321 1.4332,-5.7327 -18.6312,-51.594 1.4332,-60.193 -17.198,-18.6312 -31.5296,-37.2624 -44.4281,-58.7598 -11.4654,-18.6312 30.0964,-48.7276 0,-70.2251 -4.2995,-2.8664 -10.0322,5.7327 -14.3317,5.7327 -7.1658,-1.4332 -21.4975,-20.0644 -31.5296,-17.1981 -7.1658,2.8664 -10.0322,14.3317 -18.6312,18.6312 -5.7327,1.4332 -12.8985,-1.4331 -18.6312,-1.4331 -38.6954,-4.2996 -71.6583,-35.8291 -113.22,-35.8291 -7.1659,0 -12.8985,8.5989 -20.0644,8.5989 -2.8663,-1.4332 0,-8.5989 -2.8663,-10.0321 -5.7327,-2.8665 -14.3316,-5.7327 -18.6311,-1.4333 -1.4332,2.8665 1.4332,44.4282 -1.4332,47.2946 -2.8663,4.2995 -12.8985,-5.7327 -18.6312,-1.4332 0,0 -11.4653,37.2623 -11.4653,37.2623 -10.0322,2.8663 -20.0644,-10.0322 -30.0964,-10.0322 -5.7327,0 -4.2995,11.4653 -10.0322,12.8985 -30.0965,11.4653 -47.2946,-18.6312 -70.2251,-30.0964 h -1.4332 c 1.4332,4.2995 2.8663,8.599 2.8663,12.8984 -1.4331,38.6955 -10.0321,30.0965 -40.1287,22.9307 -2.8662,0 -5.7325,1.4331 -7.1657,4.2995 -2.8664,14.3317 5.7327,30.0964 -8.599,41.5617 -12.8985,10.0322 -73.0915,24.3639 -74.5247,47.2946 0,0 34.3961,47.2944 34.3961,48.7276 1.433,1.4332 -18.6312,18.6311 -11.4654,24.3639 15.7649,14.3315 31.5296,-7.166 18.6311,40.1286 0,2.8663 -2.8662,7.1658 -5.7327,7.1658 -45.8612,-12.8985 -10.032,-35.8292 -31.5296,-37.2624 -11.4653,0 -21.4975,10.0322 -32.9627,8.599 -5.7327,-1.4331 -4.2995,-11.4653 -8.599,-12.8985 -8.599,-2.8663 -17.198,4.2995 -24.3639,1.4332 -2.8663,-1.4332 2.8664,-10.0322 0,-10.0322 -17.198,1.4332 -1.4332,24.3639 -5.7327,25.797 -20.0643,5.7327 -53.0271,-2.8663 -71.6583,4.2995 -5.7326,2.8664 -2.8663,12.8986 -8.599,15.7649 -5.7325,4.2995 -12.8984,-2.8663 -18.631,1.4332 -4.2996,1.433 1.4331,8.599 -1.4332,11.4652 -1.4332,1.4333 -50.1608,14.3317 -55.8936,11.4654 -2.8662,-2.8664 0,-10.0321 -2.8662,-12.8986 -1.4332,-2.8663 -8.599,-2.8663 -10.0322,-5.7325 -1.4331,-2.8665 7.1659,-1.4332 5.7327,-4.2995 -5.7327,-18.6312 -45.8614,4.2995 -57.3266,-8.599 0,0 2.8663,-1.4332 2.8663,-2.8664 -8.599,-5.7327 0,18.6311 -2.8663,28.6633 0,5.7327 -27.2302,38.6955 -37.2624,28.6633 -5.7327,-5.7326 10.0322,-14.3316 5.7327,-20.0643 -1.4332,-1.4332 -5.7327,4.2995 -8.599,4.2995 -2.8664,0 -7.1659,-1.4332 -8.5989,-4.2995 -2.8665,-4.2995 7.1657,-10.0322 0,-15.7649 -5.7327,-4.2995 -8.599,-11.4652 -14.3317,-14.3315 -4.2995,-2.8664 -10.0322,4.2995 -15.7649,2.8663 -2.8663,-2.8663 0,-10.0322 -2.8663,-12.8985 -7.1658,-5.7327 -5.7327,20.0642 -28.6634,12.8985 -1.433,-1.4332 -2.8662,-1.4332 -4.2995,-1.4332 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="it"
+ class="eu europe"
+ d="m 7023.1907,7523.79 c -18.6312,10.0322 -80.2572,159.0813 -65.9257,179.1457 5.7327,8.599 34.3961,8.599 25.7971,14.3317 -7.1659,4.2995 -5.7327,-10.0322 -10.0322,0 0,2.8663 -2.8664,5.7326 -1.4332,10.0321 2.8664,11.4654 20.0644,17.1981 24.3639,28.6633 1.433,2.8663 -4.2995,1.4332 -7.1659,4.2995 -7.1658,4.2995 -14.3316,8.599 -18.6312,15.7649 -4.2995,7.1658 -5.7326,15.7648 -7.1658,22.9305 -1.4332,8.599 4.2995,20.0644 0,27.2302 -2.8663,4.2995 -7.1658,-14.3315 -34.3959,-12.8985 -30.0966,2.8665 -17.198,12.8985 -57.3266,-5.7327 -17.1981,-7.1657 -21.4976,-38.6954 -40.1287,-50.1607 -25.7971,-15.7649 -48.7277,0 -77.3909,-11.4654 -4.2995,-1.433 -8.599,-2.8662 -12.8985,-5.7325 -5.7327,-4.2997 -8.599,-14.3317 -15.7649,-17.1981 -5.7327,-4.2995 -12.8985,0 -20.0643,-2.8663 -28.6633,-10.0322 -48.7276,-37.2624 -80.2572,-45.8613 -12.8986,-2.8663 -27.2302,10.0321 -40.1287,4.2994 -2.8664,-1.433 -37.2623,-38.6954 -35.8291,-44.4281 0,-5.7327 8.599,-8.599 8.599,-12.8985 1.433,-4.2994 -4.2995,-5.7327 -4.2995,-10.0321 0,-5.7326 2.8663,-12.8985 7.1658,-18.6312 4.2994,-5.7326 12.8984,-7.1658 18.6311,-12.8985 7.1658,-5.7326 14.3317,-27.2302 20.0643,-20.0642 2.8664,4.2994 7.1659,32.9627 20.0644,31.5296 48.7276,-7.1659 0,-42.995 61.6261,-40.1286 15.7649,0 2.8662,17.1979 11.4654,21.4974 5.7325,2.8663 14.3315,-4.2995 21.4974,-1.4332 4.2995,1.4332 2.8663,10.0322 5.7326,11.4654 8.5991,5.7326 20.0644,11.4653 30.0966,11.4653 1.433,0 37.2622,-17.198 37.2622,-17.198 11.4654,-1.4332 35.8291,7.1658 53.0272,2.8663 35.8292,-7.1658 34.396,-21.4975 53.0271,-31.5296 42.9949,-22.9306 11.4653,8.5989 53.0271,5.7327 28.6634,-1.4333 8.599,-17.198 20.0643,-28.6633 4.2995,-4.2996 4.2995,12.8985 8.5991,11.4653 25.797,-5.7327 25.797,-28.6634 48.7276,-12.8985 m -945.8894,-528.8381 c 4.2995,20.0642 67.3588,15.7647 58.7599,47.2944 -1.4333,8.599 -25.7971,5.7327 -22.9307,15.7649 2.8663,10.0322 22.9307,7.1657 30.0964,15.7647 2.8663,2.8664 -7.1657,4.2995 -7.1657,8.599 8.5989,51.594 21.4974,-21.4975 24.3637,47.2946 1.4332,24.3637 -24.3637,32.9627 -31.5297,53.0271 -7.1657,18.6311 14.3317,18.6311 17.198,34.3959 0,5.7327 -7.1658,11.4654 -7.1658,18.6312 -4.2995,47.2945 1.4332,113.2201 -25.7969,160.5145 -1.4332,2.8664 0,-4.2995 -2.8664,-5.7326 -20.0643,-7.1659 -45.8612,-27.2301 -70.2251,-25.7971 -4.2995,0 10.0322,5.7328 10.0322,10.0322 -1.4332,5.7327 -8.599,8.599 -10.0322,15.7649 -8.599,32.9628 14.3317,27.2302 -25.797,45.8612 -55.8935,25.7971 -21.4974,-27.2301 -48.7276,-38.6954 6.9358,17.1436 -13.4659,-15.8504 -21.4974,-24.3639 -8.599,-28.6632 11.4652,-47.2944 15.7647,-71.6583 1.4332,-10.032 -4.2995,-18.631 -1.4332,-28.6632 1.4332,-8.599 17.1981,-12.8985 14.3317,-21.4974 -1.4331,-7.166 -17.198,0 -21.4975,-5.7327 -4.2995,-7.1658 2.8663,-15.7649 2.8663,-22.9307 0,-1.4332 -5.7325,-1.4332 -4.2995,-2.8663 2.8665,-4.2995 11.4654,-2.8664 14.3317,-8.599 5.7327,-14.3317 -15.7647,-84.5569 -24.3637,-94.5889 -17.1981,-18.6312 -28.6634,42.9949 -24.3639,-28.6634 1.4332,-10.0322 11.4653,-17.198 12.8985,-27.2302 1.4332,-5.7327 -5.7327,-11.4652 -1.4332,-15.7647 1.4332,-1.4332 11.4654,28.6632 37.2623,28.6632 21.4975,1.4332 100.3217,-63.0593 113.2201,-78.824 m 590.4643,-1003.216 c -2.8663,28.6634 -38.6954,22.9307 -41.5619,45.8613 -2.8662,17.198 30.0966,14.3316 37.2624,20.0643 10.0322,8.5989 -17.198,20.0644 -21.4975,32.9628 -5.7327,18.6312 17.198,-1.4332 20.0643,5.7327 2.8664,7.1658 -12.8985,25.797 -2.8663,31.5297 14.3317,8.599 71.6583,42.9949 21.4975,40.1286 2.8662,-7.1659 2.8662,-12.8986 -2.8663,-20.0644 -27.2302,-25.7969 -26.6015,-7.0348 -37.5539,2.8344 -2.3099,3.0587 -2.5748,0.032 -2.5748,0.032 0,-14.3315 -27.2301,-17.198 -40.1286,-11.4653 -7.1659,4.2995 0,20.0643 -5.7327,25.797 -5.7327,5.7327 -15.7649,1.4332 -24.3639,4.2995 -20.0642,8.599 -38.6954,31.5296 -61.6261,35.8291 -7.1657,1.4332 -14.3316,-5.7325 -20.0642,-1.433 -5.7327,1.433 0,10.032 -2.8664,15.7647 -1.4331,4.2995 -5.7326,10.0322 -8.599,14.3317 1.4332,-1.4332 1.4332,-2.8664 2.8664,-2.8664 7.1658,0 1.4331,15.7649 7.1658,18.6312 2.8663,1.4332 4.2995,-8.599 7.1658,-5.7326 2.8664,5.7326 8.5989,17.198 2.8664,21.4974 -2.8664,1.4331 -4.2995,4.2995 -2.8664,7.1658 1.4332,1.4332 4.2994,-1.433 7.1659,-1.433 8.5989,7.1657 22.9306,11.4652 24.3637,21.4974 8.599,40.1286 -25.7969,24.3637 -35.8291,48.7276 -2.8663,7.1658 15.7649,84.5568 20.0643,93.1558 8.599,14.3316 108.9207,85.9899 128.9849,97.4552 20.0644,11.4654 25.797,4.2995 44.4282,20.0644 20.0643,17.198 47.2945,130.4181 63.0593,159.0813 15.7649,30.0966 48.7276,57.3266 74.5245,77.391 8.599,5.7327 21.4976,7.1658 28.6634,14.3317 4.2995,2.8663 0,11.4652 2.8663,14.3317 38.6955,40.1286 111.7869,27.2301 157.6482,20.0642 10.0322,-1.4332 31.5297,-17.198 44.4282,-2.8663 35.8291,40.1287 -71.6583,54.4603 -17.198,91.7226 51.594,34.396 123.2523,31.5296 176.2794,58.7598 18.6312,10.0322 25.797,25.7969 47.2944,32.9628 17.198,7.1658 64.4925,14.3317 78.8242,25.797 5.7326,4.2995 0,14.3317 4.2995,18.6312 17.198,24.3637 63.0593,20.0642 77.3909,70.225 5.7327,18.6312 -7.1658,12.8985 -11.4653,25.797 -2.8663,7.1659 1.4332,35.8291 -4.2995,38.6955 -5.7327,4.2995 -15.7649,0 -24.3639,-4.2994 -44.4281,-17.198 -25.7969,-42.9951 -48.7276,-73.0915 -12.8985,-17.198 -54.4603,0 -75.9578,-7.1658 -28.6632,-10.0322 -44.4281,-42.9951 -71.6583,-14.3317 -2.8662,4.2995 -38.6954,75.9578 -38.6954,78.8241 0,4.2994 7.1658,8.5989 5.7326,14.3316 -5.7326,27.2302 -34.3959,25.797 -10.0321,57.3266 14.3317,17.198 18.6312,1.4333 34.396,5.7327 17.1979,5.7327 28.6633,22.9307 44.4281,30.0965 5.7327,2.8664 14.3317,0 17.198,5.7327 2.8664,4.2995 -5.7326,10.0322 -5.7326,15.7647 1.4331,40.1288 20.0642,2.8665 17.198,54.4604 -1.4333,30.0965 -58.7599,18.6311 -84.5568,48.7276 -18.6312,21.4976 5.7326,42.995 0,68.792 -4.2995,21.4974 -18.6312,15.7649 -32.9629,27.2301 -34.3959,30.0965 -10.0322,98.8885 -81.6904,78.8241 -14.3317,-4.2995 -30.0965,-41.5617 -21.4975,-57.3266 5.7327,-8.599 20.0644,-7.1658 27.2302,-14.3317 4.2995,-5.7326 4.2995,-14.3315 5.7327,-21.4974 1.433,-7.1658 7.1657,-12.8985 5.7325,-20.0643 -1.433,-8.599 -15.7647,-12.8985 -14.3315,-21.4976 5.7325,-25.7969 40.1286,-11.4653 50.1607,-25.7969 24.3638,-28.6633 -4.2995,-32.9628 -15.7648,-48.7277 -11.4654,-17.1979 -5.7327,-41.5618 -14.3317,-60.1928 -4.2995,-11.4654 -10.0322,-21.4976 -17.1979,-30.0966 -1.4332,-2.8663 -7.1658,-2.8663 -10.0322,-5.7326 -25.797,-38.6955 1.4332,-15.7649 -15.7648,-58.7598 -21.4976,-54.4603 -34.3961,-27.2301 -77.391,-24.3639 -1.4332,0 1.4332,-4.2995 0,-7.1657 -5.7327,-5.7327 -12.8984,-12.8985 -21.4974,-17.198 -8.599,-4.2995 -25.797,0 -31.5297,-10.0322 -5.7327,-10.0322 11.4653,-20.0644 10.0322,-31.5296 -1.4332,-11.4655 -10.0322,-21.4975 -15.7649,-30.0965 -34.3959,-47.2945 -40.1286,18.631 -80.2572,4.2995 -4.2995,-1.4332 27.2301,-24.3639 12.8984,-34.3961 -51.5939,-37.2622 -1.4332,1.4332 -57.3266,-5.7325 -4.2995,-1.4332 0,-8.5992 -1.4332,-12.8986 -5.7325,-17.198 -35.8291,-63.0592 -50.1608,-68.7919 -38.6954,-14.3317 -8.599,12.8985 -21.4975,10.0322 -12.8984,-2.8664 -24.3637,-18.6312 -38.6954,-17.1981 -12.8985,2.8664 -22.9307,20.0644 -34.3959,17.1981 -12.8986,-2.8664 -11.4654,-21.4976 -20.0644,-30.0966 -10.0322,-8.599 -35.8292,-5.7326 -44.4281,-11.4653 l -21.4975,-30.0964 c -10.0322,-8.5991 -25.7969,-10.0322 -34.3961,-20.0644 -17.1979,-25.7969 2.8665,-21.4974 -17.1979,-37.2623 -8.599,-7.1658 -18.6312,-12.8985 -28.6633,-18.6311 -2.8664,-1.4332 -8.5989,2.8663 -11.4654,1.4331 -15.7647,-12.8985 -15.7647,-37.2622 -31.5296,-50.1608 -27.2302,-22.9306 -44.4281,-5.7326 -73.0914,-17.198 -4.2995,-1.4331 7.1658,-5.7326 10.0321,-8.599 8.599,-11.4652 -8.599,-30.0964 -12.8985,-34.3959 -2.8663,-2.8664 -8.599,0 -11.4653,-2.8664 -4.2994,-5.7326 -4.2994,-14.3316 -10.0321,-18.6311 -7.1658,-5.7327 -21.4975,-1.4332 -27.2302,-10.0322 -4.2995,-5.7327 8.599,-17.1979 1.4332,-21.4974 -8.599,-7.1659 -22.9307,1.433 -34.3961,-2.8664 -7.1657,-2.8663 4.2997,-15.7648 4.2997,-24.3638 4.2995,-28.6634 0,-38.6955 -15.7649,-63.0593 -30.0965,-42.995 -8.599,-81.6905 -44.4282,-114.6533 -2.8662,-4.2995 -8.5989,-5.7326 -12.8984,-7.1658 -1.4332,0 -2.8665,4.2995 -4.2995,2.8663 -7.1659,-2.8663 -11.4654,-11.4653 -18.6312,-11.4653 -4.2995,0 4.2995,12.8985 0,11.4653 -11.4653,-2.8663 -20.0644,-11.4653 -30.0964,-18.631 -4.2995,-2.8665 -40.1287,-40.1287 -51.5941,-40.1287 -2.8663,0 1.4332,7.1658 -1.433,8.599 -2.8665,1.4331 -7.166,0 -8.5992,-2.8664 -7.1657,-8.599 -37.2622,-22.9307 -51.5939,-22.9307 -5.7327,0 -42.9949,21.4976 -45.8613,27.2302 -2.8663,5.7327 1.4332,14.3317 -2.8663,18.6311 -4.2995,5.7327 -15.7649,4.2995 -20.0644,8.599 -10.032,10.0322 -17.1979,32.9629 -28.6632,42.9951 -18.6312,18.631 -51.594,17.198 -73.0915,20.0642 -7.1658,-25.7969 41.5618,-58.7598 20.0644,-74.5245 -7.1659,-4.2995 -17.1981,1.433 -25.7971,2.8662 -8.599,0 -18.6312,4.2995 -27.2302,1.4333 -15.7647,-4.2995 -53.0271,-31.5297 -51.5939,-51.5941 0,-2.8663 7.1658,-2.8663 7.1658,-5.7325 -1.4331,-4.2995 -15.7647,-8.599 -11.4652,-17.1981 5.7327,-5.7326 12.8984,-10.0321 17.1979,-17.198 1.4332,-1.4331 -2.8663,-4.2995 -1.4332,-7.1658 1.4332,-4.2995 14.3317,2.8663 15.7649,-1.4332 0,-11.4653 -1.4332,-22.9307 -5.7327,-31.5296 -7.1658,-11.4653 -54.4603,-30.0965 -51.5939,-53.0272 0,-7.1657 12.8985,-7.1657 20.0643,-8.5989 4.2994,0 7.1659,8.5989 11.4654,7.1657 7.1657,-1.433 53.0271,-38.6954 45.8612,-51.5939 -4.2995,-8.5989 -18.6311,-10.0322 -22.9307,-20.0644 -4.2995,-5.7325 1.4332,-15.7647 -1.4331,-21.4974 -20.0644,-34.3959 -57.3266,-17.198 8.599,-55.8934 14.3317,25.797 53.0271,-2.8664 71.6583,-7.1659 12.8985,-2.8663 22.9306,14.3317 35.8291,14.3317 1.4332,0 41.5619,-41.5619 41.5619,-48.7276 1.433,-7.1658 -11.4654,-10.0322 -10.0322,-15.7649 2.8663,-8.599 14.3317,-11.4653 21.4974,-17.198 7.1658,-5.7326 12.8985,-11.4653 20.0644,-17.198 2.8663,-1.4332 5.7326,-4.2995 7.1658,-2.8662 2.8663,8.5989 1.4332,17.1979 1.4332,25.7969 0,4.2995 -4.2995,10.0322 -2.8664,15.7649 10.0322,18.631 32.9628,22.9305 48.7276,28.6632 1.4332,0 4.2995,2.8663 4.2995,5.7327 -1.4331,5.7327 -11.4653,10.0322 -10.0321,15.7648 1.4331,5.7327 11.4653,2.8664 15.7648,7.1659 5.7327,7.1658 8.599,31.5296 17.198,24.3637 24.3638,-18.6311 -4.2995,-12.8984 -4.2995,-27.2301 0,-31.5297 34.396,-40.1287 40.1286,-65.9256 0,-2.8663 -15.7648,-41.5619 8.599,-37.2624 18.6312,2.8665 -4.2995,31.5297 32.9628,40.1287 22.9307,7.1659 4.2995,-21.4975 42.995,-14.3316 11.4654,1.4331 5.7327,24.3638 15.7649,30.0965 5.7327,2.8662 17.1979,-2.8663 15.7647,-8.599 -2.8663,-4.2995 -8.599,-7.1659 -10.032,-12.8985 0,-5.7327 8.5989,-10.0322 7.1657,-15.7649 -2.8663,-7.1658 -28.6633,-22.9307 -8.599,-37.2622 25.797,-18.6312 15.7648,22.9305 45.8614,15.7648 17.1979,-5.7327 -10.0322,-25.797 -10.0322,-28.6634 2.8663,-5.7326 7.1658,-10.0321 8.599,-15.7648 2.8662,-5.7327 1.4332,-12.8984 2.8662,-18.6311 v 0 c 22.9307,11.4654 2.8665,-2.8663 25.7971,0 11.4653,1.4332 22.9307,31.5296 45.8612,18.6311 l 18.6312,-38.6954 c 11.4654,-8.599 61.6261,-2.8664 74.5247,-4.2995 21.4975,-1.4332 38.6954,-20.0644 60.1929,-20.0644 5.7327,0 -10.0322,7.1658 -11.4653,12.8985 -7.1659,30.0964 11.4653,10.0322 22.9307,27.2302 2.8663,4.2995 -4.2995,10.0322 -1.4332,15.7649 1.4332,2.8662 5.7327,-2.8665 8.599,0 27.2301,20.0642 34.3959,22.9305 71.6583,28.6632 35.8291,4.2995 71.6582,7.1659 107.4874,10.0322 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cccccccscccccccccccccssccccsccsccccsccccsccccccccccccccccccscccccsccccccsccccccscccccsscccccccscccccccccccccccccccscccccccccccccsccccccccccsssccccscsccccccccccccsccccccccccsccsscsscsccccccccccccccccccccsccsccscccsccsccccccccccccssscccscssccc" /><path
+ id="gr"
+ class="eu europe"
+ d="m 8708.5935,7823.3216 c -15.7648,30.0965 12.8984,10.0322 -2.8663,54.4603 -1.4332,4.2995 -117.5196,30.0965 -128.9849,34.396 -8.599,2.8663 -88.8562,40.1286 -97.4552,32.9628 -25.7971,-28.6633 20.0642,-25.7969 -61.6263,-35.8291 -83.1235,-10.0322 20.0644,10.0322 -50.1608,10.0322 -4.2995,0 -5.7325,-7.1659 -10.032,-7.1659 -8.599,-1.4332 -18.6312,0 -28.6634,1.4332 -10.0322,2.8663 -21.4975,8.599 -31.5297,10.0322 -21.4974,0 -12.8984,-27.2302 -11.4652,-35.8292 0,-11.4654 -4.2995,-24.3638 0,-34.396 15.7647,-44.4282 30.0964,5.7327 40.1286,10.0322 10.0322,4.2995 21.4975,-1.4333 31.5297,-5.7327 7.1657,-2.8663 11.4652,-21.4975 17.1979,-15.7648 7.1658,5.7327 -17.1979,11.4653 -14.3317,18.6312 1.4333,7.1658 14.3317,2.8663 21.4975,5.7325 7.1659,2.8665 12.8985,12.8985 21.4975,14.3317 7.1659,1.4332 12.8986,-4.2995 20.0643,-7.1657 14.3317,-4.2995 24.3639,-15.7649 37.2624,-20.0644 15.7648,-4.2995 31.5297,-2.8663 47.2944,-5.7326 10.0322,-2.8664 1.4332,8.599 10.0322,10.0321 15.7648,4.2994 31.5297,-8.599 48.7276,-7.1658 4.2995,0 7.1658,8.599 11.4653,7.1658 7.1659,-1.4331 32.9628,-22.9307 45.8613,-20.0643 2.8664,1.4331 -21.4974,31.5297 12.8985,41.5617 7.1659,2.8664 7.1659,-12.8985 12.8985,-17.198 30.0965,-30.0964 25.7971,8.599 58.7598,-38.6954 m -295.2321,-1084.9064 1.4332,-1.4331 v 0 h 1.4332 v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 c 1.433,0 45.8612,-14.3317 45.8612,-14.3317 31.5296,-24.3639 -58.7598,-64.4925 -2.8663,-75.9578 v 0 0 0 h 1.4332 v 0 0 0 0 0 h 4.2995 v 0 h 1.4331 v 0 h 1.4332 v 0 0 0 c 2.8663,0 5.7327,0 7.1657,1.4331 v 0 h 2.8665 v 0 c 31.5296,7.1659 74.5245,37.2624 53.0271,63.0593 -15.7648,17.198 -31.5297,8.599 -37.2624,37.2624 l 11.4654,41.5618 c -1.4332,10.0321 -21.4974,42.9949 -31.5296,48.7276 l -1.4332,15.7648 c -24.3638,-12.8985 21.4974,-14.3317 -1.4332,-34.396 -11.4653,-8.5989 -57.3266,11.4653 -71.6583,10.0322 -45.8612,-2.8664 -51.5939,-32.9628 -81.6904,4.2995 -7.1659,8.599 -14.3317,15.7648 -22.9306,21.4975 -40.1287,21.4974 -18.6312,-28.6634 -58.7598,-4.2995 -15.7649,10.0322 -4.2995,34.3959 -35.8292,48.7276 -27.2301,11.4653 -30.0964,-22.9307 -55.8935,10.0322 -10.0321,12.8985 7.1659,11.4653 11.4654,14.3317 12.8985,7.1658 11.4652,28.6632 22.9307,40.1286 2.8662,2.8663 8.5989,1.4331 14.3316,0 1.4331,0 2.8663,-1.4332 4.2995,-4.2995 0,-2.8664 -5.7327,-8.5989 -1.4332,-8.5989 5.7327,-1.4333 5.7327,11.4652 11.4653,12.8984 15.7649,4.2995 48.7276,10.0321 54.4603,31.5297 11.4654,41.5617 -37.2624,-18.6312 -37.2624,-18.6312 -15.7647,-8.599 -61.626,-14.3317 -65.9255,12.8985 -4.2995,17.1979 32.9628,11.4652 44.4281,22.9306 8.599,8.599 7.1659,37.2623 -2.8663,32.9628 -22.9307,-8.599 -24.3639,-34.396 -47.2945,-45.8612 -5.7326,-1.4332 -11.4653,1.433 -17.198,0 -7.1658,0 -15.7648,-7.1659 -20.0642,-1.4332 -32.9629,35.8291 63.0593,45.8613 55.8933,58.7598 -2.8662,4.2995 -40.1286,2.8662 -51.5939,0 -4.2994,-1.4332 -14.3316,-47.2946 -14.3316,-47.2946 -11.4653,-14.3315 -51.5939,-5.7325 -67.3588,-17.1979 -30.0965,-22.9307 0,-18.6312 0,-47.2945 0,-5.7327 -15.7648,10.0322 -24.3638,17.198 -7.1659,7.1658 -18.6311,12.8985 -20.0644,22.9307 -1.4332,7.1658 12.8985,8.599 14.3317,15.7647 l -10.0322,42.9951 c 4.2995,27.2302 37.2624,40.1286 53.0271,57.3266 l 18.6312,37.2623 c 10.0322,10.0321 83.1236,45.8612 71.6583,63.0593 -2.8663,4.2995 -58.7598,-24.3638 -63.0593,-22.9306 -4.2995,0 0,8.599 0,12.8985 -2.8663,10.0321 -18.6312,31.5296 -8.599,30.0964 2.8663,-1.4332 1.4332,-8.599 4.2995,-7.1658 4.2995,1.4331 2.8663,8.599 7.1658,11.4653 10.0322,7.1658 41.5618,7.1658 17.1981,28.6634 -20.0644,17.1979 -40.1286,18.6311 -67.3588,30.0964 -4.2995,1.4332 8.599,5.7327 12.8985,4.2995 4.2995,-1.4332 7.1657,-8.599 12.8984,-8.599 5.7327,0 5.7327,8.599 10.0322,11.4653 2.8663,1.4332 5.7326,-1.4331 8.599,-2.8663 11.4653,0 22.9307,-2.8663 32.9627,1.4332 8.599,2.8663 7.166,17.198 15.7649,18.6312 10.0322,2.8663 20.0643,-12.8986 28.6633,-8.5992 8.5991,4.2995 -1.4331,22.9307 7.1659,27.2302 11.4652,7.1659 25.7969,-12.8985 35.8291,-5.7326 5.7327,2.8663 0,25.797 22.9307,27.2302 28.6632,1.4331 37.2622,-8.5991 57.3266,14.3315 15.7647,17.1982 -8.599,10.0322 -8.599,20.0644 0,7.1658 8.599,11.4653 10.0322,17.198 2.8663,7.1658 -1.4332,15.7649 1.4331,21.4975 7.1659,12.8984 25.7971,18.6311 10.0322,42.995 -2.8663,4.2995 -8.599,1.4331 -12.8985,0 -2.8663,-2.8664 0,-7.1659 -1.4332,-10.0322 -1.4331,-2.8663 -18.6312,-14.3317 -20.0643,-14.3317 -2.8664,-1.4332 -4.2995,5.7327 -7.1659,4.2995 -10.032,-7.1657 -25.7969,-35.8291 -40.1286,-40.1286 -18.6312,-5.7327 -8.599,15.7649 -18.6312,18.6312 -17.198,5.7327 -65.9256,20.0642 -61.6261,27.2301 4.2995,10.0322 21.4975,5.7327 31.5297,10.0322 4.2995,1.4331 -8.599,4.2995 -8.599,8.599 0,4.2995 7.1659,4.2995 8.599,7.1658 2.8664,5.7327 -1.4331,14.3317 2.8664,18.6312 15.7647,15.7647 42.9949,7.1657 57.3266,24.3637 8.599,10.0322 -22.9307,12.8986 -35.8292,12.8986 -20.0643,1.4331 -35.8291,0 -41.5618,-1.4332 -4.2995,-1.4332 -1.4332,-8.599 -4.2995,-12.8985 -1.4332,-1.4332 -5.7327,-1.4332 -7.1658,-1.4332 -11.4654,0 -27.2301,-8.599 -34.396,0 -11.4653,15.7649 35.8291,51.5941 41.5618,61.6261 1.4332,5.7327 -2.8663,11.4654 -1.4332,15.7649 2.8664,4.2995 11.4654,0 14.3317,4.2995 5.7327,10.0322 22.9307,41.5618 28.6634,54.4603 5.7325,12.8985 -11.4655,4.2995 -11.4655,8.599 0,4.2995 5.7328,5.7327 7.166,8.599 0,2.8663 -5.7327,7.1657 -4.2995,10.0322 1.433,2.8662 34.3959,21.4974 31.5296,32.9627 -2.8664,4.2995 -12.8986,4.2995 -18.6312,2.8664 -4.2994,-2.8664 -2.8664,-11.4654 -7.1659,-14.3317 -2.8662,-2.8664 -8.599,4.2995 -12.8984,1.4332 -24.3638,-18.6311 -34.396,-75.9579 -70.2251,-25.7971 -1.4332,2.8665 1.4332,32.9629 4.2995,50.1609 1.4332,4.2995 1.4332,14.3317 -2.8663,12.8984 -35.8291,-4.2994 -12.8986,-40.1286 -24.3639,-55.8933 -1.4332,-1.4333 -5.7327,0 -7.1658,-1.4333 -8.5989,-8.5989 -12.8984,-18.6311 -20.0643,-28.6633 -4.2995,-7.1658 -7.1658,-20.0643 -15.7648,-21.4975 -68.792,-15.7647 -7.1659,50.1608 -31.5296,61.6261 -41.5619,18.6312 -30.0966,-28.6632 -31.5297,-38.6954 0,-2.8663 -4.2995,-2.8663 -5.7327,-2.8663 -12.8985,1.4331 -20.0644,-15.7649 -22.9307,-31.5296 -2.8662,-21.4975 14.3317,2.8662 17.198,-30.0966 1.4332,-22.9305 -35.8291,-51.5939 -54.4603,-57.3266 -4.2995,-1.4331 -8.599,8.599 -11.4653,4.2995 -5.7327,-7.1658 0,-20.0643 -7.1658,-27.2302 -8.5989,-8.599 -47.2945,2.8664 -27.2301,-24.3637 1.4331,-1.4332 7.1658,1.4332 8.599,-1.4332 22.9306,-15.7648 11.4652,-28.6633 18.6311,-55.8934 0,-2.8664 2.8663,5.7325 5.7326,5.7325 1.4332,0 -2.8663,-5.7325 -1.4331,-5.7325 14.3316,0 28.6633,14.3315 40.1287,2.8663 15.7647,-15.7648 -5.7327,-17.198 22.9306,-35.8292 20.0643,-12.8985 34.396,8.599 50.1607,14.3317 22.9307,8.599 50.1608,5.7327 74.5247,12.8985 14.3317,2.8663 22.9307,20.0642 37.2622,21.4974 5.7327,1.4332 17.1981,-5.7327 15.7649,-12.8984 -2.8662,-5.7327 -18.6311,1.4332 -21.4974,-5.7327 -14.3317,-32.9628 35.8291,15.7648 53.0271,-31.5297 1.4332,-4.2995 -10.0322,2.8664 -15.7649,0 -2.8663,-1.4331 0,-8.599 -2.8663,-8.599 -2.8663,0 -4.2995,17.198 -11.4653,8.599 -11.4654,-14.3315 -20.0643,5.7327 -38.6955,-2.8663 -10.0322,-5.7327 -12.8985,-22.9306 -24.3638,-24.3639 -7.1659,-1.433 -2.8664,21.4976 -11.4654,21.4976 -25.7969,-1.4332 -8.5989,-60.193 -27.2301,-27.2301 -2.8663,5.7325 7.1659,17.1979 1.4332,21.4974 -10.0322,10.0322 -55.8935,-8.5989 -65.9256,-4.2995 -18.6312,7.1658 -32.9629,24.3638 -60.193,31.5297 -15.7648,4.2995 -20.0643,-20.0644 -28.6632,-24.3639 -4.2997,-1.4331 1.433,10.0322 -1.4332,12.8985 -5.7328,8.599 -15.7649,15.7649 -24.3639,20.0644 -2.8663,1.4332 -1.4331,-5.7327 -2.8663,-5.7327 -15.7649,-7.1658 0,-20.0643 -10.0322,-35.8292 -5.7327,-8.5989 -12.8985,-17.1979 -21.4975,-22.9306 -2.8662,-1.4331 -7.1657,4.2995 -8.5989,1.4332 -7.166,-5.7327 -4.2995,-18.6312 -11.4654,-22.9307 -14.3316,-10.0322 -40.1287,28.6634 -18.6311,-24.3637 -2.8664,-1.4332 -5.7327,-2.8665 -10.0322,-5.7327 -4.2995,-4.2995 -1.4332,-11.4654 -4.2995,-15.7649 -15.7649,-20.0643 -55.8935,-38.6954 -73.0915,-53.0271 -5.7327,-2.8663 2.8663,-17.198 -1.4332,-21.4975 -4.2995,-4.2995 -25.7969,11.4653 -40.1286,-22.9307 1.4332,-1.4332 1.4332,-1.4332 2.8664,-2.8662 1.4331,-1.4333 -1.4332,-2.8665 0,-2.8665 24.3638,-4.2995 40.1286,15.7649 38.6954,-21.4974 0,-8.599 20.0644,4.2995 15.7649,-8.599 l -18.6311,-28.6634 c 1.433,-10.032 45.8613,-24.3637 48.7276,-28.6632 0,-1.4332 8.599,-58.7598 8.599,-58.7598 10.0321,-38.6954 18.6311,8.599 32.9628,-45.8613 4.2995,-17.198 -15.7649,-22.9307 -15.7649,-41.5617 10.0322,1.433 106.0542,-28.6634 111.7869,-32.9629 15.7649,-17.198 4.2995,-40.1286 32.9629,-50.1608 10.0322,-4.2995 65.9256,2.8662 74.5246,-2.8663 4.2995,-2.8664 2.8664,-11.4654 7.1659,-14.3317 2.8663,-1.4332 7.1658,7.1658 10.032,4.2995 17.074,-13.3664 23.3109,-31.4532 19.6723,-48.2271 6.1679,15.9809 6.373,-10.9646 6.1248,-13.399 -1.1923,19.1243 -0.9238,18.6312 17.198,18.6312 5.7325,0 12.8985,4.2995 17.198,0 5.7327,-2.8664 5.7327,-14.3317 11.4652,-17.1981 15.7649,-10.0321 37.2624,-4.2995 54.4603,-10.0321 40.1287,-14.3317 50.1609,-31.5296 75.9578,-47.2945 4.2995,-2.8663 11.4654,8.5989 17.198,5.7327 8.599,-1.4332 12.8984,-15.7649 21.4976,-12.8985 11.4652,1.4331 14.3315,17.198 24.3637,22.9307 1.4332,2.8662 5.7327,-2.8665 8.599,-1.4332 4.2995,1.4332 7.1659,11.4652 11.4654,10.0321 5.7326,-1.4332 5.7326,-12.8984 11.4653,-14.3316 15.7649,-4.2995 34.3959,4.2995 48.7276,11.4652 2.8664,1.4332 0,8.599 4.2995,8.599 20.0644,1.4332 51.594,-22.9305 71.6583,-30.0964 z m -583.2985,554.6351 c 17.1981,-31.5297 -25.797,2.8664 -27.23,1.4332 -10.0322,-4.2995 -18.6312,-22.9307 -27.2302,-17.198 -2.8664,0 7.1658,21.4975 5.7326,30.0964 14.3317,0 40.1286,0 48.7276,-14.3316 z m -24.3638,170.5467 c -11.4654,10.0322 -15.7648,-4.2995 -25.7969,-5.7326 -5.7327,0 -11.4654,7.1658 -17.198,5.7326 -10.0322,-2.8663 -5.7327,-35.8291 -14.3317,-28.6632 -4.2994,2.8662 2.8663,12.8984 0,18.6311 -11.4654,24.3638 -18.6311,-17.1981 12.8985,-58.7598 4.2995,7.1658 10.0322,14.3316 12.8985,22.9307 0,1.4331 -4.2995,14.3315 2.8663,15.7648 7.1659,1.4332 44.4281,17.1979 28.6633,30.0964 z m 490.1426,-121.8191 c -7.1657,-8.599 -17.1979,-15.7648 -28.6632,-20.0643 -17.198,-5.7327 -41.5618,21.4975 -60.193,2.8663 -2.8663,-4.2995 5.7327,-10.032 2.8664,-14.3315 -4.2995,-12.8986 -88.8562,-53.0273 -104.6211,-50.1609 -8.599,2.8663 -12.8985,12.8985 -20.0643,17.198 -4.2996,1.4332 2.8663,-8.599 5.7326,-11.4654 4.2995,-4.2995 10.0322,-8.599 14.3317,-12.8985 5.7327,-5.7325 10.0322,-10.032 15.7649,-14.3315 8.5989,-5.7327 17.1979,-10.0322 25.7969,-14.3317 24.3637,12.8985 21.4975,25.797 45.8613,38.6954 4.2995,2.8663 10.0321,4.2995 15.7648,4.2995 2.8663,0 4.2995,-5.7327 7.1658,-4.2995 7.1659,2.8663 12.8986,11.4654 21.4976,14.3317 8.5989,1.4332 38.6954,-15.7649 44.4281,-5.7327 1.4331,1.4332 -1.4332,2.8664 -1.4332,4.2995 -1.4332,1.4332 -2.8663,4.2995 -1.4332,5.7327 5.7327,5.7327 15.7649,5.7327 20.0644,12.8985 0,1.4332 -2.8665,44.4281 11.4652,54.4603 15.7649,11.4653 80.2573,-10.0322 54.4603,32.9629 -14.3316,22.9305 -53.0271,-5.7327 -61.6261,-15.7649 -1.4332,-2.8663 4.2995,-4.2995 4.2995,-7.1658 -1.4332,-4.2995 -5.7327,-8.599 -10.0322,-11.4654 -2.8662,0 -5.7327,7.1659 -7.1657,4.2995 0,-2.8663 8.599,-7.1658 5.7325,-10.0322 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cccccscccccscccscccccccccccccccccccccccccccccccccscsccccccccccccccccssccscccccccccccccscccccccsccccccccsccccccscccccccssccccsccccsccccsccccccsssccccsccccsscsccccccccscccccccccscccssscccccccssccccccccccscccccccccscsccccccccccscccccccccccccccscsccccccscccccccscccccccsscccsccccsccccccc" /><path
+ id="ee"
+ class="eu europe"
+ d="m 7607.9223,3723.0345 c 11.4654,-2.8663 55.8935,-44.4281 68.792,-54.4602 8.5989,-5.7327 24.3637,21.4975 20.0642,2.8663 0,-1.4332 -1.4331,-1.4332 -1.4331,-2.8663 0,-2.8664 -2.8664,-7.1659 0,-7.1659 12.8985,0 28.6633,21.4975 37.2623,24.3639 4.2994,1.4331 8.5989,-7.1659 12.8984,-7.1659 4.2995,1.4332 2.8664,10.0322 7.1659,11.4654 8.599,2.8663 17.198,-5.7327 25.797,-2.8664 4.2995,1.4332 -1.4332,10.0322 1.4332,12.8986 5.7326,8.599 51.5939,38.6954 61.6261,37.2622 1.4332,0 28.6634,-30.0964 28.6634,-30.0964 5.7325,-1.4332 48.7276,14.3317 50.1606,7.1657 2.8665,-7.1657 -7.1657,-27.2301 -2.8662,-31.5296 2.8662,-2.8663 10.0322,-2.8663 11.4652,-7.1658 1.4332,-2.8663 -4.2995,-4.2995 -4.2995,-8.599 -1.433,-2.8662 -1.433,-7.1657 0,-10.0322 17.1981,-14.3316 18.6312,1.4333 24.3639,-15.7647 1.4332,-4.2995 -11.4654,-1.4332 -15.7649,-5.7327 -10.032,-10.0322 -4.2995,-17.198 -7.1658,-27.2302 -1.4332,-4.2995 -24.3638,-17.1979 -28.6633,-21.4974 -11.4653,-20.0644 1.4332,-11.4654 1.4332,-30.0965 0,-25.7971 -28.6632,-53.0272 -32.9629,-78.8242 -1.433,-15.7647 15.7649,-27.2301 20.0644,-38.6954 0,0 1.4332,-35.8291 1.4332,-35.8291 0,-7.1659 -5.7327,-15.7649 -1.4332,-21.4975 14.3317,-30.0966 38.6954,-17.1981 4.2995,-38.6956 -1.4332,5.7327 -4.2995,11.4655 -14.3317,17.198 -12.8985,8.5991 -147.616,10.0322 -170.5467,7.1659 -4.2995,0 -7.1658,-7.1659 -12.8985,-5.7327 -27.2301,5.7327 34.3961,21.4975 -11.4652,15.7649 -7.166,-1.4332 -8.599,-17.1981 -15.7649,-15.7649 -5.7326,1.4332 4.2995,12.8985 1.4332,18.6312 -4.2995,8.599 -12.8985,17.198 -21.4975,21.4975 -14.3317,7.1659 -30.0966,10.0322 -45.8613,7.1659 -5.7327,-1.4332 -10.0322,-12.8986 -14.3317,-10.0322 -7.1658,4.2995 10.0322,20.0642 2.8664,21.4974 -14.3317,4.2995 -57.3267,5.7327 -65.9257,27.2302 -2.8663,7.1658 12.8985,14.3317 8.599,20.0642 -7.1658,11.4654 -50.1607,8.5992 -55.8934,21.4976 -20.0644,54.4602 17.198,20.0643 25.7969,42.995 4.2995,12.8984 -17.1979,28.6633 -11.4652,41.5618 5.7325,15.7647 28.6632,31.5296 31.5296,37.2622 8.599,12.8986 -5.7327,27.2302 12.8985,37.2624 7.1658,2.8662 15.7648,-4.2995 22.9307,-1.4333 7.1657,1.4333 11.4652,15.7649 18.631,11.4655 10.0322,-5.7327 10.0322,-60.1931 40.1286,-24.3639 2.8665,4.2995 -7.1657,8.599 -7.1657,14.3317 0,11.4654 5.7327,22.9306 5.7327,34.3959 0,28.6634 -11.4654,12.8986 -8.599,38.6956 z m -156.2151,-110.3537 c 18.6312,12.8985 17.198,14.3317 40.1287,24.3639 10.0321,5.7326 -17.198,-12.8985 -11.4653,-1.4332 5.7325,12.8985 1.4331,-5.7327 -8.5991,-4.2995 -8.599,1.4332 0,20.0642 -7.1658,27.2302 -1.4332,1.4332 -7.1658,-7.166 -8.599,-4.2995 -2.8663,2.8662 1.4332,10.0322 0,15.7647 -7.1658,18.6312 -21.4974,12.8985 -25.7969,14.3317 -2.8665,0 -2.8665,5.7327 -5.7327,7.1659 -8.599,4.2995 -18.6312,7.1658 -25.797,11.4653 -1.4332,0 -1.4332,1.4332 -1.4332,2.8663 0,11.4654 2.8663,24.3638 0,35.8291 -2.8663,7.1659 -12.8985,21.4976 -18.6312,15.7649 -17.1979,-20.0644 15.7649,-31.5297 12.8985,-47.2945 -1.4331,-4.2995 -8.599,1.4332 -12.8985,-1.4331 -8.599,-4.2995 -21.4974,-7.1659 -25.7969,-17.198 -2.8663,-5.7327 12.8984,-8.5991 11.4652,-14.3317 -1.433,-11.4654 -24.3637,-15.7649 -20.0642,-25.7971 2.8663,-8.5989 17.198,11.4654 27.2302,11.4654 8.5989,0 -4.2995,-22.9306 4.2994,-27.2301 4.2995,-1.4332 10.0322,12.8985 11.4653,8.599 10.0322,-34.396 31.5297,-21.4975 64.4925,-31.5297 z m -51.594,-83.1235 c 2.8664,0 7.1659,-1.4332 8.5991,1.433 2.8663,2.8665 -1.4332,10.0322 2.8663,12.8985 5.7327,2.8664 15.7647,-4.2995 21.4974,-1.4331 48.7277,28.6633 2.8663,22.9307 0,28.6633 -11.4652,27.2301 28.6634,4.2995 -24.3637,34.396 -15.7649,8.599 -17.1981,-25.797 -17.1981,-25.797 -5.7326,-15.7648 -31.5297,-10.0321 -41.5617,-12.8985 -10.0322,-1.4331 21.4975,-5.7326 31.5296,-8.599 12.8985,-2.8663 15.7648,-20.0642 18.6311,-28.6632 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="lv"
+ class="eu europe"
+ d="m 7341.3535,4114.2888 c 5.7326,0 11.4653,1.4332 15.7648,-2.8663 5.7327,-8.599 4.2995,-21.4974 10.0322,-30.0966 11.4652,-14.3316 57.3266,-42.9949 74.5245,-47.2944 10.0322,-2.8662 55.8936,0 65.9256,-2.8662 5.7327,-1.4333 10.0322,-12.8985 15.7649,-12.8985 10.0322,1.4331 15.7648,25.7969 21.4975,18.631 4.2995,-2.8663 2.8664,-10.032 7.1659,-14.3315 12.8984,-12.8986 18.631,1.433 34.3959,0 8.599,-1.4332 12.8985,-10.0322 21.4975,-10.0322 1.4332,-1.4332 44.4281,10.0322 45.8613,8.599 7.1658,-1.4332 10.0322,-11.4654 17.198,-12.8985 12.8984,-2.8664 12.8984,18.6312 24.3638,1.4331 8.599,-10.0321 8.599,-34.396 25.797,-37.2622 14.3317,-2.8665 20.0642,42.9949 38.6954,42.9949 18.6312,0 37.2624,-11.4653 55.8935,-5.7327 27.2302,7.1659 70.2251,60.193 103.188,65.9257 35.8291,5.7325 37.2622,-48.7276 58.7598,-47.2946 7.1658,0 11.4653,8.599 17.198,8.599 4.2994,0 1.433,-10.032 4.2994,-11.4652 8.599,-2.8663 20.0643,5.7327 27.2302,0 0,0 7.1658,-42.995 10.0321,-47.2944 2.8664,-8.5992 30.0965,-30.0966 30.0965,-31.5297 11.4653,-41.5618 -30.0965,-80.2574 -54.4603,-100.3217 -10.0322,-7.1657 10.0322,-20.0643 -10.0322,-22.9306 -7.1657,-1.4332 -12.8984,10.0322 -20.0642,8.599 -2.8664,0 0,-4.2995 0,-7.1658 0,-1.4332 1.433,-4.2995 1.433,-5.7327 0,-10.0322 2.8665,-20.0643 1.4333,-30.0965 -1.4333,-4.2994 -11.4654,-2.8664 -11.4654,-7.1659 0,-18.631 34.396,-30.0964 -12.8985,-47.2944 -5.7326,-1.4332 -14.3316,-1.4332 -18.6311,-5.7327 -4.2996,-5.7327 2.8663,-15.7647 -2.8664,-18.6311 -5.7327,-4.2995 -11.4652,2.8664 -18.6312,4.2994 -1.433,7.166 -44.4281,-8.5989 -50.1606,-7.1657 0,0 -27.2302,30.0964 -28.6634,30.0964 -10.0322,1.4332 -55.8935,-28.6632 -61.6261,-37.2622 -2.8664,-2.8664 2.8663,-11.4654 -1.4332,-12.8986 -8.599,-2.8663 -17.198,5.7327 -25.797,2.8664 -4.2995,-1.4332 -2.8664,-10.0322 -7.1659,-11.4654 -4.2995,0 -8.599,8.599 -12.8984,7.1659 -8.599,-2.8664 -24.3638,-24.3639 -37.2623,-24.3639 -2.8664,0 0,4.2995 0,7.1659 0,1.4331 1.4331,1.4331 1.4331,2.8663 4.2995,18.6312 -11.4653,-8.599 -20.0642,-2.8663 -12.8985,10.0321 -57.3266,51.5939 -68.792,54.4602 l -2.8663,-1.433 c 1.433,2.8662 1.433,7.1657 1.433,11.4652 5.7328,30.0966 42.9951,71.6583 34.3961,104.6212 -4.2995,20.0642 -38.6955,61.6261 -60.193,64.4923 -8.599,1.4332 -14.3317,-7.1657 -21.4975,-8.5989 -14.3316,-4.2995 -17.1979,5.7327 -25.7969,-8.599 -10.0322,-14.3316 -10.0322,-34.396 -22.9307,-45.8612 -12.8984,-12.8986 -42.995,-18.6312 -57.3266,-31.5297 -8.599,-7.1659 0,-25.7971 -8.599,-30.0966 -12.8986,-5.7325 -22.9306,14.3317 -34.396,21.4976 -14.3317,11.4653 -34.396,14.3316 -47.2944,28.6633 -34.3961,35.8291 -4.2995,77.391 -17.198,113.2201 -4.2995,14.3317 -22.9307,20.0642 -27.2302,34.3959 -2.8664,8.599 4.2995,17.198 4.2995,27.2302 0,10.0322 -4.2995,20.0644 -1.4332,28.6634 0,1.433 1.4332,2.8662 2.8663,2.8662 0,0 0,0 0,0 -14.3315,17.1979 8.5991,60.1931 17.1981,80.2573 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="lt"
+ class="eu europe"
+ d="m 7579.2589,4400.9219 c 2.8664,-2.8662 2.8664,-8.5989 7.1659,-10.0321 21.4975,-7.1658 11.4653,11.4654 25.797,17.1981 40.1286,17.1979 24.3638,-14.3317 50.1608,22.9305 8.599,11.4654 0,27.2301 8.599,32.9628 17.1979,11.4653 58.7598,-11.4652 70.225,-17.1979 11.4654,-4.2995 17.198,21.4974 30.0966,10.0322 8.599,-5.7327 10.0321,-20.0644 18.6311,-25.7971 7.1659,-4.2995 15.7648,0 22.9306,-1.4331 7.1659,-2.8664 -12.8985,-18.6312 -7.1658,-24.3639 7.1658,-8.5989 21.4975,-5.7327 31.5297,-10.0322 22.9307,-12.8984 -8.599,-11.4652 7.1658,-27.2301 4.2995,-5.7326 37.2623,-21.4975 40.1286,-2.8663 1.4332,4.2995 -5.7326,7.1659 -5.7326,11.4654 -1.4332,12.8985 27.2302,2.8663 30.0965,-4.2995 12.8985,-31.5296 -31.5297,-22.9307 -31.5297,-28.6634 -1.4332,-5.7327 12.8985,-45.8613 12.8985,-47.2945 0,0 -12.8985,-40.1286 -12.8985,-40.1286 0,-1.4331 5.7327,-1.4331 5.7327,-4.2995 17.198,-53.0271 4.2995,2.8664 31.5297,-40.1287 7.1658,-8.5989 0,-22.9306 5.7325,-32.9627 7.166,-10.0322 28.6634,4.2995 37.2624,-5.7327 4.2995,-5.7327 -1.4332,-14.3317 0,-20.0644 2.8663,-4.2995 10.0322,-4.2995 11.4653,-8.599 5.7327,-20.0642 -41.5617,5.7327 -40.1287,-7.1657 1.4332,-21.4975 11.4654,-40.1287 2.8665,-61.6261 v -1.4332 c -4.2995,1.4332 -8.599,1.4332 -12.8985,1.4332 -32.9629,-5.7327 -75.9578,-58.7598 -103.188,-65.9257 -18.6311,-5.7326 -37.2623,5.7327 -55.8935,5.7327 -18.6312,0 -24.3637,-45.8614 -38.6954,-42.9949 -17.198,2.8662 -17.198,27.2301 -25.797,37.2622 -11.4654,17.1981 -11.4654,-4.2995 -24.3638,-1.4331 -7.1658,1.4331 -10.0322,11.4653 -17.198,12.8985 -1.4332,1.4332 -44.4281,-10.0322 -45.8613,-8.599 -8.599,0 -12.8985,8.599 -21.4975,10.0322 -15.7649,1.433 -21.4975,-12.8986 -34.3959,0 -4.2995,4.2995 -2.8664,11.4652 -7.1659,14.3315 -5.7327,7.1659 -11.4653,-17.1979 -21.4975,-18.631 -5.7327,0 -10.0322,11.4652 -15.7649,12.8985 -10.032,2.8662 -55.8934,0 -65.9256,2.8662 -17.1979,4.2995 -63.0593,32.9628 -74.5245,47.2944 -5.7327,8.5992 -4.2995,21.4976 -10.0322,30.0966 -4.2995,4.2995 -10.0322,2.8663 -15.7648,2.8663 1.4331,2.8663 1.4331,4.2995 2.8663,5.7327 10.0322,37.2624 -7.1658,14.3317 7.1658,50.1608 1.4332,2.8663 2.8664,5.7326 5.7327,8.599 2.8662,5.7326 5.7327,10.0321 8.5989,14.3317 7.166,10.0321 12.8985,21.4975 14.3317,32.9627 1.4332,8.599 -4.2995,17.198 -2.8662,25.797 1.433,2.8664 2.8662,-7.1658 5.7325,-7.1658 5.7327,-1.4332 5.7327,10.0322 7.1659,14.3317 0,2.8663 0,4.2995 0,5.7327 4.2995,-1.4332 5.7326,-7.1659 10.0321,-7.1659 4.2996,1.4332 4.2996,8.599 8.5991,11.4654 17.198,10.032 45.8612,8.599 64.4924,14.3315 2.8664,1.4332 -1.4332,5.7327 1.4332,5.7327 21.4974,0 41.5618,-18.6311 61.6261,-12.8984 5.7327,1.4332 2.8663,12.8984 8.599,17.1979 1.4332,1.4332 5.7327,-2.8663 8.5989,-1.4332 5.7327,2.8664 11.4654,7.1659 15.7649,12.8986 8.599,14.3316 -21.4974,53.0271 10.0321,96.022 z m -222.1406,-222.1406 c -1.4332,1.4331 -1.4332,2.8663 -1.4332,2.8663 -4.2995,11.4654 5.7327,22.9307 7.1659,34.3959 1.433,14.3317 -1.4332,30.0966 -7.1659,47.2946 0,0 1.4332,0 1.4332,0 4.2995,-8.599 5.7327,-17.198 7.1657,-28.6634 0,-5.7326 1.4332,-25.7969 1.4332,-41.5617 0,-18.6312 -1.4332,-31.5296 -8.5989,-14.3317 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="pl"
+ class="eu europe"
+ d="m 6763.7877,5169.0988 c 38.6955,-5.7327 -7.1659,-37.2623 32.9628,-30.0966 25.7969,2.8665 4.2995,14.3317 20.0644,25.7971 22.9306,18.6311 41.5617,5.7326 60.1928,17.198 5.7327,4.2995 4.2995,11.4653 7.1659,15.7648 2.8663,1.4332 4.2995,-2.8663 5.7326,-2.8663 4.2995,-1.4332 8.599,-4.2995 10.0322,-1.4332 4.2995,4.2995 0,11.4654 4.2995,15.7649 0,0 31.5296,-17.1981 38.6956,-12.8985 38.6954,18.631 -15.7649,25.7969 -12.8987,44.4281 0,0 32.9629,20.0643 32.9629,20.0643 4.2995,5.7327 12.8985,42.995 34.3959,34.3959 5.7327,-2.8663 4.2995,-12.8985 8.599,-17.198 7.1659,-5.7325 21.4976,-2.8663 25.7971,-11.4652 1.4331,-2.8665 -30.0966,-34.396 -21.4974,-35.8292 21.4974,-2.8664 45.8611,18.6312 58.7596,22.9307 5.7327,1.4331 12.8986,-1.4332 18.6312,-1.4332 5.7327,0 12.8985,2.8663 18.6312,0 2.8663,-1.4332 1.4332,-7.1658 2.8663,-10.0322 1.4332,-1.4331 4.2994,-1.4331 4.2994,0 17.1982,34.3961 5.7327,12.8985 -12.8984,30.0966 -5.7326,4.2995 14.3317,5.7325 20.0644,10.032 4.2994,4.2995 2.8662,11.4654 7.1657,15.7649 2.8665,2.8663 7.1659,4.2995 10.0322,4.2995 41.5619,-4.2995 -5.7327,-7.1659 18.6312,-17.198 2.8663,-1.4332 2.8663,4.2995 5.7327,5.7326 5.7326,4.2995 21.4975,8.599 28.6632,10.0322 8.599,2.8664 21.4975,-1.4332 28.6634,4.2995 1.4331,1.4332 14.3317,35.8291 15.7648,37.2623 5.7327,4.2995 17.1979,0 22.9306,5.7327 5.7327,7.1658 1.4332,20.0643 7.1659,27.2302 2.8663,4.2995 12.8985,-2.8664 17.198,1.4331 4.2995,4.2995 -2.8664,14.3317 1.4331,18.6311 22.9306,18.6312 41.5618,-54.4603 55.8935,-44.4281 8.599,5.7327 8.599,18.6312 15.7648,25.797 1.4332,1.4332 7.1659,-2.8663 8.5989,-1.4331 1.4332,2.8663 -4.2995,8.599 -1.433,10.032 7.1657,1.4333 14.3317,-5.7325 20.0642,-2.8662 10.0322,4.2995 1.4332,31.5296 1.4332,34.3959 0,7.1659 12.8985,-4.2995 20.0644,-5.7326 5.7326,-1.4332 11.4653,10.0321 17.198,7.1658 1.433,-1.4332 18.6312,-45.8613 38.6954,-50.1608 5.7327,-1.4332 11.4653,4.2995 17.198,4.2995 5.7327,-1.4332 8.5989,-10.0322 14.3317,-8.599 11.4652,1.4332 18.6311,17.198 30.0964,17.198 8.599,0 15.7649,-8.599 20.0644,-15.7648 1.433,-2.8664 -7.1659,-2.8664 -7.1659,-5.7327 4.2995,-20.0642 12.8986,0 18.6311,-2.8663 4.2995,-1.4332 4.2995,-10.0322 8.599,-10.0322 21.4976,-5.7327 70.2252,-4.2995 88.8563,10.0322 4.2996,4.2995 2.8664,14.3316 8.5991,17.198 8.599,5.7327 18.631,5.7327 28.6632,8.599 18.6312,5.7327 35.8292,7.1657 53.0271,10.0322 7.1659,0 14.3317,-2.8665 21.4976,-1.4332 2.8663,1.4332 8.599,8.5989 7.1658,5.7327 -17.198,-54.4604 -2.8663,2.8662 -27.2302,-27.2302 -5.7327,-5.7327 5.7327,-15.7649 4.2995,-22.9307 -4.2995,-14.3317 -18.6311,-25.7969 -21.4974,-41.5618 -4.2995,-11.4653 83.1235,-173.413 94.5889,-183.4452 25.797,-21.4975 41.5617,10.0322 45.8612,-41.5619 0,-11.4652 -28.6632,-37.2622 -30.0964,-38.6954 -7.1658,-14.3317 25.7969,-12.8985 21.4974,-17.198 -22.9305,-17.1979 -64.4923,-44.4281 -77.3908,-71.6582 -2.8664,-7.1658 2.8663,-17.198 0,-25.797 -4.2995,-10.0322 -17.198,-17.198 -21.4976,-27.2301 -11.4653,-25.797 18.6312,-74.5248 -10.0321,-97.4553 -11.4654,-8.5991 -25.797,-12.8986 -38.6955,-14.3317 -2.8663,-1.4332 -5.7326,5.7326 -8.599,4.2995 -41.5617,-15.7649 48.7276,-91.7226 58.7598,-101.7548 1.4332,-1.4331 4.2995,-4.2995 4.2995,-7.1658 -4.2995,-78.8241 -67.3588,-146.1829 -93.1557,-219.2744 -8.599,-5.7327 0,-21.4974 -8.599,-32.9628 -25.797,-37.2622 -10.0322,-5.7326 -50.1608,-22.9305 -14.3317,-5.7327 -4.2995,-24.3639 -25.797,-17.1981 -4.2995,1.4332 -4.2995,8.5989 -8.599,11.4654 -65.9256,38.6954 -259.403,45.8613 -341.0934,34.3959 -25.797,27.2301 -65.9256,42.995 -98.8885,30.0964 -28.6633,-11.4652 -22.9306,-38.6954 -31.5296,-55.8934 -2.8663,-4.2995 -12.8985,-15.7649 -7.1658,-14.3316 4.2995,0 8.599,0 11.4653,1.4332 -7.1658,-4.2995 -15.7648,-8.599 -24.3638,-10.0322 -51.594,-8.599 -108.9206,37.2623 -147.616,60.193 -12.8987,7.1658 -28.6634,4.2995 -38.6956,12.8985 -24.3637,21.4974 -30.0964,55.8934 -37.2624,57.3266 -53.0271,12.8984 -103.1877,35.8291 -153.3486,55.8934 -12.8984,5.7327 -21.4974,21.4976 -34.396,24.3638 -7.1658,2.8663 -14.3316,-4.2995 -21.4975,-1.4332 -12.8985,7.1659 17.198,38.6956 4.2995,41.5619 2.8664,22.9306 25.7969,67.3588 28.6634,81.6904 4.2995,34.396 -41.5619,57.3266 -31.5297,84.5568 5.7327,17.198 60.1929,24.3637 60.1929,45.8613 0,21.4975 -17.198,28.6633 -4.2995,44.4282 4.2995,7.1657 14.3317,10.032 17.1981,18.6311 4.2995,7.1658 -1.4332,17.198 0,24.3638 1.4331,4.2995 7.1658,2.8663 8.599,5.7327 7.1658,10.0322 -10.0322,34.3959 -14.3317,42.9949 -8.599,12.8985 12.8985,20.0644 17.198,32.9629 2.8662,7.1657 -7.1658,15.7647 -2.8663,21.4974 5.7325,8.599 18.631,5.7327 24.3637,11.4654 17.198,15.7648 14.3317,88.8563 2.8664,116.0864 z m -143.3165,-540.3035 c 0,0 1.433,0 1.433,0 m 0,0 c 1.4333,1.4332 2.8665,1.4332 4.2995,2.8664 -1.433,-1.4332 -2.8662,-1.4332 -4.2995,-2.8664 z m 7.166,2.8664 c 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,1.4331 0,1.4331 0,1.4331 0,0 0,0 0,0 1.433,0 1.433,0 1.433,0 m 0,0 c 0,0 0,0 1.4332,0 -1.4332,0 -1.4332,0 -1.4332,0 z m 2.8665,0 c 0,0 0,1.4332 1.433,1.4332 -1.433,0 -1.433,-1.4332 -1.433,-1.4332 z m 1.433,1.4332 c 0,0 0,0 0,0 1.4332,0 1.4332,0 1.4332,0 0,0 0,0 0,0 m 0,0 c 1.4332,0 1.4332,0 1.4332,1.4332 0,-1.4332 0,-1.4332 -1.4332,-1.4332 z m 1.4332,1.4332 c 1.4331,0 1.4331,0 1.4331,0 m 0,0 c 1.4332,0 1.4332,0 1.4332,0 0,0 0,0 -1.4332,0 z m 12.8986,2.8663 c 0,0 0,0 0,0 0,0 0,0 0,0 z m 0,0 c 0,0 0,0 1.4331,0 0,0 -1.4331,0 -1.4331,0 z m 477.2441,-230.7396 c 5.7327,2.8662 11.4653,5.7325 15.7648,11.4652 1.4332,1.4332 1.4332,7.1658 -1.4331,5.7327 -10.0322,-7.1659 -12.8984,-12.8984 -14.3317,-17.1979 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="cz"
+ class="eu europe"
+ d="m 7050.4209,5566.0857 c 21.4974,-84.5568 68.7918,-12.8985 111.7869,-67.3588 2.8663,-4.2995 -1.4332,-11.4653 1.4331,-15.7648 4.2995,-5.7327 14.3317,-2.8664 18.6311,-8.5991 0,0 11.4655,-44.4281 11.4655,-45.8612 12.8984,-22.9307 47.2944,-41.5618 71.6582,-53.0271 -5.7327,-7.1659 -1.4332,-20.0644 -7.1659,-27.2302 -5.7327,-5.7327 -17.1979,-1.4332 -22.9306,-5.7327 -1.4331,-1.4332 -14.3317,-35.8291 -15.7648,-37.2623 -7.1659,-5.7327 -20.0644,-1.4331 -28.6634,-4.2995 -7.1657,-1.4332 -22.9306,-5.7327 -28.6632,-10.0322 -2.8664,-1.4331 -2.8664,-7.1658 -5.7327,-5.7326 -24.3639,10.0321 22.9307,12.8985 -18.6312,17.198 -2.8663,0 -7.1657,-1.4332 -10.0322,-4.2995 -4.2995,-4.2995 -2.8663,-11.4654 -7.1657,-15.7649 -5.7327,-4.2995 -25.797,-5.7325 -20.0644,-10.032 18.6311,-17.1981 30.0966,4.2995 12.8984,-30.0966 0,-1.4331 -2.8662,-1.4331 -4.2994,0 -1.4331,2.8664 0,8.599 -2.8663,10.0322 -5.7327,2.8663 -12.8985,0 -18.6312,0 -5.7326,0 -12.8985,2.8663 -18.6312,1.4332 -12.8985,-4.2995 -37.2622,-25.7971 -58.7596,-22.9307 -8.5992,1.4332 22.9305,32.9627 21.4974,35.8292 -4.2995,8.5989 -18.6312,5.7327 -25.7971,11.4652 -4.2995,4.2995 -2.8663,14.3317 -8.599,17.198 -21.4974,8.5991 -30.0964,-28.6632 -34.3959,-34.3959 0,0 -32.9629,-20.0643 -32.9629,-20.0643 -2.8662,-18.6312 51.5941,-25.7971 12.8987,-44.4281 -7.166,-4.2996 -38.6956,12.8985 -38.6956,12.8985 -4.2995,-4.2995 0,-11.4654 -4.2995,-15.7649 -1.4332,-2.8663 -5.7327,0 -10.0322,1.4332 -1.4331,0 -2.8663,4.2995 -5.7326,2.8663 -2.8664,-4.2995 -1.4332,-11.4653 -7.1659,-15.7648 -18.6311,-11.4654 -37.2622,1.4331 -60.1928,-17.198 -15.7649,-11.4654 5.7325,-22.9306 -20.0644,-25.7971 -40.1287,-7.1657 5.7327,24.3639 -32.9628,30.0966 -2.8664,5.7326 -4.2994,10.0321 -8.5991,10.0321 -18.631,4.2995 -48.7276,-74.5246 -64.4923,-30.0965 -2.8663,7.1658 22.9306,12.8985 17.1979,17.198 -17.1979,14.3317 -41.5618,15.7649 -58.7598,25.797 -2.8663,1.4332 0,8.5991 -2.8663,10.0321 -11.4654,5.7327 -27.2301,-2.8662 -35.8291,4.2995 -7.1659,5.7327 -4.2995,17.198 -11.4654,22.9307 -2.8663,2.8664 -5.7326,-7.1658 -10.0321,-5.7327 -12.8986,2.8664 -14.3317,20.0644 -22.9306,25.7971 -4.2995,4.2995 -12.8985,-2.8664 -17.198,1.4331 -4.2995,2.8664 0,11.4654 -4.2995,15.7649 -5.7327,7.1657 -21.4976,-5.7327 -25.7971,-5.7327 -35.8291,5.7327 -41.5617,32.9628 -53.0271,55.8935 -2.8663,5.7325 -2.8663,-14.3317 -8.599,-18.6312 -4.2995,-5.7327 -12.8985,-7.1659 -20.0642,-8.599 -12.8986,-2.8664 14.3315,42.9949 42.9949,61.6261 2.8663,1.4332 12.8985,2.8663 14.3317,11.4653 4.2995,20.0644 -14.3317,12.8986 -17.198,28.6634 -1.4332,4.2994 30.0964,57.3265 34.3959,61.626 24.3638,24.3639 30.0965,7.166 45.8614,22.9307 10.032,10.0322 11.4652,25.797 21.4974,34.3959 20.0643,14.3317 70.2251,32.9629 80.2573,61.6263 h 1.4332 c 22.9305,11.4652 40.1286,41.5617 70.2251,30.0964 5.7327,-1.4332 4.2995,-12.8985 10.0322,-12.8985 10.032,0 20.0642,12.8985 30.0964,10.0322 0,0 11.4653,-37.2623 11.4653,-37.2623 5.7327,-4.2995 15.7649,5.7327 18.6312,1.4332 2.8664,-2.8664 0,-44.4281 1.4332,-47.2946 4.2995,-4.2994 12.8984,-1.4332 18.6311,1.4333 2.8663,1.4332 0,8.5989 2.8663,10.0321 7.1659,0 12.8985,-8.5989 20.0644,-8.5989 41.5617,0 74.5246,31.5295 113.22,35.8291 5.7327,0 12.8985,2.8663 18.6312,1.4331 8.599,-4.2995 11.4654,-15.7648 18.6312,-18.6312 10.0321,-2.8663 24.3638,15.7649 31.5296,17.1981 4.2995,0 10.0322,-8.5991 14.3317,-5.7327 7.1658,5.7327 10.0322,11.4653 10.0322,17.198 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="sk"
+ class="eu europe"
+ d="m 7726.8751,5389.8062 c 1.4331,14.3317 -8.5991,34.3961 -10.0322,48.7277 -1.4332,10.0321 0,20.0643 -4.2995,28.6633 -4.2995,10.0322 -17.198,12.8985 -18.6312,22.9307 -2.8662,10.0322 4.2995,20.0642 4.2995,31.5296 0,11.4653 -21.4974,11.4653 -32.9628,14.3317 -5.7326,1.4331 -11.4653,8.599 -15.7648,5.7326 -27.2302,-8.599 -5.7327,-35.8292 -41.5618,-37.2622 -14.3317,0 -22.9307,20.0642 -37.2624,21.4974 -24.3637,4.2995 -55.8934,-21.4974 -77.3908,5.7327 -8.599,11.4653 -2.8665,50.1607 -18.6312,57.3266 -5.7327,1.4332 -14.3317,-4.2995 -20.0644,-1.4332 -22.9307,14.3317 10.0322,24.3639 -25.7969,30.0965 -11.4653,1.4332 -37.2624,-30.0965 -48.7277,-10.0321 -4.2995,7.1658 2.8663,20.0643 -2.8662,25.797 -15.7649,15.7647 -60.1931,5.7327 -80.2573,20.0642 -18.6312,11.4654 1.4331,31.5297 7.1658,40.1286 5.7327,10.0322 -116.0865,31.5297 -133.2844,28.6634 -27.2302,-5.7327 -47.2946,-42.9949 -73.0915,-45.8613 -5.7327,-1.4331 -10.0322,0 -12.8985,1.4332 -17.198,-18.6312 -31.5296,-37.2624 -44.4281,-58.7598 -8.599,-14.3317 12.8985,-34.396 11.4653,-53.0271 20.0643,-84.5568 67.3587,-14.3317 110.3538,-67.3588 2.8663,-4.2995 -1.4332,-11.4653 1.4331,-15.7648 4.2995,-5.7327 14.3317,-2.8664 18.6311,-8.5991 0,0 11.4655,-44.4281 11.4655,-45.8612 12.8984,-22.9307 47.2944,-41.5618 71.6582,-53.0271 2.8663,4.2995 12.8985,-2.8664 17.198,1.4331 4.2995,4.2995 -2.8664,14.3317 1.4331,18.6311 22.9306,18.6312 41.5618,-54.4603 55.8935,-44.4281 8.599,5.7327 8.599,18.6312 15.7648,25.797 1.4332,1.4332 7.1659,-2.8663 8.5989,-1.4331 1.4332,2.8663 -4.2995,8.599 -1.433,10.032 7.1657,1.4333 14.3317,-5.7325 20.0642,-2.8662 10.0322,4.2995 1.4332,31.5296 1.4332,34.3959 0,7.1659 12.8985,-4.2995 20.0644,-5.7326 5.7326,-1.4332 11.4653,10.0321 17.198,7.1658 1.433,-1.4332 18.6312,-45.8613 38.6954,-50.1608 5.7327,-1.4332 11.4653,4.2995 17.198,4.2995 5.7327,-1.4332 8.5989,-10.0322 14.3317,-8.599 11.4652,1.4332 18.6311,17.198 30.0964,17.198 8.599,0 15.7649,-8.599 20.0644,-15.7648 1.433,-2.8664 -7.1659,-2.8664 -7.1659,-5.7327 4.2995,-20.0642 12.8986,0 18.6311,-2.8663 4.2995,-1.4332 4.2995,-10.0322 8.599,-10.0322 21.4976,-5.7327 70.2252,-4.2995 88.8563,10.0322 4.2996,4.2995 2.8664,14.3316 8.5991,17.198 8.599,5.7327 18.631,5.7327 28.6632,8.599 12.8985,4.2995 25.797,5.7327 38.6956,7.1657 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="si"
+ class="eu europe"
+ d="m 7041.8218,5974.5379 c -10.0321,-1.4332 -34.396,-7.1659 -40.1287,-5.7327 -15.7647,2.8663 5.7327,22.9307 -2.8663,28.6634 -7.1657,2.8663 -15.7647,-1.4332 -22.9306,1.4331 -2.8663,1.4332 1.4332,7.1659 -1.4331,10.0321 -14.3317,11.4655 -37.2623,12.8985 -51.594,25.797 -17.198,15.7649 31.5296,55.8935 10.0322,71.6583 -50.1609,35.8291 -18.6312,-24.3638 -51.5941,22.9307 -4.2995,5.7327 12.8985,7.1659 15.7649,14.3316 2.8663,5.7327 -14.3317,4.2995 -14.3317,10.0322 0,2.8663 14.3317,21.4975 8.599,28.6633 -15.7647,15.7649 -38.6954,-8.599 -53.0271,-8.599 -21.4974,0 20.0643,20.0644 -15.7649,10.0322 -10.032,-2.8663 -22.9305,-18.6312 -27.23,-27.2302 -2.8664,-2.8663 -5.7327,-11.4653 -7.1659,-8.599 -5.7327,8.599 -4.2995,18.6312 -10.0322,25.797 -18.631,24.3639 -44.4281,0 -65.9256,7.1659 -2.8663,1.4331 2.8663,7.1658 0,10.032 -12.8985,7.166 -38.6954,5.7327 -51.5939,0 0,0 0,-1.433 1.4331,-1.433 7.1659,-7.1659 15.7649,-14.3317 18.6312,-21.4975 50.1608,2.8663 -7.1658,-31.5296 -21.4975,-40.1286 -10.0322,-5.7327 5.7327,-24.3639 2.8663,-31.5297 -2.8663,-7.1659 -25.797,12.8985 -20.0643,-5.7327 4.2995,-12.8984 31.5297,-24.3639 21.4975,-32.9628 -7.1658,-5.7327 -40.1286,-2.8663 -37.2624,-20.0643 16.0545,-33.9389 40.963,-45.4022 65.9258,-41.5618 11.4652,1.4332 22.9305,10.0322 34.3959,11.4652 11.4653,1.4332 22.9307,-7.1657 34.3959,-5.7325 7.1659,1.433 11.4654,11.4652 18.6312,11.4652 2.8663,1.4333 1.4332,-7.1657 4.2995,-8.5989 7.1658,-7.1658 18.6312,-10.0322 25.7969,-18.6312 5.7327,-4.2995 1.4333,-14.3317 5.7327,-18.6312 27.2302,-21.4975 55.8936,5.7327 81.6905,-5.7326 8.599,-4.2994 10.0322,-17.1981 18.6312,-20.0643 1.4331,-1.4333 48.7276,5.7327 50.1607,4.2994 4.2995,-1.4332 -4.2995,-7.1657 -5.7326,-11.4652 -4.2995,-22.9307 12.8985,-28.6634 34.396,-28.6634 5.7327,0 17.1979,44.4281 47.2944,68.792 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cccccccccscsccccccccccsccccscccccccccsc" /><path
+ id="hu"
+ class="eu europe"
+ d="m 6994.5274,5905.7459 c 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 5.7327,0 17.1979,44.4281 47.2944,68.792 38.6955,31.5297 71.6582,48.7276 101.7548,87.4231 4.2995,5.7327 32.9627,1.4332 35.8292,2.8664 11.4652,4.2995 20.0642,14.3315 30.0964,18.631 20.0644,8.5991 83.1236,7.1659 101.7547,-8.599 2.8665,-2.8662 4.2995,-22.9306 14.3317,-22.9306 27.2302,-4.2995 22.9307,1.4332 47.2946,-25.797 4.2995,-4.2995 10.032,10.0322 22.9305,0 12.8986,-10.0322 21.4976,-27.2301 37.2623,-35.8291 32.9629,-21.4975 5.7327,0 30.0965,1.4332 1.4332,0 38.6955,-11.4654 40.1286,-11.4654 7.1659,0 14.3317,7.1659 21.4976,7.1659 2.8663,-1.4332 4.2995,-7.1659 7.1658,-8.599 8.599,-2.8664 51.594,-7.1659 54.4603,-17.198 2.8663,-5.7327 -18.6312,-12.8984 7.1658,-17.1981 10.0322,-1.433 20.0644,8.5992 28.6633,5.7327 27.2302,-10.0322 18.6312,-61.6261 25.797,-77.3909 2.8663,-4.2995 10.0322,-4.2995 12.8985,-8.599 0,0 15.7649,-50.1607 15.7649,-50.1607 2.8662,-7.1659 7.1657,-12.8986 7.1657,-20.0644 0,-2.8663 -7.1657,-2.8663 -7.1657,-5.7327 1.433,-12.8985 17.1979,-53.0271 24.3637,-64.4924 2.8664,-2.8664 10.0322,0 10.0322,-4.2995 7.1658,-27.2301 -2.8663,-47.2945 28.6634,-77.391 10.032,-11.4652 21.4974,-4.2994 37.2622,-10.0321 15.7649,-7.1658 17.1979,-28.6633 28.6633,-40.1287 -17.1979,-14.3317 5.7328,-11.4652 -12.8984,-24.3637 -2.8664,-1.4332 -7.1659,-4.2995 -11.4654,-4.2995 -5.7326,1.4331 -10.0321,8.599 -15.7648,7.1658 -8.599,-5.7327 -10.0322,-20.0644 -18.6312,-25.797 -4.2995,-2.8664 -10.0322,4.2995 -14.3316,2.8663 -22.9307,-8.599 -1.4331,-24.3637 -34.396,-25.797 0,11.4653 -21.4974,11.4653 -32.9628,14.3317 -5.7326,1.4331 -11.4653,8.599 -15.7648,5.7326 -27.2302,-8.599 -5.7327,-35.8292 -41.5618,-37.2622 -14.3317,0 -22.9307,20.0642 -37.2624,21.4974 -24.3637,4.2995 -55.8934,-21.4974 -77.3908,5.7327 -8.599,11.4653 -2.8665,50.1607 -18.6312,57.3266 -5.7327,1.4332 -14.3317,-4.2995 -20.0644,-1.4332 -22.9307,14.3317 10.0322,24.3639 -25.7969,30.0965 -11.4653,1.4332 -37.2624,-30.0965 -48.7277,-10.0321 -4.2995,7.1658 2.8663,20.0643 -2.8662,25.797 -15.7649,15.7647 -60.1931,5.7327 -80.2573,20.0642 -18.6312,11.4654 1.4331,31.5297 7.1658,40.1286 5.7327,10.0322 -116.0865,31.5297 -133.2844,28.6634 -27.2302,-5.7327 -47.2946,-42.9949 -73.0915,-45.8613 -5.7327,-1.4331 -10.0322,0 -12.8985,1.4332 0,0 0,0 0,0 -20.0644,8.599 0,54.4603 -1.4332,60.193 -8.599,15.7648 -60.1929,-7.1659 -80.2573,10.0321 -8.5989,7.1659 34.396,4.2995 35.8292,28.6633 2.8663,28.6634 -21.4975,7.1658 -31.5297,27.2302 -7.1657,14.3317 18.6312,44.4281 15.7649,50.1608 -12.8984,21.4975 -24.3639,25.797 -50.1608,54.4602 v 0 c 0,0 0,0 -1.4332,1.4332 2.8664,-1.4332 4.2995,-2.8663 7.1659,-2.8663 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ id="ro"
+ class="eu europe"
+ d="m 8695.695,6202.4112 c -22.9307,4.2995 -60.1929,17.198 -81.6905,-1.4332 -7.1658,-5.7327 -8.599,-25.7969 -17.1979,-21.4974 -4.2995,1.4332 -7.1658,7.1657 -11.4653,8.599 -34.3959,18.6311 11.4653,-10.0322 -25.797,-8.599 -11.4654,0 -20.0643,12.8985 -31.5296,14.3317 -24.3639,2.8662 -4.2995,-31.5297 -68.792,-7.166 -27.2302,11.4655 -77.391,34.3961 -98.8885,55.8936 -24.3637,24.3637 -28.6633,54.4603 -60.1928,74.5245 -28.6634,17.198 -50.1609,5.7327 -78.8242,4.2995 -22.9307,-1.433 -47.2944,-2.8662 -68.792,4.2995 -8.599,2.8664 -11.4653,14.3317 -20.0643,17.1981 -40.1286,14.3316 -87.4232,-8.5991 -127.5518,-4.2996 -31.5296,2.8664 -41.5617,28.6634 -75.9578,14.3317 -24.3637,-10.0321 30.0966,-41.5617 17.1981,-47.2944 -22.9306,-10.0322 -91.7226,-24.3639 -87.4231,-61.6261 1.4332,-12.8986 48.7276,-14.3317 34.3959,-21.4976 -151.9156,-75.9578 -15.7648,-7.1658 -77.3909,28.6634 -10.0322,7.1657 -15.7649,-18.6312 -25.797,-22.9307 -7.1658,-4.2995 -17.198,0 -24.3638,0 -8.599,0 -17.198,4.2995 -25.7969,1.4332 -4.2995,-2.8664 -1.4332,-10.0322 -4.2995,-15.7649 -7.1659,-14.3315 -68.792,8.599 -34.3961,-15.7647 8.599,-5.7327 30.0966,-11.4655 22.9307,-17.198 -7.1658,-4.2995 -21.4975,0 -24.3638,-8.599 -1.4332,-8.599 28.6633,-24.3639 8.599,-35.8291 -27.2301,-15.7649 -81.6905,-8.599 -100.3216,-41.5619 -4.2995,-7.1659 -4.2995,-41.5618 -4.2995,-50.1608 v -2.8663 c -4.2995,1.4331 -7.1658,10.0321 -10.0322,7.1658 -10.0321,-5.7327 -11.4653,-21.4975 -20.0643,-28.6632 -8.599,-5.7327 -21.4974,-4.2997 -30.0966,-11.4655 -8.5989,-4.2994 -12.8984,-14.3316 -18.631,-21.4974 2.8663,-1.4332 4.2995,-7.1659 7.1658,-8.599 8.599,-2.8664 51.594,-7.1659 54.4603,-17.198 2.8663,-5.7327 -18.6312,-12.8984 7.1658,-17.1981 10.0322,-1.433 20.0644,8.5992 28.6633,5.7327 27.2302,-10.0322 18.6312,-61.6261 25.797,-77.3909 2.8663,-4.2995 10.0322,-4.2995 12.8985,-8.599 l 15.7649,-50.1607 c 2.8662,-7.1659 7.1657,-12.8986 7.1657,-20.0644 0,-2.8663 -7.1657,-2.8663 -7.1657,-5.7327 1.433,-12.8985 17.1979,-53.0271 24.3637,-64.4924 2.8664,-2.8664 10.0322,0 10.0322,-4.2995 7.1658,-27.2301 -2.8663,-47.2945 28.6634,-77.391 10.032,-11.4652 21.4974,-4.2994 37.2622,-10.0321 15.7649,-7.1658 17.1979,-28.6633 28.6633,-40.1287 4.2995,2.8664 12.8985,-2.8663 22.9307,-30.0964 1.4331,-2.8663 1.4331,-7.1658 4.2995,-7.1658 4.2995,0 40.1286,17.198 44.4281,17.198 2.8663,0 4.2995,-7.1659 7.1658,-8.599 18.6312,-7.1659 65.9257,11.4653 88.8563,5.7326 12.8986,-4.2995 21.4976,-15.7648 34.396,-17.198 22.9307,-1.4332 38.6954,28.6634 54.4603,32.9628 21.4975,7.1658 28.6633,-32.9628 34.396,-38.6955 25.7969,-27.23 91.7225,-24.3638 111.7869,-44.4281 38.6954,-37.2623 -17.198,-5.7326 10.0322,-41.5617 7.1658,-8.599 18.6312,-15.7649 30.0964,-18.6312 l 1.4332,-4.2995 5.7326,-12.8985 v 0 c -1.4331,2.8663 -1.4331,8.599 -1.4331,11.4653 20.0643,-10.0322 32.9628,-1.4332 48.7276,11.4654 30.0965,21.4974 35.8292,57.3266 60.1929,81.6903 40.1287,38.6956 149.0493,107.4874 161.9478,163.381 10.0322,35.8291 -2.8663,75.9577 5.7327,111.7869 2.8663,15.7647 28.6633,51.5939 27.2301,67.3588 0,5.7327 -11.4654,7.1658 -10.0322,12.8985 1.4333,5.7327 10.0322,2.8662 14.3317,5.7327 4.2995,2.8662 4.2995,12.8984 10.0322,12.8984 2.8663,1.4331 7.1658,-1.4332 10.0321,1.4331 4.2996,4.2995 2.8664,12.8986 8.5991,17.1981 5.7326,5.7326 67.3588,8.599 65.9256,1.4331 0,-1.4331 -20.0644,-5.7326 -5.7327,-14.3317 8.599,-4.2995 18.6312,-2.8663 27.2301,-7.1658 14.3317,-7.1657 20.0644,-27.2301 35.8292,-32.9628 31.5296,-11.4653 47.2944,0 54.4603,27.2301 -1.4332,1.4332 -5.7327,0 -5.7327,1.4332 0,4.2995 2.8664,7.1658 5.7327,8.599 2.8663,1.4332 5.7327,-4.2995 7.1658,-1.4332 2.8664,5.7327 4.2995,54.4603 4.2995,60.193 -1.4331,18.6312 -44.4282,20.0644 -55.8934,28.6634 -7.1659,5.7326 -7.1659,25.7969 -15.7649,24.3637 -1.4331,-1.4332 10.0322,-48.7276 -10.0321,-60.1928 -7.1659,-2.8665 -15.7649,8.5989 -20.0644,15.7647 -5.7327,10.0322 20.0644,18.6312 18.6312,30.0964 0,11.4655 -21.4974,18.6312 -15.7649,27.2302 5.7327,8.599 16.9165,-12.2282 26.9486,-12.2282 2.8664,-1.4332 -1.1515,6.4956 -4.0179,9.3619 -3.39,1.8409 -0.8114,2.4342 -1.4331,4.2995 8.599,7.1658 -25.7971,63.0593 -25.7971,64.4925 1.4332,10.0321 14.3317,60.1929 21.4976,106.0542 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cccccccsccscccccsccscscccccsccccccccccccscccccccssccccccccccsccccccsscscccsscsssccccccscccccc" /><path
+ id="bg"
+ class="eu europe"
+ d="m 8477.8539,6648.1257 c -7.1659,-1.4331 -14.3317,-1.4331 -18.6312,-1.4331 -55.8935,11.4653 34.3959,51.5939 2.8663,75.9578 0,0 -44.4282,14.3317 -45.8612,14.3317 -20.0644,7.1658 -53.0273,32.9627 -74.5247,31.5295 -4.2995,0 -1.4331,-7.1658 -4.2995,-8.599 -14.3317,-7.1657 -32.9627,-15.7647 -48.7276,-11.4652 -5.7327,1.4332 -5.7327,12.8984 -11.4653,14.3316 -4.2995,1.4331 -7.1659,-8.5989 -11.4654,-10.0321 -2.8663,-1.4333 -7.1658,4.2994 -8.599,1.4332 -10.0322,-5.7327 -12.8985,-21.4976 -24.3637,-22.9307 -8.5992,-2.8664 -12.8986,11.4653 -21.4976,12.8985 -5.7326,2.8662 -12.8985,-8.599 -17.198,-5.7327 -25.7969,15.7649 -35.8291,32.9628 -75.9578,47.2945 -17.1979,5.7326 -38.6954,0 -54.4603,10.0321 -5.7325,2.8664 -5.7325,14.3317 -11.4652,17.1981 -4.2995,4.2995 -11.4655,0 -17.198,0 -34.5518,-2.9572 -17.5714,-48.5095 -20.0644,-78.8242 -10.0322,-10.0322 -25.7969,-38.6954 -38.6954,-47.2944 -7.1659,-4.2995 -17.198,0 -25.797,-4.2995 -2.8664,-1.4332 -41.5618,-31.5297 -41.5618,-34.3961 7.1658,-12.8985 27.2301,-15.7647 20.0642,-34.3959 -1.433,-5.7327 -5.7325,-8.599 -10.032,-11.4653 -2.8664,-1.4332 -7.1659,1.4331 -8.599,-1.4332 -1.4332,-7.1658 0,-14.3317 0,-21.4975 -1.4332,-8.5989 -11.4654,-17.1979 -7.1659,-24.3638 41.5618,-68.7919 -5.7327,15.7649 40.1286,-20.0643 4.2995,-4.2995 34.3961,-57.3267 25.797,-65.9257 -11.4653,-8.599 -65.9256,-34.3959 -68.7919,-37.2622 -17.198,-14.3317 -44.4281,-74.5247 -34.3961,-96.0222 4.2997,-10.0322 20.0644,-8.599 25.7971,-17.1979 4.2995,-10.0322 -1.4332,-22.9307 2.8663,-32.9629 18.6312,8.599 41.5618,14.3317 51.594,20.0644 12.8985,5.7327 -41.5618,37.2623 -17.1981,47.2944 34.3961,14.3317 44.4282,-11.4653 75.9578,-14.3317 40.1286,-4.2995 87.4232,18.6312 127.5518,4.2996 8.599,-2.8664 11.4653,-14.3317 20.0643,-17.1981 21.4976,-7.1657 45.8613,-5.7325 68.792,-4.2995 28.6633,1.4332 50.1608,12.8985 78.8242,-4.2995 31.5295,-20.0642 35.8291,-50.1608 60.1928,-74.5245 21.4975,-21.4975 71.6583,-44.4281 98.8885,-55.8936 64.4925,-24.3637 44.4281,10.0322 68.792,7.166 11.4653,-1.4332 20.0642,-14.3317 31.5296,-14.3317 37.2623,-1.4332 -8.5989,27.2301 25.797,8.599 4.2995,-1.4333 7.1658,-7.1658 11.4653,-8.599 8.5989,-4.2995 10.0321,15.7647 17.1979,21.4974 21.4976,18.6312 58.7598,5.7327 81.6905,1.4332 h 2.8664 c 5.7326,35.8292 8.599,68.7921 -1.4332,74.5246 -5.7327,2.8664 -12.8985,-7.1658 -20.0644,-5.7325 -53.0271,14.3315 -18.631,12.8984 -34.3959,44.4281 -1.4332,5.7325 -11.4653,5.7325 -14.3317,10.032 0,2.8664 8.599,1.4332 8.599,4.2995 2.8664,22.9307 1.4332,37.2624 7.1659,60.193 1.4331,8.599 10.0321,20.0643 5.7326,27.2302 -4.2995,7.1658 -17.198,2.8663 -24.3638,7.1658 -1.4332,0 4.2995,2.8664 4.2995,4.2995 -2.8663,5.7327 -10.0322,7.1659 -11.4654,12.8984 -1.4331,4.2995 7.1659,8.5992 4.2996,11.4654 -5.7327,8.599 -18.6311,11.4653 -24.3638,20.0643 -25.797,34.3961 37.2623,-17.198 53.0271,21.4976 1.4332,2.8663 -2.8663,7.1658 -2.8663,10.032 1.4331,1.4332 32.9627,20.0644 40.1286,25.7971 4.2995,5.7326 8.599,10.0321 10.0322,14.3316 h -2.8664 c -8.599,1.4332 -17.198,0 -25.7969,2.8664 -11.4653,4.2995 -20.0644,14.3317 -30.0965,21.4975 -2.8664,1.4332 0,7.1657 -1.4332,5.7327 -32.9629,-7.166 -42.9949,-32.9629 -75.9578,-15.7649 l -24.3639,27.2301 c -10.032,4.2995 -22.9305,-2.8663 -30.0964,4.2995 -8.599,7.1659 0,21.4975 -5.7327,30.0964 -8.599,10.0322 -37.2622,5.7327 -24.3637,27.2302 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cccccscccccccccccccsccccccccccccccccsccsccccccccccccccscccccccccccccccccc" /><path
+ id="cy"
+ class="eu europe"
+ d="m 9926.7843,7409.1367 c -1.4331,22.9306 -65.9256,78.8242 -77.3908,104.6211 -12.8987,31.5297 51.5939,35.8292 44.4281,47.2946 -4.2995,5.7325 -15.7649,-1.4332 -21.4976,1.433 -5.7326,1.4332 -7.1658,10.0322 -12.8985,12.8985 -8.599,5.7327 -22.9307,0 -30.0964,7.1659 -5.7327,7.1658 1.4332,20.0643 -2.8663,27.2302 -11.4654,20.0642 -61.6262,34.3959 -73.0915,50.1607 -4.2995,5.7327 4.2995,15.7649 0,22.9306 -11.4653,21.4976 -22.9307,-11.4652 -27.2302,-11.4652 -8.5989,0 -14.3316,11.4652 -22.9306,14.3317 -4.2995,1.433 -51.5939,-5.7327 -53.0271,-5.7327 -4.2995,-2.8663 -2.8663,-10.0322 -5.7327,-14.3317 -4.2995,-4.2995 -41.5617,-44.4282 -28.6633,-42.9949 7.1658,0 11.4653,7.1657 18.6312,7.1657 12.8985,-1.4332 15.7648,-27.2301 18.631,-31.5296 10.0322,-15.7648 37.2624,-4.2995 47.2946,-12.8985 7.1658,-4.2995 5.7327,-15.7647 4.2995,-24.3637 -1.4332,-7.1659 -14.3317,-15.7649 -8.599,-22.9307 4.2995,-5.7327 15.7648,2.8663 24.3637,1.4331 17.1981,-1.4331 58.7598,-11.4653 74.5247,-20.0643 20.0643,-11.4654 130.4181,-111.7869 131.8512,-110.3538 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
+ sodipodi:nodetypes="cssssc"
+ style="display:inline;fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 6829.9519,7968.4904 c -10.2335,2.0464 -18.1436,18.6209 -18.1436,18.6211 18.1928,-3e-4 25.4206,-7.6225 18.1436,21.4858 -7.2772,29.1084 87.3099,11.1464 76.3942,-14.3239 -10.9158,-25.4703 -51.3355,-7.4093 -65.89,-21.9633 -3.6385,-3.6388 -7.093,-4.5019 -10.5042,-3.8197 z"
+ id="mt"
+ class="eu europe" /><path
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7367.1505,6701.153 -2.8665,-10.0322 c -17.1979,-28.6634 -44.4281,-18.6312 -75.9577,-42.9951 -8.599,-7.1658 -11.4653,-20.0642 -21.4975,-22.9307 -5.7326,-2.8662 -12.8985,2.8665 -20.0642,4.2997 2.8662,1.433 4.2995,1.433 7.1657,2.8663 2.8663,1.4332 5.7327,10.0321 2.8663,10.0321 -22.9305,-1.4332 -40.1286,-22.9306 -63.0591,-25.797 -10.0322,-1.4331 -21.4976,1.4332 -31.5297,0 -2.8664,0 -5.7327,-7.1658 -7.1659,-5.7326 -2.8663,1.4331 -2.8663,8.599 0,10.032 8.599,2.8665 18.6312,-1.433 28.6634,0 8.5989,1.4333 18.6311,4.2995 28.6632,10.0322 2.8664,1.4333 1.4332,7.166 4.2995,8.599 48.7277,25.7971 38.6955,-15.7647 114.6533,44.4281 10.0322,7.166 22.9307,14.3317 35.8292,17.1982 z m 24.3637,-460.0463 c -12.8985,-14.3317 8.599,-7.1658 14.3317,-17.198 1.4332,-1.4332 1.4332,-4.2995 0,-5.7327 -18.6312,-18.631 -5.7327,-25.7969 -4.2995,-44.4281 1.4332,-7.1658 37.2623,21.4974 32.9629,-7.1658 -20.0644,0 -42.9951,-5.7327 -60.1931,-17.198 -7.1657,-5.7327 5.7327,-8.5989 5.7327,-10.0322 0,-4.2994 -14.3317,-7.1657 -5.7327,-15.7649 1.4332,-1.433 11.4654,7.166 12.8985,-1.433 1.4332,-15.7649 -28.6632,2.8663 -28.6632,-11.4654 2.8663,-32.9627 8.599,-24.3638 -15.7649,-58.7598 l -1.4331,-2.8663 c -4.2995,1.4332 -8.599,1.4332 -15.7649,2.8663 -10.0322,0 -11.4652,20.0644 -14.3317,22.9306 -18.6311,15.7649 -81.6903,17.1981 -101.7547,8.599 -10.0322,-4.2995 -18.6312,-14.3315 -30.0964,-18.631 -2.8665,-1.4332 -31.5297,2.8663 -35.8292,-2.8664 -30.0966,-38.6955 -63.0593,-55.8934 -101.7548,-87.4231 -10.0321,-1.4332 -34.396,-7.1659 -40.1287,-5.7327 -15.7647,2.8663 5.7327,22.9307 -2.8663,28.6634 -7.1657,2.8663 -15.7647,-1.4332 -22.9306,1.4331 -2.8663,1.4332 1.4332,7.1659 -1.4331,10.0321 -14.3317,11.4655 -37.2623,12.8985 -51.594,25.797 -17.198,15.7649 31.5296,55.8935 10.0322,71.6583 -50.1609,35.8291 -18.6312,-24.3638 -51.5941,22.9307 -4.2995,5.7327 12.8985,7.1659 15.7649,14.3316 2.8663,5.7327 -14.3317,4.2995 -14.3317,10.0322 0,2.8663 14.3317,21.4975 8.599,28.6633 -15.7647,15.7649 -38.6954,-8.599 -53.0271,-8.599 -21.4974,0 20.0643,20.0644 -15.7649,10.0322 -10.032,-2.8663 -22.9305,-18.6312 -27.23,-27.2302 -2.8664,-2.8663 -5.7327,-11.4653 -7.1659,-8.599 -5.7327,8.599 -4.2995,18.6312 -10.0322,25.797 -18.631,24.3639 -44.4281,0 -65.9256,7.1659 -2.8663,1.4331 2.8663,7.1658 0,10.032 -12.8985,7.166 -38.6954,5.7327 -51.5939,0 -4.2995,0 -12.8986,-4.2995 -12.8986,0 1.4332,11.4654 11.4654,20.0644 15.7649,30.0966 0,1.4331 -2.8663,1.4331 -2.8663,2.8663 1.4331,11.4654 -1.4332,22.9307 4.2995,31.5297 0,0 1.4331,0 1.4331,1.4332 -5.7326,8.5989 17.1979,18.6311 24.3639,28.6632 5.7327,8.599 10.0321,45.8613 17.1979,37.2623 7.1658,-8.5989 11.4653,-20.0643 17.198,-30.0964 1.4332,-4.2995 2.8664,-8.599 2.8664,-12.8985 0,-1.4332 -4.2995,0 -4.2995,-2.8664 0,-1.4331 0,-7.1658 1.4331,-5.7325 5.7327,1.433 1.4332,34.3959 17.1979,8.5989 2.8665,-7.1659 2.8665,-14.3317 2.8665,-22.9306 0,-1.4332 -2.8665,-2.8665 -2.8665,-5.7327 0,-1.4332 1.4333,4.2995 2.8665,2.8662 11.4652,-5.7325 1.433,-44.4281 14.3317,-44.4281 41.5617,-2.8663 27.23,12.8985 53.0271,34.3961 5.7325,4.2995 14.3315,0 18.6311,4.2995 25.797,30.0964 -4.2996,67.3588 24.3638,98.8884 8.599,10.0321 32.9628,31.5297 42.9949,38.6954 11.4654,5.7328 47.2945,11.4653 35.8291,15.7648 -20.0642,5.7327 -57.3266,-35.8291 -51.5939,18.6312 1.4332,17.1979 67.3588,54.4603 77.391,67.3588 2.8663,1.4332 -11.4654,-4.2995 -8.599,-2.8663 8.599,5.7327 45.8612,17.198 47.2944,21.4974 2.8663,10.0322 -5.7327,25.797 1.4333,34.396 4.2994,2.8664 48.7276,-12.8985 50.1608,-14.3316 28.6632,-5.7327 8.599,5.7326 44.4281,18.6311 11.4653,2.8664 24.3637,-1.4331 35.8292,2.8664 15.7647,5.7326 25.7969,31.5296 42.9949,40.1286 20.0644,8.599 32.9628,14.3317 38.6954,20.0643 0,1.4332 1.4332,0 1.4332,0 2.8663,0 5.7327,-2.8663 7.1658,0 5.7327,10.0322 -2.8663,10.0322 10.0322,15.7649 4.2995,-4.2995 14.3316,-4.2995 15.7649,-10.0322 7.1657,-18.6312 -54.4604,-42.9949 -60.1931,-53.0271 -5.7327,-8.599 -1.4332,-21.4975 -7.1657,-30.0965 -4.2995,-5.7327 -14.3317,-4.2995 -21.4975,-7.1659 -30.0966,-18.6312 -48.7277,-53.0271 -74.5247,-74.5246 -8.599,-5.7327 -41.5618,-38.6955 -51.5939,-42.995 -4.2995,-1.4331 -10.0322,4.2995 -14.3317,1.4332 -7.1657,-7.1658 10.0322,-22.9307 10.0322,-25.7969 -1.4332,-5.7327 -8.599,-7.166 -12.8985,-11.4654 -11.4654,-17.198 -15.7649,-40.1287 -31.5296,-54.4602 -5.7327,-7.1659 -17.1981,-7.1659 -24.3639,-12.8986 -5.7327,-4.2995 -15.7647,-87.4231 15.7649,-85.9899 14.3316,0 38.6954,31.5297 51.5939,38.6955 l 11.4653,-1.4333 -11.4653,1.4333 c 17.198,-1.4333 14.3317,-28.6634 22.9307,-40.1287 15.7647,-18.6312 22.9306,4.2995 42.9949,0 5.7327,-1.4332 5.7327,-12.8985 11.4654,-17.1979 0,0 8.599,8.5989 32.9627,15.7647 2.8664,1.4332 7.1659,2.8664 11.4654,1.4332 2.8663,0 4.2995,-5.7327 8.599,-7.1658 17.198,-1.4332 55.8934,20.0643 74.5246,17.198 4.2995,0 8.5989,-2.8664 10.0322,-7.1659 4.2994,-2.8663 2.8662,-12.8985 8.5989,-12.8985 8.599,-1.433 14.3317,7.1659 22.9307,10.0322 15.7648,4.2995 -2.8663,-7.1658 5.7327,-10.0322 8.599,-2.8663 18.6312,-2.8663 27.2302,0 5.7325,1.4332 10.032,10.0322 15.7647,10.0322 4.2995,0 0,-10.0322 4.2995,-10.0322 32.9629,1.4332 24.3639,37.2624 40.1286,40.1287 10.0322,1.4332 18.6312,-1.4331 25.797,-4.2995 z"
+ class="europe"
+ id="hr" /><path
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7430.2098,6546.371 c -14.3317,-10.0322 -14.3317,-20.0643 -30.0966,-18.6312 l 2.8664,-4.2995 -2.8664,4.2995 c -20.0643,22.9307 -17.198,55.8935 -22.9305,63.0593 -11.4655,14.3317 -15.7649,-7.1658 -20.0644,14.3317 -7.1658,41.5618 37.2623,42.9949 4.2995,74.5246 l 7.1659,-1.4331 1.433,22.9307 c -17.1979,-41.5619 -45.8613,-27.2302 -81.6904,-53.0273 -8.599,-7.1658 -11.4653,-20.0642 -21.4975,-22.9307 -7.1658,-2.8662 -15.7647,5.7327 -24.3637,5.7327 -4.2995,0 -14.3317,-1.433 -12.8985,-5.7327 2.8663,-5.7325 15.7647,-4.2995 17.198,-11.4652 7.1657,-18.6312 -54.4604,-42.9949 -60.1931,-53.0271 -5.7327,-8.599 -1.4332,-21.4975 -7.1657,-30.0965 -4.2995,-5.7327 -14.3317,-4.2995 -21.4975,-7.1659 -30.0966,-18.6312 -48.7277,-53.0271 -74.5247,-74.5246 -8.599,-5.7327 -41.5618,-38.6955 -51.5939,-42.995 -4.2995,-1.4331 -10.0322,4.2995 -14.3317,1.4332 -7.1657,-7.1658 10.0322,-22.9307 10.0322,-25.7969 -1.4332,-5.7327 -8.599,-7.166 -12.8985,-11.4654 -11.4654,-17.198 -15.7649,-40.1287 -31.5296,-54.4602 -5.7327,-7.1659 -17.1981,-7.1659 -24.3639,-12.8986 -5.7327,-4.2995 -15.7647,-87.4231 15.7649,-85.9899 14.3316,0 38.6954,31.5297 51.5939,38.6955 l 11.4653,-1.4333 -11.4653,1.4333 c 17.198,-1.4333 14.3317,-28.6634 22.9307,-40.1287 15.7647,-18.6312 22.9306,4.2995 42.9949,0 5.7327,-1.4332 5.7327,-12.8985 11.4654,-17.1979 0,0 8.599,8.5989 32.9627,15.7647 2.8664,1.4332 7.1659,2.8664 11.4654,1.4332 2.8663,0 4.2995,-5.7327 8.599,-7.1658 17.198,-1.4332 55.8934,20.0643 74.5246,17.198 4.2995,0 8.5989,-2.8664 10.0322,-7.1659 4.2994,-2.8663 2.8662,-12.8985 8.5989,-12.8985 8.599,-1.433 14.3317,7.1659 22.9307,10.0322 15.7648,4.2995 -2.8663,-7.1658 5.7327,-10.0322 8.599,-2.8663 18.6312,-2.8663 27.2302,0 5.7325,1.4332 10.032,10.0322 15.7647,10.0322 4.2995,0 0,-10.0322 4.2995,-10.0322 32.9629,1.4332 24.3639,37.2624 40.1286,40.1287 27.2302,2.8664 41.5619,-17.198 67.3588,-15.7648 0,44.4281 -25.7969,74.5246 -21.4974,101.7547 5.7327,31.5297 14.3317,8.599 34.3959,17.198 12.8985,5.7327 15.7649,24.3639 28.6634,31.5296 4.2995,1.4333 18.6312,-2.8662 14.3317,10.0322 -8.599,28.6634 -44.4282,-2.8662 -51.5941,7.1658 0,0 64.4925,60.193 47.2946,78.8242 -5.7327,4.2995 -12.8986,-10.0322 -20.0644,-7.1659 -8.599,2.8664 -10.0322,14.3317 -15.7648,21.4976 -10.0322,2.8663 -37.2623,-2.8664 -38.6955,4.2995 -4.2995,20.0642 31.5296,21.4974 20.0644,51.5939 h -5.7327 z"
+ class="europe"
+ id="ba" /><path
+ sodipodi:nodetypes="cccccccscscccccssssssccccccccccsccccc"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7364.9738,6687.7722 2.8671,10.0257 c 7.1648,1.4322 12.8977,1.4322 20.0636,1.4322 -2.8659,2.8645 -5.7329,5.7289 -4.2988,10.0257 20.0636,44.3997 24.3636,2.8645 44.4273,12.8903 4.3,2.8645 1.4341,8.5935 4.3,12.8902 11.4659,14.3226 25.7966,11.4581 35.8295,27.2128 2.866,4.2967 0,12.8903 4.2989,17.187 8.5989,8.5936 20.0648,12.8902 31.5296,15.7549 0,-10.0259 0,-20.0516 0,-28.6452 0,-5.7291 2.867,-12.8903 0,-18.6193 -4.2989,-7.1611 -17.1978,-7.1611 -18.6307,-14.3223 0,-1.4323 45.8614,-94.5287 50.1614,-97.3932 1.4329,-1.4322 8.5988,34.3741 20.0636,35.8063 0,0 32.9682,-25.0655 32.9682,-25.0655 -3.0114,-15.0806 -0.01,-14.2809 -5.0926,-28.8088 -3.4107,-9.7457 8.0836,-4.1504 15.8967,-10.589 3.4356,-2.8306 1.7184,-7.223 -2.8023,-12.3987 -4.5968,-5.2613 29.5383,-5.5936 21.6127,-11.6552 -15.7205,-12.0245 -34.9289,-32.514 -50.2297,-39.624 -9.876,-4.5889 2.5088,-24.1417 -7.1227,-33.6155 -18.0348,-17.7407 -61.7911,-28.5418 -75.4553,-37.3262 -5.733,4.2967 -12.8989,-10.0258 -20.0648,-7.1613 -8.5989,2.8645 -10.0318,14.3225 -15.7648,21.4839 -10.0318,2.8644 -37.2625,-2.8646 -38.6955,4.2968 -4.2988,20.0513 31.5296,21.4836 20.0648,51.5609 h -5.7329 5.7329 c -14.3318,-10.0258 -14.3318,-20.0515 -30.0966,-18.6193 l 2.8659,-4.2968 -2.8659,4.2968 c -20.0648,22.9161 -17.1977,55.8578 -22.9307,63.0191 -11.4659,14.3225 -15.7648,-7.1613 -20.0648,14.3225 -7.1659,41.5353 37.2625,42.9675 4.3,74.477 l 7.1659,-1.4321 1.433,22.916 c -1.433,-4.2969 -2.8659,-7.1614 -5.733,-10.0257 z"
+ class="europe"
+ id="me" /><path
+ sodipodi:nodetypes="cccccccccccccccccccccccccsccscscccccscccccsccscccccsscccscccccccccsssscc"
+ id="rs"
+ class="europe"
+ d="m 7686.4663,6519.2109 c 23.8063,0 57.3844,75.0265 70.7747,82.4612 4.4642,2.9738 36.1762,20.6419 42.1279,22.1285 10.4161,2.9742 0.8486,18.3344 8.2882,25.769 19.3422,20.8174 -0.048,20.1553 -4.5124,40.9724 0,0 -0.6894,-10.1895 -0.6894,-10.1895 l -3.8636,7.7237 c 37.1977,25.2782 1.2506,-4.4095 10.1777,-10.3572 16.3669,-10.4087 -16.0594,3.392 3.2837,1.905 7.4397,0 -5.6552,-1.8498 -2.6786,-9.2845 1.4877,-5.9479 -8.861,18.6972 -7.3733,14.2362 13.3915,-32.7126 -18.3044,13.6139 9.965,9.1532 23.8064,-4.4609 87.7699,-44.8543 107.1133,-27.0108 7.4395,-13.3826 28.2694,-16.3564 20.8298,-35.6866 -1.4877,-5.9478 -5.9507,-8.9218 -10.4149,-11.8955 -2.9754,-1.4872 -7.4396,1.4869 -8.9273,-1.4872 -1.4876,-7.4346 0,-14.8694 0,-22.304 -1.4876,-8.9216 -11.9037,-17.8434 -7.4396,-25.2781 43.1486,-71.3733 -5.9518,16.3565 41.6609,-20.8173 4.4642,-4.4607 35.7102,-59.4778 26.7829,-68.3994 -11.9038,-8.9217 -68.4438,-35.6867 -71.4192,-38.6605 -17.8556,-14.8695 -46.1249,-77.3213 -35.7101,-99.6254 4.4642,-10.4087 20.8311,-8.9217 26.7818,-17.8433 4.4642,-10.4087 -1.4877,-23.7913 2.9764,-34.1998 -20.8308,-8.9217 -40.173,-22.3042 -37.1976,-43.1213 1.4875,-13.3827 50.5892,-14.8694 35.7101,-22.3043 -157.7173,-78.8081 -16.3668,-7.4347 -80.3476,29.739 -10.4149,7.4345 -16.3669,-19.3304 -26.7817,-23.7911 -7.4395,-4.4609 -17.8545,0 -25.2941,0 -8.9272,0 -17.8543,4.4607 -26.7817,1.487 -4.4641,-2.9741 -1.4888,-10.4088 -4.4641,-16.3566 -7.4396,-14.8692 -71.4192,8.9217 -35.7102,-16.3562 8.9284,-5.9478 31.2459,-11.8958 23.8064,-17.8434 -7.4384,-4.461 -22.3175,0 -25.2941,-8.9216 -1.4877,-8.9218 29.7583,-25.2782 8.9273,-37.1737 -28.2694,-16.3564 -84.8094,-8.9216 -104.1527,-43.1213 -4.4629,-7.4349 -4.4629,-43.1216 -4.4629,-52.0432 0,-1.4871 0,-2.974 0,-2.974 -4.4644,1.4869 -7.4396,10.4087 -10.4163,7.4347 -10.4149,-5.9478 -11.9026,-22.3041 -20.8298,-29.7387 -8.9272,-5.9479 -22.3186,-4.461 -31.246,-11.8957 -8.9271,-4.4608 -13.3913,-14.8693 -19.3432,-22.3041 -7.4395,0 -14.8792,-7.4349 -22.3186,-7.4349 -1.4877,0 -40.1733,11.8957 -41.661,11.8957 -25.294,-1.4869 2.9765,-23.7912 -31.2459,-1.4869 -16.3668,8.9215 -25.294,26.7649 -38.6854,37.1735 -13.3902,10.4086 -19.3422,-4.4609 -23.8063,0 -19.3422,22.3042 -20.83,23.7911 -32.7337,23.7911 l 1.4878,2.974 c 25.2951,35.6867 19.3431,26.7651 16.3667,60.9646 0,14.8696 31.246,-4.4608 29.7581,11.8958 -1.4875,8.9216 -11.9025,0 -13.3913,1.4867 -8.9273,8.9219 5.9519,11.8957 5.9519,16.3565 0,1.4871 -13.3903,4.4608 -5.9519,10.4086 17.8557,11.8955 41.6619,17.8434 62.4918,17.8434 4.4642,29.7388 -32.7336,0 -34.2212,7.4346 -1.4878,19.3305 -14.8793,26.7653 4.4643,46.0953 1.4875,1.487 1.4875,4.4609 0,5.9479 -5.9521,10.4085 -28.2707,2.9738 -14.8792,17.8434 14.8792,-4.4609 26.7816,-13.3825 43.1484,-11.8955 0,46.0951 -26.7817,77.321 -22.3186,105.5729 5.9518,32.7129 14.8791,8.9216 35.7101,17.8434 13.3915,5.9478 16.3669,25.278 29.7583,32.7128 4.4629,1.487 19.342,-2.9739 14.8792,10.4086 -8.9286,29.739 -46.1252,-2.9737 -53.5647,7.4346 0,0 66.9549,62.4518 49.1004,81.7821 34.9816,18.2199 17.4364,11.1863 71.9716,34.1526 18.5275,5.9612 1.2349,37.5971 17.6313,44.1048 25.9517,10.3007 17.4622,20.279 35.1904,29.6348 16.5342,8.7264 -17.2431,-14.8826 -6.899,-7.524 17.1235,12.1829 25.4817,-14.1028 22.4484,-6.1471 21.9102,3.6734 69.3821,-71.4706 67.4624,-63.2949 z"
+ style="display:inline;opacity:1;fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" /><path
+ sodipodi:nodetypes="cscccsssscssssssssccssssssscc"
+ id="rs-km"
+ d="m 7673.2462,6767.2235 c 0,0 6.7207,-36.0036 -5.7605,-55.6855 -12.4812,-19.682 -49.4449,-24.9625 -49.4449,-24.9625 l -16.8017,-32.6432 -11.5211,-11.5212 c 0,0 -7.6808,-29.7629 -1.4402,-28.8028 3.1203,0.48 7.9963,-0.4574 10.7311,-4.1265 2.7347,-3.6691 4.4988,-10.0698 13.1004,-15.834 7.1812,-4.8123 24.1275,-13.0844 27.3667,-15.9534 8.1572,-7.2247 20.1065,-18.0991 20.1065,-18.0991 0,0 24.9298,-31.2167 27.431,-34.1702 6.0694,-7.1672 28.4299,28.5539 31.9115,30.2442 7.9103,3.8404 30.2146,48.4298 34.055,49.3899 3.8404,0.9601 43.1584,21.9904 46.0387,22.9505 2.8803,0.9601 6.7207,9.601 3.8404,12.4812 -2.8803,2.8803 13.9214,17.7618 12.4812,21.1221 -1.4401,3.3604 -0.9601,14.4015 -4.3204,16.8017 -3.3603,2.4002 4.7413,16.6833 0.9009,17.6434 -3.8403,0.9601 -14.8223,-7.5624 -14.8223,-7.5624 l -3.1828,-7.2598 c 0,0 -5.458,-6.1815 -13.6189,-0.901 -8.1608,5.2805 -17.2817,20.162 -14.8814,23.5223 2.4002,3.3604 8.1608,6.2406 6.2406,8.6409 -1.9202,2.4002 -8.1608,-9.1209 -20.6421,-10.081 -12.4812,-0.9601 -42.2441,12.9613 -44.6444,16.3216 -2.4002,3.3603 -6.2406,6.2406 -7.6807,8.1608 -1.4402,1.9202 -3.3604,21.6022 -3.3604,25.4425 0,3.8404 -4.3204,19.2019 -4.3204,19.2019 z"
+ style="fill:#fff7df;fill-opacity:1;fill-rule:evenodd;stroke:#aa805d;stroke-width:4.58365;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ class="europe" /><path
+ id="mk"
+ class="europe"
+ d="m 7669.5443,6768.5121 c -1.4331,10.0322 -2.8663,20.0644 -1.4331,28.6634 0,10.0322 8.599,18.6312 8.599,27.2301 -1.4332,4.2995 -12.8985,4.2995 -11.4654,8.599 1.4332,10.0322 15.7649,15.7649 17.1979,25.797 1.4332,4.2995 -7.1657,8.5989 -7.1657,12.8984 0,11.4654 37.2623,64.4926 42.9949,73.0915 8.5991,10.0322 14.3317,-5.7327 18.6311,-5.7327 5.7327,-1.433 12.8985,0 17.198,2.8665 2.8664,2.8662 -1.4331,10.0322 1.4332,10.0322 10.0322,1.433 106.0542,-28.6634 111.7869,-32.9629 15.7649,-17.198 4.2995,-40.1286 32.9629,-50.1608 10.0322,-4.2995 65.9256,2.8662 74.5246,-2.8663 4.2995,-2.8664 2.8664,-11.4654 7.1659,-14.3317 2.8663,-1.4332 7.1658,7.1658 10.032,4.2995 17.7081,-52.0544 30.3676,-46.6927 22.9307,-121.8191 -10.0322,-10.0322 -25.7969,-38.6954 -38.6954,-47.2944 -7.1659,-4.2995 -17.198,0 -25.797,-4.2995 -2.8664,-1.4332 -41.5618,-31.5297 -41.5618,-34.3961 -18.6312,-17.198 -64.4925,27.2302 -87.4232,31.5297 -27.2302,4.2994 -45.1333,-7.3084 -58.0318,24.2211 -1.4332,4.2997 10.7374,3.009 9.3042,8.7417 -2.8663,7.1658 -15.7648,-10.0322 -22.9307,-10.0322 -18.631,1.4332 -35.8291,14.3317 -51.5939,24.3639 -8.599,5.7326 11.4653,65.9256 -24.3639,41.5617 z"
+ style="display:inline;opacity:1;fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ sodipodi:nodetypes="cccccsccccccsscccscccccccc" /><path
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7755.5383,6951.957 c 0,18.631 20.0644,24.3637 15.7649,41.5617 -14.3317,54.4603 -22.9307,7.1659 -32.9628,45.8613 0,0 -8.599,57.3266 -8.599,58.7598 -2.8663,4.2995 -47.2946,18.6312 -48.7276,28.6632 0,0 18.6311,28.6634 18.6311,28.6634 4.2995,12.8985 -15.7649,0 -15.7649,8.599 1.4332,37.2623 -14.3316,17.1979 -38.6954,21.4974 -1.4332,0 1.4331,1.4332 0,2.8665 -1.4332,1.433 -1.4332,1.433 -2.8664,2.8662 -1.4331,-1.4332 -1.4331,-2.8662 -2.8663,-5.7327 0,-2.8662 0,-5.7325 0,-8.5989 0,-8.599 4.2995,-15.7648 1.4332,-22.9307 -2.8664,-4.2995 -11.4654,0 -14.3317,-4.2995 -7.1657,-5.7326 -5.7327,-17.198 -11.4654,-22.9307 -10.032,-12.8984 -101.7547,-37.2622 -91.7225,-60.1929 4.2995,-10.0321 24.3639,1.4333 28.6634,-7.1657 1.433,-2.8664 -27.2302,-21.4976 -31.5297,-37.2624 -1.4332,-4.2995 5.7326,-5.7327 5.7326,-10.0322 1.4332,-5.7327 0,-12.8984 1.4332,-18.6311 0,-7.1658 -4.2995,-14.3317 0,-18.6312 2.8663,-5.7326 14.3317,-1.4331 18.6312,-5.7326 2.8663,-4.2995 0,-15.7649 -4.2995,-15.7649 -5.7327,1.4332 -1.4332,12.8985 -5.7327,17.198 -8.599,7.1659 0,-48.7276 1.4332,-63.0593 2.8663,-17.198 -21.4975,-8.599 -21.4975,-25.797 0,-12.8984 -1.4332,-25.7969 5.7326,-35.8291 4.2995,-5.7327 17.198,0 22.9307,-5.7327 2.8664,-2.8663 -7.1658,-4.2995 -8.599,-8.599 -1.4332,-10.032 8.599,-24.3637 1.4332,-31.5296 -8.599,-8.599 -22.9307,1.4332 -34.3961,-1.4331 0,-10.0322 0,-20.0644 0,-28.6634 0,-5.7327 2.8664,-12.8985 0,-18.6312 -4.2995,-7.1657 -17.198,-7.1657 -18.631,-14.3315 0,-1.4332 45.8612,-94.589 50.1607,-97.4554 1.4332,-1.433 8.5989,34.3961 20.0644,35.8292 0,0 30.0964,-24.3638 30.0964,-24.3638 22.9307,0 18.6312,35.8292 31.5296,42.9949 4.2995,2.8663 8.599,-2.8662 14.3317,-1.4332 10.0322,2.8665 20.0643,7.1659 27.2302,14.3317 27.2301,30.0966 7.1658,60.193 10.0322,90.2895 0,10.0322 8.599,18.6312 8.599,27.2301 -1.4332,4.2995 -12.8985,4.2995 -11.4654,8.599 1.4332,10.0322 15.7649,15.7649 17.1979,25.797 1.4332,4.2995 -7.1657,8.5989 -7.1657,12.8984 0,11.4654 37.2623,64.4926 42.9949,73.0915 8.5991,10.0322 14.3317,-5.7327 18.6311,-5.7327 5.7327,-1.433 12.8985,0 17.198,2.8665 2.8664,2.8662 -1.4331,10.0322 1.4332,10.0322 z"
+ class="europe"
+ id="al" /><path
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 3676.7488,2152.285 c -4.2995,-1.4331 -96.0221,-45.8614 -100.3216,-48.7276 -5.7326,-4.2995 12.8984,-10.0322 17.1979,-15.7648 4.2995,-7.1659 0,-28.6634 7.1659,-25.7971 11.4653,4.2995 4.2995,22.9307 11.4653,31.5297 1.4332,2.8664 2.8664,-7.1658 7.1659,-7.1658 11.4653,-1.4332 24.3638,8.599 34.396,4.2995 44.4281,-17.198 -14.3317,-32.9629 40.1286,-37.2624 10.0322,0 20.0644,7.1659 30.0964,8.599 7.1659,1.4332 -11.4652,-10.032 -17.1979,-12.8985 -2.8663,0 -5.7327,0 -8.599,0 -11.4653,-1.433 -22.9307,1.4332 -32.9629,-2.8662 -7.1658,-4.2995 17.1981,2.8662 22.9307,-2.8663 2.8664,-2.8664 -11.4653,-4.2997 -10.0321,-8.5991 0,-7.1658 5.7326,-12.8985 12.8985,-15.7648 4.2995,-1.4332 11.4653,2.8663 17.198,2.8663 10.0322,-1.4331 21.4974,-2.8663 30.0964,-10.0321 4.2995,-2.8664 -11.4653,-1.4332 -15.7647,-4.2995 -4.2995,-1.4332 -40.1287,15.7648 -50.1609,14.3316 -7.1659,-1.4331 4.2995,-15.7648 5.7327,-22.9307 0,-8.599 -5.7327,-15.7647 -4.2996,-24.3637 1.4332,-8.599 17.1981,-14.3317 14.3317,-24.3639 -1.4331,-5.7326 -14.3317,2.8664 -20.0643,0 -4.2995,-1.4331 -2.8664,-12.8985 -7.1659,-10.0321 -1.433,1.4331 4.2995,8.599 1.4332,7.1658 -11.4652,-5.7327 -22.9306,-24.3639 -32.9628,-31.5296 -1.4331,-2.8663 -5.7326,-1.4332 -8.599,-1.4332 -2.8663,0 -5.7326,4.2994 -7.1658,2.8664 -2.8663,-1.4332 -1.4332,-8.599 -5.7327,-10.0322 -5.7327,-2.8663 -84.5567,-2.8663 -27.2301,-30.0965 15.7649,-7.1659 12.8984,7.1658 27.2301,15.7648 12.8985,7.1659 32.9629,-11.4653 45.8614,-4.2995 5.7327,2.8663 -10.0322,14.3317 -4.2995,18.6312 4.2995,4.2995 7.1657,-8.599 12.8984,-10.0322 10.0322,-2.8663 21.4975,-8.599 30.0965,-2.8663 5.7327,5.7327 -2.8663,17.198 -1.4331,24.3637 0,4.2995 0,-7.1657 1.4331,-8.5989 7.1659,-8.599 114.6533,61.6262 77.391,0 -5.7327,-8.599 -20.0643,7.1659 -31.5297,5.7327 -12.8985,-1.4332 -22.9307,-17.198 -28.6634,-28.6634 0,0 1.4333,-1.4331 2.8665,-2.8663 15.7647,-11.4653 41.5618,-14.3317 58.7598,-15.7647 8.599,0 18.6311,8.5989 24.3637,1.433 11.4654,-10.0322 -42.9949,-5.7325 -41.5617,-21.4974 1.4331,-10.0322 28.6632,-5.7327 28.6632,-17.198 -1.4332,-67.3588 -50.1608,7.1658 -53.0271,-5.7327 -1.4332,-8.599 5.7327,-17.198 2.8663,-24.3637 -1.4331,-2.8665 -5.7326,5.7325 -8.599,5.7325 -2.8663,0 2.8664,-7.1657 0,-7.1657 -10.032,2.8662 -10.032,20.0642 -17.1979,1.4332 -1.4333,-1.4332 1.4332,-7.1659 0,-7.1659 -5.7327,4.2994 -5.7327,14.3316 -12.8985,15.7648 -4.2995,0 -2.8663,-10.0321 -7.1658,-11.4654 -8.599,-2.8662 -48.7277,17.198 -50.1608,-5.7325 0,-4.2997 7.1658,-4.2997 7.1658,-8.5991 -4.2995,-12.8985 -38.6955,-11.4653 -35.8292,-25.797 11.4654,-60.1929 45.8614,25.797 53.0271,21.4975 20.0644,-12.8985 -22.9306,-54.4602 5.7327,-54.4602 25.797,-1.4332 8.599,96.022 41.5619,51.5939 4.2995,-5.7327 -17.198,-12.8985 -11.4654,-17.198 5.7327,-7.1659 21.4976,8.599 28.6633,1.4332 4.2995,-7.1659 -18.6311,0 -24.3638,-5.7327 -8.599,-8.599 -11.4653,-21.4974 -12.8985,-32.9628 -5.7326,-48.7276 27.2301,44.4281 40.1286,30.0964 4.2995,-4.2995 -44.4281,-42.9949 -22.9307,-53.0271 10.0322,-4.2995 17.1982,22.9307 27.2302,18.6312 5.7327,-4.2995 -27.2302,-50.1609 14.3317,-35.8292 34.3959,12.8985 -4.2995,73.0915 34.3959,97.4553 0,1.4332 24.3639,-10.0321 25.7971,-38.6955 0,-5.7327 -8.599,-2.8662 -11.4654,-7.1657 -4.2995,-4.2995 -20.0642,-31.5297 -14.3317,-40.1287 10.0322,-11.4654 30.0966,10.0321 44.4283,17.198 4.2995,1.4331 -12.8986,-2.8664 -12.8986,-7.1659 -1.4331,-4.2995 7.1659,-2.8663 10.0322,-4.2995 1.4332,-1.4331 1.4332,-4.2995 0,-4.2995 -18.6312,1.4332 -17.198,30.0966 -38.6955,-17.198 -18.6311,-41.5618 21.4975,-10.0322 22.9307,-10.0322 0,0 1.4331,-1.433 1.4331,-2.8662 0,-2.8663 -2.8663,-8.599 0,-7.1658 4.2995,4.2995 4.2995,12.8985 10.0322,17.198 5.7327,4.2995 15.7649,2.8662 21.4974,7.1657 14.3317,11.4654 -7.1657,25.797 -5.7325,32.9629 0,2.8663 7.1657,0 10.032,1.4331 1.4332,1.4332 11.4654,10.0322 8.599,15.7649 -2.8663,1.4332 -10.032,0 -8.599,2.8662 2.8664,5.7327 14.3317,4.2995 14.3317,11.4654 1.4332,10.0322 -12.8985,20.0643 -10.0322,30.0965 2.8664,8.599 24.3639,2.8663 22.9307,11.4652 0,8.5992 -21.4975,-5.7325 -24.3638,1.4333 -1.4332,7.1659 64.4924,35.8291 -1.4332,45.8613 -11.4652,2.8663 -15.7647,-17.198 -27.2301,-21.4975 -4.2995,-1.4332 1.4332,8.599 4.2995,12.8985 2.8664,11.4653 15.7649,21.4975 12.8984,31.5297 -2.8662,11.4652 -24.3637,11.4652 -25.7969,22.9306 -2.8663,7.1658 17.198,2.8663 18.6312,10.0321 2.8663,7.1659 -8.599,14.3317 -11.4654,21.4976 -2.8663,8.599 -12.8985,25.7969 -4.2995,27.2301 30.0966,5.7326 28.6633,-54.4603 47.2945,-64.4925 58.7598,-31.5296 18.6312,8.599 17.198,14.3317 -8.599,35.8292 34.3959,-2.8664 37.2623,-5.7327 18.6312,-20.0642 11.4653,-77.391 25.797,-75.9578 50.1608,4.2995 5.7327,67.3588 34.3959,90.2895 22.9307,20.0642 10.0322,-25.797 15.7649,-37.2624 1.4331,-7.1657 7.1658,-15.7647 14.3317,-18.6311 4.2995,-1.4331 10.0321,1.4332 15.7648,4.2995 1.4332,1.4332 1.4332,5.7327 2.8662,5.7327 11.4654,-2.8663 22.9307,-18.6312 32.9629,-12.8985 10.0322,4.2995 8.599,20.0642 10.0322,31.5296 0,7.1658 -8.599,11.4653 -7.1659,18.6312 7.1659,35.8292 24.3639,-25.7969 14.3317,27.2302 -4.2995,30.0964 -14.3317,14.3315 -7.1658,41.5617 11.4653,48.7277 11.4653,-93.1558 25.7969,-96.022 37.2624,-10.0322 28.6634,51.5939 31.5297,65.9255 0,2.8663 0,-7.1657 2.8663,-8.5989 1.4332,-1.4333 7.1659,0 5.7327,-1.4333 -8.599,-18.631 2.8663,8.599 2.8663,8.599 1.4332,0 1.4332,-4.2995 2.8664,-5.7325 7.1657,-11.4654 21.4974,-31.5297 37.2622,-32.9629 15.7649,-1.4332 14.3317,31.5297 27.2301,40.1286 5.7327,2.8663 -2.8662,-12.8984 1.4333,-17.1979 8.5989,-10.0322 14.3316,12.8984 14.3316,12.8984 1.4333,2.8663 -1.4332,-7.1657 0,-10.0321 2.8663,-4.2995 10.0322,-7.1658 11.4653,-12.8985 2.8664,-5.7327 0,-12.8985 0,-20.0643 1.4332,-8.599 0,-20.0644 7.1659,-24.3638 10.0321,-4.2995 20.0643,2.8662 30.0965,5.7327 25.7969,5.7327 4.2995,17.1979 7.1657,27.2301 2.8665,5.7326 11.4654,4.2995 14.3317,8.599 10.0322,21.4975 -42.9949,27.2302 4.2995,53.0271 5.7327,2.8663 5.7327,-12.8985 11.4654,-15.7647 5.7326,-2.8665 12.8985,2.8662 18.6312,0 12.8985,-4.2997 27.23,-35.8292 45.8612,-1.4333 2.8664,5.7327 -12.8985,2.8663 -20.0643,4.2995 -21.4974,4.2995 -30.0965,1.4332 -44.4281,24.3638 -1.4332,2.8664 7.1658,2.8664 7.1658,5.7327 1.4332,4.2995 -7.1658,7.1659 -4.2995,8.599 7.1658,5.7327 20.0644,1.4332 27.2302,7.1659 22.9306,17.1979 -31.5297,48.7276 -34.396,51.5939 -2.8664,1.4332 5.7326,-4.2995 10.0321,-2.8663 10.0322,2.8663 20.0644,10.0322 28.6633,17.1979 1.4333,1.4333 -7.1657,1.4333 -7.1657,4.2995 0,4.2995 7.1657,8.599 7.1657,12.8985 0,2.8663 -5.7327,-1.4332 -7.1657,0 -10.0322,5.7327 -37.2624,17.198 -27.2302,21.4975 12.8985,4.2995 24.3637,-27.2302 34.3959,-18.6312 4.2995,5.7327 8.599,11.4654 14.3317,15.7649 2.8663,2.8663 8.599,-2.8663 10.0322,1.4332 7.1658,12.8985 14.3316,37.2622 -2.8664,48.7276 -8.599,5.7326 -21.4975,4.2995 -30.0964,8.599 -4.2995,2.8663 -10.0322,8.599 -7.1658,11.4653 4.2995,4.2995 78.824,12.8984 20.0642,47.2945 -12.8984,7.1658 -45.8613,-22.9307 -45.8613,-24.3639 -10.0321,-12.8984 45.8613,22.9307 31.5296,35.8292 -7.1657,5.7327 -18.6311,-14.3317 -25.7969,-8.599 -5.7327,4.2995 14.3317,8.599 17.198,15.7649 1.4332,2.8663 -5.7327,5.7325 -8.599,7.1658 -12.8985,5.7327 -30.0965,21.4974 -40.1286,11.4652 -7.1658,-7.1657 -5.7328,-35.8291 -12.8985,-28.6632 -7.1658,8.599 15.7647,21.4975 10.0322,31.5296 -4.2995,8.599 -22.9307,-1.4332 -30.0966,5.7326 -8.599,7.1659 -2.8663,24.3639 -10.0321,32.9629 -2.8664,4.2995 -11.4654,-4.2995 -15.7649,-2.8663 -10.0322,2.8663 -15.7647,15.7647 -25.7969,17.198 -8.599,1.4332 -4.2995,-35.8292 -27.2302,-41.5619 -7.1657,-1.4332 1.4332,15.7649 -2.8662,22.9307 -1.4333,2.8663 -7.166,-2.8663 -10.0322,0 -1.4333,0 5.7327,4.2995 4.2995,4.2995 -38.6955,7.1657 -17.198,-2.8663 -53.0272,2.8662 -18.6311,2.8665 -34.396,18.6312 -53.0271,25.7971 -2.8664,1.4331 -8.5989,2.8663 -11.4654,1.4331 -10.0322,-4.2995 -12.8984,-20.0642 -22.9306,-20.0642 -8.599,1.4332 -5.7326,20.0642 -12.8985,22.9306 -5.7327,1.4331 -7.1658,-10.0322 -12.8985,-12.8984 -8.599,-2.8665 -40.1286,-4.2995 -51.5939,-8.599 -20.0644,-5.7327 -21.4976,28.6632 -25.7971,32.9627 -10.032,8.599 -63.0593,2.8664 -73.0913,-1.4332 -25.7971,-8.599 -47.2946,-50.1607 -60.193,-63.0592 -18.6312,-15.7649 -34.396,-2.8664 -44.4282,-31.5296 -1.4332,-7.1659 -8.599,-15.7649 -5.7327,-22.9307 2.8664,-10.0322 30.0966,-14.3317 21.4975,-18.6312 -8.599,-4.2995 -15.7648,22.9307 -22.9305,17.198 -8.599,-7.1658 10.032,-22.9307 4.2994,-32.9629 -2.8664,-5.7325 -10.0321,12.8986 -15.7648,10.0322 -10.0322,-5.7327 -10.0322,-20.0642 -18.6312,-27.2301 -4.2995,-4.2995 -10.0321,-2.8663 -15.7648,-4.2995 z"
+ class="europe"
+ id="is" /><path
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7768.4368,4911.1289 c 17.198,-4.2995 -17.198,-17.1979 5.7327,-24.3637 7.1658,-2.8664 17.198,-2.8664 25.7969,-1.4332 2.8665,0 2.8665,7.1657 7.166,8.599 14.3315,4.2994 34.3959,-63.0593 40.1286,-67.3588 11.4653,-5.7327 25.7969,-2.8663 37.2622,-7.1658 17.198,-7.1659 30.0966,-21.4976 48.7276,-27.2302 7.1659,-1.4332 14.3317,1.4331 21.4976,1.4331 7.1658,0 14.3316,0 21.4975,0 21.4974,-2.8663 41.5618,-15.7648 61.6261,-14.3315 4.2995,0 5.7327,5.7325 10.0322,7.1657 35.8291,4.2995 80.2572,0 113.2201,-8.599 15.7647,-4.2994 4.2995,10.0322 12.8985,17.198 2.8662,1.4332 8.5989,-5.7327 11.4652,-2.8663 2.8663,2.8663 -5.7327,11.4653 -1.4332,12.8985 35.8292,14.3317 10.0322,-8.599 27.2302,-12.8985 57.3267,-15.7649 5.7327,8.599 24.3639,18.6312 2.8662,2.8663 7.1657,7.1658 8.5989,4.2995 7.1658,-4.2995 0,-30.0966 7.1658,-30.0966 7.1659,-1.4331 20.0644,11.4654 28.6634,1.4332 5.7327,-5.7327 5.7327,-27.2301 14.3317,-22.9306 12.8984,8.5989 -18.6312,21.4974 17.1979,21.4974 12.8985,0 5.7327,-28.6632 25.797,-14.3315 37.2623,25.7969 -7.1658,17.1979 22.9306,24.3637 8.599,1.4332 -2.8662,-20.0642 2.8663,-27.2302 8.5992,-11.4652 21.4976,-31.5296 32.9629,-25.7969 11.4654,5.7327 22.9307,45.8613 34.3959,42.9949 20.0644,-5.7325 7.1659,-30.0964 30.0966,-35.8291 8.599,-1.4331 15.7648,8.599 22.9307,7.1659 47.2944,-8.599 -31.5297,-24.3639 34.3959,-20.0644 32.9629,2.8664 15.7648,38.6956 53.0271,30.0966 35.8291,-7.1659 -21.4974,-45.8614 -21.4974,-61.6263 0,-11.4652 2.8662,-38.6954 4.2994,-48.7276 7.1658,-40.1286 17.198,-54.4603 22.9307,-55.8934 10.0322,-2.8664 21.4975,1.4331 30.0964,-2.8664 5.7328,-2.8663 2.8663,-12.8985 8.599,-15.7647 12.8985,-8.599 31.5297,-7.1659 47.2946,-11.4654 -4.2995,-2.8663 -1.4332,-8.599 -4.2995,-12.8985 0,0 -30.0966,-18.6312 -30.0966,-20.0643 -1.4331,-2.8664 4.2995,-7.1659 2.8664,-10.0322 -4.2995,-10.0321 -14.3317,-15.7648 -15.7649,-24.3638 -1.4332,-4.2995 7.1659,-5.7326 7.1659,-10.0321 -2.8664,-10.0322 -22.9306,-10.0322 -24.3638,-21.4976 -1.4332,-4.2995 7.1657,-5.7325 8.5989,-10.032 4.2995,-17.198 -47.2944,-27.2302 -51.5938,-38.6956 -5.7327,-11.4653 4.2994,-25.7969 2.8662,-38.6954 0,-22.9307 68.792,7.1658 87.4231,-4.2995 12.8986,-7.1658 27.2301,-34.3959 25.7971,-48.7276 0,-1.4332 -5.7327,0 -4.2995,-1.4332 7.1657,-7.1658 20.0642,-10.0322 24.3637,-18.6312 4.2995,-5.7326 0,-18.6312 -5.7327,-21.4975 -24.3637,-8.599 -27.23,1.4332 -40.1286,-12.8984 -4.2995,-5.7327 10.0322,-25.797 -5.7326,-24.3639 -17.198,1.4332 -25.7971,-4.2995 -50.1608,2.8664 -8.599,2.8663 -17.198,11.4653 -25.797,8.599 -7.1659,-2.8664 5.7326,-42.9951 -7.1659,-51.5941 -4.2995,-2.8662 -48.7276,-2.8662 -63.0593,-12.8984 -22.9306,-14.3317 -8.599,-28.6633 -41.5617,-38.6955 -5.7327,-2.8662 8.599,-27.2301 2.8663,-28.6633 -20.0644,0 -27.2302,-1.4331 -50.1608,-17.198 -10.0322,-5.7327 8.599,-35.8292 5.7327,-41.5618 -8.599,-12.8985 11.4652,-2.8663 5.7327,-11.4653 -4.2995,-7.1658 -38.6956,-34.3959 -37.2624,-41.5618 5.7327,-20.0643 8.599,-34.396 -2.8663,-54.4604 -2.8664,-5.7325 -11.4654,5.7327 -17.1981,5.7327 -1.433,0 -47.2944,-28.6632 -47.2944,-28.6632 -35.8291,-14.3317 -10.0322,-2.8664 -30.0964,5.7326 -2.8664,1.4332 -20.0644,-1.4331 -24.3639,2.8664 -7.1658,10.032 -18.6312,37.2622 -30.0964,42.9949 -22.9307,11.4653 -21.4975,-47.2944 -21.4975,-47.2944 -44.4281,-10.0322 -35.8291,-4.2995 -65.9257,18.631 -7.1658,5.7327 -12.8985,-14.3315 -20.0643,-20.0642 -24.3638,-17.198 -17.1979,30.0964 -53.0271,1.4332 0,1.4331 -27.2301,22.9305 -30.0965,31.5297 -2.8663,4.2994 -10.0321,47.2944 -10.0321,47.2944 -7.1659,5.7327 -18.6312,-2.8663 -27.2302,0 -2.8664,1.4332 0,11.4652 -4.2994,11.4652 -5.7327,0 -10.0322,-8.599 -17.198,-8.599 -18.6312,-1.433 -21.4976,40.1287 -45.8613,45.8614 v 1.4332 c 8.5989,21.4974 -1.4333,40.1286 -2.8665,61.6261 -1.433,12.8984 45.8614,-12.8985 40.1287,7.1657 -1.4331,4.2995 -8.599,4.2995 -11.4653,8.599 -1.4332,5.7327 4.2995,14.3317 0,20.0644 -8.599,10.0322 -30.0964,-4.2995 -37.2624,5.7327 -5.7325,10.0321 1.4333,24.3638 -5.7325,32.9627 -27.2302,42.9951 -14.3317,-12.8984 -31.5297,40.1287 0,2.8664 -5.7327,2.8664 -5.7327,4.2995 0,0 12.8985,40.1286 12.8985,40.1286 0,1.4332 -14.3317,41.5618 -12.8985,47.2945 0,5.7327 44.4282,-2.8662 31.5297,28.6634 -2.8663,7.1658 -31.5297,17.198 -30.0965,4.2995 0,-4.2995 7.1658,-7.1659 5.7326,-11.4654 -2.8663,-18.6312 -35.8291,-2.8663 -40.1286,2.8663 -15.7648,15.7649 15.7649,14.3317 -7.1658,27.2301 -10.0322,4.2995 -24.3639,1.4333 -31.5297,10.0322 -5.7327,5.7327 14.3317,21.4975 7.1658,24.3639 -7.1658,1.4331 -15.7647,-2.8664 -22.9306,1.4331 -8.599,5.7327 -10.0321,20.0644 -18.6311,25.7971 -12.8986,11.4652 -18.6312,-14.3317 -30.0966,-10.0322 -11.4652,5.7327 -53.0271,28.6632 -70.225,17.1979 25.7969,73.0915 88.8562,140.4503 93.1557,219.2744 0,2.8663 -2.8663,5.7327 -4.2995,7.1658 -10.0322,10.0322 -100.3215,85.9899 -58.7598,101.7548 2.8664,1.4331 5.7327,-5.7327 8.599,-4.2995 12.8985,1.4331 27.2301,5.7326 38.6955,14.3317 28.6633,22.9305 -1.4332,71.6583 10.0321,97.4553 1.4332,4.2994 5.7327,8.5989 8.5991,12.8984 z"
+ class="europe"
+ id="by" /><path
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 6904.2379,1713.7363 v 0 m 14.3317,4.2995 c 1.4332,0 1.4332,0 1.4332,1.4332 m 232.1728,243.6381 h -1.4332 m 0,1.4332 v 0 m 378.3558,-543.1699 c 8.599,11.4654 28.6632,38.6956 11.4653,44.4282 -17.198,5.7327 -61.6261,-17.198 -47.2944,-4.2995 27.2301,22.9306 -27.2302,55.8935 -34.3961,73.0915 0,1.4332 17.1981,63.0593 -2.8663,55.8935 -54.4603,-21.4976 10.0322,-57.3267 -8.599,-88.8564 -28.6633,-50.1607 -73.0915,-31.5295 -110.3537,-71.6583 l -1.4332,-7.1657 c -1.4332,0 -2.8663,0 -4.2995,1.4332 0,-1.4332 -1.4332,-1.4332 -1.4332,-2.8665 v 2.8665 c -28.6632,5.7325 -22.9307,38.6954 -47.2944,45.8613 -21.4975,5.7326 -12.8985,-24.3639 -37.2624,2.8663 -2.8662,4.2995 0,11.4652 -1.4332,17.1979 -1.433,1.4333 -17.1979,31.5297 -17.1979,32.9629 -4.2995,11.4653 4.2995,48.7276 5.7327,58.7598 0,4.2995 -2.8663,7.1658 -2.8663,11.4653 0,8.599 1.4331,15.7647 2.8663,24.3639 4.2995,11.4652 14.3317,20.0642 15.7647,31.5296 7.1659,50.1607 -5.7325,15.7648 -22.9305,31.5295 -20.0644,20.0644 -1.4332,25.7971 -7.1659,50.1608 -1.4332,5.7328 -7.1658,8.599 -8.599,14.3317 0,1.4332 -18.6312,-15.7647 -21.4975,-17.1979 -4.2994,-2.8663 -57.3265,-21.4975 -61.626,-15.7649 -5.7327,5.7327 -1.4333,17.1981 -5.7327,22.9306 -17.198,30.0966 -40.1287,11.4654 -64.4926,15.7649 -7.1657,0 -17.1979,7.1658 -22.9306,2.8663 -7.1658,-5.7327 -4.2995,-17.1979 -8.599,-24.3637 -10.0321,-17.1981 -42.9949,-61.6263 -60.1929,-71.6583 -57.3266,-32.9629 -31.5296,53.0271 -31.5296,53.0271 -8.599,1.4331 -15.7649,-8.599 -24.3639,-8.599 -4.2995,0 -11.4653,4.2995 -10.0322,7.1658 1.4332,1.4332 2.8664,2.8663 4.2996,2.8663 h -2.8664 c -11.4653,2.8664 -27.2302,-4.2995 -32.9627,5.7327 -4.2997,7.1659 14.3315,11.4654 18.631,18.6312 4.2995,8.5989 7.1659,18.6311 7.1659,28.6633 0,17.198 -24.3638,30.0965 -20.0644,47.2944 1.4333,12.8985 51.5941,10.0322 4.2995,40.1287 -12.8984,8.5989 -111.7869,-40.1287 -131.8511,-14.3317 -8.599,11.4654 27.2301,93.1557 -1.4332,104.6211 l -45.8614,-20.0644 c -8.599,0 -35.8291,50.1609 -37.2622,61.6263 -2.8664,15.7647 -2.8664,35.8291 -14.3317,50.1607 -8.599,10.0321 -24.3639,-5.7326 -20.0644,20.0643 5.7327,31.5297 42.9951,34.396 27.2302,73.0915 -8.599,24.3638 -55.8934,80.2573 -64.4924,106.0543 -2.8664,12.8984 15.7648,24.3638 11.4653,37.2623 l -31.5297,27.2302 c -11.4652,5.7325 -34.3959,-7.166 -40.1286,5.7325 l 14.3317,55.8936 c 0,0 -7.1659,42.9949 -7.1659,44.4281 l 4.2995,53.0271 c -1.4331,5.7327 -8.599,7.1658 -10.0321,12.8985 -12.8985,38.6955 -32.9628,78.8242 -45.8613,118.9528 -8.599,25.7969 51.5939,11.4653 41.5618,81.6903 -10.0322,67.3588 -48.7276,0 -107.4874,37.2624 -18.6312,11.4652 -50.1608,60.193 -54.4603,83.1235 -1.4332,7.1659 7.1658,12.8986 5.7327,18.6312 -1.4332,15.7649 -21.4976,25.7971 -21.4976,41.5619 0,173.413 21.4976,-127.5517 21.4976,45.8613 0,8.599 -10.0322,14.3317 -10.0322,22.9307 -1.4332,10.032 4.2995,18.6311 5.7327,28.6632 0,8.599 -7.1659,18.6312 -5.7327,27.2301 1.4331,21.4975 24.3637,40.1287 27.2301,61.6261 2.8663,31.5297 -20.0643,71.6583 -12.8984,101.7549 8.599,32.9627 63.0593,30.0964 68.7918,65.9256 l -15.7647,57.3266 c -11.4654,10.0322 -40.1287,2.8664 -38.6956,17.1979 7.1659,61.6263 44.4281,45.8614 28.6634,127.5519 l 1.4332,41.5618 c -12.8985,32.9627 -58.7598,35.8291 -61.6262,45.8612 -1.4331,2.8664 5.7327,4.2995 5.7327,8.599 2.8664,5.7327 5.7327,12.8986 2.8664,18.6312 -4.2996,8.5989 -18.6312,10.0322 -21.4976,20.0643 -8.599,25.797 31.5296,83.1236 0,127.5517 -12.8985,18.6312 -18.6312,4.2995 -22.9307,-10.032 1.4332,0 1.4332,0 2.8664,-1.4332 5.7327,-4.2995 -2.8664,-15.7649 -7.1659,-21.4975 -30.0964,-47.2946 -14.3315,22.9307 -61.6261,-21.4976 -4.2994,-4.2995 4.2995,-12.8985 4.2995,-18.631 0,-8.599 -8.5989,0 -8.5989,0 -8.599,-12.8985 -5.7328,-34.3961 -2.8663,-31.5297 0,-2.8664 -1.4332,-4.2995 -1.4332,-5.7327 -2.8663,-14.3317 -7.1658,-27.2301 -10.0322,-41.5618 -1.4331,-8.599 11.4654,-27.2302 1.4332,-27.2302 -35.8292,0 25.7969,44.4281 -10.0322,68.792 -1.4331,0 -2.8663,-1.4332 -2.8663,-2.8663 -1.4332,-8.599 2.8663,-18.6311 0,-25.7971 -4.2995,-7.1657 -18.6312,-20.0642 -20.0644,-12.8984 -1.4331,11.4654 12.8985,18.6311 17.1981,28.6633 2.8663,5.7327 -5.7327,18.6312 -2.8664,25.797 11.4654,30.0964 20.0644,14.3317 11.4654,34.3959 0,1.4332 0,5.7327 -2.8664,5.7327 -2.8663,0 -5.7326,-8.599 -8.599,-5.7327 -10.0322,18.6312 2.8664,42.9951 -8.599,42.9951 -5.7327,0 1.4332,-18.6312 -2.8663,-15.7649 -24.3638,15.7649 21.4975,31.5296 -38.6955,31.5296 -7.1658,0 0,-14.3317 -5.7326,-18.6312 -7.1659,-4.2994 -20.0644,-20.0642 -24.3639,-12.8984 -4.2995,10.0322 14.3317,15.7649 18.6312,25.7971 1.4332,4.2995 -37.2623,7.1657 -41.5618,21.4974 -1.4331,5.7326 14.3317,11.4653 10.0322,15.7648 -7.1658,8.599 -25.797,1.4332 -32.9629,8.599 -4.2995,5.7327 14.3317,7.1659 12.8985,12.8984 -8.599,58.7598 -20.0643,-17.1979 -27.23,12.8986 -1.4333,2.8663 4.2994,5.7326 2.8662,8.599 -7.1659,10.0321 -44.4281,54.4602 -45.8613,55.8934 -2.8663,2.8664 -7.1658,-5.7327 -10.0322,-2.8663 -8.599,7.1658 -7.1658,25.797 -18.631,27.2302 -8.5992,2.8663 -10.0322,-21.4975 -20.0644,-18.6312 -10.0322,2.8663 -5.7327,21.4975 -12.8985,27.2302 -5.7327,4.2995 -15.7649,-2.8664 -21.4974,0 -4.2995,1.4331 -5.7328,7.1658 -10.0322,8.599 -14.3317,8.5989 -10.0322,-4.2995 -30.0965,-4.2995 -10.0322,0 -21.4976,15.7647 -27.2301,8.599 -5.7327,-7.1658 18.6311,-12.8985 15.7647,-21.4975 -4.2995,-7.1659 -12.8985,11.4653 -21.4974,11.4653 -11.4653,1.4332 -22.9307,-2.8663 -34.396,-7.1658 -24.3639,-11.4654 22.9307,-27.2302 27.2302,-37.2624 1.4331,-5.7327 -8.599,-11.4652 -14.3317,-10.0322 -5.7327,1.4333 -4.2995,14.3317 -11.4654,15.7649 -8.599,1.4331 -17.198,-4.2995 -25.797,-8.5989 -17.1979,-7.166 -27.2301,-32.9629 -35.8291,-38.6956 -4.2995,-4.2995 -12.8985,-1.4331 -18.6312,-4.2995 -10.032,-5.7326 -27.2301,-42.9949 -25.7969,-53.0271 0,-8.599 10.0322,-14.3317 12.8985,-24.3637 1.4332,-8.599 -10.0322,-30.0966 0,-27.2302 11.4654,2.8663 2.8664,27.2302 14.3316,31.5296 5.7327,4.2995 7.1658,-14.3316 14.3317,-17.1981 2.8663,-2.8662 5.7326,0 8.599,2.8665 -2.8664,-7.166 -4.2995,-14.3317 -7.1659,-21.4975 -1.4331,-10.0322 20.0644,-7.1659 25.7971,-14.3317 2.8663,-2.8664 -12.8985,0 -11.4654,-4.2995 2.8664,-7.1659 10.0322,-11.4654 17.1979,-14.3317 8.599,-5.7327 25.7971,-1.4332 30.0966,-11.4652 5.7326,-12.8986 -34.396,5.7325 -42.995,-2.8664 -5.7326,7.1659 -8.599,7.1659 -8.599,-5.7327 1.4332,-11.4653 25.7969,-14.3316 22.9307,-24.3638 -4.2995,-11.4654 -21.4975,-14.3317 -32.9629,-11.4654 -18.631,5.7327 -11.4653,50.1608 -30.0964,48.7278 -10.0322,0 -2.8663,-18.6312 -7.1658,-25.7971 -2.8664,-4.2995 -8.599,-7.1658 -14.3317,-10.0321 0,0 0,1.4331 1.4332,1.4331 -1.4332,0 -1.4332,0 -2.8664,1.4332 0,-1.4332 1.4332,-2.8663 1.4332,-2.8663 -4.2995,-2.8664 -8.599,-5.7327 -8.599,-10.0322 0,-7.1659 17.198,5.7327 22.9307,1.4332 8.599,-7.1659 5.7325,-25.797 15.7647,-30.0965 7.1659,-4.2995 11.4654,11.4654 18.6312,12.8984 2.8663,1.4333 -1.4332,-7.1657 1.4332,-8.5989 2.8663,-2.8663 7.1658,1.4332 10.0322,0 5.7326,-1.4331 -14.3317,-1.4331 -12.8986,-7.1658 0,-1.4332 58.7598,-27.2302 54.4603,-27.2302 -45.8613,-2.8663 -17.1979,35.8292 -61.6261,-4.2995 -1.4332,-1.4332 7.1658,0 8.599,-2.8662 2.8663,-2.8665 0,-10.0322 4.2995,-11.4655 5.7327,-4.2994 12.8985,1.4333 18.6312,-2.8662 2.8663,-1.4332 -1.4332,-5.7327 -1.4332,-8.599 2.8664,-5.7327 5.7327,-10.0322 8.599,-12.8985 7.1659,-4.2995 22.9306,0 24.3638,-7.1659 1.4332,-8.599 -18.6311,-7.1658 -18.6311,-14.3317 -1.4333,-2.8663 1.4332,-7.1658 4.2994,-11.4652 -2.8662,0 -7.1657,-7.1658 -10.0321,-4.2995 -7.1658,4.2995 -11.4653,11.4652 -15.7648,17.1979 -5.7327,11.4653 -2.8663,25.797 -11.4654,34.396 -4.2995,4.2994 -2.8663,-11.4653 -4.2995,-15.7648 -8.599,-15.7649 -15.7648,-11.4654 -10.0321,-25.7969 5.7326,-11.4655 28.6633,-37.2624 15.7648,-34.3961 -14.3317,4.2995 -24.3637,67.3588 -41.5618,35.8291 -4.2995,-10.032 -8.599,-21.4974 -11.4653,-32.9627 -1.4332,-11.4654 20.0642,0 45.8613,-8.599 5.7326,-1.4332 8.599,-7.1659 10.0321,-14.3317 -10.0321,10.0322 -28.6632,-11.4654 -28.6632,-17.1979 0,-12.8985 20.0642,-15.7649 31.5296,-21.4976 -2.8664,-15.7648 -15.7649,-1.4331 -27.2302,11.4654 0,0 -1.4332,0 -1.4332,-1.4332 -1.433,-1.4331 -2.8662,-4.2995 -5.7325,-7.1658 4.2995,4.2995 5.7325,10.0322 7.1657,8.599 -7.1657,7.1657 -12.8984,12.8984 -17.1979,14.3317 -7.1659,0 -4.2995,-14.3317 -7.1659,-20.0644 -1.4331,-2.8663 -27.2302,-28.6633 -20.0643,-30.0965 10.0322,0 18.6312,8.599 27.2302,15.7648 0,-1.4331 -1.4332,-4.2995 0,-7.1658 2.8663,-10.0322 20.0642,-10.0322 28.6632,-17.198 1.4332,-1.4332 -1.4331,-7.1659 -4.2995,-5.7327 -11.4652,1.4333 -30.0964,15.7649 -40.1286,10.0322 -12.8985,-7.1659 -2.8663,-40.1286 4.2995,-44.4281 10.0322,-7.1659 21.4976,14.3317 34.396,14.3317 1.4331,1.4331 30.0965,-32.9629 61.6261,-17.1981 10.0322,4.2995 11.4653,18.6312 21.4975,22.9307 10.0322,4.2995 -8.599,-21.4975 24.3639,-30.0965 41.5617,-11.4652 -1.4332,61.6261 42.9949,58.7598 27.2301,-2.8662 -10.0322,-25.7969 -8.599,-44.4281 1.4332,-20.0644 74.5246,27.2302 64.4925,-22.9307 -1.4332,-10.0322 -20.0644,8.599 -28.6634,5.7327 -5.7327,-1.4332 -7.1657,-10.0322 -7.1657,-15.7649 0,-15.7647 40.1286,-31.5296 25.7969,-37.2623 -35.8291,-14.3316 -24.3639,51.594 -27.2301,58.7598 0,1.4332 -17.198,5.7327 -31.5297,7.1659 -2.8663,1.4331 -1.4332,-4.2995 -2.8663,-5.7327 -10.0322,-5.7327 -21.4976,-8.599 -31.5296,-14.3317 l -1.4332,-1.433 c -4.2995,10.032 -8.599,17.1979 -11.4654,20.0642 -1.4331,1.4332 -45.8612,-18.6312 -57.3266,-18.6312 -4.2995,-1.433 -1.4331,7.1659 -4.2995,8.599 -15.7648,7.1659 -34.396,10.0322 -50.1609,5.7327 -2.8662,0 -24.3637,-24.3639 -21.4974,-28.6634 7.1659,-10.032 20.0644,-14.3315 30.0966,-17.1979 11.4652,-2.8663 32.9627,10.0322 32.9627,-1.4331 1.4332,-10.0322 -21.4975,-2.8664 -32.9627,-1.4332 -7.1659,0 -12.8986,10.0322 -20.0644,7.1658 -30.0965,-11.4653 5.7327,-27.2302 14.3317,-27.2302 14.3317,1.4332 38.6954,18.6312 55.8934,7.1659 17.1979,-12.8985 -50.1607,4.2995 -58.7599,-15.7649 -2.8662,-8.599 32.9629,-7.1657 25.7971,-11.4652 -8.5989,-4.2995 -21.4976,1.4332 -28.6633,-5.7327 -22.9307,-18.6312 11.4654,-55.8934 32.9628,-57.3266 15.7648,0 35.8292,2.8662 44.4282,15.7647 4.2994,5.7327 -8.599,15.7649 -4.2995,21.4976 4.2995,5.7326 1.433,-17.1981 7.1657,-18.6312 7.166,-1.4332 10.0322,12.8985 17.198,14.3317 5.7327,0 -11.4653,-10.0322 -8.599,-12.8986 7.1659,-8.599 41.5619,21.4976 67.3588,-2.8663 4.2995,-4.2995 -7.1658,-7.1657 -12.8985,-7.1657 -50.1608,-2.8665 24.3639,11.4652 -17.1979,14.3316 -7.1658,1.4331 -51.5941,-20.0643 -71.6583,-22.9306 -7.1658,0 -12.8985,-4.2995 -20.0644,-4.2995 -8.599,0 -24.3637,12.8985 -25.7969,4.2995 -1.4333,-10.0322 21.4974,-10.0322 24.3638,-20.0644 2.8663,-12.8985 -25.7971,-18.6312 -25.7971,-32.9629 0,-5.7325 14.3317,0 17.1981,4.2997 4.2995,7.1657 4.2995,24.3637 12.8985,22.9305 8.599,-1.4331 -10.0322,-24.3638 -1.4332,-25.797 11.4654,-1.4332 17.198,21.4975 28.6634,21.4975 8.599,0 5.7325,-27.2302 11.4652,-21.4975 7.166,5.7327 -2.8662,18.6312 -2.8662,28.6634 0,1.4331 -2.8665,5.7326 -1.4332,5.7326 8.5989,-2.8663 4.2994,-21.4975 12.8984,-21.4975 4.2995,0 1.4332,10.0322 5.7327,12.8985 8.599,4.2995 22.9307,12.8986 27.2302,4.2995 2.8663,-7.1658 -18.6312,-4.2995 -22.9307,-10.0321 -7.1657,-8.599 -10.0322,-18.6312 -10.0322,-28.6633 -1.433,-12.8985 20.0644,-22.9307 32.9629,-20.0643 5.7327,1.4331 2.8663,12.8985 5.7327,18.631 4.2995,8.599 11.4653,14.3317 14.3315,22.9307 0,2.8664 -7.1657,8.599 -4.2995,8.599 4.2995,0 5.7327,-5.7326 5.7327,-8.599 -5.7327,-28.6632 -37.2623,-47.2944 12.8985,-55.8934 17.198,-2.8664 20.0644,21.4975 20.0644,44.4281 1.4331,-2.8664 2.8663,-7.1659 5.7326,-8.5989 8.599,-7.166 32.9628,8.5989 30.0966,-1.4332 -2.8665,-11.4653 -22.9307,-1.4333 -32.9629,-8.599 -7.1658,-5.7327 -4.2995,-18.6312 -10.0322,-25.797 -7.1658,-10.0322 -45.8612,-22.9306 -51.5939,-27.2301 -1.4332,-1.4332 4.2995,-5.7327 8.599,-5.7327 5.7327,-1.4333 12.8985,-1.4333 18.6312,1.4332 2.8662,1.433 1.433,8.599 4.2994,8.599 4.2995,1.4332 21.4975,-28.6634 41.5618,-12.8985 5.7327,4.2995 -2.8663,18.6312 4.2996,21.4974 5.7325,2.8663 -2.8664,-15.7649 2.8663,-18.6311 10.0322,-5.7327 31.5296,25.7969 31.5296,27.2301 8.599,1.4332 25.797,-5.7327 21.4975,-12.8985 -4.2995,-8.5989 -21.4975,5.7327 -28.6634,0 -10.032,-8.5989 10.0322,-24.3638 25.7971,-30.0964 -11.4654,4.2995 -21.4976,7.1658 -31.5297,7.1658 -85.9899,1.4332 -10.0322,-8.599 -12.8984,-25.797 -1.4332,-11.4654 -20.0644,-10.0322 -27.2302,-20.0644 -10.0322,-11.4652 -5.7327,-21.4974 32.9627,-17.1979 8.599,1.4332 8.599,17.1979 17.198,20.0644 5.7327,1.433 10.0322,-8.599 15.7649,-8.599 8.599,-1.4332 15.7647,-1.4332 24.3639,0 -1.4332,-1.4332 -2.8665,-4.2995 -4.2997,-5.7327 -1.433,-8.599 10.0322,-17.198 18.6312,-18.6312 4.2995,-1.4332 0,8.599 2.8664,12.8985 4.2995,5.7327 14.3316,5.7327 17.198,12.8984 2.8663,5.7328 -5.7327,14.3317 0,18.6312 7.1658,7.1658 25.7969,20.0644 31.5297,10.0322 4.2994,-10.0322 -22.9307,-14.3317 -24.3639,-25.7969 0,-7.1659 15.7649,-1.4332 21.4974,-5.7327 2.8665,-2.8663 -10.032,2.8662 -12.8984,0 -1.4331,-1.4332 8.5989,-7.1659 5.7327,-5.7327 -7.1658,1.4332 -12.8985,11.4654 -18.6312,8.5989 -10.0322,-5.7325 -12.8985,-18.6311 -15.7648,-28.6632 -2.8664,-4.2995 7.1658,4.2995 11.4653,5.7326 4.2995,2.8664 -14.3317,-14.3316 0,-11.4653 1.4332,0 58.7598,30.0965 53.0271,-8.599 -5.7326,-47.2945 -45.8612,41.5619 -37.2622,-20.0644 1.4331,-12.8984 35.8291,-35.8291 45.8612,-30.0964 8.599,4.2995 -1.4331,22.9307 5.7327,31.5297 2.8663,4.2995 7.1659,-7.1658 11.4654,-10.0322 7.1658,-2.8663 27.23,-2.8663 21.4974,-8.599 -4.2994,-5.7327 -24.3638,14.3317 -22.9306,5.7327 0,-10.0322 15.7647,-12.8985 22.9306,-21.4975 8.599,-8.599 8.599,-25.7971 20.0643,-27.2301 8.599,-2.8665 4.2995,14.3317 8.599,21.4974 2.8664,5.7327 12.8984,8.599 12.8984,15.7648 0,8.5991 -12.8984,12.8986 -11.4652,21.4976 1.4332,5.7325 8.599,-7.1659 14.3317,-5.7327 8.599,1.4332 18.6311,22.9306 22.9306,15.7647 4.2995,-11.4652 -17.1979,-20.0642 -15.7649,-31.5296 0,-11.4653 58.7599,2.8664 60.1931,2.8664 10.0322,-7.1659 11.4652,-22.9307 10.0322,-34.3961 -1.4333,-5.7325 -18.6312,5.7327 -17.1982,0 4.2995,-18.631 63.0593,-21.4974 60.1931,-35.8291 -1.4332,-11.4653 -35.8292,-11.4653 -28.6634,-21.4975 5.7327,-10.032 31.5296,-7.1657 32.9629,-18.6311 4.2995,-57.3266 -47.2944,12.8986 -58.7598,22.9306 -5.7328,4.2995 -22.9307,8.599 -18.6312,15.7649 5.7327,10.0322 22.9306,4.2995 32.9628,8.599 1.4332,0 -2.8662,1.4332 -4.2995,2.8663 -7.1659,4.2995 -15.7649,7.1659 -22.9306,12.8985 -7.1658,5.7327 -42.9949,37.2623 -54.4603,34.396 -7.1658,-1.4332 -4.2995,-12.8984 -7.1658,-18.6311 -2.8664,-5.7328 -12.8985,-10.0322 -10.0322,-15.7649 4.2995,-10.0321 18.6312,-11.4653 27.2302,-18.6311 1.4332,-1.4332 -5.7328,4.2995 -8.599,2.8663 -2.8665,0 4.2995,-7.1659 2.8662,-5.7327 -10.0321,4.2995 -25.7969,27.2302 -40.1286,21.4975 -21.4974,-8.599 10.0322,-27.2302 25.797,-37.2623 8.5989,-4.2994 20.0644,-4.2994 25.7971,-12.8984 4.2994,-4.2995 -12.8985,4.2995 -18.6312,2.8662 -2.8664,0 -1.4332,-2.8662 -1.4332,-5.7327 1.4332,-10.0321 0,-20.0642 5.7327,-28.6632 2.8662,-4.2995 11.4652,2.8663 15.7647,0 2.8664,0 -5.7325,0 -5.7325,-2.8664 0,-4.2995 1.433,-8.599 2.8662,-12.8985 4.2995,-4.2995 14.3317,5.7327 17.198,0 2.8663,-4.2995 -1.4332,-12.8985 2.8663,-18.6312 4.2996,-5.7325 17.1981,-4.2994 20.0644,-12.8984 1.4332,-5.7327 -18.6312,-12.8985 -12.8985,-14.3317 10.0322,-2.8663 18.6312,14.3317 28.6632,11.4654 7.1659,-1.4332 -11.4652,-8.599 -15.7647,-15.7649 -7.1658,-10.0321 14.3317,-21.4975 25.7969,-28.6632 11.4654,-7.1659 15.7649,25.7969 30.0966,31.5296 8.599,2.8663 20.0643,0 25.797,-7.1659 2.8662,-4.2995 -20.0644,0 -17.198,-5.7326 4.2995,-8.5991 22.9305,-7.1659 27.2301,-15.7649 7.1658,-20.0642 -44.4282,32.9629 -31.5296,-21.4974 1.4331,-8.599 4.2995,-14.3317 5.7326,-17.198 -5.7326,4.2995 -11.4653,8.599 -18.6312,11.4653 -21.4975,10.0322 40.1286,-27.2302 35.8291,-32.9627 -1.433,-2.8665 -4.2995,-2.8665 -8.599,-1.4332 v -1.4333 c 0,-2.8662 -10.032,0 -8.5989,-2.8662 4.2994,-10.0322 48.7276,-7.1659 55.8935,-10.0322 2.8663,-2.8663 -2.8664,-10.0322 0,-12.8985 21.4974,-20.0644 50.1608,-7.1658 57.3266,-48.7276 0,-7.1659 -11.4653,7.1658 -17.198,10.0322 -7.1659,1.433 -14.3317,0 -21.4974,0 -5.7327,1.433 -15.7649,10.032 -15.7649,4.2995 2.8664,-18.6312 54.4603,-18.6312 40.1286,-42.9951 -1.4331,-4.2995 -14.3317,-1.4331 -24.3637,-1.4331 1.433,2.8663 4.2995,5.7326 7.1657,11.4653 -7.1657,7.1658 -12.8984,15.7648 -20.0642,22.9307 -2.8664,1.4332 -8.5991,10.0322 -10.0322,5.7327 -1.4332,-7.1659 -1.4332,-47.2946 10.0322,-48.7278 0,-4.2995 0,-7.1658 2.8663,-12.8985 4.2995,-11.4652 22.9306,-5.7325 32.9628,-11.4652 2.8663,-1.4332 -7.1659,0 -8.5991,-1.4332 -4.2995,-5.7327 -8.599,-12.8985 -10.032,-18.6312 -1.4333,-8.599 11.4652,-41.5617 20.0642,-41.5617 11.4654,-1.4332 17.198,17.198 28.6634,20.0642 4.2995,1.4332 -4.2995,-10.0322 -5.7327,-15.7647 -2.8663,-7.1659 -1.4332,-20.0644 -8.599,-24.3639 -7.1658,-4.2995 -20.0644,7.1659 -27.2302,1.4332 -22.9306,-18.6312 24.3639,-11.4654 31.5297,-14.3317 12.8985,-5.7327 14.3317,-24.3639 34.3959,-20.0644 8.599,2.8665 12.8985,14.3317 21.4976,14.3317 7.1658,0 -11.4654,-8.599 -12.8986,-14.3317 v -1.433 c -1.4331,0 -2.8663,1.433 -4.2995,1.433 -2.8663,0 0,-8.5989 -2.8663,-10.032 -14.3317,-2.8664 -24.3639,22.9307 -40.1286,21.4974 -50.1608,-7.1657 27.2301,-17.1979 35.8291,-24.3638 2.8663,-1.4331 -5.7327,-1.4331 -10.0322,-1.4331 -10.0322,-1.4332 -18.6311,2.8663 -28.6632,1.4331 -12.8985,-2.8663 -8.599,-25.797 -5.7327,-37.2622 10.0322,-53.0272 31.5297,-30.0966 67.3588,-44.4282 20.0642,-8.599 -22.9307,-22.9306 -28.6634,-32.9628 -2.8663,-5.7327 12.8985,-1.4332 18.6312,-4.2995 5.7327,-2.8663 -24.3637,-24.3639 11.4654,-12.8985 2.8663,0 -4.2995,5.7327 -4.2995,8.599 1.4331,20.0642 8.599,-10.0322 8.599,-12.8985 0,-1.4332 2.8663,-8.599 4.2995,-5.7327 4.2995,4.2995 -1.4332,17.198 5.7326,18.6312 11.4654,1.4332 27.2301,-4.2995 30.0965,-14.3317 4.2995,-10.0322 -15.7649,-14.3317 -17.1981,-24.3637 0,-1.4332 34.3961,-21.4976 45.8614,-15.7649 7.1659,2.8662 -7.1658,25.7969 1.4332,24.3638 8.599,0 -1.4332,-20.0643 5.7327,-24.3638 1.433,-1.4332 1.433,-1.4332 2.8663,-2.8663 -1.4333,-1.4332 -2.8663,-2.8664 -4.2995,-4.2995 -4.2995,-2.8664 8.5989,-11.4654 4.2995,-12.8985 -4.2995,-1.4332 -7.1658,8.599 -12.8985,11.4653 -14.3317,5.7327 -31.5297,17.1979 -45.8614,8.599 -5.7327,-4.2995 11.4655,-12.8985 15.7649,-20.0643 8.599,-18.6312 11.4653,-61.6262 32.9628,-45.8613 7.1659,5.7325 -21.4975,14.3317 -14.3317,20.0642 5.7327,5.7327 14.3317,-10.032 24.3639,-11.4652 7.1657,0 14.3316,2.8662 20.0643,8.5989 8.599,8.599 24.3638,40.1287 20.0643,28.6634 -2.8663,-10.0322 -17.198,-18.6312 -14.3317,-30.0966 1.4332,-10.0322 18.6312,-11.4652 24.3639,-20.0642 2.8663,-4.2995 -8.599,2.8663 -12.8985,4.2995 -21.4976,7.1658 -28.6634,17.1979 -38.6956,-10.0322 -5.7325,-14.3317 7.166,-5.7327 8.599,-12.8985 1.4332,-1.4332 -4.2995,1.4332 -4.2995,0 -4.2995,-12.8985 35.8292,7.1658 41.5619,0 10.0322,-17.1979 -34.3959,-31.5296 -37.2624,-31.5296 -2.8663,0 2.8665,5.7327 1.4332,8.5989 -4.2995,8.599 -28.6633,38.6955 -37.2623,34.396 -10.0321,-4.2995 -11.4653,-20.0643 -7.1658,-30.0965 2.8663,-8.5989 17.198,-2.8662 22.9307,-8.5989 4.2995,-4.2995 -12.8985,5.7327 -15.7649,1.4332 -5.7326,-8.599 18.6312,-14.3317 25.7971,-8.599 2.8663,1.4331 -2.8664,8.599 -1.4332,7.1658 22.9306,-22.9307 60.193,-8.599 57.3266,-40.1287 0,-4.2995 -8.599,4.2995 -12.8985,1.4332 -2.8663,-1.4332 1.4332,-7.1659 -1.4332,-8.5989 -1.4331,-1.4333 -1.4331,5.7325 -2.8663,5.7325 -5.7327,2.8664 -10.0322,1.4332 -14.3317,1.4332 -8.599,1.4332 -20.0642,8.599 -22.9307,1.4332 -18.6311,-37.2623 37.2624,-11.4654 38.6956,-11.4654 8.599,-7.1657 1.4331,-22.9306 5.7326,-32.9627 1.4332,-4.2996 4.2995,10.0321 5.7327,15.7648 1.4332,1.4332 5.7327,-1.4332 5.7327,0 0,8.5989 -5.7327,17.1979 -2.8664,24.3638 0,2.8663 31.5296,48.7277 38.6955,40.1287 17.198,-20.0644 -54.4603,-83.1237 -32.9628,-93.1559 7.1659,-4.2995 21.4974,7.1659 32.9628,17.1981 -1.4332,-4.2995 -1.4332,-8.5991 -4.2995,-11.4654 -7.1659,-5.7327 -28.6633,-2.8663 -25.7969,-12.8985 1.433,-11.4652 20.0642,-10.0322 31.5296,-11.4652 61.6261,-10.0322 10.0321,20.0642 48.7276,38.6954 27.2302,12.8985 -31.5296,-44.4281 -5.7327,-44.4281 7.1658,0 11.4653,8.5989 17.198,8.5989 8.599,-1.4332 21.4975,-1.4332 20.0644,-8.5989 -8.599,-60.1931 -44.4281,0 -58.7598,-2.8665 -2.8664,-1.433 5.7325,-4.2995 4.2995,-7.1657 0,-2.8663 -4.2995,-7.1658 -7.1659,-5.7327 -4.2995,1.4332 -4.2995,10.0322 -10.0321,10.0322 -8.599,1.4332 -22.9307,2.8662 -27.2301,-5.7328 -2.8665,-5.7325 -1.4333,-12.8984 1.433,-18.631 -7.1658,1.4331 -15.7647,2.8663 -20.0642,7.1658 -7.1659,7.1658 0,25.7969 -8.599,31.5296 -5.7327,4.2995 0,-17.1979 -5.7327,-21.4974 -7.1658,-4.2995 -15.7648,-2.8664 -22.9307,-1.4332 -5.7327,1.4332 -2.8663,12.8984 -7.1657,17.1979 -4.2995,4.2995 -10.0322,8.599 -14.3317,12.8985 -5.7327,5.7327 -10.0322,11.4654 -14.3317,17.198 v -5.7326 c 4.2995,-10.0322 12.8985,-20.0644 14.3317,-30.0966 1.4332,-5.7325 -5.7327,-12.8984 -2.8663,-18.631 7.1658,-7.1659 21.4974,-4.2995 28.6632,-11.4654 30.0965,-28.6632 -47.2944,-20.0643 -5.7327,-64.4924 30.0966,-34.3961 24.3639,30.0965 17.1981,61.6261 2.8663,-5.7327 7.1658,-10.0322 11.4653,-11.4654 2.8663,-1.4331 5.7327,8.599 7.1658,5.7327 4.2996,-7.1658 -2.8742,-75.9578 21.4976,-42.9949 12.8984,17.198 17.1979,30.0964 17.1979,37.2622 5.7327,-2.8663 10.0322,-5.7326 14.3317,-5.7326 5.7326,0 8.599,11.4653 14.3315,11.4653 11.4655,1.4332 24.3639,-1.4332 34.3961,-7.1658 14.3317,-8.5989 -30.0966,2.8663 -32.9628,-15.7649 0,-5.7325 7.1659,-12.8984 14.3316,-12.8984 h 2.8663 c -1.433,-1.4332 -2.8663,-1.4332 -2.8663,-4.2995 0,-8.599 17.198,-5.7327 24.3638,-11.4653 1.4332,-1.4332 -5.7326,-1.4332 -7.1658,-2.8664 -10.0322,-7.1658 -14.3317,-22.9307 -11.4653,-35.8292 1.4331,-11.4652 30.0965,-1.433 32.9628,-12.8984 2.8664,-8.599 -4.2995,-17.198 -7.1658,-25.797 0,10.0322 -1.4332,15.7648 -2.8663,17.198 -10.0322,0 -20.0644,-8.599 -28.6634,-2.8663 -14.3316,5.7326 -17.1979,24.3637 -25.7969,37.2622 -7.1659,-4.2995 -20.0644,-4.2995 -20.0644,-11.4652 2.8664,-11.4653 21.4975,-12.8985 24.3639,-24.3639 2.8663,-5.7326 -15.7649,7.1659 -17.198,1.4332 -2.8664,-8.599 12.8985,-15.7648 11.4653,-25.797 0,-5.7327 -20.0644,1.4333 -15.7648,-1.4332 20.0643,-10.0322 53.0271,-1.4332 38.6955,-20.0642 -5.7328,-5.7327 -27.2302,-2.8664 -21.4975,-7.1659 7.1658,-4.2995 18.6312,8.599 27.2302,4.2995 8.5989,-5.7326 4.2994,-24.3638 12.8984,-27.2302 14.3317,-4.2995 17.198,22.9307 18.6312,45.8613 0,-8.5989 2.8663,-15.7647 5.7326,-22.9306 7.1659,-11.4653 10.0322,28.6633 20.0644,34.396 10.0321,5.7326 22.9306,0 32.9627,-4.2994 1.4332,0 -42.9949,-15.7649 -40.1287,-25.7971 2.8665,-10.0321 12.8987,-22.9307 22.9307,-21.4975 10.0322,0 8.599,18.6312 15.7649,25.797 7.1658,7.1659 17.198,5.7327 25.797,12.8984 4.2994,4.2995 8.5989,22.9307 11.4652,17.1981 11.4654,-34.396 -73.0913,-25.7971 -41.5617,-93.1558 5.7326,-11.4653 30.0965,-25.797 41.5617,-17.198 10.0322,5.7327 -2.8663,73.0915 -2.8663,75.9578 2.8663,2.8664 7.1658,-4.2995 8.599,-8.599 1.4332,-8.599 -5.7327,-20.0643 0,-27.2302 4.2995,-7.1657 22.9307,4.2995 24.3639,-4.2995 0,-8.599 -20.0644,-7.1657 -22.9307,-15.7647 -2.8664,-7.1659 11.4653,-68.792 32.9627,-42.9951 5.7328,8.599 0,88.8564 0,91.7227 -2.8662,10.0322 -21.4974,27.2302 -11.4652,30.0964 25.7969,8.599 12.8985,-41.5618 21.4974,-47.2944 8.599,-5.7327 21.4975,0 30.0966,-4.2995 4.2995,-2.8664 -7.1659,-5.7327 -10.0322,-8.5989 -10.0322,-8.599 -31.5296,-20.0644 -22.9306,-40.1287 37.2623,-83.1237 0,11.4653 42.9949,-17.1981 11.4654,-7.1658 0,-28.6632 8.599,-38.6954 2.8664,-2.8663 7.1659,1.4332 10.0322,4.2995 2.8662,2.8663 1.4332,8.599 4.2994,11.4654 7.166,5.7325 15.7649,7.1658 22.9307,12.8985 5.7327,4.2995 10.0322,12.8984 17.198,15.7647 7.1659,1.4332 -12.8985,-10.0322 -15.7648,-17.1979 0,-1.4333 5.7326,-1.4333 5.7326,-4.2995 2.8664,-20.0644 -1.4331,-50.1609 -4.2995,-48.7277 -7.1658,0 -48.7276,35.8292 -60.1929,-5.7327 -5.7327,-22.9306 35.8292,-32.9628 47.2944,-30.0964 10.0322,1.4331 15.7649,14.3317 25.7971,17.198 2.8663,0 -1.4332,-8.599 1.4331,-10.0322 2.8664,-2.8663 8.599,0 11.4654,1.4332 8.599,0 18.631,-1.4332 25.7969,1.4332 18.6312,5.7326 -5.7327,47.2944 32.9629,44.4281 7.1658,-1.4332 11.4653,-11.4654 10.032,-18.6312 0,-4.2994 -8.5989,1.4331 -12.8984,0 -4.2995,-1.4332 -11.4653,-2.8664 -11.4653,-7.1659 0,-5.7325 17.198,-2.8663 11.4653,-12.8984 -5.7327,-8.599 -7.1658,-17.198 -1.4332,-44.4282 v -2.8663 c -2.8663,5.7328 -7.1658,11.4653 -11.4653,18.6312 -7.1658,-7.1659 -20.0642,-11.4654 -22.9307,-20.0644 -7.1657,-25.7969 78.8242,-87.423 45.8614,-18.6311 12.8984,-11.4653 31.5296,1.4332 35.8291,-2.8663 7.1658,-4.2995 -15.7649,-4.2995 -18.6312,-11.4653 -10.0322,-24.3639 32.9629,-20.0644 35.8292,-24.3639 5.7327,-12.8984 -38.6955,-28.6633 -38.6955,-32.9628 1.4331,-8.599 21.4975,11.4654 24.3638,4.2995 5.7327,-10.0321 -12.8985,-21.4975 -10.0321,-32.9628 4.2995,-11.4654 83.1236,-4.2994 84.5568,0 2.8663,4.2995 -35.8291,74.5246 -34.3961,78.8241 0,1.4332 1.4332,1.4332 2.8664,1.4332 -2.8664,0 -4.2994,0 -4.2994,1.4331 2.8662,4.2996 11.4652,-2.8663 15.7647,0 18.6312,12.8986 -24.3637,18.6312 0,25.7971 8.599,2.8663 -5.7327,15.7647 -7.1658,24.3637 0,2.8664 -2.8664,44.4281 21.4975,20.0644 4.2995,-4.2995 0,-12.8985 1.4332,-18.6312 1.4331,-8.599 5.7326,-14.3317 8.599,-21.4974 2.8663,-8.599 -12.8985,1.433 -8.599,-11.4654 8.599,-24.3638 31.5297,-118.9527 47.2944,-127.5517 0,0 10.0322,37.2622 10.0322,40.1286 -2.8664,8.599 -17.198,12.8985 -15.7649,22.9307 1.4332,5.7326 14.3317,-10.0322 18.6312,-4.2995 5.7327,7.1658 -5.7327,25.7969 2.8664,30.0964 10.0321,7.1658 24.3637,0 32.9627,-7.1657 5.7327,-5.7327 -12.8985,-10.0322 -12.8985,-17.1981 0,-10.0321 -4.2994,-22.9306 1.4333,-31.5297 4.2995,-10.032 18.6311,-11.4653 25.7969,-20.0642 2.8663,-2.8663 -7.1658,0 -10.0322,-1.4332 -10.0322,-4.2995 -27.2301,-7.1658 -27.2301,-18.6312 -1.4331,-8.599 21.4974,1.4332 25.797,-5.7326 5.7326,-10.0322 -7.1659,-21.4976 -4.2996,-31.5296 1.4332,-7.1659 11.4654,14.3317 18.6312,10.032 11.4654,-4.2995 20.0644,-14.3315 42.995,1.4332 17.198,11.4654 -30.0965,73.0915 -34.396,81.6905 -1.4331,2.8663 8.599,-4.2995 10.0322,-7.1658 8.5989,-7.1659 12.8984,-22.9306 22.9306,-25.7971 7.1658,-1.433 2.8663,12.8985 1.4332,20.0644 -4.2994,10.0322 -21.4974,20.0643 -15.7649,30.0965 5.7327,8.599 20.0644,-17.198 28.6634,-11.4653 1.4332,1.4331 2.8663,2.8663 2.8663,4.2995 2.8664,-1.4332 8.599,2.8663 11.4654,1.4331 8.599,-8.599 -12.8985,-15.7648 -12.8985,-15.7648 -1.4332,-5.7327 -2.8664,-54.4603 2.8663,-63.0593 25.797,-32.9628 42.9949,30.0965 44.4281,30.0965 93.1558,4.2994 -47.2944,-55.8934 44.4282,-27.2302 47.2944,14.3317 12.8984,15.7649 5.7327,34.3961 -1.4332,2.8662 7.1657,1.433 10.0322,0 8.5989,-2.8665 15.7647,-10.0322 24.3637,-11.4654 2.8663,0 0,5.7327 1.4332,7.1659 4.2995,2.8663 10.0322,2.8663 14.3317,4.2995 1.4331,1.433 2.8663,4.2995 5.7325,5.7325 7.166,5.7327 18.6312,10.0322 24.3639,18.6312 1.4332,2.8664 -5.7327,2.8664 -8.599,5.7327 -7.1659,4.2995 -17.1979,5.7327 -21.4974,12.8985 -8.5991,11.4652 -1.4332,31.5296 -12.8986,37.2623 -31.5297,15.7648 -70.2251,-5.7327 -96.022,22.9307 -4.2995,2.8663 8.5989,-4.2995 14.3316,-4.2995 7.1658,0 12.8985,1.4331 20.0643,2.8663 1.4332,1.4332 2.8664,2.8663 4.2995,2.8663 11.4654,1.4332 27.2301,-7.1658 34.396,2.8664 5.7326,7.1658 -17.1981,17.198 -12.8986,25.7969 4.2995,7.1658 10.0322,-20.0643 18.6312,-18.6311 10.0322,2.8662 7.1659,25.7969 2.8664,40.1286 1.4331,-2.8663 2.8663,-4.2995 4.2995,-5.7327 10.0321,-4.2995 24.3638,2.8664 35.8292,-1.4331 2.8662,-1.4332 -8.599,-5.7327 -8.599,-10.0322 -1.4332,-10.0322 0,-18.6311 2.8663,-27.2301 1.4332,-2.8663 -1.4333,8.599 2.8662,8.599 11.4654,2.8662 22.9307,0 34.3961,-1.4333 z m -614.8281,295.2322 h 1.4332 z m 260.8362,-438.5487 c 1.433,11.4654 -18.6312,14.3317 -25.7971,22.9306 -57.3266,-55.8933 20.0644,-55.8933 25.7971,-22.9306 z m -217.8413,111.7869 c 5.7327,0 8.599,10.0322 12.8985,7.1659 5.7327,-4.2995 -10.0321,-20.0644 -4.2995,-18.6312 2.8664,1.4332 2.8664,8.599 7.1659,8.599 2.8663,-1.4332 -2.8664,-8.599 0,-10.0322 12.8985,-5.7325 7.1658,30.0966 20.0642,11.4654 2.8665,-2.8664 -7.1657,-8.599 -4.2994,-11.4654 8.5989,-11.4652 22.9306,-15.7647 35.8291,-24.3637 0,1.4331 -1.4331,1.4331 -1.4331,1.4331 0,1.4332 5.7326,1.4332 5.7326,2.8664 -1.4331,5.7327 -7.1658,11.4652 -10.0321,17.1979 -11.4654,31.5297 -27.2301,44.4282 -61.6262,50.1609 2.8664,-8.599 12.8985,-18.6312 8.599,-27.2302 -1.4331,-1.4332 -4.2995,-2.8664 -7.1658,-2.8664 0,-1.4331 -2.8663,-4.2995 -1.4332,-4.2995 z m -10.0321,5.7327 h -5.7327 c -2.8662,-1.4332 0,0 5.7327,0 z m -85.9899,101.7547 c 2.8663,-5.7325 11.4652,-8.599 18.6312,-11.4652 1.433,-1.4333 5.7325,0 4.2994,1.4332 -4.2994,11.4652 -11.4654,21.4974 -17.1979,31.5296 -1.4332,-7.1659 -8.5991,-14.3317 -5.7327,-21.4976 z m -27.2302,35.8292 1.4332,2.8664 c 0,1.4331 -1.4332,2.8663 -1.4332,4.2995 0,-2.8664 -1.4332,-4.2995 0,-7.1659 z m -75.9578,27.2301 c 11.4653,-31.5296 126.1186,-24.3637 27.2302,21.4976 -7.1659,-8.5991 -30.0966,-11.4654 -27.2302,-21.4976 z m -199.2101,233.6061 c 2.8665,2.8664 -5.7325,5.7327 -4.2994,10.0321 2.8664,15.7648 40.1286,14.3317 -11.4653,35.8292 -5.7327,1.4332 -11.4654,-5.7327 -18.6312,-8.599 37.2624,-30.0964 15.7648,-34.3959 15.7648,-25.7969 1.4332,17.1979 -17.198,5.7325 -25.797,11.4652 -7.1658,2.8663 -12.8985,27.2302 -14.3317,18.6312 -4.2995,-24.3639 32.9629,-65.9256 58.7598,-41.5618 z m -114.6532,130.418 c 2.8663,-8.5989 -2.8662,-24.3637 5.7328,-25.7969 53.0271,-10.0322 5.7325,40.1286 -11.4655,44.4281 0,-1.4332 -2.8662,-1.4332 -2.8662,-2.8663 2.8662,-5.7327 7.1657,-10.0322 8.5989,-15.7649 z m -353.9919,818.3376 c 7.1658,1.4332 2.8663,11.4654 4.2995,18.6312 -1.4332,1.4332 -4.2995,2.8664 -5.7327,2.8664 -5.7326,1.4331 -12.8985,1.4331 -18.6312,2.8663 -60.1928,8.599 18.6312,-25.797 20.0644,-24.3639 z m -266.5689,268.0021 c 5.7327,-2.8664 12.8986,0 20.0644,1.4331 0,-1.4331 0,-2.8663 1.4332,-2.8663 0,-1.4332 1.4331,1.4332 1.4331,2.8663 -1.4331,1.4332 -2.8663,1.4332 -4.2995,2.8664 l 1.4332,-1.4332 c -5.7327,2.8663 -11.4652,10.0322 -17.198,10.0322 -4.2994,0 -5.7327,-10.0322 -2.8664,-12.8985 z m -93.1557,550.3356 2.8664,-2.8664 c 2.8663,14.3317 8.599,30.0966 1.4331,44.4281 -15.7648,28.6634 -7.1658,-24.3637 -4.2995,-41.5617 z m 22.9307,-106.0543 v -1.4331 -1.4332 c 2.8664,2.8663 7.1659,4.2995 7.1659,7.1658 8.5989,61.6262 -22.9307,17.1981 -10.0322,-2.8663 0,0 0,1.4332 -1.4332,2.8663 1.4332,-1.4331 4.2995,-2.8663 4.2995,-4.2995 z m 550.3356,-908.6271 c -5.7326,1.4332 -10.0321,2.8665 -14.3317,2.8665 -10.0321,-1.4333 2.8664,-1.4333 14.3317,-2.8665 z M 7145.0097,1391.274 c -2.8663,1.4332 -7.1658,1.4332 -10.0321,1.4332 4.2995,0 12.8985,-2.8664 10.0321,-1.4332 z m -242.2049,322.4623 h 1.4331 z m 4.2995,1.4332 h 2.8663 z m 4.2995,0 c 0,1.4331 0,1.4331 1.4331,1.4331 -1.4331,0 -1.4331,0 -1.4331,-1.4331 z"
+ class="europe"
+ id="no"
+ sodipodi:nodetypes="cccccccccsccccccccccccccscccccccccccccscccccsccccccccccccccccccccccssccccccccccccsccccccsccccscccccccscscscccccccccsccscccssccccscccccccccccccccccccccccccsccccccccccccccccccscccccccsccccccscccccccccscccccsscccccscccccccccccccccscccccccsccscscscscscccccscscccccccccscccccccccccccccccccccccscccccccccccccccsccccccccccccccscsccccsccccscsccsccccsccsccccccsccccccccccccccccccccscccsccsccccccccsccscccccccccsccccccsccssccccssccsscscccccccccsccccccccsccccccscscccsscccccccccccscccscscccccccccccccccccccscscsccccccccccccscccccsccccccccccccccsscccccccccccccccccccscccccccccsccccccccsccccccccccccccccccccscscccccccccccccccccccccccccccscccccccccccccscccccccccccccccccccccccccccccccccccccccscccccscccccscccscsccccccccccc" /><path
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 9710.3764,5187.7299 v -1.4331 c -11.4654,-12.8985 -4.2995,-17.198 -1.4332,-30.0966 2.8663,-15.7647 -17.198,4.2996 -17.198,-4.2995 1.4331,-10.032 -7.1659,-44.4281 -2.8664,-53.0271 1.4332,0 42.995,-38.6954 42.995,-38.6954 2.8663,-5.7327 -4.2994,-12.8985 -4.2994,-18.6312 -1.4333,-5.7327 -2.8665,-12.8985 1.433,-18.6312 21.4976,-25.7969 88.8564,-14.3317 108.9207,-44.4281 4.2994,-5.7327 -2.8663,-14.3317 -5.7327,-21.4974 -1.4331,-2.8663 -7.1658,-4.2995 -7.1658,-7.1658 0,-4.2995 8.599,-4.2995 8.599,-7.1659 0,-4.2995 -5.7327,-7.1658 -7.1658,-11.4653 -1.4332,-7.1659 0,-15.7649 1.4331,-24.3639 0,-2.8663 4.2995,-5.7327 4.2995,-8.599 5.7327,-17.1979 -20.0643,-1.4332 -20.0643,-1.4332 -4.2995,-2.8662 4.2995,-10.032 2.8663,-15.7647 -5.7326,-10.0322 -14.3317,-20.0644 -21.4975,-28.6634 -10.0322,-10.032 -25.7969,14.3317 -27.2301,-1.4331 -7.1658,-45.8613 -2.8663,-32.9628 22.9306,-44.4281 1.4333,-1.4332 12.8985,-25.7971 4.2995,-22.9307 -20.0642,4.2995 -30.0964,18.6312 -47.2944,4.2995 -18.6311,-15.7649 14.3316,-20.0644 18.6311,-27.2301 4.2996,-4.2995 -1.4331,-11.4654 0,-15.7649 4.2996,-18.6312 21.4976,-28.6632 4.2996,-47.2944 -5.7327,-7.1659 -15.7649,-8.599 -21.4976,-14.3317 -7.1658,-8.599 10.0322,-27.2302 -1.4331,-28.6634 -27.2301,-1.433 -10.0322,21.4976 -31.5296,25.7971 -73.0915,11.4653 18.6312,-10.0322 -40.1287,-20.0644 -18.6311,-2.8663 -20.0643,18.6312 -35.8291,8.599 -5.7327,-2.8663 -10.0322,-10.032 -14.3317,-14.3317 -12.8985,-8.599 -7.1659,24.3639 -22.9307,24.3639 -10.0321,0 -20.0643,-2.8663 -30.0964,-7.1658 -4.2995,-2.8664 -7.1659,-12.8984 -12.8985,-11.4654 -7.1659,0 -10.0322,14.3317 -18.6311,14.3317 -10.0322,0 -17.198,-10.0322 -28.6634,-11.4653 -37.2624,-5.7327 18.6312,50.1607 -20.0643,42.995 -10.0322,-1.4333 -12.8986,-14.3317 -21.4976,-18.6312 -5.7325,-2.8663 -14.3315,1.4332 -21.4974,-1.4332 -21.4975,-7.1658 -37.2622,-34.396 -55.8934,-48.7276 -5.7327,-4.2995 -58.7598,50.1608 -77.391,75.9577 -5.7327,8.599 -20.0644,-7.1657 -30.0964,-8.599 -5.7327,0 -5.7327,8.599 -10.0322,11.4655 -7.1658,4.2994 -12.8985,-12.8985 -21.4975,-15.7649 -34.3961,-8.599 -41.5618,41.5618 -65.9257,28.6633 -10.0321,-4.2995 -18.631,-10.0322 -25.797,-17.1979 -5.7327,-5.7327 -11.4652,-12.8985 -12.8984,-21.4976 0,-4.2995 8.599,-5.7326 7.1657,-10.0321 0,-5.7327 -37.2622,-38.6956 -38.6954,-42.995 -1.4332,-4.2995 7.1659,-11.4653 4.2995,-14.3316 -1.4332,-1.4332 -4.2995,-1.4332 -5.7327,-1.4332 -5.7325,1.4332 -10.032,5.7327 -15.7647,5.7327 -10.0322,1.4331 -11.4653,-15.7649 -17.198,-22.9307 -1.4332,-2.8664 -4.2995,-2.8664 -7.1659,-1.4332 -5.7326,2.8663 -35.8292,21.4975 -41.5617,21.4975 -2.8664,1.4332 -2.8664,-7.1658 -7.1659,-7.1658 -10.0321,0 -20.0643,1.4331 -28.6633,4.2995 -2.8664,1.4332 -11.4654,21.4975 -18.6311,7.1658 -1.4333,-2.8663 4.2994,-5.7326 4.2994,-8.599 1.4333,-4.2995 1.4333,-10.0322 -1.4332,-12.8985 -4.2995,-4.2995 -10.0322,-1.4332 -14.3316,-5.7327 -7.1658,-4.2995 1.4332,-18.6312 -4.2995,-24.3637 -5.7326,-7.1659 -25.797,-11.4654 -21.4975,-20.0644 5.7327,-7.1658 38.6956,-14.3317 30.0964,-27.2302 -11.4652,-17.1979 -38.6954,-15.7647 -47.2944,-22.9306 -5.7327,-4.2995 -10.0322,-10.0321 -11.4652,-15.7648 -2.8664,-5.7327 1.433,-12.8985 -1.4332,-15.7649 -5.7327,-5.7326 -14.3317,-5.7326 -20.0644,-10.032 -8.599,-5.7327 -12.8985,-17.198 -22.9307,-18.6312 -11.4653,-2.8663 -15.7647,22.9306 -28.6632,22.9306 -4.2995,0 -2.8663,-10.0321 -7.1659,-10.0321 -55.8934,-4.2995 -21.4975,27.2301 -54.4602,41.5618 0,0 -61.6262,4.2995 -63.0593,4.2995 -2.8664,0 7.1658,42.9949 -5.7327,55.8934 -8.599,7.1659 -18.6312,14.3317 -30.0965,15.7649 -4.2994,0 -2.8664,-8.599 -7.1659,-11.4654 -2.8662,-1.4331 -7.1657,5.7327 -10.032,4.2995 -15.7649,4.2995 -34.3961,2.8664 -47.2946,11.4654 -5.7327,2.8662 -2.8662,12.8984 -8.599,15.7647 -8.5989,4.2995 -20.0642,0 -30.0964,2.8664 -5.7327,1.4331 -15.7649,15.7648 -22.9307,55.8934 -1.4332,10.0322 -4.2994,37.2624 -4.2994,48.7276 0,15.7649 57.3265,54.4604 21.4974,61.6263 -37.2623,8.599 -20.0642,-27.2302 -53.0271,-30.0966 -65.9256,-4.2995 12.8985,11.4654 -34.3959,20.0644 -7.1659,1.4331 -14.3317,-8.599 -22.9307,-7.1659 -22.9307,5.7327 -10.0322,30.0966 -30.0966,35.8291 -11.4652,2.8664 -22.9305,-37.2622 -34.3959,-42.9949 -11.4653,-5.7327 -24.3637,14.3317 -32.9629,25.7969 -5.7325,7.166 5.7327,28.6634 -2.8663,27.2302 -30.0964,-7.1658 14.3317,1.4332 -22.9306,-24.3637 -20.0643,-14.3317 -12.8985,14.3315 -25.797,14.3315 -35.8291,0 -4.2995,-12.8985 -17.1979,-21.4974 -8.599,-4.2995 -8.599,17.1979 -14.3317,22.9306 -8.599,10.0322 -21.4975,-2.8663 -28.6634,-1.4332 -7.1658,0 0,25.7971 -7.1658,30.0966 -1.4332,2.8663 -5.7327,-1.4332 -8.5989,-4.2995 -18.6312,-10.0322 32.9628,-34.3961 -24.3639,-18.6312 -17.198,4.2995 8.599,27.2302 -27.2302,12.8985 -4.2995,-1.4332 4.2995,-10.0322 1.4332,-12.8985 -2.8663,-2.8664 -8.599,4.2995 -11.4652,2.8663 -8.599,-7.1658 2.8662,-21.4974 -12.8985,-17.198 -32.9629,8.599 -77.391,12.8985 -113.2201,8.599 -4.2995,-1.4332 -5.7327,-7.1657 -10.0322,-7.1657 -20.0643,-1.4333 -40.1287,11.4652 -61.6261,14.3315 -7.1659,0 -14.3317,0 -21.4975,0 -7.1659,0 -14.3317,-2.8663 -21.4976,-1.4331 -18.631,5.7326 -31.5296,20.0643 -48.7276,27.2302 -11.4653,4.2995 -25.7969,1.4331 -37.2622,7.1658 -5.7327,4.2995 -25.7971,71.6582 -40.1286,67.3588 -4.2995,-1.4333 -4.2995,-8.599 -7.166,-8.599 -8.5989,-1.4332 -18.6311,-1.4332 -25.7969,1.4332 -22.9307,7.1658 11.4653,20.0642 -5.7327,24.3637 l -1.4331,1.4332 c 0,0 0,-1.4332 0,-1.4332 4.2995,5.7327 10.0321,10.0322 12.8985,15.7649 2.8663,8.599 -2.8664,18.6312 0,25.797 12.8985,27.2301 54.4603,54.4603 77.3908,71.6582 4.2995,4.2995 -28.6632,2.8663 -21.4974,17.198 1.4332,1.4332 30.0964,27.2302 30.0964,38.6954 -4.2995,51.5941 -20.0642,20.0644 -45.8612,41.5619 -11.4654,10.0322 -98.8884,171.9799 -94.5889,183.4452 2.8663,15.7649 17.1979,27.2301 21.4974,41.5618 1.4332,7.1658 -10.0322,17.198 -4.2995,22.9307 24.3639,30.0964 10.0322,-27.2302 27.2302,27.2302 1.4332,2.8662 -4.2995,-4.2995 -7.1658,-5.7327 -7.1659,-1.4333 -14.3317,1.4332 -21.4976,1.4332 -4.2995,-1.4332 -10.032,-1.4332 -14.3315,-2.8665 1.4331,14.3317 -8.5991,34.3961 -10.0322,48.7277 -1.4332,10.0321 0,20.0643 -4.2995,28.6633 -4.2995,10.0322 -17.198,12.8985 -18.6312,22.9307 -2.8662,10.0322 4.2995,20.0642 4.2995,31.5296 32.9629,1.4333 11.4653,17.198 34.396,25.797 4.2994,1.4332 10.0321,-5.7327 14.3316,-2.8663 8.599,5.7326 10.0322,20.0643 18.6312,25.797 5.7327,1.4332 10.0322,-5.7327 15.7648,-7.1658 4.2995,0 8.599,2.8663 11.4654,4.2995 18.6312,12.8985 -4.2995,10.032 12.8984,24.3637 4.2995,2.8664 12.8985,-2.8663 22.9307,-30.0964 1.4331,-2.8663 1.4331,-7.1658 4.2995,-7.1658 4.2995,0 40.1286,17.198 44.4281,17.198 2.8663,0 4.2995,-7.1659 7.1658,-8.599 18.6312,-7.1659 65.9257,11.4653 88.8563,5.7326 12.8986,-4.2995 21.4976,-15.7648 34.396,-17.198 22.9307,-1.4332 38.6954,28.6634 54.4603,32.9628 21.4975,7.1658 28.6633,-32.9628 34.396,-38.6955 25.7969,-27.23 91.7225,-24.3638 111.7869,-44.4281 38.6954,-37.2623 -17.198,-5.7326 10.0322,-41.5617 7.1658,-8.599 18.6312,-15.7649 30.0964,-18.6312 l 1.4332,-4.2995 5.7326,-12.8985 c 0,-1.4332 0,-2.8664 0,-2.8664 l 1.4332,-5.7326 14.3317,2.8663 c -1.4332,-2.8663 -4.2995,-5.7327 -4.2995,-8.599 0,-1.4332 54.4603,-8.599 57.3266,-10.0322 27.2302,-12.8984 18.6312,-34.3959 57.3266,-31.5296 15.7649,1.4332 32.9629,7.1659 45.8613,17.1979 4.2995,2.8665 0,12.8985 4.2995,12.8985 10.0322,0 20.0644,-10.032 31.5297,-11.4652 5.7327,-1.4333 -1.4332,12.8984 0,18.6311 2.8663,11.4653 10.0322,-10.0322 12.8985,-7.1659 4.2994,5.7327 4.2994,12.8986 8.5989,17.1981 5.7327,5.7326 0,-18.6311 8.599,-21.4976 48.7276,-12.8984 27.2302,15.7649 61.6263,30.0966 14.3315,5.7326 4.2994,-22.9307 17.1979,-15.7649 32.9627,21.4975 10.0321,51.5941 20.0643,83.1237 1.4332,7.1658 37.2623,32.9627 45.8613,35.8291 17.198,5.7326 -4.2995,-25.797 15.7648,-14.3316 25.797,14.3316 -7.1658,54.4603 11.4654,42.9949 7.1657,-4.2995 2.8662,18.6312 8.5989,24.3639 8.599,5.7325 44.4282,7.1657 53.0272,14.3316 l 14.3316,44.4282 c 0,2.8662 -8.5989,2.8662 -7.1657,5.7325 2.8662,10.0322 35.8291,14.3317 35.8291,15.7649 -8.5991,5.7327 -18.6312,7.1658 -25.7971,12.8985 -2.8663,2.8663 -1.4331,5.7327 -2.8663,8.599 -7.1657,7.1658 -14.3316,-20.0643 -25.7969,-20.0643 -8.599,0 0,27.2301 -8.599,25.797 -5.7327,-1.4332 -24.3639,-15.7649 -24.3639,-15.7649 -2.8663,4.2995 -1.4332,12.8985 -7.1657,14.3317 -2.8665,1.4332 -4.2995,-10.0322 -5.7327,-7.1658 -7.1658,5.7326 -5.7328,15.7648 -10.0322,21.4975 -1.4331,1.4332 -4.2995,0 -5.7327,-1.4333 0,-2.8662 2.8664,-4.2994 2.8664,-7.1657 -1.4332,-7.1659 -4.2995,-14.3317 -7.1659,-20.0644 -5.7326,-10.0321 -18.6311,11.4654 -25.797,20.0644 -20.0642,22.9306 15.7649,34.3959 18.6312,45.8613 1.4332,7.1658 -5.7327,14.3316 -5.7327,21.4975 0,7.1657 8.599,12.8984 5.7327,18.6311 -2.8663,5.7326 -12.8985,5.7326 -18.6312,11.4653 -12.8985,10.0322 7.1659,15.7649 0,25.797 -5.7327,7.1659 -14.3317,11.4654 -18.6312,17.1979 -12.8984,20.0644 8.599,51.5941 -1.433,53.0273 -7.1659,1.433 -14.3317,-1.4332 -21.4976,0 h 1.4332 l -7.1658,10.032 c 0,4.2995 -1.4332,8.599 -4.2995,7.1659 2.8663,1.4331 7.1658,-1.4332 10.0321,1.4331 4.2996,4.2995 2.8664,12.8986 8.5991,17.1981 5.7326,5.7326 67.3588,8.599 65.9256,1.4331 0,-1.4331 -20.0644,-5.7326 -5.7327,-14.3317 8.599,-4.2995 18.6312,-2.8663 27.2301,-7.1658 14.3317,-7.1657 20.0644,-27.2301 35.8292,-32.9628 31.5296,-11.4653 47.2944,0 54.4603,27.2301 2.8663,-8.599 14.3317,-41.5617 -2.8663,-47.2944 -2.8664,-1.4332 1.4331,5.7327 -1.4332,5.7327 -1.4332,1.4331 -1.4332,-4.2995 -2.8664,-5.7327 -8.599,-2.8663 -2.8663,22.9307 -12.8985,4.2995 -8.599,-12.8985 -7.1658,-32.9629 -8.599,-47.2944 0,-5.7327 -10.032,-20.0644 -4.2995,-17.1981 12.8985,4.2995 10.0322,37.2623 22.9307,32.9629 42.9951,-17.198 14.3317,-21.4975 14.3317,-40.1287 0,-2.8663 2.8663,5.7327 5.7327,4.2995 4.2995,-1.4332 -7.1659,-12.8985 -2.8664,-15.7647 7.1659,-2.8665 15.7649,2.8662 22.9306,0 5.7327,-1.4333 10.0322,-7.166 12.8985,-12.8987 11.4654,-25.7969 24.3639,-57.3266 32.9629,-85.9898 1.4332,-5.7327 -10.0322,-11.4654 -7.1658,-17.1981 1.4331,-4.2995 10.0321,-5.7326 12.8985,-10.032 10.032,-18.6312 -18.6312,-15.7649 -7.1659,-31.5297 31.5296,-40.1286 74.5247,-22.9307 74.5247,-35.8291 1.433,-11.4654 -14.3317,-27.2302 -4.2995,-34.3961 7.1657,-5.7326 2.8663,22.9307 12.8984,28.6634 4.2995,4.2995 10.0321,-7.1658 17.198,-8.599 7.1658,-1.4332 15.7648,0 24.3638,-1.4332 18.6311,-2.8663 -4.2995,-34.396 -4.2995,-34.396 -1.4331,-17.1979 12.8984,-14.3316 4.2995,-28.6633 4.2994,0 8.5989,-1.4331 8.5989,1.4332 1.4332,83.1235 48.7278,55.8935 93.1559,25.7969 5.7326,-4.2995 -12.8985,10.0322 -18.6312,15.7649 -7.1659,8.599 2.8663,24.3638 -10.0322,25.797 -24.3637,4.2995 -51.5938,5.7327 -75.9577,8.599 -1.4332,0 -37.2624,0 -32.9629,4.2994 8.599,7.1658 17.1981,17.198 28.6634,20.0644 4.2995,1.4331 -2.8663,-11.4654 1.4332,-12.8986 8.599,-4.2995 18.6312,1.4332 28.6632,0 2.8664,0 14.3317,-7.1658 15.7649,1.4332 2.8663,14.3317 -32.9628,24.3639 -22.9307,34.396 4.2995,5.7327 54.4604,-5.7326 61.6261,-4.2995 4.2995,1.4332 0,11.4654 4.2995,12.8986 10.0322,4.2995 22.9307,5.7325 34.396,1.4331 11.4654,-2.8663 17.1981,-17.198 27.2301,-21.4975 10.0322,-5.7327 22.9307,-2.8663 31.5297,-7.1658 2.8664,-1.4332 -2.8663,-8.599 0,-10.0322 2.8664,-2.8663 8.599,4.2995 11.4654,2.8663 7.1657,-2.8663 2.8663,-22.9307 10.0322,-20.0642 12.8984,2.8662 24.3637,30.0964 34.3959,21.4974 7.1658,-7.1658 5.7327,-20.0644 14.3317,-25.7969 24.3637,-14.3317 -1.4332,24.3637 14.3315,38.6954 5.7327,4.2995 20.0644,-12.8985 18.6312,-5.7327 0,4.2995 -44.4281,50.1608 -53.0271,54.4603 -4.2995,1.4332 -8.599,-5.7327 -12.8985,-2.8663 -1.4332,2.8663 7.1658,5.7327 5.7327,8.599 0,0 -30.0966,27.2302 -31.5296,27.2302 -2.8664,2.8663 -5.7327,7.1657 -7.1659,11.4652 0,2.8665 4.2995,4.2995 4.2995,5.7327 -1.4331,1.4333 -53.0272,37.2624 -34.396,44.4282 35.8292,14.3316 28.6634,-10.0322 58.7598,-10.0322 10.0322,1.4332 41.5619,27.2301 51.5939,22.9306 12.8986,-4.2995 22.9307,-20.0642 40.1288,-2.8662 38.6954,40.1286 5.7326,34.3959 12.8985,57.3266 7.1658,20.0643 17.1979,27.2301 15.7647,28.6633 -5.7327,5.7326 -25.7969,5.7326 -22.9306,14.3316 4.2995,10.0322 22.9306,4.2995 32.9628,8.599 10.0322,2.8664 10.0322,12.8986 22.9307,12.8986 71.6583,-8.599 57.3266,-91.7227 103.1879,-123.2524 8.599,-7.1657 17.198,-12.8984 28.6633,-14.3316 5.7327,0 12.8984,7.1659 17.1979,4.2995 10.0322,-10.0321 1.4332,-30.0965 11.4654,-38.6955 10.0322,-7.1657 15.7648,-4.2995 18.6312,-17.1979 1.4331,-1.4332 -2.8664,0 -4.2995,-1.4332 -7.1659,-7.1658 4.2995,-21.4975 8.599,-22.9307 7.1658,-4.2995 17.198,-4.2995 25.7969,-2.8663 8.599,1.4332 14.3317,12.8985 22.9307,11.4653 10.0322,-1.4331 12.8985,-14.3316 21.4975,-18.6311 7.1659,-2.8664 15.7649,0 22.9306,-2.8664 28.6634,-10.0322 5.7327,-37.2623 8.599,-60.1929 2.8663,-11.4654 20.0644,-22.9306 12.8985,-31.5296 0,0 -58.7598,11.4652 -60.1929,12.8985 -8.599,5.7325 -1.4332,22.9306 -10.0322,27.2301 -5.7327,2.8663 -12.8985,0 -18.6312,-2.8664 -4.2994,-1.4331 -2.8662,-10.0321 -7.1657,-10.0321 -10.0322,0 -1.4332,21.4975 -7.1659,30.0965 -7.1658,7.1658 -14.3317,15.7647 -24.3638,18.6312 -24.3639,7.1657 -104.6211,-70.2253 -117.5196,-87.4232 -4.2995,-4.2995 -24.3639,-40.1287 -21.4975,-42.9949 8.599,-5.7327 17.198,15.7647 27.2302,14.3316 32.9627,-5.7327 24.3637,-71.6582 37.2622,-91.7226 4.2995,-5.7327 12.8985,-7.1658 15.7649,-12.8985 7.1658,-10.0322 7.1658,-22.9307 14.3317,-31.5296 21.4975,-28.6634 32.9627,-25.797 51.5939,-17.198 1.4332,1.4332 1.4332,-2.8664 2.8663,-4.2995 12.8986,-14.3317 -2.8663,-41.5619 31.5296,-42.9951 11.4654,-1.433 18.6312,21.4976 27.2302,15.7649 10.0322,-5.7327 -2.8663,-22.9306 1.4332,-34.3959 0,-2.8664 32.9629,-40.1286 34.3959,-40.1286 5.7327,-2.8665 12.8985,11.4652 15.7649,7.1657 2.8663,-4.2994 4.2995,-42.9949 12.8985,-50.1608 11.4653,-8.599 47.2944,-22.9307 61.6261,-25.7969 4.2995,0 5.7327,14.3317 8.599,10.0322 4.2995,-5.7327 2.8664,-15.7649 7.1659,-21.4976 z"
+ class="europe"
+ id="ua" /><path
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 6244.9816,5941.5751 c -1.433,5.7327 0,12.8984 -2.8662,18.6311 -1.4332,5.7327 -5.7327,10.0322 -8.599,15.7648 0,2.8664 27.2301,22.9307 10.0322,28.6634 -30.0966,7.1657 -20.0644,-34.396 -45.8614,-15.7648 -20.0643,14.3315 5.7327,30.0964 8.599,37.2622 1.4332,5.7327 -7.1657,10.0322 -7.1657,15.7649 1.433,5.7326 7.1657,8.599 10.032,12.8985 1.4332,5.7327 -10.032,11.4652 -15.7647,8.599 -10.0322,-5.7327 -4.2995,-28.6634 -15.7649,-30.0965 -38.6955,-7.1659 -20.0643,21.4975 -42.995,14.3316 -37.2623,-8.599 -14.3316,-37.2622 -32.9628,-40.1287 -24.3638,-4.2995 -8.599,34.3961 -8.599,37.2624 -5.7326,25.7969 -40.1286,34.3959 -40.1286,65.9256 0,14.3317 28.6633,8.599 4.2995,27.2301 -8.599,7.1659 -11.4653,-17.1979 -17.198,-24.3637 -4.2995,-4.2995 -14.3317,-1.4332 -15.7648,-7.1659 -1.4332,-5.7326 8.599,-10.0321 10.0321,-15.7648 0,-2.8664 -2.8663,-5.7327 -4.2995,-5.7327 -15.7648,-5.7327 -38.6954,-10.0322 -48.7276,-28.6632 -1.4331,-5.7327 2.8664,-11.4654 2.8664,-15.7649 0,-8.599 1.4331,-17.198 -1.4332,-25.7969 -1.4332,-1.4333 -4.2995,1.433 -7.1658,2.8662 -7.1659,5.7327 -12.8986,11.4654 -20.0644,17.198 -7.1657,5.7327 -18.6311,8.599 -21.4974,17.198 -1.4332,5.7327 11.4652,8.5991 10.0322,15.7649 0,7.1657 -40.1287,48.7276 -41.5619,48.7276 -12.8985,0 -22.9306,-17.198 -35.8291,-14.3317 -18.6312,4.2995 -57.3266,32.9629 -71.6583,7.1659 -5.7327,-8.599 -5.7327,-18.6312 -12.8985,-25.7971 -1.4332,-2.8663 -7.1659,5.7327 -8.599,2.8664 -1.4332,-4.2995 5.7326,-11.4654 2.8663,-15.7649 -1.4332,-4.2995 -10.0322,0 -12.8985,-2.8662 -8.5989,-14.3317 11.4653,-12.8985 10.0322,-21.4975 -1.4332,-7.1659 -10.0322,-10.0322 -10.0322,-17.198 -1.4332,-4.2995 10.0322,-12.8986 4.2995,-14.3316 -18.6311,-8.599 -58.7598,-8.599 -71.6582,11.4652 -2.8663,2.8664 -1.4333,5.7327 -1.4333,10.0322 1.4333,2.8663 8.599,5.7327 7.166,8.599 -8.599,17.198 -28.6634,24.3639 -45.8614,20.0644 -1.4332,0 5.7327,-2.8664 5.7327,-5.7327 0,-18.6312 14.3316,-11.4654 15.7648,-15.7649 7.1659,-22.9305 -11.4653,-42.9949 5.7327,-64.4924 10.0322,-14.3317 35.8291,-14.3317 41.5618,-30.0964 4.2995,-8.5992 -4.2995,-21.4976 0,-31.5297 5.7326,-11.4654 25.797,-7.1659 34.396,-17.1981 10.0321,-8.599 21.4974,-37.2622 34.3959,-47.2944 7.1659,-5.7327 14.3317,10.0322 15.7649,-10.0322 0,-7.1658 -21.4976,7.1659 -22.9307,0 -2.8664,-7.1658 8.599,-12.8985 12.8985,-18.6312 0,0 2.8663,1.4332 2.8663,0 0,-2.8662 -5.7326,-8.5989 -2.8663,-10.032 40.1286,-11.4654 22.9307,42.9949 71.6583,-7.1659 1.4332,0 4.2995,-2.8663 5.7327,-5.7327 l 2.8663,-2.8663 c 2.8662,-1.4332 5.7327,-1.4332 8.5989,1.4332 1.4332,1.4331 -8.5989,2.8663 -7.1657,5.7327 4.2995,8.599 70.225,-7.1659 74.5245,-7.1659 28.6634,-1.4332 2.8663,25.7969 38.6955,7.1659 1.4332,-1.4332 -2.8663,-8.5991 0,-10.0322 4.2994,-2.8664 20.0643,-4.2995 14.3316,-5.7327 -8.5989,-1.4332 -17.1979,1.4332 -25.7969,0 -4.2995,-1.4332 20.0642,-40.1286 41.5618,-18.6312 2.8663,2.8665 -4.2995,8.599 -2.8664,12.8985 1.4332,2.8664 7.1659,4.2995 10.0322,2.8664 2.8663,-1.4332 -1.4332,-11.4654 0,-8.599 5.7327,2.8663 5.7327,12.8985 11.4654,15.7648 0,0 47.2944,-2.8663 48.7276,-2.8663 14.3316,2.8663 24.3638,17.198 37.2622,24.3638 v 1.4332 c 0,10.0322 18.6312,12.8984 12.8985,27.2301 -1.4331,2.8663 -7.1658,1.4332 -8.599,2.8663 -4.2995,7.1659 -18.631,58.7598 -15.7647,60.193 2.8663,1.4331 50.1608,5.7327 51.5939,5.7327 2.8664,2.8663 -4.2995,7.1658 -1.4331,10.0321 7.1658,8.599 15.7648,14.3317 25.797,18.6312 22.9306,11.4654 27.2301,-27.2302 42.9949,-24.3638 4.2995,0 7.1659,1.4331 10.0322,2.8663 l -1.4333,12.8985 c -1.433,4.2995 -2.8662,7.1657 0,8.599 z"
+ class="europe"
+ id="ch" /><path
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8254.28,5435.6676 c 20.0643,-10.0322 32.9628,-1.4332 48.7276,11.4654 30.0965,21.4974 35.8292,57.3266 60.1929,81.6903 40.1287,38.6956 149.0493,107.4874 161.9478,163.381 10.0322,35.8291 -2.8663,75.9577 5.7327,111.7869 2.8663,15.7647 28.6633,51.5939 27.2301,67.3588 0,5.7327 -11.4654,7.1658 -10.0322,12.8985 1.4333,5.7327 10.0322,2.8662 14.3317,5.7327 4.2995,2.8662 4.2995,12.8984 10.0322,12.8984 7.1658,1.4331 1.4331,-15.7649 7.1658,-17.1979 8.599,-1.4332 17.198,1.433 24.3639,0 10.032,-1.4332 -11.4654,-32.9629 1.433,-53.0273 4.2995,-5.7325 12.8985,-10.032 18.6312,-17.1979 7.1659,-10.0321 -12.8985,-15.7648 0,-25.797 5.7327,-5.7327 15.7649,-5.7327 18.6312,-11.4653 2.8663,-5.7327 -5.7327,-11.4654 -5.7327,-18.6311 0,-7.1659 7.1659,-14.3317 5.7327,-21.4975 -2.8663,-11.4654 -38.6954,-22.9307 -18.6312,-45.8613 7.1659,-8.599 20.0644,-30.0965 25.797,-20.0644 2.8664,5.7327 5.7327,12.8985 7.1659,20.0644 0,2.8663 -2.8664,4.2995 -2.8664,7.1657 1.4332,1.4333 4.2996,2.8665 5.7327,1.4333 4.2994,-5.7327 2.8664,-15.7649 10.0322,-21.4975 1.4332,-2.8664 2.8662,8.599 5.7327,7.1658 5.7325,-1.4332 4.2994,-10.0322 7.1657,-14.3317 0,0 18.6312,14.3317 24.3639,15.7649 8.599,1.4331 0,-25.797 8.599,-25.797 11.4653,0 18.6312,27.2301 25.7969,20.0643 1.4332,-2.8663 0,-5.7327 2.8663,-8.599 7.1659,-5.7327 17.198,-7.1658 25.7971,-12.8985 0,-1.4332 -32.9629,-5.7327 -35.8291,-15.7649 -1.4332,-2.8663 7.1657,-2.8663 7.1657,-5.7325 l -14.3316,-44.4282 c -8.599,-7.1659 -44.4282,-8.5991 -53.0272,-14.3316 -5.7327,-5.7327 -1.4332,-28.6634 -8.5989,-24.3639 -18.6312,11.4654 14.3316,-28.6633 -11.4654,-42.9949 -20.0643,-11.4654 1.4332,20.0642 -15.7648,14.3316 -8.599,-2.8664 -44.4281,-28.6633 -45.8613,-35.8291 -10.0322,-31.5296 12.8984,-61.6262 -20.0643,-83.1237 -12.8985,-7.1658 -2.8664,21.4975 -17.1979,15.7649 -34.3961,-14.3317 -12.8987,-42.995 -61.6263,-30.0966 -8.599,2.8665 -2.8663,27.2302 -8.599,21.4976 -4.2995,-4.2995 -4.2995,-11.4654 -8.5989,-17.1981 -2.8663,-2.8663 -10.0322,18.6312 -12.8985,7.1659 -1.4332,-5.7327 5.7327,-20.0644 0,-18.6311 -11.4653,1.4332 -21.4975,11.4652 -31.5297,11.4652 -4.2995,0 0,-10.032 -4.2995,-12.8985 -12.8984,-10.032 -30.0964,-15.7647 -45.8613,-17.1979 -38.6954,-2.8663 -30.0964,18.6312 -57.3266,31.5296 -2.8663,1.4332 -57.3266,8.599 -57.3266,10.0322 0,5.7327 7.1658,8.599 7.1658,14.3317 1.4332,5.7326 -11.4653,-8.599 -15.7648,-5.7327 -5.7327,2.8663 -2.8664,11.4653 -4.2995,17.198 z"
+ class="europe"
+ id="md" /><path
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 5033.9567,6695.4203 c -64.4925,18.6311 -28.6633,-34.3961 -25.7969,-34.3961 37.2622,-2.8663 40.1286,15.7649 25.7969,34.3961 z"
+ class="europe"
+ id="ad" /><path
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 5774.9033,6543.5047 c 11.4654,0 21.4976,-10.0322 21.4976,-20.0644 0,-10.0322 -10.0322,-18.6312 -21.4976,-18.6312 -11.4653,0 -21.4974,8.599 -21.4974,18.6312 0,10.0322 10.0321,20.0644 21.4974,20.0644 11.4654,0 -11.4653,0 0,0 z"
+ class="europe"
+ id="mc" /><path
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 6123.1627,5875.6495 7.1658,15.7647 v 17.198 c -7.1658,0 -11.4653,-1.4331 -12.8985,-1.4331 -1.4332,-1.4332 2.8663,-15.7649 5.7327,-31.5296 z"
+ class="europe"
+ id="li" /><path
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7579.2613,4400.9232 c -31.5297,-42.995 -1.4332,-81.6905 -10.0322,-96.0221 -4.2995,-5.7327 -10.0321,-10.0322 -15.7648,-12.8985 -2.8663,-1.4332 -7.1658,2.8663 -8.599,1.4331 -5.7327,-4.2995 -2.8663,-15.7648 -8.599,-17.198 -20.0643,-5.7326 -40.1286,12.8985 -61.6261,12.8985 -2.8664,0 1.4331,-4.2995 -1.4332,-5.7326 -18.6311,-5.7327 -47.2945,-4.2995 -64.4925,-14.3317 -4.2995,-2.8663 -4.2995,-10.0321 -8.599,-11.4653 -4.2995,0 -5.7326,5.7326 -10.0321,7.1658 1.4331,4.2995 1.4331,7.1658 0,10.0322 -1.4332,2.8663 -8.599,-1.4332 -8.599,1.4331 -1.4332,15.7649 18.6311,30.0965 14.3316,45.8614 -4.2995,18.6311 -80.2572,17.1979 -77.3909,8.599 1.4331,-2.8664 2.8663,-5.7327 4.2995,-8.599 -15.7648,17.1979 -32.9628,14.3316 -55.8935,20.0643 -2.8663,0 -7.1658,-1.4332 -7.1658,1.4331 -1.4332,11.4654 4.2995,22.9307 4.2995,34.396 0,20.0644 -10.0322,41.5618 -27.2302,58.7598 81.6905,11.4654 275.1679,4.2995 341.0935,-34.3959 0,0 0,0 1.4332,-1.4332 z m -222.1407,-137.584 c 0,0 -1.4332,0 -1.4332,0 -1.4332,4.2995 -4.2995,10.0322 -5.7327,14.3317 2.8664,-4.2995 5.7327,-10.0322 7.1659,-14.3317 z"
+ class="europe ru"
+ id="ru-kgd" /><path
+ sodipodi:nodetypes="cccc"
+ style="display:inline;opacity:1;fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 4630.6239,4351.3664 c -7.1658,1.4333 -14.3317,1.4333 -21.4974,5.7327 -5.7328,4.2995 -7.166,14.3316 -12.8985,20.0643 -61.6263,55.8935 37.2622,41.5618 34.3959,-25.797 z"
+ class="europe"
+ id="im" />
+
+
+<path
+ d="m 4736.7888,3126.2627 c -1.4332,12.8984 -4.2995,35.8292 -4.2995,35.8292 0,0 2.8663,-22.9308 4.2995,-35.8292 z m 21.4974,-140.4503 c -17.1979,35.8292 7.1658,-8.599 11.4653,12.8985 0,2.8663 -7.1658,2.8663 -7.1658,4.2996 2.8663,5.7325 14.3317,4.2995 14.3317,10.0321 0,10.0321 -2.8664,27.2301 -12.8985,27.2301 -8.5989,-1.4331 1.4331,-18.6311 0,-27.2301 -4.2995,-14.3317 -47.2945,-30.0964 -5.7327,-27.2302 z"
+ style="fill:#fff7df;fill-opacity:1;stroke:#aa805d;stroke-width:4.58365;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="fo"
+ inkscape:label="#fo" /></g>
+
+
+</svg>
diff --git a/examples/quick/quickshapes/weatherforecast/assets/OFL.txt b/examples/quick/quickshapes/weatherforecast/assets/OFL.txt
new file mode 100644
index 0000000000..d3a046cf57
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2019 The Work Sans Project Authors (https://github.com/weiweihuanghuang/Work-Sans)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/examples/quick/quickshapes/weatherforecast/assets/WorkSans-Regular.ttf b/examples/quick/quickshapes/weatherforecast/assets/WorkSans-Regular.ttf
new file mode 100644
index 0000000000..20c7240371
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/WorkSans-Regular.ttf
Binary files differ
diff --git a/examples/quick/quickshapes/weatherforecast/assets/apache.txt b/examples/quick/quickshapes/weatherforecast/assets/apache.txt
new file mode 100644
index 0000000000..989e2c59e9
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/apache.txt
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License. \ No newline at end of file
diff --git a/examples/quick/quickshapes/weatherforecast/assets/attribution.txt b/examples/quick/quickshapes/weatherforecast/assets/attribution.txt
new file mode 100644
index 0000000000..7d71070406
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/attribution.txt
@@ -0,0 +1,10 @@
+The SVG files in this directory are converted to QML using the svgtoqml tool. They are not directly
+used by the example, but are provided as .svg for users who might want to modify them on their own.
+The font file is required to build the example.
+
+The following third-party assets are used in this example:
+
+- Weather icons from the Noto Emoji collection: https://www.svgrepo.com/collection/noto-emojis/ (Author: googlefonts, License: Apache, see apache.txt))
+- "Europe.svg" is a modified version of https://commons.wikimedia.org/wiki/File:Europ%C3%A4ische_Wirtschafts-_und_W%C3%A4hrungsunion-2009.svg (Cc-by-3.0 license)
+- "Work Sans" font by Wei Huang (Licensed under Open Font License, see OFL.txt)
+- "gear alt fill" from "Framework7 iOS icons" by Framework7. (licensed under MIT license)
diff --git a/examples/quick/quickshapes/weatherforecast/assets/cloud-svgrepo-com.svg b/examples/quick/quickshapes/weatherforecast/assets/cloud-svgrepo-com.svg
new file mode 100644
index 0000000000..2dac977b7c
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/cloud-svgrepo-com.svg
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
+
+<svg
+ width="800px"
+ height="800px"
+ viewBox="0 0 128 128"
+ aria-hidden="true"
+ role="img"
+ class="iconify iconify--noto"
+ preserveAspectRatio="xMidYMid meet"
+ version="1.1"
+ id="svg1047"
+ sodipodi:docname="cloud-svgrepo-com.svg"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ 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">
+ <defs
+ id="defs1051" />
+ <sodipodi:namedview
+ id="namedview1049"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="0.805"
+ inkscape:cx="399.37888"
+ inkscape:cy="400"
+ inkscape:window-width="3840"
+ inkscape:window-height="2065"
+ inkscape:window-x="1200"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg1047" />
+ <path
+ d="M23.45 62.3c.72-.72-1.27-9.29 7.6-15.91s14.92-2.67 15.77-2.96c.84-.28 4.79-17.6 21.4-22.1s33.93 3.94 38.01 18.02c3.73 12.87.84 21.54 1.27 22.1c.42.56 8.45.28 13.09 7.74s2.96 12.11 2.96 12.11l-29.56 9.15h-47.3S5.02 79.47 4.6 77.5c-.42-1.97.53-8.37 7.32-12.25c5.9-3.37 10.26-1.68 11.53-2.95z"
+ fill="#e4eaee"
+ id="path1043" />
+ <path
+ d="M35.16 92.84s-15.78 3.3-26.45-4.96C2.29 82.9 4.63 74.83 4.63 74.83s4.6 4.65 13.89 5.91c9.29 1.27 19.71.84 19.71.84s2.6 4.44 12.39 6.48c12.27 2.55 18.74-3.73 18.74-3.73s3.36 4.02 15.19 4.3c11.83.28 18.46-7.98 19.57-8.17c.56-.09 3.82 2.87 10.28 1.83c6.15-.99 9.39-3.66 9.39-3.66s.89 6.62-5.3 10.7c-4.83 3.18-13.23 3.52-13.23 3.52s-1.28 4.91-7.05 8.48c-5.36 3.33-14.6 4.44-21.44 2.4c-8.59-2.56-10.72-6.47-10.72-6.47s-6.4 3.75-16.4 2.48c-9.45-1.18-14.49-6.9-14.49-6.9z"
+ fill="#bacdd2"
+ id="path1045"
+ style="stroke:none;stroke-opacity:1" />
+ <path
+ id="path1183"
+ style="stroke-width:6.25;fill:none;stroke:#000000;stroke-opacity:1"
+ d="M 484.66211 125.7207 C 465.45998 125.60837 445.83984 128.03906 426.375 133.3125 C 322.5625 161.4375 297.875 269.6875 292.625 271.4375 C 287.3125 273.25 249.5 248.5625 194.0625 289.9375 C 138.625 331.3125 151.0625 384.875 146.5625 389.375 C 138.625 397.3125 111.375 386.75 74.5 407.8125 C 44.21865 425.11613 32.528534 450.43334 29.265625 467.99414 C 29.212598 467.94196 28.9375 467.6875 28.9375 467.6875 C 28.9375 467.6875 14.3125 518.125 54.4375 549.25 C 121.125 600.875 219.75 580.25 219.75 580.25 C 219.75 580.25 251.25 616 310.3125 623.375 C 372.8125 631.3125 412.8125 607.875 412.8125 607.875 C 412.8125 607.875 426.125 632.3125 479.8125 648.3125 C 522.5625 661.0625 580.3125 654.125 613.8125 633.3125 C 649.875 611 657.875 580.3125 657.875 580.3125 C 657.875 580.3125 710.375 578.1875 740.5625 558.3125 C 770.74033 538.42146 773.97809 508.95537 773.94922 496.91797 C 774.56495 484.39547 772.04478 461.95157 753.6875 432.4375 C 724.6875 385.8125 674.5 387.5625 671.875 384.0625 C 669.1875 380.5625 687.25 326.375 663.9375 245.9375 C 643.21875 174.4375 567.87135 126.20749 484.66211 125.7207 z "
+ transform="scale(0.16)" />
+</svg>
diff --git a/examples/quick/quickshapes/weatherforecast/assets/cloud-with-lightning-and-rain-svgrepo-com.svg b/examples/quick/quickshapes/weatherforecast/assets/cloud-with-lightning-and-rain-svgrepo-com.svg
new file mode 100644
index 0000000000..78a958817c
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/cloud-with-lightning-and-rain-svgrepo-com.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
+<svg width="800px" height="800px" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--noto" preserveAspectRatio="xMidYMid meet"><path d="M78 67.82l-22.83 3.97s-7.6 19.36-8.07 20.67s-.45 3.38 1.62 3.38c2.63 0 15.98-.07 15.98-.07s-3.24 15.63-3.43 17.03s1.31 2.63 2.63 1.22s19.51-24.79 20.3-25.93c1.41-2.04.05-3.92-1.55-4.01c-1.6-.09-12.32.14-12.32.14L78 67.82z" fill="#feca18"></path><path d="M71.92 70.54s-5.09 11.26-5.28 11.9c-.56 1.9 1.9 2.67 2.6 1.13c.7-1.55 6.76-14.08 6.76-14.08l-4.08 1.05z" fill="#fdb900"></path><path d="M49.99 92.17c1.34-.04 13.1-.07 14.08-.14c1.83-.14 2.11 2.39 0 2.39c-2.19 0-13.73.04-14.43.07c-1.62.08-1.84-2.25.35-2.32z" fill="#fdb900"></path><path d="M59.42 69.01s-6 15.06-6.34 16.19c-1.41 4.72 3.66 4.58 5 1.9c.66-1.33 7.11-14.99 7.39-17.46c.28-2.46-6.05-.63-6.05-.63z" fill="#ffe36a"></path><path d="M61.01 86.57c-.86-.59-1.9-.07-2.53.92c-.63.99-1.55 2.6-.14 3.45c1.27.76 2.39-.77 2.89-1.48c.49-.71 1.12-1.98-.22-2.89z" fill="#ffe36a"></path><path d="M71.34 89.8c-2.29-.49-3.03 1.41-3.52 3.66c-.49 2.25-2.33 9.53-2.67 11.33c-.49 2.53 1.83 2.89 2.82.56c.74-1.74 3.95-9.59 4.36-10.84c.63-1.89 1.33-4.21-.99-4.71z" fill="#ffe36a"></path><path d="M107.92 46.26s2.6-34.98-27.31-39.42C53.72 2.85 48.44 28.38 48.44 28.38s-10.16-2.37-17.46 4.15c-7.25 6.48-6.69 14.15-6.69 14.15S6.41 43.86 4.58 59.21C2.87 73.55 24.01 69.98 24.01 69.98l100.38-7.39s2.38-7.54-5.21-13.23c-4.51-3.39-11.26-3.1-11.26-3.1z" fill="#e4eaee"></path><radialGradient id="IconifyId17ecdb2904d178eab6090" cx="65.811" cy="75.277" r="29.434" fx="52.634" fy="75.403" gradientTransform="matrix(.0288 -.9996 1.4975 .0432 -48.813 137.809)" gradientUnits="userSpaceOnUse"><stop offset=".193" stop-color="#ffe366"></stop><stop offset=".331" stop-color="#eddd82"></stop><stop offset=".571" stop-color="#d0d4ad"></stop><stop offset=".759" stop-color="#bfcfc7"></stop><stop offset=".87" stop-color="#b8cdd1"></stop></radialGradient><path d="M53.81 54.19c.84-.28 5.63 3.81 19.43 3.94c18.96.19 33.32-10.98 33.32-10.98s.48 3.4-1.03 5.82c-1.88 3-4.79 3.57-4.79 3.57s5.26 3.66 12.48 3.1c6.51-.51 11.22-2.72 11.22-2.72s.63 3.21.28 6.34c-.7 6.24-4.36 8.78-8.4 9.24c-2.97.34-28.34.46-38.76.56c-9.39.09-57.24 1.29-62.13.75c-5.07-.56-8.92-3.61-10.32-7.98c-1.07-3.31-.56-5.44-.56-5.44s9.32 2.47 14.55 1.88c6.57-.75 10.98-4.88 10.98-4.88s3.94 2.25 12.67 1.5c7.51-.66 11.06-4.7 11.06-4.7z" fill="url(#IconifyId17ecdb2904d178eab6090)"></path><path d="M103.9 74.2c-1.02-.57-4.65 2.82-6.69 4.86c-1.25 1.25-5.23 4.52-5.77 7.67c-1.34 7.74 7.53 9.5 11.05 5.91c2.66-2.71 2.18-8 2.18-9.78c.01-2.47.5-7.96-.77-8.66z" fill="#52c0ee"></path><path d="M31.02 78.36c-.97-.56-4.45 2.72-6.41 4.71c-1.2 1.21-5.01 4.38-5.55 7.46c-1.32 7.55 7.13 9.32 10.51 5.84c2.55-2.63 2.13-7.8 2.14-9.54c.01-2.41.51-7.77-.69-8.47z" fill="#52c0ee"></path><path d="M47.15 100.74c-1.09-.41-4.76 2.93-6.8 4.97c-1.25 1.25-4.95 4.45-5.49 7.6c-1.34 7.74 7.25 9.57 10.77 5.98c2.66-2.71 2.22-8 2.18-9.78c-.1-4.64.09-8.49-.66-8.77z" fill="#52c0ee"></path><path d="M97.78 84.22c-1.4-.73-3.1-.42-4.18 1.83c-1.08 2.25-.19 4.04.94 4.55c1.3.6 2.91.05 3.99-1.78s.42-3.99-.75-4.6z" fill="#b2e6fe"></path><path d="M40.01 110.93c-1.44-.5-3.02.03-3.74 2.34c-.72 2.31.39 3.89 1.54 4.23c1.33.39 2.79-.36 3.57-2.27c.77-1.91-.17-3.88-1.37-4.3z" fill="#b2e6fe"></path><path d="M24.07 87.97c-1.52-.42-3.12.23-3.7 2.66c-.58 2.43.66 3.99 1.87 4.25c1.4.31 2.85-.56 3.53-2.58c.67-2-.42-3.98-1.7-4.33z" fill="#b2e6fe"></path></svg> \ No newline at end of file
diff --git a/examples/quick/quickshapes/weatherforecast/assets/cloud-with-lightning-svgrepo-com.svg b/examples/quick/quickshapes/weatherforecast/assets/cloud-with-lightning-svgrepo-com.svg
new file mode 100644
index 0000000000..88ff853912
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/cloud-with-lightning-svgrepo-com.svg
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
+
+<svg
+ width="800px"
+ height="800px"
+ viewBox="0 0 128 128"
+ aria-hidden="true"
+ role="img"
+ class="iconify iconify--noto"
+ preserveAspectRatio="xMidYMid meet"
+ version="1.1"
+ id="svg1314"
+ sodipodi:docname="cloud-with-lightning-svgrepo-com.svg"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ 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">
+ <defs
+ id="defs1318" />
+ <sodipodi:namedview
+ id="namedview1316"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="0.805"
+ inkscape:cx="399.37888"
+ inkscape:cy="400"
+ inkscape:window-width="3840"
+ inkscape:window-height="2065"
+ inkscape:window-x="1200"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg1314" />
+ <path
+ d="M79.83 71.24L57 75.21s-7.6 19.36-8.07 20.67c-.47 1.31-.45 3.38 1.62 3.38c2.63 0 15.98-.07 15.98-.07s-3.24 15.63-3.43 17.03s1.31 2.63 2.63 1.22c1.31-1.41 19.51-24.79 20.3-25.93c1.41-2.04.05-3.92-1.55-4.01c-1.6-.09-12.32.14-12.32.14l7.67-16.4z"
+ fill="#feca18"
+ id="path1287"
+ style="stroke:#b0ab9d;stroke-opacity:1" />
+ <path
+ d="M73.71 75.04s-5.09 11.26-5.28 11.9c-.56 1.9 1.9 2.67 2.6 1.13c.7-1.55 6.76-14.08 6.76-14.08l-4.08 1.05z"
+ fill="#fdb900"
+ id="path1289" />
+ <path
+ d="M50.83 96.3c1.34-.04 13.1-.07 14.08-.14c1.83-.14 2.11 2.39 0 2.39c-2.19 0-13.73.04-14.43.07c-1.62.08-1.83-2.25.35-2.32z"
+ fill="#fdb900"
+ id="path1291" />
+ <path
+ d="M59.98 75.96s-6 15.06-6.34 16.19c-1.41 4.72 3.66 4.58 5 1.9c.66-1.33 7.11-14.99 7.39-17.46c.29-2.46-6.05-.63-6.05-.63z"
+ fill="#ffe36a"
+ id="path1293" />
+ <path
+ d="M62.52 91.16c-.86-.59-1.9-.07-2.53.92c-.63.99-1.55 2.6-.14 3.45c1.27.76 2.39-.77 2.89-1.48c.48-.7 1.11-1.97-.22-2.89z"
+ fill="#ffe36a"
+ id="path1295" />
+ <path
+ d="M72.09 94.4c-2.29-.49-3.03 1.41-3.52 3.66c-.49 2.25-2.33 9.53-2.67 11.33c-.49 2.53 1.83 2.89 2.82.56c.74-1.74 3.95-9.59 4.36-10.84c.63-1.89 1.33-4.22-.99-4.71z"
+ fill="#ffe36a"
+ id="path1297" />
+ <path
+ d="M107.35 50.2s1.29-34.78-27.45-39C53.01 7.26 48.23 32.6 48.23 32.6s-11.68-2.67-18.02 4.79s-6.48 13.23-6.48 13.23s-17.6-1.69-19.15 12.67s11.54 8.45 11.54 8.45l107.13-4.72s2.95-8.03-4.65-13.73c-4.49-3.37-11.25-3.09-11.25-3.09z"
+ fill="#e4eaee"
+ id="path1299" />
+ <radialGradient
+ id="IconifyId17ecdb2904d178eab6089"
+ cx="65.427"
+ cy="79.054"
+ r="29.294"
+ fx="52.312"
+ fy="79.18"
+ gradientTransform="matrix(.0288 -.9996 1.4975 .0432 -54.843 141.038)"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ offset=".193"
+ stop-color="#ffe366"
+ id="stop1301" />
+ <stop
+ offset=".331"
+ stop-color="#eddd82"
+ id="stop1303" />
+ <stop
+ offset=".571"
+ stop-color="#d0d4ad"
+ id="stop1305" />
+ <stop
+ offset=".759"
+ stop-color="#bfcfc7"
+ id="stop1307" />
+ <stop
+ offset=".87"
+ stop-color="#b8cdd1"
+ id="stop1309" />
+ </radialGradient>
+ <path
+ d="M58.78 55.69c.84-.28 6.05 4.22 19.85 3.8s26.61-7.32 26.61-7.32s-.7 4.93-2.25 7.32s-4.22 5.21-4.22 5.21s7.18 1.69 13.66.84c6.48-.84 11.26-3.94 11.26-3.94s.84 3.24.28 6.34c-.72 3.97-4.22 6.9-7.18 7.32s-29.56 1.76-39.98 2.11c-8.45.29-56.63.68-61.52.14c-5.07-.56-8.87-2.82-10.28-7.18c-1.07-3.31-.56-5.35-.56-5.35s6.36 2.73 11.54 1.83c6.48-1.13 10-6.19 10-6.19s6.34 3.24 15.49 2.11c9.14-1.13 17.3-7.04 17.3-7.04z"
+ fill="url(#IconifyId17ecdb2904d178eab6089)"
+ id="path1312" />
+ <path
+ id="path1377"
+ style="stroke-width:6.25;fill:none;stroke:#b0ab9d;stroke-opacity:1"
+ d="M 462.46484 67.416016 C 326.82772 69.1539 301.4375 203.75 301.4375 203.75 C 301.4375 203.75 228.4375 187.0625 188.8125 233.6875 C 149.1875 280.3125 148.3125 316.375 148.3125 316.375 C 148.3125 316.375 38.3125 305.8125 28.625 395.5625 C 28.219648 399.31789 27.988274 402.83249 27.890625 406.15625 C 27.88823 406.15523 27.8125 406.125 27.8125 406.125 C 27.8125 406.125 24.625 418.875 31.3125 439.5625 C 40.125 466.8125 63.875 480.9375 95.5625 484.4375 C 126.125 487.8125 427.25 485.375 480.0625 483.5625 C 545.1875 481.375 711.4375 473 729.9375 470.375 C 748.4375 467.75 770.3125 449.4375 774.8125 424.625 C 778.04161 406.74956 773.86966 388.33772 773.19727 385.5625 C 771.11652 369.23452 763.28052 349.58539 741.25 333.0625 C 713.1875 312 670.9375 313.75 670.9375 313.75 C 670.9375 313.75 679 96.375 499.375 70 C 486.24512 68.076172 473.95951 67.268737 462.46484 67.416016 z "
+ transform="scale(0.16)" />
+</svg>
diff --git a/examples/quick/quickshapes/weatherforecast/assets/cloud-with-rain-svgrepo-com.svg b/examples/quick/quickshapes/weatherforecast/assets/cloud-with-rain-svgrepo-com.svg
new file mode 100644
index 0000000000..93f690c7bb
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/cloud-with-rain-svgrepo-com.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
+<svg width="800px" height="800px" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--noto" preserveAspectRatio="xMidYMid meet"><path d="M107.62 46.29s1.72-32.32-23.89-38.72C54.12.17 48.29 28.49 48.29 28.49s-11.55-2.19-18.74 5.62c-6.03 6.55-5.46 12.96-5.46 12.96s-7.96-1.72-14.21 3.75s-5.31 10.61-5.31 10.61l18.58 7.18s93.83.47 94.3.16c.47-.31 6.25-9.37 6.25-9.37s-.94-7.81-6.4-10.93c-5.47-3.12-9.68-2.18-9.68-2.18z" fill="#e2ebee"></path><path d="M14.25 73.45c4.68.16 35.29.78 53.86.62s46.81.14 50.73-1.71c3.07-1.45 4.9-3.85 5.19-7.21c.28-3.21-.34-5.75-.34-5.75s-4.37 3.16-12.65 3.28c-5.15.07-15.61-.78-13.58-2.65c.57-.53 8.66-6.66 8.27-12.33c-.09-1.34-7.34 5.31-14.21 8.12c-6.87 2.81-13.39 4.98-22.47 4.4c-7.65-.5-10.97-3.61-10.97-3.61s-3.69 4.33-14.78 5.26c-11.09.94-13.48-3.23-13.48-3.23s-5.37 4.06-14.39 3.94c-9-.14-10.77-3.38-10.77-3.38s-.85 5.77 1.03 9.14c1.92 3.43 5.41 5.01 8.56 5.11z" fill="#b9ced2"></path><path d="M69.99 81.57c-1.71-.6-7.81 4.23-10.56 9c-2.76 4.79-.96 8.29 1.99 9.73c3.32 1.62 8.1.62 9.46-4.1c1.34-4.67.95-13.98-.89-14.63z" fill="#4fc4f8"></path><path d="M37.66 79.19c-1.55-.55-6.58 4.12-8.84 6.64c-3.03 3.39-5.37 9.71.38 12.27c5.79 2.57 9.55-1.64 9.84-7.46c.28-5.42-.1-10.99-1.38-11.45z" fill="#4fc4f8"></path><path d="M49.87 101.65c-1.65-.89-8.58 5.26-10.79 8.93c-2.2 3.67-2.06 8.38 2.44 10.31s8.47-.54 9.3-6.97c.58-4.56.64-11.41-.95-12.27z" fill="#4fc4f8"></path><path d="M83.38 102.18c-1.19-.67-9.43 5.69-11.28 10.32c-3.67 9.19 8.87 13.29 11.72 4.65c1.66-5.04 1.03-14.14-.44-14.97z" fill="#4fc4f8"></path><path d="M103.87 82.37c-1.63-1-8.48 4.64-10.76 8.88c-2.88 5.36-.64 9.4 2.5 10.68c3.26 1.32 7.45.05 8.87-4.78c2.05-6.96.97-13.8-.61-14.78z" fill="#4fc4f8"></path><path d="M96.4 91.09c-1.08.13-2.42 1.67-2.63 4.3s1.45 3.96 3.13 3.29c1.58-.63 1.84-2.88 1.84-4.3s-.67-3.5-2.34-3.29z" fill="#aee6fd"></path><path d="M63 90.26c-1.14-.32-3.26 1.44-3.63 4.29c-.29 2.2.56 3.53 2.27 3.66c2.38.18 3.13-2.75 3.07-4.54c-.04-1.02-.22-2.99-1.71-3.41z" fill="#aee6fd"></path><path d="M42.45 109.79c-1.06-.08-2.84 1.7-2.84 4.47s1.44 3.97 3.14 3.6c1.7-.38 2.04-3.63 1.93-4.92c-.11-1.29-.66-3.03-2.23-3.15z" fill="#aee6fd"></path><path d="M30.91 88.44c-1.43-.41-3.26 1.4-3.48 3.44c-.23 2.04.72 3.52 2.23 3.75c1.51.23 2.8-1.59 2.95-3.71c.16-2.12-.37-3.11-1.7-3.48z" fill="#aee6fd"></path><path d="M76.4 110.97c-1.32-.11-3.21 1.84-3.16 4.79s1.58 3.45 2.59 3.51c1.45.09 2.46-1.62 2.59-4.3c.11-2.25-.4-3.87-2.02-4z" fill="#aee6fd"></path></svg> \ No newline at end of file
diff --git a/examples/quick/quickshapes/weatherforecast/assets/cloud-with-snow-svgrepo-com.svg b/examples/quick/quickshapes/weatherforecast/assets/cloud-with-snow-svgrepo-com.svg
new file mode 100644
index 0000000000..978570a9cd
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/cloud-with-snow-svgrepo-com.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
+<svg width="800px" height="800px" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--noto" preserveAspectRatio="xMidYMid meet"><path d="M108.55 45.69s1.97-34.42-27.94-38.86C53.72 2.85 48.44 28.38 48.44 28.38s-9.52-2.44-16.82 4.08C24.36 38.93 25 46.11 25 46.11S6.84 44.28 5.01 59.63c-1.71 14.34 19 10.35 19 10.35l100.38-7.39s2.38-7.54-5.21-13.23c-4.51-3.39-10.63-3.67-10.63-3.67z" fill="#e4eaee"></path><path d="M56.95 55.83c.84-.28 3.37 2.96 17.18 2.96c14.36 0 32.1-12.11 32.1-12.11s-.07 4.74-1.55 7.18c-1.97 3.24-6.48 5.07-6.48 5.07s6.48 2.67 15.06 1.97c6.51-.53 11.17-3.99 11.17-3.99s.63 3.21.28 6.34c-.7 6.24-4.32 8.02-8.35 8.49c-2.97.34-28.39 1.21-38.81 1.31c-9.39.09-56.96.21-61.85-.33c-5.07-.56-8.87-3.24-10.28-7.6C4.35 61.81 5 58.64 5 58.64s5.77 2.25 12.67 2.25c6.61 0 11.54-3.1 11.54-3.1s5.21 3.57 13.94 2.82c7.54-.64 13.8-4.78 13.8-4.78z" fill="#b9ced2"></path><path d="M104.07 81.59s2.25-3.66 2.85-4.4c.6-.74 1.62-1.55 2.89-.84c1.27.7.84 2.15.49 2.78c-.35.63-2.46 4.72-2.46 4.72s3.98.04 4.86.04s2.46.7 2.46 2.25c0 1.34-.63 2.18-2.15 2.25s-5.31.07-5.31.07s2.04 3.34 2.64 4.36c.6 1.02.67 2.25-.21 2.99c-1.13.95-2.6.42-3.48-.95c-.66-1.04-2.71-4.01-2.71-4.01s-2.43 3.52-3.06 4.29c-.63.77-1.79 1.69-2.96.81c-1.44-1.09-.61-2.32 0-3.27l2.6-4.08s-4.43-.11-5.7-.11c-1.27 0-2.36-.7-2.29-2.15c.07-1.48.99-2.08 2.5-2.11c1.51-.04 5.53-.04 5.53-.04s-2.46-3.52-3.1-4.54c-.63-1.02-.7-2.32.28-3.06c.99-.74 2.15-.32 2.89.63s3.44 4.37 3.44 4.37z" fill="#92c9f4"></path><path d="M65.21 85.22s2.25-3.66 2.85-4.4c.6-.74 1.62-1.55 2.89-.84c1.27.7.84 2.15.49 2.78c-.35.63-2.46 4.72-2.46 4.72s3.98.04 4.86.04s2.46.7 2.46 2.25c0 1.34-.63 2.18-2.15 2.25c-1.51.07-5.31.07-5.31.07s2.04 3.34 2.64 4.36s.67 2.25-.21 2.99c-1.13.95-2.6.42-3.48-.95c-.66-1.04-2.71-4.01-2.71-4.01s-2.43 3.52-3.06 4.29c-.63.77-1.79 1.69-2.96.81c-1.44-1.09-.61-2.32 0-3.27l2.6-4.08s-4.43-.11-5.7-.11c-1.27 0-2.36-.7-2.29-2.15c.07-1.48.99-2.08 2.5-2.11c1.51-.04 5.53-.04 5.53-.04s-2.46-3.52-3.1-4.54c-.63-1.02-.7-2.32.28-3.06c.99-.74 2.15-.32 2.89.63s3.44 4.37 3.44 4.37z" fill="#92c9f4"></path><path d="M44.19 105.43s2.25-3.66 2.85-4.4c.6-.74 1.62-1.55 2.89-.84c1.27.7.84 2.15.49 2.78c-.35.63-2.46 4.72-2.46 4.72s3.98.04 4.86.04s2.46.7 2.46 2.25c0 1.34-.63 2.18-2.15 2.25c-1.51.07-5.31.07-5.31.07s2.04 3.34 2.64 4.36c.6 1.02.67 2.25-.21 2.99c-1.13.95-2.6.42-3.48-.95c-.66-1.04-2.71-4.01-2.71-4.01s-2.43 3.52-3.06 4.29c-.63.77-1.79 1.69-2.96.81c-1.44-1.09-.61-2.32 0-3.27l2.6-4.08s-4.43-.11-5.7-.11s-2.36-.7-2.29-2.15c.07-1.48.99-2.08 2.5-2.11c1.51-.04 5.53-.04 5.53-.04s-2.46-3.52-3.1-4.54c-.63-1.02-.7-2.32.28-3.06c.99-.74 2.15-.32 2.89.63s3.44 4.37 3.44 4.37z" fill="#92c9f4"></path><path d="M26.9 82.16s2.31-3.63 2.92-4.36s1.65-1.52 2.9-.8c1.26.72.81 2.16.45 2.79s-2.54 4.68-2.54 4.68s3.98.1 4.86.11c.88.01 2.45.74 2.43 2.29c-.02 1.34-.67 2.17-2.18 2.22c-1.51.05-5.31-.01-5.31-.01s1.99 3.37 2.57 4.4s.64 2.26-.26 2.99c-1.14.93-2.61.38-3.47-1c-.65-1.05-2.65-4.05-2.65-4.05s-2.48 3.48-3.13 4.25c-.65.76-1.81 1.67-2.97.76c-1.43-1.11-.57-2.33.05-3.27l2.67-4.04s-4.43-.17-5.7-.19c-1.27-.02-2.35-.74-2.25-2.18c.09-1.48 1.02-2.06 2.53-2.07s5.53.05 5.53.05s-2.41-3.56-3.03-4.59c-.62-1.03-.67-2.33.33-3.06c1-.72 2.15-.28 2.88.68c.71.94 3.37 4.4 3.37 4.4z" fill="#92c9f4"></path><path d="M87.08 105.15s2.25-3.66 2.85-4.4c.6-.74 1.62-1.55 2.89-.84c1.27.7.84 2.15.49 2.78c-.35.63-2.46 4.72-2.46 4.72s3.98.04 4.86.04s2.46.7 2.46 2.25c0 1.34-.63 2.18-2.15 2.25s-5.31.07-5.31.07s2.04 3.34 2.64 4.36c.6 1.02.67 2.25-.21 2.99c-1.13.95-2.6.42-3.48-.95c-.66-1.04-2.71-4.01-2.71-4.01s-2.43 3.52-3.06 4.29c-.63.77-1.79 1.69-2.96.81c-1.44-1.09-.61-2.32 0-3.27l2.6-4.08s-4.43-.11-5.7-.11c-1.27 0-2.36-.7-2.29-2.15c.07-1.48.99-2.08 2.5-2.11s5.53-.04 5.53-.04s-2.46-3.52-3.1-4.54c-.63-1.02-.7-2.32.28-3.06c.99-.74 2.15-.32 2.89.63s3.44 4.37 3.44 4.37z" fill="#92c9f4"></path></svg> \ No newline at end of file
diff --git a/examples/quick/quickshapes/weatherforecast/assets/gear-alt-stroke.svg b/examples/quick/quickshapes/weatherforecast/assets/gear-alt-stroke.svg
new file mode 100644
index 0000000000..674e35b272
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/gear-alt-stroke.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ height="56"
+ viewBox="0 0 56 56"
+ width="56"
+ version="1.1"
+ id="svg4"
+ sodipodi:docname="gear-alt-fill.svg"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ 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">
+ <defs
+ id="defs8" />
+ <sodipodi:namedview
+ id="namedview6"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="11.5"
+ inkscape:cx="28.043478"
+ inkscape:cy="28"
+ inkscape:window-width="1402"
+ inkscape:window-height="1783"
+ inkscape:window-x="1563"
+ inkscape:window-y="282"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg4" />
+ <path
+ d="m18.7917819 47.4333262c-2.455097-.5432286-4.7688821-1.4624372-6.8778614-2.694132l.1238514-2.4248414c.168912-3.3070638-2.38380448-5.850592-5.68212655-5.6821266l-2.68051418.1369103c-1.2552175-1.9937532-2.22519257-4.185172-2.85265254-6.5169816l2.10374479-1.8992856c2.45788604-2.2190084 2.45138898-5.8225976 0-8.0357404l-2.24327877-2.0252585c.55680792-2.282373 1.43999294-4.4368497 2.59730287-6.4111778l3.07539783.1570793c3.30706381.168912 5.85059205-2.38380448 5.68212655-5.68212655l-.1570793-3.07539783c1.9743281-1.15730993 4.1288048-2.04049495 6.4111778-2.59730287l2.0252585 2.24327877c2.2190084 2.45788604 5.8225976 2.45138898 8.0357404 0l1.8992856-2.10374479c2.3318096.62745997 4.5232284 1.59743504 6.5169869 2.85265588l-.1369156 2.68051084c-.1689119 3.30706381 2.3838045 5.85059205 5.6821266 5.68212655l2.4248414-.1238514c1.2316948 2.1089793 2.1509034 4.4227644 2.694132 6.8778614l-1.6895515 1.525347c-2.457886 2.2190084-2.4513889 5.8225976 0 8.0357404l1.5602089 1.408575c-.6165867 2.5023605-1.6256955 4.8502225-2.9582811 6.9745407l-2.0313497-.1037588c-3.3070638-.1689119-5.850592 2.3838045-5.6821266 5.6821266l.1037537 2.0313529c-2.1243131 1.3325824-4.4721751 2.3416912-6.9745356 2.9582779l-1.408575-1.5602089c-2.2190084-2.457886-5.8225976-2.4513889-8.0357404 0zm5.2082181-13.4333262c5.5228475 0 10-4.4771525 10-10s-4.4771525-10-10-10-10 4.4771525-10 10 4.4771525 10 10 10z"
+ fill-rule="evenodd"
+ transform="translate(4 4)"
+ id="path2"
+ style="fill:none;stroke:#333333;stroke-opacity:1;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none" />
+</svg>
diff --git a/examples/quick/quickshapes/weatherforecast/assets/sun-behind-cloud-svgrepo-com.svg b/examples/quick/quickshapes/weatherforecast/assets/sun-behind-cloud-svgrepo-com.svg
new file mode 100644
index 0000000000..790e64f824
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/sun-behind-cloud-svgrepo-com.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
+<svg width="800px" height="800px" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--noto" preserveAspectRatio="xMidYMid meet"><path d="M29.53 45.25c-7.14 9.17-7.02 25.48 2.11 33.55c10.36 9.17 24.93 9.08 34.1.64c10.99-10.11 10.36-26.95.64-36.48c-9.77-9.59-27.23-10.09-36.85 2.29z" fill="#fcc11a"></path><path d="M40.99 42.1c-2.82-1.25-5.91 2.15-7.26 4.48s-2.6 6.9.27 8.06s4.93-.81 6.99-4.21c2.06-3.4 3.22-6.89 0-8.33z" fill="#fee269"></path><path d="M48.34 29.31c-.68 1.28-.45 2.26.9 2.59c1.36.32 9.82 1.7 10.53 1.74c1.03.06 1.42-.71 1.29-1.62c-.13-.9-2.2-13.57-2.39-14.74c-.19-1.16-1.42-2.33-2.59-.78c-1.15 1.57-7.23 11.84-7.74 12.81z" fill="#ffa722"></path><path d="M70.25 38.1c-1.33.41-1.29 1.23-.58 2.26c.71 1.03 5.62 8.53 6.08 9.05s1.23.65 1.87-.13s8.72-12.09 9.31-12.8c.97-1.16.39-2.39-1.1-2c-1.14.3-14.74 3.37-15.58 3.62z" fill="#ffa722"></path><path d="M19.84 72.49c.9-1.49 2.07-1.1 2.91.32c.58.97 5.43 7.5 5.88 8.21c.45.71.65 2.07-.78 2.39c-1.42.32-12.99 3.36-14.8 3.68s-2.84-1.1-1.68-2.65c.68-.9 7.95-11.11 8.47-11.95z" fill="#ffa722"></path><path d="M17.38 61.24c1.65.74 2.43.47 2.78-.71c.45-1.55 1.81-8.66 1.87-10.28c.04-1.05-.39-2.07-2-1.81c-1.62.26-13.25 1.87-14.74 2.39c-1.73.6-1.6 2.5-.45 3.1c1.36.72 11.38 6.79 12.54 7.31z" fill="#ffa722"></path><path d="M37.48 34.1c.93-.74.65-1.81-.19-2.39c-.84-.58-11.22-8.09-12.54-9.11c-1.16-.9-2.59-.58-2.2 1.49c.28 1.48 3.59 14.48 3.81 15.38c.26 1.03 1.03 1.55 1.94.9c.91-.65 8.21-5.5 9.18-6.27z" fill="#ffa722"></path><path d="M109.13 81.18s1.45-28.45-21.58-34s-29.74 16.79-29.74 16.79s-7.68-1.79-14.8 4.13c-5.59 4.65-6.38 11.63-6.38 11.63s-7.35-1.12-13.47 4.82c-4.43 4.3-4 9.82-4 9.82l8.92 7.84l90.65-2.45l4.77-5.12s.76-5.68-4.54-9.95c-5.3-4.28-9.83-3.51-9.83-3.51z" fill="#e2ebee"></path><path d="M40.64 92.23s3.61 4.08 15.06 3.81s14.46-3.27 14.46-3.27s5.02 5.27 19.53 4.15s18.68-4.18 18.68-4.18s3.54 2.53 8.02 2.6c4.47.07 7.11-.71 7.11-.71s-.47 3.56-2.03 5.84c-1.56 2.28-4.16 4.02-8.27 3.99c-4.12-.03-16.64.08-29.35.06c-12.71-.02-49.03.19-54.4-.04c-4.09-.17-7.06-2.58-8.43-4.62c-2.19-3.26-1.83-6.7-1.83-6.7s4.12 3.23 9.68 2.99c7.6-.32 11.77-3.92 11.77-3.92z" fill="#b9ced3"></path></svg> \ No newline at end of file
diff --git a/examples/quick/quickshapes/weatherforecast/assets/sun-behind-large-cloud-svgrepo-com.svg b/examples/quick/quickshapes/weatherforecast/assets/sun-behind-large-cloud-svgrepo-com.svg
new file mode 100644
index 0000000000..dd83ecaa80
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/sun-behind-large-cloud-svgrepo-com.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
+<svg width="800px" height="800px" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--noto" preserveAspectRatio="xMidYMid meet"><path d="M29.12 39.22c-4.79 6.16-4.71 17.1 1.41 22.52c6.95 6.15 16.73 6.09 22.88.43c7.38-6.79 6.95-18.09.43-24.48c-6.55-6.44-18.26-6.78-24.72 1.53z" fill="#fcc11a"></path><path d="M36.81 37.11c-1.89-.84-3.97 1.44-4.87 3.01c-.9 1.56-1.74 4.63.18 5.41s3.31-.54 4.69-2.83c1.39-2.29 2.17-4.63 0-5.59z" fill="#fee269"></path><path d="M41.74 28.53c-.46.86-.3 1.52.61 1.73c.91.22 6.59 1.14 7.07 1.17c.69.04.95-.48.87-1.08s-1.47-9.11-1.6-9.89c-.13-.78-.95-1.56-1.73-.52s-4.87 7.94-5.22 8.59z" fill="#ffa722"></path><path d="M56.45 34.42c-.89.28-.87.82-.39 1.52c.48.69 3.77 5.72 4.08 6.07c.3.35.82.43 1.26-.09c.43-.52 5.85-8.11 6.25-8.59c.65-.78.26-1.6-.74-1.34c-.77.2-9.9 2.26-10.46 2.43z" fill="#ffa722"></path><path d="M22.62 57.5c.61-1 1.39-.74 1.95.22c.39.65 3.64 5.03 3.95 5.51c.3.48.43 1.39-.52 1.6c-.95.22-8.72 2.26-9.93 2.47c-1.21.22-1.91-.74-1.13-1.78c.45-.61 5.33-7.46 5.68-8.02z" fill="#ffa722"></path><path d="M20.97 49.95c1.11.49 1.63.32 1.86-.48c.3-1.04 1.21-5.81 1.26-6.9c.03-.71-.26-1.39-1.34-1.21c-1.08.17-8.89 1.26-9.89 1.6c-1.16.4-1.08 1.68-.3 2.08c.91.49 7.63 4.56 8.41 4.91z" fill="#ffa722"></path><path d="M34.46 31.74c.62-.5.43-1.21-.13-1.6c-.56-.39-7.53-5.43-8.41-6.12c-.78-.61-1.73-.39-1.47 1c.19 1 2.41 9.72 2.56 10.32c.17.69.69 1.04 1.3.61c.6-.44 5.5-3.69 6.15-4.21z" fill="#ffa722"></path><path d="M107.33 76.86c-.14-.46 4.52-33.89-25.85-38.83c-27.2-4.42-33.1 20-33.1 20s-10.33-1.73-17.76 5.61c-6.13 6.05-6.93 12.86-6.93 12.86S16.1 75 9.46 80.07C2.78 85.17 4.41 90.5 4.41 90.5l15.36 10.62l90.55-2.72l12.86-3.44s2.21-7.81-5.25-13.8c-6.02-4.83-10.6-4.3-10.6-4.3z" fill="#e2ebee"></path><path d="M30.29 90.24s-5.41 3.54-14.13 2.6c-9.99-1.08-11.82-4.86-11.82-4.86s-1.09 7.4 4.93 12.39c5.44 4.51 12.29 3.35 21.83 3.41s73.63-.03 79.69.03c4.96.05 8.97-1.5 11.09-5.63c2.01-3.9 1.55-6.02 1.55-6.02s-3.61 2.24-11.47 1.32c-6.79-.79-10.11-3.53-10.11-3.53s-8.63 4.42-23.04 4.24c-15.1-.19-20.23-5.73-20.23-5.73s-4.9 4.64-15.67 4.37s-12.62-2.59-12.62-2.59z" fill="#b9ced3"></path></svg> \ No newline at end of file
diff --git a/examples/quick/quickshapes/weatherforecast/assets/sun-behind-rain-cloud-svgrepo-com.svg b/examples/quick/quickshapes/weatherforecast/assets/sun-behind-rain-cloud-svgrepo-com.svg
new file mode 100644
index 0000000000..5f67942417
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/sun-behind-rain-cloud-svgrepo-com.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
+<svg width="800px" height="800px" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--noto" preserveAspectRatio="xMidYMid meet"><path d="M38.29 29.14c-6.01 7.73-5.91 21.47 1.78 28.27c8.73 7.72 21.01 7.65 28.74.54c9.26-8.52 8.73-22.71.54-30.74c-8.24-8.08-22.95-8.5-31.06 1.93z" fill="#fcc11a"></path><path d="M47.95 26.49c-2.38-1.06-4.98 1.81-6.12 3.78c-1.13 1.96-2.19 5.81.23 6.8c2.42.98 4.15-.68 5.89-3.55c1.74-2.88 2.72-5.82 0-7.03z" fill="#fee269"></path><path d="M54.14 15.71c-.58 1.08-.38 1.91.76 2.18c1.14.27 8.28 1.43 8.88 1.47c.87.05 1.2-.6 1.09-1.36c-.11-.76-1.85-11.44-2.02-12.42c-.16-.98-1.2-1.96-2.18-.65s-6.09 9.96-6.53 10.78z" fill="#ffa722"></path><path d="M72.6 23.12c-1.12.35-1.09 1.03-.49 1.91c.6.87 4.74 7.19 5.12 7.62c.38.44 1.03.54 1.58-.11s7.35-10.19 7.84-10.78c.82-.98.33-2.02-.93-1.69c-.94.25-12.41 2.83-13.12 3.05z" fill="#ffa722"></path><path d="M30.12 52.09c.76-1.25 1.74-.93 2.45.27c.48.82 4.57 6.32 4.96 6.92c.38.6.54 1.74-.65 2.02c-1.2.27-10.95 2.83-12.47 3.1s-2.4-.93-1.42-2.23c.57-.77 6.7-9.37 7.13-10.08z" fill="#ffa722"></path><path d="M28.06 42.61c1.39.62 2.05.4 2.34-.6c.38-1.31 1.52-7.3 1.58-8.66c.04-.89-.33-1.74-1.69-1.52s-11.16 1.58-12.42 2.02c-1.45.51-1.35 2.11-.38 2.61c1.14.6 9.59 5.72 10.57 6.15z" fill="#ffa722"></path><path d="M44.99 19.74c.78-.63.54-1.52-.16-2.02c-.71-.49-9.46-6.82-10.57-7.68c-.98-.76-2.18-.49-1.85 1.25c.23 1.25 3.02 12.21 3.21 12.96c.22.87.87 1.31 1.63.76c.77-.53 6.93-4.62 7.74-5.27z" fill="#ffa722"></path><path d="M99.22 65.16s3.54-23.47-17.6-29.03C58.67 30.09 53.29 51.4 53.29 51.4s-6.68-1.82-12.85 3.14c-4.83 3.88-5.66 10.72-5.66 10.72s-9.41-.32-13.45 6.17c-3.84 6.17 0 10.22 0 10.22l55.54-2.23l34.19.2s2.47-6.42-2.28-10.87c-4.76-4.44-9.56-3.59-9.56-3.59z" fill="#e2ebee"></path><path d="M61.29 67.49s4.25 4.25 15.38 3.54s16.99-4.65 18.31-5.26c1.32-.61 2.83-2.02 3.34-1.01c.51 1.01-.61 3.84-2.12 5.87c-1.52 2.02-2.37 3.25-2.63 4.15c-.2.71 3.14 1.72 9.41 2.02c5.36.26 8.74-.82 8.74-.82s.15 3.37-1.16 6c-1.22 2.43-2.49 3.22-4.51 3.63c-1.04.21-20.67.2-37.56.6c-16.89.4-38.95 1.11-42.69-.1s-4.66-3.58-5.14-4.5c-.84-1.58-1.02-4.05-1.02-4.05s4.14 2.08 10.01 1.27s9-3.84 9.81-4.15c.81-.3 4.65 1.62 10.72.1c8.48-2.13 11.11-7.29 11.11-7.29z" fill="#b9ced3"></path><path d="M47.26 90.91c-1.32-.48-7.05 3.63-9.11 9.11c-3.04 8.09 7.79 10.79 10.07 3c.87-2.96.86-11.45-.96-12.11z" fill="#4fc2f7"></path><path d="M90.07 96.81c-1.17-.52-5.82 3.02-7.93 5.99c-2.02 2.84-3.82 7.64 1.14 10.1c5.41 2.67 7.87-3.14 8.1-7.36c.21-3.82-.28-8.27-1.31-8.73z" fill="#4fc2f7"></path><path d="M66.52 106.4c-1.47-.35-7.11 4.23-9.13 8.5c-4.05 8.56 8.39 11.58 9.93 3.37c.98-5.21.4-11.59-.8-11.87z" fill="#4fc2f7"></path><path d="M61.24 113.05c-1.17-.47-3.45 2.4-3.2 4.95c.26 2.55 2.36 2.78 3.36 1.37c1.34-1.87 1-5.86-.16-6.32z" fill="#afe6f8"></path><path d="M41.68 97.56c-1.11-.52-3.01 2.52-2.99 4.09c.05 3.2 2.41 3.41 3.51 1.83c1.1-1.57 1.05-5.18-.52-5.92z" fill="#afe6f8"></path><path d="M84.83 103.77c-1.32-.63-3.59 2.28-3.42 4.39c.3 3.64 3.19 3.42 4.16 1.43s.45-5.25-.74-5.82z" fill="#afe6f8"></path></svg> \ No newline at end of file
diff --git a/examples/quick/quickshapes/weatherforecast/assets/sun-behind-small-cloud-svgrepo-com.svg b/examples/quick/quickshapes/weatherforecast/assets/sun-behind-small-cloud-svgrepo-com.svg
new file mode 100644
index 0000000000..d9f0a6bcc4
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/sun-behind-small-cloud-svgrepo-com.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
+<svg width="800px" height="800px" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--noto" preserveAspectRatio="xMidYMid meet"><path d="M33.58 45.38c-8.27 10.63-8.13 29.53 2.44 38.89c12.01 10.63 28.9 10.52 39.53.74c12.75-11.72 12.01-31.24.75-42.29c-11.32-11.11-31.56-11.69-42.72 2.66z" fill="#fcc11a"></path><path d="M46.87 41.73c-3.27-1.45-6.85 2.49-8.41 5.19c-1.56 2.7-3.01 8 .31 9.35c3.32 1.35 5.71-.93 8.1-4.88s3.74-8 0-9.66z" fill="#fee269"></path><path d="M55.39 26.91c-.79 1.49-.52 2.62 1.05 3c1.57.37 11.39 1.97 12.21 2.02c1.2.07 1.65-.82 1.5-1.87c-.15-1.05-2.55-15.74-2.77-17.08s-1.65-2.7-3-.9c-1.35 1.79-8.39 13.71-8.99 14.83z" fill="#ffa722"></path><path d="M79.23 37.03c-1.48.64-1.33 1.58-.38 2.68s7.56 9.12 8.14 9.66c.59.54 1.5.59 2.14-.39s8.52-15.03 9.11-15.92c.97-1.46.15-2.8-1.52-2.17c-1.26.49-16.56 5.74-17.49 6.14z" fill="#ffa722"></path><path d="M80.19 86.84c1.19-.64 2.25-.15 2.55 1.2c.3 1.35 3.6 15.13 4.12 17.68c.26 1.28-1.2 2.32-2.4 1.57c-1.2-.75-14.22-9.83-15.06-10.56c-1.2-1.05-.37-2.14.22-2.7c1.2-1.12 9.44-6.59 10.57-7.19z" fill="#ffa722"></path><path d="M43.93 94.41c-1.51-.14-1.95 1.2-1.72 2.4c.22 1.2 2.47 16.4 2.62 17.53c.22 1.65 1.95 2.32 3.07.67c1.12-1.65 8.82-13.98 9.44-15.13c1.12-2.1.3-2.55-.82-3.07c-1.13-.53-11.02-2.25-12.59-2.4z" fill="#ffa722"></path><path d="M22.35 76.95c1.05-1.72 2.4-1.27 3.37.37c.67 1.13 6.29 8.69 6.82 9.51c.52.82.75 2.4-.9 2.77c-1.65.37-15.06 3.9-17.16 4.27s-3.3-1.27-1.95-3.07c.79-1.04 9.23-12.87 9.82-13.85z" fill="#ffa722"></path><path d="M19.5 63.92c1.92.85 2.82.54 3.22-.82c.52-1.8 2.1-10.04 2.17-11.91c.05-1.22-.45-2.4-2.32-2.1S7.22 51.26 5.5 51.86c-2 .7-1.86 2.9-.52 3.6c1.56.82 13.18 7.86 14.52 8.46z" fill="#ffa722"></path><path d="M42.8 32.45c1.08-.86.75-2.1-.22-2.77c-.97-.67-13.01-9.38-14.53-10.56c-1.35-1.05-3-.67-2.55 1.72c.32 1.72 4.16 16.79 4.42 17.83c.3 1.2 1.2 1.8 2.25 1.05s9.51-6.37 10.63-7.27z" fill="#ffa722"></path><path d="M112.86 68.59c.01-.65 2.21-23.08-17.49-27.23c-19.04-4.02-24.03 13.82-24.03 13.82s-6.75-.83-11.7 2.93c-4.95 3.77-5.23 9.98-5.23 9.98s-7.96-.3-11.71 4.13c-3.39 4-2.26 7.61-2.26 7.61l21.97 5.57l55.53-1.49l6.37-3.86s.36-5.05-2.93-8.25c-4.54-4.4-8.52-3.21-8.52-3.21z" fill="#e2ebee"></path><path d="M61.29 77.3s-6.09 2.68-13.63 2.02c-4.48-.39-7.34-1.72-7.34-1.72s-.77 5.18 3.3 7.73c3.05 1.91 5.96 2.2 11.38 2.18s54.74-.12 58.29-.16c3.56-.04 6.94-.67 8.67-2.28c2.18-2.03 2.34-5.02 2.34-5.02s-3.42 1.02-8.18.4c-4.74-.62-7.5-2.74-7.5-2.74s-3.41 2.91-21.04 3.23c-19.02.35-26.29-3.64-26.29-3.64z" fill="#bacdd2"></path></svg> \ No newline at end of file
diff --git a/examples/quick/quickshapes/weatherforecast/assets/sun-svgrepo-com.svg b/examples/quick/quickshapes/weatherforecast/assets/sun-svgrepo-com.svg
new file mode 100644
index 0000000000..b5a51c8b21
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/assets/sun-svgrepo-com.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
+
+<svg
+ width="800px"
+ height="800px"
+ viewBox="0 0 128 128"
+ aria-hidden="true"
+ role="img"
+ class="iconify iconify--noto"
+ preserveAspectRatio="xMidYMid meet"
+ version="1.1"
+ id="svg1524"
+ sodipodi:docname="sun-svgrepo-com.svg"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ 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">
+ <defs
+ id="defs1528" />
+ <sodipodi:namedview
+ id="namedview1526"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="0.805"
+ inkscape:cx="399.37888"
+ inkscape:cy="400"
+ inkscape:window-width="3840"
+ inkscape:window-height="2065"
+ inkscape:window-x="1200"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg1524" />
+ <path
+ d="M37.41 41.95c-9.71 12.48-9.54 34.65 2.87 45.64c14.09 12.47 33.92 12.34 46.39.87c14.95-13.76 14.09-36.66.87-49.63c-13.29-13.04-37.04-13.72-50.13 3.12z"
+ fill="#fcc11a"
+ id="path1504"
+ style="stroke:#b0ab9d;stroke-opacity:1;stroke-width:0.888;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ d="M53 37.67c-3.84-1.7-8.04 2.93-9.87 6.09c-1.83 3.17-3.53 9.38.37 10.97c3.9 1.58 6.7-1.1 9.51-5.73c2.79-4.63 4.38-9.38-.01-11.33z"
+ fill="#fee269"
+ id="path1506" />
+ <path
+ d="M63 20.27c-.93 1.74-.62 3.08 1.23 3.52c1.85.44 13.36 2.31 14.33 2.37c1.41.09 1.93-.97 1.76-2.2c-.18-1.23-2.99-18.46-3.25-20.04S75.14.76 73.55 2.87S63.7 18.96 63 20.27z"
+ fill="#ffa722"
+ id="path1508"
+ style="stroke:#b0ab9d;stroke-opacity:1;stroke-width:0.888;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ d="M92.8 32.23c-1.81.56-1.76 1.67-.79 3.08c.97 1.41 7.65 11.6 8.26 12.31c.62.7 1.67.88 2.55-.18c.88-1.05 11.86-16.45 12.66-17.41c1.32-1.58.53-3.25-1.49-2.73c-1.54.41-20.05 4.58-21.19 4.93z"
+ fill="#ffa722"
+ id="path1510"
+ style="stroke:#b0ab9d;stroke-opacity:1;stroke-width:0.888;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ d="M106.6 61.86c-1.3-.74-2.99-.53-3.43 1.14c-.44 1.67-2.37 13.8-2.55 14.86s.62 2.11 1.93 1.85s19.45-2.95 20.66-3.25c2.11-.53 2.81-2.64.62-4.22c-1.42-1.03-16-9.68-17.23-10.38z"
+ fill="#ffa722"
+ id="path1512"
+ style="stroke:#b0ab9d;stroke-opacity:1;stroke-width:0.888;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ d="M92.09 90.6c1.4-.75 2.64-.18 2.99 1.41c.35 1.58 4.22 17.76 4.84 20.75c.31 1.5-1.41 2.73-2.81 1.85c-1.41-.88-16.69-11.53-17.67-12.4c-1.41-1.23-.43-2.51.26-3.16c1.4-1.33 11.07-7.74 12.39-8.45z"
+ fill="#ffa722"
+ id="path1514"
+ style="stroke:#b0ab9d;stroke-opacity:1;stroke-width:0.888;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ d="M49.54 99.48c-1.77-.17-2.29 1.41-2.02 2.81c.26 1.41 2.9 19.24 3.08 20.57c.26 1.93 2.29 2.73 3.6.79s10.35-16.4 11.08-17.76c1.32-2.46.35-2.99-.97-3.6c-1.31-.61-12.92-2.63-14.77-2.81z"
+ fill="#ffa722"
+ id="path1516"
+ style="stroke:#b0ab9d;stroke-opacity:1;stroke-width:0.888;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ d="M24.23 79c1.23-2.02 2.81-1.49 3.96.44c.78 1.32 7.38 10.2 8 11.16c.62.97.88 2.81-1.05 3.25c-1.95.45-17.68 4.58-20.14 5.02c-2.46.44-3.87-1.49-2.29-3.6c.92-1.24 10.82-15.12 11.52-16.27z"
+ fill="#ffa722"
+ id="path1518"
+ style="stroke:#b0ab9d;stroke-opacity:1;stroke-width:0.888;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ d="M20.89 63.7c2.25 1 3.31.64 3.78-.97c.62-2.11 2.46-11.78 2.55-13.98c.06-1.43-.53-2.81-2.73-2.46S6.47 48.85 4.45 49.55c-2.35.82-2.18 3.4-.62 4.22c1.85.97 15.47 9.23 17.06 9.93z"
+ fill="#ffa722"
+ id="path1520"
+ style="stroke:#b0ab9d;stroke-opacity:1;stroke-width:0.888;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ d="M48.23 26.78c1.27-1.01.88-2.46-.26-3.25c-1.14-.79-15.26-11-17.05-12.4c-1.58-1.23-3.52-.79-2.99 2.02c.38 2.02 4.88 19.7 5.19 20.92c.35 1.41 1.41 2.11 2.64 1.23c1.21-.87 11.15-7.46 12.47-8.52z"
+ fill="#ffa722"
+ id="path1522"
+ style="stroke:#b0ab9d;stroke-opacity:1;stroke-width:0.888;stroke-miterlimit:4;stroke-dasharray:none" />
+</svg>
diff --git a/examples/quick/quickshapes/weatherforecast/doc/images/qml-weatherforecast-example.png b/examples/quick/quickshapes/weatherforecast/doc/images/qml-weatherforecast-example.png
new file mode 100644
index 0000000000..2ebd68f768
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/doc/images/qml-weatherforecast-example.png
Binary files differ
diff --git a/examples/quick/quickshapes/weatherforecast/doc/images/settings.png b/examples/quick/quickshapes/weatherforecast/doc/images/settings.png
new file mode 100644
index 0000000000..80788dda6d
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/doc/images/settings.png
Binary files differ
diff --git a/examples/quick/quickshapes/weatherforecast/doc/images/zoomed.png b/examples/quick/quickshapes/weatherforecast/doc/images/zoomed.png
new file mode 100644
index 0000000000..22bb3b9e24
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/doc/images/zoomed.png
Binary files differ
diff --git a/examples/quick/quickshapes/weatherforecast/doc/src/weatherforecast.qdoc b/examples/quick/quickshapes/weatherforecast/doc/src/weatherforecast.qdoc
new file mode 100644
index 0000000000..acc625ece1
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/doc/src/weatherforecast.qdoc
@@ -0,0 +1,125 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+/*!
+ \title Weather Forecast Example
+ \example quickshapes/weatherforecast
+ \image qml-weatherforecast-example.png
+ \brief A Qt Quick Shapes example demonstrating different ways to uses shapes in an application.
+ \ingroup qtquickexamples
+ \examplecategory {Graphics}
+
+ This example is designed to look like a weather forecast app for Europe. It demonstrates
+ a few different ways the \l{QtQuick.Shapes} API might be useful in an application, and how
+ different properties can affect the quality and performance of the rendering.
+
+ All graphics in the example originated as \c .svg files which were converted to QML
+ using the \l{svgtoqml} tool.
+
+ \section1 Different Types of Shapes
+
+ The \l{QtQuick.Shapes} module provides APIs to render vector graphics in a Qt Quick
+ application. This is an alternative to using a raster \l{Image} for 2D graphics and is useful
+ if the target size of the image is not known up front. With an \l{Image}, the rasterized pixmap
+ is precreated at a specific size and scaling the image will either add or subtract information.
+ This will result in pixelation or blurring, depending on whether its \c smooth property is set.
+
+ With \l{QtQuick.Shapes} the shapes are described mathematically, as a set of curves and line
+ segments, and thus they can be scaled arbitrarily without introducing artifacts.
+
+ \image qml-weatherforecast-example.png
+
+ In the Weather Forecast example, there are three main uses of shapes:
+
+ \list
+ \li User interface icons, such as weather symbols and the cog wheel on the "Settings" button.
+ \li The overview map of Europe.
+ \li Country name labels visible when zooming into the map.
+ \endlist
+
+ \section2 User Interface Icons
+
+ While using appropriately sized raster images for icons is usually preferred for performance
+ reasons, it may be inconvenient if the same application is targeting many different screen
+ sizes. In order for the icons to look crisp on all screens, you have to pregenerate a large
+ set of different sizes. \l{QtQuick.Shapes} makes it possible for the application to do this
+ adaptation at runtime, by including the icons as shapes and rendering them at a size appropriate
+ for the current screen size.
+
+ When running the Weather Forecast example on a desktop system, this can be seen by making the
+ application window larger or smaller. The weather symbols adapt to the window size without
+ reducing quality.
+
+ In addition, animated effects, such as zooms, can be added without quality loss. This can be
+ seen by hovering over the weather symbols.
+
+ So for any use case where the target size is unknown, or the number of possibilities is so large
+ that creating specific pixmaps for all would be impractical, using shapes for icons can be
+ useful and worth the performance cost of rasterizing the shapes at runtime.
+
+ \section2 Map of Europe
+
+ The Weather Forecast example also uses a vectorized map of Europe. This makes it easy to
+ create effects such as zooming into the map when we want to emphasize a specific country. In
+ addition, since each country is a separate sub-shape, we can apply different fills and strokes
+ to them independently.
+
+ Click on the map to zoom into a country. The scale will be adjusted so that the country shape
+ fills the window and the fill color will be slightly darker.
+
+ \image zoomed.png
+
+ \note The weather symbols on the zoomed map are the same assets as in the original view, but at
+ a much larger size.
+
+ \section2 Country Name Labels
+
+ When zooming on a country, its name appears across the country shape. This label is also created
+ with \l{QtQuick.Shapes}, by using the \l{PathText} component type which converts a string into
+ renderable shape.
+
+ This is not the typical way to create text labels in Qt Quick. For most purposes, using the
+ \l{Text} element is the most efficient and convenient approach. However, there are certain
+ visualization effects supported by \l{QtQuick.Shapes} which is not supported by the regular
+ \l{Text} element. Fill gradients is one such effect.
+
+ \snippet quickshapes/weatherforecast/main.qml textShape
+
+ To illustrate this, the Weather Forecast example applies a subtle radial gradient to the opacity
+ of the country labels, making them seem to blend into the map on the edges.
+
+ \section1 Different Types of Renderers
+
+ The Weather Forecast example illustrates multiple different use cases for \l{QtQuick.Shapes}.
+ In addition, it can be used to see the upsides and downsides of the different renderers the
+ module supports.
+
+ Click on the cog wheel in the upper left corner to open a settings panel, where different
+ approaches to rasterization can be selected.
+
+ \image settings.png
+
+ \l{QtQuick.Shapes} supports two different renderers, selectable using the
+ \l{ QtQuick.Shapes::Shape::preferredRendererType}{preferredRendererType} property. The preferred
+ renderer in the example is \c CurveRenderer. This supports hardware-accelerated curves and
+ built-in antialiasing. It is not the default renderer in \l{QtQuick.Shapes}, but in the example
+ it is automatically selected on startup.
+
+ The default renderer in Qt Quick Shapes is the \c GeometryRenderer. This flattens the curves of
+ the shape into very small straight lines and draws the shape as a polygon. Redrawing the shape
+ is more efficient than with the \c CurveRenderer, but at certain scales, the fact that curves
+ are approximated by lines will be visible.
+
+ In addition, the \c GeometryRenderer does not support antialiasing, so you will typically want
+ to enable multi-sampling when using it. This can be done by rendering the shapes into layers and
+ enabling multi-sampling on these. Since we will render the shapes into off-screen buffers in
+ this mode, it consumes additional graphics memory as well as an additional rendering pass for
+ each shape.
+
+ \snippet quickshapes/weatherforecast/main.qml msaa
+
+ The settings panel also provides the option to use the \c GeometryRenderer together with 4x
+ multi-sampling, so that the quality of this can be compared to the built-in antialiasing of
+ the \c CurveRenderer.
+
+ \include examples-run.qdocinc
+*/
diff --git a/examples/quick/quickshapes/weatherforecast/main.cpp b/examples/quick/quickshapes/weatherforecast/main.cpp
new file mode 100644
index 0000000000..52264b8a6e
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/main.cpp
@@ -0,0 +1,25 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+
+int main(int argc, char *argv[])
+{
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+#endif
+ QGuiApplication app(argc, argv);
+ app.setOrganizationName("QtProject");
+
+ QQmlApplicationEngine engine;
+ const QUrl url(QStringLiteral("qrc:/qt/qml/weatherforecast/main.qml"));
+ QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
+ &app, [url](QObject *obj, const QUrl &objUrl) {
+ if (!obj && url == objUrl)
+ QCoreApplication::exit(-1);
+ }, Qt::QueuedConnection);
+ engine.load(url);
+
+ return app.exec();
+}
diff --git a/examples/quick/quickshapes/weatherforecast/main.qml b/examples/quick/quickshapes/weatherforecast/main.qml
new file mode 100644
index 0000000000..5ba8ad5c2a
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/main.qml
@@ -0,0 +1,358 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Window {
+ id: mainWindow
+
+ property real designWindowWidthRatio: topLevel.zoomRect.width / 997
+ property real designWindowHeightRatio: topLevel.zoomRect.height / 1024
+ property int preferredRendererType: curveRendererCheckBox.checked ? Shape.CurveRenderer : Shape.GeometryRenderer
+
+ title: qsTr("Weather Forecast")
+ width: 1280
+ height: 960
+ visible: true
+ color: "white"
+
+
+ FontLoader {
+ id: workSansRegular
+ source: "assets/WorkSans-Regular.ttf"
+ }
+
+ Rectangle {
+ id: bgFill
+ color: "#9FCBF9"
+ anchors.fill: parent
+ }
+
+ Item {
+ id: mapContainer
+ anchors.left: !settingsDrawer.isLandscape ? parent.left : settingsDrawer.right
+ anchors.top: !settingsDrawer.isLandscape ? settingsDrawer.bottom : parent.top
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ layer.enabled: msaaCheckBox.checked
+ layer.samples: 4
+
+ Item {
+ property rect selectedRect
+ property rect zoomTarget: Qt.rect(0, 0, mapshape.width, mapshape.height)
+ property rect zoomRect: zoomTarget
+ property real zoomScale: Math.min(width / zoomRect.width, height / zoomRect.height)
+ property real subScale: 1
+ property rect overlayRect
+ property real overlayRotation: 0
+
+ anchors.fill: parent
+ anchors.margins: 10
+ id: topLevel
+ transformOrigin: Item.TopLeft
+ scale: zoomScale > 0 ? zoomScale : 1
+ Behavior on zoomRect { PropertyAnimation { duration: 500 } }
+
+ Europe {
+ id: mapshape
+ x: (topLevel.width / topLevel.scale - topLevel.zoomRect.width) / 2 - topLevel.zoomRect.x
+ y: (topLevel.height / topLevel.scale - topLevel.zoomRect.height) / 2 - topLevel.zoomRect.y
+ onZoomTo: (child, name, childRect, textRect) => {
+ if (!child) {
+ topLevel.zoomTarget = Qt.rect(0, 0, mapshape.width, mapshape.height)
+ return
+ }
+ let x_in = childRect.x
+ let y_in = childRect.y
+ let w_in = childRect.width
+ let h_in = childRect.height
+
+ // try to center the target in the map
+ var x, y, w, h
+ let ar_in = h_in / w_in
+ let ar = height / width
+ if (ar_in < ar) {
+ // in rect too short
+ h = w_in * ar
+ y = y_in - (h - h_in) / 2
+ x = x_in
+ w = w_in
+ } else {
+ // in rect too narrow
+ w = h_in / ar
+ x = x_in - (w - w_in) / 2
+ y = y_in
+ h = h_in
+ }
+ topLevel.selectedRect = Qt.rect(x_in, y_in, w_in, h_in)
+ topLevel.subScale = Math.min(mapshape.width / w, mapshape.height / h)
+ topLevel.zoomTarget = Qt.rect(x, y, w, h)
+ if (textRect) {
+ topLevel.overlayRect = Qt.rect(textRect.x, textRect.y, textRect.width, textRect.height)
+ topLevel.overlayRotation = textRect.rotation
+ } else {
+ topLevel.overlayRect = topLevel.zoomTarget
+ topLevel.overlayRotation = 0
+ }
+ textLayer.label = name
+ }
+ Item {
+ id: globalLayer
+ anchors.fill: parent
+ opacity: mapshape.zoomedIn ? 0 : 1
+ z: 2
+ Behavior on opacity {
+ NumberAnimation { duration: 500 }
+ }
+
+ Repeater {
+ model: ListModel {
+ ListElement {
+ itemSource: "Cloud.qml"
+ temperature: 22
+ placeName: "Oslo"
+ itemX: 0.440
+ itemY: 0.320
+ }
+
+ ListElement {
+ itemSource: "CloudWithLightning.qml"
+ placeName: "Helsinki"
+ temperature: 20
+ itemX: 0.615
+ itemY: 0.300
+ }
+
+ ListElement {
+ itemSource: "SunBehindCloud.qml"
+ placeName: "Berlin"
+ temperature: 24
+ itemX: 0.490
+ itemY: 0.540
+ }
+
+ ListElement {
+ itemSource: "SunBehindCloud.qml"
+ placeName: "London"
+ temperature: 22
+ itemX: 0.249
+ itemY: 0.550
+ }
+ ListElement {
+ itemSource: "SunBehindCloud.qml"
+ placeName: "Paris"
+ temperature: 22
+ itemX: 0.293
+ itemY: 0.630
+ }
+ ListElement {
+ itemSource: "SunBehindCloud.qml"
+ placeName: "Rome"
+ temperature: 22
+ itemX: 0.496
+ itemY: 0.827
+ }
+ ListElement {
+ itemSource: "SunBehindCloud.qml"
+ placeName: "Budapest"
+ temperature: 22
+ itemX: 0.612
+ itemY: 0.666
+ }
+ ListElement {
+ itemSource: "SunBehindCloud.qml"
+ placeName: "Sofia"
+ temperature: 22
+ itemX: 0.719
+ itemY: 0.781
+ }
+ ListElement {
+ itemSource: "SunBehindCloud.qml"
+ placeName: "Kyiv"
+ temperature: 22
+ itemX: 0.796
+ itemY: 0.543
+ }
+
+
+ ListElement {
+ itemSource: "Sun.qml"
+ placeName: "Madrid"
+ temperature: 28
+ itemX: 0.140
+ itemY: 0.830
+ }
+
+ ListElement {
+ itemSource: "CloudWithSnow.qml"
+ placeName: "Reykjavik"
+ temperature: 12
+ itemX: 0.050
+ itemY: 0.120
+ }
+ }
+
+ delegate: BouncyShape {
+ x: itemX * mapshape.width
+ y: itemY * mapshape.height
+ amount: 1.5
+ MapLabel {
+ iconSource: itemSource
+ label: placeName
+ degrees: temperature
+ }
+ }
+ }
+
+ } // end globalLayer
+ } // end Europe
+
+ Item {
+ id: textLayer
+ opacity: mapshape.zoomedIn ? 1 : 0
+ z: 2
+ x: mapshape.x + topLevel.overlayRect.x
+ y: mapshape.y + topLevel.overlayRect.y
+ width: topLevel.overlayRect.width
+ height: topLevel.overlayRect.height
+ rotation: topLevel.overlayRotation
+ property string label: ""
+ property real localScale: 10 / topLevel.subScale
+
+ Behavior on opacity {
+ NumberAnimation { duration: 800}
+ }
+
+ Item {
+ anchors.fill: parent
+ DemoShape {
+ id: textShape
+ property real s: Math.min(parent.width / boundingRect.width,
+ parent.height / boundingRect.height)
+
+ anchors.centerIn: parent
+ scale: Number.isNaN(s) ? 1 : 0.5 * s
+
+//! [textShape]
+ ShapePath {
+ strokeColor: "transparent"
+ strokeWidth: 1
+ joinStyle: ShapePath.RoundJoin
+ fillRule: ShapePath.WindingFill
+
+ fillGradient: RadialGradient {
+ centerX: textShape.width / 2
+ centerY: textShape.height / 2
+ centerRadius: textShape.width / 2
+ focalX: centerX; focalY: centerY
+ GradientStop { position: 0; color: "#b0ab9d7f" }
+ GradientStop { position: 1; color: "#5cab9d7f" }
+ }
+ PathText {
+ id: textPath
+ text: textLayer.label
+ font.family: workSansRegular.font.family
+ font.pixelSize: 64
+ }
+ }
+//! [textShape]
+ }
+ }
+ }
+ Item {
+ id: localLayer
+ property real localScale: 10 / topLevel.subScale
+
+ opacity: mapshape.zoomedIn ? 1 : 0
+ z: 2
+ x: mapshape.x + topLevel.selectedRect.x
+ y: mapshape.y + topLevel.selectedRect.y
+ width: topLevel.selectedRect.width
+ height: topLevel.selectedRect.height
+
+ Item {
+ scale: localLayer.localScale
+ x: 2 * parent.width / 3
+ y: 2 * parent.height / 3
+ BouncyShape {
+ hoverEnabled: mapshape.zoomedIn
+ Sun {
+ width: 10
+ height: 10
+ }
+ }
+ }
+ Item {
+ scale: localLayer.localScale
+ x: parent.width / 10
+ y: parent.height / 10
+ BouncyShape {
+ hoverEnabled: mapshape.zoomedIn
+ CloudWithLightning {
+ width: 10
+ height: 10
+ }
+ }
+ }
+ Behavior on opacity { NumberAnimation{ duration: 800 } }
+ }
+ }
+ }
+
+ Rectangle {
+ id: gear
+ anchors.top: mapContainer.top
+ anchors.left: mapContainer.left
+ anchors.leftMargin: 30
+ anchors.topMargin: 30
+ radius: 8
+ width: 44
+ height: width
+ color: Qt.rgba(0, 0, 0, hoverHandler.hovered ? 0.21 : 0.07)
+//! [msaa]
+ layer.enabled: msaaCheckBox.checked
+ layer.samples: 4
+//! [msaa]
+
+ Gear {
+ anchors.centerIn: parent
+ width: 24
+ height: width
+ }
+
+ HoverHandler {
+ id: hoverHandler
+ }
+
+ TapHandler {
+ onTapped: (eventPoint, button) => {
+ settingsDrawer.isOpen = !settingsDrawer.isOpen
+ }
+ }
+ }
+
+ SettingsDrawer {
+ id: settingsDrawer
+ isLandscape: mainWindow.width > mainWindow.height
+ width: isLandscape ? implicitWidth : mainWindow.width
+ height: isLandscape ? mainWindow.height : mainWindow.height * 0.33
+
+ RadioButton {
+ id: curveRendererCheckBox
+ text: qsTr("Curve Renderer")
+ checked: true
+ }
+
+ RadioButton {
+ id: geometryRendererCheckBox
+ text: qsTr("Geometry Renderer")
+ }
+ RadioButton {
+ id: msaaCheckBox
+ text: qsTr("Geometry Renderer 4x MSAA")
+ }
+ }
+}
diff --git a/examples/quick/quickshapes/weatherforecast/qt_attribution.json b/examples/quick/quickshapes/weatherforecast/qt_attribution.json
new file mode 100644
index 0000000000..6ea84fb1b0
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/qt_attribution.json
@@ -0,0 +1,55 @@
+[
+ {
+ "Id": "weather-icons",
+ "Name": "Weather icons from the Noto Emoji collection",
+ "QDocModule": "qtquick",
+ "QtUsage": "Used in the Weather Forecast Example",
+ "QtParts": [ "examples" ],
+ "Files": [ "assets/cloud-with-snow-svgrepo-com.svg", "CloudWithSnow_generated.qml",
+ "assets/cloud-svgrepo-com.svg", "Cloud_generated.qml",
+ "assets/cloud-with-lightning-and-rain-svgrepo-com.svg", "CloudWithLightningAndRain_generated.qml",
+ "assets/cloud-with-lightning-svgrepo-com.svg", "CloudWithLightning_generated.qml",
+ "assets/cloud-with-rain-svgrepo-com.svg", "CloudWithRain_generated.qml",
+ "assets/sun-svgrepo-com.svg", "Sun_generated.qml",
+ "assets/sun-behind-cloud-svgrepo-com.svg", "SunBehindCloud_generated.qml",
+ "assets/sun-behind-large-cloud-svgrepo-com.svg", "SunBehindLargeCloud_generated.qml",
+ "assets/sun-behind-rain-cloud-svgrepo-com.svg", "SunBehindRainCloud_generated.qml",
+ "assets/sun-behind-small-cloud-svgrepo-com.svg", "SunBehindSmallCloud_generated.qml" ],
+ "LicenseId": "Apache-2.0",
+ "License": "Apache License 2.0",
+ "Copyright": "Copyright (C) 2023 Googlefonts"
+ },
+ {
+ "Id": "map-of-europe",
+ "Name": "Map of Europe from Wikipedia",
+ "QDocModule": "qtquick",
+ "QtUsage": "Used in the Weather Forecast Example",
+ "QtParts": [ "examples" ],
+ "Files": [ "assets/Europe.svg", "Europe_generated.qml" ],
+ "LicenseId": "CC-BY-3.0",
+ "License": "Creative Commons Attribution 3.0 Unported",
+ "Copyright": "Copyright (C) 2010 Kolja21"
+ },
+ {
+ "Id": "work-sans-font",
+ "Name": "Work Sans font by Wei Huang",
+ "QDocModule": "qtquick",
+ "QtUsage": "Used in the Weather Forecast Example",
+ "QtParts": [ "examples" ],
+ "Files": "assets/WorkSans-Regular.ttf",
+ "LicenseId": "OFL-1.1",
+ "License": "SIL Open Font License 1.1",
+ "Copyright": "Copyright (C) 2020 Wei Huang"
+ },
+ {
+ "Id": "gear-icon",
+ "Name": "Gear Icon",
+ "QDocModule": "qtquick",
+ "QtUsage": "Used in the Weather Forecast Example",
+ "QtParts": [ "examples" ],
+ "Files": [ "assets/gear-alt-stroke.svg", "Gear_generated.qml" ],
+ "LicenseId": "MIT",
+ "License": "MIT License",
+ "Copyright": "Copyright (C) 2023 Framework7"
+ }
+]
diff --git a/examples/quickcontrols/sidepanel/qtquickcontrols2.conf b/examples/quick/quickshapes/weatherforecast/qtquickcontrols2.conf
index b6c7c87ea1..b6c7c87ea1 100644
--- a/examples/quickcontrols/sidepanel/qtquickcontrols2.conf
+++ b/examples/quick/quickshapes/weatherforecast/qtquickcontrols2.conf
diff --git a/examples/quick/quickshapes/weatherforecast/weatherforecast.pro b/examples/quick/quickshapes/weatherforecast/weatherforecast.pro
new file mode 100644
index 0000000000..6279bc7794
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/weatherforecast.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+
+QT += quick qml
+SOURCES += main.cpp
+RESOURCES += \
+ weatherforecast.qrc \
+ ../../shared/shared.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/quickshapes/weatherforecast
+INSTALLS += target
diff --git a/examples/quick/quickshapes/weatherforecast/weatherforecast.qrc b/examples/quick/quickshapes/weatherforecast/weatherforecast.qrc
new file mode 100644
index 0000000000..ccbdb417a1
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/weatherforecast.qrc
@@ -0,0 +1,33 @@
+<RCC>
+ <qresource prefix="/qt/qml/weatherforecast">
+ <file>main.qml</file>
+ <file>Europe.qml</file>
+ <file>Europe_generated.qml</file>
+ <file>BouncyShape.qml</file>
+ <file>Cloud.qml</file>
+ <file>Cloud_generated.qml</file>
+ <file>CloudWithLightning.qml</file>
+ <file>CloudWithLightning_generated.qml</file>
+ <file>CloudWithRain.qml</file>
+ <file>CloudWithRain_generated.qml</file>
+ <file>CloudWithSnow.qml</file>
+ <file>CloudWithSnow_generated.qml</file>
+ <file>Gear.qml</file>
+ <file>Gear_generated.qml</file>
+ <file>MapLabel.qml</file>
+ <file>SettingsDrawer.qml</file>
+ <file>Sun.qml</file>
+ <file>Sun_generated.qml</file>
+ <file>SunBehindCloud.qml</file>
+ <file>SunBehindCloud_generated.qml</file>
+ <file>SunBehindRainCloud.qml</file>
+ <file>SunBehindRainCloud_generated.qml</file>
+ <file>SunBehindSmallCloud.qml</file>
+ <file>SunBehindSmallCloud_generated.qml</file>
+ <file>DemoShape.qml</file>
+ <file>assets/WorkSans-Regular.ttf</file>
+ </qresource>
+ <qresource prefix="/">
+ <file>qtquickcontrols2.conf</file>
+ </qresource>
+</RCC>
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt
index 14813bc9ec..aa1cd2f0cc 100644
--- a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(qquickwidgetversuswindow_opengl LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/quickwidgets/qquickwidgetversuswindow_opengl")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickWidgets ShaderTools Widgets)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(qquickwidgetversuswindow_opengl
WIN32
@@ -24,11 +18,11 @@ qt_add_executable(qquickwidgetversuswindow_opengl
)
target_link_libraries(qquickwidgetversuswindow_opengl PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::QuickWidgets
- Qt::Widgets
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickWidgets
+ Qt6::Widgets
)
qt_add_qml_module(qquickwidgetversuswindow_opengl
@@ -48,7 +42,16 @@ qt6_add_shaders(qquickwidgetversuswindow_opengl "shaders"
)
install(TARGETS qquickwidgetversuswindow_opengl
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET qquickwidgetversuswindow_opengl
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc
index 001d19f4e6..ced0eb2d34 100644
--- a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc
@@ -5,6 +5,7 @@
\title QQuickWidget - QQuickView Comparison Example
\example quickwidgets/qquickwidgetversuswindow_opengl
\brief Demonstrates the benefits of QQuickWidget over a QQuickView embedded as a native window.
+ \examplecategory {User Interface Components}
\image qquickwidgetversuswindow-opengl-example.jpg
The example allows showing the same Qt Quick scene within the same
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp
index 8c95775577..8d8e4236b9 100644
--- a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp
@@ -9,8 +9,6 @@
int main(int argc, char **argv)
{
- qputenv("QML_BAD_GUI_RENDER_LOOP", "1"); // QTBUG-39507
-
QApplication app(argc, argv);
// this example and QQuickWidget are only functional when rendering with OpenGL
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag
index 9fddf1a162..6aadad661f 100644
--- a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in vec2 qt_TexCoord0;
diff --git a/examples/quick/quickwidgets/quickwidget/CMakeLists.txt b/examples/quick/quickwidgets/quickwidget/CMakeLists.txt
index ceb8b39da1..7a878a2b28 100644
--- a/examples/quick/quickwidgets/quickwidget/CMakeLists.txt
+++ b/examples/quick/quickwidgets/quickwidget/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(quickwidget LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/quickwidgets/quickwidget")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickWidgets Widgets)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(quickwidget
WIN32
@@ -21,11 +15,11 @@ qt_add_executable(quickwidget
)
target_link_libraries(quickwidget PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::QuickWidgets
- Qt::Widgets
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickWidgets
+ Qt6::Widgets
)
qt_add_qml_module(quickwidget
@@ -37,7 +31,16 @@ qt_add_qml_module(quickwidget
)
install(TARGETS quickwidget
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET quickwidget
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc b/examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc
index 285acc5802..0a80b32c4a 100644
--- a/examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc
+++ b/examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc
@@ -5,6 +5,8 @@
\title Qt Quick Widgets Example
\example quickwidgets/quickwidget
\brief Demonstrates how to mix QML with a Qt Widgets application using the QQuickWidget class.
+ \examplecategory {User Interface Components}
+
\image qtquickwidgets-example.png
*/
diff --git a/examples/quick/quickwidgets/quickwidget/main.cpp b/examples/quick/quickwidgets/quickwidget/main.cpp
index ecac279a2f..f8e0b78844 100644
--- a/examples/quick/quickwidgets/quickwidget/main.cpp
+++ b/examples/quick/quickwidgets/quickwidget/main.cpp
@@ -63,14 +63,22 @@ MainWindow::MainWindow()
setCentralWidget(centralWidget);
QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
- fileMenu->addAction(tr("Grab framebuffer"), this, &MainWindow::grabFramebuffer);
- fileMenu->addAction(tr("Render to pixmap"), this, &MainWindow::renderToPixmap);
- fileMenu->addAction(tr("Grab via grabToImage"), this, &MainWindow::grabToImage);
+ auto grabAction = fileMenu->addAction(tr("Grab framebuffer"), this, &MainWindow::grabFramebuffer);
+ auto renderAction = fileMenu->addAction(tr("Render to pixmap"), this, &MainWindow::renderToPixmap);
+ auto grabToImageAction = fileMenu->addAction(tr("Grab via grabToImage"), this, &MainWindow::grabToImage);
fileMenu->addAction(tr("Quit"), qApp, &QCoreApplication::quit);
QMenu *windowMenu = menuBar()->addMenu(tr("&Window"));
windowMenu->addAction(tr("Add tab widget"), this,
[this, centralWidget] { createQuickWidgetsInTabs(centralWidget); });
+
+ connect(m_quickWidget, &QObject::destroyed, this,
+ [this, grabAction, renderAction, grabToImageAction] {
+ m_quickWidget = nullptr;
+ grabAction->setEnabled(false);
+ renderAction->setEnabled(false);
+ grabToImageAction->setEnabled(false);
+ });
}
void MainWindow::createQuickWidgetsInTabs(QMdiArea *mdiArea)
@@ -104,10 +112,12 @@ void MainWindow::createQuickWidgetsInTabs(QMdiArea *mdiArea)
if (widget->parent()) {
widget->setAttribute(Qt::WA_DeleteOnClose, true);
widget->setParent(nullptr);
+ connect(this, &QObject::destroyed, widget, &QWidget::close);
widget->show();
btn->setText(msgFromTopLevel);
} else {
widget->setAttribute(Qt::WA_DeleteOnClose, false);
+ disconnect(this, &QObject::destroyed, widget, &QWidget::close);
tabWidget->addTab(widget, widget->windowTitle());
btn->setText(msgToTopLevel);
}
@@ -123,6 +133,7 @@ void MainWindow::quickWidgetStatusChanged(QQuickWidget::Status status)
{
if (status == QQuickWidget::Error) {
QStringList errors;
+ Q_ASSERT(m_quickWidget);
const auto widgetErrors = m_quickWidget->errors();
for (const QQmlError &error : widgetErrors)
errors.append(error.toString());
@@ -147,12 +158,14 @@ template<class T> void saveToFile(QWidget *parent, T *saveable)
void MainWindow::grabFramebuffer()
{
+ Q_ASSERT(m_quickWidget);
QImage image = m_quickWidget->grabFramebuffer();
saveToFile(this, &image);
}
void MainWindow::renderToPixmap()
{
+ Q_ASSERT(m_quickWidget);
QPixmap pixmap(m_quickWidget->size());
m_quickWidget->render(&pixmap);
saveToFile(this, &pixmap);
@@ -165,6 +178,7 @@ void MainWindow::grabToImage()
fd.setDefaultSuffix("png");
fd.selectFile("test_grabToImage.png");
if (fd.exec() == QDialog::Accepted) {
+ Q_ASSERT(m_quickWidget);
QMetaObject::invokeMethod(m_quickWidget->rootObject(), "performLayerBasedGrab",
Q_ARG(QVariant, fd.selectedFiles().first()));
}
@@ -189,8 +203,9 @@ int main(int argc, char **argv)
optMultipleSample = parser.isSet(multipleSampleOption);
- MainWindow mainWindow;
- mainWindow.show();
+ MainWindow *mainWindow = new MainWindow;
+ mainWindow->setAttribute(Qt::WA_DeleteOnClose, true);
+ mainWindow->show();
return app.exec();
}
diff --git a/examples/quick/quickwidgets/quickwidget/rotatingsquare.qml b/examples/quick/quickwidgets/quickwidget/rotatingsquare.qml
index 355c02f0cd..7fdc1978ce 100644
--- a/examples/quick/quickwidgets/quickwidget/rotatingsquare.qml
+++ b/examples/quick/quickwidgets/quickwidget/rotatingsquare.qml
@@ -31,6 +31,8 @@ Rectangle {
text.api = "OpenGL on QRhi";
else if (api === GraphicsInfo.Direct3D11)
text.api = "D3D11 on QRhi";
+ else if (api === GraphicsInfo.Direct3D12)
+ text.api = "D3D12 on QRhi";
else if (api === GraphicsInfo.Vulkan)
text.api = "Vulkan on QRhi";
else if (api === GraphicsInfo.Metal)
diff --git a/examples/quick/rendercontrol/CMakeLists.txt b/examples/quick/rendercontrol/CMakeLists.txt
index b0255dda6f..d58899ae69 100644
--- a/examples/quick/rendercontrol/CMakeLists.txt
+++ b/examples/quick/rendercontrol/CMakeLists.txt
@@ -1,7 +1,10 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_internal_add_example(rendercontrol_opengl)
if(WIN32)
qt_internal_add_example(rendercontrol_d3d11)
endif()
+if(TARGET Qt6::Widgets)
+ qt_internal_add_example(rendercontrol_rhi)
+endif()
diff --git a/examples/quick/rendercontrol/rendercontrol_d3d11/CMakeLists.txt b/examples/quick/rendercontrol/rendercontrol_d3d11/CMakeLists.txt
index ccdd6ed528..ac124d3fa5 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/CMakeLists.txt
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/CMakeLists.txt
@@ -1,19 +1,15 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(rendercontrol_d3d11 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/rendercontrol/rendercontrol_d3d11")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(rendercontrol_d3d11example WIN32 MACOSX_BUNDLE
engine.cpp engine.h
main.cpp
@@ -21,10 +17,10 @@ qt_add_executable(rendercontrol_d3d11example WIN32 MACOSX_BUNDLE
)
target_link_libraries(rendercontrol_d3d11example PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
d3d11
dxgi
dxguid
@@ -34,13 +30,21 @@ target_link_libraries(rendercontrol_d3d11example PUBLIC
# Resources:
qt_add_qml_module(rendercontrol_d3d11example
URI rendercontrol
- AUTO_RESOURCE_PREFIX
QML_FILES
"demo.qml"
)
install(TARGETS rendercontrol_d3d11example
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET rendercontrol_d3d11example
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/rendercontrol/rendercontrol_d3d11/demo.qml b/examples/quick/rendercontrol/rendercontrol_d3d11/demo.qml
index 4591ef3c44..ef1fe3507a 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/demo.qml
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/demo.qml
@@ -9,7 +9,7 @@ Rectangle {
property bool keyDown: false
gradient: Gradient {
- GradientStop { position: 0; color: mouse.pressed ? "lightsteelblue" : (keyDown ? "blue" : "steelblue") }
+ GradientStop { position: 0; color: mouse.pressed ? "lightsteelblue" : (root.keyDown ? "blue" : "steelblue") }
GradientStop { position: 1; color: "black" }
}
diff --git a/examples/quick/rendercontrol/rendercontrol_d3d11/doc/src/rendercontrol_d3d11.qdoc b/examples/quick/rendercontrol/rendercontrol_d3d11/doc/src/rendercontrol_d3d11.qdoc
index ad9189e139..03c8816033 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/doc/src/rendercontrol_d3d11.qdoc
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/doc/src/rendercontrol_d3d11.qdoc
@@ -5,5 +5,7 @@
\title QQuickRenderControl D3D11 Example
\example rendercontrol/rendercontrol_d3d11
\brief Shows how to render a Qt Quick scene into a texture that is then used by a non-Quick based Direct3D 11 renderer.
+ \examplecategory {Graphics}
+
\image rendercontrol-d3d11-example.jpg
*/
diff --git a/examples/quick/rendercontrol/rendercontrol_d3d11/quad.frag b/examples/quick/rendercontrol/rendercontrol_d3d11/quad.frag
index 09914ccdbe..a72c43db0f 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/quad.frag
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/quad.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
struct PSIn
{
float2 coord : TEXCOORD0;
diff --git a/examples/quick/rendercontrol/rendercontrol_opengl/CMakeLists.txt b/examples/quick/rendercontrol/rendercontrol_opengl/CMakeLists.txt
index 85399d8701..4ea0551c12 100644
--- a/examples/quick/rendercontrol/rendercontrol_opengl/CMakeLists.txt
+++ b/examples/quick/rendercontrol/rendercontrol_opengl/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(rendercontrol_opengl LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/rendercontrol/rendercontrol_opengl")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(rendercontrol_openglexample WIN32 MACOSX_BUNDLE
cuberenderer.cpp cuberenderer.h
@@ -21,23 +15,31 @@ qt_add_executable(rendercontrol_openglexample WIN32 MACOSX_BUNDLE
)
target_link_libraries(rendercontrol_openglexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::OpenGL
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::OpenGL
+ Qt6::Qml
+ Qt6::Quick
)
# Resources:
qt_add_qml_module(rendercontrol_openglexample
URI rendercontrol
- AUTO_RESOURCE_PREFIX
QML_FILES
"demo.qml"
)
install(TARGETS rendercontrol_openglexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET rendercontrol_openglexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/rendercontrol/rendercontrol_opengl/cuberenderer.cpp b/examples/quick/rendercontrol/rendercontrol_opengl/cuberenderer.cpp
index 430ccbbf5b..266b176e86 100644
--- a/examples/quick/rendercontrol/rendercontrol_opengl/cuberenderer.cpp
+++ b/examples/quick/rendercontrol/rendercontrol_opengl/cuberenderer.cpp
@@ -45,7 +45,6 @@ void CubeRenderer::init(QWindow *w, QOpenGLContext *share)
return;
QOpenGLFunctions *f = m_context->functions();
- f->glClearColor(0.0f, 0.1f, 0.25f, 1.0f);
f->glViewport(0, 0, w->width() * w->devicePixelRatio(), w->height() * w->devicePixelRatio());
static const char *vertexShaderSource =
@@ -148,6 +147,7 @@ void CubeRenderer::render(QWindow *w, QOpenGLContext *share, uint texture)
return;
QOpenGLFunctions *f = m_context->functions();
+ f->glClearColor(0.0f, 0.1f, 0.25f, 1.0f);
f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if (texture) {
diff --git a/examples/quick/rendercontrol/rendercontrol_opengl/demo.qml b/examples/quick/rendercontrol/rendercontrol_opengl/demo.qml
index 2907281502..ca6ba7b2b4 100644
--- a/examples/quick/rendercontrol/rendercontrol_opengl/demo.qml
+++ b/examples/quick/rendercontrol/rendercontrol_opengl/demo.qml
@@ -9,7 +9,7 @@ Rectangle {
property bool keyDown: false
gradient: Gradient {
- GradientStop { position: 0; color: mouse.pressed ? "lightsteelblue" : (keyDown ? "blue" : "steelblue") }
+ GradientStop { position: 0; color: mouse.pressed ? "lightsteelblue" : (root.keyDown ? "blue" : "steelblue") }
GradientStop { position: 1; color: "black" }
}
diff --git a/examples/quick/rendercontrol/rendercontrol_opengl/doc/src/rendercontrol_opengl.qdoc b/examples/quick/rendercontrol/rendercontrol_opengl/doc/src/rendercontrol_opengl.qdoc
index a4f3fb4664..d4dc328081 100644
--- a/examples/quick/rendercontrol/rendercontrol_opengl/doc/src/rendercontrol_opengl.qdoc
+++ b/examples/quick/rendercontrol/rendercontrol_opengl/doc/src/rendercontrol_opengl.qdoc
@@ -5,6 +5,8 @@
\title QQuickRenderControl OpenGL Example
\example rendercontrol/rendercontrol_opengl
\brief Shows how to render a Qt Quick scene into a texture that is then used by a non-Quick based OpenGL renderer.
+ \examplecategory {Graphics}
+
\image rendercontrol-opengl-example.jpg
The Qt Quick scene is managed by a QQuickWindow that is not visible
diff --git a/examples/quick/rendercontrol/rendercontrol_rhi/CMakeLists.txt b/examples/quick/rendercontrol/rendercontrol_rhi/CMakeLists.txt
new file mode 100644
index 0000000000..c38f26fcca
--- /dev/null
+++ b/examples/quick/rendercontrol/rendercontrol_rhi/CMakeLists.txt
@@ -0,0 +1,44 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(rendercontrol_rhi LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick Widgets)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(rendercontrol_rhi WIN32 MACOSX_BUNDLE
+ main.cpp
+)
+
+target_link_libraries(rendercontrol_rhi PRIVATE
+ Qt6::Core
+ Qt6::GuiPrivate
+ Qt6::Quick
+ Qt6::Widgets
+)
+
+qt_add_qml_module(rendercontrol_rhi
+ URI rendercontrolrhiexample
+ QML_FILES
+ "demo.qml"
+ RESOURCE_PREFIX
+ "/"
+ NO_RESOURCE_TARGET_PATH
+)
+
+install(TARGETS rendercontrol_rhi
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET rendercontrol_rhi
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/rendercontrol/rendercontrol_rhi/demo.qml b/examples/quick/rendercontrol/rendercontrol_rhi/demo.qml
new file mode 100644
index 0000000000..707d9cb3a4
--- /dev/null
+++ b/examples/quick/rendercontrol/rendercontrol_rhi/demo.qml
@@ -0,0 +1,156 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ id: root
+
+ gradient: Gradient {
+ GradientStop { position: 0; color: "steelblue" }
+ GradientStop { position: 1; color: "black" }
+ }
+
+ Text {
+ anchors.centerIn: parent
+ text: "Qt Quick in a texture"
+ font.pointSize: 40
+ color: "white"
+
+ SequentialAnimation on rotation {
+ PauseAnimation { duration: 2500 }
+ NumberAnimation { from: 0; to: 360; duration: 5000; easing.type: Easing.InOutCubic }
+ loops: Animation.Infinite
+ }
+ }
+
+ ParticleSystem {
+ id: particles
+ anchors.fill: parent
+
+ ImageParticle {
+ id: smoke
+ system: particles
+ anchors.fill: parent
+ groups: ["A", "B"]
+ source: "qrc:///particleresources/glowdot.png"
+ colorVariation: 0
+ color: "#00111111"
+ }
+ ImageParticle {
+ id: flame
+ anchors.fill: parent
+ system: particles
+ groups: ["C", "D"]
+ source: "qrc:///particleresources/glowdot.png"
+ colorVariation: 0.1
+ color: "#00ff400f"
+ }
+
+ Emitter {
+ id: fire
+ system: particles
+ group: "C"
+
+ y: parent.height
+ width: parent.width
+
+ emitRate: 350
+ lifeSpan: 3500
+
+ acceleration: PointDirection { y: -17; xVariation: 3 }
+ velocity: PointDirection {xVariation: 3}
+
+ size: 24
+ sizeVariation: 8
+ endSize: 4
+ }
+
+ TrailEmitter {
+ id: fireSmoke
+ group: "B"
+ system: particles
+ follow: "C"
+ width: root.width
+ height: root.height - 68
+
+ emitRatePerParticle: 1
+ lifeSpan: 2000
+
+ velocity: PointDirection {y:-17*6; yVariation: -17; xVariation: 3}
+ acceleration: PointDirection {xVariation: 3}
+
+ size: 36
+ sizeVariation: 8
+ endSize: 16
+ }
+
+ TrailEmitter {
+ id: fireballFlame
+ anchors.fill: parent
+ system: particles
+ group: "D"
+ follow: "E"
+
+ emitRatePerParticle: 120
+ lifeSpan: 180
+ emitWidth: TrailEmitter.ParticleSize
+ emitHeight: TrailEmitter.ParticleSize
+ emitShape: EllipseShape{}
+
+ size: 16
+ sizeVariation: 4
+ endSize: 4
+ }
+
+ TrailEmitter {
+ id: fireballSmoke
+ anchors.fill: parent
+ system: particles
+ group: "A"
+ follow: "E"
+
+ emitRatePerParticle: 128
+ lifeSpan: 2400
+ emitWidth: TrailEmitter.ParticleSize
+ emitHeight: TrailEmitter.ParticleSize
+ emitShape: EllipseShape{}
+
+ velocity: PointDirection {yVariation: 16; xVariation: 16}
+ acceleration: PointDirection {y: -16}
+
+ size: 24
+ sizeVariation: 8
+ endSize: 8
+ }
+
+ Emitter {
+ id: balls
+ system: particles
+ group: "E"
+
+ y: parent.height
+ width: parent.width
+
+ emitRate: 2
+ lifeSpan: 7000
+
+ velocity: PointDirection {y:-17*4*2; xVariation: 6*6}
+ acceleration: PointDirection {y: 17*2; xVariation: 6*6}
+
+ size: 8
+ sizeVariation: 4
+ }
+
+ Turbulence { //A bit of turbulence makes the smoke look better
+ anchors.fill: parent
+ groups: ["A","B"]
+ strength: 32
+ system: particles
+ }
+ }
+
+ onWidthChanged: particles.reset()
+ onHeightChanged: particles.reset()
+}
diff --git a/examples/quick/rendercontrol/rendercontrol_rhi/doc/images/rendercontrol-rhi-example.jpg b/examples/quick/rendercontrol/rendercontrol_rhi/doc/images/rendercontrol-rhi-example.jpg
new file mode 100644
index 0000000000..369f1edf84
--- /dev/null
+++ b/examples/quick/rendercontrol/rendercontrol_rhi/doc/images/rendercontrol-rhi-example.jpg
Binary files differ
diff --git a/examples/quick/rendercontrol/rendercontrol_rhi/doc/src/rendercontrol_rhi.qdoc b/examples/quick/rendercontrol/rendercontrol_rhi/doc/src/rendercontrol_rhi.qdoc
new file mode 100644
index 0000000000..521dee3abc
--- /dev/null
+++ b/examples/quick/rendercontrol/rendercontrol_rhi/doc/src/rendercontrol_rhi.qdoc
@@ -0,0 +1,140 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \title QQuickRenderControl RHI Example
+ \example rendercontrol/rendercontrol_rhi
+ \brief Shows how to render a Qt Quick scene into a QRhiTexture.
+ \examplecategory {Graphics}
+ \image rendercontrol-rhi-example.jpg
+
+ This example demonstrates how to set up a Qt Quick scene that has its
+ rendering redirected into a \l QRhiTexture. The application is then free to
+ do whatever it wants with the resulting texture from each frame.
+ This example is a QWidget-based application that performs a readback of the
+ image data, and then displays the collected per-frame renders with CPU and
+ GPU-based timing information for each.
+
+ By using Qt's 3D graphics API abstraction, this example is not tied to any
+ particular graphics API. At startup, a dialog is shown with the platforms'
+ potentially supported 3D APIs.
+
+ \snippet rendercontrol/rendercontrol_rhi/main.cpp apiselect
+
+ \note It is not guaranteed that all selections will be functional on a given
+ platform.
+
+ Once a selection is made, a QML file is loaded. However, we will not simply
+ create a \l QQuickView instance and \l{QQuickView::show()}{show()} it.
+ Rather, the \l QQuickWindow that manages the Qt Quick scene is never shown
+ on-screen. Instead, the application takes control over when and to where
+ render, via \l QQuickRenderControl.
+
+ \snippet rendercontrol/rendercontrol_rhi/main.cpp load-1
+
+ Once the object tree is instantiated, the root item (a \l Rectangle) is
+ queried, its size is ensured to be valid and then propagated.
+
+ \note Scenes that use the \l Window element within the object tree are not
+ supported.
+
+ \snippet rendercontrol/rendercontrol_rhi/main.cpp load-instantiate
+
+ At this point there are no rendering resources initialized, i.e., nothing has
+ been done with the native 3D graphics API yet. A \l QRhi is instantiated
+ only in the next step, and that is what triggers setting up the Vulkan,
+ Metal, Direct 3D, etc. rendering system under the hood.
+
+ \snippet rendercontrol/rendercontrol_rhi/main.cpp load-graphicsinit
+
+ \note This application uses a model where Qt creates an instance of QRhi.
+ This is not the only possible approach: if the application maintains its own
+ QRhi (and so OpenGL context, Vulkan device, etc.), then Qt Quick can be
+ requested to adopt and use that existing QRhi. That is done via passing a \l
+ QQuickGraphicsDevice created by \l{QQuickGraphicsDevice::fromRhi()} to
+ \l QQuickWindow, similarly to how \l QQuickGraphicsConfiguration is set in
+ the snippet above. Consider for example the case of wanting to use the Qt
+ Quick rendered textures in a QRhiWidget: in that case the QRhiWidget's QRhi
+ will need to passed on to Qt Quick, instead of letting Qt Quick create its
+ own.
+
+ Once \l QQuickRenderControl::initialize() succeeds, the renderer is live and
+ ready to go. For that, we need a color buffer to render into.
+
+ \l QQuickRenderTarget is a lightweight implicitly-shared class that carries
+ (but those not own) various sets of native or QRhi objects that describe
+ textures, render targets, or similar. Calling
+ \l{QQuickWindow::setRenderTarget()}{setRenderTarget()} on the \l
+ QQuickWindow (remember that we have a QQuickWindow that is not visible
+ on-screen) is what triggers redirecting the Qt Quick scene graph's rendering
+ into the texture provided by the application. When working with \l QRhi (and
+ not with native 3D API objects such as OpenGL texture IDs or VkImage
+ objects), the application should set up a \l QRhiTextureRenderTarget and
+ then pass it to Qt Quick via \l QQuickRenderTarget::fromRhiRenderTarget().
+
+ \snippet rendercontrol/rendercontrol_rhi/main.cpp texture-setup
+
+ \note Always provide a depth-stencil buffer for Qt Quick since both of these
+ buffers and the depth and stencil test may get utilized by the Qt Quick
+ scenegraph when rendering.
+
+ The main render loop is the following. This also shows how to perform
+ GPU->CPU readbacks of images. Once a QImage is available, the
+ QWidget-based user interface updates accordingly. We will omit diving
+ into the details for that here.
+
+ The example also demonstrates a simple way of measuring the cost of
+ rendering a frame on the CPU and the GPU. Offscreen-rendered frames are well
+ suited for this due to certain internal QRhi behavior, which implies that
+ operations that otherwise are asynchronous (in the sense that they complete
+ only when rendering a subsequent frame), are guaranteed to be ready once \l
+ QRhi::endOffscreenFrame() (i.e., QQuickRenderControl::endFrame()) returns.
+ We use this knowledge when reading back the texture, and it applies also to
+ GPU timestamps as well. That is why the application can display the GPU time
+ for each frame, while guaranteeing that the time actually refers to that
+ particular frame (not an earlier one). See
+ \l{QRhiCommandBuffer::lastCompletedGpuTime()}{lastCompletedGpuTime()} for
+ details around GPU timings. The CPU side timings are taken using
+ \l QElapsedTimer.
+
+ \snippet rendercontrol/rendercontrol_rhi/main.cpp render-core
+
+ One important piece is the stepping of Qt Quick animations. As we do not
+ have an on-screen window that can drive the animation system either via
+ measuring elapsed time, an ordinary timer, or presentation rate-based
+ throttling, redirecting the Qt Quick rendering often implies that the
+ driving of animations needs to be taken over by the application. Otherwise,
+ animations function based on a plain system timer, but the actual elapsed
+ time will often have nothing to do with what the offscreen-rendered scene is
+ expected to perceive. Consider rendering 5 frames in a row, in a tight loop.
+ How the animations in those 5 frames move depends on the speed with which
+ the CPU executes the loop iterations. That is almost never ideal. To ensure
+ consistent animations, install a custom QAnimationDriver. While this is
+ an undocumented (but public) API meant for advanced users, the example here
+ provides a simple example of using it.
+
+ \snippet rendercontrol/rendercontrol_rhi/main.cpp anim-driver
+
+ The application has a \l QSlider that can be used to change the animation
+ step value from the default 16 milliseconds to something else. Note the call
+ to the setStep() function of our QAnimationDriver subclass.
+
+ \snippet rendercontrol/rendercontrol_rhi/main.cpp anim-slider
+
+ \note Installing the custom animation driver is made optional via the
+ \c animCheckBox check box. This allows comparing the effect of having and
+ not having a custom animation driver installed. In addition, on some
+ platforms (and perhaps depending on the theme), having the custom driver
+ enabled may lead to lags in widget drawing. This is as expected, because if
+ some widget animation (e.g. highlight of a QPushButton or QCheckBox) is
+ managed via \l QPropertyAnimation and similar, then those animation are
+ driven by the same QAnimationDriver, and that does not advance until a new
+ frame is requested by clicking on the buttons.
+
+ Advancing the animations is done before each frame (i.e., before the
+ QQuickRenderControl::beginFrame() call) by simply calling advance():
+
+ \snippet rendercontrol/rendercontrol_rhi/main.cpp anim-step
+
+ \sa QRhi, QQuickRenderControl, QQuickWindow
+*/
diff --git a/examples/quick/rendercontrol/rendercontrol_rhi/main.cpp b/examples/quick/rendercontrol/rendercontrol_rhi/main.cpp
new file mode 100644
index 0000000000..76f2ade0a9
--- /dev/null
+++ b/examples/quick/rendercontrol/rendercontrol_rhi/main.cpp
@@ -0,0 +1,640 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QMainWindow>
+#include <QApplication>
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QMenuBar>
+#include <QStatusBar>
+#include <QFileDialog>
+#include <QMessageBox>
+#include <QLabel>
+#include <QScrollArea>
+#include <QGridLayout>
+#include <QPushButton>
+#include <QSlider>
+#include <QCheckBox>
+#include <QScrollBar>
+#include <QListWidget>
+#include <QPainter>
+
+#include <QQuickWindow>
+#include <QQuickRenderControl>
+#include <QQuickRenderTarget>
+#include <QQuickGraphicsDevice>
+#include <QQuickGraphicsConfiguration>
+#include <QQuickItem>
+#include <QQmlEngine>
+#include <QQmlComponent>
+
+#include <QAnimationDriver>
+#include <QElapsedTimer>
+
+#include <rhi/qrhi.h>
+
+//! [anim-driver]
+class AnimationDriver : public QAnimationDriver
+{
+public:
+ AnimationDriver(QObject *parent = nullptr)
+ : QAnimationDriver(parent),
+ m_step(16)
+ {
+ }
+
+ void setStep(int milliseconds)
+ {
+ m_step = milliseconds;
+ }
+
+ void advance() override
+ {
+ m_elapsed += m_step;
+ advanceAnimation();
+ }
+
+ qint64 elapsed() const override
+ {
+ return m_elapsed;
+ }
+
+private:
+ int m_step;
+ qint64 m_elapsed = 0;
+};
+//! [anim-driver]
+
+class ImageLabel;
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow();
+ ~MainWindow();
+
+ void load(const QString &filename);
+ void render();
+
+private slots:
+ void openRequested();
+
+private:
+ void reset();
+ void stepAnimations();
+
+ AnimationDriver *m_animationDriver = nullptr;
+
+ std::unique_ptr<QQuickRenderControl> m_renderControl;
+ std::unique_ptr<QQuickWindow> m_scene;
+ std::unique_ptr<QQmlEngine> m_qmlEngine;
+ std::unique_ptr<QQmlComponent> m_qmlComponent;
+
+ std::unique_ptr<QRhiTexture> m_texture;
+ std::unique_ptr<QRhiRenderBuffer> m_ds;
+ std::unique_ptr<QRhiTextureRenderTarget> m_rt;
+ std::unique_ptr<QRhiRenderPassDescriptor> m_rpDesc;
+
+ qint64 m_frameCount = 0;
+ QSize m_thumbnailSize;
+ QVector<double> m_cpuTimes;
+ QVector<double> m_gpuTimes;
+
+ QLabel *m_apiMsg;
+ QLabel *m_statusMsg;
+ QLabel *m_avgCpuMsg;
+ QLabel *m_avgGpuMsg;
+ QLabel *m_driverInfoMsg;
+
+ QScrollArea *m_scrollArea;
+ QGridLayout *m_grid;
+ QVector<QWidget *> m_gridWidgets;
+
+public:
+#if QT_CONFIG(vulkan)
+ QVulkanInstance *m_vulkanInstance = nullptr;
+#endif
+
+ ImageLabel *m_focus = nullptr;
+ QLabel *m_fullSizeViewerWindow = nullptr;
+ QVector<QImage> m_frames;
+
+ bool m_mirrorVertically = false;
+};
+
+MainWindow::MainWindow()
+{
+ QWidget *centralWidget = new QWidget(this);
+ QVBoxLayout *vlayout = new QVBoxLayout(centralWidget);
+ QHBoxLayout *controlLayout = new QHBoxLayout;
+ vlayout->addLayout(controlLayout);
+
+ QPushButton *btn = new QPushButton(tr("Next frame"));
+ QObject::connect(btn, &QPushButton::clicked, btn, [this] {
+ render();
+ });
+ controlLayout->addWidget(btn);
+
+ QPushButton *btnMulti = new QPushButton(tr("Next 10 frames"));
+ QObject::connect(btnMulti, &QPushButton::clicked, btn, [this] {
+ for (int i = 0; i < 10; ++i)
+ QMetaObject::invokeMethod(this, &MainWindow::render, Qt::QueuedConnection);
+ });
+ controlLayout->addWidget(btnMulti);
+
+//! [anim-slider]
+ QSlider *animSlider = new QSlider;
+ animSlider->setOrientation(Qt::Horizontal);
+ animSlider->setMinimum(1);
+ animSlider->setMaximum(1000);
+ QLabel *animLabel = new QLabel;
+ QObject::connect(animSlider, &QSlider::valueChanged, animSlider, [this, animLabel, animSlider] {
+ if (m_animationDriver)
+ m_animationDriver->setStep(animSlider->value());
+ animLabel->setText(tr("Simulated elapsed time per frame: %1 ms").arg(animSlider->value()));
+ });
+ animSlider->setValue(16);
+ QCheckBox *animCheckBox = new QCheckBox(tr("Custom animation driver"));
+ animCheckBox->setToolTip(tr("Note: Installing the custom animation driver makes widget drawing unreliable, depending on the platform.\n"
+ "This is due to widgets themselves relying on QPropertyAnimation and similar, which are driven by the same QAnimationDriver.\n"
+ "In any case, the functionality of the widgets are not affected, just the rendering may lag behind.\n"
+ "When not checked, Qt Quick animations advance based on the system time, i.e. the time elapsed since the last press of the Next button."));
+ QObject::connect(animCheckBox, &QCheckBox::stateChanged, animCheckBox, [this, animCheckBox, animSlider, animLabel] {
+ if (animCheckBox->isChecked()) {
+ animSlider->setEnabled(true);
+ animLabel->setEnabled(true);
+ m_animationDriver = new AnimationDriver(this);
+ m_animationDriver->install();
+ m_animationDriver->setStep(animSlider->value());
+ } else {
+ animSlider->setEnabled(false);
+ animLabel->setEnabled(false);
+ delete m_animationDriver;
+ m_animationDriver = nullptr;
+ }
+ });
+ animSlider->setEnabled(false);
+ animLabel->setEnabled(false);
+ controlLayout->addWidget(animCheckBox);
+ controlLayout->addWidget(animLabel);
+ controlLayout->addWidget(animSlider);
+//! [anim-slider]
+
+ QCheckBox *mirrorCheckBox = new QCheckBox(tr("Mirror vertically"));
+ QObject::connect(mirrorCheckBox, &QCheckBox::stateChanged, mirrorCheckBox, [this, mirrorCheckBox] {
+ m_mirrorVertically = mirrorCheckBox->isChecked();
+ });
+ controlLayout->addWidget(mirrorCheckBox);
+
+ QGridLayout *gridLayout = new QGridLayout;
+ vlayout->addLayout(gridLayout);
+
+ QWidget *viewport = new QWidget;
+ m_grid = new QGridLayout(viewport);
+ m_scrollArea = new QScrollArea;
+ m_scrollArea->setWidgetResizable(true);
+ m_scrollArea->setWidget(viewport);
+ QObject::connect(m_scrollArea->verticalScrollBar(), &QScrollBar::rangeChanged, this, [this] {
+ m_scrollArea->verticalScrollBar()->setSliderPosition(m_scrollArea->verticalScrollBar()->maximum());
+ });
+
+ gridLayout->addWidget(m_scrollArea);
+ setCentralWidget(centralWidget);
+
+ QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
+ fileMenu->addAction(tr("&Open"), this, &MainWindow::openRequested);
+ fileMenu->addAction(tr("E&xit"), qApp, &QCoreApplication::quit);
+
+ m_statusMsg = new QLabel;
+ statusBar()->addWidget(m_statusMsg);
+ m_avgCpuMsg = new QLabel;
+ statusBar()->addWidget(m_avgCpuMsg);
+ m_avgGpuMsg = new QLabel;
+ statusBar()->addWidget(m_avgGpuMsg);
+ m_apiMsg = new QLabel;
+ statusBar()->addWidget(m_apiMsg);
+ m_driverInfoMsg = new QLabel;
+ statusBar()->addWidget(m_driverInfoMsg);
+}
+
+MainWindow::~MainWindow()
+{
+ delete m_fullSizeViewerWindow;
+}
+
+void MainWindow::openRequested()
+{
+ QString filename = QFileDialog::getOpenFileName(this, tr("Open file"), QString(), tr("QML files (*.qml);;All files (*.*)"));
+ if (!filename.isEmpty())
+ load(filename);
+}
+
+void MainWindow::reset()
+{
+ m_rpDesc.reset();
+ m_rt.reset();
+ m_ds.reset();
+ m_texture.reset();
+
+ m_qmlComponent.reset();
+ m_qmlEngine.reset();
+ m_scene.reset();
+ m_renderControl.reset();
+
+ m_apiMsg->setText(QString());
+ m_statusMsg->setText(QString());
+ m_avgCpuMsg->setText(QString());
+ m_avgGpuMsg->setText(QString());
+ m_driverInfoMsg->setText(QString());
+
+ m_frameCount = 0;
+
+ qDeleteAll(m_gridWidgets);
+ m_gridWidgets.clear();
+
+ delete m_fullSizeViewerWindow;
+ m_fullSizeViewerWindow = nullptr;
+ m_focus = nullptr;
+}
+
+//! [load-1]
+void MainWindow::load(const QString &filename)
+{
+ reset();
+
+ m_renderControl.reset(new QQuickRenderControl);
+ m_scene.reset(new QQuickWindow(m_renderControl.get()));
+
+ // enable lastCompletedGpuTime() on QRhiCommandBuffer, if supported by the underlying 3D API
+ QQuickGraphicsConfiguration config;
+ config.setTimestamps(true);
+ m_scene->setGraphicsConfiguration(config);
+
+#if QT_CONFIG(vulkan)
+ if (m_scene->graphicsApi() == QSGRendererInterface::Vulkan)
+ m_scene->setVulkanInstance(m_vulkanInstance);
+#endif
+
+ m_qmlEngine.reset(new QQmlEngine);
+ m_qmlComponent.reset(new QQmlComponent(m_qmlEngine.get(), QUrl::fromLocalFile(filename)));
+ if (m_qmlComponent->isError()) {
+ for (const QQmlError &error : m_qmlComponent->errors())
+ qWarning() << error.url() << error.line() << error;
+ QMessageBox::critical(this, tr("Cannot load QML scene"), tr("Failed to load %1").arg(filename));
+ reset();
+ return;
+ }
+//! [load-1]
+
+//! [load-instantiate]
+ QObject *rootObject = m_qmlComponent->create();
+ if (m_qmlComponent->isError()) {
+ for (const QQmlError &error : m_qmlComponent->errors())
+ qWarning() << error.url() << error.line() << error;
+ QMessageBox::critical(this, tr("Cannot load QML scene"), tr("Failed to create component"));
+ reset();
+ return;
+ }
+
+ QQuickItem *rootItem = qobject_cast<QQuickItem *>(rootObject);
+ if (!rootItem) {
+ // Get rid of the on-screen window, if the root object was a Window
+ if (QQuickWindow *w = qobject_cast<QQuickWindow *>(rootObject))
+ delete w;
+ QMessageBox::critical(this,
+ tr("Invalid root item in QML scene"),
+ tr("Root object is not a QQuickItem. If this is a scene with Window in it, note that such scenes are not supported."));
+ reset();
+ return;
+ }
+
+ if (rootItem->size().width() < 16)
+ rootItem->setSize(QSizeF(640, 360));
+
+ m_scene->contentItem()->setSize(rootItem->size());
+ m_scene->setGeometry(0, 0, rootItem->width(), rootItem->height());
+
+ rootItem->setParentItem(m_scene->contentItem());
+
+ m_statusMsg->setText(tr("QML scene loaded"));
+//! [load-instantiate]
+
+//! [load-graphicsinit]
+ const bool initSuccess = m_renderControl->initialize();
+ if (!initSuccess) {
+ QMessageBox::critical(this, tr("Cannot initialize renderer"), tr("QQuickRenderControl::initialize() failed"));
+ reset();
+ return;
+ }
+
+ const QSGRendererInterface::GraphicsApi api = m_scene->rendererInterface()->graphicsApi();
+ switch (api) {
+ case QSGRendererInterface::OpenGL:
+ m_apiMsg->setText(tr("OpenGL"));
+ break;
+ case QSGRendererInterface::Direct3D11:
+ m_apiMsg->setText(tr("D3D11"));
+ break;
+ case QSGRendererInterface::Direct3D12:
+ m_apiMsg->setText(tr("D3D12"));
+ break;
+ case QSGRendererInterface::Vulkan:
+ m_apiMsg->setText(tr("Vulkan"));
+ break;
+ case QSGRendererInterface::Metal:
+ m_apiMsg->setText(tr("Metal"));
+ break;
+ default:
+ m_apiMsg->setText(tr("Unknown 3D API"));
+ break;
+ }
+
+ QRhi *rhi = m_renderControl->rhi();
+ if (!rhi) {
+ QMessageBox::critical(this, tr("Cannot render"), tr("No QRhi from QQuickRenderControl"));
+ reset();
+ return;
+ }
+
+ m_driverInfoMsg->setText(QString::fromUtf8(rhi->driverInfo().deviceName));
+//! [load-graphicsinit]
+
+//! [texture-setup]
+ const QSize pixelSize = rootItem->size().toSize(); // no scaling, i.e. the item size is in pixels
+
+ m_texture.reset(rhi->newTexture(QRhiTexture::RGBA8, pixelSize, 1,
+ QRhiTexture::RenderTarget | QRhiTexture::UsedAsTransferSource));
+ if (!m_texture->create()) {
+ QMessageBox::critical(this, tr("Cannot render"), tr("Cannot create texture object"));
+ reset();
+ return;
+ }
+
+ m_ds.reset(rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil, pixelSize, 1));
+ if (!m_ds->create()) {
+ QMessageBox::critical(this, tr("Cannot render"), tr("Cannot create depth-stencil buffer"));
+ reset();
+ return;
+ }
+
+ QRhiTextureRenderTargetDescription rtDesc(QRhiColorAttachment(m_texture.get()));
+ rtDesc.setDepthStencilBuffer(m_ds.get());
+ m_rt.reset(rhi->newTextureRenderTarget(rtDesc));
+ m_rpDesc.reset(m_rt->newCompatibleRenderPassDescriptor());
+ m_rt->setRenderPassDescriptor(m_rpDesc.get());
+ if (!m_rt->create()) {
+ QMessageBox::critical(this, tr("Cannot render"), tr("Cannot create render target"));
+ reset();
+ return;
+ }
+
+ m_scene->setRenderTarget(QQuickRenderTarget::fromRhiRenderTarget(m_rt.get()));
+//! [texture-setup]
+
+ render();
+}
+
+class ImageLabel : public QLabel
+{
+public:
+ ImageLabel(MainWindow *mw, int frameIndex)
+ : m_mainWindow(mw),
+ m_frameIndex(frameIndex)
+ {
+ }
+
+ void mousePressEvent(QMouseEvent *) override {
+ if (m_mainWindow->m_focus != this) {
+ ImageLabel *oldFocus = m_mainWindow->m_focus;
+ m_mainWindow->m_focus = this;
+ if (oldFocus)
+ oldFocus->update();
+ update();
+ }
+ }
+
+ void paintEvent(QPaintEvent *e) override {
+
+ if (m_mainWindow->m_focus == this) {
+ QPainter p(this);
+ p.fillRect(0, 0, width(), height(), Qt::blue);
+ p.end();
+ QLabel::paintEvent(e);
+ p.begin(this);
+ p.setOpacity(0.5);
+ p.fillRect(0, 0, width(), height(), Qt::blue);
+ } else {
+ QLabel::paintEvent(e);
+ }
+ }
+
+ void mouseDoubleClickEvent(QMouseEvent *) override {
+ QLabel *&w(m_mainWindow->m_fullSizeViewerWindow);
+ if (!w)
+ w = new QLabel;
+ const QImage &image(m_mainWindow->m_frames[m_frameIndex]);
+ w->resize(image.width(), image.height());
+ w->setPixmap(QPixmap::fromImage(image));
+ w->show();
+ w->activateWindow();
+ }
+
+ MainWindow *m_mainWindow;
+ int m_frameIndex;
+};
+
+void MainWindow::render()
+{
+ if (!m_renderControl)
+ return;
+
+ if (m_frameCount > 0)
+ stepAnimations();
+
+ // this is only here to communicate the possibly changed mirrorVertically flag
+ QQuickRenderTarget quickRt = QQuickRenderTarget::fromRhiRenderTarget(m_rt.get());
+ quickRt.setMirrorVertically(m_mirrorVertically);
+ m_scene->setRenderTarget(quickRt);
+
+//! [render-core]
+ QElapsedTimer cpuTimer;
+ cpuTimer.start();
+
+ m_renderControl->polishItems();
+
+ m_renderControl->beginFrame();
+
+ m_renderControl->sync();
+ m_renderControl->render();
+
+ QRhi *rhi = m_renderControl->rhi();
+ QRhiReadbackResult readResult;
+ QRhiResourceUpdateBatch *readbackBatch = rhi->nextResourceUpdateBatch();
+ readbackBatch->readBackTexture(m_texture.get(), &readResult);
+ m_renderControl->commandBuffer()->resourceUpdate(readbackBatch);
+
+ m_renderControl->endFrame();
+
+ const double gpuRenderTimeMs = m_renderControl->commandBuffer()->lastCompletedGpuTime() * 1000.0;
+ const double cpuRenderTimeMs = cpuTimer.nsecsElapsed() / 1000000.0;
+
+ // m_renderControl->begin/endFrame() is based on QRhi's
+ // begin/endOffscreenFrame() under the hood, meaning it does not do
+ // pipelining, unlike swapchain-based frames, and therefore the readback is
+ // guaranteed to complete once endFrame() returns.
+ QImage wrapperImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888_Premultiplied);
+ QImage result;
+ if (rhi->isYUpInFramebuffer())
+ result = wrapperImage.mirrored();
+ else
+ result = wrapperImage.copy();
+
+//! [render-core]
+
+ m_gpuTimes.append(gpuRenderTimeMs);
+ m_cpuTimes.append(cpuRenderTimeMs);
+
+ m_frames.append(result);
+
+ if (m_thumbnailSize.isEmpty())
+ m_thumbnailSize = size() / 4;
+
+ const QImage thumbnail = result.scaled(m_thumbnailSize, Qt::KeepAspectRatio);
+
+ ImageLabel *image = new ImageLabel(this, m_frames.count() - 1);
+ image->setPixmap(QPixmap::fromImage(thumbnail));
+ image->setAlignment(Qt::AlignCenter);
+
+ QLabel *label = new QLabel(tr("Frame %1\nCPU: %2 ms GPU: %3 ms").arg(m_frameCount).arg(cpuRenderTimeMs, 0, 'f', 4).arg(gpuRenderTimeMs, 0, 'f', 4));
+ label->setAlignment(Qt::AlignCenter);
+ QWidget *container = new QWidget;
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(image);
+ layout->addWidget(label);
+ container->setLayout(layout);
+ m_grid->addWidget(container, m_frameCount / 3, m_frameCount % 3);
+ m_gridWidgets.append(container);
+
+ m_scrollArea->verticalScrollBar()->setSliderPosition(m_scrollArea->verticalScrollBar()->maximum());
+
+ m_frameCount += 1;
+
+ double v = 0;
+ for (double t : m_cpuTimes)
+ v += t;
+ v /= m_cpuTimes.count();
+ m_avgCpuMsg->setText(tr("Avg. CPU render time: %1 ms").arg(v, 0, 'f', 4));
+ if (m_cpuTimes.count() > 64) {
+ m_cpuTimes.clear();
+ m_cpuTimes.append(v);
+ }
+ v = 0;
+ for (double t : m_gpuTimes)
+ v += t;
+ v /= m_gpuTimes.count();
+ m_avgGpuMsg->setText(tr("Avg. GPU render time: %1 ms").arg(v, 0, 'f', 4));
+ if (m_gpuTimes.count() > 64) {
+ m_gpuTimes.clear();
+ m_gpuTimes.append(v);
+ }
+}
+
+//! [anim-step]
+void MainWindow::stepAnimations()
+{
+ if (m_animationDriver) {
+ // Now the Qt Quick scene will think that <slider value> milliseconds have
+ // elapsed and update animations accordingly when doing the next frame.
+ m_animationDriver->advance();
+ }
+}
+//! [anim-step]
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+#if QT_CONFIG(vulkan)
+ QVulkanInstance vulkanInstance;
+#endif
+
+ MainWindow mainWindow;
+
+//! [apiselect]
+ QDialog apiSelect;
+ QVBoxLayout *selLayout = new QVBoxLayout;
+ selLayout->addWidget(new QLabel(QObject::tr("Select graphics API to use")));
+ QListWidget *apiList = new QListWidget;
+ QVarLengthArray<QSGRendererInterface::GraphicsApi, 5> apiValues;
+#ifdef Q_OS_WIN
+ apiList->addItem("Direct3D 11");
+ apiValues.append(QSGRendererInterface::Direct3D11);
+ apiList->addItem("Direct3D 12");
+ apiValues.append(QSGRendererInterface::Direct3D12);
+#endif
+#if QT_CONFIG(metal)
+ apiList->addItem("Metal");
+ apiValues.append(QSGRendererInterface::Metal);
+#endif
+#if QT_CONFIG(vulkan)
+ apiList->addItem("Vulkan");
+ apiValues.append(QSGRendererInterface::Vulkan);
+#endif
+#if QT_CONFIG(opengl)
+ apiList->addItem("OpenGL / OpenGL ES");
+ apiValues.append(QSGRendererInterface::OpenGL);
+#endif
+ if (apiValues.isEmpty()) {
+ QMessageBox::critical(nullptr, QObject::tr("No 3D graphics API"), QObject::tr("No 3D graphics APIs are supported in this Qt build"));
+ return 1;
+ }
+//! [apiselect]
+ apiList->setCurrentRow(0);
+ selLayout->addWidget(apiList);
+ QPushButton *okBtn = new QPushButton("Ok");
+ okBtn->setDefault(true);
+ selLayout->addWidget(okBtn);
+ apiSelect.setLayout(selLayout);
+ apiSelect.resize(320, 200);
+ apiSelect.show();
+
+ QObject::connect(okBtn, &QPushButton::clicked, okBtn, [apiList, &apiSelect, &apiValues, &mainWindow
+#if QT_CONFIG(vulkan)
+ , &vulkanInstance
+#endif
+ ] {
+ const QSGRendererInterface::GraphicsApi api = apiValues[apiList->currentRow()];
+ QQuickWindow::setGraphicsApi(api);
+
+#if QT_CONFIG(vulkan)
+ if (api == QSGRendererInterface::Vulkan) {
+ vulkanInstance.setExtensions(QQuickGraphicsConfiguration::preferredInstanceExtensions());
+ if (!vulkanInstance.create()) {
+ QMessageBox::critical(nullptr, QObject::tr("Cannot initialize Vulkan"), QObject::tr("Failed to create VkInstance"));
+ return;
+ }
+ mainWindow.m_vulkanInstance = &vulkanInstance;
+ }
+#endif
+
+ mainWindow.resize(1280, 720);
+ mainWindow.show();
+ mainWindow.load(QLatin1String(":/demo.qml"));
+ // load() renders one frame, add 19 more
+ for (int i = 1; i <= 19; ++i) {
+ mainWindow.render();
+ // have to process events, e.g. to get queued metacalls delivered
+ QCoreApplication::processEvents();
+ }
+
+ apiSelect.close();
+ });
+
+ return app.exec();
+}
+
+#include "main.moc"
diff --git a/examples/quick/rendercontrol/rendercontrol_rhi/rendercontrol_rhi.pro b/examples/quick/rendercontrol/rendercontrol_rhi/rendercontrol_rhi.pro
new file mode 100644
index 0000000000..cd397f4451
--- /dev/null
+++ b/examples/quick/rendercontrol/rendercontrol_rhi/rendercontrol_rhi.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+
+QT += gui-private widgets qml quick
+
+SOURCES += main.cpp
+
+RESOURCES += rendercontrol_rhi.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/rendercontrol/rendercontrol_rhi
+INSTALLS += target
diff --git a/examples/quick/rendercontrol/rendercontrol_rhi/rendercontrol_rhi.qrc b/examples/quick/rendercontrol/rendercontrol_rhi/rendercontrol_rhi.qrc
new file mode 100644
index 0000000000..6d9c32d786
--- /dev/null
+++ b/examples/quick/rendercontrol/rendercontrol_rhi/rendercontrol_rhi.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/">
+ <file>demo.qml</file>
+ </qresource>
+</RCC>
diff --git a/examples/quick/responsivelayouts/CMakeLists.txt b/examples/quick/responsivelayouts/CMakeLists.txt
new file mode 100644
index 0000000000..699e71a433
--- /dev/null
+++ b/examples/quick/responsivelayouts/CMakeLists.txt
@@ -0,0 +1,47 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(responsivelayouts LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(responsivelayoutsexample
+ WIN32
+ MACOSX_BUNDLE
+ main.cpp
+)
+
+qt_add_qml_module(responsivelayoutsexample
+ URI responsivelayouts
+ QML_FILES
+ "responsivelayouts.qml"
+ RESOURCES
+ "icons/grid.svg"
+ "icons/text.svg"
+ "icons/settings.svg"
+)
+
+target_link_libraries(responsivelayoutsexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+install(TARGETS responsivelayoutsexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET responsivelayoutsexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/responsivelayouts/doc/images/qtquicklayouts-example-responsivelayouts.png b/examples/quick/responsivelayouts/doc/images/qtquicklayouts-example-responsivelayouts.png
new file mode 100644
index 0000000000..4cc8c14098
--- /dev/null
+++ b/examples/quick/responsivelayouts/doc/images/qtquicklayouts-example-responsivelayouts.png
Binary files differ
diff --git a/examples/quick/responsivelayouts/doc/src/qtquickresponsiveLayouts-examples.qdoc b/examples/quick/responsivelayouts/doc/src/qtquickresponsiveLayouts-examples.qdoc
new file mode 100644
index 0000000000..7c204fc5b4
--- /dev/null
+++ b/examples/quick/responsivelayouts/doc/src/qtquickresponsiveLayouts-examples.qdoc
@@ -0,0 +1,67 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+/*!
+ \title Qt Quick Layouts - Responsive Layout Example
+ \example responsivelayouts
+ \brief Demonstrates how to use LayoutItemProxy to make a responsive UI.
+ \ingroup qtquickexamples
+ \examplecategory {User Interface Components}
+
+ This example shows how to use LayoutProxyItems in combination with
+ \l{Qt Quick Layouts}{layouts} to create responsive layouts.
+
+ \include examples-run.qdocinc
+
+ \section1 Creating items
+
+ The \l {LayoutItemProxy} type allows to use the same item in different
+ layouts, although only one layout can be visible at the same time. This
+ can be used to create responsive layouts that adapt to the window or
+ screen size.
+
+ \image qtquicklayouts-example-responsivelayouts.png
+
+
+ First we need to define all items that should appear in or UI at some point.
+ We use a AnnotatedRect, which is a simple Rectangle with some added text.
+
+ \snippet responsivelayouts/responsivelayouts.qml item definition
+
+ \section1 Creating layouts
+
+ We can now declare various layouts using \l {LayoutItemProxy}{LayoutItemProxies},
+ targeting the previously declare items. A single layout can be defined as follows.
+
+ \snippet responsivelayouts/responsivelayouts.qml first layout
+
+ This snippet shows multiple ways to use the \l {LayoutItemProxy}.
+ The simplest method is to add \l {LayoutItemProxy}{LayoutItemProxies}
+ to a Layout like the RowLayout here. In addition we set an additional
+ \l {Layout} attached property to the LayoutProxyItem that will affect
+ the target item only in this particular layout. Further, we see that the
+ item \c {d} is not used in the first layout. Then it is automatically
+ hidden by the \l {LayoutItemProxy} in the second layout.
+ Another way of using it is shown by setting a \l {LayoutItemProxy} as
+ the content of a \l {Flickable}.
+
+ Another layout is declared as follows.
+
+ \snippet responsivelayouts/responsivelayouts.qml second layout
+
+ Here we show that \l {LayoutItemProxy}{LayoutItemProxies} can be used
+ together with real \l {Item}{Items} on the same hierarchy level. Generally,
+ the \l {LayoutItemProxy} is flexible and allows nested structures of
+ items and layouts.
+
+ \section1 Setting the layout
+
+ After two layouts, \c {smallLayout} and \c {largeLayout} are defined,
+ we can continue with setting the layout that fits to the current size of
+ the application. We define a new function for this code that we call
+ when the window is initialized and whenever the width changes:
+
+ \snippet responsivelayouts/responsivelayouts.qml setting the layout
+
+ Alternatively to calling this function after initialization we can hide all
+ but the correct layout for the initial size in the declarative code.
+*/
diff --git a/examples/quick/responsivelayouts/icons/grid.svg b/examples/quick/responsivelayouts/icons/grid.svg
new file mode 100644
index 0000000000..fd542d7dc4
--- /dev/null
+++ b/examples/quick/responsivelayouts/icons/grid.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4 13C2.89543 13 2 13.8954 2 15V20C2 21.1046 2.89543 22 4 22H9C10.1046 22 11 21.1046 11 20V15C11 13.8954 10.1046 13 9 13H4ZM15 13C13.8954 13 13 13.8954 13 15V20C13 21.1046 13.8954 22 15 22H20C21.1046 22 22 21.1046 22 20V15C22 13.8954 21.1046 13 20 13H15Z" fill="#0D0D0D"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2C2.89543 2 2 2.89543 2 4V9C2 10.1046 2.89543 11 4 11H9C10.1046 11 11 10.1046 11 9V4C11 2.89543 10.1046 2 9 2H4ZM15 2C13.8954 2 13 2.89543 13 4V9C13 10.1046 13.8954 11 15 11H20C21.1046 11 22 10.1046 22 9V4C22 2.89543 21.1046 2 20 2H15Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quick/responsivelayouts/icons/settings.svg b/examples/quick/responsivelayouts/icons/settings.svg
new file mode 100644
index 0000000000..3a13ccae16
--- /dev/null
+++ b/examples/quick/responsivelayouts/icons/settings.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M8.84998 4C8.84998 2.89543 9.74541 2 10.85 2H13.1222C14.2268 2 15.1222 2.89543 15.1222 4V4.59509C15.1229 4.59732 15.125 4.6023 15.1306 4.61031C15.1434 4.62838 15.1691 4.65242 15.2077 4.66935C15.852 4.95163 16.4515 5.31609 16.9931 5.74921C17.0261 5.77554 17.0594 5.787 17.0815 5.78982C17.0912 5.79106 17.0966 5.79055 17.0989 5.79008L17.9363 5.33741C18.8691 4.8332 20.0332 5.14455 20.5897 6.04706L21.6744 7.80604C22.2777 8.78435 21.9342 10.0686 20.9231 10.6152L19.9875 11.1209C19.9859 11.1226 19.9824 11.1269 19.9781 11.1358C19.9683 11.156 19.9595 11.1904 19.9636 11.2327C19.9877 11.4855 20 11.7414 20 12C20 12.2586 19.9877 12.5145 19.9636 12.7673C19.9595 12.8096 19.9683 12.844 19.9781 12.8642C19.9824 12.8732 19.9859 12.8774 19.9875 12.8791L20.923 13.3848C21.9341 13.9314 22.2776 15.2157 21.6743 16.194L20.5897 17.9529C20.0331 18.8554 18.869 19.1668 17.9362 18.6626L17.0989 18.2099C17.0966 18.2095 17.0912 18.209 17.0815 18.2102C17.0594 18.213 17.026 18.2245 16.9931 18.2508C16.4515 18.6839 15.852 19.0484 15.2077 19.3306C15.1691 19.3476 15.1434 19.3716 15.1306 19.3897C15.125 19.3977 15.1229 19.4027 15.1222 19.4049V20C15.1222 21.1046 14.2268 22 13.1222 22H10.85C9.74541 22 8.84998 21.1046 8.84998 20V19.3928C8.84931 19.3906 8.84725 19.3857 8.84163 19.3777C8.82894 19.3597 8.80351 19.3357 8.76508 19.3187C8.12675 19.0362 7.53272 18.6729 6.99586 18.242C6.96292 18.2156 6.92951 18.2041 6.90737 18.2012C6.89759 18.2 6.8922 18.2005 6.8899 18.201L6.03592 18.6626C5.10317 19.1668 3.93904 18.8554 3.38251 17.9529L2.29784 16.194C1.69457 15.2156 2.03805 13.9314 3.04914 13.3848L4.01099 12.8649C4.01265 12.8632 4.01607 12.859 4.02042 12.85C4.03023 12.8299 4.03897 12.7956 4.03503 12.7534C4.0118 12.5051 3.99995 12.2538 3.99995 12C3.99995 11.7462 4.0118 11.4949 4.03503 11.2466C4.03897 11.2045 4.03022 11.1701 4.02042 11.15C4.01607 11.1411 4.01265 11.1368 4.01098 11.1352L3.04909 10.6152C2.038 10.0686 1.69452 8.78435 2.29779 7.80604L3.38245 6.04707C3.93898 5.14456 5.10312 4.83322 6.03587 5.33742L6.88988 5.79907C6.89218 5.79953 6.89757 5.80005 6.90735 5.79879C6.92949 5.79594 6.9629 5.78441 6.99584 5.75797C7.53271 5.32709 8.12674 4.96379 8.76508 4.68128C8.80351 4.66427 8.82894 4.64029 8.84163 4.62231C8.84725 4.61434 8.84931 4.60938 8.84998 4.60716V4ZM8.85024 4.60578C8.85029 4.60578 8.85026 4.60619 8.85001 4.60703L8.85024 4.60578ZM6.88852 5.79864C6.88854 5.7986 6.88898 5.79869 6.88977 5.79904L6.88852 5.79864ZM4.00988 11.1343C4.00991 11.1342 4.01026 11.1344 4.0109 11.1351L4.00988 11.1343ZM4.00989 12.8658C4.00988 12.8657 4.01021 12.8654 4.01091 12.865L4.00989 12.8658ZM6.88854 18.2014C6.88851 18.2013 6.8889 18.2012 6.88979 18.201L6.88854 18.2014ZM19.9886 12.88C19.9885 12.88 19.9881 12.8797 19.9876 12.8792L19.9886 12.88ZM19.9886 11.12C19.9887 11.12 19.9883 11.1204 19.9876 11.1208L19.9886 11.12ZM17.1003 5.78965C17.1003 5.78968 17.0999 5.78986 17.099 5.79006L17.1003 5.78965ZM15.122 4.5937C15.122 4.59371 15.1221 4.59414 15.1222 4.59496L15.122 4.5937ZM13.1222 4L10.85 4V4.60808C10.85 5.49562 10.2774 6.19908 9.57449 6.51017C9.09654 6.7217 8.65096 6.99408 8.24769 7.31774C7.63839 7.80676 6.73261 7.98755 5.93958 7.55888L5.08481 7.09682L4.00015 8.8558L4.9628 9.37617C5.7538 9.80375 6.09888 10.6574 6.02633 11.4329C6.00889 11.6193 5.99995 11.8085 5.99995 12C5.99995 12.1915 6.00889 12.3807 6.02633 12.5671C6.09889 13.3426 5.75381 14.1963 4.9628 14.6239L4.0002 15.1442L5.08486 16.9032L5.9396 16.4411C6.73263 16.0125 7.63841 16.1933 8.2477 16.6823C8.65097 17.0059 9.09654 17.2783 9.57449 17.4898C10.2774 17.8009 10.85 18.5044 10.85 19.3919V20H13.1222V19.404C13.1222 18.5133 13.6987 17.8083 14.4051 17.4988C14.8875 17.2874 15.3372 17.0142 15.744 16.6889C16.3532 16.2017 17.2575 16.0222 18.0492 16.4501L18.8873 16.9032L19.972 15.1442L19.0357 14.6381C18.2434 14.2098 17.8986 13.3541 17.9726 12.5776C17.9907 12.3878 18 12.1951 18 12C18 11.8049 17.9907 11.6123 17.9726 11.4224C17.8986 10.6459 18.2434 9.79023 19.0357 9.36192L19.972 8.85579L18.8874 7.09681L18.0492 7.54989C17.2575 7.97786 16.3532 7.79836 15.744 7.31116C15.3372 6.98582 14.8875 6.71259 14.4051 6.50124C13.6987 6.19173 13.1222 5.48675 13.1222 4.596L13.1222 4Z" fill="#0D0D0D"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 14C13.1046 14 14 13.1046 14 12C14 10.8954 13.1046 10 12 10C10.8954 10 10 10.8954 10 12C10 13.1046 10.8954 14 12 14ZM12 16C14.2091 16 16 14.2091 16 12C16 9.79086 14.2091 8 12 8C9.79086 8 8 9.79086 8 12C8 14.2091 9.79086 16 12 16Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quick/responsivelayouts/icons/text.svg b/examples/quick/responsivelayouts/icons/text.svg
new file mode 100644
index 0000000000..a5066b7aff
--- /dev/null
+++ b/examples/quick/responsivelayouts/icons/text.svg
@@ -0,0 +1,4 @@
+<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4.5 11C3.94772 11 3.5 11.4477 3.5 12C3.5 12.5523 3.94772 13 4.5 13H20.5C21.0523 13 21.5 12.5523 21.5 12C21.5 11.4477 21.0523 11 20.5 11H4.5ZM3.5 16C3.5 15.4477 3.94772 15 4.5 15H20.5C21.0523 15 21.5 15.4477 21.5 16C21.5 16.5523 21.0523 17 20.5 17H4.5C3.94772 17 3.5 16.5523 3.5 16ZM3.5 20C3.5 19.4477 3.94772 19 4.5 19H20.5C21.0523 19 21.5 19.4477 21.5 20C21.5 20.5523 21.0523 21 20.5 21H4.5C3.94772 21 3.5 20.5523 3.5 20Z" fill="#0D0D0D"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4.5 3C3.94772 3 3.5 3.44772 3.5 4C3.5 4.55228 3.94772 5 4.5 5H20.5C21.0523 5 21.5 4.55228 21.5 4C21.5 3.44772 21.0523 3 20.5 3H4.5ZM4.5 7C3.94772 7 3.5 7.44772 3.5 8C3.5 8.55228 3.94772 9 4.5 9H20.5C21.0523 9 21.5 8.55228 21.5 8C21.5 7.44772 21.0523 7 20.5 7H4.5Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quick/responsivelayouts/main.cpp b/examples/quick/responsivelayouts/main.cpp
new file mode 100644
index 0000000000..9eb03f16eb
--- /dev/null
+++ b/examples/quick/responsivelayouts/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+
+int main(int argc, char* argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ QQmlApplicationEngine engine;
+ engine.load(QUrl(QStringLiteral("qrc:/qt/qml/responsivelayouts/responsivelayouts.qml")));
+
+ return app.exec();
+}
diff --git a/examples/quick/responsivelayouts/responsivelayouts.pro b/examples/quick/responsivelayouts/responsivelayouts.pro
new file mode 100644
index 0000000000..5450a6585a
--- /dev/null
+++ b/examples/quick/responsivelayouts/responsivelayouts.pro
@@ -0,0 +1,14 @@
+TEMPLATE = app
+
+QT += qml quick
+
+SOURCES += main.cpp
+
+RESOURCES += \
+ responsivelayouts.qrc
+EXAMPLE_FILES = \
+ responsivelayouts.qml
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/responsivelayouts
+INSTALLS += target
+
diff --git a/examples/quick/responsivelayouts/responsivelayouts.qml b/examples/quick/responsivelayouts/responsivelayouts.qml
new file mode 100644
index 0000000000..f9ef99612d
--- /dev/null
+++ b/examples/quick/responsivelayouts/responsivelayouts.qml
@@ -0,0 +1,160 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Window {
+ id: appWindow
+
+ visible: true
+ title: qsTr("Responsive layouts with LayoutItemProxy")
+
+ minimumHeight: 500
+ minimumWidth: 250
+
+ //! [item definition]
+ Rectangle {
+ id: contentItem
+ Layout.fillWidth: true
+ implicitHeight: grid.implicitHeight
+ implicitWidth: grid.implicitWidth
+ color: "#00414A"
+
+ GridLayout {
+ anchors.fill: parent
+ id: grid
+ columns: 2
+ anchors.margins: 8
+ Repeater {
+ model: 18
+ Rectangle {
+ Layout.fillWidth: true
+ Layout.margins: 8
+ implicitWidth: 200
+ implicitHeight: width
+ radius: width / 10
+ gradient: Gradient {
+ GradientStop { position: -0.2; color: "#2CDE85" }
+ GradientStop { position: 1.2; color: "#00414A" }
+ }
+ Text {
+ color: "#ffffff"
+ font.pointSize: 22
+ anchors.centerIn: parent
+ text: index
+ }
+ }
+ }
+ }
+ }
+
+ Button {
+ id: a
+ text: "Text"
+ icon.source: "./icons/text.svg"
+ Layout.fillWidth: true
+ Layout.margins: 3
+ }
+
+ Button {
+ id: b
+ text: "Grid 1"
+ icon.source: "./icons/grid.svg"
+ Layout.fillWidth: true
+ Layout.margins: 3
+ }
+
+ Button {
+ id: c
+ text: "Grid 2"
+ icon.source: "./icons/grid.svg"
+ Layout.fillWidth: true
+ Layout.margins: 3
+ }
+
+ Button {
+ id: d
+ text: "Settings"
+ icon.source: "./icons/settings.svg"
+ Layout.fillWidth: true
+ Layout.margins: 3
+ }
+ //! [item definition]
+
+ //! [first layout]
+ ColumnLayout {
+ id: smallLayout
+ anchors.fill: parent
+
+ //! [proxy in flickable]
+ Flickable {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ contentWidth: width
+ contentHeight: gl.implicitHeight
+ clip: true
+ ScrollIndicator.vertical: ScrollIndicator { }
+ LayoutItemProxy {
+ id: gl
+ width: parent.width
+ height: implicitHeight
+ target: contentItem
+ }
+ }
+ //! [proxy in flickable]
+
+ //! [proxy in layout]
+ RowLayout {
+ Layout.fillHeight: false
+ Layout.fillWidth: true
+ Layout.margins: 5
+ //! [layout property on proxy]
+ LayoutItemProxy{ target: a; }
+ //! [layout property on proxy]
+ LayoutItemProxy{ target: b; }
+ LayoutItemProxy{ target: c; }
+ }
+ //! [proxy in layout]
+ }
+ //! [first layout]
+
+ //! [second layout]
+ RowLayout {
+ id: largeLayout
+ anchors.fill: parent
+ ColumnLayout {
+ Layout.minimumWidth: 100
+ Layout.margins: 2
+ LayoutItemProxy{ target: a }
+ LayoutItemProxy{ target: b }
+ LayoutItemProxy{ target: c }
+ //! [spacer item]
+ Item { Layout.fillHeight: true }
+ //! [spacer item]
+ LayoutItemProxy{ target: d }
+ }
+
+ LayoutItemProxy {
+ Layout.fillHeight: true
+ Layout.fillWidth: false
+ target: contentItem
+ }
+ }
+ //! [second layout]
+
+ //! [setting the layout]
+ function setFittingLayout() {
+ if (width < 450) {
+ smallLayout.visible = true
+ largeLayout.visible = false
+ } else {
+ smallLayout.visible = false
+ largeLayout.visible = true
+ }
+ }
+ onWidthChanged: setFittingLayout()
+ Component.onCompleted: setFittingLayout()
+ //! [setting the layout]
+}
diff --git a/examples/quick/responsivelayouts/responsivelayouts.qrc b/examples/quick/responsivelayouts/responsivelayouts.qrc
new file mode 100644
index 0000000000..76c435692a
--- /dev/null
+++ b/examples/quick/responsivelayouts/responsivelayouts.qrc
@@ -0,0 +1,8 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/qt/qml/responsivelayouts">
+ <file>responsivelayouts.qml</file>
+ <file>icons/grid.svg</file>
+ <file>icons/text.svg</file>
+ <file>icons/settings.svg</file>
+</qresource>
+</RCC>
diff --git a/examples/quick/righttoleft/CMakeLists.txt b/examples/quick/righttoleft/CMakeLists.txt
deleted file mode 100644
index d040edce6d..0000000000
--- a/examples/quick/righttoleft/CMakeLists.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(righttoleft LANGUAGES CXX)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/righttoleft")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-
-qt_standard_project_setup()
-
-add_subdirectory("../shared" "shared")
-
-qt_add_executable(righttoleftexample
- WIN32
- MACOSX_BUNDLE
- main.cpp
-)
-
-qt_add_qml_module(righttoleftexample
- URI righttoleft
- AUTO_RESOURCE_PREFIX
- QML_FILES
- "layoutdirection/layoutdirection.qml"
- "layoutmirroring/layoutmirroring.qml"
- "righttoleft.qml"
- "textalignment/textalignment.qml"
-)
-
-target_link_libraries(righttoleftexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-install(TARGETS righttoleftexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-bundle_shared(righttoleftexample)
diff --git a/examples/quick/righttoleft/doc/images/qml-righttoleft-example.png b/examples/quick/righttoleft/doc/images/qml-righttoleft-example.png
deleted file mode 100644
index 03c3c48f10..0000000000
--- a/examples/quick/righttoleft/doc/images/qml-righttoleft-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/righttoleft/doc/src/righttoleft.qdoc b/examples/quick/righttoleft/doc/src/righttoleft.qdoc
deleted file mode 100644
index f5b390e186..0000000000
--- a/examples/quick/righttoleft/doc/src/righttoleft.qdoc
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-/*!
- \title Qt Quick Examples - Right to Left
- \example righttoleft
- \brief This is a collection of QML Right to Left examples.
- \image qml-righttoleft-example.png
- \ingroup qtquickexamples
-
- \e{Right to Left} is a collection of small QML examples relating to
- right to left (RTL) localization support. For more information,
- visit \l{Right-to-left User Interfaces}.
-
- These are the examples in Right to Left:
- \list
- \li \e{Layout Direction} - shows RTL layout direction
- \li \e{Layout Mirroring} - shows automatic mirroring of horizontal layouts
- in RTL locales
- \li \e{Text Alignment} - shows automatic mirroring of text alignment in RTL
- locales
- \endlist
-
- \include examples-run.qdocinc
-*/
diff --git a/examples/quick/righttoleft/layoutdirection/layoutdirection.qml b/examples/quick/righttoleft/layoutdirection/layoutdirection.qml
deleted file mode 100644
index c996278d88..0000000000
--- a/examples/quick/righttoleft/layoutdirection/layoutdirection.qml
+++ /dev/null
@@ -1,218 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Rectangle {
- id: root
- property bool mirror
- property int direction: (Qt.application as Application).layoutDirection
- LayoutMirroring.enabled: mirror
- LayoutMirroring.childrenInherit: true
- width: 320
- height: 480
- Column {
- id: columnA
- spacing: 10
- x: 10
- y: 10
- width: 140
-
- Item {
- id: rowCell
- }
- Text {
- text: "Row"
- anchors.horizontalCenter: parent.horizontalCenter
- }
-
- Row {
- layoutDirection: root.direction
- spacing: 10
- move: Transition {
- NumberAnimation {
- properties: "x"
- }
- }
- Repeater {
- model: 3
- Loader {
- required property int index
- sourceComponent: PositionerDelegate {}
- }
- }
- }
-
- Text {
- text: "Grid"
- anchors.horizontalCenter: parent.horizontalCenter
- }
-
- Grid {
- layoutDirection: root.direction
- spacing: 10; columns: 3
- move: Transition {
- NumberAnimation {
- properties: "x"
- }
- }
- Repeater {
- model: 8
- Loader {
- required property int index
- sourceComponent: PositionerDelegate {}
- }
- }
- }
-
- Text {
- text: "Flow"
- anchors.horizontalCenter: parent.horizontalCenter
- }
-
- Flow {
- layoutDirection: root.direction
- spacing: 10; width: parent.width
- move: Transition {
- NumberAnimation {
- properties: "x"
- }
- }
- Repeater {
- model: 8
- Loader {
- required property int index
- sourceComponent: PositionerDelegate {}
- }
- }
- }
- }
- Column {
- id: columnB
- spacing: 10
- x: 160
- y: 10
-
- Text {
- text: "ListView"
- anchors.horizontalCenter: parent.horizontalCenter
- }
-
- ListView {
- id: listView
- clip: true
- width: parent.width; height: 40
- layoutDirection: root.direction
- orientation: Qt.Horizontal
- model: 48
- delegate: ViewDelegate {}
- }
-
- Text {
- text: "GridView"
- anchors.horizontalCenter: parent.horizontalCenter
- }
-
- GridView {
- clip: true
- width: 150; height: 160
- cellWidth: 50; cellHeight: 50
- layoutDirection: root.direction
- model: 48
- delegate: ViewDelegate {}
- }
-
- Rectangle {
- height: 50; width: parent.width
- color: mouseArea.pressed ? "black" : "gray"
- Column {
- anchors.centerIn: parent
- Text {
- text: root.direction ? "Right to left" : "Left to right"
- color: "white"
- font.pixelSize: 16
- anchors.horizontalCenter: parent.horizontalCenter
- }
- Text {
- text: "(click here to toggle)"
- color: "white"
- font.pixelSize: 10
- font.italic: true
- anchors.horizontalCenter: parent.horizontalCenter
- }
- }
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- onClicked: {
- if (root.direction == Qt.LeftToRight) {
- root.direction = Qt.RightToLeft;
- } else {
- root.direction = Qt.LeftToRight;
- }
- }
- }
- }
-
- Rectangle {
- height: 50; width: parent.width
- color: mouseArea2.pressed ? "black" : "gray"
- Column {
- anchors.centerIn: parent
- Text {
- text: root.mirror ? "Mirrored" : "Not mirrored"
- color: "white"
- font.pixelSize: 16
- anchors.horizontalCenter: parent.horizontalCenter
- }
- Text {
- text: "(click here to toggle)"
- color: "white"
- font.pixelSize: 10
- font.italic: true
- anchors.horizontalCenter: parent.horizontalCenter
- }
- }
- MouseArea {
- id: mouseArea2
- anchors.fill: parent
- onClicked: {
- root.mirror = !root.mirror;
- }
- }
- }
- }
-
- component PositionerDelegate : Rectangle {
- width: 40
- height: 40
- property int lightness: parent.index + 1;
- color: Qt.rgba(0.8 / lightness, 0.8 / lightness, 0.8 / lightness, 1.0)
- Text {
- text: parent.lightness
- color: "white"
- font.pixelSize: 18
- anchors.centerIn: parent
- }
- }
-
- component ViewDelegate : Item {
- id: delegateItem
- required property int index
- width: (listView.effectiveLayoutDirection == Qt.LeftToRight ? (index == 48 - 1) : (index == 0)) ? 40 : 50
- Rectangle {
- width: 40; height: 40
- color: Qt.rgba(0.5 + (48 - delegateItem.index) * Math.random() / 48,
- 0.3 + delegateItem.index * Math.random() / 48,
- 0.3 * Math.random(),
- 1.0)
- Text {
- text: delegateItem.index + 1
- color: "white"
- font.pixelSize: 18
- anchors.centerIn: parent
- }
- }
- }
-}
-
diff --git a/examples/quick/righttoleft/layoutdirection/layoutdirection.qmlproject b/examples/quick/righttoleft/layoutdirection/layoutdirection.qmlproject
deleted file mode 100644
index 33cbb3c9e2..0000000000
--- a/examples/quick/righttoleft/layoutdirection/layoutdirection.qmlproject
+++ /dev/null
@@ -1,16 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "layoutdirection.qml"
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/quick/righttoleft/layoutmirroring/layoutmirroring.qml b/examples/quick/righttoleft/layoutmirroring/layoutmirroring.qml
deleted file mode 100644
index e5e2b16623..0000000000
--- a/examples/quick/righttoleft/layoutmirroring/layoutmirroring.qml
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Rectangle {
- id: root
- property bool mirror: (Qt.application as Application).layoutDirection == Qt.RightToLeft
- LayoutMirroring.enabled: mirror
- LayoutMirroring.childrenInherit: true
- width: 320
- height: 480
- color: "lightsteelblue"
-
- Column {
- spacing: 10
- anchors { left: parent.left; right: parent.right; top: parent.top; margins: 10 }
-
- Text {
- text: "Text alignment"
- anchors.left: parent.left
- }
-
- Rectangle {
- id: textStrings
- width: 148
- height: 85
- color: "white"
- anchors.left: parent.left
- Column {
- spacing: 5
- width: parent.width
- anchors { fill: parent; margins: 5 }
- Text {
- id: englishText
- width: parent.width
- text: "English text"
- }
- Text {
- id: arabicText
- width: parent.width
- text: "النص العربي"
- }
- Text {
- id: leftAlignedText
- width: parent.width
- text: "Text aligned to left"
- horizontalAlignment: Text.AlignLeft
- }
- Text {
- id: rightAlignedText
- width: parent.width
- text: "Text aligned to right"
- horizontalAlignment: Text.AlignRight
- }
- }
- }
-
- Text {
- text: "Item x"
- anchors.left: parent.left
- }
- Rectangle {
- id: items
- color: Qt.rgba(0.2, 0.2, 0.2, 0.6)
- width: 275; height: 95
- anchors.left: parent.left
- Rectangle {
- y: 5; x: 5
- width: 130; height: 40
- Text {
- text: "Item with x: 5\n(not mirrored)"
- anchors.centerIn: parent
- }
- }
- Rectangle {
- color: Qt.rgba(0.7, 0.7, 0.7)
- y: 50; x: mirror(5)
- width: 130; height: 40
- function mirror(value) {
- return LayoutMirroring.enabled ? (parent.width - width - value) : value;
- }
- Text {
- text: "Item with x: " + parent.x + "\n(manually mirrored)"
- anchors.centerIn: parent
- }
- }
- }
- Text {
- text: "Item anchors"
- anchors.left: parent.left
- }
-
- Rectangle {
- id: anchoredItems
- color: Qt.rgba(0.2, 0.2, 0.2, 0.6)
- width: 270; height: 170
- anchors.left: parent.left
- Rectangle {
- id: blackRectangle
- color: "black"
- width: 180; height: 90
- anchors { horizontalCenter: parent.horizontalCenter; horizontalCenterOffset: 30 }
- Text {
- text: "Horizontal center anchored\nwith offset 30\nto the horizontal center\nof the parent."
- color: "white"
- anchors.centerIn: parent
- }
- }
- Rectangle {
- id: whiteRectangle
- color: "white"
- width: 120; height: 70
- anchors { left: parent.left; bottom: parent.bottom }
- Text {
- text: "Left side anchored\nto the left side\nof the parent."
- color: "black"
- anchors.centerIn: parent
- }
- }
- Rectangle {
- id: grayRectangle
- color: Qt.rgba(0.7, 0.7, 0.7)
- width: 140; height: 90
- anchors { right: parent.right; bottom: parent.bottom }
- Text {
- text: "Right side anchored\nto the right side\nof the parent."
- anchors.centerIn: parent
- }
- }
- }
- }
-
- Rectangle {
- id: mirrorButton
- color: mouseArea2.pressed ? "black" : "gray"
- height: 50; width: 160
- anchors.right: parent.right
- anchors.top: parent.top
- anchors.margins: 10
- Column {
- anchors.centerIn: parent
- Text {
- text: root.mirror ? "Mirrored" : "Not mirrored"
- color: "white"
- font.pixelSize: 16
- anchors.horizontalCenter: parent.horizontalCenter
- }
- Text {
- text: "(click here to toggle)"
- color: "white"
- font.pixelSize: 10
- font.italic: true
- anchors.horizontalCenter: parent.horizontalCenter
- }
- }
- MouseArea {
- id: mouseArea2
- anchors.fill: parent
- onClicked: {
- root.mirror = !root.mirror;
- }
- }
- }
-}
-
diff --git a/examples/quick/righttoleft/layoutmirroring/layoutmirroring.qmlproject b/examples/quick/righttoleft/layoutmirroring/layoutmirroring.qmlproject
deleted file mode 100644
index 72bc04a8a9..0000000000
--- a/examples/quick/righttoleft/layoutmirroring/layoutmirroring.qmlproject
+++ /dev/null
@@ -1,16 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "layoutmirroring.qml"
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/quick/righttoleft/main.cpp b/examples/quick/righttoleft/main.cpp
deleted file mode 100644
index 08be06c4d5..0000000000
--- a/examples/quick/righttoleft/main.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include "../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(righttoleft/righttoleft)
diff --git a/examples/quick/righttoleft/righttoleft.pro b/examples/quick/righttoleft/righttoleft.pro
deleted file mode 100644
index 248564e07f..0000000000
--- a/examples/quick/righttoleft/righttoleft.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-RESOURCES += \
- righttoleft.qrc \
- ../shared/shared.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/righttoleft
-INSTALLS += target
diff --git a/examples/quick/righttoleft/righttoleft.qml b/examples/quick/righttoleft/righttoleft.qml
deleted file mode 100644
index 34d5724868..0000000000
--- a/examples/quick/righttoleft/righttoleft.qml
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import shared as Examples
-
-Item {
- height: 480
- width: 320
- Examples.LauncherList {
- id: ll
- anchors.fill: parent
- Component.onCompleted: {
- addExample("Layout Direction", "Shows RTL layouting in positioners and views", Qt.resolvedUrl("layoutdirection/layoutdirection.qml"));
- addExample("Layout Mirroring", "Shows RTL layouting in basic text and anchors", Qt.resolvedUrl("layoutmirroring/layoutmirroring.qml"));
- addExample("Text Alignment", "Shows RTL layouting in various text elements", Qt.resolvedUrl("textalignment/textalignment.qml"));
- }
- }
-}
diff --git a/examples/quick/righttoleft/righttoleft.qmlproject b/examples/quick/righttoleft/righttoleft.qmlproject
deleted file mode 100644
index f394d9030e..0000000000
--- a/examples/quick/righttoleft/righttoleft.qmlproject
+++ /dev/null
@@ -1,16 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "righttoleft.qml"
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/quick/righttoleft/righttoleft.qrc b/examples/quick/righttoleft/righttoleft.qrc
deleted file mode 100644
index 07355828cc..0000000000
--- a/examples/quick/righttoleft/righttoleft.qrc
+++ /dev/null
@@ -1,8 +0,0 @@
-<RCC>
- <qresource prefix="/qt/qml/righttoleft">
- <file>righttoleft.qml</file>
- <file>layoutdirection/layoutdirection.qml</file>
- <file>layoutmirroring/layoutmirroring.qml</file>
- <file>textalignment/textalignment.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/righttoleft/textalignment/textalignment.qml b/examples/quick/righttoleft/textalignment/textalignment.qml
deleted file mode 100644
index 49acc37531..0000000000
--- a/examples/quick/righttoleft/textalignment/textalignment.qml
+++ /dev/null
@@ -1,421 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Rectangle {
- id: root
- color: "white"
- //width: containerColumn.width
- //height: containerColumn.height + containerColumn.anchors.topMargin
- width: 320
- height: 480
-
- property bool mirror: false
- property int pxSz: 18
- property variant horizontalAlignment: undefined
-
- property variant editorType: ["Plain Text", "Styled Text", "Plain Rich Text", "Italic Rich Text", "Plain TextEdit", "Italic TextEdit", "TextInput"]
- property variant text: ["", " ", "Hello world!", "مرحبا العالم!", "Hello world! Hello!\nHello world! Hello!", "مرحبا العالم! مرحبا! مرحبا العالم! مرحبا!" ,"مرحبا العالم! مرحبا! مرحبا Hello world!\nالعالم! مرحبا!"]
- property variant description: ["empty text", "white-space-only text", "left-to-right text", "right-to-left text", "multi-line left-to-right text", "multi-line right-to-left text", "multi-line bidi text"]
- property variant textComponents: [plainTextComponent, styledTextComponent, richTextComponent, italicRichTextComponent, plainTextEdit, italicTextEdit, textInput]
-
- function shortText(horizontalAlignment) {
-
- // all the different QML editors have
- // the same alignment values
- switch (horizontalAlignment) {
- case Text.AlignLeft:
- return "L";
- case Text.AlignRight:
- return "R";
- case Text.AlignHCenter:
- return "C";
- case Text.AlignJustify:
- return "J";
- default:
- return "Error";
- }
- }
- Column {
- id: containerColumn
- spacing: 10
- width: editorTypeRow.width
- anchors { top: parent.top; topMargin: 5 }
- ListView {
- width: 320
- height: 320
- id: editorTypeRow
- model: root.editorType.length
- orientation: ListView.Horizontal
- cacheBuffer: 1000//Load the really expensive ones async if possible
- delegate: Item {
- id: delegate
-
- width: editorColumn.width
- height: editorColumn.height
-
- required property int index
-
- Column {
- id: editorColumn
- spacing: 5
- width: textColumn.width+10
- Text {
- text: root.editorType[delegate.index]
- font.pixelSize: 16
- anchors.horizontalCenter: parent.horizontalCenter
- }
- Column {
- id: textColumn
- spacing: 5
- anchors.horizontalCenter: parent.horizontalCenter
- Repeater {
- model: root.textComponents.length
- delegate: root.textComponents[delegate.index]
- }
- }
- }
- }
- }
- Column {
- spacing: 2
- width: parent.width
- Rectangle {
- // button
- height: 50; width: parent.width
- color: mouseArea.pressed ? "black" : "lightgray"
- Column {
- anchors.centerIn: parent
- Text {
- text: root.mirror ? "Mirrored" : "Not mirrored"
- color: "white"
- font.pixelSize: 16
- anchors.horizontalCenter: parent.horizontalCenter
- }
- Text {
- text: "(click here to toggle)"
- color: "white"
- font.pixelSize: 10
- font.italic: true
- anchors.horizontalCenter: parent.horizontalCenter
- }
- }
- MouseArea {
- id: mouseArea
- property int index: 0
- anchors.fill: parent
- onClicked: root.mirror = !root.mirror
- }
- }
- Rectangle {
- // button
- height: 50; width: parent.width
- color: mouseArea2.pressed ? "black" : "gray"
- Column {
- anchors.centerIn: parent
- Text {
- text: {
- if (root.horizontalAlignment == undefined)
- return "Implict alignment";
- switch (root.horizontalAlignment) {
- case Text.AlignLeft:
- return "Left alignment";
- case Text.AlignRight:
- return "Right alignment";
- case Text.AlignHCenter:
- return "Center alignment";
- case Text.AlignJustify:
- return "Justify alignment";
- }
- }
- color: "white"
- font.pixelSize: 16
- anchors.horizontalCenter: parent.horizontalCenter
- }
- Text {
- text: "(click here to toggle)"
- color: "white"
- font.pixelSize: 10
- font.italic: true
- anchors.horizontalCenter: parent.horizontalCenter
- }
- }
- MouseArea {
- id: mouseArea2
- property int index: 0
- anchors.fill: parent
- onClicked: {
- if (index < 0) {
- root.horizontalAlignment = undefined;
- } else {
- root.horizontalAlignment = Math.pow(2, index);
- }
- index = (index + 2) % 5 - 1;
- }
- }
- }
- }
- }
-
- Component {
- id: plainTextComponent
- Text {
- required property int index
-
- width: 180
- text: root.text[index]
- font.pixelSize: root.pxSz
- wrapMode: Text.WordWrap
- horizontalAlignment: root.horizontalAlignment
- LayoutMirroring.enabled: root.mirror
- textFormat: Text.RichText
- Rectangle {
- z: -1
- color: Qt.rgba(0.8, 0.2, 0.2, 0.3)
- anchors.fill: parent
- }
- Text {
- text: root.description[parent.index]
- color: Qt.rgba(1,1,1,1.0)
- anchors.centerIn: parent
- font.pixelSize: root.pxSz - 2
- Rectangle {
- z: -1
- color: Qt.rgba(0.3, 0, 0, 0.3)
- anchors { fill: parent; margins: -3 }
- }
- }
- Text {
- color: "white"
- text: root.shortText(parent.horizontalAlignment)
- anchors { top: parent.top; right: parent.right; margins: 2 }
- }
- }
- }
-
- Component {
- id: styledTextComponent
- Text {
- required property int index
-
- width: 180
- text: root.text[index]
- font.pixelSize: root.pxSz
- wrapMode: Text.WordWrap
- horizontalAlignment: root.horizontalAlignment
- LayoutMirroring.enabled: root.mirror
- textFormat: Text.RichText
- style: Text.Sunken
- styleColor: "white"
- Rectangle {
- z: -1
- color: Qt.rgba(0.8, 0.2, 0.2, 0.3)
- anchors.fill: parent
- }
- Text {
- text: root.description[parent.index]
- color: Qt.rgba(1,1,1,1.0)
- anchors.centerIn: parent
- font.pixelSize: root.pxSz - 2
- Rectangle {
- z: -1
- color: Qt.rgba(0.3, 0, 0, 0.3)
- anchors { fill: parent; margins: -3 }
- }
- }
- Text {
- color: "white"
- text: root.shortText(parent.horizontalAlignment)
- anchors { top: parent.top; right: parent.right; margins: 2 }
- }
- }
- }
-
- Component {
- id: richTextComponent
- Text {
- required property int index
-
- width: 180
- text: root.text[index]
- font.pixelSize: root.pxSz
- wrapMode: Text.WordWrap
- horizontalAlignment: root.horizontalAlignment
- LayoutMirroring.enabled: root.mirror
- textFormat: Text.RichText
- Rectangle {
- z: -1
- color: Qt.rgba(0.8, 0.2, 0.2, 0.3)
- anchors.fill: parent
- }
- Text {
- text: root.description[parent.index]
- color: Qt.rgba(1,1,1,1.0)
- anchors.centerIn: parent
- font.pixelSize: root.pxSz - 2
- Rectangle {
- z: -1
- color: Qt.rgba(0.3, 0, 0, 0.3)
- anchors { fill: parent; margins: -3 }
- }
- }
- Text {
- color: "white"
- text: root.shortText(parent.horizontalAlignment)
- anchors { top: parent.top; right: parent.right; margins: 2 }
- }
- }
- }
-
- Component {
- id: italicRichTextComponent
- Text {
- required property int index
-
- width: 180
- text: "<i>" + root.text[index] + "</i>"
- font.pixelSize: root.pxSz
- wrapMode: Text.WordWrap
- horizontalAlignment: root.horizontalAlignment
- LayoutMirroring.enabled: root.mirror
- textFormat: Text.RichText
- property variant backgroundColor: Qt.rgba(0.8, 0.2, 0.2, 0.3)
- Rectangle {
- z: -1
- color: parent.backgroundColor
- anchors.fill: parent
- }
- Text {
- text: root.description[parent.index]
- color: Qt.rgba(1,1,1,1.0)
- anchors.centerIn: parent
- font.pixelSize: root.pxSz - 2
- Rectangle {
- z: -1
- color: Qt.rgba(0.3, 0, 0, 0.3)
- anchors { fill: parent; margins: -3 }
- }
- }
- Text {
- color: "white"
- text: root.shortText(parent.horizontalAlignment)
- anchors { top: parent.top; right: parent.right; margins: 2 }
- }
- }
- }
-
- Component {
- id: plainTextEdit
- TextEdit {
- required property int index
-
- width: 180
- text: root.text[index]
- font.pixelSize: root.pxSz
- cursorVisible: true
- wrapMode: TextEdit.WordWrap
- horizontalAlignment: root.horizontalAlignment
- LayoutMirroring.enabled: root.mirror
- Rectangle {
- z: -1
- color: Qt.rgba(0.5, 0.5, 0.2, 0.3)
- anchors.fill: parent
- }
- Text {
- text: root.description[parent.index]
- color: Qt.rgba(1,1,1,1.0)
- anchors.centerIn: parent
- font.pixelSize: root.pxSz - 2
- Rectangle {
- z: -1
- color: Qt.rgba(0.3, 0, 0, 0.3)
- anchors { fill: parent; margins: -3 }
- }
- }
- Text {
- color: "white"
- text: root.shortText(parent.horizontalAlignment)
- anchors { top: parent.top; right: parent.right; margins: 2 }
- }
- }
- }
-
- Component {
- id: italicTextEdit
- TextEdit {
- required property int index
-
- width: 180
- text: "<i>" + root.text[index] + "<i>"
- font.pixelSize: root.pxSz
- cursorVisible: true
- wrapMode: TextEdit.WordWrap
- textFormat: TextEdit.RichText
- horizontalAlignment: root.horizontalAlignment
- LayoutMirroring.enabled: root.mirror
- Rectangle {
- z: -1
- color: Qt.rgba(0.5, 0.5, 0.2, 0.3)
- anchors.fill: parent
- }
- Text {
- text: root.description[parent.index]
- color: Qt.rgba(1,1,1,1.0)
- anchors.centerIn: parent
- font.pixelSize: root.pxSz - 2
- Rectangle {
- z: -1
- color: Qt.rgba(0.3, 0, 0, 0.3)
- anchors { fill: parent; margins: -3 }
- }
- }
- Text {
- color: "white"
- text: root.shortText(parent.horizontalAlignment)
- anchors { top: parent.top; right: parent.right; margins: 2 }
- }
- }
- }
-
- Component {
- id: textInput
- Item {
- id: textDelegate
- required property int index
- width: 180
- height: textInput.text.length > 20 ? 3*textInput.height : textInput.height
- TextInput {
- id: textInput
- width: 180
- text: root.text[textDelegate.index]
- font.pixelSize: root.pxSz
- cursorVisible: true
- horizontalAlignment: root.horizontalAlignment
- LayoutMirroring.enabled: root.mirror
- Rectangle {
- z: -1
- color: Qt.rgba(0.6, 0.4, 0.2, 0.3)
- anchors.fill: parent
- }
- Text {
- text: root.description[textDelegate.index]
- color: Qt.rgba(1,1,1,1.0)
- anchors.centerIn: parent
- font.pixelSize: root.pxSz - 2
- Rectangle {
- z: -1
- color: Qt.rgba(0.3, 0, 0, 0.3)
- anchors { fill: parent; margins: -3 }
- }
- }
- Text {
- color: "white"
- text: root.shortText(parent.horizontalAlignment)
- anchors { top: parent.top; right: parent.right; margins: 2 }
- }
- }
- }
- }
-}
-
diff --git a/examples/quick/righttoleft/textalignment/textalignment.qmlproject b/examples/quick/righttoleft/textalignment/textalignment.qmlproject
deleted file mode 100644
index e4b5061364..0000000000
--- a/examples/quick/righttoleft/textalignment/textalignment.qmlproject
+++ /dev/null
@@ -1,16 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "textalignment.qml"
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/quick/scenegraph/CMakeLists.txt b/examples/quick/scenegraph/CMakeLists.txt
index 834267b46e..19ab9fc73d 100644
--- a/examples/quick/scenegraph/CMakeLists.txt
+++ b/examples/quick/scenegraph/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_internal_add_example(customgeometry)
qt_internal_add_example(custommaterial)
@@ -7,8 +7,9 @@ qt_internal_add_example(graph)
qt_internal_add_example(threadedanimation)
qt_internal_add_example(twotextureproviders)
qt_internal_add_example(customrendernode)
+qt_internal_add_example(rhiunderqml)
+qt_internal_add_example(rhitextureitem)
if(QT_FEATURE_opengl OR QT_FEATURE_opengles2 OR QT_FEATURE_opengles3)
- qt_internal_add_example(fboitem)
qt_internal_add_example(openglunderqml)
endif()
if(IOS OR MACOS)
diff --git a/examples/quick/scenegraph/customgeometry/CMakeLists.txt b/examples/quick/scenegraph/customgeometry/CMakeLists.txt
index 5662266f41..14b585aa0d 100644
--- a/examples/quick/scenegraph/customgeometry/CMakeLists.txt
+++ b/examples/quick/scenegraph/customgeometry/CMakeLists.txt
@@ -1,15 +1,9 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(customgeometry_declarative LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/customgeometry")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick)
qt_standard_project_setup()
@@ -20,9 +14,9 @@ qt_add_executable(customgeometry_declarative WIN32 MACOSX_BUNDLE
)
target_link_libraries(customgeometry_declarative PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
)
qt_add_qml_module(customgeometry_declarative
@@ -33,7 +27,16 @@ qt_add_qml_module(customgeometry_declarative
)
install(TARGETS customgeometry_declarative
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET customgeometry_declarative
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/customgeometry/doc/src/customgeometry.qdoc b/examples/quick/scenegraph/customgeometry/doc/src/customgeometry.qdoc
index 80ba600a7d..3ac09dd367 100644
--- a/examples/quick/scenegraph/customgeometry/doc/src/customgeometry.qdoc
+++ b/examples/quick/scenegraph/customgeometry/doc/src/customgeometry.qdoc
@@ -4,12 +4,13 @@
/*!
\example scenegraph/customgeometry
\title Scene Graph - Custom Geometry
+ \examplecategory {Graphics}
\ingroup qtquickexamples
\brief Shows how to implement a custom geometry in the Qt Quick Scene Graph.
- The custom geometry example shows how to create a QQuickItem which
+ The custom geometry example shows how to create a \l QQuickItem that
uses the scene graph API to build a custom geometry for the scene
- graph. It does this by creating a BezierCurve item which is made
+ graph. It does this by creating a \c BezierCurve item, which is made
part of the CustomGeometry module and makes use of this in a QML
file.
@@ -114,7 +115,7 @@
\snippet scenegraph/customgeometry/beziercurve.cpp 6
The scene graph API provides a few commonly used material
- implementations. In this example we use the QSGFlatColorMaterial
+ implementations. In this example we use the QSGFlatColorMaterial,
which will fill the shape defined by the geometry with a solid
color. Again we pass the ownership of the material to the node, so
it can be cleaned up by the scene graph.
@@ -129,7 +130,7 @@
\snippet scenegraph/customgeometry/beziercurve.cpp 8
- To fill the geometry, we first extract the vertex array from
+ To fill the geometry we first extract the vertex array from
it. Since we are using one of the default attribute sets, we can
use the convenience function QSGGeometry::vertexDataAsPoint2D().
Then we go through each segment and calculate its position and
@@ -137,7 +138,7 @@
\snippet scenegraph/customgeometry/beziercurve.cpp 9
- In the end of the function, we return the node so the scene graph
+ At the end of the function we return the node so the scene graph
can render it.
\section1 Application Entry-Point
@@ -152,9 +153,26 @@
To make use of the BezierCurve item, we need to register it in the QML
engine, using the QML_ELEMENT macro. This gives it the name
BezierCurve and makes it part of the \c {CustomGeometry 1.0}
- module as defined in the customgeometry.pro file:
-
- \quotefile scenegraph/customgeometry/customgeometry.pro
+ module as defined in the project's build files:
+
+ \if defined(onlinedocs)
+ \tab {build-qt-app}{tab-cmake}{CMake}{checked}
+ \tab {build-qt-app}{tab-qmake}{qmake}{}
+ \tabcontent {tab-cmake}
+ \else
+ \section1 Using CMake
+ \endif
+ \quotefile scenegraph/customgeometry/CMakeLists.txt
+ \if defined(onlinedocs)
+ \endtabcontent
+ \tabcontent {tab-qmake}
+ \else
+ \section1 Using qmake
+ \endif
+ \quotefile scenegraph/customgeometry/customgeometry.pro
+ \if defined(onlinedocs)
+ \endtabcontent
+ \endif
As the bezier curve is drawn as line strips, we specify that
the view should be multisampled to get antialiasing. This is not
diff --git a/examples/quick/scenegraph/custommaterial/CMakeLists.txt b/examples/quick/scenegraph/custommaterial/CMakeLists.txt
index eacdd80642..8fe276d248 100644
--- a/examples/quick/scenegraph/custommaterial/CMakeLists.txt
+++ b/examples/quick/scenegraph/custommaterial/CMakeLists.txt
@@ -1,15 +1,9 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(custommaterial_declarative LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/custommaterial")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick ShaderTools)
qt_standard_project_setup()
@@ -20,10 +14,10 @@ qt_add_executable(custommaterial_declarative WIN32 MACOSX_BUNDLE
)
target_link_libraries(custommaterial_declarative PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(custommaterial_declarative
@@ -46,7 +40,16 @@ qt6_add_shaders(custommaterial_declarative "shaders"
)
install(TARGETS custommaterial_declarative
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET custommaterial_declarative
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/custommaterial/doc/src/custommaterial.qdoc b/examples/quick/scenegraph/custommaterial/doc/src/custommaterial.qdoc
index 997db4a88f..2bbcbbe263 100644
--- a/examples/quick/scenegraph/custommaterial/doc/src/custommaterial.qdoc
+++ b/examples/quick/scenegraph/custommaterial/doc/src/custommaterial.qdoc
@@ -4,6 +4,7 @@
/*!
\example scenegraph/custommaterial
\title Scene Graph - Custom Material
+ \examplecategory {Graphics}
\ingroup qtquickexamples
\brief Shows how to implement a custom material in the Qt Quick Scene Graph.
diff --git a/examples/quick/scenegraph/custommaterial/shaders/mandelbrot.frag b/examples/quick/scenegraph/custommaterial/shaders/mandelbrot.frag
index 0e5f63e7a8..72d63bb32c 100644
--- a/examples/quick/scenegraph/custommaterial/shaders/mandelbrot.frag
+++ b/examples/quick/scenegraph/custommaterial/shaders/mandelbrot.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
//! [1]
#version 440
@@ -27,21 +30,30 @@ void main()
c.x = (vTexCoord.x - 0.5) / ubuf.zoom + ubuf.center.x;
c.y = aspect_ratio * (vTexCoord.y - 0.5) / ubuf.zoom + ubuf.center.y;
- int i;
+ int iLast;
z = c;
- for (i = 0; i < ubuf.limit; i++) {
+ for (int i = 0; i < 1000000; i++) {
+ if (i >= ubuf.limit)
+ {
+ iLast = i;
+ break;
+ }
float x = (z.x * z.x - z.y * z.y) + c.x;
float y = (z.y * z.x + z.x * z.y) + c.y;
- if ((x * x + y * y) > 4.0) break;
+ if ((x * x + y * y) > 4.0)
+ {
+ iLast = i;
+ break;
+ }
z.x = x;
z.y = y;
}
- if (i == ubuf.limit) {
+ if (iLast == ubuf.limit) {
fragColor = vec4(0.0, 0.0, 0.0, 1.0);
} else {
- float f = (i * 1.0) / ubuf.limit;
+ float f = (iLast * 1.0) / ubuf.limit;
fragColor = mix(color1, color2, sqrt(f));
}
}
diff --git a/examples/quick/scenegraph/custommaterial/shaders/mandelbrot.frag.qsb b/examples/quick/scenegraph/custommaterial/shaders/mandelbrot.frag.qsb
index 550c0377ae..97ec1c2633 100644
--- a/examples/quick/scenegraph/custommaterial/shaders/mandelbrot.frag.qsb
+++ b/examples/quick/scenegraph/custommaterial/shaders/mandelbrot.frag.qsb
Binary files differ
diff --git a/examples/quick/scenegraph/custommaterial/shaders/mandelbrot.vert.qsb b/examples/quick/scenegraph/custommaterial/shaders/mandelbrot.vert.qsb
index ba2904d1c9..37105cfe60 100644
--- a/examples/quick/scenegraph/custommaterial/shaders/mandelbrot.vert.qsb
+++ b/examples/quick/scenegraph/custommaterial/shaders/mandelbrot.vert.qsb
Binary files differ
diff --git a/examples/quick/scenegraph/customrendernode/CMakeLists.txt b/examples/quick/scenegraph/customrendernode/CMakeLists.txt
index bff303029a..c00f019839 100644
--- a/examples/quick/scenegraph/customrendernode/CMakeLists.txt
+++ b/examples/quick/scenegraph/customrendernode/CMakeLists.txt
@@ -1,15 +1,9 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(customrendernode LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/customrendernode")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick ShaderTools)
qt_standard_project_setup()
@@ -20,10 +14,10 @@ qt_add_executable(customrendernode WIN32 MACOSX_BUNDLE
)
target_link_libraries(customrendernode PRIVATE
- Qt::Core
- Qt::GuiPrivate
- Qt::Qml
- Qt::QuickPrivate
+ Qt6::Core
+ Qt6::GuiPrivate
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(customrendernode
@@ -35,6 +29,8 @@ qt_add_qml_module(customrendernode
)
qt6_add_shaders(customrendernode "shaders"
+ # gl_VertexId is in earliest OpenGL ES 3.00, and GLSL 130
+ GLSL "300 es,130"
PREFIX
"/scenegraph/customrendernode"
FILES
@@ -43,7 +39,16 @@ qt6_add_shaders(customrendernode "shaders"
)
install(TARGETS customrendernode
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET customrendernode
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/customrendernode/customrender.cpp b/examples/quick/scenegraph/customrendernode/customrender.cpp
index e95341438e..ff5274c163 100644
--- a/examples/quick/scenegraph/customrendernode/customrender.cpp
+++ b/examples/quick/scenegraph/customrendernode/customrender.cpp
@@ -1,21 +1,20 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "customrender.h"
#include <QSGTextureProvider>
#include <QSGRenderNode>
#include <QSGTransformNode>
-#include <QSGRendererInterface>
#include <QQuickWindow>
#include <QFile>
-#include <private/qrhi_p.h>
-#include <private/qsgrendernode_p.h>
+#include <rhi/qrhi.h>
+
+//![node]
class CustomRenderNode : public QSGRenderNode
{
public:
CustomRenderNode(QQuickWindow *window);
- virtual ~CustomRenderNode();
void setVertices(const QList<QVector2D> &vertices);
@@ -26,44 +25,31 @@ public:
QSGRenderNode::StateFlags changedStates() const override;
protected:
- QQuickWindow *m_window = nullptr;
- QRhiBuffer *m_vertexBuffer = nullptr;
- QRhiBuffer *m_uniformBuffer = nullptr;
- QRhiShaderResourceBindings *m_resourceBindings = nullptr;
- QRhiGraphicsPipeline *m_pipeLine = nullptr;
+ QQuickWindow *m_window;
+ std::unique_ptr<QRhiBuffer> m_vertexBuffer;
+ std::unique_ptr<QRhiBuffer> m_uniformBuffer;
+ std::unique_ptr<QRhiShaderResourceBindings> m_resourceBindings;
+ std::unique_ptr<QRhiGraphicsPipeline> m_pipeline;
QList<QRhiShaderStage> m_shaders;
bool m_verticesDirty = true;
QList<QVector2D> m_vertices;
};
+//![node]
-CustomRenderNode::CustomRenderNode(QQuickWindow *window) : m_window(window)
+CustomRenderNode::CustomRenderNode(QQuickWindow *window)
+ : m_window(window)
{
- Q_ASSERT(QFile::exists(":/scenegraph/customrendernode/shaders/customrender.vert.qsb"));
- Q_ASSERT(QFile::exists(":/scenegraph/customrendernode/shaders/customrender.frag.qsb"));
-
QFile file;
file.setFileName(":/scenegraph/customrendernode/shaders/customrender.vert.qsb");
- file.open(QFile::ReadOnly);
- m_shaders.append(
- QRhiShaderStage(QRhiShaderStage::Vertex, QShader::fromSerialized(file.readAll())));
+ if (!file.open(QFile::ReadOnly))
+ qFatal("Failed to load vertex shader");
+ m_shaders.append(QRhiShaderStage(QRhiShaderStage::Vertex, QShader::fromSerialized(file.readAll())));
file.close();
file.setFileName(":/scenegraph/customrendernode/shaders/customrender.frag.qsb");
- file.open(QFile::ReadOnly);
- m_shaders.append(
- QRhiShaderStage(QRhiShaderStage::Fragment, QShader::fromSerialized(file.readAll())));
-}
-
-CustomRenderNode::~CustomRenderNode()
-{
- if (m_pipeLine)
- delete m_pipeLine;
- if (m_resourceBindings)
- delete m_resourceBindings;
- if (m_vertexBuffer)
- delete m_vertexBuffer;
- if (m_uniformBuffer)
- delete m_uniformBuffer;
+ if (!file.open(QFile::ReadOnly))
+ qFatal("Failed to load fragment shader");
+ m_shaders.append(QRhiShaderStage(QRhiShaderStage::Fragment, QShader::fromSerialized(file.readAll())));
}
void CustomRenderNode::setVertices(const QList<QVector2D> &vertices)
@@ -77,148 +63,129 @@ void CustomRenderNode::setVertices(const QList<QVector2D> &vertices)
markDirty(QSGNode::DirtyGeometry);
}
+//![node-release]
void CustomRenderNode::releaseResources()
{
- if (m_vertexBuffer) {
- delete m_vertexBuffer;
- m_vertexBuffer = nullptr;
- }
-
- if (m_uniformBuffer) {
- delete m_uniformBuffer;
- m_uniformBuffer = nullptr;
- }
-
- if (m_pipeLine) {
- delete m_pipeLine;
- m_pipeLine = nullptr;
- }
-
- if (m_resourceBindings) {
- delete m_resourceBindings;
- m_resourceBindings = nullptr;
- }
-
+ m_vertexBuffer.reset();
+ m_uniformBuffer.reset();
+ m_pipeline.reset();
+ m_resourceBindings.reset();
}
+//![node-release]
+//![node-flags]
QSGRenderNode::RenderingFlags CustomRenderNode::flags() const
{
- // We are rendering 2D content directly into the scene graph
- return { QSGRenderNode::NoExternalRendering | QSGRenderNode::DepthAwareRendering };
+ // We are rendering 2D content directly into the scene graph using QRhi, no
+ // direct usage of a 3D API. Hence NoExternalRendering. This is a minor
+ // optimization.
+
+ // Additionally, the node takes the item transform into account by relying
+ // on projectionMatrix() and matrix() (see prepare()) and never rendering at
+ // other Z coordinates. Hence DepthAwareRendering. This is a potentially
+ // bigger optimization.
+
+ return QSGRenderNode::NoExternalRendering | QSGRenderNode::DepthAwareRendering;
}
+//![node-flags]
QSGRenderNode::StateFlags CustomRenderNode::changedStates() const
{
- return {QSGRenderNode::StateFlag::ViewportState | QSGRenderNode::StateFlag::CullState};
+ // In Qt 6 only ViewportState and ScissorState matter, the rest is ignored.
+ return QSGRenderNode::StateFlag::ViewportState | QSGRenderNode::StateFlag::CullState;
}
+//![node-prepare]
void CustomRenderNode::prepare()
{
- QSGRendererInterface *renderInterface = m_window->rendererInterface();
- QRhiSwapChain *swapChain = static_cast<QRhiSwapChain *>(
- renderInterface->getResource(m_window, QSGRendererInterface::RhiSwapchainResource));
- QRhi *rhi = static_cast<QRhi *>(
- renderInterface->getResource(m_window, QSGRendererInterface::RhiResource));
- Q_ASSERT(swapChain);
- Q_ASSERT(rhi);
-
+ QRhi *rhi = m_window->rhi();
QRhiResourceUpdateBatch *resourceUpdates = rhi->nextResourceUpdateBatch();
if (m_verticesDirty) {
- if (m_vertexBuffer) {
- delete m_vertexBuffer;
- m_vertexBuffer = nullptr;
- }
+ m_vertexBuffer.reset();
m_verticesDirty = false;
}
if (!m_vertexBuffer) {
- m_vertexBuffer = rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer,
- m_vertices.count() * sizeof(QVector2D));
+ m_vertexBuffer.reset(rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer,
+ m_vertices.count() * sizeof(QVector2D)));
m_vertexBuffer->create();
- resourceUpdates->uploadStaticBuffer(m_vertexBuffer, m_vertices.constData());
+ resourceUpdates->uploadStaticBuffer(m_vertexBuffer.get(), m_vertices.constData());
}
-
+//![node-prepare]
if (!m_uniformBuffer) {
- m_uniformBuffer = rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 68);
+ m_uniformBuffer.reset(rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 68));
m_uniformBuffer->create();
}
if (!m_resourceBindings) {
- m_resourceBindings = rhi->newShaderResourceBindings();
+ m_resourceBindings.reset(rhi->newShaderResourceBindings());
m_resourceBindings->setBindings({ QRhiShaderResourceBinding::uniformBuffer(
0,
QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage,
- m_uniformBuffer) });
+ m_uniformBuffer.get()) });
m_resourceBindings->create();
}
- if (!m_pipeLine) {
+ if (!m_pipeline) {
+ m_pipeline.reset(rhi->newGraphicsPipeline());
- m_pipeLine = rhi->newGraphicsPipeline();
-
- //
// If layer.enabled == true on our QQuickItem, the rendering face is flipped for
// backends with isYUpInFrameBuffer == true (OpenGL). This does not happen with
// RHI backends with isYUpInFrameBuffer == false. We swap the triangle winding
// order to work around this.
- //
- m_pipeLine->setFrontFace(QSGRenderNodePrivate::get(this)->m_rt.rt->resourceType() == QRhiResource::TextureRenderTarget
+ m_pipeline->setFrontFace(renderTarget()->resourceType() == QRhiResource::TextureRenderTarget
&& rhi->isYUpInFramebuffer()
? QRhiGraphicsPipeline::CW
: QRhiGraphicsPipeline::CCW);
- m_pipeLine->setCullMode(QRhiGraphicsPipeline::Back);
- m_pipeLine->setTopology(QRhiGraphicsPipeline::TriangleStrip);
+ m_pipeline->setCullMode(QRhiGraphicsPipeline::Back);
+ m_pipeline->setTopology(QRhiGraphicsPipeline::TriangleStrip);
QRhiGraphicsPipeline::TargetBlend blend;
blend.enable = true;
- m_pipeLine->setTargetBlends({ blend });
- m_pipeLine->setShaderResourceBindings(m_resourceBindings);
- m_pipeLine->setShaderStages(m_shaders.cbegin(), m_shaders.cend());
- m_pipeLine->setDepthTest(true);
+ m_pipeline->setTargetBlends({ blend });
+ m_pipeline->setShaderResourceBindings(m_resourceBindings.get());
+ m_pipeline->setShaderStages(m_shaders.cbegin(), m_shaders.cend());
+ m_pipeline->setDepthTest(true);
QRhiVertexInputLayout inputLayout;
inputLayout.setBindings({ { 2 * sizeof(float) } });
inputLayout.setAttributes({ { 0, 0, QRhiVertexInputAttribute::Float2, 0 } });
- m_pipeLine->setVertexInputLayout(inputLayout);
- m_pipeLine->setRenderPassDescriptor(QSGRenderNodePrivate::get(this)->m_rt.rpDesc);
- m_pipeLine->create();
+ m_pipeline->setVertexInputLayout(inputLayout);
+ m_pipeline->setRenderPassDescriptor(renderTarget()->renderPassDescriptor());
+ m_pipeline->create();
}
- QMatrix4x4 mvp = *projectionMatrix() * *matrix();
- float opacity = inheritedOpacity();
-
- resourceUpdates->updateDynamicBuffer(m_uniformBuffer, 0, 64, mvp.constData());
- resourceUpdates->updateDynamicBuffer(m_uniformBuffer, 64, 4, &opacity);
+ const QMatrix4x4 mvp = *projectionMatrix() * *matrix();
+ const float opacity = inheritedOpacity();
- swapChain->currentFrameCommandBuffer()->resourceUpdate(resourceUpdates);
+ resourceUpdates->updateDynamicBuffer(m_uniformBuffer.get(), 0, 64, mvp.constData());
+ resourceUpdates->updateDynamicBuffer(m_uniformBuffer.get(), 64, 4, &opacity);
+ commandBuffer()->resourceUpdate(resourceUpdates);
}
-void CustomRenderNode::render(const RenderState *state)
+//![node-render]
+void CustomRenderNode::render(const RenderState *)
{
-
- QSGRendererInterface *renderInterface = m_window->rendererInterface();
- QRhiSwapChain *swapChain = static_cast<QRhiSwapChain *>(
- renderInterface->getResource(m_window, QSGRendererInterface::RhiSwapchainResource));
- Q_ASSERT(swapChain);
-
- QRhiCommandBuffer *cb = swapChain->currentFrameCommandBuffer();
- Q_ASSERT(cb);
-
- cb->setGraphicsPipeline(m_pipeLine);
- QSize renderTargetSize = QSGRenderNodePrivate::get(this)->m_rt.rt->pixelSize();
+ QRhiCommandBuffer *cb = commandBuffer();
+ cb->setGraphicsPipeline(m_pipeline.get());
+ QSize renderTargetSize = renderTarget()->pixelSize();
cb->setViewport(QRhiViewport(0, 0, renderTargetSize.width(), renderTargetSize.height()));
cb->setShaderResources();
- QRhiCommandBuffer::VertexInput vertexBindings[] = { { m_vertexBuffer, 0 } };
+ QRhiCommandBuffer::VertexInput vertexBindings[] = { { m_vertexBuffer.get(), 0 } };
cb->setVertexInput(0, 1, vertexBindings);
cb->draw(m_vertices.count());
}
+//![node-render]
-CustomRender::CustomRender(QQuickItem *parent) : QQuickItem(parent)
+//![item-ctor]
+CustomRender::CustomRender(QQuickItem *parent)
+ : QQuickItem(parent)
{
setFlag(ItemHasContents, true);
connect(this, &CustomRender::verticesChanged, this, &CustomRender::update);
}
+//![item-ctor]
-const QList<QVector2D> &CustomRender::vertices() const
+QList<QVector2D> CustomRender::vertices() const
{
return m_vertices;
}
@@ -232,6 +199,7 @@ void CustomRender::setVertices(const QList<QVector2D> &newVertices)
emit verticesChanged();
}
+//![item-update]
QSGNode *CustomRender::updatePaintNode(QSGNode *old, UpdatePaintNodeData *)
{
CustomRenderNode *node = static_cast<CustomRenderNode *>(old);
@@ -243,3 +211,4 @@ QSGNode *CustomRender::updatePaintNode(QSGNode *old, UpdatePaintNodeData *)
return node;
}
+//![item-update]
diff --git a/examples/quick/scenegraph/customrendernode/customrender.h b/examples/quick/scenegraph/customrendernode/customrender.h
index 962551c0b1..530e692678 100644
--- a/examples/quick/scenegraph/customrendernode/customrender.h
+++ b/examples/quick/scenegraph/customrendernode/customrender.h
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef CUSTOMRENDER_H
#define CUSTOMRENDER_H
@@ -7,6 +7,7 @@
#include <QQuickItem>
#include <QVector2D>
+//![item]
class CustomRender : public QQuickItem
{
Q_OBJECT
@@ -16,11 +17,10 @@ class CustomRender : public QQuickItem
public:
explicit CustomRender(QQuickItem *parent = nullptr);
- const QList<QVector2D> &vertices() const;
+ QList<QVector2D> vertices() const;
void setVertices(const QList<QVector2D> &newVertices);
signals:
-
void verticesChanged();
protected:
@@ -29,5 +29,6 @@ protected:
private:
QList<QVector2D> m_vertices;
};
+//![item]
#endif // CUSTOMRENDER_H
diff --git a/examples/quick/scenegraph/customrendernode/doc/images/customrendernode-example.gif b/examples/quick/scenegraph/customrendernode/doc/images/customrendernode-example.gif
deleted file mode 100644
index c4b36d19fb..0000000000
--- a/examples/quick/scenegraph/customrendernode/doc/images/customrendernode-example.gif
+++ /dev/null
Binary files differ
diff --git a/examples/quick/scenegraph/customrendernode/doc/images/customrendernode-example.jpg b/examples/quick/scenegraph/customrendernode/doc/images/customrendernode-example.jpg
new file mode 100644
index 0000000000..db4b50bbc0
--- /dev/null
+++ b/examples/quick/scenegraph/customrendernode/doc/images/customrendernode-example.jpg
Binary files differ
diff --git a/examples/quick/scenegraph/customrendernode/doc/src/customrendernode.qdoc b/examples/quick/scenegraph/customrendernode/doc/src/customrendernode.qdoc
index 1972d99c4d..3e3dd7d023 100644
--- a/examples/quick/scenegraph/customrendernode/doc/src/customrendernode.qdoc
+++ b/examples/quick/scenegraph/customrendernode/doc/src/customrendernode.qdoc
@@ -4,23 +4,125 @@
/*!
\example scenegraph/customrendernode
\title Scene Graph - Custom QSGRenderNode
+ \examplecategory {Graphics}
\ingroup qtquickexamples
\brief Shows how to use QSGRenderNode to implement custom rendering in the Qt Quick scenegraph.
- The custom render node example shows how to implement an item that is rendered using
- a custom QSGRenderNode.
+ The custom render node example shows how to implement a QQuickItem subclass
+ that is backed by a scene graph node derived from QSGRenderNode, providing
+ it's own QRhi-based rendering.
- \image customrendernode-example.gif
+ \image customrendernode-example.jpg
- QSGRenderNode allows direct access to the Render Hardware Interface (RHI) within the
- scenegraph. This example demonstrates how to create QSGRenderNode based render node
- and manage it with a custom item. The render node creates an RHI pipeline, updates
- vertex and uniform buffers, and renders into the RHI command buffer.
+ \note This example demonstrates advanced, low-level functionality performing
+ portable, cross-platform 3D rendering, while relying on APIs with limited
+ compatibility guarantee from the Qt Gui module. To be able to use the QRhi
+ APIs, the application links to \c{Qt::GuiPrivate} and includes
+ \c{<rhi/qrhi.h>}.
- \warning This example demonstrates advanced, low-level functionality
- performing portable, cross-platform 3D rendering, while relying on private
- APIs from the Qt Gui and Qt Quick modules. Developers are encouraged to
- carefully evaluate the potential lack of source and binary compatibility
- guarantees before using these APIs in their applications.
+ QSGRenderNode allows direct access to the Render Hardware Interface (RHI)
+ within the scenegraph. This example demonstrates how to create QSGRenderNode
+ based render node and manage it with a custom item. The render node creates
+ an RHI pipeline, updates vertex and uniform buffers, and renders into the
+ RHI command buffer.
- */
+ In practice this is a portable, cross-platform approach to perform custom
+ rendering inline with the scenegraph's own rendering, without resorting to a
+ native 3D API such as OpenGL, Metal, or Vulkan. Rather, the application uses
+ Qt's graphics and shader abstraction layer.
+
+ QSGRenderNode is the enabler for one of the three ways to integrate custom
+ 2D/3D rendering into a Qt Quick scene. The other two options are to perform
+ the rendering \c before or \c after the Qt Quick scene's own rendering,
+ or to generate a whole separate render pass targeting a dedicated render
+ target (a texture) and then have an item in the scene display the texture.
+ The QSGRenderNode-based approach is similar to the former, in the sense
+ that no additional render passes or render targets are involved, and allows
+ injecting custom rendering commands "inline" with the Qt Quick scene's
+ own rendering.
+
+ Refer to the following examples for these three approaches:
+
+ \list
+
+ \li \l{Scene Graph - RHI Under QML} - Demonstrates an "underlay" approach
+ based on the \l{QQuickWindow::beforeRendering()} signal. No additional
+ render pass and resources are needed, but composition and blending with the
+ rest of the Qt Quick scene is quite limited. Rendering "under" or "over" the
+ Qt Quick scene is the simplest approach.
+
+ \li \l{Scene Graph - RHI Texture Item} - Demonstrates creating a custom
+ QQuickItem that renders into a texture and displays a quad textured with the
+ generated content. This is very flexible and allows complete blending and
+ composition of the resulting 2D image with the rest of the Qt Quick scene.
+ That comes at the expense of an additional render pass and render target.
+
+ \li This example - Demonstrates the "inline" approach, where the Qt Quick
+ scene graph calls into the custom item and node implementation during the
+ main render pass. This approach can be great for performance (no extra
+ render passes, texturing, and blending are involved), but has potential
+ pitfalls and is the most complicated method.
+
+ \endlist
+
+ The custom item derives from QQuickItem. Most importantly, it reimplements
+ \l{QQuickItem::}{updatePaintNode()}.
+
+ \snippet scenegraph/customrendernode/customrender.h item
+
+ The constructor sets the \l{QQuickItem::}{ItemHasContents} flag to indicate
+ that this is a visual item.
+
+ \snippet scenegraph/customrendernode/customrender.cpp item-ctor
+
+ The updatePaintNode() implementation creates an instance of the custom
+ scenegraph node, if not yet done. The backing QSGNode tree for this item
+ consists of a single node, an instance of a QSGRenderNode-derived class.
+ When Qt Quick's threaded rendering model is in use, this function is called
+ on the render thread with the main thread blocked. That is why it is safe to
+ access main thread data (such as data stored in QQuickItems). The node, the
+ instance of the QSGRenderNode subclass, is going to "live on" the render
+ thread.
+
+ \snippet scenegraph/customrendernode/customrender.cpp item-update
+
+ The \c CustomRenderNode class derives from QSGRenderNode, reimplementing a
+ number of virtual functions. To manage QRhi resources (buffers, pipelines,
+ etc.), smart pointers are quite useful in this case, because the node is
+ destroyed by the scene graph together with the rest of the scene on the
+ render thread (if there is one) while the QRhi is still available, and
+ therefore releasing resources from the destructor or via smart pointers is
+ legal and safe.
+
+ \snippet scenegraph/customrendernode/customrender.cpp node
+
+ Well-behaving QSGRenderNode subclasses also reimplement
+ \l{QSGRenderNode::}{releaseResources()}, which in this case can be a simple
+ set of reset() calls.
+
+ \snippet scenegraph/customrendernode/customrender.cpp node-release
+
+ This QSGRenderNode is performing its rendering through the QRhi APIs (and
+ not directly through OpenGL, Vulkan, Metal, etc.), and it takes the item
+ transform into account (as it only really does 2D rendering). Hence
+ specifying the appropriate flags, which may bring a small performance
+ improvement.
+
+ \snippet scenegraph/customrendernode/customrender.cpp node-flags
+
+ The prepare() and render() functions are called every time the Qt Quick
+ scene renders. The first is called when preparing (but not yet recording)
+ the render pass. This typically creates resources, such as buffers,
+ textures, and graphics pipelines, if not yet done, and enqueues uploading
+ data to them.
+
+ \snippet scenegraph/customrendernode/customrender.cpp node-prepare
+
+ The render() function is called while the recording of a render pass,
+ targeting either the QQuickWindow's swapchain, or a texture (in case of
+ layered items, or when within a ShaderEffectSource), is active.
+
+ \snippet scenegraph/customrendernode/customrender.cpp node-render
+
+ \sa QSGRenderNode, QRhi, {Scene Graph - RHI Under QML}, {Scene Graph - RHI Texture Item}, {Qt Quick Scene Graph}
+*/
diff --git a/examples/quick/scenegraph/customrendernode/main.cpp b/examples/quick/scenegraph/customrendernode/main.cpp
index 5cc870b1aa..0ad93ec1de 100644
--- a/examples/quick/scenegraph/customrendernode/main.cpp
+++ b/examples/quick/scenegraph/customrendernode/main.cpp
@@ -1,12 +1,15 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
-#include <QtQuick/QQuickView>
+#include <QQuickView>
#include <QSurfaceFormat>
int main(int argc, char **argv)
{
+ QGuiApplication app(argc, argv);
+
+ // On macOS, request a core profile context in the unlikely case of using OpenGL.
#ifdef Q_OS_MACOS
QSurfaceFormat format = QSurfaceFormat::defaultFormat();
format.setMajorVersion(4);
@@ -15,30 +18,31 @@ int main(int argc, char **argv)
QSurfaceFormat::setDefaultFormat(format);
#endif
- QGuiApplication app(argc, argv);
-
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qrc:///scenegraph/customrendernode/main.qml"));
- view.setColor(QColor(0, 0, 0));
+ view.setColor(Qt::black);
view.show();
QString api;
switch (view.graphicsApi()) {
- case QSGRendererInterface::GraphicsApi::OpenGLRhi:
+ case QSGRendererInterface::OpenGL:
api = "RHI OpenGL";
break;
- case QSGRendererInterface::GraphicsApi::Direct3D11Rhi:
- api = "RHI Direct3D";
+ case QSGRendererInterface::Direct3D11:
+ api = "RHI Direct 3D 11";
+ break;
+ case QSGRendererInterface::Direct3D12:
+ api = "RHI Direct 3D 12";
break;
- case QSGRendererInterface::GraphicsApi::VulkanRhi:
+ case QSGRendererInterface::Vulkan:
api = "RHI Vulkan";
break;
- case QSGRendererInterface::GraphicsApi::MetalRhi:
+ case QSGRendererInterface::Metal:
api = "RHI Metal";
break;
- case QSGRendererInterface::GraphicsApi::NullRhi:
+ case QSGRendererInterface::Null:
api = "RHI Null";
break;
default:
@@ -48,5 +52,5 @@ int main(int argc, char **argv)
view.setTitle(QStringLiteral("Custom QSGRenderNode - ") + api);
- return QGuiApplication::exec();
+ return app.exec();
}
diff --git a/examples/quick/scenegraph/customrendernode/main.qml b/examples/quick/scenegraph/customrendernode/main.qml
index 5c9bc240ad..6a098e47f7 100644
--- a/examples/quick/scenegraph/customrendernode/main.qml
+++ b/examples/quick/scenegraph/customrendernode/main.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
@@ -45,11 +45,10 @@ Item {
anchors.bottom: parent.bottom
anchors.margins: 20
wrapMode: Text.WordWrap
- text: qsTr("This example creates a custom scenegraph QSGRenderNode render node and " +
- "demonstrates its use. The render node is placed in front of a red " +
- "rectangle, and behind a white rectangle. Rendering is demonstrated " +
- "directly into the scenegraph, and as a layered item. Opacity and " +
- "rotation transform changes are exercised.")
+ text: qsTr("This example creates a custom QQuickItem backed by a QSGRenderNode in the scene graph. " +
+ "The render node is placed in front of a red rectangle, and behind a white rectangle. " +
+ "Rendering is demonstrated directly into the scenegraph, and as a layered, texture-backed item (layer.enabled set to true). " +
+ "Opacity and rotation transform changes are exercised as well.")
Rectangle {
z:-1
@@ -103,6 +102,11 @@ Item {
}
+ Button {
+ text: qsTr("Toggle custom item visibility")
+ onClicked: custom.visible = !custom.visible
+ }
+
CustomRender {
id: custom
width: Math.min(parent.width, parent.height)
diff --git a/examples/quick/scenegraph/customrendernode/shaders/customrender.frag b/examples/quick/scenegraph/customrendernode/shaders/customrender.frag
index 5d284b7696..d9586ba90e 100644
--- a/examples/quick/scenegraph/customrendernode/shaders/customrender.frag
+++ b/examples/quick/scenegraph/customrendernode/shaders/customrender.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in vec3 color;
diff --git a/examples/quick/scenegraph/d3d11underqml/CMakeLists.txt b/examples/quick/scenegraph/d3d11underqml/CMakeLists.txt
index 2a08c39d59..dec029d8da 100644
--- a/examples/quick/scenegraph/d3d11underqml/CMakeLists.txt
+++ b/examples/quick/scenegraph/d3d11underqml/CMakeLists.txt
@@ -1,17 +1,11 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(d3d11underqml LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/d3d11underqml")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
qt_add_executable(d3d11underqml
@@ -25,10 +19,10 @@ set_target_properties(d3d11underqml PROPERTIES
)
target_link_libraries(d3d11underqml PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
d3d11
d3dcompiler
)
@@ -45,7 +39,16 @@ qt_add_qml_module(d3d11underqml
)
install(TARGETS d3d11underqml
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET d3d11underqml
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/d3d11underqml/doc/src/d3d11underqml.qdoc b/examples/quick/scenegraph/d3d11underqml/doc/src/d3d11underqml.qdoc
index 944d9de611..3d5a171d49 100644
--- a/examples/quick/scenegraph/d3d11underqml/doc/src/d3d11underqml.qdoc
+++ b/examples/quick/scenegraph/d3d11underqml/doc/src/d3d11underqml.qdoc
@@ -4,6 +4,7 @@
/*!
\example scenegraph/d3d11underqml
\title Scene Graph - Direct3D 11 Under QML
+ \examplecategory {Graphics}
\ingroup qtquickexamples
\brief Shows how to render directly with Direct3D 11 under a Qt Quick scene.
diff --git a/examples/quick/scenegraph/d3d11underqml/squircle.frag b/examples/quick/scenegraph/d3d11underqml/squircle.frag
index a907c84e58..713b2d89f2 100644
--- a/examples/quick/scenegraph/d3d11underqml/squircle.frag
+++ b/examples/quick/scenegraph/d3d11underqml/squircle.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
cbuffer buf : register(b0)
{
float ubuf_t : packoffset(c0);
diff --git a/examples/quick/scenegraph/fboitem/CMakeLists.txt b/examples/quick/scenegraph/fboitem/CMakeLists.txt
deleted file mode 100644
index f3fbce11aa..0000000000
--- a/examples/quick/scenegraph/fboitem/CMakeLists.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(fboitem LANGUAGES CXX)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/fboitem")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-
-qt_standard_project_setup()
-
-qt_add_executable(fboitem WIN32 MACOSX_BUNDLE
- ../shared/logorenderer.cpp ../shared/logorenderer.h
- fboinsgrenderer.cpp fboinsgrenderer.h
- main.cpp
-)
-
-target_include_directories(fboitem PUBLIC
- ../shared
-)
-
-target_link_libraries(fboitem PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-qt_add_qml_module(fboitem
- URI SceneGraphRendering
- QML_FILES main.qml
- RESOURCES shaders/checker.frag.qsb
- RESOURCE_PREFIX /scenegraph/fboitem
- NO_RESOURCE_TARGET_PATH
-)
-
-install(TARGETS fboitem
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/quick/scenegraph/fboitem/doc/images/fboitem-example.jpg b/examples/quick/scenegraph/fboitem/doc/images/fboitem-example.jpg
deleted file mode 100644
index 306b8bab20..0000000000
--- a/examples/quick/scenegraph/fboitem/doc/images/fboitem-example.jpg
+++ /dev/null
Binary files differ
diff --git a/examples/quick/scenegraph/fboitem/doc/src/fboitem.qdoc b/examples/quick/scenegraph/fboitem/doc/src/fboitem.qdoc
deleted file mode 100644
index daa784bf79..0000000000
--- a/examples/quick/scenegraph/fboitem/doc/src/fboitem.qdoc
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example scenegraph/fboitem
- \title Scene Graph - Rendering FBOs
- \ingroup qtquickexamples
-
- \brief Shows how to use FramebufferObjects with Qt Quick.
-
- \image fboitem-example.jpg
- */
diff --git a/examples/quick/scenegraph/fboitem/fboinsgrenderer.cpp b/examples/quick/scenegraph/fboitem/fboinsgrenderer.cpp
deleted file mode 100644
index e4c0e61843..0000000000
--- a/examples/quick/scenegraph/fboitem/fboinsgrenderer.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "fboinsgrenderer.h"
-#include "logorenderer.h"
-
-#include <QOpenGLFramebufferObject>
-
-#include <QtQuick/QQuickWindow>
-#include <qsgsimpletexturenode.h>
-
-class LogoInFboRenderer : public QQuickFramebufferObject::Renderer
-{
-public:
- LogoInFboRenderer()
- {
- logo.initialize();
- }
-
- void render() override {
- logo.render();
- update();
- }
-
- QOpenGLFramebufferObject *createFramebufferObject(const QSize &size) override {
- QOpenGLFramebufferObjectFormat format;
- format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
- format.setSamples(4);
- return new QOpenGLFramebufferObject(size, format);
- }
-
- LogoRenderer logo;
-};
-
-QQuickFramebufferObject::Renderer *FboInSGRenderer::createRenderer() const
-{
- return new LogoInFboRenderer();
-}
diff --git a/examples/quick/scenegraph/fboitem/fboinsgrenderer.h b/examples/quick/scenegraph/fboitem/fboinsgrenderer.h
deleted file mode 100644
index c6eb745d5f..0000000000
--- a/examples/quick/scenegraph/fboitem/fboinsgrenderer.h
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef FBOINSGRENDERER_H
-#define FBOINSGRENDERER_H
-
-#include <QtQuick/QQuickFramebufferObject>
-
-class LogoRenderer;
-
-class FboInSGRenderer : public QQuickFramebufferObject
-{
- Q_OBJECT
- QML_NAMED_ELEMENT(Renderer)
-public:
- Renderer *createRenderer() const;
-};
-
-#endif
diff --git a/examples/quick/scenegraph/fboitem/fboitem.pro b/examples/quick/scenegraph/fboitem/fboitem.pro
deleted file mode 100644
index 180c2288e2..0000000000
--- a/examples/quick/scenegraph/fboitem/fboitem.pro
+++ /dev/null
@@ -1,20 +0,0 @@
-QT += qml quick
-
-CONFIG += qmltypes
-QML_IMPORT_NAME = SceneGraphRendering
-QML_IMPORT_MAJOR_VERSION = 1
-
-HEADERS += fboinsgrenderer.h
-SOURCES += fboinsgrenderer.cpp main.cpp
-
-INCLUDEPATH += ../shared
-HEADERS += ../shared/logorenderer.h
-SOURCES += ../shared/logorenderer.cpp
-
-RESOURCES += fboitem.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/scenegraph/fboitem
-INSTALLS += target
-
-OTHER_FILES += \
- main.qml
diff --git a/examples/quick/scenegraph/fboitem/fboitem.qrc b/examples/quick/scenegraph/fboitem/fboitem.qrc
deleted file mode 100644
index 1782429798..0000000000
--- a/examples/quick/scenegraph/fboitem/fboitem.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/scenegraph/fboitem">
- <file>main.qml</file>
- <file>shaders/checker.frag.qsb</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/scenegraph/fboitem/main.cpp b/examples/quick/scenegraph/fboitem/main.cpp
deleted file mode 100644
index bbf3805002..0000000000
--- a/examples/quick/scenegraph/fboitem/main.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include <QGuiApplication>
-
-#include <QtQuick/QQuickView>
-
-#include "fboinsgrenderer.h"
-
-int main(int argc, char **argv)
-{
- QGuiApplication app(argc, argv);
-
- QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);
-
- QQuickView view;
- view.setResizeMode(QQuickView::SizeRootObjectToView);
- view.setSource(QUrl("qrc:///scenegraph/fboitem/main.qml"));
- view.show();
-
- return QGuiApplication::exec();
-}
diff --git a/examples/quick/scenegraph/fboitem/main.qml b/examples/quick/scenegraph/fboitem/main.qml
deleted file mode 100644
index db2df19197..0000000000
--- a/examples/quick/scenegraph/fboitem/main.qml
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-import SceneGraphRendering
-
-Item {
- width: 400
- height: 400
-
- // The checkers background
- ShaderEffect {
- id: tileBackground
- anchors.fill: parent
-
- property real tileSize: 16
- property color color1: Qt.rgba(0.9, 0.9, 0.9, 1);
- property color color2: Qt.rgba(0.85, 0.85, 0.85, 1);
-
- property size pixelSize: Qt.size(width / tileSize, height / tileSize);
-
- fragmentShader: "qrc:/scenegraph/fboitem/shaders/checker.frag.qsb"
- }
-
- Renderer {
- id: renderer
- anchors.fill: parent
- anchors.margins: 10
-
- // The transform is just to show something interesting..
- transform: [
- Rotation { id: rotation; axis.x: 0; axis.z: 0; axis.y: 1; angle: 0; origin.x: renderer.width / 2; origin.y: renderer.height / 2; },
- Translate { id: txOut; x: -renderer.width / 2; y: -renderer.height / 2 },
- Scale { id: scale; },
- Translate { id: txIn; x: renderer.width / 2; y: renderer.height / 2 }
- ]
- }
-
- // Just to show something interesting
- SequentialAnimation {
- PauseAnimation { duration: 5000 }
- ParallelAnimation {
- NumberAnimation { target: scale; property: "xScale"; to: 0.6; duration: 1000; easing.type: Easing.InOutBack }
- NumberAnimation { target: scale; property: "yScale"; to: 0.6; duration: 1000; easing.type: Easing.InOutBack }
- }
- NumberAnimation { target: rotation; property: "angle"; to: 80; duration: 1000; easing.type: Easing.InOutCubic }
- NumberAnimation { target: rotation; property: "angle"; to: -80; duration: 1000; easing.type: Easing.InOutCubic }
- NumberAnimation { target: rotation; property: "angle"; to: 0; duration: 1000; easing.type: Easing.InOutCubic }
- NumberAnimation { target: renderer; property: "opacity"; to: 0.5; duration: 1000; easing.type: Easing.InOutCubic }
- PauseAnimation { duration: 1000 }
- NumberAnimation { target: renderer; property: "opacity"; to: 0.8; duration: 1000; easing.type: Easing.InOutCubic }
- ParallelAnimation {
- NumberAnimation { target: scale; property: "xScale"; to: 1; duration: 1000; easing.type: Easing.InOutBack }
- NumberAnimation { target: scale; property: "yScale"; to: 1; duration: 1000; easing.type: Easing.InOutBack }
- }
- running: true
- loops: Animation.Infinite
- }
-
- Rectangle {
- id: labelFrame
- anchors.margins: -10
- radius: 5
- color: "white"
- border.color: "black"
- opacity: 0.8
- anchors.fill: label
- }
-
- Text {
- id: label
- anchors.bottom: renderer.bottom
- anchors.left: renderer.left
- anchors.right: renderer.right
- anchors.margins: 20
- wrapMode: Text.WordWrap
- text: qsTr("The blue rectangle with the vintage 'Q' is an FBO, rendered by the application on the scene graph rendering thread. The FBO is managed and displayed using the QQuickFramebufferObject convenience class.")
- }
-
-
-}
diff --git a/examples/quick/scenegraph/fboitem/shaders/checker.frag b/examples/quick/scenegraph/fboitem/shaders/checker.frag
deleted file mode 100644
index 1e4131d026..0000000000
--- a/examples/quick/scenegraph/fboitem/shaders/checker.frag
+++ /dev/null
@@ -1,22 +0,0 @@
-#version 440
-
-layout(std140, binding = 0) uniform buf {
- mat4 qt_Matrix;
- float qt_Opacity;
-
- vec4 color1;
- vec4 color2;
- vec2 pixelSize;
-} ubuf;
-
-layout(location = 0) in vec2 qt_TexCoord0;
-layout(location = 0) out vec4 fragColor;
-
-void main()
-{
- vec2 tc = sign(sin(3.14159265358979323846 * qt_TexCoord0 * ubuf.pixelSize));
- if (tc.x != tc.y)
- fragColor = ubuf.color1;
- else
- fragColor = ubuf.color2;
-}
diff --git a/examples/quick/scenegraph/fboitem/shaders/checker.frag.qsb b/examples/quick/scenegraph/fboitem/shaders/checker.frag.qsb
deleted file mode 100644
index 77cbf0b867..0000000000
--- a/examples/quick/scenegraph/fboitem/shaders/checker.frag.qsb
+++ /dev/null
Binary files differ
diff --git a/examples/quick/scenegraph/graph/CMakeLists.txt b/examples/quick/scenegraph/graph/CMakeLists.txt
index fee1e498d7..36d8c34f19 100644
--- a/examples/quick/scenegraph/graph/CMakeLists.txt
+++ b/examples/quick/scenegraph/graph/CMakeLists.txt
@@ -1,15 +1,9 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(graph LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/graph")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick)
qt_standard_project_setup()
@@ -28,9 +22,9 @@ set_target_properties(graph PROPERTIES
)
target_link_libraries(graph PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
)
qt_add_qml_module(graph
@@ -47,7 +41,16 @@ qt_add_qml_module(graph
)
install(TARGETS graph
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET graph
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/graph/doc/src/graph.qdoc b/examples/quick/scenegraph/graph/doc/src/graph.qdoc
index fb9dc08357..a76652498c 100644
--- a/examples/quick/scenegraph/graph/doc/src/graph.qdoc
+++ b/examples/quick/scenegraph/graph/doc/src/graph.qdoc
@@ -4,6 +4,7 @@
/*!
\example scenegraph/graph
\title Scene Graph - Graph
+ \examplecategory {Graphics}
\ingroup qtquickexamples
\brief Demonstrates how one can combine custom materials and geometries
diff --git a/examples/quick/scenegraph/graph/main.cpp b/examples/quick/scenegraph/graph/main.cpp
index 1b56c03daf..7070196a79 100644
--- a/examples/quick/scenegraph/graph/main.cpp
+++ b/examples/quick/scenegraph/graph/main.cpp
@@ -9,8 +9,6 @@
int main(int argc, char *argv[])
{
- qputenv("QSG_RHI", "1"); // ### Qt 6 remove, this will be the default anyway
-
QGuiApplication a(argc, argv);
QQuickView view;
diff --git a/examples/quick/scenegraph/graph/main.qml b/examples/quick/scenegraph/graph/main.qml
index e9b684c3ba..5f2abbbd58 100644
--- a/examples/quick/scenegraph/graph/main.qml
+++ b/examples/quick/scenegraph/graph/main.qml
@@ -15,27 +15,23 @@ Item {
anchors.margins: 100
function newSample(i) {
- return (Math.sin(i / 100.0 * Math.PI * 2) + 1) * 0.4 + Math.random() * 0.05;
+ return (Math.sin(i / 200.0 * Math.PI * 2) + 1) * 0.4 + Math.random() * 0.05;
}
Component.onCompleted: {
- for (var i=0; i<100; ++i)
+ for (var i=0; i<graph.offset; ++i)
appendSample(newSample(i));
}
- property int offset: 100;
+ property int offset: 200
}
- Timer {
- id: timer
- interval: 500
- repeat: true
+ FrameAnimation {
running: true
onTriggered: {
graph.removeFirstSample();
graph.appendSample(graph.newSample(++graph.offset));
}
-
}
Rectangle {
diff --git a/examples/quick/scenegraph/graph/shaders/line.frag b/examples/quick/scenegraph/graph/shaders/line.frag
index 44b5b24c94..b9531cede6 100644
--- a/examples/quick/scenegraph/graph/shaders/line.frag
+++ b/examples/quick/scenegraph/graph/shaders/line.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in float vT;
diff --git a/examples/quick/scenegraph/graph/shaders/noisy.frag b/examples/quick/scenegraph/graph/shaders/noisy.frag
index 8cea9de02b..0f13b83fd4 100644
--- a/examples/quick/scenegraph/graph/shaders/noisy.frag
+++ b/examples/quick/scenegraph/graph/shaders/noisy.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in vec2 vTexCoord;
@@ -8,7 +11,7 @@ layout(location = 0) out vec4 fragColor;
layout(std140, binding = 0) uniform buf {
mat4 qt_Matrix;
vec4 color;
- vec2 textureSize;
+ vec2 texCoordScale;
float qt_Opacity;
};
diff --git a/examples/quick/scenegraph/graph/shaders/noisy.frag.qsb b/examples/quick/scenegraph/graph/shaders/noisy.frag.qsb
index 1a49e93cf3..dd1739b1fe 100644
--- a/examples/quick/scenegraph/graph/shaders/noisy.frag.qsb
+++ b/examples/quick/scenegraph/graph/shaders/noisy.frag.qsb
Binary files differ
diff --git a/examples/quick/scenegraph/graph/shaders/noisy.vert b/examples/quick/scenegraph/graph/shaders/noisy.vert
index 5728f2a02f..057f1c8d16 100644
--- a/examples/quick/scenegraph/graph/shaders/noisy.vert
+++ b/examples/quick/scenegraph/graph/shaders/noisy.vert
@@ -9,7 +9,7 @@ layout(location = 1) out vec2 vShadeCoord;
layout(std140, binding = 0) uniform buf {
mat4 qt_Matrix;
vec4 color;
- vec2 textureSize;
+ vec2 texCoordScale;
float qt_Opacity;
};
@@ -17,6 +17,6 @@ out gl_PerVertex { vec4 gl_Position; };
void main() {
gl_Position = qt_Matrix * aVertex;
- vTexCoord = aVertex.xy * textureSize;
+ vTexCoord = aVertex.xy * texCoordScale;
vShadeCoord = aTexCoord;
}
diff --git a/examples/quick/scenegraph/graph/shaders/noisy.vert.qsb b/examples/quick/scenegraph/graph/shaders/noisy.vert.qsb
index ce2a828ead..9de384e3a6 100644
--- a/examples/quick/scenegraph/graph/shaders/noisy.vert.qsb
+++ b/examples/quick/scenegraph/graph/shaders/noisy.vert.qsb
Binary files differ
diff --git a/examples/quick/scenegraph/metaltextureimport/CMakeLists.txt b/examples/quick/scenegraph/metaltextureimport/CMakeLists.txt
index 70cb10dc6a..f76489116a 100644
--- a/examples/quick/scenegraph/metaltextureimport/CMakeLists.txt
+++ b/examples/quick/scenegraph/metaltextureimport/CMakeLists.txt
@@ -1,17 +1,11 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(metaltextureimport LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/metaltextureimport")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
qt_add_executable(metaltextureimport
@@ -29,10 +23,10 @@ set_target_properties(metaltextureimport PROPERTIES
target_link_libraries(metaltextureimport PUBLIC
"-framework Metal"
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
if(MACOS)
@@ -53,7 +47,16 @@ qt_add_qml_module(metaltextureimport
)
install(TARGETS metaltextureimport
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET metaltextureimport
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/metaltextureimport/doc/src/metaltextureimport.qdoc b/examples/quick/scenegraph/metaltextureimport/doc/src/metaltextureimport.qdoc
index e8383c7cf8..3b4912829e 100644
--- a/examples/quick/scenegraph/metaltextureimport/doc/src/metaltextureimport.qdoc
+++ b/examples/quick/scenegraph/metaltextureimport/doc/src/metaltextureimport.qdoc
@@ -4,6 +4,7 @@
/*!
\example scenegraph/metaltextureimport
\title Scene Graph - Metal Texture Import
+ \examplecategory {Graphics}
\ingroup qtquickexamples
\brief Shows how to use a texture created directly with Metal.
@@ -63,9 +64,8 @@
After copying the values we need, sync() also performs some graphics
resource initialization. The MTLDevice is queried from the scenegraph. Once
a MTLTexture is available, a QSGTexture wrapping (not owning) it is created
- via QQuickWindow::createTextureFromNativeObject(). This function is a
- modern equivalent to QQuickWindow::createTextureFromId() that is not tied
- to OpenGL. Finally, the QSGTexture is associated with the underlying
+ via \l QNativeInterface::QSGOpenGLTexture::fromNative().
+ Finally, the QSGTexture is associated with the underlying
materials by calling the base class' setTexture() function.
\snippet scenegraph/metaltextureimport/metaltextureimport.mm 6
diff --git a/examples/quick/scenegraph/metaltextureimport/squircle.frag b/examples/quick/scenegraph/metaltextureimport/squircle.frag
index 15f34624fe..8303e97006 100644
--- a/examples/quick/scenegraph/metaltextureimport/squircle.frag
+++ b/examples/quick/scenegraph/metaltextureimport/squircle.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#include <metal_stdlib>
#include <simd/simd.h>
diff --git a/examples/quick/scenegraph/metalunderqml/CMakeLists.txt b/examples/quick/scenegraph/metalunderqml/CMakeLists.txt
index 9bd54c637e..21c7b5c763 100644
--- a/examples/quick/scenegraph/metalunderqml/CMakeLists.txt
+++ b/examples/quick/scenegraph/metalunderqml/CMakeLists.txt
@@ -1,17 +1,11 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(metalunderqml LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/metalunderqml")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
qt_add_executable(metalunderqml
@@ -26,10 +20,10 @@ set_target_properties(metalunderqml PROPERTIES
target_link_libraries(metalunderqml PUBLIC
"-framework Metal"
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
if(MACOS)
@@ -50,7 +44,16 @@ qt_add_qml_module(metalunderqml
)
install(TARGETS metalunderqml
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET metalunderqml
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/metalunderqml/doc/src/metalunderqml.qdoc b/examples/quick/scenegraph/metalunderqml/doc/src/metalunderqml.qdoc
index b8e3750271..fa41ca489f 100644
--- a/examples/quick/scenegraph/metalunderqml/doc/src/metalunderqml.qdoc
+++ b/examples/quick/scenegraph/metalunderqml/doc/src/metalunderqml.qdoc
@@ -4,6 +4,7 @@
/*!
\example scenegraph/metalunderqml
\title Scene Graph - Metal Under QML
+ \examplecategory {Graphics}
\ingroup qtquickexamples
\brief Shows how to render directly with Metal under a Qt Quick scene.
diff --git a/examples/quick/scenegraph/metalunderqml/squircle.frag b/examples/quick/scenegraph/metalunderqml/squircle.frag
index 15f34624fe..8303e97006 100644
--- a/examples/quick/scenegraph/metalunderqml/squircle.frag
+++ b/examples/quick/scenegraph/metalunderqml/squircle.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#include <metal_stdlib>
#include <simd/simd.h>
diff --git a/examples/quick/scenegraph/openglunderqml/CMakeLists.txt b/examples/quick/scenegraph/openglunderqml/CMakeLists.txt
index cd64bb6172..8a95221811 100644
--- a/examples/quick/scenegraph/openglunderqml/CMakeLists.txt
+++ b/examples/quick/scenegraph/openglunderqml/CMakeLists.txt
@@ -1,15 +1,9 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(openglunderqml LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/openglunderqml")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
qt_standard_project_setup()
@@ -26,10 +20,10 @@ set_target_properties(openglunderqml PROPERTIES
)
target_link_libraries(openglunderqml PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(openglunderqml
@@ -40,7 +34,16 @@ qt_add_qml_module(openglunderqml
)
install(TARGETS openglunderqml
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET openglunderqml
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/openglunderqml/doc/src/openglunderqml.qdoc b/examples/quick/scenegraph/openglunderqml/doc/src/openglunderqml.qdoc
index 317c824d06..aba95b471a 100644
--- a/examples/quick/scenegraph/openglunderqml/doc/src/openglunderqml.qdoc
+++ b/examples/quick/scenegraph/openglunderqml/doc/src/openglunderqml.qdoc
@@ -4,7 +4,9 @@
/*!
\example scenegraph/openglunderqml
\title Scene Graph - OpenGL Under QML
+ \examplecategory {Graphics}
\ingroup qtquickexamples
+ \examplecategory {Mobile}
\brief Shows how to render OpenGL under a Qt Quick scene.
\image openglunderqml-example.jpg
diff --git a/examples/quick/scenegraph/openglunderqml/squircle.cpp b/examples/quick/scenegraph/openglunderqml/squircle.cpp
index 13f3075a28..98a004ee80 100644
--- a/examples/quick/scenegraph/openglunderqml/squircle.cpp
+++ b/examples/quick/scenegraph/openglunderqml/squircle.cpp
@@ -94,6 +94,15 @@ void SquircleRenderer::init()
initializeOpenGLFunctions();
+ const float values[] = { -1, -1, 1, -1, -1, 1, 1, 1 };
+
+ m_vbo.create();
+ m_vbo.bind();
+ m_vbo.allocate(values, sizeof(values));
+
+ glEnableVertexAttribArray(0);
+ glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), nullptr);
+
m_program = new QOpenGLShaderProgram();
m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex,
"attribute highp vec4 vertices;"
@@ -125,23 +134,12 @@ void SquircleRenderer::paint()
// OpenGL directly.
m_window->beginExternalCommands();
+ m_vbo.bind();
m_program->bind();
+ m_program->setUniformValue("t", (float)m_t);
- m_program->enableAttributeArray(0);
-
- float values[] = {
- -1, -1,
- 1, -1,
- -1, 1,
- 1, 1
- };
-
- // This example relies on (deprecated) client-side pointers for the vertex
- // input. Therefore, we have to make sure no vertex buffer is bound.
- glBindBuffer(GL_ARRAY_BUFFER, 0);
-
- m_program->setAttributeArray(0, GL_FLOAT, values, 2);
- m_program->setUniformValue("t", (float) m_t);
+ glEnableVertexAttribArray(0);
+ glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), nullptr);
glViewport(0, 0, m_viewportSize.width(), m_viewportSize.height());
@@ -152,7 +150,7 @@ void SquircleRenderer::paint()
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
- m_program->disableAttributeArray(0);
+ glDisableVertexAttribArray(0);
m_program->release();
m_window->endExternalCommands();
diff --git a/examples/quick/scenegraph/openglunderqml/squircle.h b/examples/quick/scenegraph/openglunderqml/squircle.h
index 2112d658b0..e59e7882c8 100644
--- a/examples/quick/scenegraph/openglunderqml/squircle.h
+++ b/examples/quick/scenegraph/openglunderqml/squircle.h
@@ -8,6 +8,7 @@
#include <QtQuick/QQuickWindow>
#include <QOpenGLShaderProgram>
#include <QOpenGLFunctions>
+#include <QOpenGLBuffer>
@@ -31,6 +32,7 @@ private:
qreal m_t = 0.0;
QOpenGLShaderProgram *m_program = nullptr;
QQuickWindow *m_window = nullptr;
+ QOpenGLBuffer m_vbo;
};
//! [1]
diff --git a/examples/quick/scenegraph/rhitextureitem/CMakeLists.txt b/examples/quick/scenegraph/rhitextureitem/CMakeLists.txt
new file mode 100644
index 0000000000..9440c7b25b
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/CMakeLists.txt
@@ -0,0 +1,77 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(rhitextureitem LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick ShaderTools)
+
+qt_standard_project_setup()
+
+qt_add_executable(rhitextureitem WIN32 MACOSX_BUNDLE
+ rhitextureitem.cpp rhitextureitem.h
+ main.cpp
+)
+
+target_include_directories(rhitextureitem PUBLIC
+ ../shared
+)
+
+target_link_libraries(rhitextureitem PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::GuiPrivate
+ Qt6::Qml
+ Qt6::Quick
+)
+
+qt_add_qml_module(rhitextureitem
+ URI
+ SceneGraphRendering
+ QML_FILES
+ main.qml
+ SettingsDrawer.qml
+ RESOURCE_PREFIX
+ /scenegraph/rhitextureitem
+ RESOURCES
+ icon_settings.png
+ icon_settings@2x.png
+ icon_settings@3x.png
+ icon_settings@4x.png
+ NO_RESOURCE_TARGET_PATH
+)
+
+qt_add_shaders(rhitextureitem "rhitextureitem_shaders"
+ PRECOMPILE
+ OPTIMIZED
+ PREFIX
+ /scenegraph/rhitextureitem
+ FILES
+ shaders/color.vert
+ shaders/color.frag
+)
+
+qt_add_shaders(rhitextureitem "rhitextureitem_effect_shaders"
+ BATCHABLE
+ PRECOMPILE
+ OPTIMIZED
+ PREFIX
+ /scenegraph/rhitextureitem
+ FILES
+ shaders/checker.frag
+)
+
+install(TARGETS rhitextureitem
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET rhitextureitem
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/rhitextureitem/SettingsDrawer.qml b/examples/quick/scenegraph/rhitextureitem/SettingsDrawer.qml
new file mode 100644
index 0000000000..2b7e146c43
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/SettingsDrawer.qml
@@ -0,0 +1,117 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+
+Page {
+ id: settingsDrawer
+ default property alias content: contentLayout.children
+ required property bool isLandscape
+ readonly property bool isMobile: Qt.platform.os === "android" || Qt.platform.os === "ios"
+ property bool isOpen: isMobile ? false : true
+
+ title: "Settings"
+
+ onIsLandscapeChanged: updateState();
+ Component.onCompleted: updateState();
+ onIsOpenChanged: updateState();
+ x: 0
+ y: 0
+
+ function updateState() {
+ if (isOpen)
+ if (isLandscape)
+ settingsDrawer.state = "Landscape_Visible"
+ else
+ settingsDrawer.state = "Portrait_Visible"
+ else
+ if (isLandscape)
+ settingsDrawer.state = "Landscape_Hidden"
+ else
+ settingsDrawer.state = "Portrait_Hidden"
+ }
+
+ states: [
+ State {
+ name: "Landscape_Visible"
+ PropertyChanges {
+ settingsDrawer.x: 0
+ }
+ },
+ State {
+ name: "Landscape_Hidden"
+ PropertyChanges {
+ settingsDrawer.x: -settingsDrawer.width
+ }
+ },
+ State {
+ name: "Portrait_Visible"
+ PropertyChanges {
+ settingsDrawer.y: 0
+ }
+ },
+ State {
+ name: "Portrait_Hidden"
+ PropertyChanges {
+ settingsDrawer.y: -settingsDrawer.height
+ }
+ }
+ ]
+
+ transitions: [
+ Transition {
+ from: "Landscape_Visible"
+ to: "Landscape_Hidden"
+ NumberAnimation {
+ duration: 400
+ property: "x"
+ easing.type: Easing.InOutQuad
+ }
+ },
+ Transition {
+ from: "Landscape_Hidden"
+ to: "Landscape_Visible"
+ NumberAnimation {
+ duration: 400
+ property: "x"
+ easing.type: Easing.InOutQuad
+ }
+ },
+ Transition {
+ from: "Portrait_Visible"
+ to: "Portrait_Hidden"
+ NumberAnimation {
+ duration: 400
+ property: "y"
+ easing.type: Easing.InOutQuad
+ }
+ },
+ Transition {
+ from: "Portrait_Hidden"
+ to: "Portrait_Visible"
+ NumberAnimation {
+ duration: 400
+ property: "y"
+ easing.type: Easing.InOutQuad
+ }
+ }
+ ]
+
+ header: Label {
+ text: settingsDrawer.title
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ font.pointSize: 20
+ }
+
+ ScrollView {
+ anchors.fill: parent
+ padding: 10
+
+ ColumnLayout {
+ id: contentLayout
+ }
+ }
+}
diff --git a/examples/quick/scenegraph/rhitextureitem/doc/images/rhitextureitem-example.jpg b/examples/quick/scenegraph/rhitextureitem/doc/images/rhitextureitem-example.jpg
new file mode 100644
index 0000000000..909d0619fe
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/doc/images/rhitextureitem-example.jpg
Binary files differ
diff --git a/examples/quick/scenegraph/rhitextureitem/doc/src/rhitextureitem.qdoc b/examples/quick/scenegraph/rhitextureitem/doc/src/rhitextureitem.qdoc
new file mode 100644
index 0000000000..ee4031a7d9
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/doc/src/rhitextureitem.qdoc
@@ -0,0 +1,106 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example scenegraph/rhitextureitem
+ \title Scene Graph - RHI Texture Item
+ \examplecategory {Graphics}
+ \ingroup qtquickexamples
+
+ \brief Shows how to implement a custom QQuickItem that displays a QRhi-rendered texture.
+
+ \image rhitextureitem-example.jpg
+
+ This example shows how to implement an item that performs cross-platform,
+ portable 3D rendering into a texture using the QRhi APIs and then displays
+ that image.
+
+ \note This example demonstrates advanced, low-level functionality performing
+ portable, cross-platform 3D rendering, while relying on APIs with limited
+ compatibility guarantee from the Qt Gui module. To be able to use the QRhi
+ APIs, the application links to \c{Qt::GuiPrivate} and includes
+ \c{<rhi/qrhi.h>}.
+
+ \section2 Comparison with other approaches
+
+ The \l{Scene Graph - RHI Under QML}{RHI Under QML} example shows how to
+ implement portable, cross-platform 3D rendering with the \l QRhi APIs in a
+ manner where the custom rendering is issued before the Qt Quick scene
+ graph's own rendering, effectively providing an "underlay". That approach
+ is efficient since now additional render targets and render passes are
+ needed, the custom rendering is injected in the main render pass before the
+ scene graph's own draw calls.
+
+ In contrast, this example involves a separate render target, a QRhiTexture,
+ the \l{QRhiTexture::pixelSize()}{dimensions} of which match the
+ QQuickItem's size in the scene, and a whole render pass that is used to
+ clear and then draw into that texture. The texture is then sampled in the
+ main render pass and is used to texture a quad, effectively displaying a 2D
+ image.
+
+ Compared to the underlay/overlay approach, this allows displaying,
+ blending, and transforming the flattened 2D image of the 3D rendering
+ anywhere in the Qt Quick scene since here we have a true QQuickItem. This
+ comes at the expense of being more expensive in terms of resources and
+ performance since it involves rendering to a texture first.
+
+ \section2 Overview
+
+ The example is implemented using \l QQuickRhiItem and
+ \l QQuickRhiItemRenderer. QQuickRhiItem is a convenience class that can be
+ subclassed to easily and quickly get a fully featured, custom QQuickItem that
+ displays the contents of a QRhiTexture by using QSGSimpleTextureNode under the
+ hood. The contents of the texture is generated by the application-provided
+ logic implemented in its QQuickRhiItemRenderer subclass.
+
+ \c ExampleRhiItem is a QQuickRhiItem subclass that offers a few properties,
+ such as \c angle and \c backgroundAlpha. These are going to be read,
+ written, and animated from QML. In order to support Qt Quick's threaded
+ rendering model, the QQQuickRhiItemRenderer has a virtual
+ \l{QQuickRhiItemRenderer::synchronize()}{synchronize()} function that can
+ be reimplemented to safely perform copying of data between the
+ QQuickRhiItem (belonging to the main/GUI thread) and the
+ QQuickRhiItemRenderer (belonging to the render thread, if there is one).
+
+ \snippet scenegraph/rhitextureitem/rhitextureitem.cpp 0
+
+ \l{QQuickRhiItemRenderer::initialize()}{initialize()} is called at least
+ once before the first call to render(), but may in practice be invoked
+ multiple times: if the QQuickItem geometry changes (due to some layout
+ change, resizing the window, etc.), if QQuickRhiItem setting such as the
+ sample count and texture format change, or if the item is reparented so
+ that is belong to a new QQuickWindow, these all trigger calling
+ initialize() again because they imply that one or more of the resources
+ QQuickRhiItem-managed resources change, which is going to have implications
+ on the subclass as well. The example code here is prepared to handle these
+ special situations (changing QRhi, changing sample count, changing texture
+ format). (as it does not hold on to the texture used as the color buffer,
+ the case when the texture is recreated due to a different size needs no
+ special handling)
+
+ \snippet scenegraph/rhitextureitem/rhitextureitem.cpp 1
+
+ The rest if initialize() is straightforward QRhi-based code.
+
+ The 3D scene uses a perspective projection, which is calculated based on
+ the output size, queried from the QRhiRenderTarget for convenience (because
+ this works regardless of using multisampling or not, whereas accessing
+ \l{QQuickRhiItemRenderer::colorTexture()}{colorTexture()} and
+ \l{QQuickRhiItemRenderer::msaaColorBuffer()}{msaaColorBuffer()} would need
+ branching logic based on which of the objects happens to be valid)
+
+ Note the usage of \l QRhi::clipSpaceCorrMatrix() to cater for the
+ coordinate system differences between 3D graphics APIs.
+
+ \snippet scenegraph/rhitextureitem/rhitextureitem.cpp 2
+
+ The implementation of \l{QQuickRhiItemRenderer::render()}{render()} records
+ the drawing of a single triangle. The uniform buffer with the 4x4 matrix is
+ updated every time since we expect the rotation angle to change. The clear
+ color has the item-provided background alpha baked in. Remember the need to
+ premultiply the alpha value in the red, green, and blue components as well.
+
+ \snippet scenegraph/rhitextureitem/rhitextureitem.cpp 3
+
+ \sa QQuickRhiItem, {Scene Graph - RHI Under QML}, {Scene Graph - Custom QSGRenderNode}
+ */
diff --git a/examples/quick/scenegraph/rhitextureitem/icon_settings.png b/examples/quick/scenegraph/rhitextureitem/icon_settings.png
new file mode 100644
index 0000000000..943316040d
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/icon_settings.png
Binary files differ
diff --git a/examples/quick/scenegraph/rhitextureitem/icon_settings@2x.png b/examples/quick/scenegraph/rhitextureitem/icon_settings@2x.png
new file mode 100644
index 0000000000..b3dbf8fa28
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/icon_settings@2x.png
Binary files differ
diff --git a/examples/quick/scenegraph/rhitextureitem/icon_settings@3x.png b/examples/quick/scenegraph/rhitextureitem/icon_settings@3x.png
new file mode 100644
index 0000000000..0532debcfc
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/icon_settings@3x.png
Binary files differ
diff --git a/examples/quick/scenegraph/rhitextureitem/icon_settings@4x.png b/examples/quick/scenegraph/rhitextureitem/icon_settings@4x.png
new file mode 100644
index 0000000000..3b6df374dc
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/icon_settings@4x.png
Binary files differ
diff --git a/examples/quick/scenegraph/rhitextureitem/main.cpp b/examples/quick/scenegraph/rhitextureitem/main.cpp
new file mode 100644
index 0000000000..5092552691
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/main.cpp
@@ -0,0 +1,18 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QQuickView>
+#include "rhitextureitem.h"
+
+int main(int argc, char **argv)
+{
+ QGuiApplication app(argc, argv);
+
+ QQuickView view;
+ view.setResizeMode(QQuickView::SizeRootObjectToView);
+ view.setSource(QUrl("qrc:///scenegraph/rhitextureitem/main.qml"));
+ view.show();
+
+ return QGuiApplication::exec();
+}
diff --git a/examples/quick/scenegraph/rhitextureitem/main.qml b/examples/quick/scenegraph/rhitextureitem/main.qml
new file mode 100644
index 0000000000..dc386d2cf2
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/main.qml
@@ -0,0 +1,259 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+import SceneGraphRendering
+
+Item {
+ width: 800
+ height: 600
+
+ // The checkers background
+ ShaderEffect {
+ id: tileBackground
+ anchors.fill: parent
+
+ property real tileSize: 16
+ property color color1: Qt.rgba(0.9, 0.9, 0.9, 1);
+ property color color2: Qt.rgba(0.85, 0.85, 0.85, 1);
+
+ property size pixelSize: Qt.size(width / tileSize, height / tileSize);
+
+ fragmentShader: "qrc:/scenegraph/rhitextureitem/shaders/checker.frag.qsb"
+ }
+
+ //! [0]
+ ExampleRhiItem {
+ id: renderer
+ anchors.fill: parent
+ anchors.margins: 10
+
+ mirrorVertically: cbMirror.checked
+ sampleCount: cbMSAA.checked ? 4 : 1
+ fixedColorBufferWidth: cbSize.checked ? slSize.value.toFixed(0) : 0
+ fixedColorBufferHeight: cbSize.checked ? slSize.value.toFixed(0) : 0
+ alphaBlending: cbBlend.checked
+ colorBufferFormat: rdFormatRGBA8.checked ? ExampleRhiItem.TextureFormat.RGBA8
+ : rdFormatFP16.checked ? ExampleRhiItem.TextureFormat.RGBA16F
+ : rdFormatFP32.checked ? ExampleRhiItem.TextureFormat.RGBA32F
+ : ExampleRhiItem.TextureFormat.RGB10A2
+
+ // custom properties provided by the QQuickRhiItem subclass: angle, backgroundAlpha
+ NumberAnimation on angle {
+ from: 0
+ to: 360
+ duration: 5000
+ loops: Animation.Infinite
+ running: cbAnimate.checked
+ }
+
+ backgroundAlpha: slAlpha.value
+ //! [0]
+
+ // The transform is just to show something interesting..
+ transform: [
+ Rotation { id: rotation; axis.x: 0; axis.z: 0; axis.y: 1; angle: 0; origin.x: renderer.width / 2; origin.y: renderer.height / 2; },
+ Translate { id: txOut; x: -renderer.width / 2; y: -renderer.height / 2 },
+ Scale { id: scale; },
+ Translate { id: txIn; x: renderer.width / 2; y: renderer.height / 2 }
+ ]
+ }
+
+ // Just to show something interesting
+ SequentialAnimation {
+ PauseAnimation { duration: 5000 }
+ ParallelAnimation {
+ NumberAnimation { target: scale; property: "xScale"; to: 0.6; duration: 1000; easing.type: Easing.InOutBack }
+ NumberAnimation { target: scale; property: "yScale"; to: 0.6; duration: 1000; easing.type: Easing.InOutBack }
+ }
+ NumberAnimation { target: rotation; property: "angle"; to: 80; duration: 1000; easing.type: Easing.InOutCubic }
+ NumberAnimation { target: rotation; property: "angle"; to: -80; duration: 1000; easing.type: Easing.InOutCubic }
+ NumberAnimation { target: rotation; property: "angle"; to: 0; duration: 1000; easing.type: Easing.InOutCubic }
+ NumberAnimation { target: renderer; property: "opacity"; to: 0.5; duration: 1000; easing.type: Easing.InOutCubic }
+ PauseAnimation { duration: 1000 }
+ NumberAnimation { target: renderer; property: "opacity"; to: 1.0; duration: 1000; easing.type: Easing.InOutCubic }
+ ParallelAnimation {
+ NumberAnimation { target: scale; property: "xScale"; to: 1; duration: 1000; easing.type: Easing.InOutBack }
+ NumberAnimation { target: scale; property: "yScale"; to: 1; duration: 1000; easing.type: Easing.InOutBack }
+ }
+ running: cbAnimate.checked
+ loops: Animation.Infinite
+ }
+
+ Rectangle {
+ id: labelFrame
+ anchors.margins: -10
+ radius: 5
+ color: "white"
+ border.color: "black"
+ anchors.fill: label
+ }
+
+ Text {
+ id: label
+ anchors.bottom: renderer.bottom
+ anchors.left: renderer.left
+ anchors.right: renderer.right
+ anchors.margins: 20
+ wrapMode: Text.WordWrap
+ text: qsTr("The triangle on the blue background is rendered by working directly the QRhi APIs on the scene graph render thread. The custom QQuickItem subclasses QQuickRhiItem, and it in effect draws a quad textured with the QRhiTexture containing the custom 3D rendering. Thanks to being a true QQuickItem, 2D/2.5D transforms, blending/opacity, stacking, clipping, etc. all work as usual.")
+ }
+
+ RowLayout {
+ anchors.top: renderer.top
+ anchors.right: renderer.right
+ anchors.margins: 10
+ Item {
+ id: settingsButton
+ implicitWidth: 64
+ implicitHeight: 64
+ Image {
+ anchors.centerIn: parent
+ source: "icon_settings.png"
+ }
+ HoverHandler {
+ id: hoverHandler
+ }
+ }
+ Text {
+ Layout.alignment: Qt.AlignVCenter
+ text: settingsDrawer.title
+ color: "white"
+ font.pointSize: 16
+ }
+ TapHandler {
+ // qmllint disable signal-handler-parameters
+ onTapped: settingsDrawer.isOpen = !settingsDrawer.isOpen;
+ // qmllint enable signal-handler-parameters
+ }
+ }
+
+ SettingsDrawer {
+ id: settingsDrawer
+ title: qsTr("Settings")
+ isOpen: false
+ isLandscape: true
+ width: isLandscape ? implicitWidth * 1.2 : parent.width
+ height: isLandscape ? parent.height * 0.8 : parent.height * 0.33
+
+ CheckBox {
+ id: cbAnimate
+ text: qsTr("Animate")
+ checked: true
+ }
+
+ CheckBox {
+ id: cbMirror
+ text: qsTr("Mirror vertically")
+ checked: false
+ }
+
+ CheckBox {
+ id: cbMSAA
+ text: qsTr("Enable 4x MSAA")
+ checked: false
+ }
+
+ CheckBox {
+ id: cbSize
+ text: qsTr("Use fixed size")
+ checked: false
+ }
+ RowLayout {
+ Label {
+ text: qsTr("Texture size")
+ }
+ Slider {
+ id: slSize
+ enabled: cbSize.checked
+ from: 8
+ to: 2048
+ value: 128
+ Layout.fillWidth: false
+ }
+ }
+
+ Label {
+ text: qsTr("Backing texture size: %1x%2 pixels").arg(renderer.effectiveColorBufferSize.width).arg(renderer.effectiveColorBufferSize.height)
+ }
+
+ Label {
+ text: qsTr("Item logical size: %1x%2").arg(renderer.width).arg(renderer.height)
+ }
+
+ CheckBox {
+ id: cbBlend
+ text: qsTr("Force alpha blending\nregardless of item opacity")
+ checked: false
+ }
+ RowLayout {
+ Label {
+ text: qsTr("Background alpha")
+ }
+ Slider {
+ id: slAlpha
+ from: 0
+ to: 1.0
+ value: 1.0
+ Layout.fillWidth: false
+ }
+ }
+
+ Label {
+ text: qsTr("Background alpha: %1").arg(renderer.backgroundAlpha.toFixed(2))
+ }
+
+ Label {
+ text: qsTr("Item opacity: %1").arg(renderer.opacity.toFixed(2))
+ }
+
+ Label {
+ property string apiName:
+ if (GraphicsInfo.api === GraphicsInfo.OpenGL)
+ "OpenGL";
+ else if (GraphicsInfo.api === GraphicsInfo.Direct3D11)
+ "D3D11";
+ else if (GraphicsInfo.api === GraphicsInfo.Direct3D12)
+ "D3D12";
+ else if (GraphicsInfo.api === GraphicsInfo.Vulkan)
+ "Vulkan";
+ else if (GraphicsInfo.api === GraphicsInfo.Metal)
+ "Metal";
+ else if (GraphicsInfo.api === GraphicsInfo.Null)
+ "Null";
+ else
+ "Unknown API";
+ text: "The underlying graphics API is " + apiName
+ }
+
+ GroupBox {
+ title: qsTr("Texture format")
+ ColumnLayout {
+ RadioButton {
+ id: rdFormatRGBA8
+ text: qsTr("8-bit RGBA")
+ checked: true
+ Layout.fillWidth: false
+ }
+ RadioButton {
+ id: rdFormatFP16
+ text: qsTr("Half-float RGBA")
+ Layout.fillWidth: false
+ }
+ RadioButton {
+ id: rdFormatFP32
+ text: qsTr("Float RGBA")
+ Layout.fillWidth: false
+ }
+ RadioButton {
+ id: rdFormatRGB10A2
+ text: qsTr("10-bit RGB, 2-bit A")
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quick/scenegraph/rhitextureitem/prebuilts_for_qmake/checker.frag.qsb b/examples/quick/scenegraph/rhitextureitem/prebuilts_for_qmake/checker.frag.qsb
new file mode 100644
index 0000000000..31ad25de20
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/prebuilts_for_qmake/checker.frag.qsb
Binary files differ
diff --git a/examples/quick/scenegraph/rhitextureitem/prebuilts_for_qmake/color.frag.qsb b/examples/quick/scenegraph/rhitextureitem/prebuilts_for_qmake/color.frag.qsb
new file mode 100644
index 0000000000..10b0bbc436
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/prebuilts_for_qmake/color.frag.qsb
Binary files differ
diff --git a/examples/quick/scenegraph/rhitextureitem/prebuilts_for_qmake/color.vert.qsb b/examples/quick/scenegraph/rhitextureitem/prebuilts_for_qmake/color.vert.qsb
new file mode 100644
index 0000000000..72a0574852
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/prebuilts_for_qmake/color.vert.qsb
Binary files differ
diff --git a/examples/quick/scenegraph/rhitextureitem/rhitextureitem.cpp b/examples/quick/scenegraph/rhitextureitem/rhitextureitem.cpp
new file mode 100644
index 0000000000..2b96320869
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/rhitextureitem.cpp
@@ -0,0 +1,141 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "rhitextureitem.h"
+#include <QFile>
+
+//![0]
+QQuickRhiItemRenderer *ExampleRhiItem::createRenderer()
+{
+ return new ExampleRhiItemRenderer;
+}
+
+void ExampleRhiItem::setAngle(float a)
+{
+ if (m_angle == a)
+ return;
+
+ m_angle = a;
+ emit angleChanged();
+ update();
+}
+
+void ExampleRhiItem::setBackgroundAlpha(float a)
+{
+ if (m_alpha == a)
+ return;
+
+ m_alpha = a;
+ emit backgroundAlphaChanged();
+ update();
+}
+
+void ExampleRhiItemRenderer::synchronize(QQuickRhiItem *rhiItem)
+{
+ ExampleRhiItem *item = static_cast<ExampleRhiItem *>(rhiItem);
+ if (item->angle() != m_angle)
+ m_angle = item->angle();
+ if (item->backgroundAlpha() != m_alpha)
+ m_alpha = item->backgroundAlpha();
+}
+//![0]
+
+static QShader getShader(const QString &name)
+{
+ QFile f(name);
+ return f.open(QIODevice::ReadOnly) ? QShader::fromSerialized(f.readAll()) : QShader();
+}
+
+static float vertexData[] = {
+ 0.0f, 0.5f, 1.0f, 0.0f, 0.0f,
+ -0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
+ 0.5f, -0.5f, 0.0f, 0.0f, 1.0f,
+};
+
+//![1]
+void ExampleRhiItemRenderer::initialize(QRhiCommandBuffer *cb)
+{
+ if (m_rhi != rhi()) {
+ m_rhi = rhi();
+ m_pipeline.reset();
+ }
+
+ if (m_sampleCount != renderTarget()->sampleCount()) {
+ m_sampleCount = renderTarget()->sampleCount();
+ m_pipeline.reset();
+ }
+
+ QRhiTexture *finalTex = m_sampleCount > 1 ? resolveTexture() : colorTexture();
+ if (m_textureFormat != finalTex->format()) {
+ m_textureFormat = finalTex->format();
+ m_pipeline.reset();
+ }
+//![1]
+//![2]
+ if (!m_pipeline) {
+ m_vbuf.reset(m_rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(vertexData)));
+ m_vbuf->create();
+
+ m_ubuf.reset(m_rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64));
+ m_ubuf->create();
+
+ m_srb.reset(m_rhi->newShaderResourceBindings());
+ m_srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, m_ubuf.get()),
+ });
+ m_srb->create();
+
+ m_pipeline.reset(m_rhi->newGraphicsPipeline());
+ m_pipeline->setShaderStages({
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/scenegraph/rhitextureitem/shaders/color.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/scenegraph/rhitextureitem/shaders/color.frag.qsb")) }
+ });
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 5 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float3, 2 * sizeof(float) }
+ });
+ m_pipeline->setSampleCount(m_sampleCount);
+ m_pipeline->setVertexInputLayout(inputLayout);
+ m_pipeline->setShaderResourceBindings(m_srb.get());
+ m_pipeline->setRenderPassDescriptor(renderTarget()->renderPassDescriptor());
+ m_pipeline->create();
+
+ QRhiResourceUpdateBatch *resourceUpdates = m_rhi->nextResourceUpdateBatch();
+ resourceUpdates->uploadStaticBuffer(m_vbuf.get(), vertexData);
+ cb->resourceUpdate(resourceUpdates);
+ }
+
+ const QSize outputSize = renderTarget()->pixelSize();
+ m_viewProjection = m_rhi->clipSpaceCorrMatrix();
+ m_viewProjection.perspective(45.0f, outputSize.width() / (float) outputSize.height(), 0.01f, 1000.0f);
+ m_viewProjection.translate(0, 0, -4);
+//![2]
+}
+
+//![3]
+void ExampleRhiItemRenderer::render(QRhiCommandBuffer *cb)
+{
+ QRhiResourceUpdateBatch *resourceUpdates = m_rhi->nextResourceUpdateBatch();
+ QMatrix4x4 modelViewProjection = m_viewProjection;
+ modelViewProjection.rotate(m_angle, 0, 1, 0);
+ resourceUpdates->updateDynamicBuffer(m_ubuf.get(), 0, 64, modelViewProjection.constData());
+
+ // Qt Quick expects premultiplied alpha
+ const QColor clearColor = QColor::fromRgbF(0.5f * m_alpha, 0.5f * m_alpha, 0.7f * m_alpha, m_alpha);
+ cb->beginPass(renderTarget(), clearColor, { 1.0f, 0 }, resourceUpdates);
+
+ cb->setGraphicsPipeline(m_pipeline.get());
+ const QSize outputSize = renderTarget()->pixelSize();
+ cb->setViewport(QRhiViewport(0, 0, outputSize.width(), outputSize.height()));
+ cb->setShaderResources();
+ const QRhiCommandBuffer::VertexInput vbufBinding(m_vbuf.get(), 0);
+ cb->setVertexInput(0, 1, &vbufBinding);
+ cb->draw(3);
+
+ cb->endPass();
+}
+//![3]
diff --git a/examples/quick/scenegraph/rhitextureitem/rhitextureitem.h b/examples/quick/scenegraph/rhitextureitem/rhitextureitem.h
new file mode 100644
index 0000000000..745cc3bf12
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/rhitextureitem.h
@@ -0,0 +1,57 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef RHITEXTUREITEM_H
+#define RHITEXTUREITEM_H
+
+#include <QQuickRhiItem>
+#include <rhi/qrhi.h>
+
+class ExampleRhiItemRenderer : public QQuickRhiItemRenderer
+{
+public:
+ void initialize(QRhiCommandBuffer *cb) override;
+ void synchronize(QQuickRhiItem *item) override;
+ void render(QRhiCommandBuffer *cb) override;
+
+private:
+ QRhi *m_rhi = nullptr;
+ int m_sampleCount = 1;
+ QRhiTexture::Format m_textureFormat = QRhiTexture::RGBA8;
+
+ std::unique_ptr<QRhiBuffer> m_vbuf;
+ std::unique_ptr<QRhiBuffer> m_ubuf;
+ std::unique_ptr<QRhiShaderResourceBindings> m_srb;
+ std::unique_ptr<QRhiGraphicsPipeline> m_pipeline;
+
+ QMatrix4x4 m_viewProjection;
+ float m_angle = 0.0f;
+ float m_alpha = 1.0f;
+};
+
+class ExampleRhiItem : public QQuickRhiItem
+{
+ Q_OBJECT
+ QML_NAMED_ELEMENT(ExampleRhiItem)
+ Q_PROPERTY(float angle READ angle WRITE setAngle NOTIFY angleChanged)
+ Q_PROPERTY(float backgroundAlpha READ backgroundAlpha WRITE setBackgroundAlpha NOTIFY backgroundAlphaChanged)
+
+public:
+ QQuickRhiItemRenderer *createRenderer() override;
+
+ float angle() const { return m_angle; }
+ void setAngle(float a);
+
+ float backgroundAlpha() const { return m_alpha; }
+ void setBackgroundAlpha(float a);
+
+signals:
+ void angleChanged();
+ void backgroundAlphaChanged();
+
+private:
+ float m_angle = 0.0f;
+ float m_alpha = 1.0f;
+};
+
+#endif
diff --git a/examples/quick/scenegraph/rhitextureitem/rhitextureitem.pro b/examples/quick/scenegraph/rhitextureitem/rhitextureitem.pro
new file mode 100644
index 0000000000..4d5c132a42
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/rhitextureitem.pro
@@ -0,0 +1,16 @@
+QT += gui-private qml quick
+
+CONFIG += qmltypes
+QML_IMPORT_NAME = SceneGraphRendering
+QML_IMPORT_MAJOR_VERSION = 1
+
+HEADERS += rhitextureitem.h
+SOURCES += rhitextureitem.cpp main.cpp
+
+RESOURCES += rhitextureitem.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/scenegraph/rhitextureitem
+INSTALLS += target
+
+OTHER_FILES += \
+ main.qml
diff --git a/examples/quick/scenegraph/rhitextureitem/rhitextureitem.qrc b/examples/quick/scenegraph/rhitextureitem/rhitextureitem.qrc
new file mode 100644
index 0000000000..ad996ef3f2
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/rhitextureitem.qrc
@@ -0,0 +1,8 @@
+<RCC>
+ <qresource prefix="/scenegraph/rhitextureitem">
+ <file>main.qml</file>
+ <file alias="shaders/color.vert.qsb">prebuilts_for_qmake/color.vert.qsb</file>
+ <file alias="shaders/color.frag.qsb">prebuilts_for_qmake/color.frag.qsb</file>
+ <file alias="shaders/checker.frag.qsb">prebuilts_for_qmake/checker.frag.qsb</file>
+ </qresource>
+</RCC>
diff --git a/examples/quick/scenegraph/rhitextureitem/shaders/checker.frag b/examples/quick/scenegraph/rhitextureitem/shaders/checker.frag
new file mode 100644
index 0000000000..53f4a8aed1
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/shaders/checker.frag
@@ -0,0 +1,26 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#version 440
+
+layout(std140, binding = 0) uniform buf {
+ // built-in Qt data
+ mat4 qt_Matrix;
+ float qt_Opacity;
+ // custom data
+ vec4 color1;
+ vec4 color2;
+ vec2 pixelSize;
+};
+
+layout(location = 0) in vec2 qt_TexCoord0;
+layout(location = 0) out vec4 fragColor;
+
+void main()
+{
+ vec2 tc = sign(sin(3.14159265358979323846 * qt_TexCoord0 * pixelSize));
+ if (tc.x != tc.y)
+ fragColor = color1;
+ else
+ fragColor = color2;
+}
diff --git a/examples/quick/scenegraph/rhitextureitem/shaders/color.frag b/examples/quick/scenegraph/rhitextureitem/shaders/color.frag
new file mode 100644
index 0000000000..b7e36638e3
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/shaders/color.frag
@@ -0,0 +1,13 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#version 440
+
+layout(location = 0) in vec3 v_color;
+
+layout(location = 0) out vec4 fragColor;
+
+void main()
+{
+ fragColor = vec4(v_color, 1.0);
+}
diff --git a/examples/quick/scenegraph/rhitextureitem/shaders/color.vert b/examples/quick/scenegraph/rhitextureitem/shaders/color.vert
new file mode 100644
index 0000000000..e876f290e7
--- /dev/null
+++ b/examples/quick/scenegraph/rhitextureitem/shaders/color.vert
@@ -0,0 +1,16 @@
+#version 440
+
+layout(location = 0) in vec4 position;
+layout(location = 1) in vec3 color;
+
+layout(location = 0) out vec3 v_color;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+};
+
+void main()
+{
+ v_color = color;
+ gl_Position = mvp * position;
+}
diff --git a/examples/quick/scenegraph/rhiunderqml/CMakeLists.txt b/examples/quick/scenegraph/rhiunderqml/CMakeLists.txt
new file mode 100644
index 0000000000..c1fdc114b6
--- /dev/null
+++ b/examples/quick/scenegraph/rhiunderqml/CMakeLists.txt
@@ -0,0 +1,61 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(rhiunderqml LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick ShaderTools)
+
+qt_standard_project_setup()
+
+qt_add_executable(rhiunderqml WIN32 MACOSX_BUNDLE
+ main.cpp
+ rhisquircle.cpp rhisquircle.h
+)
+
+set_target_properties(rhiunderqml PROPERTIES
+ # Prevent name clash with build subdirectory on case-insensitive file systems
+ OUTPUT_NAME rhiunderqmlapp
+)
+
+target_link_libraries(rhiunderqml PRIVATE
+ Qt6::Core
+ Qt6::GuiPrivate
+ Qt6::Qml
+ Qt6::Quick
+)
+
+qt_add_qml_module(rhiunderqml
+ URI RhiUnderQML
+ QML_FILES
+ main.qml
+ RESOURCE_PREFIX /scenegraph/rhiunderqml
+ NO_RESOURCE_TARGET_PATH
+)
+
+qt_add_shaders(rhiunderqml "rhiunderqml_shaders"
+ PRECOMPILE
+ OPTIMIZED
+ PREFIX
+ /scenegraph/rhiunderqml
+ BASE
+ ../shared
+ FILES
+ ../shared/squircle_rhi.vert
+ ../shared/squircle_rhi.frag
+)
+
+install(TARGETS rhiunderqml
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET rhiunderqml
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/rhiunderqml/doc/images/rhiunderqml-example.jpg b/examples/quick/scenegraph/rhiunderqml/doc/images/rhiunderqml-example.jpg
new file mode 100644
index 0000000000..e9c5bde3f0
--- /dev/null
+++ b/examples/quick/scenegraph/rhiunderqml/doc/images/rhiunderqml-example.jpg
Binary files differ
diff --git a/examples/quick/scenegraph/rhiunderqml/doc/src/rhiunderqml.qdoc b/examples/quick/scenegraph/rhiunderqml/doc/src/rhiunderqml.qdoc
new file mode 100644
index 0000000000..175148c9c0
--- /dev/null
+++ b/examples/quick/scenegraph/rhiunderqml/doc/src/rhiunderqml.qdoc
@@ -0,0 +1,236 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example scenegraph/rhiunderqml
+ \title Scene Graph - RHI Under QML
+ \examplecategory {Graphics}
+ \ingroup qtquickexamples
+ \brief Shows how to render directly with \l QRhi under a Qt Quick scene.
+
+ \image rhiunderqml-example.jpg
+
+ \section1 Introduction
+
+ The RHI Under QML example shows how an application can make use of the \l
+ QQuickWindow::beforeRendering() and \l
+ QQuickWindow::beforeRenderPassRecording() signals to draw custom \l{QRhi}-based
+ content under a Qt Quick scene.
+
+ Applications that wish to render \l QRhi content on top of the Qt Quick scene,
+ can do so by connecting to the \l QQuickWindow::afterRendering() and \l
+ QQuickWindow::afterRenderPassRecording() signals.
+
+ In this example, we will also see how it is possible to have values that
+ are exposed to QML which affect the QRhi-based rendering. We animate the
+ threshold value using a NumberAnimation in the QML file and this float
+ value is then passed on in a uniform buffer to the fragment shader.
+
+ The example is equivalent in most ways to the \l{Scene Graph - OpenGL Under
+ QML}{OpenGL Under QML}, \l{Scene Graph - Direct3D 11 Under QML}{Direct3D 11
+ Under QML}, \l{Scene Graph - Metal Under QML}{Metal Under QML}, and \l{Scene
+ Graph - Vulkan Under QML}{Vulkan Under QML} examples. Those examples render
+ the same content by directly using a 3D API. This example on the other hand
+ is fully cross-platform and portable, as it inherently supports operating
+ with all the 3D APIs supported by QRhi (such as, OpenGL, Vulkan, Metal,
+ Direct 3D 11 and 12).
+
+ \note This example demonstrates advanced, low-level functionality performing
+ portable, cross-platform 3D rendering, while relying on APIs with limited
+ compatibility guarantee from the Qt Gui module. To be able to use the QRhi
+ APIs, the application links to \c{Qt::GuiPrivate} and includes
+ \c{<rhi/qrhi.h>}.
+
+ Adding custom rendering as an underlay/overlay is one of the three ways to integrate
+ custom 2D/3D rendering into a Qt Quick scene. The other two options are to perform
+ the rendering "inline" with the Qt Quick scene's own rendering using QSGRenderNode,
+ or to generate a whole separate render pass targeting a dedicated render target
+ (a texture) and then have an item in the scene display the texture.
+ Refer to the \l{Scene Graph - RHI Texture Item} and the
+ \l{Scene Graph - Custom QSGRenderNode} examples regarding those approaches.
+
+ \section1 Core Concepts
+
+ The beforeRendering() signal is emitted at the start of every frame, before
+ the scene graph starts its rendering, thus any \l QRhi draw calls that are
+ made as a response to this signal, will stack under the Qt Quick items.
+ However, there are two signals that are relevant here: the application's own
+ \l QRhi commands should be recorded onto the same command buffer that is
+ used by the scene graph, and what's more, the commands should belong to the
+ same render pass. beforeRendering() on its own is not sufficient for this
+ because it gets emitted at the start of the frame, before starting to record
+ a render pass via \l QRhiCommandBuffer::beginPass(). By also connecting to
+ beforeRenderPassRecording(), the application's own commands and the scene
+ graph's own rendering will end up in the right order:
+
+ \list
+ \li The scene graph's render loop calls \l QRhi::beginFrame()
+ \li \l QQuickWindow::beforeRendering() is emitted - the application prepares resources for its custom rendering
+ \li The scene graph calls \l QRhiCommandBuffer::beginPass()
+ \li \l QQuickWindow::beforeRenderPassRecording() is emitted - the application records draw calls
+ \li The scene graph records draw calls
+ \endlist
+
+ \section1 Walkthrough
+
+ The custom rendering is encapsulated within a custom QQuickItem. \c
+ RhiSquircle derives from \l QQuickItem, and is exposed to QML (note the
+ \c{QML_ELEMENT}). The QML scene instantiates \c RhiSquircle. Note however
+ that this is not a visual item: the \l QQuickItem::ItemHasContents flag is
+ not set. Thus the item's position and size has no relevance and it does not
+ reimplement \l{QQuickItem::updatePaintNode()}{updatePaintNode()}.
+
+ \snippet scenegraph/rhiunderqml/rhisquircle.h 0
+
+ Instead, when the item gets associated with a \l QQuickWindow, it connects
+ to the \l{QQuickWindow::beforeSynchronizing()} signal. Using
+ Qt::DirectConnection is important since this signal is emitted on the Qt
+ Quick render thread, if there is one. We want the connected slot to be
+ invoked on this same thread.
+
+ \snippet scenegraph/rhiunderqml/rhisquircle.cpp init
+
+ In the scene graph's synchronizing phase, the rendering infrastructure is
+ created, if not yet done, and the data relevant for rendering is
+ synchronized, i.e. copied from the \c RhiSquircle item, that lives on the
+ main thread, to the \c SquircleRenderer object that lives on the render
+ thread. (if there is no render thread, then both objects live on the main
+ thread) Accessing data is safe because the main thread is blocked while the
+ render thread is executing its synchronize phase. See \l{Qt Quick Scene
+ Graph} for more information on the scene graph threading and rendering
+ model.
+
+ In addition to the value of \c t, the associated QQuickWindow pointer is
+ copied as well. While the \c SquircleRenderer could query
+ \l{QQuickItem::window()}{window()} on the \c RhiSquircle item even when
+ operating on the render thread, that is, in theory, not entirely safe. Hence
+ making a copy.
+
+ When setting up the \c SquircleRenderer, connections to the
+ \l{QQuickWindow::beforeRendering()}{beforeRendering()} and
+ \l{QQuickWindow::beforeRenderPassRecording()}{beforeRenderPassRecording()}
+ are made, which are the key to be able to act and inject the application's
+ custom 3D rendering commands at the appropriate time.
+
+ \snippet scenegraph/rhiunderqml/rhisquircle.cpp sync
+
+ When \l{QQuickWindow::beforeRendering()}{beforeRendering()} is emitted, the
+ QRhi resources needed for our custom rendering, such as \l QRhiBuffer, \l
+ QRhiGraphicsPipeline, and related objects, are created if not yet done.
+
+ The data in the buffers is updated (more precisely, the data update
+ operations are enqueued) using \l QRhiResourceUpdateBatch and \l
+ QRhiCommandBuffer::resourceUpdate(). The vertex buffer does not change its
+ contents once the initial set of vertices are uploaded to it. The uniform
+ buffer however is a \l{QRhiBuffer::Dynamic}{dynamic} buffer, as is typical
+ for such buffers. Its content, some regions at least, is updated for every
+ frame. Hence the unconditional call to
+ \l{QRhiResourceUpdateBatch::updateDynamicBuffer()}{updateDynamicBuffer()}
+ for offset 0 and a byte size of 4 (which is \c{sizeof(float)} since the C++
+ \c float type happens to match GLSL's 32-bit \c float). What is stored at
+ that position is the value of \c t, and that is updated in every frame,
+ meaning in every invocation of frameStart().
+
+ There is an additional float value in the buffer, starting at offset 4. This
+ is used to cater to the coordinate system differences of the 3D APIs: when
+ \l{QRhi::isYUpInNDC()}{isYUpInNDC()} returns \c false, which is the case
+ with Vulkan in particular, the value is set to -1.0 which leads to flipping
+ the Y value in the 2 component vector that is passed on (with interpolation)
+ to the fragment shader based on which the color is calculated. This way the
+ output on the screen is identical (i.e. the top-left corner is green-ish,
+ the bottom-left is red-ish), regardless of which 3D API is in use. This
+ value is updated only once in the uniform buffer, similarly to the vertex
+ buffer. This highlights an issue low-level rendering code that aims to be
+ portable often needs to deal with: the coordinate system differences in
+ normalized device coordinates (NDC) and in images and framebuffers. For
+ example, the NDC uses a origin-at-bottom-left system everywhere except
+ Vulkan. Whereas framebuffers use an origin-at-top-left system everywhere
+ except OpenGL. Typical renderers that work with a perspective projection can
+ often be oblivious to this problem by conveniently relying on
+ \l{QRhi::clipSpaceCorrMatrix()}, which is a matrix that can be multiplied in
+ to the projection matrix, and applies both an Y flip when needed, and also
+ caters to the fact that clip space depth runs \c{-1..1} with OpenGL but
+ \c{0..1} everywhere else. However, in some cases, such as in this example,
+ this is not applicable. Rather, the application and shader logic needs to
+ perform the necessary adjustment of vertex and UV positions as appropriate
+ based on querying \l QRhi::isYUpInNDC() and \l QRhi::isYUpInFramebuffer().
+
+ To gain access to the \l QRhi and \l QRhiSwapChain objects Qt Quick uses,
+ they can simply be queried from the \l QQuickWindow. Note that this assumes
+ that the QQuickWindow is a regular, on-screen window. If it used \l
+ QQuickRenderControl instead, e.g. to perform off-screen rendering into a
+ texture, querying the swapchain would be wrong since there is no swapchain
+ then.
+
+ Due to the signal being emitted after Qt Quick calls \l QRhi::beginFrame(),
+ it is already possible to query the command buffer and render target from
+ the swapchain. This is what allows to conveniently issue a \l
+ QRhiCommandBuffer::resourceUpdate() on the object returned from \l
+ QRhiSwapChain::currentFrameCommandBuffer(). When creating a graphics
+ pipeline, a QRhiRenderPassDescriptor can be retrieved from the
+ QRhiRenderTarget returned from \l QRhiSwapChain::currentFrameRenderTarget().
+ (note that this means the graphics pipeline built here is suitable only for
+ rendering to the swapchain, or at best another render target that is
+ \l{QRhiRenderPassDescriptor::isCompatible()}{compatible} with it; it is
+ likely that if we wanted to render to a texture, then a different
+ QRhiRenderPassDescriptor, and so a different graphics pipeline, would be
+ needed since the texture and swapchain formats may differ)
+
+ \snippet scenegraph/rhiunderqml/rhisquircle.cpp frame-start
+
+ Finally, upon \l QQuickWindow::beforeRenderPassRecording(), a draw call for
+ a triangle strip with 4 vertices is recorded. This example simply draws a
+ quad in practice, and calculates the pixel colors using the logic in the
+ fragment shaders, but applications are free to do more complicated drawing:
+ creating multiple graphics pipelines and recording multiple draw calls is
+ perfectly fine as well. The important thing to keep in mind is that whatever
+ is recorded on the \l QRhiCommandBuffer retrieved from the window's
+ \l{QRhiSwapChain}{swapchain}, it is effectively prepended before the Qt Quick
+ scene graph's own rendering within the main render pass.
+
+ \note This means that if depth buffer usage with depth testing and writing
+ out depth values is involved, then the Qt Quick content may be affected by
+ the values written to the depth buffer. See \l{Qt Quick Scene Graph Default
+ Renderer} for details on the scene graph's renderer, in particular the
+ sections about the handling of \e opaque and \e{alpha blended} primitives.
+
+ To get the window size in pixels, \l QRhiRenderTarget::pixelSize() is used.
+ This is convenient because this way the example does not need to calculate
+ the viewport size by other means and does not have to worry about applying
+ the \l{QWindow::devicePixelRatio()}{high DPI scale factor}, if there is any.
+
+ \snippet scenegraph/rhiunderqml/rhisquircle.cpp frame-render
+
+ The vertex and fragment shaders go through the standard QRhi shader
+ conditioning pipeline. Initially written as Vulkan-compatible GLSL, they get
+ compiled to SPIR-V and then transpiled to other shading languages by Qt's
+ tools. When using CMake, the example relies on the \c qt_add_shaders command
+ that makes it simple and convenient to bundle the shaders with the
+ application and perform the necessary processing at build time. See \l{Qt
+ Shader Tools Build System Integration} for details.
+
+ Specifying \c BASE helps removing the \c{../shared} prefix, while \c PREFIX
+ adds the intended \c{/scenegraph/rhiunderqml} prefix. Thus the final path is
+ \c{:/scenegraph/rhiunderqml/squircle_rhi.vert.qsb}.
+
+ \badcode
+ qt_add_shaders(rhiunderqml "rhiunderqml_shaders"
+ PRECOMPILE
+ OPTIMIZED
+ PREFIX
+ /scenegraph/rhiunderqml
+ BASE
+ ../shared
+ FILES
+ ../shared/squircle_rhi.vert
+ ../shared/squircle_rhi.frag
+ )
+ \endcode
+
+ To support qmake, the example still ships the \c{.qsb} files that would
+ normally be generated at build time, and lists them in the qrc file. This
+ approach is however not recommended for new applications that use CMake as
+ the build system.
+
+ \sa {Scene Graph - RHI Texture Item}, {Scene Graph - Custom QSGRenderNode}
+ */
diff --git a/examples/quick/scenegraph/rhiunderqml/main.cpp b/examples/quick/scenegraph/rhiunderqml/main.cpp
new file mode 100644
index 0000000000..51b8d18ddb
--- /dev/null
+++ b/examples/quick/scenegraph/rhiunderqml/main.cpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QtQuick/QQuickView>
+
+int main(int argc, char **argv)
+{
+ QGuiApplication app(argc, argv);
+
+ QQuickView view;
+ view.setResizeMode(QQuickView::SizeRootObjectToView);
+ view.setSource(QUrl("qrc:///scenegraph/rhiunderqml/main.qml"));
+ view.show();
+
+ return app.exec();
+}
diff --git a/examples/quick/scenegraph/rhiunderqml/main.qml b/examples/quick/scenegraph/rhiunderqml/main.qml
new file mode 100644
index 0000000000..3faa028457
--- /dev/null
+++ b/examples/quick/scenegraph/rhiunderqml/main.qml
@@ -0,0 +1,39 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import RhiUnderQML
+
+Item {
+ width: 320
+ height: 480
+
+ RhiSquircle {
+ SequentialAnimation on t {
+ NumberAnimation { to: 1; duration: 2500; easing.type: Easing.InQuad }
+ NumberAnimation { to: 0; duration: 2500; easing.type: Easing.OutQuad }
+ loops: Animation.Infinite
+ running: true
+ }
+ }
+
+ Rectangle {
+ color: Qt.rgba(1, 1, 1, 0.7)
+ radius: 10
+ border.width: 1
+ border.color: "white"
+ anchors.fill: label
+ anchors.margins: -10
+ }
+
+ Text {
+ id: label
+ color: "black"
+ wrapMode: Text.WordWrap
+ text: qsTr("The background here is a squircle rendered with QRhi using the beforeRendering() and beforeRenderPassRecording() signals in QQuickWindow. This text label and its border is rendered using QML")
+ anchors.right: parent.right
+ anchors.left: parent.left
+ anchors.bottom: parent.bottom
+ anchors.margins: 20
+ }
+}
diff --git a/examples/quick/scenegraph/rhiunderqml/prebuilts_for_qmake/squircle_rhi.frag.qsb b/examples/quick/scenegraph/rhiunderqml/prebuilts_for_qmake/squircle_rhi.frag.qsb
new file mode 100644
index 0000000000..077a31f945
--- /dev/null
+++ b/examples/quick/scenegraph/rhiunderqml/prebuilts_for_qmake/squircle_rhi.frag.qsb
Binary files differ
diff --git a/examples/quick/scenegraph/rhiunderqml/prebuilts_for_qmake/squircle_rhi.vert.qsb b/examples/quick/scenegraph/rhiunderqml/prebuilts_for_qmake/squircle_rhi.vert.qsb
new file mode 100644
index 0000000000..1e87cf09a7
--- /dev/null
+++ b/examples/quick/scenegraph/rhiunderqml/prebuilts_for_qmake/squircle_rhi.vert.qsb
Binary files differ
diff --git a/examples/quick/scenegraph/rhiunderqml/rhisquircle.cpp b/examples/quick/scenegraph/rhiunderqml/rhisquircle.cpp
new file mode 100644
index 0000000000..135cf128e3
--- /dev/null
+++ b/examples/quick/scenegraph/rhiunderqml/rhisquircle.cpp
@@ -0,0 +1,224 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "rhisquircle.h"
+#include <QtQuick/QQuickWindow>
+#include <QtCore/QFile>
+#include <QtCore/QRunnable>
+
+#include <rhi/qrhi.h>
+
+class SquircleRenderer : public QObject
+{
+ Q_OBJECT
+public:
+ void setT(qreal t) { m_t = t; }
+ void setWindow(QQuickWindow *window) { m_window = window; }
+
+public slots:
+ void frameStart();
+ void mainPassRecordingStart();
+
+private:
+ qreal m_t = 0;
+ QQuickWindow *m_window;
+ QShader m_vertexShader;
+ QShader m_fragmentShader;
+ std::unique_ptr<QRhiBuffer> m_vertexBuffer;
+ std::unique_ptr<QRhiBuffer> m_uniformBuffer;
+ std::unique_ptr<QRhiShaderResourceBindings> m_srb;
+ std::unique_ptr<QRhiGraphicsPipeline> m_pipeline;
+};
+
+//! [init]
+RhiSquircle::RhiSquircle()
+{
+ connect(this, &QQuickItem::windowChanged, this, &RhiSquircle::handleWindowChanged);
+}
+
+void RhiSquircle::handleWindowChanged(QQuickWindow *win)
+{
+ if (win) {
+ connect(win, &QQuickWindow::beforeSynchronizing, this, &RhiSquircle::sync, Qt::DirectConnection);
+ connect(win, &QQuickWindow::sceneGraphInvalidated, this, &RhiSquircle::cleanup, Qt::DirectConnection);
+ // Ensure we start with cleared to black. The squircle's blend mode relies on this.
+ win->setColor(Qt::black);
+ }
+}
+//! [init]
+
+// The safe way to release custom graphics resources is to both connect to
+// sceneGraphInvalidated() and implement releaseResources(). To support
+// threaded render loops the latter performs the SquircleRenderer destruction
+// via scheduleRenderJob(). Note that the RhiSquircle may be gone by the time
+// the QRunnable is invoked.
+
+void RhiSquircle::cleanup()
+{
+ // This function is invoked on the render thread, if there is one.
+
+ delete m_renderer;
+ m_renderer = nullptr;
+}
+
+class CleanupJob : public QRunnable
+{
+public:
+ CleanupJob(SquircleRenderer *renderer) : m_renderer(renderer) { }
+ void run() override { delete m_renderer; }
+private:
+ SquircleRenderer *m_renderer;
+};
+
+void RhiSquircle::releaseResources()
+{
+ window()->scheduleRenderJob(new CleanupJob(m_renderer), QQuickWindow::BeforeSynchronizingStage);
+ m_renderer = nullptr;
+}
+
+void RhiSquircle::setT(qreal t)
+{
+ if (t == m_t)
+ return;
+ m_t = t;
+ emit tChanged();
+ if (window())
+ window()->update();
+}
+
+//! [sync]
+void RhiSquircle::sync()
+{
+ // This function is invoked on the render thread, if there is one.
+
+ if (!m_renderer) {
+ m_renderer = new SquircleRenderer;
+ // Initializing resources is done before starting to record the
+ // renderpass, regardless of wanting an underlay or overlay.
+ connect(window(), &QQuickWindow::beforeRendering, m_renderer, &SquircleRenderer::frameStart, Qt::DirectConnection);
+ // Here we want an underlay and therefore connect to
+ // beforeRenderPassRecording. Changing to afterRenderPassRecording
+ // would render the squircle on top (overlay).
+ connect(window(), &QQuickWindow::beforeRenderPassRecording, m_renderer, &SquircleRenderer::mainPassRecordingStart, Qt::DirectConnection);
+ }
+ m_renderer->setT(m_t);
+ m_renderer->setWindow(window());
+}
+//! [sync]
+
+static QShader getShader(const QString &name)
+{
+ QFile f(name);
+ if (f.open(QIODevice::ReadOnly))
+ return QShader::fromSerialized(f.readAll());
+
+ return QShader();
+}
+
+static const float vertices[] = {
+ -1, -1,
+ 1, -1,
+ -1, 1,
+ 1, 1
+};
+
+//! [frame-start]
+void SquircleRenderer::frameStart()
+{
+ // This function is invoked on the render thread, if there is one.
+
+ QRhi *rhi = m_window->rhi();
+ if (!rhi) {
+ qWarning("QQuickWindow is not using QRhi for rendering");
+ return;
+ }
+ QRhiSwapChain *swapChain = m_window->swapChain();
+ if (!swapChain) {
+ qWarning("No QRhiSwapChain?");
+ return;
+ }
+ QRhiResourceUpdateBatch *resourceUpdates = rhi->nextResourceUpdateBatch();
+
+ if (!m_pipeline) {
+ m_vertexShader = getShader(QLatin1String(":/scenegraph/rhiunderqml/squircle_rhi.vert.qsb"));
+ if (!m_vertexShader.isValid())
+ qWarning("Failed to load vertex shader; rendering will be incorrect");
+
+ m_fragmentShader = getShader(QLatin1String(":/scenegraph/rhiunderqml/squircle_rhi.frag.qsb"));
+ if (!m_fragmentShader.isValid())
+ qWarning("Failed to load fragment shader; rendering will be incorrect");
+
+ m_vertexBuffer.reset(rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(vertices)));
+ m_vertexBuffer->create();
+ resourceUpdates->uploadStaticBuffer(m_vertexBuffer.get(), vertices);
+
+ const quint32 UBUF_SIZE = 4 + 4; // 2 floats
+ m_uniformBuffer.reset(rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, UBUF_SIZE));
+ m_uniformBuffer->create();
+
+ float yDir = rhi->isYUpInNDC() ? 1.0f : -1.0f;
+ resourceUpdates->updateDynamicBuffer(m_uniformBuffer.get(), 4, 4, &yDir);
+
+ m_srb.reset(rhi->newShaderResourceBindings());
+ const auto visibleToAll = QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage;
+ m_srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, visibleToAll, m_uniformBuffer.get())
+ });
+ m_srb->create();
+
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 2 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 }
+ });
+
+ m_pipeline.reset(rhi->newGraphicsPipeline());
+ m_pipeline->setTopology(QRhiGraphicsPipeline::TriangleStrip);
+ QRhiGraphicsPipeline::TargetBlend blend;
+ blend.enable = true;
+ blend.srcColor = QRhiGraphicsPipeline::SrcAlpha;
+ blend.srcAlpha = QRhiGraphicsPipeline::SrcAlpha;
+ blend.dstColor = QRhiGraphicsPipeline::One;
+ blend.dstAlpha = QRhiGraphicsPipeline::One;
+ m_pipeline->setTargetBlends({ blend });
+ m_pipeline->setShaderStages({
+ { QRhiShaderStage::Vertex, m_vertexShader },
+ { QRhiShaderStage::Fragment, m_fragmentShader }
+ });
+ m_pipeline->setVertexInputLayout(inputLayout);
+ m_pipeline->setShaderResourceBindings(m_srb.get());
+ m_pipeline->setRenderPassDescriptor(swapChain->currentFrameRenderTarget()->renderPassDescriptor());
+ m_pipeline->create();
+ }
+
+ float t = m_t;
+ resourceUpdates->updateDynamicBuffer(m_uniformBuffer.get(), 0, 4, &t);
+
+ swapChain->currentFrameCommandBuffer()->resourceUpdate(resourceUpdates);
+}
+//! [frame-start]
+
+//! [frame-render]
+void SquircleRenderer::mainPassRecordingStart()
+{
+ // This function is invoked on the render thread, if there is one.
+
+ QRhi *rhi = m_window->rhi();
+ QRhiSwapChain *swapChain = m_window->swapChain();
+ if (!rhi || !swapChain)
+ return;
+
+ const QSize outputPixelSize = swapChain->currentFrameRenderTarget()->pixelSize();
+ QRhiCommandBuffer *cb = m_window->swapChain()->currentFrameCommandBuffer();
+ cb->setViewport({ 0.0f, 0.0f, float(outputPixelSize.width()), float(outputPixelSize.height()) });
+ cb->setGraphicsPipeline(m_pipeline.get());
+ cb->setShaderResources();
+ const QRhiCommandBuffer::VertexInput vbufBinding(m_vertexBuffer.get(), 0);
+ cb->setVertexInput(0, 1, &vbufBinding);
+ cb->draw(4);
+}
+//! [frame-render]
+
+#include "rhisquircle.moc"
diff --git a/examples/quick/scenegraph/rhiunderqml/rhisquircle.h b/examples/quick/scenegraph/rhiunderqml/rhisquircle.h
new file mode 100644
index 0000000000..507e7b930f
--- /dev/null
+++ b/examples/quick/scenegraph/rhiunderqml/rhisquircle.h
@@ -0,0 +1,43 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef RHISQUIRCLE_H
+#define RHISQUIRCLE_H
+
+#include <QtQuick/QQuickItem>
+#include <QtQuick/QQuickWindow>
+
+class SquircleRenderer;
+
+//! [0]
+class RhiSquircle : public QQuickItem
+{
+ Q_OBJECT
+ Q_PROPERTY(qreal t READ t WRITE setT NOTIFY tChanged)
+ QML_ELEMENT
+
+public:
+ RhiSquircle();
+
+ qreal t() const { return m_t; }
+ void setT(qreal t);
+
+signals:
+ void tChanged();
+
+public slots:
+ void sync();
+ void cleanup();
+
+private slots:
+ void handleWindowChanged(QQuickWindow *win);
+
+private:
+ void releaseResources() override;
+
+ qreal m_t = 0;
+ SquircleRenderer *m_renderer = nullptr;
+};
+//! [0]
+
+#endif
diff --git a/examples/quick/scenegraph/rhiunderqml/rhiunderqml.pro b/examples/quick/scenegraph/rhiunderqml/rhiunderqml.pro
new file mode 100644
index 0000000000..af85005e80
--- /dev/null
+++ b/examples/quick/scenegraph/rhiunderqml/rhiunderqml.pro
@@ -0,0 +1,11 @@
+QT += gui-private qml quick
+CONFIG += qmltypes
+QML_IMPORT_NAME = RhiUnderQML
+QML_IMPORT_MAJOR_VERSION = 1
+
+HEADERS += rhisquircle.h
+SOURCES += rhisquircle.cpp main.cpp
+RESOURCES += rhiunderqml.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/scenegraph/rhiunderqml
+INSTALLS += target
diff --git a/examples/quick/scenegraph/rhiunderqml/rhiunderqml.qrc b/examples/quick/scenegraph/rhiunderqml/rhiunderqml.qrc
new file mode 100644
index 0000000000..690cb36444
--- /dev/null
+++ b/examples/quick/scenegraph/rhiunderqml/rhiunderqml.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/scenegraph/rhiunderqml">
+ <file>main.qml</file>
+ <file alias="squircle_rhi.vert.qsb">prebuilts_for_qmake/squircle_rhi.vert.qsb</file>
+ <file alias="squircle_rhi.frag.qsb">prebuilts_for_qmake/squircle_rhi.frag.qsb</file>
+ </qresource>
+</RCC>
diff --git a/examples/quick/scenegraph/scenegraph.pro b/examples/quick/scenegraph/scenegraph.pro
index a438bb8341..c37e822680 100644
--- a/examples/quick/scenegraph/scenegraph.pro
+++ b/examples/quick/scenegraph/scenegraph.pro
@@ -2,8 +2,7 @@ TEMPLATE = subdirs
qtConfig(opengl(es1|es2)?) {
SUBDIRS += \
- fboitem \
- openglunderqml \
+ openglunderqml
}
SUBDIRS += \
@@ -11,7 +10,9 @@ SUBDIRS += \
custommaterial \
graph \
threadedanimation \
- twotextureproviders
+ twotextureproviders \
+ rhiunderqml \
+ rhitextureitem
macos|ios {
SUBDIRS += \
diff --git a/examples/quick/scenegraph/shared/logorenderer.cpp b/examples/quick/scenegraph/shared/logorenderer.cpp
deleted file mode 100644
index b95ae0d21d..0000000000
--- a/examples/quick/scenegraph/shared/logorenderer.cpp
+++ /dev/null
@@ -1,219 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "logorenderer.h"
-#include <QPainter>
-#include <QPaintEngine>
-#include <qmath.h>
-
-LogoRenderer::LogoRenderer()
-{
-}
-
-LogoRenderer::~LogoRenderer()
-{
-}
-
-
-void LogoRenderer::paintQtLogo()
-{
- program1.enableAttributeArray(normalAttr1);
- program1.enableAttributeArray(vertexAttr1);
- program1.setAttributeArray(vertexAttr1, vertices.constData());
- program1.setAttributeArray(normalAttr1, normals.constData());
- glDrawArrays(GL_TRIANGLES, 0, vertices.size());
- program1.disableAttributeArray(normalAttr1);
- program1.disableAttributeArray(vertexAttr1);
-}
-
-
-void LogoRenderer::initialize()
-{
- initializeOpenGLFunctions();
-
- glClearColor(0.1f, 0.1f, 0.2f, 1.0f);
-
- const char *vsrc1 =
- "attribute highp vec4 vertex;\n"
- "attribute mediump vec3 normal;\n"
- "uniform mediump mat4 matrix;\n"
- "varying mediump vec4 color;\n"
- "void main(void)\n"
- "{\n"
- " vec3 toLight = normalize(vec3(0.0, 0.3, 1.0));\n"
- " float angle = max(dot(normal, toLight), 0.0);\n"
- " vec3 col = vec3(0.40, 1.0, 0.0);\n"
- " color = vec4(col * 0.2 + col * 0.8 * angle, 1.0);\n"
- " color = clamp(color, 0.0, 1.0);\n"
- " gl_Position = matrix * vertex;\n"
- "}\n";
-
- const char *fsrc1 =
- "varying mediump vec4 color;\n"
- "void main(void)\n"
- "{\n"
- " gl_FragColor = color;\n"
- "}\n";
-
- program1.addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vsrc1);
- program1.addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fsrc1);
- program1.link();
-
- vertexAttr1 = program1.attributeLocation("vertex");
- normalAttr1 = program1.attributeLocation("normal");
- matrixUniform1 = program1.uniformLocation("matrix");
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
-
- m_fAngle = 0;
- m_fScale = 1;
- createGeometry();
-}
-
-void LogoRenderer::render()
-{
- glDepthMask(true);
-
- glClearColor(0.5f, 0.5f, 0.7f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
-
- glFrontFace(GL_CW);
- glCullFace(GL_FRONT);
- glEnable(GL_CULL_FACE);
- glEnable(GL_DEPTH_TEST);
-
- QMatrix4x4 modelview;
- modelview.rotate(m_fAngle, 0.0f, 1.0f, 0.0f);
- modelview.rotate(m_fAngle, 1.0f, 0.0f, 0.0f);
- modelview.rotate(m_fAngle, 0.0f, 0.0f, 1.0f);
- modelview.scale(m_fScale);
- modelview.translate(0.0f, -0.2f, 0.0f);
-
- program1.bind();
- program1.setUniformValue(matrixUniform1, modelview);
- paintQtLogo();
- program1.release();
-
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_CULL_FACE);
-
- m_fAngle += 1.0f;
-}
-
-void LogoRenderer::createGeometry()
-{
- vertices.clear();
- normals.clear();
-
- qreal x1 = +0.06f;
- qreal y1 = -0.14f;
- qreal x2 = +0.14f;
- qreal y2 = -0.06f;
- qreal x3 = +0.08f;
- qreal y3 = +0.00f;
- qreal x4 = +0.30f;
- qreal y4 = +0.22f;
-
- quad(x1, y1, x2, y2, y2, x2, y1, x1);
- quad(x3, y3, x4, y4, y4, x4, y3, x3);
-
- extrude(x1, y1, x2, y2);
- extrude(x2, y2, y2, x2);
- extrude(y2, x2, y1, x1);
- extrude(y1, x1, x1, y1);
- extrude(x3, y3, x4, y4);
- extrude(x4, y4, y4, x4);
- extrude(y4, x4, y3, x3);
-
- const qreal Pi = M_PI;
- const int NumSectors = 100;
-
- for (int i = 0; i < NumSectors; ++i) {
- qreal angle1 = (i * 2 * Pi) / NumSectors;
- qreal x5 = 0.30 * sin(angle1);
- qreal y5 = 0.30 * cos(angle1);
- qreal x6 = 0.20 * sin(angle1);
- qreal y6 = 0.20 * cos(angle1);
-
- qreal angle2 = ((i + 1) * 2 * Pi) / NumSectors;
- qreal x7 = 0.20 * sin(angle2);
- qreal y7 = 0.20 * cos(angle2);
- qreal x8 = 0.30 * sin(angle2);
- qreal y8 = 0.30 * cos(angle2);
-
- quad(x5, y5, x6, y6, x7, y7, x8, y8);
-
- extrude(x6, y6, x7, y7);
- extrude(x8, y8, x5, y5);
- }
-
- for (int i = 0;i < vertices.size();i++)
- vertices[i] *= 2.0f;
-}
-
-void LogoRenderer::quad(qreal x1, qreal y1, qreal x2, qreal y2, qreal x3, qreal y3, qreal x4, qreal y4)
-{
- vertices << QVector3D(x1, y1, -0.05f);
- vertices << QVector3D(x2, y2, -0.05f);
- vertices << QVector3D(x4, y4, -0.05f);
-
- vertices << QVector3D(x3, y3, -0.05f);
- vertices << QVector3D(x4, y4, -0.05f);
- vertices << QVector3D(x2, y2, -0.05f);
-
- QVector3D n = QVector3D::normal
- (QVector3D(x2 - x1, y2 - y1, 0.0f), QVector3D(x4 - x1, y4 - y1, 0.0f));
-
- normals << n;
- normals << n;
- normals << n;
-
- normals << n;
- normals << n;
- normals << n;
-
- vertices << QVector3D(x4, y4, 0.05f);
- vertices << QVector3D(x2, y2, 0.05f);
- vertices << QVector3D(x1, y1, 0.05f);
-
- vertices << QVector3D(x2, y2, 0.05f);
- vertices << QVector3D(x4, y4, 0.05f);
- vertices << QVector3D(x3, y3, 0.05f);
-
- n = QVector3D::normal
- (QVector3D(x2 - x4, y2 - y4, 0.0f), QVector3D(x1 - x4, y1 - y4, 0.0f));
-
- normals << n;
- normals << n;
- normals << n;
-
- normals << n;
- normals << n;
- normals << n;
-}
-
-void LogoRenderer::extrude(qreal x1, qreal y1, qreal x2, qreal y2)
-{
- vertices << QVector3D(x1, y1, +0.05f);
- vertices << QVector3D(x2, y2, +0.05f);
- vertices << QVector3D(x1, y1, -0.05f);
-
- vertices << QVector3D(x2, y2, -0.05f);
- vertices << QVector3D(x1, y1, -0.05f);
- vertices << QVector3D(x2, y2, +0.05f);
-
- QVector3D n = QVector3D::normal
- (QVector3D(x2 - x1, y2 - y1, 0.0f), QVector3D(0.0f, 0.0f, -0.1f));
-
- normals << n;
- normals << n;
- normals << n;
-
- normals << n;
- normals << n;
- normals << n;
-}
diff --git a/examples/quick/scenegraph/shared/logorenderer.h b/examples/quick/scenegraph/shared/logorenderer.h
deleted file mode 100644
index 06c49baab1..0000000000
--- a/examples/quick/scenegraph/shared/logorenderer.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef LOGORENDERER_H
-#define LOGORENDERER_H
-
-#include <QtGui/qvector3d.h>
-#include <QtGui/qmatrix4x4.h>
-#include <qopenglshaderprogram.h>
-#include <qopenglfunctions.h>
-
-#include <QTime>
-#include <QList>
-
-class LogoRenderer : protected QOpenGLFunctions
-{
-public:
- LogoRenderer();
- ~LogoRenderer();
-
- void render();
- void initialize();
-
-private:
-
- qreal m_fAngle;
- qreal m_fScale;
-
- void paintQtLogo();
- void createGeometry();
- void quad(qreal x1, qreal y1, qreal x2, qreal y2, qreal x3, qreal y3, qreal x4, qreal y4);
- void extrude(qreal x1, qreal y1, qreal x2, qreal y2);
-
- QList<QVector3D> vertices;
- QList<QVector3D> normals;
- QOpenGLShaderProgram program1;
- int vertexAttr1;
- int normalAttr1;
- int matrixUniform1;
-};
-#endif
diff --git a/examples/quick/scenegraph/shared/squircle_rhi.frag b/examples/quick/scenegraph/shared/squircle_rhi.frag
index 8da62b93e6..83669bdfaa 100644
--- a/examples/quick/scenegraph/shared/squircle_rhi.frag
+++ b/examples/quick/scenegraph/shared/squircle_rhi.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in vec2 coords;
@@ -5,12 +8,13 @@ layout(location = 0) out vec4 fragColor;
layout(std140, binding = 0) uniform buf {
float t;
-} ubuf;
+ float y_dir;
+};
void main()
{
- float i = 1. - (pow(abs(coords.x), 4.) + pow(abs(coords.y), 4.));
- i = smoothstep(ubuf.t - 0.8, ubuf.t + 0.8, i);
- i = floor(i * 20.) / 20.;
- fragColor = vec4(coords * .5 + .5, i, i);
+ float i = 1.0 - (pow(abs(coords.x), 4.0) + pow(abs(coords.y), 4.0));
+ i = smoothstep(t - 0.8, t + 0.8, i);
+ i = floor(i * 20.0) / 20.0;
+ fragColor = vec4(coords * 0.5 + 0.5, i, i);
}
diff --git a/examples/quick/scenegraph/shared/squircle_rhi.vert b/examples/quick/scenegraph/shared/squircle_rhi.vert
index b57dfdfe10..bf079ab786 100644
--- a/examples/quick/scenegraph/shared/squircle_rhi.vert
+++ b/examples/quick/scenegraph/shared/squircle_rhi.vert
@@ -1,13 +1,16 @@
#version 440
layout(location = 0) in vec4 vertices;
-
layout(location = 0) out vec2 coords;
-out gl_PerVertex { vec4 gl_Position; };
+layout(std140, binding = 0) uniform buf {
+ float t;
+ float y_dir;
+};
void main()
{
gl_Position = vertices;
coords = vertices.xy;
+ coords.y *= y_dir;
}
diff --git a/examples/quick/scenegraph/threadedanimation/CMakeLists.txt b/examples/quick/scenegraph/threadedanimation/CMakeLists.txt
index a0e98f5e99..0945a13c98 100644
--- a/examples/quick/scenegraph/threadedanimation/CMakeLists.txt
+++ b/examples/quick/scenegraph/threadedanimation/CMakeLists.txt
@@ -1,15 +1,9 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(threadedanimation LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/threadedanimation")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
qt_standard_project_setup()
@@ -20,10 +14,10 @@ qt_add_executable(threadedanimation WIN32 MACOSX_BUNDLE
)
target_link_libraries(threadedanimation PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(threadedanimation
@@ -35,7 +29,16 @@ qt_add_qml_module(threadedanimation
)
install(TARGETS threadedanimation
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET threadedanimation
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/threadedanimation/doc/images/threadedanimation-example.jpg b/examples/quick/scenegraph/threadedanimation/doc/images/threadedanimation-example.jpg
new file mode 100644
index 0000000000..42c886b7ab
--- /dev/null
+++ b/examples/quick/scenegraph/threadedanimation/doc/images/threadedanimation-example.jpg
Binary files differ
diff --git a/examples/quick/scenegraph/threadedanimation/doc/src/threadedanimation.qdoc b/examples/quick/scenegraph/threadedanimation/doc/src/threadedanimation.qdoc
new file mode 100644
index 0000000000..01b842d07a
--- /dev/null
+++ b/examples/quick/scenegraph/threadedanimation/doc/src/threadedanimation.qdoc
@@ -0,0 +1,33 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example scenegraph/threadedanimation
+ \title Scene Graph - Threaded Animation
+ \examplecategory {Graphics}
+ \ingroup qtquickexamples
+ \brief Shows benefits of custom items animating independently of the main thread while using the threaded render loop of Qt Quick.
+
+ \image threadedanimation-example.jpg
+
+ This example shows the fundamental concept behind the \l Animator types, by
+ implementing a custom item that effectively animates itself by not relying
+ on the standard Qt Quick animation framework driven on the main thread.
+
+ The left and right spinners should behave identically under normal
+ conditions. However, once the example blocks the main thread by peforming
+ some heavy operation, it will become noticeable that the left spinner is not
+ animating smoothly anymore.
+
+ \note This example should be run with the \c threaded render loop of Qt
+ Quick. This is the default in most cases. There are no positive effects when
+ using the \c basic render loop, because there everything, including all
+ rendering, happens on the main thread.
+
+ Applications without custom QQuickItem implementations can get the same
+ benefits by using one of the \l Animator types, such as \l XAnimator or \l
+ OpacityAnimator from QML. Whereas when building custom items, similar
+ results can be achieved by following the example's implementation.
+
+ \sa {Qt Quick Scene Graph}
+ */
diff --git a/examples/quick/scenegraph/twotextureproviders/CMakeLists.txt b/examples/quick/scenegraph/twotextureproviders/CMakeLists.txt
index 153b9d123b..cf597d3f0b 100644
--- a/examples/quick/scenegraph/twotextureproviders/CMakeLists.txt
+++ b/examples/quick/scenegraph/twotextureproviders/CMakeLists.txt
@@ -1,15 +1,9 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(twotextureproviders LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/twotextureproviders")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick ShaderTools)
qt_standard_project_setup()
@@ -20,10 +14,10 @@ qt_add_executable(twotextureproviders WIN32 MACOSX_BUNDLE
)
target_link_libraries(twotextureproviders PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(twotextureproviders
@@ -47,7 +41,16 @@ qt6_add_shaders(twotextureproviders "shaders"
)
install(TARGETS twotextureproviders
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET twotextureproviders
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/twotextureproviders/doc/src/twotextureproviders.qdoc b/examples/quick/scenegraph/twotextureproviders/doc/src/twotextureproviders.qdoc
index a639c9b350..1bdd1ab551 100644
--- a/examples/quick/scenegraph/twotextureproviders/doc/src/twotextureproviders.qdoc
+++ b/examples/quick/scenegraph/twotextureproviders/doc/src/twotextureproviders.qdoc
@@ -4,6 +4,7 @@
/*!
\example scenegraph/twotextureproviders
\title Scene Graph - Two Texture Providers
+ \examplecategory {Graphics}
\ingroup qtquickexamples
\brief Shows how to combine two textures from two texture providers in a custom scene graph node.
diff --git a/examples/quick/scenegraph/twotextureproviders/shaders/checker.frag b/examples/quick/scenegraph/twotextureproviders/shaders/checker.frag
index 0932bc8c37..c684a2cedd 100644
--- a/examples/quick/scenegraph/twotextureproviders/shaders/checker.frag
+++ b/examples/quick/scenegraph/twotextureproviders/shaders/checker.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in vec2 qt_TexCoord0;
diff --git a/examples/quick/scenegraph/twotextureproviders/shaders/xorblender.frag b/examples/quick/scenegraph/twotextureproviders/shaders/xorblender.frag
index bc68160c1f..8587ae5316 100644
--- a/examples/quick/scenegraph/twotextureproviders/shaders/xorblender.frag
+++ b/examples/quick/scenegraph/twotextureproviders/shaders/xorblender.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in vec2 vTexCoord;
diff --git a/examples/quick/scenegraph/vulkantextureimport/CMakeLists.txt b/examples/quick/scenegraph/vulkantextureimport/CMakeLists.txt
index 246fb2d6d2..778fe5bd87 100644
--- a/examples/quick/scenegraph/vulkantextureimport/CMakeLists.txt
+++ b/examples/quick/scenegraph/vulkantextureimport/CMakeLists.txt
@@ -1,15 +1,9 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(vulkantextureimport LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/vulkantextureimport")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
qt_standard_project_setup()
@@ -25,10 +19,10 @@ set_target_properties(vulkantextureimport PROPERTIES
)
target_link_libraries(vulkantextureimport PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(vulkantextureimport
@@ -43,7 +37,16 @@ qt_add_qml_module(vulkantextureimport
)
install(TARGETS vulkantextureimport
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET vulkantextureimport
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/vulkantextureimport/doc/src/vulkantextureimport.qdoc b/examples/quick/scenegraph/vulkantextureimport/doc/src/vulkantextureimport.qdoc
index 0d5571054a..97e7d8045f 100644
--- a/examples/quick/scenegraph/vulkantextureimport/doc/src/vulkantextureimport.qdoc
+++ b/examples/quick/scenegraph/vulkantextureimport/doc/src/vulkantextureimport.qdoc
@@ -4,8 +4,9 @@
/*!
\example scenegraph/vulkantextureimport
\title Scene Graph - Vulkan Texture Import
+ \examplecategory {Graphics}
\ingroup qtquickexamples
- \brief Shows how to use a texture created directly with use a texture created directly withulkan.
+ \brief Shows how to use a texture created directly with Vulkan.
\image vulkantextureimport-example.jpg
diff --git a/examples/quick/scenegraph/vulkanunderqml/CMakeLists.txt b/examples/quick/scenegraph/vulkanunderqml/CMakeLists.txt
index 79cbc60477..12b07b4518 100644
--- a/examples/quick/scenegraph/vulkanunderqml/CMakeLists.txt
+++ b/examples/quick/scenegraph/vulkanunderqml/CMakeLists.txt
@@ -1,15 +1,9 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(vulkanunderqml LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/vulkanunderqml")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
qt_standard_project_setup()
@@ -25,10 +19,10 @@ set_target_properties(vulkanunderqml PROPERTIES
)
target_link_libraries(vulkanunderqml PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(vulkanunderqml
@@ -43,7 +37,16 @@ qt_add_qml_module(vulkanunderqml
)
install(TARGETS vulkanunderqml
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET vulkanunderqml
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/vulkanunderqml/doc/src/vulkanunderqml.qdoc b/examples/quick/scenegraph/vulkanunderqml/doc/src/vulkanunderqml.qdoc
index 08b84da7df..bb29731554 100644
--- a/examples/quick/scenegraph/vulkanunderqml/doc/src/vulkanunderqml.qdoc
+++ b/examples/quick/scenegraph/vulkanunderqml/doc/src/vulkanunderqml.qdoc
@@ -4,36 +4,20 @@
/*!
\example scenegraph/vulkanunderqml
\title Scene Graph - Vulkan Under QML
+ \examplecategory {Graphics}
\ingroup qtquickexamples
- \brief Shows how to render directly with vulkan under a Qt Quick scene.
+ \brief Shows how to render directly with Vulkan under a Qt Quick scene.
\image vulkanunderqml-example.jpg
- The Vulkan Under QML example shows how an application can make use of the
- \l QQuickWindow::beforeRendering() and \l
- QQuickWindow::beforeRenderPassRecording() signals to draw custom Vulkan
- content under a Qt Quick scene. This signal is emitted at the start of
- every frame, before the scene graph starts its rendering, thus any Vulkan
- draw calls that are made as a response to this signal, will stack under the
- Qt Quick items. There are two signals, because the custom Vulkan commands
- are recorded onto the same command buffer that is used by the scene graph.
- beforeRendering() on its own is not sufficient for this because it gets
- emitted at the start of the frame, before recording the start of a
- renderpass instance via
- \l{https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkCmdBeginRenderPass.html}{vkCmdBeginRenderPass}.
- By also connecting to beforeRenderPassRecording(), the application's own
- commands and the scene graph's scaffolding will end up in the right order.
+ \note Compiling this example requires an SDK. See \l{Vulkan Integration} for
+ information on what to install.
- As an alternative, applications that wish to render Vulkan content
- on top of the Qt Quick scene, can do so by connecting to the \l
- QQuickWindow::afterRendering() and \l
- QQuickWindow::afterRenderPassRecording() signals.
+ \section1 Overview
- In this example, we will also see how it is possible to have
- values that are exposed to QML which affect the Vulkan
- rendering. We animate the threshold value using a NumberAnimation
- in the QML file and this value is used by the SPIR-V shader
- program that draws the squircles.
+ This example makes use of the \l QQuickWindow::beforeRendering()
+ and \l QQuickWindow::beforeRenderPassRecording() signals to draw custom Vulkan
+ content under a Qt Quick scene. QML is used to render a text label on top.
The example is equivalent in most ways to the \l{Scene Graph - OpenGL Under
QML}{OpenGL Under QML}, \l{Scene Graph - Direct3D 11 Under QML}{Direct3D 11
@@ -41,4 +25,60 @@
examples, they all render the same custom content, just via different
native APIs.
+ The particulars of utilizing QML will be covered in this documentation
+ without delving into the detail of custom Vulkan rendering.
+
+ \section1 Affecting Vulkan rendering from QML
+
+ The example shows how to use values that are exposed to QML to control
+ Vulkan rendering.
+
+ To expose the threshold value \c t to QML, in the definition of \c VulkanSquircle,
+ we use the \l Q_OBJECT, \l Q_PROPERTY, and \l QML_ELEMENT macros like so:
+
+ \quotefromfile scenegraph/vulkanunderqml/vulkansquircle.h
+ \skipto class VulkanSquircle
+ \printto public:
+
+ We then go on to declare public and private items:
+
+ \printto };
+
+ Then in \c main.qml we animate the threshold value using a \l NumberAnimation.
+
+ \quotefromfile scenegraph/vulkanunderqml/main.qml
+ \skipto VulkanSquircle {
+ \printto running: true
+ The \c t variable is ultimately used by the SPIR-V shader program that draws
+ the squircles.
+
+ \section1 Using signals to render custom Vulkan content
+
+ The \l QQuickWindow::beforeRendering()
+ and \l QQuickWindow::beforeRenderPassRecording() signals are what are used.
+
+ The QQuickWindow::beforeRendering() signal is emitted at the start of
+ every frame, before the scene graph starts its rendering. This means any Vulkan
+ draw calls that are made as a response to this signal, will stack under the
+ Qt Quick items. There are two signals because the custom Vulkan commands
+ are recorded onto the same command buffer used by the scene graph.
+
+ The beforeRendering() function on its own is not sufficient for this, because
+ it gets emitted at the start of the frame, before recording the start of a
+ \c renderpass instance by using
+ \l{https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkCmdBeginRenderPass.html}{vkCmdBeginRenderPass}.
+
+ The solution: by connecting to beforeRenderPassRecording(), the application's
+ own commands and the scene graph's scaffolding will end up in the right order.
+
+ Connecting the signals is done by the \c sync() function:
+
+ \quotefromfile scenegraph/vulkanunderqml/vulkansquircle.cpp
+ \skipto void VulkanSquircle::sync()
+ \printto m_renderer->setWindow(window());
+
+ Another way you can render Vulkan content on top of the Qt Quick scene is by
+ connecting to the \l QQuickWindow::afterRendering() and
+ \l QQuickWindow::afterRenderPassRecording() signals.
+
*/
diff --git a/examples/quick/shadereffects/CMakeLists.txt b/examples/quick/shadereffects/CMakeLists.txt
index 3441dfaa1c..b86a3fa5d7 100644
--- a/examples/quick/shadereffects/CMakeLists.txt
+++ b/examples/quick/shadereffects/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(shadereffects LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/shadereffects")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick ShaderTools)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(shadereffectsexample
WIN32
@@ -21,15 +15,14 @@ qt_add_executable(shadereffectsexample
)
target_link_libraries(shadereffectsexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(shadereffectsexample
URI shadereffects
- AUTO_RESOURCE_PREFIX
QML_FILES
"shadereffects.qml"
RESOURCES
@@ -53,7 +46,16 @@ qt6_add_shaders(shadereffectsexample "shaders"
)
install(TARGETS shadereffectsexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET shadereffectsexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/shadereffects/content/shaders/blur.frag b/examples/quick/shadereffects/content/shaders/blur.frag
index 0c914d4244..b73a213348 100644
--- a/examples/quick/shadereffects/content/shaders/blur.frag
+++ b/examples/quick/shadereffects/content/shaders/blur.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in vec2 qt_TexCoord0;
diff --git a/examples/quick/shadereffects/content/shaders/colorize.frag b/examples/quick/shadereffects/content/shaders/colorize.frag
index bc8067cc8c..eb50da9344 100644
--- a/examples/quick/shadereffects/content/shaders/colorize.frag
+++ b/examples/quick/shadereffects/content/shaders/colorize.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in vec2 qt_TexCoord0;
diff --git a/examples/quick/shadereffects/content/shaders/outline.frag b/examples/quick/shadereffects/content/shaders/outline.frag
index 26df69c5fe..11e9b74af6 100644
--- a/examples/quick/shadereffects/content/shaders/outline.frag
+++ b/examples/quick/shadereffects/content/shaders/outline.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in vec2 qt_TexCoord0;
diff --git a/examples/quick/shadereffects/content/shaders/shadow.frag b/examples/quick/shadereffects/content/shaders/shadow.frag
index 8247517b6d..f42fa6c0b0 100644
--- a/examples/quick/shadereffects/content/shaders/shadow.frag
+++ b/examples/quick/shadereffects/content/shaders/shadow.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in vec2 qt_TexCoord0;
diff --git a/examples/quick/shadereffects/content/shaders/wobble.frag b/examples/quick/shadereffects/content/shaders/wobble.frag
index a34481c2f2..a97f9d17f5 100644
--- a/examples/quick/shadereffects/content/shaders/wobble.frag
+++ b/examples/quick/shadereffects/content/shaders/wobble.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in vec2 qt_TexCoord0;
diff --git a/examples/quick/shadereffects/doc/src/shadereffects.qdoc b/examples/quick/shadereffects/doc/src/shadereffects.qdoc
index b846989cdd..134a14c618 100644
--- a/examples/quick/shadereffects/doc/src/shadereffects.qdoc
+++ b/examples/quick/shadereffects/doc/src/shadereffects.qdoc
@@ -6,6 +6,7 @@
\image qml-shadereffects-example.png
\brief A Qt Quick example demonstrating the use of shader effects.
\ingroup qtquickexamples
+ \examplecategory {Graphics}
This example demonstrates a couple of visual effects that you can perform
with shaders in Qt Quick. It applies five different effects on a text and
diff --git a/examples/quick/shadereffects/shadereffects.qml b/examples/quick/shadereffects/shadereffects.qml
index 3176ed2b34..daf3927246 100644
--- a/examples/quick/shadereffects/shadereffects.qml
+++ b/examples/quick/shadereffects/shadereffects.qml
@@ -78,7 +78,7 @@ Rectangle {
property variant source: theSource
property real amplitude: 0.04 * wobbleSlider.value
property real frequency: 20
- property real time: 0
+ property real time
NumberAnimation on time { loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 600 }
//! [fragment]
fragmentShader: "content/shaders/wobble.frag.qsb"
@@ -114,7 +114,7 @@ Rectangle {
fragmentShader: "content/shaders/blur.frag.qsb"
}
}
- property real angle: 0
+ property real angle
property variant offset: Qt.point(15.0 * Math.cos(angle), 15.0 * Math.sin(angle))
NumberAnimation on angle { loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 6000 }
property variant delta: Qt.size(offset.x / width, offset.y / height)
@@ -158,8 +158,8 @@ Rectangle {
height: 160
//! [properties]
property variant source: theSource
- property real bend: 0
- property real minimize: 0
+ property real bend
+ property real minimize
property real side: genieSlider.value
SequentialAnimation on bend {
loops: Animation.Infinite
diff --git a/examples/quick/shapes/CMakeLists.txt b/examples/quick/shapes/CMakeLists.txt
deleted file mode 100644
index 40fd459bf0..0000000000
--- a/examples/quick/shapes/CMakeLists.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(shapes LANGUAGES CXX)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/shapes")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-
-qt_standard_project_setup()
-
-add_subdirectory("../shared" "shared")
-
-qt_add_executable(shapesexample
- WIN32
- MACOSX_BUNDLE
- main.cpp
-)
-
-target_link_libraries(shapesexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-add_dependencies(shapesexample shapes_shared)
-
-qt_add_qml_module(shapesexample
- URI shapes
- AUTO_RESOURCE_PREFIX
- QML_FILES
- "clippedtigers.qml"
- "interactive.qml"
- "cubicCurve.qml"
- "ellipticalArcs.qml"
- "gradientSpreadModes.qml"
- "arcDirection.qml"
- "largeOrSmallArc.qml"
- "arcRotation.qml"
- "tigerLoader.qml"
- "text.qml"
- "strokeOrFill.qml"
- "dashPattern.qml"
- "linearGradient.qml"
- "radialGradient.qml"
- "fillRules.qml"
- "joinStyles.qml"
- "capStyles.qml"
- "quadraticCurve.qml"
- "main.qml"
- "sampling.qml"
- "shapegallery.qml"
- "tapableTriangle.qml"
- "tiger.qml"
-)
-
-install(TARGETS shapesexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-bundle_shared(shapesexample)
diff --git a/examples/quick/shapes/arcDirection.qml b/examples/quick/shapes/arcDirection.qml
deleted file mode 100644
index 7f457719ac..0000000000
--- a/examples/quick/shapes/arcDirection.qml
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
-
- Rectangle {
- width: 100
- height: 100
- anchors.centerIn: parent
- border.color: "gray"
-
- Repeater {
- model: 2
- Shape {
- anchors.fill: parent
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: model.index === 0 ? "red" : "blue"
- strokeStyle: ShapePath.DashLine
- strokeWidth: 4
-
- startX: 4; startY: 4
- PathArc {
- id: arc
- x: 96; y: 96
- radiusX: 100; radiusY: 100
- direction: model.index === 0 ? PathArc.Clockwise : PathArc.Counterclockwise
- }
- }
- }
- }
- }
-
- Column {
- anchors.right: parent.right
- Text {
- text: "Clockwise (sweep 1)"
- color: "red"
- }
- Text {
- text: "Counter clockwise (sweep 0)"
- color: "blue"
- }
- }
-}
diff --git a/examples/quick/shapes/arcRotation.qml b/examples/quick/shapes/arcRotation.qml
deleted file mode 100644
index 178c3cda0d..0000000000
--- a/examples/quick/shapes/arcRotation.qml
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
-
- Repeater {
- model: 2
- Shape {
- width: 200
- height: 200
- anchors.centerIn: parent
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: model.index === 0 ? "red" : "blue"
- strokeStyle: ShapePath.DashLine
- strokeWidth: 4
-
- startX: 50; startY: 100
- PathArc {
- x: 150; y: 100
- radiusX: 50; radiusY: 20
- xAxisRotation: model.index === 0 ? 0 : 45
- }
- }
- }
- }
-
- Repeater {
- model: 2
- Shape {
- width: 200
- height: 200
- anchors.centerIn: parent
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: model.index === 0 ? "red" : "blue"
-
- startX: 50; startY: 100
- PathArc {
- x: 150; y: 100
- radiusX: 50; radiusY: 20
- xAxisRotation: model.index === 0 ? 0 : 45
- direction: PathArc.Counterclockwise
- }
- }
- }
- }
-
- Column {
- anchors.right: parent.right
- Text {
- text: "0 degrees"
- color: "red"
- }
- Text {
- text: "45 degrees"
- color: "blue"
- }
- }
-}
diff --git a/examples/quick/shapes/capStyles.qml b/examples/quick/shapes/capStyles.qml
deleted file mode 100644
index 35a048c3d1..0000000000
--- a/examples/quick/shapes/capStyles.qml
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256; height: 256
-
- Shape {
- anchors.centerIn: parent
- width: 200
- height: 100
-
- ShapePath {
- id: capTest
- strokeColor: "green"
- strokeWidth: 20
- fillColor: "transparent"
-
- property int capStyleIdx: 0
- property variant styles: [ ShapePath.FlatCap, ShapePath.SquareCap, ShapePath.RoundCap ]
- property variant styleTexts: [ "FlatCap", "SquareCap", "RoundCap" ]
-
- capStyle: styles[capStyleIdx]
-
- startX: 40; startY: 30
- PathQuad { x: 50; y: 80; controlX: 0; controlY: 80 }
- PathLine { x: 150; y: 80 }
- PathQuad { x: 160; y: 30; controlX: 200; controlY: 80 }
- }
- }
-
- Timer {
- interval: 1000
- repeat: true
- running: true
- onTriggered: capTest.capStyleIdx = (capTest.capStyleIdx + 1) % capTest.styles.length
- }
-
- Text {
- id: txt
- anchors.right: parent.right
- text: capTest.styleTexts[capTest.capStyleIdx]
- }
-}
diff --git a/examples/quick/shapes/clippedtigers.qml b/examples/quick/shapes/clippedtigers.qml
deleted file mode 100644
index 6ec170fa24..0000000000
--- a/examples/quick/shapes/clippedtigers.qml
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- id: root
- width: 1024
- height: 768
-
- property color col: "lightsteelblue"
- gradient: Gradient {
- GradientStop { position: 0.0; color: Qt.tint(root.col, "#20FFFFFF") }
- GradientStop { position: 0.1; color: Qt.tint(root.col, "#20AAAAAA") }
- GradientStop { position: 0.9; color: Qt.tint(root.col, "#20666666") }
- GradientStop { position: 1.0; color: Qt.tint(root.col, "#20000000") }
- }
-
- Rectangle {
- id: scissorRect
- width: 200
- height: 200
- x: 150
- property real centerY: parent.height / 2 - height / 2
- property real dy: 0
- y: centerY + dy
- clip: true
-
- Loader {
- id: loader1
- width: parent.width
- height: parent.height
- y: 25 - scissorRect.dy
- source: "tiger.qml"
- asynchronous: true
- visible: status === Loader.Ready
- }
-
- SequentialAnimation on dy {
- loops: Animation.Infinite
- running: loader1.status === Loader.Ready && loader1.item.status === Shape.Ready
- NumberAnimation {
- from: 0
- to: -scissorRect.centerY
- duration: 2000
- }
- NumberAnimation {
- from: -scissorRect.centerY
- to: scissorRect.centerY
- duration: 4000
- }
- NumberAnimation {
- from: scissorRect.centerY
- to: 0
- duration: 2000
- }
- }
- }
-
- // With a more complex transformation (like rotation), stenciling is used
- // instead of scissoring, this is more expensive. It may also trigger a
- // slower code path for Shapes, depending on the path rendering backend
- // in use, and may affect rendering quality as well.
- Rectangle {
- id: stencilRect
- width: 300
- height: 200
- anchors.right: parent.right
- anchors.rightMargin: 100
- anchors.verticalCenter: parent.verticalCenter
- clip: true // NB! still clips to bounding rect (not shape)
-
- Loader {
- id: loader2
- width: parent.width
- height: parent.height
- source: "tiger.qml"
- asynchronous: true
- visible: status === Loader.Ready
- }
-
- NumberAnimation on rotation {
- from: 0
- to: 360
- duration: 5000
- loops: Animation.Infinite
- }
- }
-}
diff --git a/examples/quick/shapes/cubicCurve.qml b/examples/quick/shapes/cubicCurve.qml
deleted file mode 100644
index 9c35a869bf..0000000000
--- a/examples/quick/shapes/cubicCurve.qml
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
-
- Item {
- width: 200
- height: 200
- anchors.centerIn: parent
-
- Shape {
- id: shape
- anchors.fill: parent
-
- ShapePath {
- strokeWidth: 4
- strokeColor: "black"
- fillGradient: ConicalGradient {
- id: conGrad
- centerX: 100; centerY: 75
- NumberAnimation on angle { from: 0; to: 360; duration: 10000; loops: Animation.Infinite }
- GradientStop { position: 0; color: "#00000000" }
- GradientStop { position: 0.10; color: "#ffe0cc73" }
- GradientStop { position: 0.17; color: "#ffc6a006" }
- GradientStop { position: 0.46; color: "#ff600659" }
- GradientStop { position: 0.72; color: "#ff0680ac" }
- GradientStop { position: 0.92; color: "#ffb9d9e6" }
- GradientStop { position: 1.00; color: "#00000000" }
- }
-
- startX: 50; startY: 100
- PathCubic {
- x: 150; y: 100
- control1X: cp1.x; control1Y: cp1.y
- control2X: cp2.x; control2Y: cp2.y
- }
- }
- }
-
- Rectangle {
- id: cp1
- color: "red"
- width: 10; height: 10
- SequentialAnimation {
- loops: Animation.Infinite
- running: true
- NumberAnimation {
- target: cp1
- property: "x"
- from: 0
- to: shape.width - cp1.width
- duration: 5000
- }
- NumberAnimation {
- target: cp1
- property: "x"
- from: shape.width - cp1.width
- to: 0
- duration: 5000
- }
- NumberAnimation {
- target: cp1
- property: "y"
- from: 0
- to: shape.height - cp1.height
- duration: 5000
- }
- NumberAnimation {
- target: cp1
- property: "y"
- from: shape.height - cp1.height
- to: 0
- duration: 5000
- }
- }
- }
-
- Rectangle {
- id: cp2
- color: "blue"
- width: 10; height: 10
- x: shape.width - width
- SequentialAnimation {
- loops: Animation.Infinite
- running: true
- NumberAnimation {
- target: cp2
- property: "y"
- from: 0
- to: shape.height - cp2.height
- duration: 5000
- }
- NumberAnimation {
- target: cp2
- property: "y"
- from: shape.height - cp2.height
- to: 0
- duration: 5000
- }
- NumberAnimation {
- target: cp2
- property: "x"
- from: shape.width - cp2.width
- to: 0
- duration: 5000
- }
- NumberAnimation {
- target: cp2
- property: "x"
- from: 0
- to: shape.width - cp2.width
- duration: 5000
- }
- }
- }
- }
-
- Text {
- anchors.right: parent.right
- anchors.top: parent.top
- text: "Conical gradient angle: " + Math.round(conGrad.angle)
- }
-}
diff --git a/examples/quick/shapes/dashPattern.qml b/examples/quick/shapes/dashPattern.qml
deleted file mode 100644
index 06b50dea2b..0000000000
--- a/examples/quick/shapes/dashPattern.qml
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
- Shape {
- width: 200
- height: 150
- anchors.centerIn: parent
- ShapePath {
- strokeWidth: 4
- strokeColor: "red"
- fillGradient: RadialGradient {
- centerX: 100; centerY: 100; centerRadius: 100
- SequentialAnimation on focalRadius {
- loops: Animation.Infinite
- NumberAnimation { from: 1; to: 20; duration: 2000 }
- NumberAnimation { from: 20; to: 1; duration: 2000 }
- }
- SequentialAnimation on focalX {
- loops: Animation.Infinite
- NumberAnimation { from: 50; to: 150; duration: 3000 }
- NumberAnimation { from: 150; to: 50; duration: 3000 }
- }
- SequentialAnimation on focalY {
- loops: Animation.Infinite
- NumberAnimation { from: 50; to: 150; duration: 1000 }
- NumberAnimation { from: 150; to: 50; duration: 1000 }
- }
- GradientStop { position: 0; color: "#ffffff" }
- GradientStop { position: 0.11; color: "#f9ffa0" }
- GradientStop { position: 0.13; color: "#f9ff99" }
- GradientStop { position: 0.14; color: "#f3ff86" }
- GradientStop { position: 0.49; color: "#93b353" }
- GradientStop { position: 0.87; color: "#264619" }
- GradientStop { position: 0.96; color: "#0c1306" }
- GradientStop { position: 1; color: "#000000" }
- }
- fillColor: "blue" // ignored with the gradient set
- strokeStyle: ShapePath.DashLine
- dashPattern: [ 1, 4 ]
- startX: 20; startY: 20
- PathLine { x: 180; y: 130 }
- PathLine { x: 20; y: 130 }
- PathLine { x: 20; y: 20 }
- }
- }
-}
diff --git a/examples/quick/shapes/doc/src/shapes.qdoc b/examples/quick/shapes/doc/src/shapes.qdoc
deleted file mode 100644
index fd97661b6f..0000000000
--- a/examples/quick/shapes/doc/src/shapes.qdoc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-/*!
- \title Qt Quick Examples - Shapes
- \example shapes
- \image qml-shapes-example.png
- \brief A Qt Quick example demonstrating the use of shape items.
- \ingroup qtquickexamples
-
- This example demonstrates the usage of the \l Shape type in Qt Quick. Shapes
- allow efficiently rendering stroked and filled lines, curves, and arcs in Qt
- Quick scenes.
-
- \include examples-run.qdocinc
-*/
diff --git a/examples/quick/shapes/ellipticalArcs.qml b/examples/quick/shapes/ellipticalArcs.qml
deleted file mode 100644
index 024d5e76f6..0000000000
--- a/examples/quick/shapes/ellipticalArcs.qml
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
- Shape {
- id: shape
- width: 220
- height: 200
- anchors.centerIn: parent
-
- ShapePath {
- fillGradient: LinearGradient {
- y2: shape.height
- GradientStop { position: 0; color: "yellow" }
- GradientStop { position: 1; color: "green" }
- }
-
- startX: 10; startY: 100
- PathArc {
- relativeX: 50; y: 100
- radiusX: 25; radiusY: 25
- }
- PathArc {
- relativeX: 50; y: 100
- radiusX: 25; radiusY: 35
- }
- PathArc {
- relativeX: 50; y: 100
- radiusX: 25; radiusY: 60
- }
- PathArc {
- relativeX: 50; y: 100
- radiusX: 50; radiusY: 120
- }
- }
- }
-
- Shape {
- width: 120
- height: 130
- anchors.bottom: parent.bottom
- anchors.right: parent.right
-
- scale: 0.5
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "darkBlue"
- strokeWidth: 20
- capStyle: ShapePath.RoundCap
-
- PathAngleArc {
- centerX: 65; centerY: 95
- radiusX: 45; radiusY: 45
- startAngle: -180
- SequentialAnimation on sweepAngle {
- loops: Animation.Infinite
- NumberAnimation { to: 360; duration: 2000 }
- NumberAnimation { to: 0; duration: 2000 }
- }
- }
- }
- }
-}
diff --git a/examples/quick/shapes/fillRules.qml b/examples/quick/shapes/fillRules.qml
deleted file mode 100644
index ca7ff75330..0000000000
--- a/examples/quick/shapes/fillRules.qml
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
- Shape {
- width: 100
- height: 100
- anchors.centerIn: parent
- ShapePath {
- id: star
- strokeColor: "blue"
- fillColor: "magenta"
- strokeWidth: 2
- PathMove { x: 90; y: 50 }
- PathLine { x: 50 + 40 * Math.cos(0.8 * 1 * Math.PI); y: 50 + 40 * Math.sin(0.8 * 1 * Math.PI) }
- PathLine { x: 50 + 40 * Math.cos(0.8 * 2 * Math.PI); y: 50 + 40 * Math.sin(0.8 * 2 * Math.PI) }
- PathLine { x: 50 + 40 * Math.cos(0.8 * 3 * Math.PI); y: 50 + 40 * Math.sin(0.8 * 3 * Math.PI) }
- PathLine { x: 50 + 40 * Math.cos(0.8 * 4 * Math.PI); y: 50 + 40 * Math.sin(0.8 * 4 * Math.PI) }
- PathLine { x: 90; y: 50 }
- }
- NumberAnimation on rotation {
- from: 0
- to: 360
- duration: 5000
- loops: Animation.Infinite
- }
- }
- Timer {
- interval: 2000
- onTriggered: star.fillRule = (star.fillRule === ShapePath.OddEvenFill ? ShapePath.WindingFill : ShapePath.OddEvenFill)
- repeat: true
- running: true
- }
- Text {
- anchors.right: parent.right
- text: star.fillRule === ShapePath.OddEvenFill ? "OddEvenFill" : "WindingFill"
- }
-}
diff --git a/examples/quick/shapes/gradientSpreadModes.qml b/examples/quick/shapes/gradientSpreadModes.qml
deleted file mode 100644
index 75b9a5b3db..0000000000
--- a/examples/quick/shapes/gradientSpreadModes.qml
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
- Rectangle {
- border.color: "black"
- width: 200
- height: 200
- anchors.centerIn: parent
-
- Shape {
- anchors.fill: parent
-
- ShapePath {
- strokeColor: "transparent"
-
- fillGradient: LinearGradient {
- id: grad
- y1: 50; y2: 150
- GradientStop { position: 0; color: "black" }
- GradientStop { position: 1; color: "red" }
- }
-
- startX: 10; startY: 10
- PathLine { relativeX: 180; relativeY: 0 }
- PathLine { relativeX: 0; relativeY: 180 }
- PathLine { relativeX: -180; relativeY: 0 }
- PathLine { relativeX: 0; relativeY: -180 }
- }
- }
-
- Timer {
- id: spreadTimer
- interval: 3000
- running: true
- repeat: true
- property variant spreads: [ ShapeGradient.PadSpread, ShapeGradient.RepeatSpread, ShapeGradient.ReflectSpread ]
- property variant spreadTexts: [ "PadSpread", "RepeatSpread", "ReflectSpread" ]
- property int spreadIdx: 0
- onTriggered: { spreadIdx = (spreadIdx + 1) % spreads.length; grad.spread = spreads[spreadIdx] }
- }
-
-
- Shape {
- anchors.fill: parent
- ShapePath {
- strokeColor: "gray"
- strokeWidth: 2
- fillColor: "transparent"
- PathMove { x: 0; y: 50 }
- PathLine { relativeX: 200; relativeY: 0 }
- PathMove { x: 0; y: 150 }
- PathLine { relativeX: 200; relativeY: 0 }
- }
- }
- }
-
- Text {
- anchors.right: parent.right
- text: spreadTimer.spreadTexts[spreadTimer.spreadIdx]
- }
-}
diff --git a/examples/quick/shapes/interactive.qml b/examples/quick/shapes/interactive.qml
deleted file mode 100644
index f9e2359a91..0000000000
--- a/examples/quick/shapes/interactive.qml
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Layouts
-import QtQuick.Shapes
-
-Rectangle {
- id: root
- width: 1024
- height: 768
- color: palette.window
-
- RowLayout {
- id: topRow
- x: 20
- y: 10
- spacing: 20
-
- ButtonGroup {
- id: toolButtons
- buttons: drawingTools.children
- }
-
- RowLayout {
- id: drawingTools
- ToolButton {
- text: qsTr("Line")
- checkable: true
- checked: true
-
- property Component shapeType: Component {
- ShapePath {
- id: lineShapePath
- strokeColor: root.palette.windowText
- strokeWidth: widthSlider.value
- fillColor: "transparent"
- PathLine {
- id: pathSegment
- x: lineShapePath.startX + 1
- y: lineShapePath.startY + 1
- }
- function finishCreation() {
- createStartEndHandles(this, pathSegment);
- }
- }
- }
- }
- ToolButton {
- text: qsTr("Quadratic")
- checkable: true
-
- property Component shapeType: Component {
- ShapePath {
- id: quadShapePath
- strokeColor: root.palette.windowText
- strokeWidth: widthSlider.value
- fillColor: fillSwitch.checked ? "green" : "transparent"
- PathQuad {
- id: pathSegment
- x: quadShapePath.startx + 1
- y: quadShapePath.startY + 1
- controlX: quadShapePath.startX + 50
- controlY: quadShapePath.startY + 50
- }
- function finishCreation() {
- createStartEndHandles(this, pathSegment);
- pointDragHandle.createObject(canvas, {
- idleColor: "blue",
- target: pathSegment, xprop: "controlX", yprop: "controlY"
- });
- }
- }
- }
- }
- ToolButton {
- text: qsTr("Cubic")
- checkable: true
-
- property Component shapeType: Component {
- ShapePath {
- id: cubicShapePath
- strokeColor: root.palette.windowText
- strokeWidth: widthSlider.value
- fillColor: fillSwitch.checked ? "green" : "transparent"
- PathCubic {
- id: pathSegment
- x: cubicShapePath.startX + 1
- y: cubicShapePath.startY + 1
- control1X: cubicShapePath.startX + 50;
- control1Y: cubicShapePath.startY + 50;
- control2X: cubicShapePath.startX + 150;
- control2Y: cubicShapePath.startY + 50;
- }
- function finishCreation() {
- createStartEndHandles(this, pathSegment);
- pointDragHandle.createObject(canvas, {
- idleColor: "blue",
- target: pathSegment, xprop: "control1X", yprop: "control1Y"
- });
- pointDragHandle.createObject(canvas, {
- idleColor: "lightBlue",
- target: pathSegment, xprop: "control2X", yprop: "control2Y"
- });
- }
- }
- }
- }
- }
-
- Label {
- text: qsTr("Width")
- }
- Slider {
- id: widthSlider
- from: 1
- to: 60
- value: 4
- }
-
- Switch {
- id: showHandlesSwitch
- text: qsTr("Handles")
- }
-
- Switch {
- id: fillSwitch
- text: qsTr("Fill")
- }
- }
-
- Component {
- id: pointDragHandle
-
- Rectangle {
- id: rect
- property variant target
- property string xprop
- property string yprop
- property color idleColor: "red"
-
- width: 20
- height: width
- visible: showHandlesSwitch.checked
- color: hh.hovered ? "yellow" : idleColor
- border.color: "grey"
-
- property real halfWidth: width / 2
- property bool complete: false
- Binding { target: rect.target; property: xprop; value: x + halfWidth; when: complete }
- Binding { target: rect.target; property: yprop; value: y + halfWidth; when: complete }
-
- DragHandler { }
-
- HoverHandler { id: hh }
-
- Component.onCompleted: {
- x = target[xprop] - halfWidth;
- y = target[yprop] - halfWidth;
- complete = true;
- }
- }
- }
-
- function createStartEndHandles(shapePath, pathSegment) {
- pointDragHandle.createObject(canvas, {
- idleColor: "red",
- target: shapePath, xprop: "startX", yprop: "startY"
- });
- pointDragHandle.createObject(canvas, {
- idleColor: "red",
- target: pathSegment, xprop: "x", yprop: "y"
- });
- }
-
- Rectangle {
- id: canvas
- color: palette.base
- width: root.width - 40
- height: root.height - y - 20
- x: 20
- anchors.top: topRow.bottom
- anchors.topMargin: 20
-
- DragHandler {
- target: null
- grabPermissions: DragHandler.TakeOverForbidden
- property ShapePath activePath: null
- onActiveChanged: {
- const tool = toolButtons.checkedButton;
- if (active) {
- activePath = tool.shapeType.createObject(root, {
- startX: centroid.position.x, startY: centroid.position.y
- });
- shape.data.push(activePath);
- } else {
- activePath.finishCreation();
- activePath = null;
- }
- }
- onCentroidChanged: if (activePath) {
- var pathObj = activePath.pathElements[0];
- pathObj.x = centroid.position.x;
- pathObj.y = centroid.position.y;
- }
- }
-
- Shape {
- id: shape
- anchors.fill: parent
- }
- }
-}
diff --git a/examples/quick/shapes/joinStyles.qml b/examples/quick/shapes/joinStyles.qml
deleted file mode 100644
index 4d6410f059..0000000000
--- a/examples/quick/shapes/joinStyles.qml
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
-
- Shape {
- width: 120
- height: 120
- anchors.centerIn: parent
-
- ShapePath {
- id: joinTest
-
- strokeColor: "black"
- strokeWidth: 16
- fillColor: "transparent"
- capStyle: ShapePath.RoundCap
-
- property int joinStyleIdx: 0
- property variant styles: [ ShapePath.BevelJoin, ShapePath.MiterJoin, ShapePath.RoundJoin ]
- property variant styleTexts: [ "BevelJoin", "MiterJoin", "RoundJoin" ]
-
- joinStyle: styles[joinStyleIdx]
-
- startX: 30
- startY: 30
- PathLine { x: 100; y: 100 }
- PathLine { x: 30; y: 100 }
- }
- }
-
- Timer {
- interval: 1000
- repeat: true
- running: true
- onTriggered: joinTest.joinStyleIdx = (joinTest.joinStyleIdx + 1) % joinTest.styles.length
- }
-
- Text {
- id: txt
- anchors.right: parent.right
- text: joinTest.styleTexts[joinTest.joinStyleIdx]
- }
-}
diff --git a/examples/quick/shapes/largeOrSmallArc.qml b/examples/quick/shapes/largeOrSmallArc.qml
deleted file mode 100644
index 0ac934ca1c..0000000000
--- a/examples/quick/shapes/largeOrSmallArc.qml
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
-
- Repeater {
- model: 2
- Shape {
- width: 200
- height: 200
- anchors.centerIn: parent
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: model.index === 0 ? "red" : "blue"
- strokeStyle: ShapePath.DashLine
- strokeWidth: 4
-
- startX: 50; startY: 100
- PathArc {
- x: 100; y: 150
- radiusX: 50; radiusY: 50
- useLargeArc: model.index === 1
- }
- }
- }
- }
-
- Column {
- anchors.right: parent.right
- Text {
- text: "Small"
- color: "red"
- }
- Text {
- text: "Large"
- color: "blue"
- }
- }
-}
diff --git a/examples/quick/shapes/linearGradient.qml b/examples/quick/shapes/linearGradient.qml
deleted file mode 100644
index 8ab6d7407d..0000000000
--- a/examples/quick/shapes/linearGradient.qml
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
- Shape {
- id: shape
- anchors.fill: parent
-
- ShapePath {
- id: p
- strokeWidth: 5
- strokeColor: "blue"
- strokeStyle: ShapePath.DashLine
- dashPattern: [ 1, 4, 4, 4 ]
- fillColor: "lightBlue"
-
- property real xr: 70
- property real yr: 30
- startX: shape.width / 2 - xr
- startY: shape.height / 2 - yr
- PathArc {
- x: shape.width / 2 + p.xr
- y: shape.height / 2 + p.yr
- radiusX: p.xr; radiusY: p.yr
- useLargeArc: true
- }
- PathArc {
- x: shape.width / 2 - p.xr
- y: shape.height / 2 - p.yr
- radiusX: p.xr; radiusY: p.yr
- useLargeArc: true
- }
- }
- }
-}
diff --git a/examples/quick/shapes/main.cpp b/examples/quick/shapes/main.cpp
deleted file mode 100644
index 1679876d37..0000000000
--- a/examples/quick/shapes/main.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include "../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(shapes/main)
diff --git a/examples/quick/shapes/main.qml b/examples/quick/shapes/main.qml
deleted file mode 100644
index c39aa19ed3..0000000000
--- a/examples/quick/shapes/main.qml
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import shared
-
-Item {
- width: 1280
- height: 720
- LauncherList {
- anchors.fill: parent
- Component.onCompleted: {
- addExample("Shape Gallery", "Simple path rendering examples", Qt.resolvedUrl("shapegallery.qml"))
- addExample("Interactive Shape", "Dynamic, interactive path rendering examples", Qt.resolvedUrl("interactive.qml"))
- addExample("Super- and multisampling", "Improving quality", Qt.resolvedUrl("sampling.qml"))
- addExample("Clip My Tiger!", "Clip examples, a.k.a. What Not To Do", Qt.resolvedUrl("clippedtigers.qml"))
- }
- }
-}
diff --git a/examples/quick/shapes/quadraticCurve.qml b/examples/quick/shapes/quadraticCurve.qml
deleted file mode 100644
index b20bd73394..0000000000
--- a/examples/quick/shapes/quadraticCurve.qml
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
-
- Item {
- width: 200
- height: 100
- anchors.centerIn: parent
-
- Shape {
- id: shape
- anchors.fill: parent
-
- ShapePath {
- strokeWidth: 4
- strokeColor: "black"
- fillColor: "transparent"
-
- startX: 50
- startY: 50
- PathQuad {
- x: 150; y: 50
- controlX: cp.x; controlY: cp.y
- }
- }
- }
-
- Rectangle {
- id: cp
- color: "red"
- width: 10
- height: 10
- SequentialAnimation on x {
- loops: Animation.Infinite
- NumberAnimation {
- from: 0
- to: shape.width - cp.width
- duration: 5000
- }
- NumberAnimation {
- from: shape.width - cp.width
- to: 0
- duration: 5000
- }
- }
- }
- }
-}
diff --git a/examples/quick/shapes/radialGradient.qml b/examples/quick/shapes/radialGradient.qml
deleted file mode 100644
index 5fd3670b28..0000000000
--- a/examples/quick/shapes/radialGradient.qml
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
- Shape {
- width: 200
- height: 150
- anchors.centerIn: parent
- ShapePath {
- strokeWidth: 4
- strokeColor: "red"
- fillGradient: LinearGradient {
- x1: 20; y1: 20
- x2: 180; y2: 130
- GradientStop { position: 0; color: "blue" }
- GradientStop { position: 0.2; color: "green" }
- GradientStop { position: 0.4; color: "red" }
- GradientStop { position: 0.6; color: "yellow" }
- GradientStop { position: 1; color: "cyan" }
- }
- fillColor: "blue" // ignored with the gradient set
- strokeStyle: ShapePath.DashLine
- dashPattern: [ 1, 4 ]
- startX: 20; startY: 20
- PathLine { x: 180; y: 130 }
- PathLine { x: 20; y: 130 }
- PathLine { x: 20; y: 20 }
- }
- transform: Rotation { origin.x: 100; origin.y: 50; axis { x: 0; y: 1; z: 0 }
- SequentialAnimation on angle {
- NumberAnimation { from: 0; to: 75; duration: 2000 }
- NumberAnimation { from: 75; to: -75; duration: 4000 }
- NumberAnimation { from: -75; to: 0; duration: 2000 }
- loops: Animation.Infinite
- }
- }
- }
-}
diff --git a/examples/quick/shapes/sampling.qml b/examples/quick/shapes/sampling.qml
deleted file mode 100644
index e88aa380a2..0000000000
--- a/examples/quick/shapes/sampling.qml
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- id: root
- width: 1024
- height: 768
-
- property color col: "lightsteelblue"
- gradient: Gradient {
- GradientStop { position: 0.0; color: Qt.tint(root.col, "#20FFFFFF") }
- GradientStop { position: 0.1; color: Qt.tint(root.col, "#20AAAAAA") }
- GradientStop { position: 0.9; color: Qt.tint(root.col, "#20666666") }
- GradientStop { position: 1.0; color: Qt.tint(root.col, "#20000000") }
- }
-
- Row {
- anchors.fill: parent
- anchors.margins: 20
- spacing: 40
-
- Column {
- spacing: 40
-
- Text {
- text: "Original"
- }
-
- // A simple Shape without anything special.
- Rectangle {
- color: "lightGray"
- width: 400
- height: 200
-
- Shape {
- x: 30
- y: 20
- width: 50
- height: 50
- scale: 2
-
- ShapePath {
- strokeColor: "green"
- NumberAnimation on strokeWidth { from: 1; to: 20; duration: 5000 }
- fillColor: "transparent"
- capStyle: ShapePath.RoundCap
-
- startX: 40; startY: 30
- PathQuad { x: 50; y: 80; controlX: 0; controlY: 80 }
- PathLine { x: 150; y: 80 }
- PathQuad { x: 160; y: 30; controlX: 200; controlY: 80 }
- }
- }
- }
-
- Text {
- text: "Supersampling (2x)"
- }
-
- // Now let's use 2x supersampling via layers. This way the entire subtree
- // is rendered into an FBO twice the size and then drawn with linear
- // filtering. This allows having some level of AA even when there is no
- // support for multisample framebuffers.
- Rectangle {
- id: supersampledItem
- color: "lightGray"
- width: 400
- height: 200
-
- layer.enabled: true
- layer.smooth: true
- layer.textureSize: Qt.size(supersampledItem.width * 2, supersampledItem.height * 2)
-
- Shape {
- x: 30
- y: 20
- width: 50
- height: 50
- scale: 2
-
- ShapePath {
- strokeColor: "green"
- NumberAnimation on strokeWidth { from: 1; to: 20; duration: 5000 }
- fillColor: "transparent"
- capStyle: ShapePath.RoundCap
-
- startX: 40; startY: 30
- PathQuad { x: 50; y: 80; controlX: 0; controlY: 80 }
- PathLine { x: 150; y: 80 }
- PathQuad { x: 160; y: 30; controlX: 200; controlY: 80 }
- }
- }
- }
- }
-
- Column {
- spacing: 40
-
- Text {
- text: "Multisampling (4x)"
- }
-
- // Now let's use 4x MSAA, again via layers. This needs support for
- // multisample renderbuffers and framebuffer blits.
- Rectangle {
- color: "lightGray"
- width: 400
- height: 200
-
- layer.enabled: true
- layer.smooth: true
- layer.samples: 4
-
- Shape {
- x: 30
- y: 20
- width: 50
- height: 50
- scale: 2
-
- ShapePath {
- strokeColor: "green"
- NumberAnimation on strokeWidth { from: 1; to: 20; duration: 5000 }
- fillColor: "transparent"
- capStyle: ShapePath.RoundCap
-
- startX: 40; startY: 30
- PathQuad { x: 50; y: 80; controlX: 0; controlY: 80 }
- PathLine { x: 150; y: 80 }
- PathQuad { x: 160; y: 30; controlX: 200; controlY: 80 }
- }
- }
- }
- }
- }
-}
diff --git a/examples/quick/shapes/shapegallery.qml b/examples/quick/shapes/shapegallery.qml
deleted file mode 100644
index dec1b4a5c5..0000000000
--- a/examples/quick/shapes/shapegallery.qml
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- id: root
- width: 1024
- height: 768
-
- property color col: "lightsteelblue"
- gradient: Gradient {
- GradientStop { position: 0.0; color: Qt.tint(root.col, "#20FFFFFF") }
- GradientStop { position: 0.1; color: Qt.tint(root.col, "#20AAAAAA") }
- GradientStop { position: 0.9; color: Qt.tint(root.col, "#20666666") }
- GradientStop { position: 1.0; color: Qt.tint(root.col, "#20000000") }
- }
-
- ListModel {
- id: pathGalleryModel
- ListElement {
- name: "Stroke and fill"
- shapeUrl: "tapableTriangle.qml"
- }
- ListElement {
- name: "Stroke or fill only"
- shapeUrl: "strokeOrFill.qml"
- }
- ListElement {
- name: "Dash pattern"
- shapeUrl: "linearGradient.qml"
- }
- ListElement {
- name: "Linear gradient"
- shapeUrl: "radialGradient.qml"
- }
- ListElement {
- name: "Radial gradient"
- shapeUrl: "dashPattern.qml"
- }
- ListElement {
- name: "Fill rules"
- shapeUrl: "fillRules.qml"
- }
- ListElement {
- name: "Join styles"
- shapeUrl: "joinStyles.qml"
- }
- ListElement {
- name: "Cap styles"
- shapeUrl: "capStyles.qml"
- }
- ListElement {
- name: "Quadratic curve"
- shapeUrl: "quadraticCurve.qml"
- }
- ListElement {
- name: "Cubic curve"
- shapeUrl: "cubicCurve.qml"
- }
- ListElement {
- name: "Elliptical arc"
- shapeUrl: "ellipticalArcs.qml"
- }
- ListElement {
- name: "Gradient spread modes"
- shapeUrl: "gradientSpreadModes.qml"
- }
- ListElement {
- name: "Arc direction"
- shapeUrl: "arcDirection.qml"
- }
- ListElement {
- name: "Large/small arc"
- shapeUrl: "largeOrSmallArc.qml"
- }
- ListElement {
- name: "Arc rotation"
- shapeUrl: "arcRotation.qml"
- }
- ListElement {
- name: "Tiger"
- shapeUrl: "tigerLoader.qml"
- }
- ListElement {
- name: "Text"
- shapeUrl: "text.qml"
- }
- }
-
- property int gridSpacing: 10
-
- Component {
- id: pathGalleryDelegate
- Rectangle {
- border.color: "purple"
- width: grid.cellWidth - root.gridSpacing
- height: grid.cellHeight - root.gridSpacing
- Column {
- anchors.fill: parent
- anchors.margins: 4
- Item {
- width: parent.width
- height: parent.height - delegText.height
- Loader {
- source: Qt.resolvedUrl(shapeUrl)
- anchors.fill: parent
- }
- }
- Text {
- id: delegText
- text: model.name
- font.pointSize: 16
- anchors.horizontalCenter: parent.horizontalCenter
- }
- }
- }
- }
-
- Rectangle {
- anchors.fill: parent
- anchors.margins: 10
- color: "lightBlue"
- clip: true
-
- GridView {
- id: grid
- anchors.fill: parent
- anchors.margins: root.gridSpacing
- cellWidth: 300
- cellHeight: 300
- delegate: pathGalleryDelegate
- model: pathGalleryModel
- }
- }
-
- Text {
- anchors.right: parent.right
- Shape { id: dummyShape; ShapePath { } } // used only to get the renderer type
- color: "darkBlue"
- font.pointSize: 12
- property variant rendererStrings: [ "Unknown", "Generic (QtGui triangulator)", "GL_NV_path_rendering", "Software (QPainter)" ]
- text: "Active Shape backend: " + rendererStrings[dummyShape.rendererType]
- SequentialAnimation on opacity {
- NumberAnimation { from: 1; to: 0; duration: 5000 }
- PauseAnimation { duration: 5000 }
- NumberAnimation { from: 0; to: 1; duration: 1000 }
- PauseAnimation { duration: 5000 }
- loops: Animation.Infinite
- }
- }
-}
diff --git a/examples/quick/shapes/shapes.pro b/examples/quick/shapes/shapes.pro
deleted file mode 100644
index eb2baae0b4..0000000000
--- a/examples/quick/shapes/shapes.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-RESOURCES += \
- shapes.qrc \
- ../shared/shared.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/shapes
-INSTALLS += target
diff --git a/examples/quick/shapes/shapes.qrc b/examples/quick/shapes/shapes.qrc
deleted file mode 100644
index 846984b301..0000000000
--- a/examples/quick/shapes/shapes.qrc
+++ /dev/null
@@ -1,27 +0,0 @@
-<RCC>
- <qresource prefix="/qt/qml/shapes">
- <file>main.qml</file>
- <file>shapegallery.qml</file>
- <file>interactive.qml</file>
- <file>sampling.qml</file>
- <file>clippedtigers.qml</file>
- <file>tiger.qml</file>
- <file>tapableTriangle.qml</file>
- <file>strokeOrFill.qml</file>
- <file>dashPattern.qml</file>
- <file>linearGradient.qml</file>
- <file>radialGradient.qml</file>
- <file>fillRules.qml</file>
- <file>joinStyles.qml</file>
- <file>capStyles.qml</file>
- <file>quadraticCurve.qml</file>
- <file>cubicCurve.qml</file>
- <file>ellipticalArcs.qml</file>
- <file>gradientSpreadModes.qml</file>
- <file>arcDirection.qml</file>
- <file>largeOrSmallArc.qml</file>
- <file>arcRotation.qml</file>
- <file>tigerLoader.qml</file>
- <file>text.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/shapes/strokeOrFill.qml b/examples/quick/shapes/strokeOrFill.qml
deleted file mode 100644
index e5a4f350a4..0000000000
--- a/examples/quick/shapes/strokeOrFill.qml
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256; height: 256
-
- Shape {
- id: circ1
- anchors.fill: parent
-
- ShapePath {
- id: p1
- fillColor: "transparent" // stroke only
- strokeWidth: 4
-
- SequentialAnimation on strokeColor {
- loops: Animation.Infinite
- ColorAnimation {
- from: "black"
- to: "yellow"
- duration: 5000
- }
- ColorAnimation {
- from: "yellow"
- to: "green"
- duration: 5000
- }
- ColorAnimation {
- from: "green"
- to: "black"
- duration: 5000
- }
- }
-
- property real r: 60
- startX: circ1.width / 2 - r
- startY: circ1.height / 2 - r
- PathArc {
- x: circ1.width / 2 + p1.r
- y: circ1.height / 2 + p1.r
- radiusX: p1.r; radiusY: p1.r
- useLargeArc: true
- }
- PathArc {
- x: circ1.width / 2 - p1.r
- y: circ1.height / 2 - p1.r
- radiusX: p1.r; radiusY: p1.r
- useLargeArc: true
- }
- }
- }
-
- Shape {
- id: circ2
- anchors.fill: parent
-
- SequentialAnimation on opacity {
- loops: Animation.Infinite
- NumberAnimation { from: 1.0; to: 0.0; duration: 5000 }
- NumberAnimation { from: 0.0; to: 1.0; duration: 5000 }
- }
-
- ShapePath {
- id: p2
- strokeWidth: -1 // or strokeColor: "transparent"
-
- SequentialAnimation on fillColor {
- loops: Animation.Infinite
- ColorAnimation {
- from: "gray"
- to: "purple"
- duration: 3000
- }
- ColorAnimation {
- from: "purple"
- to: "red"
- duration: 3000
- }
- ColorAnimation {
- from: "red"
- to: "gray"
- duration: 3000
- }
- }
-
- property real r: 40
- startX: circ2.width / 2 - r
- startY: circ2.height / 2 - r
- PathArc {
- x: circ2.width / 2 + p2.r
- y: circ2.height / 2 + p2.r
- radiusX: p2.r; radiusY: p2.r
- useLargeArc: true
- }
- PathArc {
- x: circ2.width / 2 - p2.r
- y: circ2.height / 2 - p2.r
- radiusX: p2.r; radiusY: p2.r
- useLargeArc: true
- }
- }
- }
-}
diff --git a/examples/quick/shapes/tapableTriangle.qml b/examples/quick/shapes/tapableTriangle.qml
deleted file mode 100644
index a369293300..0000000000
--- a/examples/quick/shapes/tapableTriangle.qml
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- width: 256
- height: 256
- color: th.pressed ? "steelBlue" : "lightGray"
- containmentMask: ctr
-
- TapHandler { id: th }
-
- Shape {
- id: ctr
- anchors.fill: parent
- containsMode: Shape.FillContains
-
- ShapePath {
- strokeColor: "red"
- fillColor: "blue"
-
- SequentialAnimation on strokeWidth {
- loops: Animation.Infinite
- NumberAnimation { from: 1; to: 30; duration: 5000 }
- NumberAnimation { from: 30; to: 1; duration: 5000 }
- PauseAnimation { duration: 2000 }
- }
-
- startX: 30; startY: 30
- PathLine { x: ctr.width - 30; y: ctr.height - 30 }
- PathLine { x: 30; y: ctr.height - 30 }
- PathLine { x: 30; y: 30 }
- }
-
- // Besides ShapePath, Shape supports visual and non-visual objects too, allowing
- // free mixing without going through extra hoops:
- Rectangle {
- id: testRect
- color: "green"
- opacity: 0.3
- width: 20
- height: 20
- anchors.right: parent.right
- }
- Timer {
- interval: 100
- repeat: true
- onTriggered: testRect.width = testRect.width > 1 ? testRect.width - 1 : 20
- running: true
- }
- }
-}
diff --git a/examples/quick/shapes/text.qml b/examples/quick/shapes/text.qml
deleted file mode 100644
index 141bd8cd8d..0000000000
--- a/examples/quick/shapes/text.qml
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
-
- Shape {
- anchors.centerIn: parent
- width: 200
- height: 100
-
- ShapePath {
- id: capTest
- strokeColor: "black"
- strokeWidth: 1
- fillColor: "black"
-
- PathText { x: 0; y: 0; font.family: "Arial"; font.pixelSize: 150; text: "Qt!" }
- }
- }
-}
diff --git a/examples/quick/shapes/tiger.qml b/examples/quick/shapes/tiger.qml
deleted file mode 100644
index 148039aff1..0000000000
--- a/examples/quick/shapes/tiger.qml
+++ /dev/null
@@ -1,3667 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Shape {
- asynchronous: true
- width: 494; height: 510
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.172
- PathMove { x: -122.304; y: 84.285 }
- PathCubic { control1X: -122.304; control1Y: 84.285; control2X: -122.203; control2Y: 86.179; x: -123.027; y: 86.16 }
- PathCubic { control1X: -123.851; control1Y: 86.141; control2X: -140.305; control2Y: 38.066; x: -160.833; y: 40.309 }
- PathCubic { control1X: -160.833; control1Y: 40.309; control2X: -143.05; control2Y: 32.956; x: -122.304; y: 84.285 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.172
- PathMove { x: -118.774; y: 81.262 }
- PathCubic { control1X: -118.774; control1Y: 81.262; control2X: -119.323; control2Y: 83.078; x: -120.092; y: 82.779 }
- PathCubic { control1X: -120.86; control1Y: 82.481; control2X: -119.977; control2Y: 31.675; x: -140.043; y: 26.801 }
- PathCubic { control1X: -140.043; control1Y: 26.801; control2X: -120.82; control2Y: 25.937; x: -118.774; y: 81.262 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.172
- PathMove { x: -91.284; y: 123.59 }
- PathCubic { control1X: -91.284; control1Y: 123.59; control2X: -89.648; control2Y: 124.55; x: -90.118; y: 125.227 }
- PathCubic { control1X: -90.589; control1Y: 125.904; control2X: -139.763; control2Y: 113.102; x: -149.218; y: 131.459 }
- PathCubic { control1X: -149.218; control1Y: 131.459; control2X: -145.539; control2Y: 112.572; x: -91.284; y: 123.59 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.172
- PathMove { x: -94.093; y: 133.801 }
- PathCubic { control1X: -94.093; control1Y: 133.801; control2X: -92.237; control2Y: 134.197; x: -92.471; y: 134.988 }
- PathCubic { control1X: -92.704; control1Y: 135.779; control2X: -143.407; control2Y: 139.121; x: -146.597; y: 159.522 }
- PathCubic { control1X: -146.597; control1Y: 159.522; control2X: -149.055; control2Y: 140.437; x: -94.093; y: 133.801 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.172
- PathMove { x: -98.304; y: 128.276 }
- PathCubic { control1X: -98.304; control1Y: 128.276; control2X: -96.526; control2Y: 128.939; x: -96.872; y: 129.687 }
- PathCubic { control1X: -97.218; control1Y: 130.435; control2X: -147.866; control2Y: 126.346; x: -153.998; y: 146.064 }
- PathCubic { control1X: -153.998; control1Y: 146.064; control2X: -153.646; control2Y: 126.825; x: -98.304; y: 128.276 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.172
- PathMove { x: -109.009; y: 110.072 }
- PathCubic { control1X: -109.009; control1Y: 110.072; control2X: -107.701; control2Y: 111.446; x: -108.34; y: 111.967 }
- PathCubic { control1X: -108.979; control1Y: 112.488; control2X: -152.722; control2Y: 86.634; x: -166.869; y: 101.676 }
- PathCubic { control1X: -166.869; control1Y: 101.676; control2X: -158.128; control2Y: 84.533; x: -109.009; y: 110.072 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.172
- PathMove { x: -116.554; y: 114.263 }
- PathCubic { control1X: -116.554; control1Y: 114.263; control2X: -115.098; control2Y: 115.48; x: -115.674; y: 116.071 }
- PathCubic { control1X: -116.25; control1Y: 116.661; control2X: -162.638; control2Y: 95.922; x: -174.992; y: 112.469 }
- PathCubic { control1X: -174.992; control1Y: 112.469; control2X: -168.247; control2Y: 94.447; x: -116.554; y: 114.263 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.172
- PathMove { x: -119.154; y: 118.335 }
- PathCubic { control1X: -119.154; control1Y: 118.335; control2X: -117.546; control2Y: 119.343; x: -118.036; y: 120.006 }
- PathCubic { control1X: -118.526; control1Y: 120.669; control2X: -167.308; control2Y: 106.446; x: -177.291; y: 124.522 }
- PathCubic { control1X: -177.291; control1Y: 124.522; control2X: -173.066; control2Y: 105.749; x: -119.154; y: 118.335 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.172
- PathMove { x: -108.42; y: 118.949 }
- PathCubic { control1X: -108.42; control1Y: 118.949; control2X: -107.298; control2Y: 120.48; x: -107.999; y: 120.915 }
- PathCubic { control1X: -108.7; control1Y: 121.35; control2X: -148.769; control2Y: 90.102; x: -164.727; y: 103.207 }
- PathCubic { control1X: -164.727; control1Y: 103.207; control2X: -153.862; control2Y: 87.326; x: -108.42; y: 118.949 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.172
- PathMove { x: -128.2; y: 90 }
- PathCubic { control1X: -128.2; control1Y: 90; control2X: -127.6; control2Y: 91.8; x: -128.4; y: 92 }
- PathCubic { control1X: -129.2; control1Y: 92.2; control2X: -157.8; control2Y: 50.2; x: -177.001; y: 57.8 }
- PathCubic { control1X: -177.001; control1Y: 57.8; control2X: -161.8; control2Y: 46; x: -128.2; y: 90 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.172
- PathMove { x: -127.505; y: 96.979 }
- PathCubic { control1X: -127.505; control1Y: 96.979; control2X: -126.53; control2Y: 98.608; x: -127.269; y: 98.975 }
- PathCubic { control1X: -128.007; control1Y: 99.343; control2X: -164.992; control2Y: 64.499; x: -182.101; y: 76.061 }
- PathCubic { control1X: -182.101; control1Y: 76.061; control2X: -169.804; control2Y: 61.261; x: -127.505; y: 96.979 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.172
- PathMove { x: -127.62; y: 101.349 }
- PathCubic { control1X: -127.62; control1Y: 101.349; control2X: -126.498; control2Y: 102.88; x: -127.199; y: 103.315 }
- PathCubic { control1X: -127.9; control1Y: 103.749; control2X: -167.969; control2Y: 72.502; x: -183.927; y: 85.607 }
- PathCubic { control1X: -183.927; control1Y: 85.607; control2X: -173.062; control2Y: 69.726; x: -127.62; y: 101.349 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 1
- PathMove { x: -129.83; y: 103.065 }
- PathCubic { control1X: -129.327; control1Y: 109.113; control2X: -128.339; control2Y: 115.682; x: -126.6; y: 118.801 }
- PathCubic { control1X: -126.6; control1Y: 118.801; control2X: -130.2; control2Y: 131.201; x: -121.4; y: 144.401 }
- PathCubic { control1X: -121.4; control1Y: 144.401; control2X: -121.8; control2Y: 151.601; x: -120.2; y: 154.801 }
- PathCubic { control1X: -120.2; control1Y: 154.801; control2X: -116.2; control2Y: 163.201; x: -111.4; y: 164.001 }
- PathCubic { control1X: -107.516; control1Y: 164.648; control2X: -98.793; control2Y: 167.717; x: -88.932; y: 169.121 }
- PathCubic { control1X: -88.932; control1Y: 169.121; control2X: -71.8; control2Y: 183.201; x: -75; y: 196.001 }
- PathCubic { control1X: -75; control1Y: 196.001; control2X: -75.4; control2Y: 212.401; x: -79; y: 214.001 }
- PathCubic { control1X: -79; control1Y: 214.001; control2X: -67.4; control2Y: 202.801; x: -77; y: 219.601 }
- PathLine { x: -81.4; y: 238.401 }
- PathCubic { control1X: -81.4; control1Y: 238.401; control2X: -55.8; control2Y: 216.801; x: -71.4; y: 235.201 }
- PathLine { x: -81.4; y: 261.201 }
- PathCubic { control1X: -81.4; control1Y: 261.201; control2X: -61.8; control2Y: 242.801; x: -69; y: 251.201 }
- PathLine { x: -72.2; y: 260.001 }
- PathCubic { control1X: -72.2; control1Y: 260.001; control2X: -29; control2Y: 232.801; x: -59.8; y: 262.401 }
- PathCubic { control1X: -59.8; control1Y: 262.401; control2X: -51.8; control2Y: 258.801; x: -47.4; y: 261.601 }
- PathCubic { control1X: -47.4; control1Y: 261.601; control2X: -40.6; control2Y: 260.401; x: -41.4; y: 262.001 }
- PathCubic { control1X: -41.4; control1Y: 262.001; control2X: -62.2; control2Y: 272.401; x: -65.8; y: 290.801 }
- PathCubic { control1X: -65.8; control1Y: 290.801; control2X: -57.4; control2Y: 280.801; x: -60.6; y: 291.601 }
- PathLine { x: -60.2; y: 303.201 }
- PathCubic { control1X: -60.2; control1Y: 303.201; control2X: -56.2; control2Y: 281.601; x: -56.6; y: 319.201 }
- PathCubic { control1X: -56.6; control1Y: 319.201; control2X: -37.4; control2Y: 301.201; x: -49; y: 322.001 }
- PathLine { x: -49; y: 338.801 }
- PathCubic { control1X: -49; control1Y: 338.801; control2X: -33.8; control2Y: 322.401; x: -40.2; y: 335.201 }
- PathCubic { control1X: -40.2; control1Y: 335.201; control2X: -30.2; control2Y: 326.401; x: -34.2; y: 341.601 }
- PathCubic { control1X: -34.2; control1Y: 341.601; control2X: -35; control2Y: 352.001; x: -30.6; y: 340.801 }
- PathCubic { control1X: -30.6; control1Y: 340.801; control2X: -14.6; control2Y: 310.201; x: -20.6; y: 336.401 }
- PathCubic { control1X: -20.6; control1Y: 336.401; control2X: -21.4; control2Y: 355.601; x: -16.6; y: 340.801 }
- PathCubic { control1X: -16.6; control1Y: 340.801; control2X: -16.2; control2Y: 351.201; x: -7; y: 358.401 }
- PathCubic { control1X: -7; control1Y: 358.401; control2X: -8.2; control2Y: 307.601; x: 4.6; y: 343.601 }
- PathLine { x: 8.6; y: 360.001 }
- PathCubic { control1X: 8.6; control1Y: 360.001; control2X: 11.4; control2Y: 350.801; x: 11; y: 345.601 }
- PathCubic { control1X: 11; control1Y: 345.601; control2X: 25.8; control2Y: 329.201; x: 19; y: 353.601 }
- PathCubic { control1X: 19; control1Y: 353.601; control2X: 34.2; control2Y: 330.801; x: 31; y: 344.001 }
- PathCubic { control1X: 31; control1Y: 344.001; control2X: 23.4; control2Y: 360.001; x: 25; y: 364.801 }
- PathCubic { control1X: 25; control1Y: 364.801; control2X: 41.8; control2Y: 330.001; x: 43; y: 328.401 }
- PathCubic { control1X: 43; control1Y: 328.401; control2X: 41; control2Y: 370.802; x: 51.8; y: 334.801 }
- PathCubic { control1X: 51.8; control1Y: 334.801; control2X: 57.4; control2Y: 346.801; x: 54.6; y: 351.201 }
- PathCubic { control1X: 54.6; control1Y: 351.201; control2X: 62.6; control2Y: 343.201; x: 61.8; y: 340.001 }
- PathCubic { control1X: 61.8; control1Y: 340.001; control2X: 66.4; control2Y: 331.801; x: 69.2; y: 345.401 }
- PathCubic { control1X: 69.2; control1Y: 345.401; control2X: 71; control2Y: 354.801; x: 72.6; y: 351.601 }
- PathCubic { control1X: 72.6; control1Y: 351.601; control2X: 76.6; control2Y: 375.602; x: 77.8; y: 352.801 }
- PathCubic { control1X: 77.8; control1Y: 352.801; control2X: 79.4; control2Y: 339.201; x: 72.2; y: 327.601 }
- PathCubic { control1X: 72.2; control1Y: 327.601; control2X: 73; control2Y: 324.401; x: 70.2; y: 320.401 }
- PathCubic { control1X: 70.2; control1Y: 320.401; control2X: 83.8; control2Y: 342.001; x: 76.6; y: 313.201 }
- PathCubic { control1X: 76.6; control1Y: 313.201; control2X: 87.801; control2Y: 321.201; x: 89.001; y: 321.201 }
- PathCubic { control1X: 89.001; control1Y: 321.201; control2X: 75.4; control2Y: 298.001; x: 84.2; y: 302.801 }
- PathCubic { control1X: 84.2; control1Y: 302.801; control2X: 79; control2Y: 292.401; x: 97.001; y: 304.401 }
- PathCubic { control1X: 97.001; control1Y: 304.401; control2X: 81; control2Y: 288.401; x: 98.601; y: 298.001 }
- PathCubic { control1X: 98.601; control1Y: 298.001; control2X: 106.601; control2Y: 304.401; x: 99.001; y: 294.401 }
- PathCubic { control1X: 99.001; control1Y: 294.401; control2X: 84.6; control2Y: 278.401; x: 106.601; y: 296.401 }
- PathCubic { control1X: 106.601; control1Y: 296.401; control2X: 118.201; control2Y: 312.801; x: 119.001; y: 315.601 }
- PathCubic { control1X: 119.001; control1Y: 315.601; control2X: 109.001; control2Y: 286.401; x: 104.601; y: 283.601 }
- PathCubic { control1X: 104.601; control1Y: 283.601; control2X: 113.001; control2Y: 247.201; x: 154.201; y: 262.801 }
- PathCubic { control1X: 154.201; control1Y: 262.801; control2X: 161.001; control2Y: 280.001; x: 165.401; y: 261.601 }
- PathCubic { control1X: 165.401; control1Y: 261.601; control2X: 178.201; control2Y: 255.201; x: 189.401; y: 282.801 }
- PathCubic { control1X: 189.401; control1Y: 282.801; control2X: 193.401; control2Y: 269.201; x: 192.601; y: 266.401 }
- PathCubic { control1X: 192.601; control1Y: 266.401; control2X: 199.401; control2Y: 267.601; x: 198.601; y: 266.401 }
- PathCubic { control1X: 198.601; control1Y: 266.401; control2X: 211.801; control2Y: 270.801; x: 213.001; y: 270.001 }
- PathCubic { control1X: 213.001; control1Y: 270.001; control2X: 219.801; control2Y: 276.801; x: 220.201; y: 273.201 }
- PathCubic { control1X: 220.201; control1Y: 273.201; control2X: 229.401; control2Y: 276.001; x: 227.401; y: 272.401 }
- PathCubic { control1X: 227.401; control1Y: 272.401; control2X: 236.201; control2Y: 288.001; x: 236.601; y: 291.601 }
- PathLine { x: 239.001; y: 277.601 }
- PathLine { x: 241.001; y: 280.401 }
- PathCubic { control1X: 241.001; control1Y: 280.401; control2X: 242.601; control2Y: 272.801; x: 241.801; y: 271.601 }
- PathCubic { control1X: 241.001; control1Y: 270.401; control2X: 261.801; control2Y: 278.401; x: 266.601; y: 299.201 }
- PathLine { x: 268.601; y: 307.601 }
- PathCubic { control1X: 268.601; control1Y: 307.601; control2X: 274.601; control2Y: 292.801; x: 273.001; y: 288.801 }
- PathCubic { control1X: 273.001; control1Y: 288.801; control2X: 278.201; control2Y: 289.601; x: 278.601; y: 294.001 }
- PathCubic { control1X: 278.601; control1Y: 294.001; control2X: 282.601; control2Y: 270.801; x: 277.801; y: 264.801 }
- PathCubic { control1X: 277.801; control1Y: 264.801; control2X: 282.201; control2Y: 264.001; x: 283.401; y: 267.601 }
- PathLine { x: 283.401; y: 260.401 }
- PathCubic { control1X: 283.401; control1Y: 260.401; control2X: 290.601; control2Y: 261.201; x: 290.601; y: 258.801 }
- PathCubic { control1X: 290.601; control1Y: 258.801; control2X: 295.001; control2Y: 254.801; x: 297.001; y: 259.601 }
- PathCubic { control1X: 297.001; control1Y: 259.601; control2X: 284.601; control2Y: 224.401; x: 303.001; y: 243.601 }
- PathCubic { control1X: 303.001; control1Y: 243.601; control2X: 310.201; control2Y: 254.401; x: 306.601; y: 235.601 }
- PathCubic { control1X: 303.001; control1Y: 216.801; control2X: 299.001; control2Y: 215.201; x: 303.801; y: 214.801 }
- PathCubic { control1X: 303.801; control1Y: 214.801; control2X: 304.601; control2Y: 211.201; x: 302.601; y: 209.601 }
- PathCubic { control1X: 300.601; control1Y: 208.001; control2X: 303.801; control2Y: 209.601; x: 303.801; y: 209.601 }
- PathCubic { control1X: 303.801; control1Y: 209.601; control2X: 308.601; control2Y: 213.601; x: 303.401; y: 191.601 }
- PathCubic { control1X: 303.401; control1Y: 191.601; control2X: 309.801; control2Y: 193.201; x: 297.801; y: 164.001 }
- PathCubic { control1X: 297.801; control1Y: 164.001; control2X: 300.601; control2Y: 161.601; x: 296.601; y: 153.201 }
- PathCubic { control1X: 296.601; control1Y: 153.201; control2X: 304.601; control2Y: 157.601; x: 307.401; y: 156.001 }
- PathCubic { control1X: 307.401; control1Y: 156.001; control2X: 307.001; control2Y: 154.401; x: 303.801; y: 150.401 }
- PathCubic { control1X: 303.801; control1Y: 150.401; control2X: 282.201; control2Y: 95.6; x: 302.601; y: 117.601 }
- PathCubic { control1X: 302.601; control1Y: 117.601; control2X: 314.451; control2Y: 131.151; x: 308.051; y: 108.351 }
- PathCubic { control1X: 308.051; control1Y: 108.351; control2X: 298.94; control2Y: 84.341; x: 299.717; y: 80.045 }
- PathLine { x: -129.83; y: 103.065 }
- }
-
- ShapePath {
- fillColor: "#cc7226"
- strokeColor: "#000000"
- strokeWidth: 1
- PathMove { x: 299.717; y: 80.245 }
- PathCubic { control1X: 300.345; control1Y: 80.426; control2X: 302.551; control2Y: 81.55; x: 303.801; y: 83.2 }
- PathCubic { control1X: 303.801; control1Y: 83.2; control2X: 310.601; control2Y: 94; x: 305.401; y: 75.6 }
- PathCubic { control1X: 305.401; control1Y: 75.6; control2X: 296.201; control2Y: 46.8; x: 305.001; y: 58 }
- PathCubic { control1X: 305.001; control1Y: 58; control2X: 311.001; control2Y: 65.2; x: 307.801; y: 51.6 }
- PathCubic { control1X: 303.936; control1Y: 35.173; control2X: 301.401; control2Y: 28.8; x: 301.401; y: 28.8 }
- PathCubic { control1X: 301.401; control1Y: 28.8; control2X: 313.001; control2Y: 33.6; x: 286.201; y: -6 }
- PathLine { x: 295.001; y: -2.4 }
- PathCubic { control1X: 295.001; control1Y: -2.4; control2X: 275.401; control2Y: -42; x: 253.801; y: -47.2 }
- PathLine { x: 245.801; y: -53.2 }
- PathCubic { control1X: 245.801; control1Y: -53.2; control2X: 284.201; control2Y: -91.2; x: 271.401; y: -128 }
- PathCubic { control1X: 271.401; control1Y: -128; control2X: 264.601; control2Y: -133.2; x: 255.001; y: -124 }
- PathCubic { control1X: 255.001; control1Y: -124; control2X: 248.601; control2Y: -119.2; x: 242.601; y: -120.8 }
- PathCubic { control1X: 242.601; control1Y: -120.8; control2X: 211.801; control2Y: -119.6; x: 209.801; y: -119.6 }
- PathCubic { control1X: 207.801; control1Y: -119.6; control2X: 173.001; control2Y: -156.8; x: 107.401; y: -139.2 }
- PathCubic { control1X: 107.401; control1Y: -139.2; control2X: 102.201; control2Y: -137.2; x: 97.801; y: -138.4 }
- PathCubic { control1X: 97.801; control1Y: -138.4; control2X: 79.4; control2Y: -154.4; x: 30.6; y: -131.6 }
- PathCubic { control1X: 30.6; control1Y: -131.6; control2X: 20.6; control2Y: -129.6; x: 19; y: -129.6 }
- PathCubic { control1X: 17.4; control1Y: -129.6; control2X: 14.6; control2Y: -129.6; x: 6.6; y: -123.2 }
- PathCubic { control1X: -1.4; control1Y: -116.8; control2X: -1.8; control2Y: -116; x: -3.8; y: -114.4 }
- PathCubic { control1X: -3.8; control1Y: -114.4; control2X: -20.2; control2Y: -103.2; x: -25; y: -102.4 }
- PathCubic { control1X: -25; control1Y: -102.4; control2X: -36.6; control2Y: -96; x: -41; y: -86 }
- PathLine { x: -44.6; y: -84.8 }
- PathCubic { control1X: -44.6; control1Y: -84.8; control2X: -46.2; control2Y: -77.6; x: -46.6; y: -76.4 }
- PathCubic { control1X: -46.6; control1Y: -76.4; control2X: -51.4; control2Y: -72.8; x: -52.2; y: -67.2 }
- PathCubic { control1X: -52.2; control1Y: -67.2; control2X: -61; control2Y: -61.2; x: -60.6; y: -56.8 }
- PathCubic { control1X: -60.6; control1Y: -56.8; control2X: -62.2; control2Y: -51.6; x: -63; y: -46.8 }
- PathCubic { control1X: -63; control1Y: -46.8; control2X: -70.2; control2Y: -42; x: -69.4; y: -39.2 }
- PathCubic { control1X: -69.4; control1Y: -39.2; control2X: -77; control2Y: -25.2; x: -75.8; y: -18.4 }
- PathCubic { control1X: -75.8; control1Y: -18.4; control2X: -82.2; control2Y: -18.8; x: -85; y: -16.4 }
- PathCubic { control1X: -85; control1Y: -16.4; control2X: -85.8; control2Y: -11.6; x: -87.4; y: -11.2 }
- PathCubic { control1X: -87.4; control1Y: -11.2; control2X: -90.2; control2Y: -10; x: -87.8; y: -6 }
- PathCubic { control1X: -87.8; control1Y: -6; control2X: -89.4; control2Y: -3.2; x: -89.8; y: -1.6 }
- PathCubic { control1X: -89.8; control1Y: -1.6; control2X: -89; control2Y: 1.2; x: -93.4; y: 6.8 }
- PathCubic { control1X: -93.4; control1Y: 6.8; control2X: -99.8; control2Y: 25.6; x: -97.8; y: 30.8 }
- PathCubic { control1X: -97.8; control1Y: 30.8; control2X: -97.4; control2Y: 35.6; x: -100.2; y: 37.2 }
- PathCubic { control1X: -100.2; control1Y: 37.2; control2X: -103.8; control2Y: 36.8; x: -95.4; y: 48.8 }
- PathCubic { control1X: -95.4; control1Y: 48.8; control2X: -94.6; control2Y: 50; x: -97.8; y: 52.4 }
- PathCubic { control1X: -97.8; control1Y: 52.4; control2X: -115; control2Y: 56; x: -117.4; y: 72.4 }
- PathCubic { control1X: -117.4; control1Y: 72.4; control2X: -131; control2Y: 87.2; x: -131; y: 92.4 }
- PathCubic { control1X: -131; control1Y: 94.705; control2X: -130.729; control2Y: 97.852; x: -130.03; y: 102.465 }
- PathCubic { control1X: -130.03; control1Y: 102.465; control2X: -130.6; control2Y: 110.801; x: -103; y: 111.601 }
- PathCubic { control1X: -75.4; control1Y: 112.401; control2X: 299.717; control2Y: 80.245; x: 299.717; y: 80.245 }
- }
-
- ShapePath {
- fillColor: "#cc7226"
- strokeWidth: -1
- PathMove { x: -115.6; y: 102.6 }
- PathCubic { control1X: -140.6; control1Y: 63.2; control2X: -126.2; control2Y: 119.601; x: -126.2; y: 119.601 }
- PathCubic { control1X: -117.4; control1Y: 154.001; control2X: 12.2; control2Y: 116.401; x: 12.2; y: 116.401 }
- PathCubic { control1X: 12.2; control1Y: 116.401; control2X: 181.001; control2Y: 86; x: 192.201; y: 82 }
- PathCubic { control1X: 203.401; control1Y: 78; control2X: 298.601; control2Y: 84.4; x: 298.601; y: 84.4 }
- PathLine { x: 293.001; y: 67.6 }
- PathCubic { control1X: 228.201; control1Y: 21.2; control2X: 209.001; control2Y: 44.4; x: 195.401; y: 40.4 }
- PathCubic { control1X: 181.801; control1Y: 36.4; control2X: 184.201; control2Y: 46; x: 181.001; y: 46.8 }
- PathCubic { control1X: 177.801; control1Y: 47.6; control2X: 138.601; control2Y: 22.8; x: 132.201; y: 23.6 }
- PathCubic { control1X: 125.801; control1Y: 24.4; control2X: 100.459; control2Y: 0.649; x: 115.401; y: 32.4 }
- PathCubic { control1X: 131.401; control1Y: 66.4; control2X: 57; control2Y: 71.6; x: 40.2; y: 60.4 }
- PathCubic { control1X: 23.4; control1Y: 49.2; control2X: 47.4; control2Y: 78.8; x: 47.4; y: 78.8 }
- PathCubic { control1X: 65.8; control1Y: 98.8; control2X: 31.4; control2Y: 82; x: 31.4; y: 82 }
- PathCubic { control1X: -3; control1Y: 69.2; control2X: -27; control2Y: 94.8; x: -30.2; y: 95.6 }
- PathCubic { control1X: -33.4; control1Y: 96.4; control2X: -38.2; control2Y: 99.6; x: -39; y: 93.2 }
- PathCubic { control1X: -39.8; control1Y: 86.8; control2X: -47.31; control2Y: 70.099; x: -79; y: 96.4 }
- PathCubic { control1X: -99; control1Y: 113.001; control2X: -112.8; control2Y: 91; x: -112.8; y: 91 }
- PathLine { x: -115.6; y: 102.6 }
- }
-
- ShapePath {
- fillColor: "#e87f3a"
- strokeWidth: -1
- PathMove { x: 133.51; y: 25.346 }
- PathCubic { control1X: 127.11; control1Y: 26.146; control2X: 101.743; control2Y: 2.407; x: 116.71; y: 34.146 }
- PathCubic { control1X: 133.31; control1Y: 69.346; control2X: 58.31; control2Y: 73.346; x: 41.51; y: 62.146 }
- PathCubic { control1X: 24.709; control1Y: 50.946; control2X: 48.71; control2Y: 80.546; x: 48.71; y: 80.546 }
- PathCubic { control1X: 67.11; control1Y: 100.546; control2X: 32.709; control2Y: 83.746; x: 32.709; y: 83.746 }
- PathCubic { control1X: -1.691; control1Y: 70.946; control2X: -25.691; control2Y: 96.546; x: -28.891; y: 97.346 }
- PathCubic { control1X: -32.091; control1Y: 98.146; control2X: -36.891; control2Y: 101.346; x: -37.691; y: 94.946 }
- PathCubic { control1X: -38.491; control1Y: 88.546; control2X: -45.87; control2Y: 72.012; x: -77.691; y: 98.146 }
- PathCubic { control1X: -98.927; control1Y: 115.492; control2X: -112.418; control2Y: 94.037; x: -112.418; y: 94.037 }
- PathLine { x: -115.618; y: 104.146 }
- PathCubic { control1X: -140.618; control1Y: 64.346; control2X: -125.546; control2Y: 122.655; x: -125.546; y: 122.655 }
- PathCubic { control1X: -116.745; control1Y: 157.056; control2X: 13.509; control2Y: 118.146; x: 13.509; y: 118.146 }
- PathCubic { control1X: 13.509; control1Y: 118.146; control2X: 182.31; control2Y: 87.746; x: 193.51; y: 83.746 }
- PathCubic { control1X: 204.71; control1Y: 79.746; control2X: 299.038; control2Y: 86.073; x: 299.038; y: 86.073 }
- PathLine { x: 293.51; y: 68.764 }
- PathCubic { control1X: 228.71; control1Y: 22.364; control2X: 210.31; control2Y: 46.146; x: 196.71; y: 42.146 }
- PathCubic { control1X: 183.11; control1Y: 38.146; control2X: 185.51; control2Y: 47.746; x: 182.31; y: 48.546 }
- PathCubic { control1X: 179.11; control1Y: 49.346; control2X: 139.91; control2Y: 24.546; x: 133.51; y: 25.346 }
- }
-
- ShapePath {
- fillColor: "#ea8c4d"
- strokeWidth: -1
- PathMove { x: 134.819; y: 27.091 }
- PathCubic { control1X: 128.419; control1Y: 27.891; control2X: 103.685; control2Y: 3.862; x: 118.019; y: 35.891 }
- PathCubic { control1X: 134.219; control1Y: 72.092; control2X: 59.619; control2Y: 75.092; x: 42.819; y: 63.892 }
- PathCubic { control1X: 26.019; control1Y: 52.692; control2X: 50.019; control2Y: 82.292; x: 50.019; y: 82.292 }
- PathCubic { control1X: 68.419; control1Y: 102.292; control2X: 34.019; control2Y: 85.492; x: 34.019; y: 85.492 }
- PathCubic { control1X: -0.381; control1Y: 72.692; control2X: -24.382; control2Y: 98.292; x: -27.582; y: 99.092 }
- PathCubic { control1X: -30.782; control1Y: 99.892; control2X: -35.582; control2Y: 103.092; x: -36.382; y: 96.692 }
- PathCubic { control1X: -37.182; control1Y: 90.292; control2X: -44.43; control2Y: 73.925; x: -76.382; y: 99.892 }
- PathCubic { control1X: -98.855; control1Y: 117.983; control2X: -112.036; control2Y: 97.074; x: -112.036; y: 97.074 }
- PathLine { x: -115.636; y: 105.692 }
- PathCubic { control1X: -139.436; control1Y: 66.692; control2X: -124.891; control2Y: 125.71; x: -124.891; y: 125.71 }
- PathCubic { control1X: -116.091; control1Y: 160.11; control2X: 14.819; control2Y: 119.892; x: 14.819; y: 119.892 }
- PathCubic { control1X: 14.819; control1Y: 119.892; control2X: 183.619; control2Y: 89.492; x: 194.819; y: 85.492 }
- PathCubic { control1X: 206.019; control1Y: 81.492; control2X: 299.474; control2Y: 87.746; x: 299.474; y: 87.746 }
- PathLine { x: 294.02; y: 69.928 }
- PathCubic { control1X: 229.219; control1Y: 23.528; control2X: 211.619; control2Y: 47.891; x: 198.019; y: 43.891 }
- PathCubic { control1X: 184.419; control1Y: 39.891; control2X: 186.819; control2Y: 49.491; x: 183.619; y: 50.292 }
- PathCubic { control1X: 180.419; control1Y: 51.092; control2X: 141.219; control2Y: 26.291; x: 134.819; y: 27.091 }
- }
-
- ShapePath {
- fillColor: "#ec9961"
- strokeWidth: -1
- PathMove { x: 136.128; y: 28.837 }
- PathCubic { control1X: 129.728; control1Y: 29.637; control2X: 104.999; control2Y: 5.605; x: 119.328; y: 37.637 }
- PathCubic { control1X: 136.128; control1Y: 75.193; control2X: 60.394; control2Y: 76.482; x: 44.128; y: 65.637 }
- PathCubic { control1X: 27.328; control1Y: 54.437; control2X: 51.328; control2Y: 84.037; x: 51.328; y: 84.037 }
- PathCubic { control1X: 69.728; control1Y: 104.037; control2X: 35.328; control2Y: 87.237; x: 35.328; y: 87.237 }
- PathCubic { control1X: 0.928; control1Y: 74.437; control2X: -23.072; control2Y: 100.037; x: -26.272; y: 100.837 }
- PathCubic { control1X: -29.472; control1Y: 101.637; control2X: -34.272; control2Y: 104.837; x: -35.072; y: 98.437 }
- PathCubic { control1X: -35.872; control1Y: 92.037; control2X: -42.989; control2Y: 75.839; x: -75.073; y: 101.637 }
- PathCubic { control1X: -98.782; control1Y: 120.474; control2X: -111.655; control2Y: 100.11; x: -111.655; y: 100.11 }
- PathLine { x: -115.655; y: 107.237 }
- PathCubic { control1X: -137.455; control1Y: 70.437; control2X: -124.236; control2Y: 128.765; x: -124.236; y: 128.765 }
- PathCubic { control1X: -115.436; control1Y: 163.165; control2X: 16.128; control2Y: 121.637; x: 16.128; y: 121.637 }
- PathCubic { control1X: 16.128; control1Y: 121.637; control2X: 184.928; control2Y: 91.237; x: 196.129; y: 87.237 }
- PathCubic { control1X: 207.329; control1Y: 83.237; control2X: 299.911; control2Y: 89.419; x: 299.911; y: 89.419 }
- PathLine { x: 294.529; y: 71.092 }
- PathCubic { control1X: 229.729; control1Y: 24.691; control2X: 212.929; control2Y: 49.637; x: 199.329; y: 45.637 }
- PathCubic { control1X: 185.728; control1Y: 41.637; control2X: 188.128; control2Y: 51.237; x: 184.928; y: 52.037 }
- PathCubic { control1X: 181.728; control1Y: 52.837; control2X: 142.528; control2Y: 28.037; x: 136.128; y: 28.837 }
- }
-
- ShapePath {
- fillColor: "#eea575"
- strokeWidth: -1
- PathMove { x: 137.438; y: 30.583 }
- PathCubic { control1X: 131.037; control1Y: 31.383; control2X: 106.814; control2Y: 7.129; x: 120.637; y: 39.383 }
- PathCubic { control1X: 137.438; control1Y: 78.583; control2X: 62.237; control2Y: 78.583; x: 45.437; y: 67.383 }
- PathCubic { control1X: 28.637; control1Y: 56.183; control2X: 52.637; control2Y: 85.783; x: 52.637; y: 85.783 }
- PathCubic { control1X: 71.037; control1Y: 105.783; control2X: 36.637; control2Y: 88.983; x: 36.637; y: 88.983 }
- PathCubic { control1X: 2.237; control1Y: 76.183; control2X: -21.763; control2Y: 101.783; x: -24.963; y: 102.583 }
- PathCubic { control1X: -28.163; control1Y: 103.383; control2X: -32.963; control2Y: 106.583; x: -33.763; y: 100.183 }
- PathCubic { control1X: -34.563; control1Y: 93.783; control2X: -41.548; control2Y: 77.752; x: -73.763; y: 103.383 }
- PathCubic { control1X: -98.709; control1Y: 122.965; control2X: -111.273; control2Y: 103.146; x: -111.273; y: 103.146 }
- PathLine { x: -115.673; y: 108.783 }
- PathCubic { control1X: -135.473; control1Y: 73.982; control2X: -123.582; control2Y: 131.819; x: -123.582; y: 131.819 }
- PathCubic { control1X: -114.782; control1Y: 166.22; control2X: 17.437; control2Y: 123.383; x: 17.437; y: 123.383 }
- PathCubic { control1X: 17.437; control1Y: 123.383; control2X: 186.238; control2Y: 92.983; x: 197.438; y: 88.983 }
- PathCubic { control1X: 208.638; control1Y: 84.983; control2X: 300.347; control2Y: 91.092; x: 300.347; y: 91.092 }
- PathLine { x: 295.038; y: 72.255 }
- PathCubic { control1X: 230.238; control1Y: 25.855; control2X: 214.238; control2Y: 51.383; x: 200.638; y: 47.383 }
- PathCubic { control1X: 187.038; control1Y: 43.383; control2X: 189.438; control2Y: 52.983; x: 186.238; y: 53.783 }
- PathCubic { control1X: 183.038; control1Y: 54.583; control2X: 143.838; control2Y: 29.783; x: 137.438; y: 30.583 }
- }
-
- ShapePath {
- fillColor: "#f1b288"
- strokeWidth: -1
- PathMove { x: 138.747; y: 32.328 }
- PathCubic { control1X: 132.347; control1Y: 33.128; control2X: 106.383; control2Y: 9.677; x: 121.947; y: 41.128 }
- PathCubic { control1X: 141.147; control1Y: 79.928; control2X: 63.546; control2Y: 80.328; x: 46.746; y: 69.128 }
- PathCubic { control1X: 29.946; control1Y: 57.928; control2X: 53.946; control2Y: 87.528; x: 53.946; y: 87.528 }
- PathCubic { control1X: 72.346; control1Y: 107.528; control2X: 37.946; control2Y: 90.728; x: 37.946; y: 90.728 }
- PathCubic { control1X: 3.546; control1Y: 77.928; control2X: -20.454; control2Y: 103.528; x: -23.654; y: 104.328 }
- PathCubic { control1X: -26.854; control1Y: 105.128; control2X: -31.654; control2Y: 108.328; x: -32.454; y: 101.928 }
- PathCubic { control1X: -33.254; control1Y: 95.528; control2X: -40.108; control2Y: 79.665; x: -72.454; y: 105.128 }
- PathCubic { control1X: -98.636; control1Y: 125.456; control2X: -110.891; control2Y: 106.183; x: -110.891; y: 106.183 }
- PathLine { x: -115.691; y: 110.328 }
- PathCubic { control1X: -133.691; control1Y: 77.128; control2X: -122.927; control2Y: 134.874; x: -122.927; y: 134.874 }
- PathCubic { control1X: -114.127; control1Y: 169.274; control2X: 18.746; control2Y: 125.128; x: 18.746; y: 125.128 }
- PathCubic { control1X: 18.746; control1Y: 125.128; control2X: 187.547; control2Y: 94.728; x: 198.747; y: 90.728 }
- PathCubic { control1X: 209.947; control1Y: 86.728; control2X: 300.783; control2Y: 92.764; x: 300.783; y: 92.764 }
- PathLine { x: 295.547; y: 73.419 }
- PathCubic { control1X: 230.747; control1Y: 27.019; control2X: 215.547; control2Y: 53.128; x: 201.947; y: 49.128 }
- PathCubic { control1X: 188.347; control1Y: 45.128; control2X: 190.747; control2Y: 54.728; x: 187.547; y: 55.528 }
- PathCubic { control1X: 184.347; control1Y: 56.328; control2X: 145.147; control2Y: 31.528; x: 138.747; y: 32.328 }
- }
-
- ShapePath {
- fillColor: "#f3bf9c"
- strokeWidth: -1
- PathMove { x: 140.056; y: 34.073 }
- PathCubic { control1X: 133.655; control1Y: 34.873; control2X: 107.313; control2Y: 11.613; x: 123.255; y: 42.873 }
- PathCubic { control1X: 143.656; control1Y: 82.874; control2X: 64.855; control2Y: 82.074; x: 48.055; y: 70.874 }
- PathCubic { control1X: 31.255; control1Y: 59.674; control2X: 55.255; control2Y: 89.274; x: 55.255; y: 89.274 }
- PathCubic { control1X: 73.655; control1Y: 109.274; control2X: 39.255; control2Y: 92.474; x: 39.255; y: 92.474 }
- PathCubic { control1X: 4.855; control1Y: 79.674; control2X: -19.145; control2Y: 105.274; x: -22.345; y: 106.074 }
- PathCubic { control1X: -25.545; control1Y: 106.874; control2X: -30.345; control2Y: 110.074; x: -31.145; y: 103.674 }
- PathCubic { control1X: -31.945; control1Y: 97.274; control2X: -38.668; control2Y: 81.578; x: -71.145; y: 106.874 }
- PathCubic { control1X: -98.564; control1Y: 127.947; control2X: -110.509; control2Y: 109.219; x: -110.509; y: 109.219 }
- PathLine { x: -115.709; y: 111.874 }
- PathCubic { control1X: -131.709; control1Y: 81.674; control2X: -122.273; control2Y: 137.929; x: -122.273; y: 137.929 }
- PathCubic { control1X: -113.473; control1Y: 172.329; control2X: 20.055; control2Y: 126.874; x: 20.055; y: 126.874 }
- PathCubic { control1X: 20.055; control1Y: 126.874; control2X: 188.856; control2Y: 96.474; x: 200.056; y: 92.474 }
- PathCubic { control1X: 211.256; control1Y: 88.474; control2X: 301.22; control2Y: 94.437; x: 301.22; y: 94.437 }
- PathLine { x: 296.056; y: 74.583 }
- PathCubic { control1X: 231.256; control1Y: 28.183; control2X: 216.856; control2Y: 54.874; x: 203.256; y: 50.874 }
- PathCubic { control1X: 189.656; control1Y: 46.873; control2X: 192.056; control2Y: 56.474; x: 188.856; y: 57.274 }
- PathCubic { control1X: 185.656; control1Y: 58.074; control2X: 146.456; control2Y: 33.273; x: 140.056; y: 34.073 }
- }
-
- ShapePath {
- fillColor: "#f5ccb0"
- strokeWidth: -1
- PathMove { x: 141.365; y: 35.819 }
- PathCubic { control1X: 134.965; control1Y: 36.619; control2X: 107.523; control2Y: 13.944; x: 124.565; y: 44.619 }
- PathCubic { control1X: 146.565; control1Y: 84.219; control2X: 66.164; control2Y: 83.819; x: 49.364; y: 72.619 }
- PathCubic { control1X: 32.564; control1Y: 61.419; control2X: 56.564; control2Y: 91.019; x: 56.564; y: 91.019 }
- PathCubic { control1X: 74.964; control1Y: 111.019; control2X: 40.564; control2Y: 94.219; x: 40.564; y: 94.219 }
- PathCubic { control1X: 6.164; control1Y: 81.419; control2X: -17.836; control2Y: 107.019; x: -21.036; y: 107.819 }
- PathCubic { control1X: -24.236; control1Y: 108.619; control2X: -29.036; control2Y: 111.819; x: -29.836; y: 105.419 }
- PathCubic { control1X: -30.636; control1Y: 99.019; control2X: -37.227; control2Y: 83.492; x: -69.836; y: 108.619 }
- PathCubic { control1X: -98.491; control1Y: 130.438; control2X: -110.127; control2Y: 112.256; x: -110.127; y: 112.256 }
- PathLine { x: -115.727; y: 113.419 }
- PathCubic { control1X: -130.128; control1Y: 85.019; control2X: -121.618; control2Y: 140.983; x: -121.618; y: 140.983 }
- PathCubic { control1X: -112.818; control1Y: 175.384; control2X: 21.364; control2Y: 128.619; x: 21.364; y: 128.619 }
- PathCubic { control1X: 21.364; control1Y: 128.619; control2X: 190.165; control2Y: 98.219; x: 201.365; y: 94.219 }
- PathCubic { control1X: 212.565; control1Y: 90.219; control2X: 301.656; control2Y: 96.11; x: 301.656; y: 96.11 }
- PathLine { x: 296.565; y: 75.746 }
- PathCubic { control1X: 231.765; control1Y: 29.346; control2X: 218.165; control2Y: 56.619; x: 204.565; y: 52.619 }
- PathCubic { control1X: 190.965; control1Y: 48.619; control2X: 193.365; control2Y: 58.219; x: 190.165; y: 59.019 }
- PathCubic { control1X: 186.965; control1Y: 59.819; control2X: 147.765; control2Y: 35.019; x: 141.365; y: 35.819 }
- }
-
- ShapePath {
- fillColor: "#f8d8c4"
- strokeWidth: -1
- PathMove { x: 142.674; y: 37.565 }
- PathCubic { control1X: 136.274; control1Y: 38.365; control2X: 108.832; control2Y: 15.689; x: 125.874; y: 46.365 }
- PathCubic { control1X: 147.874; control1Y: 85.965; control2X: 67.474; control2Y: 85.565; x: 50.674; y: 74.365 }
- PathCubic { control1X: 33.874; control1Y: 63.165; control2X: 57.874; control2Y: 92.765; x: 57.874; y: 92.765 }
- PathCubic { control1X: 76.274; control1Y: 112.765; control2X: 41.874; control2Y: 95.965; x: 41.874; y: 95.965 }
- PathCubic { control1X: 7.473; control1Y: 83.165; control2X: -16.527; control2Y: 108.765; x: -19.727; y: 109.565 }
- PathCubic { control1X: -22.927; control1Y: 110.365; control2X: -27.727; control2Y: 113.565; x: -28.527; y: 107.165 }
- PathCubic { control1X: -29.327; control1Y: 100.765; control2X: -35.786; control2Y: 85.405; x: -68.527; y: 110.365 }
- PathCubic { control1X: -98.418; control1Y: 132.929; control2X: -109.745; control2Y: 115.293; x: -109.745; y: 115.293 }
- PathLine { x: -115.745; y: 114.965 }
- PathCubic { control1X: -129.346; control1Y: 88.564; control2X: -120.963; control2Y: 144.038; x: -120.963; y: 144.038 }
- PathCubic { control1X: -112.163; control1Y: 178.438; control2X: 22.673; control2Y: 130.365; x: 22.673; y: 130.365 }
- PathCubic { control1X: 22.673; control1Y: 130.365; control2X: 191.474; control2Y: 99.965; x: 202.674; y: 95.965 }
- PathCubic { control1X: 213.874; control1Y: 91.965; control2X: 302.093; control2Y: 97.783; x: 302.093; y: 97.783 }
- PathLine { x: 297.075; y: 76.91 }
- PathCubic { control1X: 232.274; control1Y: 30.51; control2X: 219.474; control2Y: 58.365; x: 205.874; y: 54.365 }
- PathCubic { control1X: 192.274; control1Y: 50.365; control2X: 194.674; control2Y: 59.965; x: 191.474; y: 60.765 }
- PathCubic { control1X: 188.274; control1Y: 61.565; control2X: 149.074; control2Y: 36.765; x: 142.674; y: 37.565 }
- }
-
- ShapePath {
- fillColor: "#fae5d7"
- strokeWidth: -1
- PathMove { x: 143.983; y: 39.31 }
- PathCubic { control1X: 137.583; control1Y: 40.11; control2X: 110.529; control2Y: 17.223; x: 127.183; y: 48.11 }
- PathCubic { control1X: 149.183; control1Y: 88.91; control2X: 68.783; control2Y: 87.31; x: 51.983; y: 76.11 }
- PathCubic { control1X: 35.183; control1Y: 64.91; control2X: 59.183; control2Y: 94.51; x: 59.183; y: 94.51 }
- PathCubic { control1X: 77.583; control1Y: 114.51; control2X: 43.183; control2Y: 97.71; x: 43.183; y: 97.71 }
- PathCubic { control1X: 8.783; control1Y: 84.91; control2X: -15.217; control2Y: 110.51; x: -18.417; y: 111.31 }
- PathCubic { control1X: -21.618; control1Y: 112.11; control2X: -26.418; control2Y: 115.31; x: -27.218; y: 108.91 }
- PathCubic { control1X: -28.018; control1Y: 102.51; control2X: -34.346; control2Y: 87.318; x: -67.218; y: 112.11 }
- PathCubic { control1X: -98.345; control1Y: 135.42; control2X: -109.363; control2Y: 118.329; x: -109.363; y: 118.329 }
- PathLine { x: -115.764; y: 116.51 }
- PathCubic { control1X: -128.764; control1Y: 92.51; control2X: -120.309; control2Y: 147.093; x: -120.309; y: 147.093 }
- PathCubic { control1X: -111.509; control1Y: 181.493; control2X: 23.983; control2Y: 132.11; x: 23.983; y: 132.11 }
- PathCubic { control1X: 23.983; control1Y: 132.11; control2X: 192.783; control2Y: 101.71; x: 203.983; y: 97.71 }
- PathCubic { control1X: 215.183; control1Y: 93.71; control2X: 302.529; control2Y: 99.456; x: 302.529; y: 99.456 }
- PathLine { x: 297.583; y: 78.074 }
- PathCubic { control1X: 232.783; control1Y: 31.673; control2X: 220.783; control2Y: 60.11; x: 207.183; y: 56.11 }
- PathCubic { control1X: 193.583; control1Y: 52.11; control2X: 195.983; control2Y: 61.71; x: 192.783; y: 62.51 }
- PathCubic { control1X: 189.583; control1Y: 63.31; control2X: 150.383; control2Y: 38.51; x: 143.983; y: 39.31 }
- }
-
- ShapePath {
- fillColor: "#fcf2eb"
- strokeWidth: -1
- PathMove { x: 145.292; y: 41.055 }
- PathCubic { control1X: 138.892; control1Y: 41.855; control2X: 112.917; control2Y: 18.411; x: 128.492; y: 49.855 }
- PathCubic { control1X: 149.692; control1Y: 92.656; control2X: 70.092; control2Y: 89.056; x: 53.292; y: 77.856 }
- PathCubic { control1X: 36.492; control1Y: 66.656; control2X: 60.492; control2Y: 96.256; x: 60.492; y: 96.256 }
- PathCubic { control1X: 78.892; control1Y: 116.256; control2X: 44.492; control2Y: 99.456; x: 44.492; y: 99.456 }
- PathCubic { control1X: 10.092; control1Y: 86.656; control2X: -13.908; control2Y: 112.256; x: -17.108; y: 113.056 }
- PathCubic { control1X: -20.308; control1Y: 113.856; control2X: -25.108; control2Y: 117.056; x: -25.908; y: 110.656 }
- PathCubic { control1X: -26.708; control1Y: 104.256; control2X: -32.905; control2Y: 89.232; x: -65.908; y: 113.856 }
- PathCubic { control1X: -98.273; control1Y: 137.911; control2X: -108.982; control2Y: 121.365; x: -108.982; y: 121.365 }
- PathLine { x: -115.782; y: 118.056 }
- PathCubic { control1X: -128.582; control1Y: 94.856; control2X: -119.654; control2Y: 150.147; x: -119.654; y: 150.147 }
- PathCubic { control1X: -110.854; control1Y: 184.547; control2X: 25.292; control2Y: 133.856; x: 25.292; y: 133.856 }
- PathCubic { control1X: 25.292; control1Y: 133.856; control2X: 194.093; control2Y: 103.456; x: 205.293; y: 99.456 }
- PathCubic { control1X: 216.493; control1Y: 95.456; control2X: 302.965; control2Y: 101.128; x: 302.965; y: 101.128 }
- PathLine { x: 298.093; y: 79.237 }
- PathCubic { control1X: 233.292; control1Y: 32.837; control2X: 222.093; control2Y: 61.856; x: 208.493; y: 57.856 }
- PathCubic { control1X: 194.893; control1Y: 53.855; control2X: 197.293; control2Y: 63.456; x: 194.093; y: 64.256 }
- PathCubic { control1X: 190.892; control1Y: 65.056; control2X: 151.692; control2Y: 40.255; x: 145.292; y: 41.055 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeWidth: -1
- PathMove { x: -115.8; y: 119.601 }
- PathCubic { control1X: -128.6; control1Y: 97.6; control2X: -119; control2Y: 153.201; x: -119; y: 153.201 }
- PathCubic { control1X: -110.2; control1Y: 187.601; control2X: 26.6; control2Y: 135.601; x: 26.6; y: 135.601 }
- PathCubic { control1X: 26.6; control1Y: 135.601; control2X: 195.401; control2Y: 105.2; x: 206.601; y: 101.2 }
- PathCubic { control1X: 217.801; control1Y: 97.2; control2X: 303.401; control2Y: 102.8; x: 303.401; y: 102.8 }
- PathLine { x: 298.601; y: 80.4 }
- PathCubic { control1X: 233.801; control1Y: 34; control2X: 223.401; control2Y: 63.6; x: 209.801; y: 59.6 }
- PathCubic { control1X: 196.201; control1Y: 55.6; control2X: 198.601; control2Y: 65.2; x: 195.401; y: 66 }
- PathCubic { control1X: 192.201; control1Y: 66.8; control2X: 153.001; control2Y: 42; x: 146.601; y: 42.8 }
- PathCubic { control1X: 140.201; control1Y: 43.6; control2X: 114.981; control2Y: 19.793; x: 129.801; y: 51.6 }
- PathCubic { control1X: 152.028; control1Y: 99.307; control2X: 69.041; control2Y: 89.227; x: 54.6; y: 79.6 }
- PathCubic { control1X: 37.8; control1Y: 68.4; control2X: 61.8; control2Y: 98; x: 61.8; y: 98 }
- PathCubic { control1X: 80.2; control1Y: 118.001; control2X: 45.8; control2Y: 101.2; x: 45.8; y: 101.2 }
- PathCubic { control1X: 11.4; control1Y: 88.4; control2X: -12.6; control2Y: 114.001; x: -15.8; y: 114.801 }
- PathCubic { control1X: -19; control1Y: 115.601; control2X: -23.8; control2Y: 118.801; x: -24.6; y: 112.401 }
- PathCubic { control1X: -25.4; control1Y: 106; control2X: -31.465; control2Y: 91.144; x: -64.6; y: 115.601 }
- PathCubic { control1X: -98.2; control1Y: 140.401; control2X: -108.6; control2Y: 124.401; x: -108.6; y: 124.401 }
- PathLine { x: -115.8; y: 119.601 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -74.2; y: 149.601 }
- PathCubic { control1X: -74.2; control1Y: 149.601; control2X: -81.4; control2Y: 161.201; x: -60.6; y: 174.401 }
- PathCubic { control1X: -60.6; control1Y: 174.401; control2X: -59.2; control2Y: 175.801; x: -77.2; y: 171.601 }
- PathCubic { control1X: -77.2; control1Y: 171.601; control2X: -83.4; control2Y: 169.601; x: -85; y: 159.201 }
- PathCubic { control1X: -85; control1Y: 159.201; control2X: -89.8; control2Y: 154.801; x: -94.6; y: 149.201 }
- PathCubic { control1X: -99.4; control1Y: 143.601; control2X: -74.2; control2Y: 149.601; x: -74.2; y: 149.601 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 65.8; y: 102 }
- PathCubic { control1X: 65.8; control1Y: 102; control2X: 83.498; control2Y: 128.821; x: 82.9; y: 133.601 }
- PathCubic { control1X: 81.6; control1Y: 144.001; control2X: 81.4; control2Y: 153.601; x: 84.6; y: 157.601 }
- PathCubic { control1X: 87.801; control1Y: 161.601; control2X: 96.601; control2Y: 194.801; x: 96.601; y: 194.801 }
- PathCubic { control1X: 96.601; control1Y: 194.801; control2X: 96.201; control2Y: 196.001; x: 108.601; y: 158.001 }
- PathCubic { control1X: 108.601; control1Y: 158.001; control2X: 120.201; control2Y: 142.001; x: 100.201; y: 123.601 }
- PathCubic { control1X: 100.201; control1Y: 123.601; control2X: 65; control2Y: 94.8; x: 65.8; y: 102 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -54.2; y: 176.401 }
- PathCubic { control1X: -54.2; control1Y: 176.401; control2X: -43; control2Y: 183.601; x: -57.4; y: 214.801 }
- PathLine { x: -51; y: 212.401 }
- PathCubic { control1X: -51; control1Y: 212.401; control2X: -51.8; control2Y: 223.601; x: -55; y: 226.001 }
- PathLine { x: -47.8; y: 222.801 }
- PathCubic { control1X: -47.8; control1Y: 222.801; control2X: -43; control2Y: 230.801; x: -47; y: 235.601 }
- PathCubic { control1X: -47; control1Y: 235.601; control2X: -30.2; control2Y: 243.601; x: -31; y: 250.001 }
- PathCubic { control1X: -31; control1Y: 250.001; control2X: -24.6; control2Y: 242.001; x: -28.6; y: 235.601 }
- PathCubic { control1X: -32.6; control1Y: 229.201; control2X: -39.8; control2Y: 233.201; x: -39; y: 214.801 }
- PathLine { x: -47.8; y: 218.001 }
- PathCubic { control1X: -47.8; control1Y: 218.001; control2X: -42.2; control2Y: 209.201; x: -42.2; y: 202.801 }
- PathLine { x: -50.2; y: 205.201 }
- PathCubic { control1X: -50.2; control1Y: 205.201; control2X: -34.731; control2Y: 178.623; x: -45.4; y: 177.201 }
- PathCubic { control1X: -51.4; control1Y: 176.401; control2X: -54.2; control2Y: 176.401; x: -54.2; y: 176.401 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -21.8; y: 193.201 }
- PathCubic { control1X: -21.8; control1Y: 193.201; control2X: -19; control2Y: 188.801; x: -21.8; y: 189.601 }
- PathCubic { control1X: -24.6; control1Y: 190.401; control2X: -55.8; control2Y: 205.201; x: -61.8; y: 214.801 }
- PathCubic { control1X: -61.8; control1Y: 214.801; control2X: -27.4; control2Y: 190.401; x: -21.8; y: 193.201 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -11.4; y: 201.201 }
- PathCubic { control1X: -11.4; control1Y: 201.201; control2X: -8.6; control2Y: 196.801; x: -11.4; y: 197.601 }
- PathCubic { control1X: -14.2; control1Y: 198.401; control2X: -45.4; control2Y: 213.201; x: -51.4; y: 222.801 }
- PathCubic { control1X: -51.4; control1Y: 222.801; control2X: -17; control2Y: 198.401; x: -11.4; y: 201.201 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 1.8; y: 186.001 }
- PathCubic { control1X: 1.8; control1Y: 186.001; control2X: 4.6; control2Y: 181.601; x: 1.8; y: 182.401 }
- PathCubic { control1X: -1; control1Y: 183.201; control2X: -32.2; control2Y: 198.001; x: -38.2; y: 207.601 }
- PathCubic { control1X: -38.2; control1Y: 207.601; control2X: -3.8; control2Y: 183.201; x: 1.8; y: 186.001 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -21.4; y: 229.601 }
- PathCubic { control1X: -21.4; control1Y: 229.601; control2X: -21.4; control2Y: 223.601; x: -24.2; y: 224.401 }
- PathCubic { control1X: -27; control1Y: 225.201; control2X: -63; control2Y: 242.801; x: -69; y: 252.401 }
- PathCubic { control1X: -69; control1Y: 252.401; control2X: -27; control2Y: 226.801; x: -21.4; y: 229.601 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -20.2; y: 218.801 }
- PathCubic { control1X: -20.2; control1Y: 218.801; control2X: -19; control2Y: 214.001; x: -21.8; y: 214.801 }
- PathCubic { control1X: -23.8; control1Y: 214.801; control2X: -50.2; control2Y: 226.401; x: -56.2; y: 236.001 }
- PathCubic { control1X: -56.2; control1Y: 236.001; control2X: -26.6; control2Y: 214.401; x: -20.2; y: 218.801 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -34.6; y: 266.401 }
- PathLine { x: -44.6; y: 274.001 }
- PathCubic { control1X: -44.6; control1Y: 274.001; control2X: -34.2; control2Y: 266.401; x: -30.6; y: 267.601 }
- PathCubic { control1X: -30.6; control1Y: 267.601; control2X: -37.4; control2Y: 278.801; x: -38.2; y: 284.001 }
- PathCubic { control1X: -38.2; control1Y: 284.001; control2X: -27.8; control2Y: 271.201; x: -22.2; y: 271.601 }
- PathCubic { control1X: -22.2; control1Y: 271.601; control2X: -14.6; control2Y: 272.001; x: -14.6; y: 282.801 }
- PathCubic { control1X: -14.6; control1Y: 282.801; control2X: -9; control2Y: 272.401; x: -5.8; y: 272.801 }
- PathCubic { control1X: -5.8; control1Y: 272.801; control2X: -4.6; control2Y: 279.201; x: -5.8; y: 286.001 }
- PathCubic { control1X: -5.8; control1Y: 286.001; control2X: -1.8; control2Y: 278.401; x: 2.2; y: 280.001 }
- PathCubic { control1X: 2.2; control1Y: 280.001; control2X: 8.6; control2Y: 278.001; x: 7.8; y: 289.601 }
- PathCubic { control1X: 7.8; control1Y: 289.601; control2X: 7.8; control2Y: 300.001; x: 7; y: 302.801 }
- PathCubic { control1X: 7; control1Y: 302.801; control2X: 12.6; control2Y: 276.401; x: 15; y: 276.001 }
- PathCubic { control1X: 15; control1Y: 276.001; control2X: 23; control2Y: 274.801; x: 27.8; y: 283.601 }
- PathCubic { control1X: 27.8; control1Y: 283.601; control2X: 23.8; control2Y: 276.001; x: 28.6; y: 278.001 }
- PathCubic { control1X: 28.6; control1Y: 278.001; control2X: 39.4; control2Y: 279.601; x: 42.6; y: 286.401 }
- PathCubic { control1X: 42.6; control1Y: 286.401; control2X: 35.8; control2Y: 274.401; x: 41.4; y: 277.601 }
- PathCubic { control1X: 41.4; control1Y: 277.601; control2X: 48.2; control2Y: 277.601; x: 49.4; y: 284.001 }
- PathCubic { control1X: 49.4; control1Y: 284.001; control2X: 57.8; control2Y: 305.201; x: 59.8; y: 306.801 }
- PathCubic { control1X: 59.8; control1Y: 306.801; control2X: 52.2; control2Y: 285.201; x: 53.8; y: 285.201 }
- PathCubic { control1X: 53.8; control1Y: 285.201; control2X: 51.8; control2Y: 273.201; x: 57; y: 288.001 }
- PathCubic { control1X: 57; control1Y: 288.001; control2X: 53.8; control2Y: 274.001; x: 59.4; y: 274.801 }
- PathCubic { control1X: 65; control1Y: 275.601; control2X: 69.4; control2Y: 285.601; x: 77.8; y: 283.201 }
- PathCubic { control1X: 77.8; control1Y: 283.201; control2X: 87.401; control2Y: 288.801; x: 89.401; y: 219.601 }
- PathLine { x: -34.6; y: 266.401 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -29.8; y: 173.601 }
- PathCubic { control1X: -29.8; control1Y: 173.601; control2X: -15; control2Y: 167.601; x: 25; y: 173.601 }
- PathCubic { control1X: 25; control1Y: 173.601; control2X: 32.2; control2Y: 174.001; x: 39; y: 165.201 }
- PathCubic { control1X: 45.8; control1Y: 156.401; control2X: 72.6; control2Y: 149.201; x: 79; y: 151.201 }
- PathLine { x: 88.601; y: 157.601 }
- PathLine { x: 89.401; y: 158.801 }
- PathCubic { control1X: 89.401; control1Y: 158.801; control2X: 101.801; control2Y: 169.201; x: 102.201; y: 176.801 }
- PathCubic { control1X: 102.601; control1Y: 184.401; control2X: 87.801; control2Y: 232.401; x: 78.2; y: 248.401 }
- PathCubic { control1X: 68.6; control1Y: 264.401; control2X: 59; control2Y: 276.801; x: 39.8; y: 274.401 }
- PathCubic { control1X: 39.8; control1Y: 274.401; control2X: 19; control2Y: 270.401; x: -6.6; y: 274.401 }
- PathCubic { control1X: -6.6; control1Y: 274.401; control2X: -35.8; control2Y: 272.801; x: -38.6; y: 264.801 }
- PathCubic { control1X: -41.4; control1Y: 256.801; control2X: -27.4; control2Y: 241.601; x: -27.4; y: 241.601 }
- PathCubic { control1X: -27.4; control1Y: 241.601; control2X: -23; control2Y: 233.201; x: -24.2; y: 218.801 }
- PathCubic { control1X: -25.4; control1Y: 204.401; control2X: -25; control2Y: 176.401; x: -29.8; y: 173.601 }
- }
-
- ShapePath {
- fillColor: "#e5668c"
- strokeWidth: -1
- PathMove { x: -7.8; y: 175.601 }
- PathCubic { control1X: 0.6; control1Y: 194.001; control2X: -29; control2Y: 259.201; x: -29; y: 259.201 }
- PathCubic { control1X: -31; control1Y: 260.801; control2X: -16.34; control2Y: 266.846; x: -6.2; y: 264.401 }
- PathCubic { control1X: 4.746; control1Y: 261.763; control2X: 45; control2Y: 266.001; x: 45; y: 266.001 }
- PathCubic { control1X: 68.6; control1Y: 250.401; control2X: 81.4; control2Y: 206.001; x: 81.4; y: 206.001 }
- PathCubic { control1X: 81.4; control1Y: 206.001; control2X: 91.801; control2Y: 182.001; x: 74.2; y: 178.801 }
- PathCubic { control1X: 56.6; control1Y: 175.601; control2X: -7.8; control2Y: 175.601; x: -7.8; y: 175.601 }
- }
-
- ShapePath {
- fillColor: "#b23259"
- strokeWidth: -1
- PathMove { x: -9.831; y: 206.497 }
- PathCubic { control1X: -6.505; control1Y: 193.707; control2X: -4.921; control2Y: 181.906; x: -7.8; y: 175.601 }
- PathCubic { control1X: -7.8; control1Y: 175.601; control2X: 54.6; control2Y: 182.001; x: 65.8; y: 161.201 }
- PathCubic { control1X: 70.041; control1Y: 153.326; control2X: 84.801; control2Y: 184.001; x: 84.4; y: 193.601 }
- PathCubic { control1X: 84.4; control1Y: 193.601; control2X: 21.4; control2Y: 208.001; x: 6.6; y: 196.801 }
- PathLine { x: -9.831; y: 206.497 }
- }
-
- ShapePath {
- fillColor: "#a5264c"
- strokeWidth: -1
- PathMove { x: -5.4; y: 222.801 }
- PathCubic { control1X: -5.4; control1Y: 222.801; control2X: -3.4; control2Y: 230.001; x: -5.8; y: 234.001 }
- PathCubic { control1X: -5.8; control1Y: 234.001; control2X: -7.4; control2Y: 234.801; x: -8.6; y: 235.201 }
- PathCubic { control1X: -8.6; control1Y: 235.201; control2X: -7.4; control2Y: 238.801; x: -1.4; y: 240.401 }
- PathCubic { control1X: -1.4; control1Y: 240.401; control2X: 0.6; control2Y: 244.801; x: 3; y: 245.201 }
- PathCubic { control1X: 5.4; control1Y: 245.601; control2X: 10.2; control2Y: 251.201; x: 14.2; y: 250.001 }
- PathCubic { control1X: 18.2; control1Y: 248.801; control2X: 29.4; control2Y: 244.801; x: 29.4; y: 244.801 }
- PathCubic { control1X: 29.4; control1Y: 244.801; control2X: 35; control2Y: 241.601; x: 43.8; y: 245.201 }
- PathCubic { control1X: 43.8; control1Y: 245.201; control2X: 46.175; control2Y: 244.399; x: 46.6; y: 240.401 }
- PathCubic { control1X: 47.1; control1Y: 235.701; control2X: 50.2; control2Y: 232.001; x: 52.2; y: 230.001 }
- PathCubic { control1X: 54.2; control1Y: 228.001; control2X: 63.8; control2Y: 215.201; x: 62.6; y: 214.801 }
- PathCubic { control1X: 61.4; control1Y: 214.401; control2X: -5.4; control2Y: 222.801; x: -5.4; y: 222.801 }
- }
-
- ShapePath {
- fillColor: "#ff727f"
- strokeColor: "#000000"
- strokeWidth: 1
- PathMove { x: -9.8; y: 174.401 }
- PathCubic { control1X: -9.8; control1Y: 174.401; control2X: -12.6; control2Y: 196.801; x: -9.4; y: 205.201 }
- PathCubic { control1X: -6.2; control1Y: 213.601; control2X: -7; control2Y: 215.601; x: -7.8; y: 219.601 }
- PathCubic { control1X: -8.6; control1Y: 223.601; control2X: -4.2; control2Y: 233.601; x: 1.4; y: 239.601 }
- PathLine { x: 13.4; y: 241.201 }
- PathCubic { control1X: 13.4; control1Y: 241.201; control2X: 28.6; control2Y: 237.601; x: 37.8; y: 240.401 }
- PathCubic { control1X: 37.8; control1Y: 240.401; control2X: 46.794; control2Y: 241.744; x: 50.2; y: 226.801 }
- PathCubic { control1X: 50.2; control1Y: 226.801; control2X: 55; control2Y: 220.401; x: 62.2; y: 217.601 }
- PathCubic { control1X: 69.4; control1Y: 214.801; control2X: 76.6; control2Y: 173.201; x: 72.6; y: 165.201 }
- PathCubic { control1X: 68.6; control1Y: 157.201; control2X: 54.2; control2Y: 152.801; x: 38.2; y: 168.401 }
- PathCubic { control1X: 22.2; control1Y: 184.001; control2X: 20.2; control2Y: 167.201; x: -9.8; y: 174.401 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: -8.2; y: 249.201 }
- PathCubic { control1X: -8.2; control1Y: 249.201; control2X: -9; control2Y: 247.201; x: -13.4; y: 246.801 }
- PathCubic { control1X: -13.4; control1Y: 246.801; control2X: -35.8; control2Y: 243.201; x: -44.2; y: 230.801 }
- PathCubic { control1X: -44.2; control1Y: 230.801; control2X: -51; control2Y: 225.201; x: -46.6; y: 236.801 }
- PathCubic { control1X: -46.6; control1Y: 236.801; control2X: -36.2; control2Y: 257.201; x: -29.4; y: 260.001 }
- PathCubic { control1X: -29.4; control1Y: 260.001; control2X: -13; control2Y: 264.001; x: -8.2; y: 249.201 }
- }
-
- ShapePath {
- fillColor: "#cc3f4c"
- strokeWidth: -1
- PathMove { x: 71.742; y: 185.229 }
- PathCubic { control1X: 72.401; control1Y: 177.323; control2X: 74.354; control2Y: 168.709; x: 72.6; y: 165.201 }
- PathCubic { control1X: 66.154; control1Y: 152.307; control2X: 49.181; control2Y: 157.695; x: 38.2; y: 168.401 }
- PathCubic { control1X: 22.2; control1Y: 184.001; control2X: 20.2; control2Y: 167.201; x: -9.8; y: 174.401 }
- PathCubic { control1X: -9.8; control1Y: 174.401; control2X: -11.545; control2Y: 188.364; x: -10.705; y: 198.376 }
- PathCubic { control1X: -10.705; control1Y: 198.376; control2X: 26.6; control2Y: 186.801; x: 27.4; y: 192.401 }
- PathCubic { control1X: 27.4; control1Y: 192.401; control2X: 29; control2Y: 189.201; x: 38.2; y: 189.201 }
- PathCubic { control1X: 47.4; control1Y: 189.201; control2X: 70.142; control2Y: 188.029; x: 71.742; y: 185.229 }
- }
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "#a51926"
- strokeWidth: 2
- PathMove { x: 28.6; y: 175.201 }
- PathCubic { control1X: 28.6; control1Y: 175.201; control2X: 33.4; control2Y: 180.001; x: 29.8; y: 189.601 }
- PathCubic { control1X: 29.8; control1Y: 189.601; control2X: 15.4; control2Y: 205.601; x: 17.4; y: 219.601 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: -19.4; y: 260.001 }
- PathCubic { control1X: -19.4; control1Y: 260.001; control2X: -23.8; control2Y: 247.201; x: -15; y: 254.001 }
- PathCubic { control1X: -15; control1Y: 254.001; control2X: -10.2; control2Y: 256.001; x: -11.4; y: 257.601 }
- PathCubic { control1X: -12.6; control1Y: 259.201; control2X: -18.2; control2Y: 263.201; x: -19.4; y: 260.001 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: -14.36; y: 261.201 }
- PathCubic { control1X: -14.36; control1Y: 261.201; control2X: -17.88; control2Y: 250.961; x: -10.84; y: 256.401 }
- PathCubic { control1X: -10.84; control1Y: 256.401; control2X: -6.419; control2Y: 258.849; x: -7.96; y: 259.281 }
- PathCubic { control1X: -12.52; control1Y: 260.561; control2X: -7.96; control2Y: 263.121; x: -14.36; y: 261.201 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: -9.56; y: 261.201 }
- PathCubic { control1X: -9.56; control1Y: 261.201; control2X: -13.08; control2Y: 250.961; x: -6.04; y: 256.401 }
- PathCubic { control1X: -6.04; control1Y: 256.401; control2X: -1.665; control2Y: 258.711; x: -3.16; y: 259.281 }
- PathCubic { control1X: -6.52; control1Y: 260.561; control2X: -3.16; control2Y: 263.121; x: -9.56; y: 261.201 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: -2.96; y: 261.401 }
- PathCubic { control1X: -2.96; control1Y: 261.401; control2X: -6.48; control2Y: 251.161; x: 0.56; y: 256.601 }
- PathCubic { control1X: 0.56; control1Y: 256.601; control2X: 4.943; control2Y: 258.933; x: 3.441; y: 259.481 }
- PathCubic { control1X: 0.48; control1Y: 260.561; control2X: 3.441; control2Y: 263.321; x: -2.96; y: 261.401 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: 3.52; y: 261.321 }
- PathCubic { control1X: 3.52; control1Y: 261.321; control2X: 0; control2Y: 251.081; x: 7.041; y: 256.521 }
- PathCubic { control1X: 7.041; control1Y: 256.521; control2X: 10.881; control2Y: 258.121; x: 9.921; y: 259.401 }
- PathCubic { control1X: 8.961; control1Y: 260.681; control2X: 9.921; control2Y: 263.241; x: 3.52; y: 261.321 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: 10.2; y: 262.001 }
- PathCubic { control1X: 10.2; control1Y: 262.001; control2X: 5.4; control2Y: 249.601; x: 14.6; y: 256.001 }
- PathCubic { control1X: 14.6; control1Y: 256.001; control2X: 19.4; control2Y: 258.001; x: 18.2; y: 259.601 }
- PathCubic { control1X: 17; control1Y: 261.201; control2X: 18.2; control2Y: 264.401; x: 10.2; y: 262.001 }
- }
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "#a5264c"
- strokeWidth: 2
- PathMove { x: -18.2; y: 244.801 }
- PathCubic { control1X: -18.2; control1Y: 244.801; control2X: -5; control2Y: 242.001; x: 1; y: 245.201 }
- PathCubic { control1X: 1; control1Y: 245.201; control2X: 7; control2Y: 246.401; x: 8.2; y: 246.001 }
- PathCubic { control1X: 9.4; control1Y: 245.601; control2X: 12.6; control2Y: 245.201; x: 12.6; y: 245.201 }
- }
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "#a5264c"
- strokeWidth: 2
- PathMove { x: 15.8; y: 253.601 }
- PathCubic { control1X: 15.8; control1Y: 253.601; control2X: 27.8; control2Y: 240.001; x: 39.8; y: 244.401 }
- PathCubic { control1X: 46.816; control1Y: 246.974; control2X: 45.8; control2Y: 243.601; x: 46.6; y: 240.801 }
- PathCubic { control1X: 47.4; control1Y: 238.001; control2X: 47.6; control2Y: 233.801; x: 52.6; y: 230.801 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: 33; y: 237.601 }
- PathCubic { control1X: 33; control1Y: 237.601; control2X: 29; control2Y: 226.801; x: 26.2; y: 239.601 }
- PathCubic { control1X: 23.4; control1Y: 252.401; control2X: 20.2; control2Y: 256.001; x: 18.6; y: 258.801 }
- PathCubic { control1X: 18.6; control1Y: 258.801; control2X: 18.6; control2Y: 264.001; x: 27; y: 263.601 }
- PathCubic { control1X: 27; control1Y: 263.601; control2X: 37.8; control2Y: 263.201; x: 38.2; y: 260.401 }
- PathCubic { control1X: 38.6; control1Y: 257.601; control2X: 37; control2Y: 246.001; x: 33; y: 237.601 }
- }
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "#a5264c"
- strokeWidth: 2
- PathMove { x: 47; y: 244.801 }
- PathCubic { control1X: 47; control1Y: 244.801; control2X: 50.6; control2Y: 242.401; x: 53; y: 243.601 }
- }
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "#a5264c"
- strokeWidth: 2
- PathMove { x: 53.5; y: 228.401 }
- PathCubic { control1X: 53.5; control1Y: 228.401; control2X: 56.4; control2Y: 223.501; x: 61.2; y: 222.701 }
- }
-
- ShapePath {
- fillColor: "#b2b2b2"
- strokeWidth: -1
- PathMove { x: -25.8; y: 265.201 }
- PathCubic { control1X: -25.8; control1Y: 265.201; control2X: -7.8; control2Y: 268.401; x: -3.4; y: 266.801 }
- PathCubic { control1X: -3.4; control1Y: 266.801; control2X: 5.4; control2Y: 266.801; x: -3; y: 268.801 }
- PathCubic { control1X: -3; control1Y: 268.801; control2X: -15.8; control2Y: 268.801; x: -23.8; y: 267.601 }
- PathCubic { control1X: -23.8; control1Y: 267.601; control2X: -35.4; control2Y: 262.001; x: -25.8; y: 265.201 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: -11.8; y: 172.001 }
- PathCubic { control1X: -11.8; control1Y: 172.001; control2X: 5.8; control2Y: 172.001; x: 7.8; y: 172.801 }
- PathCubic { control1X: 7.8; control1Y: 172.801; control2X: 15; control2Y: 203.601; x: 11.4; y: 211.201 }
- PathCubic { control1X: 11.4; control1Y: 211.201; control2X: 10.2; control2Y: 214.001; x: 7.4; y: 208.401 }
- PathCubic { control1X: 7.4; control1Y: 208.401; control2X: -11; control2Y: 175.601; x: -14.2; y: 173.601 }
- PathCubic { control1X: -17.4; control1Y: 171.601; control2X: -13; control2Y: 172.001; x: -11.8; y: 172.001 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: -88.9; y: 169.301 }
- PathCubic { control1X: -88.9; control1Y: 169.301; control2X: -80; control2Y: 171.001; x: -67.4; y: 173.601 }
- PathCubic { control1X: -67.4; control1Y: 173.601; control2X: -62.6; control2Y: 196.001; x: -59.4; y: 200.801 }
- PathCubic { control1X: -56.2; control1Y: 205.601; control2X: -59.8; control2Y: 205.601; x: -63.4; y: 202.801 }
- PathCubic { control1X: -67; control1Y: 200.001; control2X: -81.8; control2Y: 186.001; x: -83.8; y: 181.601 }
- PathCubic { control1X: -85.8; control1Y: 177.201; control2X: -88.9; control2Y: 169.301; x: -88.9; y: 169.301 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: -67.039; y: 173.818 }
- PathCubic { control1X: -67.039; control1Y: 173.818; control2X: -61.239; control2Y: 175.366; x: -60.23; y: 177.581 }
- PathCubic { control1X: -59.222; control1Y: 179.795; control2X: -61.432; control2Y: 183.092; x: -61.432; y: 183.092 }
- PathCubic { control1X: -61.432; control1Y: 183.092; control2X: -62.432; control2Y: 186.397; x: -63.634; y: 184.235 }
- PathCubic { control1X: -64.836; control1Y: 182.072; control2X: -67.708; control2Y: 174.412; x: -67.039; y: 173.818 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -67; y: 173.601 }
- PathCubic { control1X: -67; control1Y: 173.601; control2X: -63.4; control2Y: 178.801; x: -59.8; y: 178.801 }
- PathCubic { control1X: -56.2; control1Y: 178.801; control2X: -55.818; control2Y: 178.388; x: -53; y: 179.001 }
- PathCubic { control1X: -48.4; control1Y: 180.001; control2X: -48.8; control2Y: 178.001; x: -42.2; y: 179.201 }
- PathCubic { control1X: -39.56; control1Y: 179.681; control2X: -37; control2Y: 178.801; x: -34.2; y: 180.001 }
- PathCubic { control1X: -31.4; control1Y: 181.201; control2X: -28.2; control2Y: 180.401; x: -27; y: 178.401 }
- PathCubic { control1X: -25.8; control1Y: 176.401; control2X: -21; control2Y: 172.201; x: -21; y: 172.201 }
- PathCubic { control1X: -21; control1Y: 172.201; control2X: -33.8; control2Y: 174.001; x: -36.6; y: 174.801 }
- PathCubic { control1X: -36.6; control1Y: 174.801; control2X: -59; control2Y: 176.001; x: -67; y: 173.601 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: -22.4; y: 173.801 }
- PathCubic { control1X: -22.4; control1Y: 173.801; control2X: -28.85; control2Y: 177.301; x: -29.25; y: 179.701 }
- PathCubic { control1X: -29.65; control1Y: 182.101; control2X: -24; control2Y: 185.801; x: -24; y: 185.801 }
- PathCubic { control1X: -24; control1Y: 185.801; control2X: -21.25; control2Y: 190.401; x: -20.65; y: 188.001 }
- PathCubic { control1X: -20.05; control1Y: 185.601; control2X: -21.6; control2Y: 174.201; x: -22.4; y: 173.801 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: -59.885; y: 179.265 }
- PathCubic { control1X: -59.885; control1Y: 179.265; control2X: -52.878; control2Y: 190.453; x: -52.661; y: 179.242 }
- PathCubic { control1X: -52.661; control1Y: 179.242; control2X: -52.104; control2Y: 177.984; x: -53.864; y: 177.962 }
- PathCubic { control1X: -59.939; control1Y: 177.886; control2X: -58.418; control2Y: 173.784; x: -59.885; y: 179.265 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: -52.707; y: 179.514 }
- PathCubic { control1X: -52.707; control1Y: 179.514; control2X: -44.786; control2Y: 190.701; x: -45.422; y: 179.421 }
- PathCubic { control1X: -45.422; control1Y: 179.421; control2X: -45.415; control2Y: 179.089; x: -47.168; y: 178.936 }
- PathCubic { control1X: -51.915; control1Y: 178.522; control2X: -51.57; control2Y: 174.004; x: -52.707; y: 179.514 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: -45.494; y: 179.522 }
- PathCubic { control1X: -45.494; control1Y: 179.522; control2X: -37.534; control2Y: 190.15; x: -38.203; y: 180.484 }
- PathCubic { control1X: -38.203; control1Y: 180.484; control2X: -38.084; control2Y: 179.251; x: -39.738; y: 178.95 }
- PathCubic { control1X: -43.63; control1Y: 178.244; control2X: -43.841; control2Y: 174.995; x: -45.494; y: 179.522 }
- }
-
- ShapePath {
- fillColor: "#ffffcc"
- strokeColor: "#000000"
- strokeWidth: 0.5
- PathMove { x: -38.618; y: 179.602 }
- PathCubic { control1X: -38.618; control1Y: 179.602; control2X: -30.718; control2Y: 191.163; x: -30.37; y: 181.382 }
- PathCubic { control1X: -30.37; control1Y: 181.382; control2X: -28.726; control2Y: 180.004; x: -30.472; y: 179.782 }
- PathCubic { control1X: -36.29; control1Y: 179.042; control2X: -35.492; control2Y: 174.588; x: -38.618; y: 179.602 }
- }
-
- ShapePath {
- fillColor: "#e5e5b2"
- strokeWidth: -1
- PathMove { x: -74.792; y: 183.132 }
- PathLine { x: -82.45; y: 181.601 }
- PathCubic { control1X: -85.05; control1Y: 176.601; control2X: -87.15; control2Y: 170.451; x: -87.15; y: 170.451 }
- PathCubic { control1X: -87.15; control1Y: 170.451; control2X: -80.8; control2Y: 171.451; x: -68.3; y: 174.251 }
- PathCubic { control1X: -68.3; control1Y: 174.251; control2X: -67.424; control2Y: 177.569; x: -65.952; y: 183.364 }
- PathLine { x: -74.792; y: 183.132 }
- }
-
- ShapePath {
- fillColor: "#e5e5b2"
- strokeWidth: -1
- PathMove { x: -9.724; y: 178.47 }
- PathCubic { control1X: -11.39; control1Y: 175.964; control2X: -12.707; control2Y: 174.206; x: -13.357; y: 173.8 }
- PathCubic { control1X: -16.37; control1Y: 171.917; control2X: -12.227; control2Y: 172.294; x: -11.098; y: 172.294 }
- PathCubic { control1X: -11.098; control1Y: 172.294; control2X: 5.473; control2Y: 172.294; x: 7.356; y: 173.047 }
- PathCubic { control1X: 7.356; control1Y: 173.047; control2X: 7.88; control2Y: 175.289; x: 8.564; y: 178.68 }
- PathCubic { control1X: 8.564; control1Y: 178.68; control2X: -1.524; control2Y: 176.67; x: -9.724; y: 178.47 }
- }
-
- ShapePath {
- fillColor: "#cc7226"
- strokeWidth: -1
- PathMove { x: 43.88; y: 40.321 }
- PathCubic { control1X: 71.601; control1Y: 44.281; control2X: 97.121; control2Y: 8.641; x: 98.881; y: -1.04 }
- PathCubic { control1X: 100.641; control1Y: -10.72; control2X: 90.521; control2Y: -22.6; x: 90.521; y: -22.6 }
- PathCubic { control1X: 91.841; control1Y: -25.68; control2X: 87.001; control2Y: -39.76; x: 81.721; y: -49 }
- PathCubic { control1X: 76.441; control1Y: -58.24; control2X: 60.54; control2Y: -57.266; x: 43; y: -58.24 }
- PathCubic { control1X: 27.16; control1Y: -59.12; control2X: 8.68; control2Y: -35.8; x: 7.36; y: -34.04 }
- PathCubic { control1X: 6.04; control1Y: -32.28; control2X: 12.2; control2Y: 6.001; x: 13.52; y: 11.721 }
- PathCubic { control1X: 14.84; control1Y: 17.441; control2X: 12.2; control2Y: 43.841; x: 12.2; y: 43.841 }
- PathCubic { control1X: 46.44; control1Y: 34.741; control2X: 16.16; control2Y: 36.361; x: 43.88; y: 40.321 }
- }
-
- ShapePath {
- fillColor: "#ea8e51"
- strokeWidth: -1
- PathMove { x: 8.088; y: -33.392 }
- PathCubic { control1X: 6.792; control1Y: -31.664; control2X: 12.84; control2Y: 5.921; x: 14.136; y: 11.537 }
- PathCubic { control1X: 15.432; control1Y: 17.153; control2X: 12.84; control2Y: 43.073; x: 12.84; y: 43.073 }
- PathCubic { control1X: 45.512; control1Y: 34.193; control2X: 16.728; control2Y: 35.729; x: 43.944; y: 39.617 }
- PathCubic { control1X: 71.161; control1Y: 43.505; control2X: 96.217; control2Y: 8.513; x: 97.945; y: -0.992 }
- PathCubic { control1X: 99.673; control1Y: -10.496; control2X: 89.737; control2Y: -22.16; x: 89.737; y: -22.16 }
- PathCubic { control1X: 91.033; control1Y: -25.184; control2X: 86.281; control2Y: -39.008; x: 81.097; y: -48.08 }
- PathCubic { control1X: 75.913; control1Y: -57.152; control2X: 60.302; control2Y: -56.195; x: 43.08; y: -57.152 }
- PathCubic { control1X: 27.528; control1Y: -58.016; control2X: 9.384; control2Y: -35.12; x: 8.088; y: -33.392 }
- }
-
- ShapePath {
- fillColor: "#efaa7c"
- strokeWidth: -1
- PathMove { x: 8.816; y: -32.744 }
- PathCubic { control1X: 7.544; control1Y: -31.048; control2X: 13.48; control2Y: 5.841; x: 14.752; y: 11.353 }
- PathCubic { control1X: 16.024; control1Y: 16.865; control2X: 13.48; control2Y: 42.305; x: 13.48; y: 42.305 }
- PathCubic { control1X: 44.884; control1Y: 33.145; control2X: 17.296; control2Y: 35.097; x: 44.008; y: 38.913 }
- PathCubic { control1X: 70.721; control1Y: 42.729; control2X: 95.313; control2Y: 8.385; x: 97.009; y: -0.944 }
- PathCubic { control1X: 98.705; control1Y: -10.272; control2X: 88.953; control2Y: -21.72; x: 88.953; y: -21.72 }
- PathCubic { control1X: 90.225; control1Y: -24.688; control2X: 85.561; control2Y: -38.256; x: 80.473; y: -47.16 }
- PathCubic { control1X: 75.385; control1Y: -56.064; control2X: 60.063; control2Y: -55.125; x: 43.16; y: -56.064 }
- PathCubic { control1X: 27.896; control1Y: -56.912; control2X: 10.088; control2Y: -34.44; x: 8.816; y: -32.744 }
- }
-
- ShapePath {
- fillColor: "#f4c6a8"
- strokeWidth: -1
- PathMove { x: 9.544; y: -32.096 }
- PathCubic { control1X: 8.296; control1Y: -30.432; control2X: 14.12; control2Y: 5.761; x: 15.368; y: 11.169 }
- PathCubic { control1X: 16.616; control1Y: 16.577; control2X: 14.12; control2Y: 41.537; x: 14.12; y: 41.537 }
- PathCubic { control1X: 43.556; control1Y: 32.497; control2X: 17.864; control2Y: 34.465; x: 44.072; y: 38.209 }
- PathCubic { control1X: 70.281; control1Y: 41.953; control2X: 94.409; control2Y: 8.257; x: 96.073; y: -0.895 }
- PathCubic { control1X: 97.737; control1Y: -10.048; control2X: 88.169; control2Y: -21.28; x: 88.169; y: -21.28 }
- PathCubic { control1X: 89.417; control1Y: -24.192; control2X: 84.841; control2Y: -37.504; x: 79.849; y: -46.24 }
- PathCubic { control1X: 74.857; control1Y: -54.976; control2X: 59.824; control2Y: -54.055; x: 43.24; y: -54.976 }
- PathCubic { control1X: 28.264; control1Y: -55.808; control2X: 10.792; control2Y: -33.76; x: 9.544; y: -32.096 }
- }
-
- ShapePath {
- fillColor: "#f9e2d3"
- strokeWidth: -1
- PathMove { x: 10.272; y: -31.448 }
- PathCubic { control1X: 9.048; control1Y: -29.816; control2X: 14.76; control2Y: 5.681; x: 15.984; y: 10.985 }
- PathCubic { control1X: 17.208; control1Y: 16.289; control2X: 14.76; control2Y: 40.769; x: 14.76; y: 40.769 }
- PathCubic { control1X: 42.628; control1Y: 31.849; control2X: 18.432; control2Y: 33.833; x: 44.136; y: 37.505 }
- PathCubic { control1X: 69.841; control1Y: 41.177; control2X: 93.505; control2Y: 8.129; x: 95.137; y: -0.848 }
- PathCubic { control1X: 96.769; control1Y: -9.824; control2X: 87.385; control2Y: -20.84; x: 87.385; y: -20.84 }
- PathCubic { control1X: 88.609; control1Y: -23.696; control2X: 84.121; control2Y: -36.752; x: 79.225; y: -45.32 }
- PathCubic { control1X: 74.329; control1Y: -53.888; control2X: 59.585; control2Y: -52.985; x: 43.32; y: -53.888 }
- PathCubic { control1X: 28.632; control1Y: -54.704; control2X: 11.496; control2Y: -33.08; x: 10.272; y: -31.448 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeWidth: -1
- PathMove { x: 44.2; y: 36.8 }
- PathCubic { control1X: 69.4; control1Y: 40.4; control2X: 92.601; control2Y: 8; x: 94.201; y: -0.8 }
- PathCubic { control1X: 95.801; control1Y: -9.6; control2X: 86.601; control2Y: -20.4; x: 86.601; y: -20.4 }
- PathCubic { control1X: 87.801; control1Y: -23.2; control2X: 83.4; control2Y: -36; x: 78.6; y: -44.4 }
- PathCubic { control1X: 73.8; control1Y: -52.8; control2X: 59.346; control2Y: -51.914; x: 43.4; y: -52.8 }
- PathCubic { control1X: 29; control1Y: -53.6; control2X: 12.2; control2Y: -32.4; x: 11; y: -30.8 }
- PathCubic { control1X: 9.8; control1Y: -29.2; control2X: 15.4; control2Y: 5.6; x: 16.6; y: 10.8 }
- PathCubic { control1X: 17.8; control1Y: 16; control2X: 15.4; control2Y: 40; x: 15.4; y: 40 }
- PathCubic { control1X: 40.9; control1Y: 31.4; control2X: 19; control2Y: 33.2; x: 44.2; y: 36.8 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 90.601; y: 2.8 }
- PathCubic { control1X: 90.601; control1Y: 2.8; control2X: 62.8; control2Y: 10.4; x: 51.2; y: 8.8 }
- PathCubic { control1X: 51.2; control1Y: 8.8; control2X: 35.4; control2Y: 2.2; x: 26.6; y: 24 }
- PathCubic { control1X: 26.6; control1Y: 24; control2X: 23; control2Y: 31.2; x: 21; y: 33.2 }
- PathCubic { control1X: 19; control1Y: 35.2; control2X: 90.601; control2Y: 2.8; x: 90.601; y: 2.8 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 94.401; y: 0.6 }
- PathCubic { control1X: 94.401; control1Y: 0.6; control2X: 65.4; control2Y: 12.8; x: 55.4; y: 12.4 }
- PathCubic { control1X: 55.4; control1Y: 12.4; control2X: 39; control2Y: 7.8; x: 30.6; y: 22.4 }
- PathCubic { control1X: 30.6; control1Y: 22.4; control2X: 22.2; control2Y: 31.6; x: 19; y: 33.2 }
- PathCubic { control1X: 19; control1Y: 33.2; control2X: 18.6; control2Y: 34.8; x: 25; y: 30.8 }
- PathLine { x: 35.4; y: 36 }
- PathCubic { control1X: 35.4; control1Y: 36; control2X: 50.2; control2Y: 45.6; x: 59.8; y: 29.6 }
- PathCubic { control1X: 59.8; control1Y: 29.6; control2X: 63.8; control2Y: 18.4; x: 63.8; y: 16.4 }
- PathCubic { control1X: 63.8; control1Y: 14.4; control2X: 85; control2Y: 8.8; x: 86.601; y: 8.4 }
- PathCubic { control1X: 88.201; control1Y: 8; control2X: 94.801; control2Y: 3.8; x: 94.401; y: 0.6 }
- }
-
- ShapePath {
- fillColor: "#99cc32"
- strokeWidth: -1
- PathMove { x: 47; y: 36.514 }
- PathCubic { control1X: 40.128; control1Y: 36.514; control2X: 31.755; control2Y: 32.649; x: 31.755; y: 26.4 }
- PathCubic { control1X: 31.755; control1Y: 20.152; control2X: 40.128; control2Y: 13.887; x: 47; y: 13.887 }
- PathCubic { control1X: 53.874; control1Y: 13.887; control2X: 59.446; control2Y: 18.952; x: 59.446; y: 25.2 }
- PathCubic { control1X: 59.446; control1Y: 31.449; control2X: 53.874; control2Y: 36.514; x: 47; y: 36.514 }
- }
-
- ShapePath {
- fillColor: "#659900"
- strokeWidth: -1
- PathMove { x: 43.377; y: 19.83 }
- PathCubic { control1X: 38.531; control1Y: 20.552; control2X: 33.442; control2Y: 22.055; x: 33.514; y: 21.839 }
- PathCubic { control1X: 35.054; control1Y: 17.22; control2X: 41.415; control2Y: 13.887; x: 47; y: 13.887 }
- PathCubic { control1X: 51.296; control1Y: 13.887; control2X: 55.084; control2Y: 15.865; x: 57.32; y: 18.875 }
- PathCubic { control1X: 57.32; control1Y: 18.875; control2X: 52.004; control2Y: 18.545; x: 43.377; y: 19.83 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeWidth: -1
- PathMove { x: 55.4; y: 19.6 }
- PathCubic { control1X: 55.4; control1Y: 19.6; control2X: 51; control2Y: 16.4; x: 51; y: 18.6 }
- PathCubic { control1X: 51; control1Y: 18.6; control2X: 54.6; control2Y: 23; x: 55.4; y: 19.6 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 45.4; y: 27.726 }
- PathCubic { control1X: 42.901; control1Y: 27.726; control2X: 40.875; control2Y: 25.7; x: 40.875; y: 23.2 }
- PathCubic { control1X: 40.875; control1Y: 20.701; control2X: 42.901; control2Y: 18.675; x: 45.4; y: 18.675 }
- PathCubic { control1X: 47.9; control1Y: 18.675; control2X: 49.926; control2Y: 20.701; x: 49.926; y: 23.2 }
- PathCubic { control1X: 49.926; control1Y: 25.7; control2X: 47.9; control2Y: 27.726; x: 45.4; y: 27.726 }
- }
-
- ShapePath {
- fillColor: "#cc7226"
- strokeWidth: -1
- PathMove { x: -58.6; y: 14.4 }
- PathCubic { control1X: -58.6; control1Y: 14.4; control2X: -61.8; control2Y: -6.8; x: -59.4; y: -11.2 }
- PathCubic { control1X: -59.4; control1Y: -11.2; control2X: -48.6; control2Y: -21.2; x: -49; y: -24.8 }
- PathCubic { control1X: -49; control1Y: -24.8; control2X: -49.4; control2Y: -42.8; x: -50.6; y: -43.6 }
- PathCubic { control1X: -51.8; control1Y: -44.4; control2X: -59.4; control2Y: -50.4; x: -65.4; y: -44 }
- PathCubic { control1X: -65.4; control1Y: -44; control2X: -75.8; control2Y: -26; x: -75; y: -19.6 }
- PathLine { x: -75; y: -17.6 }
- PathCubic { control1X: -75; control1Y: -17.6; control2X: -82.6; control2Y: -18; x: -84.2; y: -16 }
- PathCubic { control1X: -84.2; control1Y: -16; control2X: -85.4; control2Y: -10.8; x: -86.6; y: -10.4 }
- PathCubic { control1X: -86.6; control1Y: -10.4; control2X: -89.4; control2Y: -8; x: -87.4; y: -5.2 }
- PathCubic { control1X: -87.4; control1Y: -5.2; control2X: -89.4; control2Y: -2.8; x: -89; y: 1.2 }
- PathLine { x: -81.4; y: 5.2 }
- PathCubic { control1X: -81.4; control1Y: 5.2; control2X: -79.4; control2Y: 19.6; x: -68.6; y: 24.8 }
- PathCubic { control1X: -63.764; control1Y: 27.129; control2X: -60.6; control2Y: 20.4; x: -58.6; y: 14.4 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeWidth: -1
- PathMove { x: -59.6; y: 12.56 }
- PathCubic { control1X: -59.6; control1Y: 12.56; control2X: -62.48; control2Y: -6.52; x: -60.32; y: -10.48 }
- PathCubic { control1X: -60.32; control1Y: -10.48; control2X: -50.6; control2Y: -19.48; x: -50.96; y: -22.72 }
- PathCubic { control1X: -50.96; control1Y: -22.72; control2X: -51.32; control2Y: -38.92; x: -52.4; y: -39.64 }
- PathCubic { control1X: -53.48; control1Y: -40.36; control2X: -60.32; control2Y: -45.76; x: -65.72; y: -40 }
- PathCubic { control1X: -65.72; control1Y: -40; control2X: -75.08; control2Y: -23.8; x: -74.36; y: -18.04 }
- PathLine { x: -74.36; y: -16.24 }
- PathCubic { control1X: -74.36; control1Y: -16.24; control2X: -81.2; control2Y: -16.6; x: -82.64; y: -14.8 }
- PathCubic { control1X: -82.64; control1Y: -14.8; control2X: -83.72; control2Y: -10.12; x: -84.8; y: -9.76 }
- PathCubic { control1X: -84.8; control1Y: -9.76; control2X: -87.32; control2Y: -7.6; x: -85.52; y: -5.08 }
- PathCubic { control1X: -85.52; control1Y: -5.08; control2X: -87.32; control2Y: -2.92; x: -86.96; y: 0.68 }
- PathLine { x: -80.12; y: 4.28 }
- PathCubic { control1X: -80.12; control1Y: 4.28; control2X: -78.32; control2Y: 17.24; x: -68.6; y: 21.92 }
- PathCubic { control1X: -64.248; control1Y: 24.015; control2X: -61.4; control2Y: 17.96; x: -59.6; y: 12.56 }
- }
-
- ShapePath {
- fillColor: "#eb955c"
- strokeWidth: -1
- PathMove { x: -51.05; y: -42.61 }
- PathCubic { control1X: -52.14; control1Y: -43.47; control2X: -59.63; control2Y: -49.24; x: -65.48; y: -43 }
- PathCubic { control1X: -65.48; control1Y: -43; control2X: -75.62; control2Y: -25.45; x: -74.84; y: -19.21 }
- PathLine { x: -74.84; y: -17.26 }
- PathCubic { control1X: -74.84; control1Y: -17.26; control2X: -82.25; control2Y: -17.65; x: -83.81; y: -15.7 }
- PathCubic { control1X: -83.81; control1Y: -15.7; control2X: -84.98; control2Y: -10.63; x: -86.15; y: -10.24 }
- PathCubic { control1X: -86.15; control1Y: -10.24; control2X: -88.88; control2Y: -7.9; x: -86.93; y: -5.17 }
- PathCubic { control1X: -86.93; control1Y: -5.17; control2X: -88.88; control2Y: -2.83; x: -88.49; y: 1.07 }
- PathLine { x: -81.08; y: 4.97 }
- PathCubic { control1X: -81.08; control1Y: 4.97; control2X: -79.13; control2Y: 19.01; x: -68.6; y: 24.08 }
- PathCubic { control1X: -63.886; control1Y: 26.35; control2X: -60.8; control2Y: 19.79; x: -58.85; y: 13.94 }
- PathCubic { control1X: -58.85; control1Y: 13.94; control2X: -61.97; control2Y: -6.73; x: -59.63; y: -11.02 }
- PathCubic { control1X: -59.63; control1Y: -11.02; control2X: -49.1; control2Y: -20.77; x: -49.49; y: -24.28 }
- PathCubic { control1X: -49.49; control1Y: -24.28; control2X: -49.88; control2Y: -41.83; x: -51.05; y: -42.61 }
- }
-
- ShapePath {
- fillColor: "#f2b892"
- strokeWidth: -1
- PathMove { x: -51.5; y: -41.62 }
- PathCubic { control1X: -52.48; control1Y: -42.54; control2X: -59.86; control2Y: -48.08; x: -65.56; y: -42 }
- PathCubic { control1X: -65.56; control1Y: -42; control2X: -75.44; control2Y: -24.9; x: -74.68; y: -18.82 }
- PathLine { x: -74.68; y: -16.92 }
- PathCubic { control1X: -74.68; control1Y: -16.92; control2X: -81.9; control2Y: -17.3; x: -83.42; y: -15.4 }
- PathCubic { control1X: -83.42; control1Y: -15.4; control2X: -84.56; control2Y: -10.46; x: -85.7; y: -10.08 }
- PathCubic { control1X: -85.7; control1Y: -10.08; control2X: -88.36; control2Y: -7.8; x: -86.46; y: -5.14 }
- PathCubic { control1X: -86.46; control1Y: -5.14; control2X: -88.36; control2Y: -2.86; x: -87.98; y: 0.94 }
- PathLine { x: -80.76; y: 4.74 }
- PathCubic { control1X: -80.76; control1Y: 4.74; control2X: -78.86; control2Y: 18.42; x: -68.6; y: 23.36 }
- PathCubic { control1X: -64.006; control1Y: 25.572; control2X: -61; control2Y: 19.18; x: -59.1; y: 13.48 }
- PathCubic { control1X: -59.1; control1Y: 13.48; control2X: -62.14; control2Y: -6.66; x: -59.86; y: -10.84 }
- PathCubic { control1X: -59.86; control1Y: -10.84; control2X: -49.6; control2Y: -20.34; x: -49.98; y: -23.76 }
- PathCubic { control1X: -49.98; control1Y: -23.76; control2X: -50.36; control2Y: -40.86; x: -51.5; y: -41.62 }
- }
-
- ShapePath {
- fillColor: "#f8dcc8"
- strokeWidth: -1
- PathMove { x: -51.95; y: -40.63 }
- PathCubic { control1X: -52.82; control1Y: -41.61; control2X: -60.09; control2Y: -46.92; x: -65.64; y: -41 }
- PathCubic { control1X: -65.64; control1Y: -41; control2X: -75.26; control2Y: -24.35; x: -74.52; y: -18.43 }
- PathLine { x: -74.52; y: -16.58 }
- PathCubic { control1X: -74.52; control1Y: -16.58; control2X: -81.55; control2Y: -16.95; x: -83.03; y: -15.1 }
- PathCubic { control1X: -83.03; control1Y: -15.1; control2X: -84.14; control2Y: -10.29; x: -85.25; y: -9.92 }
- PathCubic { control1X: -85.25; control1Y: -9.92; control2X: -87.84; control2Y: -7.7; x: -85.99; y: -5.11 }
- PathCubic { control1X: -85.99; control1Y: -5.11; control2X: -87.84; control2Y: -2.89; x: -87.47; y: 0.81 }
- PathLine { x: -80.44; y: 4.51 }
- PathCubic { control1X: -80.44; control1Y: 4.51; control2X: -78.59; control2Y: 17.83; x: -68.6; y: 22.64 }
- PathCubic { control1X: -64.127; control1Y: 24.794; control2X: -61.2; control2Y: 18.57; x: -59.35; y: 13.02 }
- PathCubic { control1X: -59.35; control1Y: 13.02; control2X: -62.31; control2Y: -6.59; x: -60.09; y: -10.66 }
- PathCubic { control1X: -60.09; control1Y: -10.66; control2X: -50.1; control2Y: -19.91; x: -50.47; y: -23.24 }
- PathCubic { control1X: -50.47; control1Y: -23.24; control2X: -50.84; control2Y: -39.89; x: -51.95; y: -40.63 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeWidth: -1
- PathMove { x: -59.6; y: 12.46 }
- PathCubic { control1X: -59.6; control1Y: 12.46; control2X: -62.48; control2Y: -6.52; x: -60.32; y: -10.48 }
- PathCubic { control1X: -60.32; control1Y: -10.48; control2X: -50.6; control2Y: -19.48; x: -50.96; y: -22.72 }
- PathCubic { control1X: -50.96; control1Y: -22.72; control2X: -51.32; control2Y: -38.92; x: -52.4; y: -39.64 }
- PathCubic { control1X: -53.16; control1Y: -40.68; control2X: -60.32; control2Y: -45.76; x: -65.72; y: -40 }
- PathCubic { control1X: -65.72; control1Y: -40; control2X: -75.08; control2Y: -23.8; x: -74.36; y: -18.04 }
- PathLine { x: -74.36; y: -16.24 }
- PathCubic { control1X: -74.36; control1Y: -16.24; control2X: -81.2; control2Y: -16.6; x: -82.64; y: -14.8 }
- PathCubic { control1X: -82.64; control1Y: -14.8; control2X: -83.72; control2Y: -10.12; x: -84.8; y: -9.76 }
- PathCubic { control1X: -84.8; control1Y: -9.76; control2X: -87.32; control2Y: -7.6; x: -85.52; y: -5.08 }
- PathCubic { control1X: -85.52; control1Y: -5.08; control2X: -87.32; control2Y: -2.92; x: -86.96; y: 0.68 }
- PathLine { x: -80.12; y: 4.28 }
- PathCubic { control1X: -80.12; control1Y: 4.28; control2X: -78.32; control2Y: 17.24; x: -68.6; y: 21.92 }
- PathCubic { control1X: -64.248; control1Y: 24.015; control2X: -61.4; control2Y: 17.86; x: -59.6; y: 12.46 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -62.7; y: 6.2 }
- PathCubic { control1X: -62.7; control1Y: 6.2; control2X: -84.3; control2Y: -4; x: -85.2; y: -4.8 }
- PathCubic { control1X: -85.2; control1Y: -4.8; control2X: -76.1; control2Y: 3.4; x: -75.3; y: 3.4 }
- PathCubic { control1X: -74.5; control1Y: 3.4; control2X: -62.7; control2Y: 6.2; x: -62.7; y: 6.2 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -79.8; y: 0 }
- PathCubic { control1X: -79.8; control1Y: 0; control2X: -61.4; control2Y: 3.6; x: -61.4; y: 8 }
- PathCubic { control1X: -61.4; control1Y: 10.912; control2X: -61.643; control2Y: 24.331; x: -67; y: 22.8 }
- PathCubic { control1X: -75.4; control1Y: 20.4; control2X: -71.8; control2Y: 6; x: -79.8; y: 0 }
- }
-
- ShapePath {
- fillColor: "#99cc32"
- strokeWidth: -1
- PathMove { x: -71.4; y: 3.8 }
- PathCubic { control1X: -71.4; control1Y: 3.8; control2X: -62.422; control2Y: 5.274; x: -61.4; y: 8 }
- PathCubic { control1X: -60.8; control1Y: 9.6; control2X: -60.137; control2Y: 17.908; x: -65.6; y: 19 }
- PathCubic { control1X: -70.152; control1Y: 19.911; control2X: -72.382; control2Y: 9.69; x: -71.4; y: 3.8 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 14.595; y: 46.349 }
- PathCubic { control1X: 14.098; control1Y: 44.607; control2X: 15.409; control2Y: 44.738; x: 17.2; y: 44.2 }
- PathCubic { control1X: 19.2; control1Y: 43.6; control2X: 31.4; control2Y: 39.8; x: 32.2; y: 37.2 }
- PathCubic { control1X: 33; control1Y: 34.6; control2X: 46.2; control2Y: 39; x: 46.2; y: 39 }
- PathCubic { control1X: 48; control1Y: 39.8; control2X: 52.4; control2Y: 42.4; x: 52.4; y: 42.4 }
- PathCubic { control1X: 57.2; control1Y: 43.6; control2X: 63.8; control2Y: 44; x: 63.8; y: 44 }
- PathCubic { control1X: 66.2; control1Y: 45; control2X: 69.6; control2Y: 47.8; x: 69.6; y: 47.8 }
- PathCubic { control1X: 84.2; control1Y: 58; control2X: 96.601; control2Y: 50.8; x: 96.601; y: 50.8 }
- PathCubic { control1X: 116.601; control1Y: 44.2; control2X: 110.601; control2Y: 27; x: 110.601; y: 27 }
- PathCubic { control1X: 107.601; control1Y: 18; control2X: 110.801; control2Y: 14.6; x: 110.801; y: 14.6 }
- PathCubic { control1X: 111.001; control1Y: 10.8; control2X: 118.201; control2Y: 17.2; x: 118.201; y: 17.2 }
- PathCubic { control1X: 120.801; control1Y: 21.4; control2X: 121.601; control2Y: 26.4; x: 121.601; y: 26.4 }
- PathCubic { control1X: 129.601; control1Y: 37.6; control2X: 126.201; control2Y: 19.8; x: 126.201; y: 19.8 }
- PathCubic { control1X: 126.401; control1Y: 18.8; control2X: 123.601; control2Y: 15.2; x: 123.601; y: 14 }
- PathCubic { control1X: 123.601; control1Y: 12.8; control2X: 121.801; control2Y: 9.4; x: 121.801; y: 9.4 }
- PathCubic { control1X: 118.801; control1Y: 6; control2X: 121.201; control2Y: -1; x: 121.201; y: -1 }
- PathCubic { control1X: 123.001; control1Y: -14.8; control2X: 120.801; control2Y: -13; x: 120.801; y: -13 }
- PathCubic { control1X: 119.601; control1Y: -14.8; control2X: 110.401; control2Y: -4.8; x: 110.401; y: -4.8 }
- PathCubic { control1X: 108.201; control1Y: -1.4; control2X: 102.201; control2Y: 0.2; x: 102.201; y: 0.2 }
- PathCubic { control1X: 99.401; control1Y: 2; control2X: 96.001; control2Y: 0.6; x: 96.001; y: 0.6 }
- PathCubic { control1X: 93.401; control1Y: 0.2; control2X: 87.801; control2Y: 7.2; x: 87.801; y: 7.2 }
- PathCubic { control1X: 90.601; control1Y: 7; control2X: 93.001; control2Y: 11.4; x: 95.401; y: 11.6 }
- PathCubic { control1X: 97.801; control1Y: 11.8; control2X: 99.601; control2Y: 9.2; x: 101.201; y: 8.6 }
- PathCubic { control1X: 102.801; control1Y: 8; control2X: 105.601; control2Y: 13.8; x: 105.601; y: 13.8 }
- PathCubic { control1X: 106.001; control1Y: 16.4; control2X: 100.401; control2Y: 21.2; x: 100.401; y: 21.2 }
- PathCubic { control1X: 100.001; control1Y: 25.8; control2X: 98.401; control2Y: 24.2; x: 98.401; y: 24.2 }
- PathCubic { control1X: 95.401; control1Y: 23.6; control2X: 94.201; control2Y: 27.4; x: 93.201; y: 32 }
- PathCubic { control1X: 92.201; control1Y: 36.6; control2X: 88.001; control2Y: 37; x: 88.001; y: 37 }
- PathCubic { control1X: 86.401; control1Y: 44.4; control2X: 85.2; control2Y: 41.4; x: 85.2; y: 41.4 }
- PathCubic { control1X: 85; control1Y: 35.8; control2X: 79; control2Y: 41.6; x: 79; y: 41.6 }
- PathCubic { control1X: 77.8; control1Y: 43.6; control2X: 73.2; control2Y: 41.4; x: 73.2; y: 41.4 }
- PathCubic { control1X: 66.4; control1Y: 39.4; control2X: 68.8; control2Y: 37.4; x: 68.8; y: 37.4 }
- PathCubic { control1X: 70.6; control1Y: 35.2; control2X: 81.8; control2Y: 37.4; x: 81.8; y: 37.4 }
- PathCubic { control1X: 84; control1Y: 35.8; control2X: 76; control2Y: 31.8; x: 76; y: 31.8 }
- PathCubic { control1X: 75.4; control1Y: 30; control2X: 76.4; control2Y: 25.6; x: 76.4; y: 25.6 }
- PathCubic { control1X: 77.6; control1Y: 22.4; control2X: 84.4; control2Y: 16.8; x: 84.4; y: 16.8 }
- PathCubic { control1X: 93.801; control1Y: 15.6; control2X: 91.001; control2Y: 14; x: 91.001; y: 14 }
- PathCubic { control1X: 84.801; control1Y: 8.8; control2X: 79; control2Y: 16.4; x: 79; y: 16.4 }
- PathCubic { control1X: 76.8; control1Y: 22.6; control2X: 59.4; control2Y: 37.6; x: 59.4; y: 37.6 }
- PathCubic { control1X: 54.6; control1Y: 41; control2X: 57.2; control2Y: 34.2; x: 53.2; y: 37.6 }
- PathCubic { control1X: 49.2; control1Y: 41; control2X: 28.6; control2Y: 32; x: 28.6; y: 32 }
- PathCubic { control1X: 17.038; control1Y: 30.807; control2X: 14.306; control2Y: 46.549; x: 10.777; y: 43.429 }
- PathCubic { control1X: 10.777; control1Y: 43.429; control2X: 16.195; control2Y: 51.949; x: 14.595; y: 46.349 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 209.401; y: -120 }
- PathCubic { control1X: 209.401; control1Y: -120; control2X: 183.801; control2Y: -112; x: 181.001; y: -93.2 }
- PathCubic { control1X: 181.001; control1Y: -93.2; control2X: 178.601; control2Y: -70.4; x: 199.001; y: -52.8 }
- PathCubic { control1X: 199.001; control1Y: -52.8; control2X: 199.401; control2Y: -46.4; x: 201.401; y: -43.2 }
- PathCubic { control1X: 201.401; control1Y: -43.2; control2X: 199.801; control2Y: -38.4; x: 218.601; y: -46 }
- PathLine { x: 245.801; y: -54.4 }
- PathCubic { control1X: 245.801; control1Y: -54.4; control2X: 252.201; control2Y: -56.8; x: 257.401; y: -65.6 }
- PathCubic { control1X: 262.601; control1Y: -74.4; control2X: 277.801; control2Y: -93.2; x: 274.201; y: -118.4 }
- PathCubic { control1X: 274.201; control1Y: -118.4; control2X: 275.401; control2Y: -129.6; x: 269.401; y: -130 }
- PathCubic { control1X: 269.401; control1Y: -130; control2X: 261.001; control2Y: -131.6; x: 253.801; y: -124 }
- PathCubic { control1X: 253.801; control1Y: -124; control2X: 247.001; control2Y: -120.8; x: 244.601; y: -121.2 }
- PathLine { x: 209.401; y: -120 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 264.022; y: -120.99 }
- PathCubic { control1X: 264.022; control1Y: -120.99; control2X: 266.122; control2Y: -129.92; x: 261.282; y: -125.08 }
- PathCubic { control1X: 261.282; control1Y: -125.08; control2X: 254.242; control2Y: -119.36; x: 246.761; y: -119.36 }
- PathCubic { control1X: 246.761; control1Y: -119.36; control2X: 232.241; control2Y: -117.16; x: 227.841; y: -103.96 }
- PathCubic { control1X: 227.841; control1Y: -103.96; control2X: 223.881; control2Y: -77.12; x: 231.801; y: -71.4 }
- PathCubic { control1X: 231.801; control1Y: -71.4; control2X: 236.641; control2Y: -63.92; x: 243.681; y: -70.52 }
- PathCubic { control1X: 250.722; control1Y: -77.12; control2X: 266.222; control2Y: -107.35; x: 264.022; y: -120.99 }
- }
-
- ShapePath {
- fillColor: "#323232"
- strokeWidth: -1
- PathMove { x: 263.648; y: -120.632 }
- PathCubic { control1X: 263.648; control1Y: -120.632; control2X: 265.738; control2Y: -129.376; x: 260.986; y: -124.624 }
- PathCubic { control1X: 260.986; control1Y: -124.624; control2X: 254.074; control2Y: -119.008; x: 246.729; y: -119.008 }
- PathCubic { control1X: 246.729; control1Y: -119.008; control2X: 232.473; control2Y: -116.848; x: 228.153; y: -103.888 }
- PathCubic { control1X: 228.153; control1Y: -103.888; control2X: 224.265; control2Y: -77.536; x: 232.041; y: -71.92 }
- PathCubic { control1X: 232.041; control1Y: -71.92; control2X: 236.793; control2Y: -64.576; x: 243.705; y: -71.056 }
- PathCubic { control1X: 250.618; control1Y: -77.536; control2X: 265.808; control2Y: -107.24; x: 263.648; y: -120.632 }
- }
-
- ShapePath {
- fillColor: "#666666"
- strokeWidth: -1
- PathMove { x: 263.274; y: -120.274 }
- PathCubic { control1X: 263.274; control1Y: -120.274; control2X: 265.354; control2Y: -128.832; x: 260.69; y: -124.168 }
- PathCubic { control1X: 260.69; control1Y: -124.168; control2X: 253.906; control2Y: -118.656; x: 246.697; y: -118.656 }
- PathCubic { control1X: 246.697; control1Y: -118.656; control2X: 232.705; control2Y: -116.536; x: 228.465; y: -103.816 }
- PathCubic { control1X: 228.465; control1Y: -103.816; control2X: 224.649; control2Y: -77.952; x: 232.281; y: -72.44 }
- PathCubic { control1X: 232.281; control1Y: -72.44; control2X: 236.945; control2Y: -65.232; x: 243.729; y: -71.592 }
- PathCubic { control1X: 250.514; control1Y: -77.952; control2X: 265.394; control2Y: -107.13; x: 263.274; y: -120.274 }
- }
-
- ShapePath {
- fillColor: "#999999"
- strokeWidth: -1
- PathMove { x: 262.9; y: -119.916 }
- PathCubic { control1X: 262.9; control1Y: -119.916; control2X: 264.97; control2Y: -128.288; x: 260.394; y: -123.712 }
- PathCubic { control1X: 260.394; control1Y: -123.712; control2X: 253.738; control2Y: -118.304; x: 246.665; y: -118.304 }
- PathCubic { control1X: 246.665; control1Y: -118.304; control2X: 232.937; control2Y: -116.224; x: 228.777; y: -103.744 }
- PathCubic { control1X: 228.777; control1Y: -103.744; control2X: 225.033; control2Y: -78.368; x: 232.521; y: -72.96 }
- PathCubic { control1X: 232.521; control1Y: -72.96; control2X: 237.097; control2Y: -65.888; x: 243.753; y: -72.128 }
- PathCubic { control1X: 250.41; control1Y: -78.368; control2X: 264.98; control2Y: -107.02; x: 262.9; y: -119.916 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 262.526; y: -119.558 }
- PathCubic { control1X: 262.526; control1Y: -119.558; control2X: 264.586; control2Y: -127.744; x: 260.098; y: -123.256 }
- PathCubic { control1X: 260.098; control1Y: -123.256; control2X: 253.569; control2Y: -117.952; x: 246.633; y: -117.952 }
- PathCubic { control1X: 246.633; control1Y: -117.952; control2X: 233.169; control2Y: -115.912; x: 229.089; y: -103.672 }
- PathCubic { control1X: 229.089; control1Y: -103.672; control2X: 225.417; control2Y: -78.784; x: 232.761; y: -73.48 }
- PathCubic { control1X: 232.761; control1Y: -73.48; control2X: 237.249; control2Y: -66.544; x: 243.777; y: -72.664 }
- PathCubic { control1X: 250.305; control1Y: -78.784; control2X: 264.566; control2Y: -106.91; x: 262.526; y: -119.558 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeWidth: -1
- PathMove { x: 262.151; y: -119.2 }
- PathCubic { control1X: 262.151; control1Y: -119.2; control2X: 264.201; control2Y: -127.2; x: 259.801; y: -122.8 }
- PathCubic { control1X: 259.801; control1Y: -122.8; control2X: 253.401; control2Y: -117.6; x: 246.601; y: -117.6 }
- PathCubic { control1X: 246.601; control1Y: -117.6; control2X: 233.401; control2Y: -115.6; x: 229.401; y: -103.6 }
- PathCubic { control1X: 229.401; control1Y: -103.6; control2X: 225.801; control2Y: -79.2; x: 233.001; y: -74 }
- PathCubic { control1X: 233.001; control1Y: -74; control2X: 237.401; control2Y: -67.2; x: 243.801; y: -73.2 }
- PathCubic { control1X: 250.201; control1Y: -79.2; control2X: 264.151; control2Y: -106.8; x: 262.151; y: -119.2 }
- }
-
- ShapePath {
- fillColor: "#992600"
- strokeWidth: -1
- PathMove { x: 50.6; y: 84 }
- PathCubic { control1X: 50.6; control1Y: 84; control2X: 30.2; control2Y: 64.8; x: 22.2; y: 64 }
- PathCubic { control1X: 22.2; control1Y: 64; control2X: -12.2; control2Y: 60; x: -27; y: 78 }
- PathCubic { control1X: -27; control1Y: 78; control2X: -9.4; control2Y: 57.6; x: 18.2; y: 63.2 }
- PathCubic { control1X: 18.2; control1Y: 63.2; control2X: -3.4; control2Y: 58.8; x: -15.8; y: 62 }
- PathCubic { control1X: -15.8; control1Y: 62; control2X: -32.6; control2Y: 62; x: -42.2; y: 76 }
- PathLine { x: -45; y: 80.8 }
- PathCubic { control1X: -45; control1Y: 80.8; control2X: -41; control2Y: 66; x: -22.6; y: 60 }
- PathCubic { control1X: -22.6; control1Y: 60; control2X: 0.2; control2Y: 55.2; x: 11; y: 60 }
- PathCubic { control1X: 11; control1Y: 60; control2X: -10.6; control2Y: 53.2; x: -20.6; y: 55.2 }
- PathCubic { control1X: -20.6; control1Y: 55.2; control2X: -51; control2Y: 52.8; x: -63.8; y: 79.2 }
- PathCubic { control1X: -63.8; control1Y: 79.2; control2X: -59.8; control2Y: 64.8; x: -45; y: 57.6 }
- PathCubic { control1X: -45; control1Y: 57.6; control2X: -31.4; control2Y: 48.8; x: -11; y: 51.6 }
- PathCubic { control1X: -11; control1Y: 51.6; control2X: 3.4; control2Y: 54.8; x: 8.6; y: 57.2 }
- PathCubic { control1X: 13.8; control1Y: 59.6; control2X: 12.6; control2Y: 56.8; x: 4.2; y: 52 }
- PathCubic { control1X: 4.2; control1Y: 52; control2X: -1.4; control2Y: 42; x: -15.4; y: 42.4 }
- PathCubic { control1X: -15.4; control1Y: 42.4; control2X: -58.2; control2Y: 46; x: -68.6; y: 58 }
- PathCubic { control1X: -68.6; control1Y: 58; control2X: -55; control2Y: 46.8; x: -44.6; y: 44 }
- PathCubic { control1X: -44.6; control1Y: 44; control2X: -22.2; control2Y: 36; x: -13.8; y: 36.8 }
- PathCubic { control1X: -13.8; control1Y: 36.8; control2X: 11; control2Y: 37.8; x: 18.6; y: 33.8 }
- PathCubic { control1X: 18.6; control1Y: 33.8; control2X: 7.4; control2Y: 38.8; x: 10.6; y: 42 }
- PathCubic { control1X: 13.8; control1Y: 45.2; control2X: 20.6; control2Y: 52.8; x: 20.6; y: 54 }
- PathCubic { control1X: 20.6; control1Y: 55.2; control2X: 44.8; control2Y: 77.3; x: 48.4; y: 81.7 }
- PathLine { x: 50.6; y: 84 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 189; y: 278 }
- PathCubic { control1X: 189; control1Y: 278; control2X: 173.5; control2Y: 241.5; x: 161; y: 232 }
- PathCubic { control1X: 161; control1Y: 232; control2X: 187; control2Y: 248; x: 190.5; y: 266 }
- PathCubic { control1X: 190.5; control1Y: 266; control2X: 190.5; control2Y: 276; x: 189; y: 278 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 236; y: 285.5 }
- PathCubic { control1X: 236; control1Y: 285.5; control2X: 209.5; control2Y: 230.5; x: 191; y: 206.5 }
- PathCubic { control1X: 191; control1Y: 206.5; control2X: 234.5; control2Y: 244; x: 239.5; y: 270.5 }
- PathLine { x: 240; y: 276 }
- PathLine { x: 237; y: 273.5 }
- PathCubic { control1X: 237; control1Y: 273.5; control2X: 236.5; control2Y: 282.5; x: 236; y: 285.5 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 292.5; y: 237 }
- PathCubic { control1X: 292.5; control1Y: 237; control2X: 230; control2Y: 177.5; x: 228.5; y: 175 }
- PathCubic { control1X: 228.5; control1Y: 175; control2X: 289; control2Y: 241; x: 292; y: 248.5 }
- PathCubic { control1X: 292; control1Y: 248.5; control2X: 290; control2Y: 239.5; x: 292.5; y: 237 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 104; y: 280.5 }
- PathCubic { control1X: 104; control1Y: 280.5; control2X: 123.5; control2Y: 228.5; x: 142.5; y: 251 }
- PathCubic { control1X: 142.5; control1Y: 251; control2X: 157.5; control2Y: 261; x: 157; y: 264 }
- PathCubic { control1X: 157; control1Y: 264; control2X: 153; control2Y: 257.5; x: 135; y: 258 }
- PathCubic { control1X: 135; control1Y: 258; control2X: 116; control2Y: 255; x: 104; y: 280.5 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 294.5; y: 153 }
- PathCubic { control1X: 294.5; control1Y: 153; control2X: 249.5; control2Y: 124.5; x: 242; y: 123 }
- PathCubic { control1X: 230.193; control1Y: 120.639; control2X: 291.5; control2Y: 152; x: 296.5; y: 162.5 }
- PathCubic { control1X: 296.5; control1Y: 162.5; control2X: 298.5; control2Y: 160; x: 294.5; y: 153 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 143.801; y: 259.601 }
- PathCubic { control1X: 143.801; control1Y: 259.601; control2X: 164.201; control2Y: 257.601; x: 171.001; y: 250.801 }
- PathLine { x: 175.401; y: 254.401 }
- PathLine { x: 193.001; y: 216.001 }
- PathLine { x: 196.601; y: 221.201 }
- PathCubic { control1X: 196.601; control1Y: 221.201; control2X: 211.001; control2Y: 206.401; x: 210.201; y: 198.401 }
- PathCubic { control1X: 209.401; control1Y: 190.401; control2X: 223.001; control2Y: 204.401; x: 223.001; y: 204.401 }
- PathCubic { control1X: 223.001; control1Y: 204.401; control2X: 222.201; control2Y: 192.801; x: 229.401; y: 199.601 }
- PathCubic { control1X: 229.401; control1Y: 199.601; control2X: 227.001; control2Y: 184.001; x: 235.401; y: 192.001 }
- PathCubic { control1X: 235.401; control1Y: 192.001; control2X: 224.864; control2Y: 161.844; x: 247.401; y: 187.601 }
- PathCubic { control1X: 253.001; control1Y: 194.001; control2X: 248.601; control2Y: 187.201; x: 248.601; y: 187.201 }
- PathCubic { control1X: 248.601; control1Y: 187.201; control2X: 222.601; control2Y: 139.201; x: 244.201; y: 153.601 }
- PathCubic { control1X: 244.201; control1Y: 153.601; control2X: 246.201; control2Y: 130.801; x: 245.001; y: 126.401 }
- PathCubic { control1X: 243.801; control1Y: 122.001; control2X: 241.801; control2Y: 99.6; x: 237.001; y: 94.4 }
- PathCubic { control1X: 232.201; control1Y: 89.2; control2X: 237.401; control2Y: 87.6; x: 243.001; y: 92.8 }
- PathCubic { control1X: 243.001; control1Y: 92.8; control2X: 231.801; control2Y: 68.8; x: 245.001; y: 80.8 }
- PathCubic { control1X: 245.001; control1Y: 80.8; control2X: 241.401; control2Y: 65.6; x: 237.001; y: 62.8 }
- PathCubic { control1X: 237.001; control1Y: 62.8; control2X: 231.401; control2Y: 45.6; x: 246.601; y: 56.4 }
- PathCubic { control1X: 246.601; control1Y: 56.4; control2X: 242.201; control2Y: 44; x: 239.001; y: 40.8 }
- PathCubic { control1X: 239.001; control1Y: 40.8; control2X: 227.401; control2Y: 13.2; x: 234.601; y: 18 }
- PathLine { x: 239.001; y: 21.6 }
- PathCubic { control1X: 239.001; control1Y: 21.6; control2X: 232.201; control2Y: 7.6; x: 238.601; y: 12 }
- PathCubic { control1X: 245.001; control1Y: 16.4; control2X: 245.001; control2Y: 16; x: 245.001; y: 16 }
- PathCubic { control1X: 245.001; control1Y: 16; control2X: 223.801; control2Y: -17.2; x: 244.201; y: 0.4 }
- PathCubic { control1X: 244.201; control1Y: 0.4; control2X: 236.042; control2Y: -13.518; x: 232.601; y: -20.4 }
- PathCubic { control1X: 232.601; control1Y: -20.4; control2X: 213.801; control2Y: -40.8; x: 228.201; y: -34.4 }
- PathLine { x: 233.001; y: -32.8 }
- PathCubic { control1X: 233.001; control1Y: -32.8; control2X: 224.201; control2Y: -42.8; x: 216.201; y: -44.4 }
- PathCubic { control1X: 208.201; control1Y: -46; control2X: 218.601; control2Y: -52.4; x: 225.001; y: -50.4 }
- PathCubic { control1X: 231.401; control1Y: -48.4; control2X: 247.001; control2Y: -40.8; x: 247.001; y: -40.8 }
- PathCubic { control1X: 247.001; control1Y: -40.8; control2X: 259.801; control2Y: -22; x: 263.801; y: -21.6 }
- PathCubic { control1X: 263.801; control1Y: -21.6; control2X: 243.801; control2Y: -29.2; x: 249.801; y: -21.2 }
- PathCubic { control1X: 249.801; control1Y: -21.2; control2X: 264.201; control2Y: -7.2; x: 257.001; y: -7.6 }
- PathCubic { control1X: 257.001; control1Y: -7.6; control2X: 251.001; control2Y: -0.4; x: 255.801; y: 8.4 }
- PathCubic { control1X: 255.801; control1Y: 8.4; control2X: 237.342; control2Y: -9.991; x: 252.201; y: 15.6 }
- PathLine { x: 259.001; y: 32 }
- PathCubic { control1X: 259.001; control1Y: 32; control2X: 234.601; control2Y: 7.2; x: 245.801; y: 29.2 }
- PathCubic { control1X: 245.801; control1Y: 29.2; control2X: 263.001; control2Y: 52.8; x: 265.001; y: 53.2 }
- PathCubic { control1X: 267.001; control1Y: 53.6; control2X: 271.401; control2Y: 62.4; x: 271.401; y: 62.4 }
- PathLine { x: 267.001; y: 60.4 }
- PathLine { x: 272.201; y: 69.2 }
- PathCubic { control1X: 272.201; control1Y: 69.2; control2X: 261.001; control2Y: 57.2; x: 267.001; y: 70.4 }
- PathLine { x: 272.601; y: 84.8 }
- PathCubic { control1X: 272.601; control1Y: 84.8; control2X: 252.201; control2Y: 62.8; x: 265.801; y: 92.4 }
- PathCubic { control1X: 265.801; control1Y: 92.4; control2X: 249.401; control2Y: 87.2; x: 258.201; y: 104.4 }
- PathCubic { control1X: 258.201; control1Y: 104.4; control2X: 256.601; control2Y: 120.401; x: 257.001; y: 125.601 }
- PathCubic { control1X: 257.401; control1Y: 130.801; control2X: 258.601; control2Y: 159.201; x: 254.201; y: 167.201 }
- PathCubic { control1X: 249.801; control1Y: 175.201; control2X: 260.201; control2Y: 194.401; x: 262.201; y: 198.401 }
- PathCubic { control1X: 264.201; control1Y: 202.401; control2X: 267.801; control2Y: 213.201; x: 259.001; y: 204.001 }
- PathCubic { control1X: 250.201; control1Y: 194.801; control2X: 254.601; control2Y: 200.401; x: 256.601; y: 209.201 }
- PathCubic { control1X: 258.601; control1Y: 218.001; control2X: 264.601; control2Y: 233.601; x: 263.801; y: 239.201 }
- PathCubic { control1X: 263.801; control1Y: 239.201; control2X: 262.601; control2Y: 240.401; x: 259.401; y: 236.801 }
- PathCubic { control1X: 259.401; control1Y: 236.801; control2X: 244.601; control2Y: 214.001; x: 246.201; y: 228.401 }
- PathCubic { control1X: 246.201; control1Y: 228.401; control2X: 245.001; control2Y: 236.401; x: 241.801; y: 245.201 }
- PathCubic { control1X: 241.801; control1Y: 245.201; control2X: 238.601; control2Y: 256.001; x: 238.601; y: 247.201 }
- PathCubic { control1X: 238.601; control1Y: 247.201; control2X: 235.401; control2Y: 230.401; x: 232.601; y: 238.001 }
- PathCubic { control1X: 229.801; control1Y: 245.601; control2X: 226.201; control2Y: 251.601; x: 223.401; y: 254.001 }
- PathCubic { control1X: 220.601; control1Y: 256.401; control2X: 215.401; control2Y: 233.601; x: 214.201; y: 244.001 }
- PathCubic { control1X: 214.201; control1Y: 244.001; control2X: 202.201; control2Y: 231.601; x: 197.401; y: 248.001 }
- PathLine { x: 185.801; y: 264.401 }
- PathCubic { control1X: 185.801; control1Y: 264.401; control2X: 185.401; control2Y: 252.001; x: 184.201; y: 258.001 }
- PathCubic { control1X: 184.201; control1Y: 258.001; control2X: 154.201; control2Y: 264.001; x: 143.801; y: 259.601 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 109.401; y: -97.2 }
- PathCubic { control1X: 109.401; control1Y: -97.2; control2X: 97.801; control2Y: -105.2; x: 93.801; y: -104.8 }
- PathCubic { control1X: 89.801; control1Y: -104.4; control2X: 121.401; control2Y: -113.6; x: 162.601; y: -86 }
- PathCubic { control1X: 162.601; control1Y: -86; control2X: 167.401; control2Y: -83.2; x: 171.001; y: -83.6 }
- PathCubic { control1X: 171.001; control1Y: -83.6; control2X: 174.201; control2Y: -81.2; x: 171.401; y: -77.6 }
- PathCubic { control1X: 171.401; control1Y: -77.6; control2X: 162.601; control2Y: -68; x: 173.801; y: -56.8 }
- PathCubic { control1X: 173.801; control1Y: -56.8; control2X: 192.201; control2Y: -50; x: 186.601; y: -58.8 }
- PathCubic { control1X: 186.601; control1Y: -58.8; control2X: 197.401; control2Y: -54.8; x: 199.801; y: -50.8 }
- PathCubic { control1X: 202.201; control1Y: -46.8; control2X: 201.001; control2Y: -50.8; x: 201.001; y: -50.8 }
- PathCubic { control1X: 201.001; control1Y: -50.8; control2X: 194.601; control2Y: -58; x: 188.601; y: -63.2 }
- PathCubic { control1X: 188.601; control1Y: -63.2; control2X: 183.401; control2Y: -65.2; x: 180.601; y: -73.6 }
- PathCubic { control1X: 177.801; control1Y: -82; control2X: 175.401; control2Y: -92; x: 179.801; y: -95.2 }
- PathCubic { control1X: 179.801; control1Y: -95.2; control2X: 175.801; control2Y: -90.8; x: 176.601; y: -94.8 }
- PathCubic { control1X: 177.401; control1Y: -98.8; control2X: 181.001; control2Y: -102.4; x: 182.601; y: -102.8 }
- PathCubic { control1X: 184.201; control1Y: -103.2; control2X: 200.601; control2Y: -119; x: 207.401; y: -119.4 }
- PathCubic { control1X: 207.401; control1Y: -119.4; control2X: 198.201; control2Y: -118; x: 195.201; y: -119 }
- PathCubic { control1X: 192.201; control1Y: -120; control2X: 165.601; control2Y: -131.4; x: 159.601; y: -132.6 }
- PathCubic { control1X: 159.601; control1Y: -132.6; control2X: 142.801; control2Y: -139.2; x: 154.801; y: -137.2 }
- PathCubic { control1X: 154.801; control1Y: -137.2; control2X: 190.601; control2Y: -133.4; x: 208.801; y: -120.2 }
- PathCubic { control1X: 208.801; control1Y: -120.2; control2X: 201.601; control2Y: -128.6; x: 183.201; y: -135.6 }
- PathCubic { control1X: 183.201; control1Y: -135.6; control2X: 161.001; control2Y: -148.2; x: 125.801; y: -143.2 }
- PathCubic { control1X: 125.801; control1Y: -143.2; control2X: 108.001; control2Y: -140; x: 100.201; y: -138.2 }
- PathCubic { control1X: 100.201; control1Y: -138.2; control2X: 97.601; control2Y: -138.8; x: 97.001; y: -139.2 }
- PathCubic { control1X: 96.401; control1Y: -139.6; control2X: 84.6; control2Y: -148.6; x: 57; y: -141.6 }
- PathCubic { control1X: 57; control1Y: -141.6; control2X: 40; control2Y: -137; x: 31.4; y: -132.2 }
- PathCubic { control1X: 31.4; control1Y: -132.2; control2X: 16.2; control2Y: -131; x: 12.6; y: -127.8 }
- PathCubic { control1X: 12.6; control1Y: -127.8; control2X: -6; control2Y: -113.2; x: -8; y: -112.4 }
- PathCubic { control1X: -10; control1Y: -111.6; control2X: -21.4; control2Y: -104; x: -22.2; y: -103.6 }
- PathCubic { control1X: -22.2; control1Y: -103.6; control2X: 2.4; control2Y: -110.2; x: 4.8; y: -112.6 }
- PathCubic { control1X: 7.2; control1Y: -115; control2X: 24.6; control2Y: -117.6; x: 27; y: -116.2 }
- PathCubic { control1X: 29.4; control1Y: -114.8; control2X: 37.8; control2Y: -115.4; x: 28.2; y: -114.8 }
- PathCubic { control1X: 28.2; control1Y: -114.8; control2X: 103.801; control2Y: -100; x: 104.601; y: -98 }
- PathCubic { control1X: 105.401; control1Y: -96; control2X: 109.401; control2Y: -97.2; x: 109.401; y: -97.2 }
- }
-
- ShapePath {
- fillColor: "#cc7226"
- strokeWidth: -1
- PathMove { x: 180.801; y: -106.4 }
- PathCubic { control1X: 180.801; control1Y: -106.4; control2X: 170.601; control2Y: -113.8; x: 168.601; y: -113.8 }
- PathCubic { control1X: 166.601; control1Y: -113.8; control2X: 154.201; control2Y: -124; x: 150.001; y: -123.6 }
- PathCubic { control1X: 145.801; control1Y: -123.2; control2X: 133.601; control2Y: -133.2; x: 106.201; y: -125 }
- PathCubic { control1X: 106.201; control1Y: -125; control2X: 105.601; control2Y: -127; x: 109.201; y: -127.8 }
- PathCubic { control1X: 109.201; control1Y: -127.8; control2X: 115.601; control2Y: -130; x: 116.001; y: -130.6 }
- PathCubic { control1X: 116.001; control1Y: -130.6; control2X: 136.201; control2Y: -134.8; x: 143.401; y: -131.2 }
- PathCubic { control1X: 143.401; control1Y: -131.2; control2X: 152.601; control2Y: -128.6; x: 158.801; y: -122.4 }
- PathCubic { control1X: 158.801; control1Y: -122.4; control2X: 170.001; control2Y: -119.2; x: 173.201; y: -120.2 }
- PathCubic { control1X: 173.201; control1Y: -120.2; control2X: 182.001; control2Y: -118; x: 182.401; y: -116.2 }
- PathCubic { control1X: 182.401; control1Y: -116.2; control2X: 188.201; control2Y: -113.2; x: 186.401; y: -110.6 }
- PathCubic { control1X: 186.401; control1Y: -110.6; control2X: 186.801; control2Y: -109; x: 180.801; y: -106.4 }
- }
-
- ShapePath {
- fillColor: "#cc7226"
- strokeWidth: -1
- PathMove { x: 168.33; y: -108.509 }
- PathCubic { control1X: 169.137; control1Y: -107.877; control2X: 170.156; control2Y: -107.779; x: 170.761; y: -106.97 }
- PathCubic { control1X: 170.995; control1Y: -106.656; control2X: 170.706; control2Y: -106.33; x: 170.391; y: -106.233 }
- PathCubic { control1X: 169.348; control1Y: -105.916; control2X: 168.292; control2Y: -106.486; x: 167.15; y: -105.898 }
- PathCubic { control1X: 166.748; control1Y: -105.691; control2X: 166.106; control2Y: -105.873; x: 165.553; y: -106.022 }
- PathCubic { control1X: 163.921; control1Y: -106.463; control2X: 162.092; control2Y: -106.488; x: 160.401; y: -105.8 }
- PathCubic { control1X: 158.416; control1Y: -106.929; control2X: 156.056; control2Y: -106.345; x: 153.975; y: -107.346 }
- PathCubic { control1X: 153.917; control1Y: -107.373; control2X: 153.695; control2Y: -107.027; x: 153.621; y: -107.054 }
- PathCubic { control1X: 150.575; control1Y: -108.199; control2X: 146.832; control2Y: -107.916; x: 144.401; y: -110.2 }
- PathCubic { control1X: 141.973; control1Y: -110.612; control2X: 139.616; control2Y: -111.074; x: 137.188; y: -111.754 }
- PathCubic { control1X: 135.37; control1Y: -112.263; control2X: 133.961; control2Y: -113.252; x: 132.341; y: -114.084 }
- PathCubic { control1X: 130.964; control1Y: -114.792; control2X: 129.507; control2Y: -115.314; x: 127.973; y: -115.686 }
- PathCubic { control1X: 126.11; control1Y: -116.138; control2X: 124.279; control2Y: -116.026; x: 122.386; y: -116.546 }
- PathCubic { control1X: 122.293; control1Y: -116.571; control2X: 122.101; control2Y: -116.227; x: 122.019; y: -116.254 }
- PathCubic { control1X: 121.695; control1Y: -116.362; control2X: 121.405; control2Y: -116.945; x: 121.234; y: -116.892 }
- PathCubic { control1X: 119.553; control1Y: -116.37; control2X: 118.065; control2Y: -117.342; x: 116.401; y: -117 }
- PathCubic { control1X: 115.223; control1Y: -118.224; control2X: 113.495; control2Y: -117.979; x: 111.949; y: -118.421 }
- PathCubic { control1X: 108.985; control1Y: -119.269; control2X: 105.831; control2Y: -117.999; x: 102.801; y: -119 }
- PathCubic { control1X: 106.914; control1Y: -120.842; control2X: 111.601; control2Y: -119.61; x: 115.663; y: -121.679 }
- PathCubic { control1X: 117.991; control1Y: -122.865; control2X: 120.653; control2Y: -121.763; x: 123.223; y: -122.523 }
- PathCubic { control1X: 123.71; control1Y: -122.667; control2X: 124.401; control2Y: -122.869; x: 124.801; y: -122.2 }
- PathCubic { control1X: 124.935; control1Y: -122.335; control2X: 125.117; control2Y: -122.574; x: 125.175; y: -122.546 }
- PathCubic { control1X: 127.625; control1Y: -121.389; control2X: 129.94; control2Y: -120.115; x: 132.422; y: -119.049 }
- PathCubic { control1X: 132.763; control1Y: -118.903; control2X: 133.295; control2Y: -119.135; x: 133.547; y: -118.933 }
- PathCubic { control1X: 135.067; control1Y: -117.717; control2X: 137.01; control2Y: -117.82; x: 138.401; y: -116.6 }
- PathCubic { control1X: 140.099; control1Y: -117.102; control2X: 141.892; control2Y: -116.722; x: 143.621; y: -117.346 }
- PathCubic { control1X: 143.698; control1Y: -117.373; control2X: 143.932; control2Y: -117.032; x: 143.965; y: -117.054 }
- PathCubic { control1X: 145.095; control1Y: -117.802; control2X: 146.25; control2Y: -117.531; x: 147.142; y: -117.227 }
- PathCubic { control1X: 147.48; control1Y: -117.112; control2X: 148.143; control2Y: -116.865; x: 148.448; y: -116.791 }
- PathCubic { control1X: 149.574; control1Y: -116.515; control2X: 150.43; control2Y: -116.035; x: 151.609; y: -115.852 }
- PathCubic { control1X: 151.723; control1Y: -115.834; control2X: 151.908; control2Y: -116.174; x: 151.98; y: -116.146 }
- PathCubic { control1X: 153.103; control1Y: -115.708; control2X: 154.145; control2Y: -115.764; x: 154.801; y: -114.6 }
- PathCubic { control1X: 154.936; control1Y: -114.735; control2X: 155.101; control2Y: -114.973; x: 155.183; y: -114.946 }
- PathCubic { control1X: 156.21; control1Y: -114.608; control2X: 156.859; control2Y: -113.853; x: 157.96; y: -113.612 }
- PathCubic { control1X: 158.445; control1Y: -113.506; control2X: 159.057; control2Y: -112.88; x: 159.633; y: -112.704 }
- PathCubic { control1X: 162.025; control1Y: -111.973; control2X: 163.868; control2Y: -110.444; x: 166.062; y: -109.549 }
- PathCubic { control1X: 166.821; control1Y: -109.239; control2X: 167.697; control2Y: -109.005; x: 168.33; y: -108.509 }
- }
-
- ShapePath {
- fillColor: "#cc7226"
- strokeWidth: -1
- PathMove { x: 91.696; y: -122.739 }
- PathCubic { control1X: 89.178; control1Y: -124.464; control2X: 86.81; control2Y: -125.57; x: 84.368; y: -127.356 }
- PathCubic { control1X: 84.187; control1Y: -127.489; control2X: 83.827; control2Y: -127.319; x: 83.625; y: -127.441 }
- PathCubic { control1X: 82.618; control1Y: -128.05; control2X: 81.73; control2Y: -128.631; x: 80.748; y: -129.327 }
- PathCubic { control1X: 80.209; control1Y: -129.709; control2X: 79.388; control2Y: -129.698; x: 78.88; y: -129.956 }
- PathCubic { control1X: 76.336; control1Y: -131.248; control2X: 73.707; control2Y: -131.806; x: 71.2; y: -133 }
- PathCubic { control1X: 71.882; control1Y: -133.638; control2X: 73.004; control2Y: -133.394; x: 73.6; y: -134.2 }
- PathCubic { control1X: 73.795; control1Y: -133.92; control2X: 74.033; control2Y: -133.636; x: 74.386; y: -133.827 }
- PathCubic { control1X: 76.064; control1Y: -134.731; control2X: 77.914; control2Y: -134.884; x: 79.59; y: -134.794 }
- PathCubic { control1X: 81.294; control1Y: -134.702; control2X: 83.014; control2Y: -134.397; x: 84.789; y: -134.125 }
- PathCubic { control1X: 85.096; control1Y: -134.078; control2X: 85.295; control2Y: -133.555; x: 85.618; y: -133.458 }
- PathCubic { control1X: 87.846; control1Y: -132.795; control2X: 90.235; control2Y: -133.32; x: 92.354; y: -132.482 }
- PathCubic { control1X: 93.945; control1Y: -131.853; control2X: 95.515; control2Y: -131.03; x: 96.754; y: -129.755 }
- PathCubic { control1X: 97.006; control1Y: -129.495; control2X: 96.681; control2Y: -129.194; x: 96.401; y: -129 }
- PathCubic { control1X: 96.789; control1Y: -129.109; control2X: 97.062; control2Y: -128.903; x: 97.173; y: -128.59 }
- PathCubic { control1X: 97.257; control1Y: -128.351; control2X: 97.257; control2Y: -128.049; x: 97.173; y: -127.81 }
- PathCubic { control1X: 97.061; control1Y: -127.498; control2X: 96.782; control2Y: -127.397; x: 96.408; y: -127.346 }
- PathCubic { control1X: 95.001; control1Y: -127.156; control2X: 96.773; control2Y: -128.536; x: 96.073; y: -128.088 }
- PathCubic { control1X: 94.8; control1Y: -127.274; control2X: 95.546; control2Y: -125.868; x: 94.801; y: -124.6 }
- PathCubic { control1X: 94.521; control1Y: -124.794; control2X: 94.291; control2Y: -125.012; x: 94.401; y: -125.4 }
- PathCubic { control1X: 94.635; control1Y: -124.878; control2X: 94.033; control2Y: -124.588; x: 93.865; y: -124.272 }
- PathCubic { control1X: 93.48; control1Y: -123.547; control2X: 92.581; control2Y: -122.132; x: 91.696; y: -122.739 }
- }
-
- ShapePath {
- fillColor: "#cc7226"
- strokeWidth: -1
- PathMove { x: 59.198; y: -115.391 }
- PathCubic { control1X: 56.044; control1Y: -116.185; control2X: 52.994; control2Y: -116.07; x: 49.978; y: -117.346 }
- PathCubic { control1X: 49.911; control1Y: -117.374; control2X: 49.688; control2Y: -117.027; x: 49.624; y: -117.054 }
- PathCubic { control1X: 48.258; control1Y: -117.648; control2X: 47.34; control2Y: -118.614; x: 46.264; y: -119.66 }
- PathCubic { control1X: 45.351; control1Y: -120.548; control2X: 43.693; control2Y: -120.161; x: 42.419; y: -120.648 }
- PathCubic { control1X: 42.095; control1Y: -120.772; control2X: 41.892; control2Y: -121.284; x: 41.591; y: -121.323 }
- PathCubic { control1X: 40.372; control1Y: -121.48; control2X: 39.445; control2Y: -122.429; x: 38.4; y: -123 }
- PathCubic { control1X: 40.736; control1Y: -123.795; control2X: 43.147; control2Y: -123.764; x: 45.609; y: -124.148 }
- PathCubic { control1X: 45.722; control1Y: -124.166; control2X: 45.867; control2Y: -123.845; x: 46; y: -123.845 }
- PathCubic { control1X: 46.136; control1Y: -123.845; control2X: 46.266; control2Y: -124.066; x: 46.4; y: -124.2 }
- PathCubic { control1X: 46.595; control1Y: -123.92; control2X: 46.897; control2Y: -123.594; x: 47.154; y: -123.848 }
- PathCubic { control1X: 47.702; control1Y: -124.388; control2X: 48.258; control2Y: -124.198; x: 48.798; y: -124.158 }
- PathCubic { control1X: 48.942; control1Y: -124.148; control2X: 49.067; control2Y: -123.845; x: 49.2; y: -123.845 }
- PathCubic { control1X: 49.336; control1Y: -123.845; control2X: 49.467; control2Y: -124.156; x: 49.6; y: -124.156 }
- PathCubic { control1X: 49.736; control1Y: -124.155; control2X: 49.867; control2Y: -123.845; x: 50; y: -123.845 }
- PathCubic { control1X: 50.136; control1Y: -123.845; control2X: 50.266; control2Y: -124.066; x: 50.4; y: -124.2 }
- PathCubic { control1X: 51.092; control1Y: -123.418; control2X: 51.977; control2Y: -123.972; x: 52.799; y: -123.793 }
- PathCubic { control1X: 53.837; control1Y: -123.566; control2X: 54.104; control2Y: -122.418; x: 55.178; y: -122.12 }
- PathCubic { control1X: 59.893; control1Y: -120.816; control2X: 64.03; control2Y: -118.671; x: 68.393; y: -116.584 }
- PathCubic { control1X: 68.7; control1Y: -116.437; control2X: 68.91; control2Y: -116.189; x: 68.8; y: -115.8 }
- PathCubic { control1X: 69.067; control1Y: -115.8; control2X: 69.38; control2Y: -115.888; x: 69.57; y: -115.756 }
- PathCubic { control1X: 70.628; control1Y: -115.024; control2X: 71.669; control2Y: -114.476; x: 72.366; y: -113.378 }
- PathCubic { control1X: 72.582; control1Y: -113.039; control2X: 72.253; control2Y: -112.632; x: 72.02; y: -112.684 }
- PathCubic { control1X: 67.591; control1Y: -113.679; control2X: 63.585; control2Y: -114.287; x: 59.198; y: -115.391 }
- }
-
- ShapePath {
- fillColor: "#cc7226"
- strokeWidth: -1
- PathMove { x: 45.338; y: -71.179 }
- PathCubic { control1X: 43.746; control1Y: -72.398; control2X: 43.162; control2Y: -74.429; x: 42.034; y: -76.221 }
- PathCubic { control1X: 41.82; control1Y: -76.561; control2X: 42.094; control2Y: -76.875; x: 42.411; y: -76.964 }
- PathCubic { control1X: 42.971; control1Y: -77.123; control2X: 43.514; control2Y: -76.645; x: 43.923; y: -76.443 }
- PathCubic { control1X: 45.668; control1Y: -75.581; control2X: 47.203; control2Y: -74.339; x: 49.2; y: -74.2 }
- PathCubic { control1X: 51.19; control1Y: -71.966; control2X: 55.45; control2Y: -71.581; x: 55.457; y: -68.2 }
- PathCubic { control1X: 55.458; control1Y: -67.341; control2X: 54.03; control2Y: -68.259; x: 53.6; y: -67.4 }
- PathCubic { control1X: 51.149; control1Y: -68.403; control2X: 48.76; control2Y: -68.3; x: 46.38; y: -69.767 }
- PathCubic { control1X: 45.763; control1Y: -70.148; control2X: 46.093; control2Y: -70.601; x: 45.338; y: -71.179 }
- }
-
- ShapePath {
- fillColor: "#cc7226"
- strokeWidth: -1
- PathMove { x: 17.8; y: -123.756 }
- PathCubic { control1X: 17.935; control1Y: -123.755; control2X: 24.966; control2Y: -123.522; x: 24.949; y: -123.408 }
- PathCubic { control1X: 24.904; control1Y: -123.099; control2X: 17.174; control2Y: -122.05; x: 16.81; y: -122.22 }
- PathCubic { control1X: 16.646; control1Y: -122.296; control2X: 9.134; control2Y: -119.866; x: 9; y: -120 }
- PathCubic { control1X: 9.268; control1Y: -120.135; control2X: 17.534; control2Y: -123.756; x: 17.8; y: -123.756 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 33.2; y: -114 }
- PathCubic { control1X: 33.2; control1Y: -114; control2X: 18.4; control2Y: -112.2; x: 14; y: -111 }
- PathCubic { control1X: 9.6; control1Y: -109.8; control2X: -9; control2Y: -102.2; x: -12; y: -100.2 }
- PathCubic { control1X: -12; control1Y: -100.2; control2X: -25.4; control2Y: -94.8; x: -42.4; y: -74.8 }
- PathCubic { control1X: -42.4; control1Y: -74.8; control2X: -34.8; control2Y: -78.2; x: -32.6; y: -81 }
- PathCubic { control1X: -32.6; control1Y: -81; control2X: -19; control2Y: -93.6; x: -19.2; y: -91 }
- PathCubic { control1X: -19.2; control1Y: -91; control2X: -7; control2Y: -99.6; x: -7.6; y: -97.4 }
- PathCubic { control1X: -7.6; control1Y: -97.4; control2X: 16.8; control2Y: -108.6; x: 14.8; y: -105.4 }
- PathCubic { control1X: 14.8; control1Y: -105.4; control2X: 36.4; control2Y: -110; x: 35.4; y: -108 }
- PathCubic { control1X: 35.4; control1Y: -108; control2X: 54.2; control2Y: -103.6; x: 51.4; y: -103.4 }
- PathCubic { control1X: 51.4; control1Y: -103.4; control2X: 45.6; control2Y: -102.2; x: 52; y: -98.6 }
- PathCubic { control1X: 52; control1Y: -98.6; control2X: 48.6; control2Y: -94.2; x: 43.2; y: -98.2 }
- PathCubic { control1X: 37.8; control1Y: -102.2; control2X: 40.8; control2Y: -100; x: 35.8; y: -99 }
- PathCubic { control1X: 35.8; control1Y: -99; control2X: 33.2; control2Y: -98.2; x: 28.6; y: -102.2 }
- PathCubic { control1X: 28.6; control1Y: -102.2; control2X: 23; control2Y: -106.8; x: 14.2; y: -103.2 }
- PathCubic { control1X: 14.2; control1Y: -103.2; control2X: -16.4; control2Y: -90.6; x: -18.4; y: -90 }
- PathCubic { control1X: -18.4; control1Y: -90; control2X: -22; control2Y: -87.2; x: -24.4; y: -83.6 }
- PathCubic { control1X: -24.4; control1Y: -83.6; control2X: -30.2; control2Y: -79.2; x: -33.2; y: -77.8 }
- PathCubic { control1X: -33.2; control1Y: -77.8; control2X: -46; control2Y: -66.2; x: -47.2; y: -64.8 }
- PathCubic { control1X: -47.2; control1Y: -64.8; control2X: -50.6; control2Y: -59.6; x: -51.4; y: -59.2 }
- PathCubic { control1X: -51.4; control1Y: -59.2; control2X: -45; control2Y: -63; x: -43; y: -65 }
- PathCubic { control1X: -43; control1Y: -65; control2X: -29; control2Y: -75; x: -23.6; y: -75.8 }
- PathCubic { control1X: -23.6; control1Y: -75.8; control2X: -19.2; control2Y: -78.8; x: -18.4; y: -80.2 }
- PathCubic { control1X: -18.4; control1Y: -80.2; control2X: -4; control2Y: -89.4; x: 0.2; y: -89.4 }
- PathCubic { control1X: 0.2; control1Y: -89.4; control2X: 9.4; control2Y: -84.2; x: 11.8; y: -91.2 }
- PathCubic { control1X: 11.8; control1Y: -91.2; control2X: 17.6; control2Y: -93; x: 23.2; y: -91.8 }
- PathCubic { control1X: 23.2; control1Y: -91.8; control2X: 26.4; control2Y: -94.4; x: 25.6; y: -96.6 }
- PathCubic { control1X: 25.6; control1Y: -96.6; control2X: 27.2; control2Y: -98.4; x: 28.2; y: -94.6 }
- PathCubic { control1X: 28.2; control1Y: -94.6; control2X: 31.6; control2Y: -91; x: 36.4; y: -93 }
- PathCubic { control1X: 36.4; control1Y: -93; control2X: 40.4; control2Y: -93.2; x: 38.4; y: -90.8 }
- PathCubic { control1X: 38.4; control1Y: -90.8; control2X: 34; control2Y: -87; x: 22.2; y: -86.8 }
- PathCubic { control1X: 22.2; control1Y: -86.8; control2X: 9.8; control2Y: -86.2; x: -6.6; y: -78.6 }
- PathCubic { control1X: -6.6; control1Y: -78.6; control2X: -36.4; control2Y: -68.2; x: -45.6; y: -57.8 }
- PathCubic { control1X: -45.6; control1Y: -57.8; control2X: -52; control2Y: -49; x: -57.4; y: -47.8 }
- PathCubic { control1X: -57.4; control1Y: -47.8; control2X: -63.2; control2Y: -47; x: -69.2; y: -39.6 }
- PathCubic { control1X: -69.2; control1Y: -39.6; control2X: -59.4; control2Y: -45.4; x: -50.4; y: -45.4 }
- PathCubic { control1X: -50.4; control1Y: -45.4; control2X: -46.4; control2Y: -47.8; x: -50.2; y: -44.2 }
- PathCubic { control1X: -50.2; control1Y: -44.2; control2X: -53.8; control2Y: -36.6; x: -52.2; y: -31.2 }
- PathCubic { control1X: -52.2; control1Y: -31.2; control2X: -52.8; control2Y: -26; x: -53.6; y: -24.4 }
- PathCubic { control1X: -53.6; control1Y: -24.4; control2X: -61.4; control2Y: -11.6; x: -61.4; y: -9.2 }
- PathCubic { control1X: -61.4; control1Y: -6.8; control2X: -60.2; control2Y: 3; x: -59.8; y: 3.6 }
- PathCubic { control1X: -59.4; control1Y: 4.2; control2X: -60.8; control2Y: 2; x: -57; y: 4.4 }
- PathCubic { control1X: -53.2; control1Y: 6.8; control2X: -50.4; control2Y: 8.4; x: -49.6; y: 11.2 }
- PathCubic { control1X: -48.8; control1Y: 14; control2X: -51.6; control2Y: 5.8; x: -51.8; y: 4 }
- PathCubic { control1X: -52; control1Y: 2.2; control2X: -56.2; control2Y: -5; x: -55.4; y: -7.4 }
- PathCubic { control1X: -55.4; control1Y: -7.4; control2X: -54.4; control2Y: -6.4; x: -53.6; y: -5 }
- PathCubic { control1X: -53.6; control1Y: -5; control2X: -54.2; control2Y: -5.6; x: -53.6; y: -9.2 }
- PathCubic { control1X: -53.6; control1Y: -9.2; control2X: -52.8; control2Y: -14.4; x: -51.4; y: -17.6 }
- PathCubic { control1X: -50; control1Y: -20.8; control2X: -48; control2Y: -24.6; x: -47.6; y: -25.4 }
- PathCubic { control1X: -47.2; control1Y: -26.2; control2X: -47.2; control2Y: -32; x: -45.8; y: -29.4 }
- PathLine { x: -42.4; y: -26.8 }
- PathCubic { control1X: -42.4; control1Y: -26.8; control2X: -45.2; control2Y: -29.4; x: -43; y: -31.6 }
- PathCubic { control1X: -43; control1Y: -31.6; control2X: -44; control2Y: -37.2; x: -42.2; y: -39.8 }
- PathCubic { control1X: -42.2; control1Y: -39.8; control2X: -35.2; control2Y: -48.2; x: -33.6; y: -49.2 }
- PathCubic { control1X: -32; control1Y: -50.2; control2X: -33.4; control2Y: -49.8; x: -33.4; y: -49.8 }
- PathCubic { control1X: -33.4; control1Y: -49.8; control2X: -27.4; control2Y: -54; x: -33.2; y: -52.4 }
- PathCubic { control1X: -33.2; control1Y: -52.4; control2X: -37.2; control2Y: -50.8; x: -40.2; y: -50.8 }
- PathCubic { control1X: -40.2; control1Y: -50.8; control2X: -47.8; control2Y: -48.8; x: -43.8; y: -53 }
- PathCubic { control1X: -39.8; control1Y: -57.2; control2X: -29.8; control2Y: -62.6; x: -26; y: -62.4 }
- PathLine { x: -25.2; y: -60.8 }
- PathLine { x: -14; y: -63.2 }
- PathLine { x: -15.2; y: -62.4 }
- PathCubic { control1X: -15.2; control1Y: -62.4; control2X: -15.4; control2Y: -62.6; x: -11.2; y: -63 }
- PathCubic { control1X: -7; control1Y: -63.4; control2X: -1.2; control2Y: -62; x: 0.2; y: -63.8 }
- PathCubic { control1X: 1.6; control1Y: -65.6; control2X: 5; control2Y: -66.6; x: 4.6; y: -65.2 }
- PathCubic { control1X: 4.2; control1Y: -63.8; control2X: 4; control2Y: -61.8; x: 4; y: -61.8 }
- PathCubic { control1X: 4; control1Y: -61.8; control2X: 9; control2Y: -67.6; x: 8.4; y: -65.4 }
- PathCubic { control1X: 7.8; control1Y: -63.2; control2X: -0.4; control2Y: -58; x: -1.8; y: -51.8 }
- PathLine { x: 8.6; y: -60 }
- PathLine { x: 12.2; y: -63 }
- PathCubic { control1X: 12.2; control1Y: -63; control2X: 15.8; control2Y: -60.8; x: 16; y: -62.4 }
- PathCubic { control1X: 16.2; control1Y: -64; control2X: 20.8; control2Y: -69.8; x: 22; y: -69.6 }
- PathCubic { control1X: 23.2; control1Y: -69.4; control2X: 25.2; control2Y: -72.2; x: 25; y: -69.6 }
- PathCubic { control1X: 24.8; control1Y: -67; control2X: 32.4; control2Y: -61.6; x: 32.4; y: -61.6 }
- PathCubic { control1X: 32.4; control1Y: -61.6; control2X: 35.6; control2Y: -63.4; x: 37; y: -62 }
- PathCubic { control1X: 38.4; control1Y: -60.6; control2X: 42.6; control2Y: -81.8; x: 42.6; y: -81.8 }
- PathLine { x: 67.6; y: -92.4 }
- PathLine { x: 111.201; y: -95.8 }
- PathLine { x: 94.201; y: -102.6 }
- PathLine { x: 33.2; y: -114 }
- }
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "#4c0000"
- strokeWidth: 2
- PathMove { x: 51.4; y: 85 }
- PathCubic { control1X: 51.4; control1Y: 85; control2X: 36.4; control2Y: 68.2; x: 28; y: 65.6 }
- PathCubic { control1X: 28; control1Y: 65.6; control2X: 14.6; control2Y: 58.8; x: -10; y: 66.6 }
- }
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "#4c0000"
- strokeWidth: 2
- PathMove { x: 24.8; y: 64.2 }
- PathCubic { control1X: 24.8; control1Y: 64.2; control2X: -0.4; control2Y: 56.2; x: -15.8; y: 60.4 }
- PathCubic { control1X: -15.8; control1Y: 60.4; control2X: -34.2; control2Y: 62.4; x: -42.6; y: 76.2 }
- }
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "#4c0000"
- strokeWidth: 2
- PathMove { x: 21.2; y: 63 }
- PathCubic { control1X: 21.2; control1Y: 63; control2X: 4.2; control2Y: 55.8; x: -10.6; y: 53.6 }
- PathCubic { control1X: -10.6; control1Y: 53.6; control2X: -27.2; control2Y: 51; x: -43.8; y: 58.2 }
- PathCubic { control1X: -43.8; control1Y: 58.2; control2X: -56; control2Y: 64.2; x: -61.4; y: 74.4 }
- }
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "#4c0000"
- strokeWidth: 2
- PathMove { x: 22.2; y: 63.4 }
- PathCubic { control1X: 22.2; control1Y: 63.4; control2X: 6.8; control2Y: 52.4; x: 5.8; y: 51 }
- PathCubic { control1X: 5.8; control1Y: 51; control2X: -1.2; control2Y: 40; x: -14.2; y: 39.6 }
- PathCubic { control1X: -14.2; control1Y: 39.6; control2X: -35.6; control2Y: 40.4; x: -52.8; y: 48.4 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 20.895; y: 54.407 }
- PathCubic { control1X: 22.437; control1Y: 55.87; control2X: 49.4; control2Y: 84.8; x: 49.4; y: 84.8 }
- PathCubic { control1X: 84.6; control1Y: 121.401; control2X: 56.6; control2Y: 87.2; x: 56.6; y: 87.2 }
- PathCubic { control1X: 49; control1Y: 82.4; control2X: 39.8; control2Y: 63.6; x: 39.8; y: 63.6 }
- PathCubic { control1X: 38.6; control1Y: 60.8; control2X: 53.8; control2Y: 70.8; x: 53.8; y: 70.8 }
- PathCubic { control1X: 57.8; control1Y: 71.6; control2X: 71.4; control2Y: 90.8; x: 71.4; y: 90.8 }
- PathCubic { control1X: 64.6; control1Y: 88.4; control2X: 69.4; control2Y: 95.6; x: 69.4; y: 95.6 }
- PathCubic { control1X: 72.2; control1Y: 97.6; control2X: 92.601; control2Y: 113.201; x: 92.601; y: 113.201 }
- PathCubic { control1X: 96.201; control1Y: 117.201; control2X: 100.201; control2Y: 118.801; x: 100.201; y: 118.801 }
- PathCubic { control1X: 114.201; control1Y: 113.601; control2X: 107.801; control2Y: 126.801; x: 107.801; y: 126.801 }
- PathCubic { control1X: 110.201; control1Y: 133.601; control2X: 115.801; control2Y: 122.001; x: 115.801; y: 122.001 }
- PathCubic { control1X: 127.001; control1Y: 105.2; control2X: 110.601; control2Y: 107.601; x: 110.601; y: 107.601 }
- PathCubic { control1X: 80.6; control1Y: 110.401; control2X: 73.8; control2Y: 94.4; x: 73.8; y: 94.4 }
- PathCubic { control1X: 71.4; control1Y: 92; control2X: 80.2; control2Y: 94.4; x: 80.2; y: 94.4 }
- PathCubic { control1X: 88.601; control1Y: 96.4; control2X: 73; control2Y: 82; x: 73; y: 82 }
- PathCubic { control1X: 75.4; control1Y: 82; control2X: 84.6; control2Y: 88.8; x: 84.6; y: 88.8 }
- PathCubic { control1X: 95.001; control1Y: 98; control2X: 97.001; control2Y: 96; x: 97.001; y: 96 }
- PathCubic { control1X: 115.001; control1Y: 87.2; control2X: 125.401; control2Y: 94.8; x: 125.401; y: 94.8 }
- PathCubic { control1X: 127.401; control1Y: 96.4; control2X: 121.801; control2Y: 103.2; x: 123.401; y: 108.401 }
- PathCubic { control1X: 125.001; control1Y: 113.601; control2X: 129.801; control2Y: 126.001; x: 129.801; y: 126.001 }
- PathCubic { control1X: 127.401; control1Y: 127.601; control2X: 127.801; control2Y: 138.401; x: 127.801; y: 138.401 }
- PathCubic { control1X: 144.601; control1Y: 161.601; control2X: 135.001; control2Y: 159.601; x: 135.001; y: 159.601 }
- PathCubic { control1X: 119.401; control1Y: 159.201; control2X: 134.201; control2Y: 166.801; x: 134.201; y: 166.801 }
- PathCubic { control1X: 137.401; control1Y: 168.801; control2X: 146.201; control2Y: 176.001; x: 146.201; y: 176.001 }
- PathCubic { control1X: 143.401; control1Y: 174.801; control2X: 141.801; control2Y: 180.001; x: 141.801; y: 180.001 }
- PathCubic { control1X: 146.601; control1Y: 184.001; control2X: 143.801; control2Y: 188.801; x: 143.801; y: 188.801 }
- PathCubic { control1X: 137.801; control1Y: 190.001; control2X: 136.601; control2Y: 194.001; x: 136.601; y: 194.001 }
- PathCubic { control1X: 143.401; control1Y: 202.001; control2X: 133.401; control2Y: 202.401; x: 133.401; y: 202.401 }
- PathCubic { control1X: 137.001; control1Y: 206.801; control2X: 132.201; control2Y: 218.801; x: 132.201; y: 218.801 }
- PathCubic { control1X: 127.401; control1Y: 218.801; control2X: 121.001; control2Y: 224.401; x: 121.001; y: 224.401 }
- PathCubic { control1X: 123.401; control1Y: 229.201; control2X: 113.001; control2Y: 234.801; x: 113.001; y: 234.801 }
- PathCubic { control1X: 104.601; control1Y: 236.401; control2X: 107.401; control2Y: 243.201; x: 107.401; y: 243.201 }
- PathCubic { control1X: 99.401; control1Y: 249.201; control2X: 97.001; control2Y: 265.201; x: 97.001; y: 265.201 }
- PathCubic { control1X: 96.201; control1Y: 275.601; control2X: 93.801; control2Y: 278.801; x: 99.001; y: 276.801 }
- PathCubic { control1X: 104.201; control1Y: 274.801; control2X: 103.401; control2Y: 262.401; x: 103.401; y: 262.401 }
- PathCubic { control1X: 98.601; control1Y: 246.801; control2X: 141.401; control2Y: 230.801; x: 141.401; y: 230.801 }
- PathCubic { control1X: 145.401; control1Y: 229.201; control2X: 146.201; control2Y: 224.001; x: 146.201; y: 224.001 }
- PathCubic { control1X: 148.201; control1Y: 224.401; control2X: 157.001; control2Y: 232.001; x: 157.001; y: 232.001 }
- PathCubic { control1X: 164.601; control1Y: 243.201; control2X: 165.001; control2Y: 234.001; x: 165.001; y: 234.001 }
- PathCubic { control1X: 166.201; control1Y: 230.401; control2X: 164.601; control2Y: 224.401; x: 164.601; y: 224.401 }
- PathCubic { control1X: 170.601; control1Y: 202.801; control2X: 156.601; control2Y: 196.401; x: 156.601; y: 196.401 }
- PathCubic { control1X: 146.601; control1Y: 162.801; control2X: 160.601; control2Y: 171.201; x: 160.601; y: 171.201 }
- PathCubic { control1X: 163.401; control1Y: 176.801; control2X: 174.201; control2Y: 182.001; x: 174.201; y: 182.001 }
- PathLine { x: 177.801; y: 179.601 }
- PathCubic { control1X: 176.201; control1Y: 174.801; control2X: 184.601; control2Y: 168.801; x: 184.601; y: 168.801 }
- PathCubic { control1X: 187.401; control1Y: 175.201; control2X: 193.401; control2Y: 167.201; x: 193.401; y: 167.201 }
- PathCubic { control1X: 197.001; control1Y: 142.801; control2X: 209.401; control2Y: 157.201; x: 209.401; y: 157.201 }
- PathCubic { control1X: 213.401; control1Y: 158.401; control2X: 214.601; control2Y: 151.601; x: 214.601; y: 151.601 }
- PathCubic { control1X: 218.201; control1Y: 141.201; control2X: 214.601; control2Y: 127.601; x: 214.601; y: 127.601 }
- PathCubic { control1X: 218.201; control1Y: 127.201; control2X: 227.801; control2Y: 133.201; x: 227.801; y: 133.201 }
- PathCubic { control1X: 230.601; control1Y: 129.601; control2X: 221.401; control2Y: 112.801; x: 225.401; y: 115.201 }
- PathCubic { control1X: 229.401; control1Y: 117.601; control2X: 233.801; control2Y: 119.201; x: 233.801; y: 119.201 }
- PathCubic { control1X: 234.601; control1Y: 117.201; control2X: 224.601; control2Y: 104.801; x: 224.601; y: 104.801 }
- PathCubic { control1X: 220.201; control1Y: 102; control2X: 215.001; control2Y: 81.6; x: 215.001; y: 81.6 }
- PathCubic { control1X: 222.201; control1Y: 85.2; control2X: 212.201; control2Y: 70; x: 212.201; y: 70 }
- PathCubic { control1X: 212.201; control1Y: 66.8; control2X: 218.201; control2Y: 55.6; x: 218.201; y: 55.6 }
- PathCubic { control1X: 217.401; control1Y: 48.8; control2X: 218.201; control2Y: 49.2; x: 218.201; y: 49.2 }
- PathCubic { control1X: 221.001; control1Y: 50.4; control2X: 229.001; control2Y: 52; x: 222.201; y: 45.6 }
- PathCubic { control1X: 215.401; control1Y: 39.2; control2X: 223.001; control2Y: 34.4; x: 223.001; y: 34.4 }
- PathCubic { control1X: 227.401; control1Y: 31.6; control2X: 213.801; control2Y: 32; x: 213.801; y: 32 }
- PathCubic { control1X: 208.601; control1Y: 27.6; control2X: 209.001; control2Y: 23.6; x: 209.001; y: 23.6 }
- PathCubic { control1X: 217.001; control1Y: 25.6; control2X: 202.601; control2Y: 11.2; x: 200.201; y: 7.6 }
- PathCubic { control1X: 197.801; control1Y: 4; control2X: 207.401; control2Y: -1.2; x: 207.401; y: -1.2 }
- PathCubic { control1X: 220.601; control1Y: -4.8; control2X: 209.001; control2Y: -8; x: 209.001; y: -8 }
- PathCubic { control1X: 189.401; control1Y: -7.6; control2X: 200.201; control2Y: -18.4; x: 200.201; y: -18.4 }
- PathCubic { control1X: 206.201; control1Y: -18; control2X: 204.601; control2Y: -20.4; x: 204.601; y: -20.4 }
- PathCubic { control1X: 199.401; control1Y: -21.6; control2X: 189.801; control2Y: -28; x: 189.801; y: -28 }
- PathCubic { control1X: 185.801; control1Y: -31.6; control2X: 189.401; control2Y: -30.8; x: 189.401; y: -30.8 }
- PathCubic { control1X: 206.201; control1Y: -29.6; control2X: 177.401; control2Y: -40.8; x: 177.401; y: -40.8 }
- PathCubic { control1X: 185.401; control1Y: -40.8; control2X: 167.401; control2Y: -51.2; x: 167.401; y: -51.2 }
- PathCubic { control1X: 165.401; control1Y: -52.8; control2X: 162.201; control2Y: -60.4; x: 162.201; y: -60.4 }
- PathCubic { control1X: 156.201; control1Y: -65.6; control2X: 151.401; control2Y: -72.4; x: 151.401; y: -72.4 }
- PathCubic { control1X: 151.001; control1Y: -76.8; control2X: 146.201; control2Y: -81.6; x: 146.201; y: -81.6 }
- PathCubic { control1X: 134.601; control1Y: -95.2; control2X: 129.001; control2Y: -94.8; x: 129.001; y: -94.8 }
- PathCubic { control1X: 114.201; control1Y: -98.4; control2X: 109.001; control2Y: -97.6; x: 109.001; y: -97.6 }
- PathLine { x: 56.2; y: -93.2 }
- PathCubic { control1X: 29.8; control1Y: -80.4; control2X: 37.6; control2Y: -59.4; x: 37.6; y: -59.4 }
- PathCubic { control1X: 44; control1Y: -51; control2X: 53.2; control2Y: -54.8; x: 53.2; y: -54.8 }
- PathCubic { control1X: 57.8; control1Y: -61; control2X: 69.4; control2Y: -58.8; x: 69.4; y: -58.8 }
- PathCubic { control1X: 89.801; control1Y: -55.6; control2X: 87.201; control2Y: -59.2; x: 87.201; y: -59.2 }
- PathCubic { control1X: 84.801; control1Y: -63.8; control2X: 68.6; control2Y: -70; x: 68.4; y: -70.6 }
- PathCubic { control1X: 68.2; control1Y: -71.2; control2X: 59.4; control2Y: -74.6; x: 59.4; y: -74.6 }
- PathCubic { control1X: 56.4; control1Y: -75.8; control2X: 52; control2Y: -85; x: 52; y: -85 }
- PathCubic { control1X: 48.8; control1Y: -88.4; control2X: 64.6; control2Y: -82.6; x: 64.6; y: -82.6 }
- PathCubic { control1X: 63.4; control1Y: -81.6; control2X: 70.8; control2Y: -77.6; x: 70.8; y: -77.6 }
- PathCubic { control1X: 88.201; control1Y: -78.6; control2X: 98.801; control2Y: -67.8; x: 98.801; y: -67.8 }
- PathCubic { control1X: 109.601; control1Y: -51.2; control2X: 109.801; control2Y: -59.4; x: 109.801; y: -59.4 }
- PathCubic { control1X: 112.601; control1Y: -68.8; control2X: 100.801; control2Y: -90; x: 100.801; y: -90 }
- PathCubic { control1X: 101.201; control1Y: -92; control2X: 109.401; control2Y: -85.4; x: 109.401; y: -85.4 }
- PathCubic { control1X: 110.801; control1Y: -87.4; control2X: 111.601; control2Y: -81.6; x: 111.601; y: -81.6 }
- PathCubic { control1X: 111.801; control1Y: -79.2; control2X: 115.601; control2Y: -71.2; x: 115.601; y: -71.2 }
- PathCubic { control1X: 118.401; control1Y: -58.2; control2X: 122.001; control2Y: -65.6; x: 122.001; y: -65.6 }
- PathLine { x: 126.601; y: -56.2 }
- PathCubic { control1X: 128.001; control1Y: -53.6; control2X: 122.001; control2Y: -46; x: 122.001; y: -46 }
- PathCubic { control1X: 121.801; control1Y: -43.2; control2X: 122.601; control2Y: -43.4; x: 117.001; y: -35.8 }
- PathCubic { control1X: 111.401; control1Y: -28.2; control2X: 114.801; control2Y: -23.8; x: 114.801; y: -23.8 }
- PathCubic { control1X: 113.401; control1Y: -17.2; control2X: 122.201; control2Y: -17.6; x: 122.201; y: -17.6 }
- PathCubic { control1X: 124.801; control1Y: -15.4; control2X: 128.201; control2Y: -15.4; x: 128.201; y: -15.4 }
- PathCubic { control1X: 130.001; control1Y: -13.4; control2X: 132.401; control2Y: -14; x: 132.401; y: -14 }
- PathCubic { control1X: 134.001; control1Y: -17.8; control2X: 140.201; control2Y: -15.8; x: 140.201; y: -15.8 }
- PathCubic { control1X: 141.601; control1Y: -18.2; control2X: 149.801; control2Y: -18.6; x: 149.801; y: -18.6 }
- PathCubic { control1X: 150.801; control1Y: -21.2; control2X: 151.201; control2Y: -22.8; x: 154.601; y: -23.4 }
- PathCubic { control1X: 158.001; control1Y: -24; control2X: 133.401; control2Y: -67; x: 133.401; y: -67 }
- PathCubic { control1X: 139.801; control1Y: -67.8; control2X: 131.601; control2Y: -80.2; x: 131.601; y: -80.2 }
- PathCubic { control1X: 129.401; control1Y: -86.8; control2X: 140.801; control2Y: -72.2; x: 143.001; y: -70.8 }
- PathCubic { control1X: 145.201; control1Y: -69.4; control2X: 146.201; control2Y: -67.2; x: 144.601; y: -67.4 }
- PathCubic { control1X: 143.001; control1Y: -67.6; control2X: 141.201; control2Y: -65.4; x: 142.601; y: -65.2 }
- PathCubic { control1X: 144.001; control1Y: -65; control2X: 157.001; control2Y: -50; x: 160.401; y: -39.8 }
- PathCubic { control1X: 163.801; control1Y: -29.6; control2X: 169.801; control2Y: -25.6; x: 176.001; y: -19.6 }
- PathCubic { control1X: 182.201; control1Y: -13.6; control2X: 181.401; control2Y: 10.6; x: 181.401; y: 10.6 }
- PathCubic { control1X: 181.001; control1Y: 19.4; control2X: 187.001; control2Y: 30; x: 187.001; y: 30 }
- PathCubic { control1X: 189.001; control1Y: 33.8; control2X: 184.801; control2Y: 52; x: 184.801; y: 52 }
- PathCubic { control1X: 182.801; control1Y: 54.2; control2X: 184.201; control2Y: 55; x: 184.201; y: 55 }
- PathCubic { control1X: 185.201; control1Y: 56.2; control2X: 192.001; control2Y: 69.4; x: 192.001; y: 69.4 }
- PathCubic { control1X: 190.201; control1Y: 69.2; control2X: 193.801; control2Y: 72.8; x: 193.801; y: 72.8 }
- PathCubic { control1X: 199.001; control1Y: 78.8; control2X: 192.601; control2Y: 75.8; x: 192.601; y: 75.8 }
- PathCubic { control1X: 186.601; control1Y: 74.2; control2X: 193.601; control2Y: 84; x: 193.601; y: 84 }
- PathCubic { control1X: 194.801; control1Y: 85.8; control2X: 185.801; control2Y: 81.2; x: 185.801; y: 81.2 }
- PathCubic { control1X: 176.601; control1Y: 80.6; control2X: 188.201; control2Y: 87.8; x: 188.201; y: 87.8 }
- PathCubic { control1X: 196.801; control1Y: 95; control2X: 185.401; control2Y: 90.6; x: 185.401; y: 90.6 }
- PathCubic { control1X: 180.801; control1Y: 88.8; control2X: 184.001; control2Y: 95.6; x: 184.001; y: 95.6 }
- PathCubic { control1X: 187.201; control1Y: 97.2; control2X: 204.401; control2Y: 104.2; x: 204.401; y: 104.2 }
- PathCubic { control1X: 204.801; control1Y: 108.001; control2X: 201.801; control2Y: 113.001; x: 201.801; y: 113.001 }
- PathCubic { control1X: 202.201; control1Y: 117.001; control2X: 200.001; control2Y: 120.401; x: 200.001; y: 120.401 }
- PathCubic { control1X: 198.801; control1Y: 128.601; control2X: 198.201; control2Y: 129.401; x: 198.201; y: 129.401 }
- PathCubic { control1X: 194.001; control1Y: 129.601; control2X: 186.601; control2Y: 143.401; x: 186.601; y: 143.401 }
- PathCubic { control1X: 184.801; control1Y: 146.001; control2X: 174.601; control2Y: 158.001; x: 174.601; y: 158.001 }
- PathCubic { control1X: 172.601; control1Y: 165.001; control2X: 154.601; control2Y: 157.801; x: 154.601; y: 157.801 }
- PathCubic { control1X: 148.001; control1Y: 161.201; control2X: 150.001; control2Y: 157.801; x: 150.001; y: 157.801 }
- PathCubic { control1X: 149.601; control1Y: 155.601; control2X: 154.401; control2Y: 149.601; x: 154.401; y: 149.601 }
- PathCubic { control1X: 161.401; control1Y: 147.001; control2X: 158.801; control2Y: 136.201; x: 158.801; y: 136.201 }
- PathCubic { control1X: 162.801; control1Y: 134.801; control2X: 151.601; control2Y: 132.001; x: 151.801; y: 130.801 }
- PathCubic { control1X: 152.001; control1Y: 129.601; control2X: 157.801; control2Y: 128.201; x: 157.801; y: 128.201 }
- PathCubic { control1X: 165.801; control1Y: 126.201; control2X: 161.401; control2Y: 123.801; x: 161.401; y: 123.801 }
- PathCubic { control1X: 160.801; control1Y: 119.801; control2X: 163.801; control2Y: 114.201; x: 163.801; y: 114.201 }
- PathCubic { control1X: 175.401; control1Y: 113.401; control2X: 163.801; control2Y: 97.2; x: 163.801; y: 97.2 }
- PathCubic { control1X: 153.001; control1Y: 89.6; control2X: 152.001; control2Y: 83.8; x: 152.001; y: 83.8 }
- PathCubic { control1X: 164.601; control1Y: 75.6; control2X: 156.401; control2Y: 63.2; x: 156.601; y: 59.6 }
- PathCubic { control1X: 156.801; control1Y: 56; control2X: 158.001; control2Y: 34.4; x: 158.001; y: 34.4 }
- PathCubic { control1X: 156.001; control1Y: 28.2; control2X: 153.001; control2Y: 14.6; x: 153.001; y: 14.6 }
- PathCubic { control1X: 155.201; control1Y: 9.4; control2X: 162.601; control2Y: -3.2; x: 162.601; y: -3.2 }
- PathCubic { control1X: 165.401; control1Y: -7.4; control2X: 174.201; control2Y: -12.2; x: 172.001; y: -15.2 }
- PathCubic { control1X: 169.801; control1Y: -18.2; control2X: 162.001; control2Y: -16.4; x: 162.001; y: -16.4 }
- PathCubic { control1X: 154.201; control1Y: -17.8; control2X: 154.801; control2Y: -12.6; x: 154.801; y: -12.6 }
- PathCubic { control1X: 153.201; control1Y: -11.6; control2X: 152.401; control2Y: -6.6; x: 152.401; y: -6.6 }
- PathCubic { control1X: 151.68; control1Y: 1.333; control2X: 142.801; control2Y: 7.6; x: 142.801; y: 7.6 }
- PathCubic { control1X: 131.601; control1Y: 13.8; control2X: 140.801; control2Y: 17.8; x: 140.801; y: 17.8 }
- PathCubic { control1X: 146.801; control1Y: 24.4; control2X: 137.001; control2Y: 24.6; x: 137.001; y: 24.6 }
- PathCubic { control1X: 126.001; control1Y: 22.8; control2X: 134.201; control2Y: 33; x: 134.201; y: 33 }
- PathCubic { control1X: 145.001; control1Y: 45.8; control2X: 142.001; control2Y: 48.6; x: 142.001; y: 48.6 }
- PathCubic { control1X: 131.801; control1Y: 49.6; control2X: 144.401; control2Y: 58.8; x: 144.401; y: 58.8 }
- PathCubic { control1X: 144.401; control1Y: 58.8; control2X: 143.601; control2Y: 56.8; x: 143.801; y: 58.6 }
- PathCubic { control1X: 144.001; control1Y: 60.4; control2X: 147.001; control2Y: 64.6; x: 147.801; y: 66.6 }
- PathCubic { control1X: 148.601; control1Y: 68.6; control2X: 144.601; control2Y: 68.8; x: 144.601; y: 68.8 }
- PathCubic { control1X: 145.201; control1Y: 78.4; control2X: 129.801; control2Y: 74.2; x: 129.801; y: 74.2 }
- PathCubic { control1X: 129.801; control1Y: 74.2; control2X: 129.801; control2Y: 74.2; x: 128.201; y: 74.4 }
- PathCubic { control1X: 126.601; control1Y: 74.6; control2X: 115.401; control2Y: 73.8; x: 109.601; y: 71.6 }
- PathCubic { control1X: 103.801; control1Y: 69.4; control2X: 97.001; control2Y: 69.4; x: 97.001; y: 69.4 }
- PathCubic { control1X: 97.001; control1Y: 69.4; control2X: 93.001; control2Y: 71.2; x: 85.4; y: 71 }
- PathCubic { control1X: 77.8; control1Y: 70.8; control2X: 69.8; control2Y: 73.6; x: 69.8; y: 73.6 }
- PathCubic { control1X: 65.4; control1Y: 73.2; control2X: 74; control2Y: 68.8; x: 74.2; y: 69 }
- PathCubic { control1X: 74.4; control1Y: 69.2; control2X: 80; control2Y: 63.6; x: 72; y: 64.2 }
- PathCubic { control1X: 50.203; control1Y: 65.835; control2X: 39.4; control2Y: 55.6; x: 39.4; y: 55.6 }
- PathCubic { control1X: 37.4; control1Y: 54.2; control2X: 34.8; control2Y: 51.4; x: 34.8; y: 51.4 }
- PathCubic { control1X: 24.8; control1Y: 49.4; control2X: 36.2; control2Y: 63.8; x: 36.2; y: 63.8 }
- PathCubic { control1X: 37.4; control1Y: 65.2; control2X: 36; control2Y: 66.2; x: 36; y: 66.2 }
- PathCubic { control1X: 35.2; control1Y: 64.6; control2X: 27.4; control2Y: 59.2; x: 27.4; y: 59.2 }
- PathCubic { control1X: 24.589; control1Y: 58.227; control2X: 23.226; control2Y: 56.893; x: 20.895; y: 54.407 }
- }
-
- ShapePath {
- fillColor: "#4c0000"
- strokeWidth: -1
- PathMove { x: -3; y: 42.8 }
- PathCubic { control1X: -3; control1Y: 42.8; control2X: 8.6; control2Y: 48.4; x: 11.2; y: 51.2 }
- PathCubic { control1X: 13.8; control1Y: 54; control2X: 27.8; control2Y: 65.4; x: 27.8; y: 65.4 }
- PathCubic { control1X: 27.8; control1Y: 65.4; control2X: 22.4; control2Y: 63.4; x: 19.8; y: 61.6 }
- PathCubic { control1X: 17.2; control1Y: 59.8; control2X: 6.4; control2Y: 51.6; x: 6.4; y: 51.6 }
- PathCubic { control1X: 6.4; control1Y: 51.6; control2X: 2.6; control2Y: 45.6; x: -3; y: 42.8 }
- }
-
- ShapePath {
- fillColor: "#99cc32"
- strokeWidth: -1
- PathMove { x: -61.009; y: 11.603 }
- PathCubic { control1X: -60.672; control1Y: 11.455; control2X: -61.196; control2Y: 8.743; x: -61.4; y: 8.2 }
- PathCubic { control1X: -62.422; control1Y: 5.474; control2X: -71.4; control2Y: 4; x: -71.4; y: 4 }
- PathCubic { control1X: -71.627; control1Y: 5.365; control2X: -71.682; control2Y: 6.961; x: -71.576; y: 8.599 }
- PathCubic { control1X: -71.576; control1Y: 8.599; control2X: -66.708; control2Y: 14.118; x: -61.009; y: 11.603 }
- }
-
- ShapePath {
- fillColor: "#659900"
- strokeWidth: -1
- PathMove { x: -61.009; y: 11.403 }
- PathCubic { control1X: -61.458; control1Y: 11.561; control2X: -61.024; control2Y: 8.669; x: -61.2; y: 8.2 }
- PathCubic { control1X: -62.222; control1Y: 5.474; control2X: -71.4; control2Y: 3.9; x: -71.4; y: 3.9 }
- PathCubic { control1X: -71.627; control1Y: 5.265; control2X: -71.682; control2Y: 6.861; x: -71.576; y: 8.499 }
- PathCubic { control1X: -71.576; control1Y: 8.499; control2X: -67.308; control2Y: 13.618; x: -61.009; y: 11.403 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -65.4; y: 11.546 }
- PathCubic { control1X: -66.025; control1Y: 11.546; control2X: -66.531; control2Y: 10.406; x: -66.531; y: 9 }
- PathCubic { control1X: -66.531; control1Y: 7.595; control2X: -66.025; control2Y: 6.455; x: -65.4; y: 6.455 }
- PathCubic { control1X: -64.775; control1Y: 6.455; control2X: -64.268; control2Y: 7.595; x: -64.268; y: 9 }
- PathCubic { control1X: -64.268; control1Y: 10.406; control2X: -64.775; control2Y: 11.546; x: -65.4; y: 11.546 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -65.4; y: 9 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -111; y: 109.601 }
- PathCubic { control1X: -111; control1Y: 109.601; control2X: -116.6; control2Y: 119.601; x: -91.8; y: 113.601 }
- PathCubic { control1X: -91.8; control1Y: 113.601; control2X: -77.8; control2Y: 112.401; x: -75.4; y: 110.001 }
- PathCubic { control1X: -74.2; control1Y: 110.801; control2X: -65.834; control2Y: 113.734; x: -63; y: 114.401 }
- PathCubic { control1X: -56.2; control1Y: 116.001; control2X: -47.8; control2Y: 106; x: -47.8; y: 106 }
- PathCubic { control1X: -47.8; control1Y: 106; control2X: -43.2; control2Y: 95.5; x: -40.4; y: 95.5 }
- PathCubic { control1X: -37.6; control1Y: 95.5; control2X: -40.8; control2Y: 97.1; x: -40.8; y: 97.1 }
- PathCubic { control1X: -40.8; control1Y: 97.1; control2X: -47.4; control2Y: 107.201; x: -47; y: 108.801 }
- PathCubic { control1X: -47; control1Y: 108.801; control2X: -52.2; control2Y: 128.801; x: -68.2; y: 129.601 }
- PathCubic { control1X: -68.2; control1Y: 129.601; control2X: -84.35; control2Y: 130.551; x: -83; y: 136.401 }
- PathCubic { control1X: -83; control1Y: 136.401; control2X: -74.2; control2Y: 134.001; x: -71.8; y: 136.401 }
- PathCubic { control1X: -71.8; control1Y: 136.401; control2X: -61; control2Y: 136.001; x: -69; y: 142.401 }
- PathLine { x: -75.8; y: 154.001 }
- PathCubic { control1X: -75.8; control1Y: 154.001; control2X: -75.66; control2Y: 157.919; x: -85.8; y: 154.401 }
- PathCubic { control1X: -95.6; control1Y: 151.001; control2X: -105.9; control2Y: 138.101; x: -105.9; y: 138.101 }
- PathCubic { control1X: -105.9; control1Y: 138.101; control2X: -121.85; control2Y: 123.551; x: -111; y: 109.601 }
- }
-
- ShapePath {
- fillColor: "#e59999"
- strokeWidth: -1
- PathMove { x: -112.2; y: 113.601 }
- PathCubic { control1X: -112.2; control1Y: 113.601; control2X: -114.2; control2Y: 123.201; x: -77.4; y: 112.801 }
- PathCubic { control1X: -77.4; control1Y: 112.801; control2X: -73; control2Y: 112.801; x: -70.6; y: 113.601 }
- PathCubic { control1X: -68.2; control1Y: 114.401; control2X: -56.2; control2Y: 117.201; x: -54.2; y: 116.001 }
- PathCubic { control1X: -54.2; control1Y: 116.001; control2X: -61.4; control2Y: 129.601; x: -73; y: 128.001 }
- PathCubic { control1X: -73; control1Y: 128.001; control2X: -86.2; control2Y: 129.601; x: -85.8; y: 134.401 }
- PathCubic { control1X: -85.8; control1Y: 134.401; control2X: -81.8; control2Y: 141.601; x: -77; y: 144.001 }
- PathCubic { control1X: -77; control1Y: 144.001; control2X: -74.2; control2Y: 146.401; x: -74.6; y: 149.601 }
- PathCubic { control1X: -75; control1Y: 152.801; control2X: -77.8; control2Y: 154.401; x: -79.8; y: 155.201 }
- PathCubic { control1X: -81.8; control1Y: 156.001; control2X: -85; control2Y: 152.801; x: -86.6; y: 152.801 }
- PathCubic { control1X: -88.2; control1Y: 152.801; control2X: -96.6; control2Y: 146.401; x: -101; y: 141.601 }
- PathCubic { control1X: -105.4; control1Y: 136.801; control2X: -113.8; control2Y: 124.801; x: -113.4; y: 122.001 }
- PathCubic { control1X: -113; control1Y: 119.201; control2X: -112.2; control2Y: 113.601; x: -112.2; y: 113.601 }
- }
-
- ShapePath {
- fillColor: "#b26565"
- strokeWidth: -1
- PathMove { x: -109; y: 131.051 }
- PathCubic { control1X: -106.4; control1Y: 135.001; control2X: -103.2; control2Y: 139.201; x: -101; y: 141.601 }
- PathCubic { control1X: -96.6; control1Y: 146.401; control2X: -88.2; control2Y: 152.801; x: -86.6; y: 152.801 }
- PathCubic { control1X: -85; control1Y: 152.801; control2X: -81.8; control2Y: 156.001; x: -79.8; y: 155.201 }
- PathCubic { control1X: -77.8; control1Y: 154.401; control2X: -75; control2Y: 152.801; x: -74.6; y: 149.601 }
- PathCubic { control1X: -74.2; control1Y: 146.401; control2X: -77; control2Y: 144.001; x: -77; y: 144.001 }
- PathCubic { control1X: -80.066; control1Y: 142.468; control2X: -82.806; control2Y: 138.976; x: -84.385; y: 136.653 }
- PathCubic { control1X: -84.385; control1Y: 136.653; control2X: -84.2; control2Y: 139.201; x: -89.4; y: 138.401 }
- PathCubic { control1X: -94.6; control1Y: 137.601; control2X: -99.8; control2Y: 134.801; x: -101.4; y: 131.601 }
- PathCubic { control1X: -103; control1Y: 128.401; control2X: -105.4; control2Y: 126.001; x: -103.8; y: 129.601 }
- PathCubic { control1X: -102.2; control1Y: 133.201; control2X: -99.8; control2Y: 136.801; x: -98.2; y: 137.201 }
- PathCubic { control1X: -96.6; control1Y: 137.601; control2X: -97; control2Y: 138.801; x: -99.4; y: 138.401 }
- PathCubic { control1X: -101.8; control1Y: 138.001; control2X: -104.6; control2Y: 137.601; x: -109; y: 132.401 }
- }
-
- ShapePath {
- fillColor: "#992600"
- strokeWidth: -1
- PathMove { x: -111.6; y: 110.001 }
- PathCubic { control1X: -111.6; control1Y: 110.001; control2X: -109.8; control2Y: 96.4; x: -108.6; y: 92.4 }
- PathCubic { control1X: -108.6; control1Y: 92.4; control2X: -109.4; control2Y: 85.6; x: -107; y: 81.4 }
- PathCubic { control1X: -104.6; control1Y: 77.2; control2X: -102.6; control2Y: 71; x: -99.6; y: 65.6 }
- PathCubic { control1X: -96.6; control1Y: 60.2; control2X: -96.4; control2Y: 56.2; x: -92.4; y: 54.6 }
- PathCubic { control1X: -88.4; control1Y: 53; control2X: -82.4; control2Y: 44.4; x: -79.6; y: 43.4 }
- PathCubic { control1X: -76.8; control1Y: 42.4; control2X: -77; control2Y: 43.2; x: -77; y: 43.2 }
- PathCubic { control1X: -77; control1Y: 43.2; control2X: -70.2; control2Y: 28.4; x: -56.6; y: 32.4 }
- PathCubic { control1X: -56.6; control1Y: 32.4; control2X: -72.8; control2Y: 29.6; x: -57; y: 20.2 }
- PathCubic { control1X: -57; control1Y: 20.2; control2X: -61.8; control2Y: 21.3; x: -58.5; y: 14.3 }
- PathCubic { control1X: -56.299; control1Y: 9.632; control2X: -56.8; control2Y: 16.4; x: -67.8; y: 28.2 }
- PathCubic { control1X: -67.8; control1Y: 28.2; control2X: -72.8; control2Y: 36.8; x: -78; y: 39.8 }
- PathCubic { control1X: -83.2; control1Y: 42.8; control2X: -95.2; control2Y: 49.8; x: -96.4; y: 53.6 }
- PathCubic { control1X: -97.6; control1Y: 57.4; control2X: -100.8; control2Y: 63.2; x: -102.8; y: 64.8 }
- PathCubic { control1X: -104.8; control1Y: 66.4; control2X: -107.6; control2Y: 70.6; x: -108; y: 74 }
- PathCubic { control1X: -108; control1Y: 74; control2X: -109.2; control2Y: 78; x: -110.6; y: 79.2 }
- PathCubic { control1X: -112; control1Y: 80.4; control2X: -112.2; control2Y: 83.6; x: -112.2; y: 85.6 }
- PathCubic { control1X: -112.2; control1Y: 87.6; control2X: -114.2; control2Y: 90.4; x: -114; y: 92.8 }
- PathCubic { control1X: -114; control1Y: 92.8; control2X: -113.2; control2Y: 111.801; x: -113.6; y: 113.801 }
- PathLine { x: -111.6; y: 110.001 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeWidth: -1
- PathMove { x: -120.2; y: 114.601 }
- PathCubic { control1X: -120.2; control1Y: 114.601; control2X: -122.2; control2Y: 113.201; x: -126.6; y: 119.201 }
- PathCubic { control1X: -126.6; control1Y: 119.201; control2X: -119.3; control2Y: 152.201; x: -119.3; y: 153.601 }
- PathCubic { control1X: -119.3; control1Y: 153.601; control2X: -118.2; control2Y: 151.501; x: -119.5; y: 144.301 }
- PathCubic { control1X: -120.8; control1Y: 137.101; control2X: -121.7; control2Y: 124.401; x: -121.7; y: 124.401 }
- PathLine { x: -120.2; y: 114.601 }
- }
-
- ShapePath {
- fillColor: "#992600"
- strokeWidth: -1
- PathMove { x: -98.6; y: 54 }
- PathCubic { control1X: -98.6; control1Y: 54; control2X: -116.2; control2Y: 57.2; x: -115.8; y: 86.4 }
- PathLine { x: -116.6; y: 111.201 }
- PathCubic { control1X: -116.6; control1Y: 111.201; control2X: -117.8; control2Y: 85.6; x: -119; y: 84 }
- PathCubic { control1X: -120.2; control1Y: 82.4; control2X: -116.2; control2Y: 71.2; x: -119.4; y: 77.2 }
- PathCubic { control1X: -119.4; control1Y: 77.2; control2X: -133.4; control2Y: 91.2; x: -125.4; y: 112.401 }
- PathCubic { control1X: -125.4; control1Y: 112.401; control2X: -123.9; control2Y: 115.701; x: -126.9; y: 111.101 }
- PathCubic { control1X: -126.9; control1Y: 111.101; control2X: -131.5; control2Y: 98.5; x: -130.4; y: 92.1 }
- PathCubic { control1X: -130.4; control1Y: 92.1; control2X: -130.2; control2Y: 89.9; x: -128.3; y: 87.1 }
- PathCubic { control1X: -128.3; control1Y: 87.1; control2X: -119.7; control2Y: 75.4; x: -117; y: 73.1 }
- PathCubic { control1X: -117; control1Y: 73.1; control2X: -115.2; control2Y: 58.7; x: -99.8; y: 53.5 }
- PathCubic { control1X: -99.8; control1Y: 53.5; control2X: -94.1; control2Y: 51.2; x: -98.6; y: 54 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 40.8; y: -12.2 }
- PathCubic { control1X: 41.46; control1Y: -12.554; control2X: 41.451; control2Y: -13.524; x: 42.031; y: -13.697 }
- PathCubic { control1X: 43.18; control1Y: -14.041; control2X: 43.344; control2Y: -15.108; x: 43.862; y: -15.892 }
- PathCubic { control1X: 44.735; control1Y: -17.211; control2X: 44.928; control2Y: -18.744; x: 45.51; y: -20.235 }
- PathCubic { control1X: 45.782; control1Y: -20.935; control2X: 45.809; control2Y: -21.89; x: 45.496; y: -22.55 }
- PathCubic { control1X: 44.322; control1Y: -25.031; control2X: 43.62; control2Y: -27.48; x: 42.178; y: -29.906 }
- PathCubic { control1X: 41.91; control1Y: -30.356; control2X: 41.648; control2Y: -31.15; x: 41.447; y: -31.748 }
- PathCubic { control1X: 40.984; control1Y: -33.132; control2X: 39.727; control2Y: -34.123; x: 38.867; y: -35.443 }
- PathCubic { control1X: 38.579; control1Y: -35.884; control2X: 39.104; control2Y: -36.809; x: 38.388; y: -36.893 }
- PathCubic { control1X: 37.491; control1Y: -36.998; control2X: 36.042; control2Y: -37.578; x: 35.809; y: -36.552 }
- PathCubic { control1X: 35.221; control1Y: -33.965; control2X: 36.232; control2Y: -31.442; x: 37.2; y: -29 }
- PathCubic { control1X: 36.418; control1Y: -28.308; control2X: 36.752; control2Y: -27.387; x: 36.904; y: -26.62 }
- PathCubic { control1X: 37.614; control1Y: -23.014; control2X: 36.416; control2Y: -19.662; x: 35.655; y: -16.188 }
- PathCubic { control1X: 35.632; control1Y: -16.084; control2X: 35.974; control2Y: -15.886; x: 35.946; y: -15.824 }
- PathCubic { control1X: 34.724; control1Y: -13.138; control2X: 33.272; control2Y: -10.693; x: 31.453; y: -8.312 }
- PathCubic { control1X: 30.695; control1Y: -7.32; control2X: 29.823; control2Y: -6.404; x: 29.326; y: -5.341 }
- PathCubic { control1X: 28.958; control1Y: -4.554; control2X: 28.55; control2Y: -3.588; x: 28.8; y: -2.6 }
- PathCubic { control1X: 25.365; control1Y: 0.18; control2X: 23.115; control2Y: 4.025; x: 20.504; y: 7.871 }
- PathCubic { control1X: 20.042; control1Y: 8.551; control2X: 20.333; control2Y: 9.76; x: 20.884; y: 10.029 }
- PathCubic { control1X: 21.697; control1Y: 10.427; control2X: 22.653; control2Y: 9.403; x: 23.123; y: 8.557 }
- PathCubic { control1X: 23.512; control1Y: 7.859; control2X: 23.865; control2Y: 7.209; x: 24.356; y: 6.566 }
- PathCubic { control1X: 24.489; control1Y: 6.391; control2X: 24.31; control2Y: 5.972; x: 24.445; y: 5.851 }
- PathCubic { control1X: 27.078; control1Y: 3.504; control2X: 28.747; control2Y: 0.568; x: 31.2; y: -1.8 }
- PathCubic { control1X: 33.15; control1Y: -2.129; control2X: 34.687; control2Y: -3.127; x: 36.435; y: -4.14 }
- PathCubic { control1X: 36.743; control1Y: -4.319; control2X: 37.267; control2Y: -4.07; x: 37.557; y: -4.265 }
- PathCubic { control1X: 39.31; control1Y: -5.442; control2X: 39.308; control2Y: -7.478; x: 39.414; y: -9.388 }
- PathCubic { control1X: 39.464; control1Y: -10.272; control2X: 39.66; control2Y: -11.589; x: 40.8; y: -12.2 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 31.959; y: -16.666 }
- PathCubic { control1X: 32.083; control1Y: -16.743; control2X: 31.928; control2Y: -17.166; x: 32.037; y: -17.382 }
- PathCubic { control1X: 32.199; control1Y: -17.706; control2X: 32.602; control2Y: -17.894; x: 32.764; y: -18.218 }
- PathCubic { control1X: 32.873; control1Y: -18.434; control2X: 32.71; control2Y: -18.814; x: 32.846; y: -18.956 }
- PathCubic { control1X: 35.179; control1Y: -21.403; control2X: 35.436; control2Y: -24.427; x: 34.4; y: -27.4 }
- PathCubic { control1X: 35.424; control1Y: -28.02; control2X: 35.485; control2Y: -29.282; x: 35.06; y: -30.129 }
- PathCubic { control1X: 34.207; control1Y: -31.829; control2X: 34.014; control2Y: -33.755; x: 33.039; y: -35.298 }
- PathCubic { control1X: 32.237; control1Y: -36.567; control2X: 30.659; control2Y: -37.811; x: 29.288; y: -36.508 }
- PathCubic { control1X: 28.867; control1Y: -36.108; control2X: 28.546; control2Y: -35.321; x: 28.824; y: -34.609 }
- PathCubic { control1X: 28.888; control1Y: -34.446; control2X: 29.173; control2Y: -34.3; x: 29.146; y: -34.218 }
- PathCubic { control1X: 29.039; control1Y: -33.894; control2X: 28.493; control2Y: -33.67; x: 28.487; y: -33.398 }
- PathCubic { control1X: 28.457; control1Y: -31.902; control2X: 27.503; control2Y: -30.391; x: 28.133; y: -29.062 }
- PathCubic { control1X: 28.905; control1Y: -27.433; control2X: 29.724; control2Y: -25.576; x: 30.4; y: -23.8 }
- PathCubic { control1X: 29.166; control1Y: -21.684; control2X: 30.199; control2Y: -19.235; x: 28.446; y: -17.358 }
- PathCubic { control1X: 28.31; control1Y: -17.212; control2X: 28.319; control2Y: -16.826; x: 28.441; y: -16.624 }
- PathCubic { control1X: 28.733; control1Y: -16.138; control2X: 29.139; control2Y: -15.732; x: 29.625; y: -15.44 }
- PathCubic { control1X: 29.827; control1Y: -15.319; control2X: 30.175; control2Y: -15.317; x: 30.375; y: -15.441 }
- PathCubic { control1X: 30.953; control1Y: -15.803; control2X: 31.351; control2Y: -16.29; x: 31.959; y: -16.666 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 94.771; y: -26.977 }
- PathCubic { control1X: 96.16; control1Y: -25.185; control2X: 96.45; control2Y: -22.39; x: 94.401; y: -21 }
- PathCubic { control1X: 94.951; control1Y: -17.691; control2X: 98.302; control2Y: -19.67; x: 100.401; y: -20.2 }
- PathCubic { control1X: 100.292; control1Y: -20.588; control2X: 100.519; control2Y: -20.932; x: 100.802; y: -20.937 }
- PathCubic { control1X: 101.859; control1Y: -20.952; control2X: 102.539; control2Y: -21.984; x: 103.601; y: -21.8 }
- PathCubic { control1X: 104.035; control1Y: -23.357; control2X: 105.673; control2Y: -24.059; x: 106.317; y: -25.439 }
- PathCubic { control1X: 108.043; control1Y: -29.134; control2X: 107.452; control2Y: -33.407; x: 104.868; y: -36.653 }
- PathCubic { control1X: 104.666; control1Y: -36.907; control2X: 104.883; control2Y: -37.424; x: 104.759; y: -37.786 }
- PathCubic { control1X: 104.003; control1Y: -39.997; control2X: 101.935; control2Y: -40.312; x: 100.001; y: -41 }
- PathCubic { control1X: 98.824; control1Y: -44.875; control2X: 98.163; control2Y: -48.906; x: 96.401; y: -52.6 }
- PathCubic { control1X: 94.787; control1Y: -52.85; control2X: 94.089; control2Y: -54.589; x: 92.752; y: -55.309 }
- PathCubic { control1X: 91.419; control1Y: -56.028; control2X: 90.851; control2Y: -54.449; x: 90.892; y: -53.403 }
- PathCubic { control1X: 90.899; control1Y: -53.198; control2X: 91.351; control2Y: -52.974; x: 91.181; y: -52.609 }
- PathCubic { control1X: 91.105; control1Y: -52.445; control2X: 90.845; control2Y: -52.334; x: 90.845; y: -52.2 }
- PathCubic { control1X: 90.846; control1Y: -52.065; control2X: 91.067; control2Y: -51.934; x: 91.201; y: -51.8 }
- PathCubic { control1X: 90.283; control1Y: -50.98; control2X: 88.86; control2Y: -50.503; x: 88.565; y: -49.358 }
- PathCubic { control1X: 87.611; control1Y: -45.648; control2X: 90.184; control2Y: -42.523; x: 91.852; y: -39.322 }
- PathCubic { control1X: 92.443; control1Y: -38.187; control2X: 91.707; control2Y: -36.916; x: 90.947; y: -35.708 }
- PathCubic { control1X: 90.509; control1Y: -35.013; control2X: 90.617; control2Y: -33.886; x: 90.893; y: -33.03 }
- PathCubic { control1X: 91.645; control1Y: -30.699; control2X: 93.236; control2Y: -28.96; x: 94.771; y: -26.977 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 57.611; y: -8.591 }
- PathCubic { control1X: 56.124; control1Y: -6.74; control2X: 52.712; control2Y: -4.171; x: 55.629; y: -2.243 }
- PathCubic { control1X: 55.823; control1Y: -2.114; control2X: 56.193; control2Y: -2.11; x: 56.366; y: -2.244 }
- PathCubic { control1X: 58.387; control1Y: -3.809; control2X: 60.39; control2Y: -4.712; x: 62.826; y: -5.294 }
- PathCubic { control1X: 62.95; control1Y: -5.323; control2X: 63.224; control2Y: -4.856; x: 63.593; y: -5.017 }
- PathCubic { control1X: 65.206; control1Y: -5.72; control2X: 67.216; control2Y: -5.662; x: 68.4; y: -7 }
- PathCubic { control1X: 72.167; control1Y: -6.776; control2X: 75.732; control2Y: -7.892; x: 79.123; y: -9.2 }
- PathCubic { control1X: 80.284; control1Y: -9.648; control2X: 81.554; control2Y: -10.207; x: 82.755; y: -10.709 }
- PathCubic { control1X: 84.131; control1Y: -11.285; control2X: 85.335; control2Y: -12.213; x: 86.447; y: -13.354 }
- PathCubic { control1X: 86.58; control1Y: -13.49; control2X: 86.934; control2Y: -13.4; x: 87.201; y: -13.4 }
- PathCubic { control1X: 87.161; control1Y: -14.263; control2X: 88.123; control2Y: -14.39; x: 88.37; y: -15.012 }
- PathCubic { control1X: 88.462; control1Y: -15.244; control2X: 88.312; control2Y: -15.64; x: 88.445; y: -15.742 }
- PathCubic { control1X: 90.583; control1Y: -17.372; control2X: 91.503; control2Y: -19.39; x: 90.334; y: -21.767 }
- PathCubic { control1X: 90.049; control1Y: -22.345; control2X: 89.8; control2Y: -22.963; x: 89.234; y: -23.439 }
- PathCubic { control1X: 88.149; control1Y: -24.35; control2X: 87.047; control2Y: -23.496; x: 86; y: -23.8 }
- PathCubic { control1X: 85.841; control1Y: -23.172; control2X: 85.112; control2Y: -23.344; x: 84.726; y: -23.146 }
- PathCubic { control1X: 83.867; control1Y: -22.707; control2X: 82.534; control2Y: -23.292; x: 81.675; y: -22.854 }
- PathCubic { control1X: 80.313; control1Y: -22.159; control2X: 79.072; control2Y: -21.99; x: 77.65; y: -21.613 }
- PathCubic { control1X: 77.338; control1Y: -21.531; control2X: 76.56; control2Y: -21.627; x: 76.4; y: -21 }
- PathCubic { control1X: 76.266; control1Y: -21.134; control2X: 76.118; control2Y: -21.368; x: 76.012; y: -21.346 }
- PathCubic { control1X: 74.104; control1Y: -20.95; control2X: 72.844; control2Y: -20.736; x: 71.543; y: -19.044 }
- PathCubic { control1X: 71.44; control1Y: -18.911; control2X: 70.998; control2Y: -19.09; x: 70.839; y: -18.955 }
- PathCubic { control1X: 69.882; control1Y: -18.147; control2X: 69.477; control2Y: -16.913; x: 68.376; y: -16.241 }
- PathCubic { control1X: 68.175; control1Y: -16.118; control2X: 67.823; control2Y: -16.286; x: 67.629; y: -16.157 }
- PathCubic { control1X: 66.983; control1Y: -15.726; control2X: 66.616; control2Y: -15.085; x: 65.974; y: -14.638 }
- PathCubic { control1X: 65.645; control1Y: -14.409; control2X: 65.245; control2Y: -14.734; x: 65.277; y: -14.99 }
- PathCubic { control1X: 65.522; control1Y: -16.937; control2X: 66.175; control2Y: -18.724; x: 65.6; y: -20.6 }
- PathCubic { control1X: 67.677; control1Y: -23.12; control2X: 70.194; control2Y: -25.069; x: 72; y: -27.8 }
- PathCubic { control1X: 72.015; control1Y: -29.966; control2X: 72.707; control2Y: -32.112; x: 72.594; y: -34.189 }
- PathCubic { control1X: 72.584; control1Y: -34.382; control2X: 72.296; control2Y: -35.115; x: 72.17; y: -35.462 }
- PathCubic { control1X: 71.858; control1Y: -36.316; control2X: 72.764; control2Y: -37.382; x: 71.92; y: -38.106 }
- PathCubic { control1X: 70.516; control1Y: -39.309; control2X: 69.224; control2Y: -38.433; x: 68.4; y: -37 }
- PathCubic { control1X: 66.562; control1Y: -36.61; control2X: 64.496; control2Y: -35.917; x: 62.918; y: -37.151 }
- PathCubic { control1X: 61.911; control1Y: -37.938; control2X: 61.333; control2Y: -38.844; x: 60.534; y: -39.9 }
- PathCubic { control1X: 59.549; control1Y: -41.202; control2X: 59.884; control2Y: -42.638; x: 59.954; y: -44.202 }
- PathCubic { control1X: 59.96; control1Y: -44.33; control2X: 59.645; control2Y: -44.466; x: 59.645; y: -44.6 }
- PathCubic { control1X: 59.646; control1Y: -44.735; control2X: 59.866; control2Y: -44.866; x: 60; y: -45 }
- PathCubic { control1X: 59.294; control1Y: -45.626; control2X: 59.019; control2Y: -46.684; x: 58; y: -47 }
- PathCubic { control1X: 58.305; control1Y: -48.092; control2X: 57.629; control2Y: -48.976; x: 56.758; y: -49.278 }
- PathCubic { control1X: 54.763; control1Y: -49.969; control2X: 53.086; control2Y: -48.057; x: 51.194; y: -47.984 }
- PathCubic { control1X: 50.68; control1Y: -47.965; control2X: 50.213; control2Y: -49.003; x: 49.564; y: -49.328 }
- PathCubic { control1X: 49.132; control1Y: -49.544; control2X: 48.428; control2Y: -49.577; x: 48.066; y: -49.311 }
- PathCubic { control1X: 47.378; control1Y: -48.807; control2X: 46.789; control2Y: -48.693; x: 46.031; y: -48.488 }
- PathCubic { control1X: 44.414; control1Y: -48.052; control2X: 43.136; control2Y: -46.958; x: 41.656; y: -46.103 }
- PathCubic { control1X: 40.171; control1Y: -45.246; control2X: 39.216; control2Y: -43.809; x: 38.136; y: -42.489 }
- PathCubic { control1X: 37.195; control1Y: -41.337; control2X: 37.059; control2Y: -38.923; x: 38.479; y: -38.423 }
- PathCubic { control1X: 40.322; control1Y: -37.773; control2X: 41.626; control2Y: -40.476; x: 43.592; y: -40.15 }
- PathCubic { control1X: 43.904; control1Y: -40.099; control2X: 44.11; control2Y: -39.788; x: 44; y: -39.4 }
- PathCubic { control1X: 44.389; control1Y: -39.291; control2X: 44.607; control2Y: -39.52; x: 44.8; y: -39.8 }
- PathCubic { control1X: 45.658; control1Y: -38.781; control2X: 46.822; control2Y: -38.444; x: 47.76; y: -37.571 }
- PathCubic { control1X: 48.73; control1Y: -36.667; control2X: 50.476; control2Y: -37.085; x: 51.491; y: -36.088 }
- PathCubic { control1X: 53.02; control1Y: -34.586; control2X: 52.461; control2Y: -31.905; x: 54.4; y: -30.6 }
- PathCubic { control1X: 53.814; control1Y: -29.287; control2X: 53.207; control2Y: -28.01; x: 52.872; y: -26.583 }
- PathCubic { control1X: 52.59; control1Y: -25.377; control2X: 53.584; control2Y: -24.18; x: 54.795; y: -24.271 }
- PathCubic { control1X: 56.053; control1Y: -24.365; control2X: 56.315; control2Y: -25.124; x: 56.8; y: -26.2 }
- PathCubic { control1X: 57.067; control1Y: -25.933; control2X: 57.536; control2Y: -25.636; x: 57.495; y: -25.42 }
- PathCubic { control1X: 57.038; control1Y: -23.033; control2X: 56.011; control2Y: -21.04; x: 55.553; y: -18.609 }
- PathCubic { control1X: 55.494; control1Y: -18.292; control2X: 55.189; control2Y: -18.09; x: 54.8; y: -18.2 }
- PathCubic { control1X: 54.332; control1Y: -14.051; control2X: 50.28; control2Y: -11.657; x: 47.735; y: -8.492 }
- PathCubic { control1X: 47.332; control1Y: -7.99; control2X: 47.328; control2Y: -6.741; x: 47.737; y: -6.338 }
- PathCubic { control1X: 49.14; control1Y: -4.951; control2X: 51.1; control2Y: -6.497; x: 52.8; y: -7 }
- PathCubic { control1X: 53.013; control1Y: -8.206; control2X: 53.872; control2Y: -9.148; x: 55.204; y: -9.092 }
- PathCubic { control1X: 55.46; control1Y: -9.082; control2X: 55.695; control2Y: -9.624; x: 56.019; y: -9.754 }
- PathCubic { control1X: 56.367; control1Y: -9.892; control2X: 56.869; control2Y: -9.668; x: 57.155; y: -9.866 }
- PathCubic { control1X: 58.884; control1Y: -11.061; control2X: 60.292; control2Y: -12.167; x: 62.03; y: -13.356 }
- PathCubic { control1X: 62.222; control1Y: -13.487; control2X: 62.566; control2Y: -13.328; x: 62.782; y: -13.436 }
- PathCubic { control1X: 63.107; control1Y: -13.598; control2X: 63.294; control2Y: -13.985; x: 63.617; y: -14.17 }
- PathCubic { control1X: 63.965; control1Y: -14.37; control2X: 64.207; control2Y: -14.08; x: 64.4; y: -13.8 }
- PathCubic { control1X: 63.754; control1Y: -13.451; control2X: 63.75; control2Y: -12.494; x: 63.168; y: -12.292 }
- PathCubic { control1X: 62.393; control1Y: -12.024; control2X: 61.832; control2Y: -11.511; x: 61.158; y: -11.064 }
- PathCubic { control1X: 60.866; control1Y: -10.871; control2X: 60.207; control2Y: -11.119; x: 60.103; y: -10.94 }
- PathCubic { control1X: 59.505; control1Y: -9.912; control2X: 58.321; control2Y: -9.474; x: 57.611; y: -8.591 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 2.2; y: -58 }
- PathCubic { control1X: 2.2; control1Y: -58; control2X: -7.038; control2Y: -60.872; x: -18.2; y: -35.2 }
- PathCubic { control1X: -18.2; control1Y: -35.2; control2X: -20.6; control2Y: -30; x: -23; y: -28 }
- PathCubic { control1X: -25.4; control1Y: -26; control2X: -36.6; control2Y: -22.4; x: -38.6; y: -18.4 }
- PathLine { x: -49; y: -2.4 }
- PathCubic { control1X: -49; control1Y: -2.4; control2X: -34.2; control2Y: -18.4; x: -31; y: -20.8 }
- PathCubic { control1X: -31; control1Y: -20.8; control2X: -23; control2Y: -29.2; x: -26.2; y: -22.4 }
- PathCubic { control1X: -26.2; control1Y: -22.4; control2X: -40.2; control2Y: -11.6; x: -39; y: -2.4 }
- PathCubic { control1X: -39; control1Y: -2.4; control2X: -44.6; control2Y: 12; x: -45.4; y: 14 }
- PathCubic { control1X: -45.4; control1Y: 14; control2X: -29.4; control2Y: -18; x: -27; y: -19.2 }
- PathCubic { control1X: -24.6; control1Y: -20.4; control2X: -23.4; control2Y: -20.4; x: -24.6; y: -16.8 }
- PathCubic { control1X: -25.8; control1Y: -13.2; control2X: -26.2; control2Y: 3.2; x: -29; y: 5.2 }
- PathCubic { control1X: -29; control1Y: 5.2; control2X: -21; control2Y: -15.2; x: -21.8; y: -18.4 }
- PathCubic { control1X: -21.8; control1Y: -18.4; control2X: -18.6; control2Y: -22; x: -16.2; y: -16.8 }
- PathLine { x: -17.4; y: -0.8 }
- PathLine { x: -13; y: 11.2 }
- PathCubic { control1X: -13; control1Y: 11.2; control2X: -15.4; control2Y: 0; x: -13.8; y: -15.6 }
- PathCubic { control1X: -13.8; control1Y: -15.6; control2X: -15.8; control2Y: -26; x: -11.8; y: -20.4 }
- PathCubic { control1X: -7.8; control1Y: -14.8; control2X: 1.8; control2Y: -8.8; x: 1.8; y: -4 }
- PathCubic { control1X: 1.8; control1Y: -4; control2X: -3.4; control2Y: -21.6; x: -12.6; y: -26.4 }
- PathLine { x: -16.6; y: -20.4 }
- PathLine { x: -17.8; y: -22.4 }
- PathCubic { control1X: -17.8; control1Y: -22.4; control2X: -21.4; control2Y: -23.2; x: -17; y: -30 }
- PathCubic { control1X: -12.6; control1Y: -36.8; control2X: -13; control2Y: -37.6; x: -13; y: -37.6 }
- PathCubic { control1X: -13; control1Y: -37.6; control2X: -6.6; control2Y: -30.4; x: -5; y: -30.4 }
- PathCubic { control1X: -5; control1Y: -30.4; control2X: 8.2; control2Y: -38; x: 9.4; y: -13.6 }
- PathCubic { control1X: 9.4; control1Y: -13.6; control2X: 16.2; control2Y: -28; x: 7; y: -34.8 }
- PathCubic { control1X: 7; control1Y: -34.8; control2X: -7.8; control2Y: -36.8; x: -6.6; y: -42 }
- PathLine { x: 0.6; y: -54.4 }
- PathCubic { control1X: 4.2; control1Y: -59.6; control2X: 2.6; control2Y: -56.8; x: 2.6; y: -56.8 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -17.8; y: -41.6 }
- PathCubic { control1X: -17.8; control1Y: -41.6; control2X: -30.6; control2Y: -41.6; x: -33.8; y: -36.4 }
- PathLine { x: -41; y: -26.8 }
- PathCubic { control1X: -41; control1Y: -26.8; control2X: -23.8; control2Y: -36.8; x: -19.8; y: -38 }
- PathCubic { control1X: -15.8; control1Y: -39.2; control2X: -17.8; control2Y: -41.6; x: -17.8; y: -41.6 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -57.8; y: -35.2 }
- PathCubic { control1X: -57.8; control1Y: -35.2; control2X: -59.8; control2Y: -34; x: -60.2; y: -31.2 }
- PathCubic { control1X: -60.6; control1Y: -28.4; control2X: -63; control2Y: -28; x: -62.2; y: -25.2 }
- PathCubic { control1X: -61.4; control1Y: -22.4; control2X: -59.4; control2Y: -20; x: -59.4; y: -24 }
- PathCubic { control1X: -59.4; control1Y: -28; control2X: -57.8; control2Y: -30; x: -57; y: -31.2 }
- PathCubic { control1X: -56.2; control1Y: -32.4; control2X: -54.6; control2Y: -36.8; x: -57.8; y: -35.2 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -66.6; y: 26 }
- PathCubic { control1X: -66.6; control1Y: 26; control2X: -75; control2Y: 22; x: -78.2; y: 18.4 }
- PathCubic { control1X: -81.4; control1Y: 14.8; control2X: -80.948; control2Y: 19.966; x: -85.8; y: 19.6 }
- PathCubic { control1X: -91.647; control1Y: 19.159; control2X: -90.6; control2Y: 3.2; x: -90.6; y: 3.2 }
- PathLine { x: -94.6; y: 10.8 }
- PathCubic { control1X: -94.6; control1Y: 10.8; control2X: -95.8; control2Y: 25.2; x: -87.8; y: 22.8 }
- PathCubic { control1X: -83.893; control1Y: 21.628; control2X: -82.6; control2Y: 23.2; x: -84.2; y: 24 }
- PathCubic { control1X: -85.8; control1Y: 24.8; control2X: -78.6; control2Y: 25.2; x: -81.4; y: 26.8 }
- PathCubic { control1X: -84.2; control1Y: 28.4; control2X: -69.8; control2Y: 23.2; x: -72.2; y: 33.6 }
- PathLine { x: -66.6; y: 26 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -79.2; y: 40.4 }
- PathCubic { control1X: -79.2; control1Y: 40.4; control2X: -94.6; control2Y: 44.8; x: -98.2; y: 35.2 }
- PathCubic { control1X: -98.2; control1Y: 35.2; control2X: -103; control2Y: 37.6; x: -100.8; y: 40.6 }
- PathCubic { control1X: -98.6; control1Y: 43.6; control2X: -97.4; control2Y: 44; x: -97.4; y: 44 }
- PathCubic { control1X: -97.4; control1Y: 44; control2X: -92; control2Y: 45.2; x: -92.6; y: 46 }
- PathCubic { control1X: -93.2; control1Y: 46.8; control2X: -95.6; control2Y: 50.2; x: -95.6; y: 50.2 }
- PathCubic { control1X: -95.6; control1Y: 50.2; control2X: -85.4; control2Y: 44.2; x: -79.2; y: 40.4 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeWidth: -1
- PathMove { x: 149.201; y: 118.601 }
- PathCubic { control1X: 148.774; control1Y: 120.735; control2X: 147.103; control2Y: 121.536; x: 145.201; y: 122.201 }
- PathCubic { control1X: 143.284; control1Y: 121.243; control2X: 140.686; control2Y: 118.137; x: 138.801; y: 120.201 }
- PathCubic { control1X: 138.327; control1Y: 119.721; control2X: 137.548; control2Y: 119.661; x: 137.204; y: 118.999 }
- PathCubic { control1X: 136.739; control1Y: 118.101; control2X: 137.011; control2Y: 117.055; x: 136.669; y: 116.257 }
- PathCubic { control1X: 136.124; control1Y: 114.985; control2X: 135.415; control2Y: 113.619; x: 135.601; y: 112.201 }
- PathCubic { control1X: 137.407; control1Y: 111.489; control2X: 138.002; control2Y: 109.583; x: 137.528; y: 107.82 }
- PathCubic { control1X: 137.459; control1Y: 107.563; control2X: 137.03; control2Y: 107.366; x: 137.23; y: 107.017 }
- PathCubic { control1X: 137.416; control1Y: 106.694; control2X: 137.734; control2Y: 106.467; x: 138.001; y: 106.2 }
- PathCubic { control1X: 137.866; control1Y: 106.335; control2X: 137.721; control2Y: 106.568; x: 137.61; y: 106.548 }
- PathCubic { control1X: 137; control1Y: 106.442; control2X: 137.124; control2Y: 105.805; x: 137.254; y: 105.418 }
- PathCubic { control1X: 137.839; control1Y: 103.672; control2X: 139.853; control2Y: 103.408; x: 141.201; y: 104.6 }
- PathCubic { control1X: 141.457; control1Y: 104.035; control2X: 141.966; control2Y: 104.229; x: 142.401; y: 104.2 }
- PathCubic { control1X: 142.351; control1Y: 103.621; control2X: 142.759; control2Y: 103.094; x: 142.957; y: 102.674 }
- PathCubic { control1X: 143.475; control1Y: 101.576; control2X: 145.104; control2Y: 102.682; x: 145.901; y: 102.07 }
- PathCubic { control1X: 146.977; control1Y: 101.245; control2X: 148.04; control2Y: 100.546; x: 149.118; y: 101.149 }
- PathCubic { control1X: 150.927; control1Y: 102.162; control2X: 152.636; control2Y: 103.374; x: 153.835; y: 105.115 }
- PathCubic { control1X: 154.41; control1Y: 105.949; control2X: 154.65; control2Y: 107.23; x: 154.592; y: 108.188 }
- PathCubic { control1X: 154.554; control1Y: 108.835; control2X: 153.173; control2Y: 108.483; x: 152.83; y: 109.412 }
- PathCubic { control1X: 152.185; control1Y: 111.16; control2X: 154.016; control2Y: 111.679; x: 154.772; y: 113.017 }
- PathCubic { control1X: 154.97; control1Y: 113.366; control2X: 154.706; control2Y: 113.67; x: 154.391; y: 113.768 }
- PathCubic { control1X: 153.98; control1Y: 113.896; control2X: 153.196; control2Y: 113.707; x: 153.334; y: 114.16 }
- PathCubic { control1X: 154.306; control1Y: 117.353; control2X: 151.55; control2Y: 118.031; x: 149.201; y: 118.601 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeWidth: -1
- PathMove { x: 139.6; y: 138.201 }
- PathCubic { control1X: 139.593; control1Y: 136.463; control2X: 137.992; control2Y: 134.707; x: 139.201; y: 133.001 }
- PathCubic { control1X: 139.336; control1Y: 133.135; control2X: 139.467; control2Y: 133.356; x: 139.601; y: 133.356 }
- PathCubic { control1X: 139.736; control1Y: 133.356; control2X: 139.867; control2Y: 133.135; x: 140.001; y: 133.001 }
- PathCubic { control1X: 141.496; control1Y: 135.217; control2X: 145.148; control2Y: 136.145; x: 145.006; y: 138.991 }
- PathCubic { control1X: 144.984; control1Y: 139.438; control2X: 143.897; control2Y: 140.356; x: 144.801; y: 141.001 }
- PathCubic { control1X: 142.988; control1Y: 142.349; control2X: 142.933; control2Y: 144.719; x: 142.001; y: 146.601 }
- PathCubic { control1X: 140.763; control1Y: 146.315; control2X: 139.551; control2Y: 145.952; x: 138.401; y: 145.401 }
- PathCubic { control1X: 138.753; control1Y: 143.915; control2X: 138.636; control2Y: 142.231; x: 139.456; y: 140.911 }
- PathCubic { control1X: 139.89; control1Y: 140.213; control2X: 139.603; control2Y: 139.134; x: 139.6; y: 138.201 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -26.6; y: 129.201 }
- PathCubic { control1X: -26.6; control1Y: 129.201; control2X: -43.458; control2Y: 139.337; x: -29.4; y: 124.001 }
- PathCubic { control1X: -20.6; control1Y: 114.401; control2X: -10.6; control2Y: 108.801; x: -10.6; y: 108.801 }
- PathCubic { control1X: -10.6; control1Y: 108.801; control2X: -0.2; control2Y: 104.4; x: 3.4; y: 103.2 }
- PathCubic { control1X: 7; control1Y: 102; control2X: 22.2; control2Y: 96.8; x: 25.4; y: 96.4 }
- PathCubic { control1X: 28.6; control1Y: 96; control2X: 38.2; control2Y: 92; x: 45; y: 96 }
- PathCubic { control1X: 51.8; control1Y: 100; control2X: 59.8; control2Y: 104.4; x: 59.8; y: 104.4 }
- PathCubic { control1X: 59.8; control1Y: 104.4; control2X: 43.4; control2Y: 96; x: 39.8; y: 98.4 }
- PathCubic { control1X: 36.2; control1Y: 100.8; control2X: 29; control2Y: 100.4; x: 23; y: 103.6 }
- PathCubic { control1X: 23; control1Y: 103.6; control2X: 8.2; control2Y: 108.001; x: 5; y: 110.001 }
- PathCubic { control1X: 1.8; control1Y: 112.001; control2X: -8.6; control2Y: 123.601; x: -10.2; y: 122.801 }
- PathCubic { control1X: -11.8; control1Y: 122.001; control2X: -9.8; control2Y: 121.601; x: -8.6; y: 118.801 }
- PathCubic { control1X: -7.4; control1Y: 116.001; control2X: -9.4; control2Y: 114.401; x: -17.4; y: 120.801 }
- PathCubic { control1X: -25.4; control1Y: 127.201; control2X: -26.6; control2Y: 129.201; x: -26.6; y: 129.201 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -19.195; y: 123.234 }
- PathCubic { control1X: -19.195; control1Y: 123.234; control2X: -17.785; control2Y: 110.194; x: -9.307; y: 111.859 }
- PathCubic { control1X: -9.307; control1Y: 111.859; control2X: -1.081; control2Y: 107.689; x: 1.641; y: 105.721 }
- PathCubic { control1X: 1.641; control1Y: 105.721; control2X: 9.78; control2Y: 104.019; x: 11.09; y: 103.402 }
- PathCubic { control1X: 29.569; control1Y: 94.702; control2X: 44.288; control2Y: 99.221; x: 44.835; y: 98.101 }
- PathCubic { control1X: 45.381; control1Y: 96.982; control2X: 65.006; control2Y: 104.099; x: 68.615; y: 108.185 }
- PathCubic { control1X: 69.006; control1Y: 108.628; control2X: 58.384; control2Y: 102.588; x: 48.686; y: 100.697 }
- PathCubic { control1X: 40.413; control1Y: 99.083; control2X: 18.811; control2Y: 100.944; x: 7.905; y: 106.48 }
- PathCubic { control1X: 4.932; control1Y: 107.989; control2X: -4.013; control2Y: 113.773; x: -6.544; y: 113.662 }
- PathCubic { control1X: -9.075; control1Y: 113.55; control2X: -19.195; control2Y: 123.234; x: -19.195; y: 123.234 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -23; y: 148.801 }
- PathCubic { control1X: -23; control1Y: 148.801; control2X: -38.2; control2Y: 146.401; x: -21.4; y: 144.801 }
- PathCubic { control1X: -21.4; control1Y: 144.801; control2X: -3.4; control2Y: 142.801; x: 0.6; y: 137.601 }
- PathCubic { control1X: 0.6; control1Y: 137.601; control2X: 14.2; control2Y: 128.401; x: 17; y: 128.001 }
- PathCubic { control1X: 19.8; control1Y: 127.601; control2X: 49.8; control2Y: 120.401; x: 50.2; y: 118.001 }
- PathCubic { control1X: 50.6; control1Y: 115.601; control2X: 56.2; control2Y: 115.601; x: 57.8; y: 116.401 }
- PathCubic { control1X: 59.4; control1Y: 117.201; control2X: 58.6; control2Y: 118.401; x: 55.8; y: 119.201 }
- PathCubic { control1X: 53; control1Y: 120.001; control2X: 21.8; control2Y: 136.401; x: 15.4; y: 137.601 }
- PathCubic { control1X: 9; control1Y: 138.801; control2X: -2.6; control2Y: 146.401; x: -7.4; y: 147.601 }
- PathCubic { control1X: -12.2; control1Y: 148.801; control2X: -23; control2Y: 148.801; x: -23; y: 148.801 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -3.48; y: 141.403 }
- PathCubic { control1X: -3.48; control1Y: 141.403; control2X: -12.062; control2Y: 140.574; x: -3.461; y: 139.755 }
- PathCubic { control1X: -3.461; control1Y: 139.755; control2X: 5.355; control2Y: 136.331; x: 7.403; y: 133.668 }
- PathCubic { control1X: 7.403; control1Y: 133.668; control2X: 14.367; control2Y: 128.957; x: 15.8; y: 128.753 }
- PathCubic { control1X: 17.234; control1Y: 128.548; control2X: 31.194; control2Y: 124.861; x: 31.399; y: 123.633 }
- PathCubic { control1X: 31.604; control1Y: 122.404; control2X: 65.67; control2Y: 109.823; x: 70.09; y: 113.013 }
- PathCubic { control1X: 73.001; control1Y: 115.114; control2X: 63.1; control2Y: 113.437; x: 53.466; y: 117.847 }
- PathCubic { control1X: 52.111; control1Y: 118.467; control2X: 18.258; control2Y: 133.054; x: 14.981; y: 133.668 }
- PathCubic { control1X: 11.704; control1Y: 134.283; control2X: 5.765; control2Y: 138.174; x: 3.307; y: 138.788 }
- PathCubic { control1X: 0.85; control1Y: 139.403; control2X: -3.48; control2Y: 141.403; x: -3.48; y: 141.403 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -11.4; y: 143.601 }
- PathCubic { control1X: -11.4; control1Y: 143.601; control2X: -6.2; control2Y: 143.201; x: -7.4; y: 144.801 }
- PathCubic { control1X: -8.6; control1Y: 146.401; control2X: -11; control2Y: 145.601; x: -11; y: 145.601 }
- PathLine { x: -11.4; y: 143.601 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -18.6; y: 145.201 }
- PathCubic { control1X: -18.6; control1Y: 145.201; control2X: -13.4; control2Y: 144.801; x: -14.6; y: 146.401 }
- PathCubic { control1X: -15.8; control1Y: 148.001; control2X: -18.2; control2Y: 147.201; x: -18.2; y: 147.201 }
- PathLine { x: -18.6; y: 145.201 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -29; y: 146.801 }
- PathCubic { control1X: -29; control1Y: 146.801; control2X: -23.8; control2Y: 146.401; x: -25; y: 148.001 }
- PathCubic { control1X: -26.2; control1Y: 149.601; control2X: -28.6; control2Y: 148.801; x: -28.6; y: 148.801 }
- PathLine { x: -29; y: 146.801 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -36.6; y: 147.601 }
- PathCubic { control1X: -36.6; control1Y: 147.601; control2X: -31.4; control2Y: 147.201; x: -32.6; y: 148.801 }
- PathCubic { control1X: -33.8; control1Y: 150.401; control2X: -36.2; control2Y: 149.601; x: -36.2; y: 149.601 }
- PathLine { x: -36.6; y: 147.601 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 1.8; y: 108.001 }
- PathCubic { control1X: 1.8; control1Y: 108.001; control2X: 6.2; control2Y: 108.001; x: 5; y: 109.601 }
- PathCubic { control1X: 3.8; control1Y: 111.201; control2X: 0.6; control2Y: 110.801; x: 0.6; y: 110.801 }
- PathLine { x: 1.8; y: 108.001 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -8.2; y: 113.601 }
- PathCubic { control1X: -8.2; control1Y: 113.601; control2X: -1.694; control2Y: 111.46; x: -4.2; y: 114.801 }
- PathCubic { control1X: -5.4; control1Y: 116.401; control2X: -7.8; control2Y: 115.601; x: -7.8; y: 115.601 }
- PathLine { x: -8.2; y: 113.601 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -19.4; y: 118.401 }
- PathCubic { control1X: -19.4; control1Y: 118.401; control2X: -14.2; control2Y: 118.001; x: -15.4; y: 119.601 }
- PathCubic { control1X: -16.6; control1Y: 121.201; control2X: -19; control2Y: 120.401; x: -19; y: 120.401 }
- PathLine { x: -19.4; y: 118.401 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -27; y: 124.401 }
- PathCubic { control1X: -27; control1Y: 124.401; control2X: -21.8; control2Y: 124.001; x: -23; y: 125.601 }
- PathCubic { control1X: -24.2; control1Y: 127.201; control2X: -26.6; control2Y: 126.401; x: -26.6; y: 126.401 }
- PathLine { x: -27; y: 124.401 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -33.8; y: 129.201 }
- PathCubic { control1X: -33.8; control1Y: 129.201; control2X: -28.6; control2Y: 128.801; x: -29.8; y: 130.401 }
- PathCubic { control1X: -31; control1Y: 132.001; control2X: -33.4; control2Y: 131.201; x: -33.4; y: 131.201 }
- PathLine { x: -33.8; y: 129.201 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 5.282; y: 135.598 }
- PathCubic { control1X: 5.282; control1Y: 135.598; control2X: 12.203; control2Y: 135.066; x: 10.606; y: 137.195 }
- PathCubic { control1X: 9.009; control1Y: 139.325; control2X: 5.814; control2Y: 138.26; x: 5.814; y: 138.26 }
- PathLine { x: 5.282; y: 135.598 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 15.682; y: 130.798 }
- PathCubic { control1X: 15.682; control1Y: 130.798; control2X: 22.603; control2Y: 130.266; x: 21.006; y: 132.395 }
- PathCubic { control1X: 19.409; control1Y: 134.525; control2X: 16.214; control2Y: 133.46; x: 16.214; y: 133.46 }
- PathLine { x: 15.682; y: 130.798 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 26.482; y: 126.398 }
- PathCubic { control1X: 26.482; control1Y: 126.398; control2X: 33.403; control2Y: 125.866; x: 31.806; y: 127.995 }
- PathCubic { control1X: 30.209; control1Y: 130.125; control2X: 27.014; control2Y: 129.06; x: 27.014; y: 129.06 }
- PathLine { x: 26.482; y: 126.398 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 36.882; y: 121.598 }
- PathCubic { control1X: 36.882; control1Y: 121.598; control2X: 43.803; control2Y: 121.066; x: 42.206; y: 123.195 }
- PathCubic { control1X: 40.609; control1Y: 125.325; control2X: 37.414; control2Y: 124.26; x: 37.414; y: 124.26 }
- PathLine { x: 36.882; y: 121.598 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 9.282; y: 103.598 }
- PathCubic { control1X: 9.282; control1Y: 103.598; control2X: 16.203; control2Y: 103.066; x: 14.606; y: 105.195 }
- PathCubic { control1X: 13.009; control1Y: 107.325; control2X: 9.014; control2Y: 107.06; x: 9.014; y: 107.06 }
- PathLine { x: 9.282; y: 103.598 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 19.282; y: 100.398 }
- PathCubic { control1X: 19.282; control1Y: 100.398; control2X: 26.203; control2Y: 99.866; x: 24.606; y: 101.995 }
- PathCubic { control1X: 23.009; control1Y: 104.125; control2X: 18.614; control2Y: 103.86; x: 18.614; y: 103.86 }
- PathLine { x: 19.282; y: 100.398 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -3.4; y: 140.401 }
- PathCubic { control1X: -3.4; control1Y: 140.401; control2X: 1.8; control2Y: 140.001; x: 0.6; y: 141.601 }
- PathCubic { control1X: -0.6; control1Y: 143.201; control2X: -3; control2Y: 142.401; x: -3; y: 142.401 }
- PathLine { x: -3.4; y: 140.401 }
- }
-
- ShapePath {
- fillColor: "#992600"
- strokeWidth: -1
- PathMove { x: -76.6; y: 41.2 }
- PathCubic { control1X: -76.6; control1Y: 41.2; control2X: -81; control2Y: 50; x: -81.4; y: 53.2 }
- PathCubic { control1X: -81.4; control1Y: 53.2; control2X: -80.6; control2Y: 44.4; x: -79.4; y: 42.4 }
- PathCubic { control1X: -78.2; control1Y: 40.4; control2X: -76.6; control2Y: 41.2; x: -76.6; y: 41.2 }
- }
-
- ShapePath {
- fillColor: "#992600"
- strokeWidth: -1
- PathMove { x: -95; y: 55.2 }
- PathCubic { control1X: -95; control1Y: 55.2; control2X: -98.2; control2Y: 69.6; x: -97.8; y: 72.4 }
- PathCubic { control1X: -97.8; control1Y: 72.4; control2X: -99; control2Y: 60.8; x: -98.6; y: 59.6 }
- PathCubic { control1X: -98.2; control1Y: 58.4; control2X: -95; control2Y: 55.2; x: -95; y: 55.2 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -74.2; y: -19.4 }
- PathLine { x: -74.4; y: -16.2 }
- PathLine { x: -76.6; y: -16 }
- PathCubic { control1X: -76.6; control1Y: -16; control2X: -62.4; control2Y: -3.4; x: -61.8; y: 4.2 }
- PathCubic { control1X: -61.8; control1Y: 4.2; control2X: -61; control2Y: -4; x: -74.2; y: -19.4 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -70.216; y: -18.135 }
- PathCubic { control1X: -70.647; control1Y: -18.551; control2X: -70.428; control2Y: -19.296; x: -70.836; y: -19.556 }
- PathCubic { control1X: -71.645; control1Y: -20.072; control2X: -69.538; control2Y: -20.129; x: -69.766; y: -20.845 }
- PathCubic { control1X: -70.149; control1Y: -22.051; control2X: -69.962; control2Y: -22.072; x: -70.084; y: -23.348 }
- PathCubic { control1X: -70.141; control1Y: -23.946; control2X: -69.553; control2Y: -25.486; x: -69.168; y: -25.926 }
- PathCubic { control1X: -67.722; control1Y: -27.578; control2X: -69.046; control2Y: -30.51; x: -67.406; y: -32.061 }
- PathCubic { control1X: -67.102; control1Y: -32.35; control2X: -66.726; control2Y: -32.902; x: -66.441; y: -33.32 }
- PathCubic { control1X: -65.782; control1Y: -34.283; control2X: -64.598; control2Y: -34.771; x: -63.648; y: -35.599 }
- PathCubic { control1X: -63.33; control1Y: -35.875; control2X: -63.531; control2Y: -36.702; x: -62.962; y: -36.61 }
- PathCubic { control1X: -62.248; control1Y: -36.495; control2X: -61.007; control2Y: -36.625; x: -61.052; y: -35.784 }
- PathCubic { control1X: -61.165; control1Y: -33.664; control2X: -62.494; control2Y: -31.944; x: -63.774; y: -30.276 }
- PathCubic { control1X: -63.323; control1Y: -29.572; control2X: -63.781; control2Y: -28.937; x: -64.065; y: -28.38 }
- PathCubic { control1X: -65.4; control1Y: -25.76; control2X: -65.211; control2Y: -22.919; x: -65.385; y: -20.079 }
- PathCubic { control1X: -65.39; control1Y: -19.994; control2X: -65.697; control2Y: -19.916; x: -65.689; y: -19.863 }
- PathCubic { control1X: -65.336; control1Y: -17.528; control2X: -64.752; control2Y: -15.329; x: -63.873; y: -13.1 }
- PathCubic { control1X: -63.507; control1Y: -12.17; control2X: -63.036; control2Y: -11.275; x: -62.886; y: -10.348 }
- PathCubic { control1X: -62.775; control1Y: -9.662; control2X: -62.672; control2Y: -8.829; x: -63.08; y: -8.124 }
- PathCubic { control1X: -61.045; control1Y: -5.234; control2X: -62.354; control2Y: -2.583; x: -61.185; y: 0.948 }
- PathCubic { control1X: -60.978; control1Y: 1.573; control2X: -59.286; control2Y: 3.487; x: -59.749; y: 3.326 }
- PathCubic { control1X: -62.262; control1Y: 2.455; control2X: -62.374; control2Y: 2.057; x: -62.551; y: 1.304 }
- PathCubic { control1X: -62.697; control1Y: 0.681; control2X: -63.027; control2Y: -0.696; x: -63.264; y: -1.298 }
- PathCubic { control1X: -63.328; control1Y: -1.462; control2X: -63.499; control2Y: -3.346; x: -63.577; y: -3.468 }
- PathCubic { control1X: -65.09; control1Y: -5.85; control2X: -63.732; control2Y: -5.674; x: -65.102; y: -8.032 }
- PathCubic { control1X: -66.53; control1Y: -8.712; control2X: -67.496; control2Y: -9.816; x: -68.619; y: -10.978 }
- PathCubic { control1X: -68.817; control1Y: -11.182; control2X: -67.674; control2Y: -11.906; x: -67.855; y: -12.119 }
- PathCubic { control1X: -68.947; control1Y: -13.408; control2X: -70.1; control2Y: -14.175; x: -69.764; y: -15.668 }
- PathCubic { control1X: -69.609; control1Y: -16.358; control2X: -69.472; control2Y: -17.415; x: -70.216; y: -18.135 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -73.8; y: -16.4 }
- PathCubic { control1X: -73.8; control1Y: -16.4; control2X: -73.4; control2Y: -9.6; x: -71; y: -8 }
- PathCubic { control1X: -68.6; control1Y: -6.4; control2X: -69.8; control2Y: -7.2; x: -73; y: -8.4 }
- PathCubic { control1X: -76.2; control1Y: -9.6; control2X: -75; control2Y: -10.4; x: -75; y: -10.4 }
- PathCubic { control1X: -75; control1Y: -10.4; control2X: -77.8; control2Y: -10; x: -75.4; y: -8 }
- PathCubic { control1X: -73; control1Y: -6; control2X: -69.4; control2Y: -3.6; x: -71; y: -3.6 }
- PathCubic { control1X: -72.6; control1Y: -3.6; control2X: -80.2; control2Y: -7.6; x: -80.2; y: -10.4 }
- PathCubic { control1X: -80.2; control1Y: -13.2; control2X: -81.2; control2Y: -17.3; x: -81.2; y: -17.3 }
- PathCubic { control1X: -81.2; control1Y: -17.3; control2X: -80.1; control2Y: -18.1; x: -75.3; y: -18 }
- PathCubic { control1X: -75.3; control1Y: -18; control2X: -73.9; control2Y: -17.3; x: -73.8; y: -16.4 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: -74.6; y: 2.2 }
- PathCubic { control1X: -74.6; control1Y: 2.2; control2X: -83.12; control2Y: -0.591; x: -101.6; y: 2.8 }
- PathCubic { control1X: -101.6; control1Y: 2.8; control2X: -92.569; control2Y: 0.722; x: -73.8; y: 3 }
- PathCubic { control1X: -63.5; control1Y: 4.25; control2X: -74.6; control2Y: 2.2; x: -74.6; y: 2.2 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: -72.502; y: 2.129 }
- PathCubic { control1X: -72.502; control1Y: 2.129; control2X: -80.748; control2Y: -1.389; x: -99.453; y: 0.392 }
- PathCubic { control1X: -99.453; control1Y: 0.392; control2X: -90.275; control2Y: -0.897; x: -71.774; y: 2.995 }
- PathCubic { control1X: -61.62; control1Y: 5.131; control2X: -72.502; control2Y: 2.129; x: -72.502; y: 2.129 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: -70.714; y: 2.222 }
- PathCubic { control1X: -70.714; control1Y: 2.222; control2X: -78.676; control2Y: -1.899; x: -97.461; y: -1.514 }
- PathCubic { control1X: -97.461; control1Y: -1.514; control2X: -88.213; control2Y: -2.118; x: -70.052; y: 3.14 }
- PathCubic { control1X: -60.086; control1Y: 6.025; control2X: -70.714; control2Y: 2.222; x: -70.714; y: 2.222 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: -69.444; y: 2.445 }
- PathCubic { control1X: -69.444; control1Y: 2.445; control2X: -76.268; control2Y: -1.862; x: -93.142; y: -2.96 }
- PathCubic { control1X: -93.142; control1Y: -2.96; control2X: -84.803; control2Y: -2.79; x: -68.922; y: 3.319 }
- PathCubic { control1X: -60.206; control1Y: 6.672; control2X: -69.444; control2Y: 2.445; x: -69.444; y: 2.445 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 45.84; y: 12.961 }
- PathCubic { control1X: 45.84; control1Y: 12.961; control2X: 44.91; control2Y: 13.605; x: 45.124; y: 12.424 }
- PathCubic { control1X: 45.339; control1Y: 11.243; control2X: 73.547; control2Y: -1.927; x: 77.161; y: -1.677 }
- PathCubic { control1X: 77.161; control1Y: -1.677; control2X: 46.913; control2Y: 11.529; x: 45.84; y: 12.961 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 42.446; y: 13.6 }
- PathCubic { control1X: 42.446; control1Y: 13.6; control2X: 41.57; control2Y: 14.315; x: 41.691; y: 13.121 }
- PathCubic { control1X: 41.812; control1Y: 11.927; control2X: 68.899; control2Y: -3.418; x: 72.521; y: -3.452 }
- PathCubic { control1X: 72.521; control1Y: -3.452; control2X: 43.404; control2Y: 12.089; x: 42.446; y: 13.6 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 39.16; y: 14.975 }
- PathCubic { control1X: 39.16; control1Y: 14.975; control2X: 38.332; control2Y: 15.747; x: 38.374; y: 14.547 }
- PathCubic { control1X: 38.416; control1Y: 13.348; control2X: 58.233; control2Y: -2.149; x: 68.045; y: -4.023 }
- PathCubic { control1X: 68.045; control1Y: -4.023; control2X: 50.015; control2Y: 4.104; x: 39.16; y: 14.975 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 36.284; y: 16.838 }
- PathCubic { control1X: 36.284; control1Y: 16.838; control2X: 35.539; control2Y: 17.532; x: 35.577; y: 16.453 }
- PathCubic { control1X: 35.615; control1Y: 15.373; control2X: 53.449; control2Y: 1.426; x: 62.28; y: -0.26 }
- PathCubic { control1X: 62.28; control1Y: -0.26; control2X: 46.054; control2Y: 7.054; x: 36.284; y: 16.838 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 4.6; y: 164.801 }
- PathCubic { control1X: 4.6; control1Y: 164.801; control2X: -10.6; control2Y: 162.401; x: 6.2; y: 160.801 }
- PathCubic { control1X: 6.2; control1Y: 160.801; control2X: 24.2; control2Y: 158.801; x: 28.2; y: 153.601 }
- PathCubic { control1X: 28.2; control1Y: 153.601; control2X: 41.8; control2Y: 144.401; x: 44.6; y: 144.001 }
- PathCubic { control1X: 47.4; control1Y: 143.601; control2X: 63.8; control2Y: 140.001; x: 64.2; y: 137.601 }
- PathCubic { control1X: 64.6; control1Y: 135.201; control2X: 70.6; control2Y: 132.801; x: 72.2; y: 133.601 }
- PathCubic { control1X: 73.8; control1Y: 134.401; control2X: 73.8; control2Y: 143.601; x: 71; y: 144.401 }
- PathCubic { control1X: 68.2; control1Y: 145.201; control2X: 49.4; control2Y: 152.401; x: 43; y: 153.601 }
- PathCubic { control1X: 36.6; control1Y: 154.801; control2X: 25; control2Y: 162.401; x: 20.2; y: 163.601 }
- PathCubic { control1X: 15.4; control1Y: 164.801; control2X: 4.6; control2Y: 164.801; x: 4.6; y: 164.801 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 77.6; y: 127.401 }
- PathCubic { control1X: 77.6; control1Y: 127.401; control2X: 74.6; control2Y: 129.001; x: 73.4; y: 131.601 }
- PathCubic { control1X: 73.4; control1Y: 131.601; control2X: 67; control2Y: 142.201; x: 52.8; y: 145.401 }
- PathCubic { control1X: 52.8; control1Y: 145.401; control2X: 29.8; control2Y: 154.401; x: 22; y: 156.401 }
- PathCubic { control1X: 22; control1Y: 156.401; control2X: 8.6; control2Y: 161.401; x: 1.2; y: 160.601 }
- PathCubic { control1X: 1.2; control1Y: 160.601; control2X: -5.8; control2Y: 160.801; x: 0.4; y: 162.401 }
- PathCubic { control1X: 0.4; control1Y: 162.401; control2X: 20.6; control2Y: 160.401; x: 24; y: 158.601 }
- PathCubic { control1X: 24; control1Y: 158.601; control2X: 39.6; control2Y: 153.401; x: 42.6; y: 150.801 }
- PathCubic { control1X: 45.6; control1Y: 148.201; control2X: 63.8; control2Y: 143.201; x: 66; y: 141.201 }
- PathCubic { control1X: 68.2; control1Y: 139.201; control2X: 78; control2Y: 130.801; x: 77.6; y: 127.401 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 18.882; y: 158.911 }
- PathCubic { control1X: 18.882; control1Y: 158.911; control2X: 24.111; control2Y: 158.685; x: 22.958; y: 160.234 }
- PathCubic { control1X: 21.805; control1Y: 161.784; control2X: 19.357; control2Y: 160.91; x: 19.357; y: 160.91 }
- PathLine { x: 18.882; y: 158.911 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 11.68; y: 160.263 }
- PathCubic { control1X: 11.68; control1Y: 160.263; control2X: 16.908; control2Y: 160.037; x: 15.756; y: 161.586 }
- PathCubic { control1X: 14.603; control1Y: 163.136; control2X: 12.155; control2Y: 162.263; x: 12.155; y: 162.263 }
- PathLine { x: 11.68; y: 160.263 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 1.251; y: 161.511 }
- PathCubic { control1X: 1.251; control1Y: 161.511; control2X: 6.48; control2Y: 161.284; x: 5.327; y: 162.834 }
- PathCubic { control1X: 4.174; control1Y: 164.383; control2X: 1.726; control2Y: 163.51; x: 1.726; y: 163.51 }
- PathLine { x: 1.251; y: 161.511 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -6.383; y: 162.055 }
- PathCubic { control1X: -6.383; control1Y: 162.055; control2X: -1.154; control2Y: 161.829; x: -2.307; y: 163.378 }
- PathCubic { control1X: -3.46; control1Y: 164.928; control2X: -5.908; control2Y: 164.054; x: -5.908; y: 164.054 }
- PathLine { x: -6.383; y: 162.055 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 35.415; y: 151.513 }
- PathCubic { control1X: 35.415; control1Y: 151.513; control2X: 42.375; control2Y: 151.212; x: 40.84; y: 153.274 }
- PathCubic { control1X: 39.306; control1Y: 155.336; control2X: 36.047; control2Y: 154.174; x: 36.047; y: 154.174 }
- PathLine { x: 35.415; y: 151.513 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 45.73; y: 147.088 }
- PathCubic { control1X: 45.73; control1Y: 147.088; control2X: 51.689; control2Y: 143.787; x: 51.155; y: 148.849 }
- PathCubic { control1X: 50.885; control1Y: 151.405; control2X: 46.362; control2Y: 149.749; x: 46.362; y: 149.749 }
- PathLine { x: 45.73; y: 147.088 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 54.862; y: 144.274 }
- PathCubic { control1X: 54.862; control1Y: 144.274; control2X: 62.021; control2Y: 140.573; x: 60.287; y: 146.035 }
- PathCubic { control1X: 59.509; control1Y: 148.485; control2X: 55.493; control2Y: 146.935; x: 55.493; y: 146.935 }
- PathLine { x: 54.862; y: 144.274 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 64.376; y: 139.449 }
- PathCubic { control1X: 64.376; control1Y: 139.449; control2X: 68.735; control2Y: 134.548; x: 69.801; y: 141.21 }
- PathCubic { control1X: 70.207; control1Y: 143.748; control2X: 65.008; control2Y: 142.11; x: 65.008; y: 142.11 }
- PathLine { x: 64.376; y: 139.449 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 26.834; y: 155.997 }
- PathCubic { control1X: 26.834; control1Y: 155.997; control2X: 32.062; control2Y: 155.77; x: 30.91; y: 157.32 }
- PathCubic { control1X: 29.757; control1Y: 158.869; control2X: 27.308; control2Y: 157.996; x: 27.308; y: 157.996 }
- PathLine { x: 26.834; y: 155.997 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 62.434; y: 34.603 }
- PathCubic { control1X: 62.434; control1Y: 34.603; control2X: 61.708; control2Y: 35.268; x: 61.707; y: 34.197 }
- PathCubic { control1X: 61.707; control1Y: 33.127; control2X: 79.191; control2Y: 19.863; x: 88.034; y: 18.479 }
- PathCubic { control1X: 88.034; control1Y: 18.479; control2X: 71.935; control2Y: 25.208; x: 62.434; y: 34.603 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: 65.4; y: 98.4 }
- PathCubic { control1X: 65.4; control1Y: 98.4; control2X: 87.401; control2Y: 120.801; x: 96.601; y: 124.401 }
- PathCubic { control1X: 96.601; control1Y: 124.401; control2X: 105.801; control2Y: 135.601; x: 101.801; y: 161.601 }
- PathCubic { control1X: 101.801; control1Y: 161.601; control2X: 98.601; control2Y: 169.201; x: 95.401; y: 148.401 }
- PathCubic { control1X: 95.401; control1Y: 148.401; control2X: 98.601; control2Y: 123.201; x: 87.401; y: 139.201 }
- PathCubic { control1X: 87.401; control1Y: 139.201; control2X: 79; control2Y: 129.301; x: 85.4; y: 129.601 }
- PathCubic { control1X: 85.4; control1Y: 129.601; control2X: 88.601; control2Y: 131.601; x: 89.001; y: 130.001 }
- PathCubic { control1X: 89.401; control1Y: 128.401; control2X: 81.4; control2Y: 114.801; x: 64.2; y: 100.4 }
- PathCubic { control1X: 47; control1Y: 86; control2X: 65.4; control2Y: 98.4; x: 65.4; y: 98.4 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 7; y: 137.201 }
- PathCubic { control1X: 7; control1Y: 137.201; control2X: 6.8; control2Y: 135.401; x: 8.6; y: 136.201 }
- PathCubic { control1X: 10.4; control1Y: 137.001; control2X: 104.601; control2Y: 143.201; x: 136.201; y: 167.201 }
- PathCubic { control1X: 136.201; control1Y: 167.201; control2X: 91.001; control2Y: 144.001; x: 7; y: 137.201 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 17.4; y: 132.801 }
- PathCubic { control1X: 17.4; control1Y: 132.801; control2X: 17.2; control2Y: 131.001; x: 19; y: 131.801 }
- PathCubic { control1X: 20.8; control1Y: 132.601; control2X: 157.401; control2Y: 131.601; x: 181.001; y: 164.001 }
- PathCubic { control1X: 181.001; control1Y: 164.001; control2X: 159.001; control2Y: 138.801; x: 17.4; y: 132.801 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 29; y: 128.801 }
- PathCubic { control1X: 29; control1Y: 128.801; control2X: 28.8; control2Y: 127.001; x: 30.6; y: 127.801 }
- PathCubic { control1X: 32.4; control1Y: 128.601; control2X: 205.801; control2Y: 115.601; x: 229.401; y: 148.001 }
- PathCubic { control1X: 229.401; control1Y: 148.001; control2X: 219.801; control2Y: 122.401; x: 29; y: 128.801 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 39; y: 124.001 }
- PathCubic { control1X: 39; control1Y: 124.001; control2X: 38.8; control2Y: 122.201; x: 40.6; y: 123.001 }
- PathCubic { control1X: 42.4; control1Y: 123.801; control2X: 164.601; control2Y: 85.2; x: 188.201; y: 117.601 }
- PathCubic { control1X: 188.201; control1Y: 117.601; control2X: 174.801; control2Y: 93; x: 39; y: 124.001 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: -19; y: 146.801 }
- PathCubic { control1X: -19; control1Y: 146.801; control2X: -19.2; control2Y: 145.001; x: -17.4; y: 145.801 }
- PathCubic { control1X: -15.6; control1Y: 146.601; control2X: 2.2; control2Y: 148.801; x: 4.2; y: 187.601 }
- PathCubic { control1X: 4.2; control1Y: 187.601; control2X: -3; control2Y: 145.601; x: -19; y: 146.801 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: -27.8; y: 148.401 }
- PathCubic { control1X: -27.8; control1Y: 148.401; control2X: -28; control2Y: 146.601; x: -26.2; y: 147.401 }
- PathCubic { control1X: -24.4; control1Y: 148.201; control2X: -10.2; control2Y: 143.601; x: -13; y: 182.401 }
- PathCubic { control1X: -13; control1Y: 182.401; control2X: -11.8; control2Y: 147.201; x: -27.8; y: 148.401 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: -35.8; y: 148.801 }
- PathCubic { control1X: -35.8; control1Y: 148.801; control2X: -36; control2Y: 147.001; x: -34.2; y: 147.801 }
- PathCubic { control1X: -32.4; control1Y: 148.601; control2X: -17; control2Y: 149.201; x: -29.4; y: 171.601 }
- PathCubic { control1X: -29.4; control1Y: 171.601; control2X: -19.8; control2Y: 147.601; x: -35.8; y: 148.801 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 11.526; y: 104.465 }
- PathCubic { control1X: 11.526; control1Y: 104.465; control2X: 11.082; control2Y: 106.464; x: 12.631; y: 105.247 }
- PathCubic { control1X: 28.699; control1Y: 92.622; control2X: 61.141; control2Y: 33.72; x: 116.826; y: 28.086 }
- PathCubic { control1X: 116.826; control1Y: 28.086; control2X: 78.518; control2Y: 15.976; x: 11.526; y: 104.465 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 22.726; y: 102.665 }
- PathCubic { control1X: 22.726; control1Y: 102.665; control2X: 21.363; control2Y: 101.472; x: 23.231; y: 100.847 }
- PathCubic { control1X: 25.099; control1Y: 100.222; control2X: 137.541; control2Y: 27.72; x: 176.826; y: 35.686 }
- PathCubic { control1X: 176.826; control1Y: 35.686; control2X: 149.719; control2Y: 28.176; x: 22.726; y: 102.665 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 1.885; y: 108.767 }
- PathCubic { control1X: 1.885; control1Y: 108.767; control2X: 1.376; control2Y: 110.366; x: 3.087; y: 109.39 }
- PathCubic { control1X: 12.062; control1Y: 104.27; control2X: 15.677; control2Y: 47.059; x: 59.254; y: 45.804 }
- PathCubic { control1X: 59.254; control1Y: 45.804; control2X: 26.843; control2Y: 31.09; x: 1.885; y: 108.767 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: -18.038; y: 119.793 }
- PathCubic { control1X: -18.038; control1Y: 119.793; control2X: -19.115; control2Y: 121.079; x: -17.162; y: 120.825 }
- PathCubic { control1X: -6.916; control1Y: 119.493; control2X: 14.489; control2Y: 78.222; x: 58.928; y: 83.301 }
- PathCubic { control1X: 58.928; control1Y: 83.301; control2X: 26.962; control2Y: 68.955; x: -18.038; y: 119.793 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: -6.8; y: 113.667 }
- PathCubic { control1X: -6.8; control1Y: 113.667; control2X: -7.611; control2Y: 115.136; x: -5.742; y: 114.511 }
- PathCubic { control1X: 4.057; control1Y: 111.237; control2X: 17.141; control2Y: 66.625; x: 61.729; y: 63.078 }
- PathCubic { control1X: 61.729; control1Y: 63.078; control2X: 27.603; control2Y: 55.135; x: -6.8; y: 113.667 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: -25.078; y: 124.912 }
- PathCubic { control1X: -25.078; control1Y: 124.912; control2X: -25.951; control2Y: 125.954; x: -24.369; y: 125.748 }
- PathCubic { control1X: -16.07; control1Y: 124.669; control2X: 1.268; control2Y: 91.24; x: 37.264; y: 95.354 }
- PathCubic { control1X: 37.264; control1Y: 95.354; control2X: 11.371; control2Y: 83.734; x: -25.078; y: 124.912 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: -32.677; y: 130.821 }
- PathCubic { control1X: -32.677; control1Y: 130.821; control2X: -33.682; control2Y: 131.866; x: -32.091; y: 131.748 }
- PathCubic { control1X: -27.923; control1Y: 131.439; control2X: 2.715; control2Y: 98.36; x: 21.183; y: 113.862 }
- PathCubic { control1X: 21.183; control1Y: 113.862; control2X: 9.168; control2Y: 95.139; x: -32.677; y: 130.821 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 36.855; y: 98.898 }
- PathCubic { control1X: 36.855; control1Y: 98.898; control2X: 35.654; control2Y: 97.543; x: 37.586; y: 97.158 }
- PathCubic { control1X: 39.518; control1Y: 96.774; control2X: 160.221; control2Y: 39.061; x: 198.184; y: 51.927 }
- PathCubic { control1X: 198.184; control1Y: 51.927; control2X: 172.243; control2Y: 41.053; x: 36.855; y: 98.898 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 3.4; y: 163.201 }
- PathCubic { control1X: 3.4; control1Y: 163.201; control2X: 3.2; control2Y: 161.401; x: 5; y: 162.201 }
- PathCubic { control1X: 6.8; control1Y: 163.001; control2X: 22.2; control2Y: 163.601; x: 9.8; y: 186.001 }
- PathCubic { control1X: 9.8; control1Y: 186.001; control2X: 19.4; control2Y: 162.001; x: 3.4; y: 163.201 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 13.8; y: 161.601 }
- PathCubic { control1X: 13.8; control1Y: 161.601; control2X: 13.6; control2Y: 159.801; x: 15.4; y: 160.601 }
- PathCubic { control1X: 17.2; control1Y: 161.401; control2X: 35; control2Y: 163.601; x: 37; y: 202.401 }
- PathCubic { control1X: 37; control1Y: 202.401; control2X: 29.8; control2Y: 160.401; x: 13.8; y: 161.601 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 20.6; y: 160.001 }
- PathCubic { control1X: 20.6; control1Y: 160.001; control2X: 20.4; control2Y: 158.201; x: 22.2; y: 159.001 }
- PathCubic { control1X: 24; control1Y: 159.801; control2X: 48.6; control2Y: 163.201; x: 72.2; y: 195.601 }
- PathCubic { control1X: 72.2; control1Y: 195.601; control2X: 36.6; control2Y: 158.801; x: 20.6; y: 160.001 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 28.225; y: 157.972 }
- PathCubic { control1X: 28.225; control1Y: 157.972; control2X: 27.788; control2Y: 156.214; x: 29.678; y: 156.768 }
- PathCubic { control1X: 31.568; control1Y: 157.322; control2X: 52.002; control2Y: 155.423; x: 90.099; y: 189.599 }
- PathCubic { control1X: 90.099; control1Y: 189.599; control2X: 43.924; control2Y: 154.656; x: 28.225; y: 157.972 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 38.625; y: 153.572 }
- PathCubic { control1X: 38.625; control1Y: 153.572; control2X: 38.188; control2Y: 151.814; x: 40.078; y: 152.368 }
- PathCubic { control1X: 41.968; control1Y: 152.922; control2X: 76.802; control2Y: 157.423; x: 128.499; y: 192.399 }
- PathCubic { control1X: 128.499; control1Y: 192.399; control2X: 54.324; control2Y: 150.256; x: 38.625; y: 153.572 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: -1.8; y: 142.001 }
- PathCubic { control1X: -1.8; control1Y: 142.001; control2X: -2; control2Y: 140.201; x: -0.2; y: 141.001 }
- PathCubic { control1X: 1.6; control1Y: 141.801; control2X: 55; control2Y: 144.401; x: 85.4; y: 171.201 }
- PathCubic { control1X: 85.4; control1Y: 171.201; control2X: 50.499; control2Y: 146.426; x: -1.8; y: 142.001 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: -11.8; y: 146.001 }
- PathCubic { control1X: -11.8; control1Y: 146.001; control2X: -12; control2Y: 144.201; x: -10.2; y: 145.001 }
- PathCubic { control1X: -8.4; control1Y: 145.801; control2X: 16.2; control2Y: 149.201; x: 39.8; y: 181.601 }
- PathCubic { control1X: 39.8; control1Y: 181.601; control2X: 4.2; control2Y: 144.801; x: -11.8; y: 146.001 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 49.503; y: 148.962 }
- PathCubic { control1X: 49.503; control1Y: 148.962; control2X: 48.938; control2Y: 147.241; x: 50.864; y: 147.655 }
- PathCubic { control1X: 52.79; control1Y: 148.068; control2X: 87.86; control2Y: 150.004; x: 141.981; y: 181.098 }
- PathCubic { control1X: 141.981; control1Y: 181.098; control2X: 64.317; control2Y: 146.704; x: 49.503; y: 148.962 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 57.903; y: 146.562 }
- PathCubic { control1X: 57.903; control1Y: 146.562; control2X: 57.338; control2Y: 144.841; x: 59.264; y: 145.255 }
- PathCubic { control1X: 61.19; control1Y: 145.668; control2X: 96.26; control2Y: 147.604; x: 150.381; y: 178.698 }
- PathCubic { control1X: 150.381; control1Y: 178.698; control2X: 73.317; control2Y: 143.904; x: 57.903; y: 146.562 }
- }
-
- ShapePath {
- fillColor: "#ffffff"
- strokeColor: "#000000"
- strokeWidth: 0.1
- PathMove { x: 67.503; y: 141.562 }
- PathCubic { control1X: 67.503; control1Y: 141.562; control2X: 66.938; control2Y: 139.841; x: 68.864; y: 140.255 }
- PathCubic { control1X: 70.79; control1Y: 140.668; control2X: 113.86; control2Y: 145.004; x: 203.582; y: 179.298 }
- PathCubic { control1X: 203.582; control1Y: 179.298; control2X: 82.917; control2Y: 138.904; x: 67.503; y: 141.562 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -43.8; y: 148.401 }
- PathCubic { control1X: -43.8; control1Y: 148.401; control2X: -38.6; control2Y: 148.001; x: -39.8; y: 149.601 }
- PathCubic { control1X: -41; control1Y: 151.201; control2X: -43.4; control2Y: 150.401; x: -43.4; y: 150.401 }
- PathLine { x: -43.8; y: 148.401 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -13; y: 162.401 }
- PathCubic { control1X: -13; control1Y: 162.401; control2X: -7.8; control2Y: 162.001; x: -9; y: 163.601 }
- PathCubic { control1X: -10.2; control1Y: 165.201; control2X: -12.6; control2Y: 164.401; x: -12.6; y: 164.401 }
- PathLine { x: -13; y: 162.401 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -21.8; y: 162.001 }
- PathCubic { control1X: -21.8; control1Y: 162.001; control2X: -16.6; control2Y: 161.601; x: -17.8; y: 163.201 }
- PathCubic { control1X: -19; control1Y: 164.801; control2X: -21.4; control2Y: 164.001; x: -21.4; y: 164.001 }
- PathLine { x: -21.8; y: 162.001 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -117.169; y: 150.182 }
- PathCubic { control1X: -117.169; control1Y: 150.182; control2X: -112.124; control2Y: 151.505; x: -113.782; y: 152.624 }
- PathCubic { control1X: -115.439; control1Y: 153.744; control2X: -117.446; control2Y: 152.202; x: -117.446; y: 152.202 }
- PathLine { x: -117.169; y: 150.182 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -115.169; y: 140.582 }
- PathCubic { control1X: -115.169; control1Y: 140.582; control2X: -110.124; control2Y: 141.905; x: -111.782; y: 143.024 }
- PathCubic { control1X: -113.439; control1Y: 144.144; control2X: -115.446; control2Y: 142.602; x: -115.446; y: 142.602 }
- PathLine { x: -115.169; y: 140.582 }
- }
-
- ShapePath {
- fillColor: "#000000"
- strokeWidth: -1
- PathMove { x: -122.369; y: 136.182 }
- PathCubic { control1X: -122.369; control1Y: 136.182; control2X: -117.324; control2Y: 137.505; x: -118.982; y: 138.624 }
- PathCubic { control1X: -120.639; control1Y: 139.744; control2X: -122.646; control2Y: 138.202; x: -122.646; y: 138.202 }
- PathLine { x: -122.369; y: 136.182 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -42.6; y: 211.201 }
- PathCubic { control1X: -42.6; control1Y: 211.201; control2X: -44.2; control2Y: 211.201; x: -48.2; y: 213.201 }
- PathCubic { control1X: -50.2; control1Y: 213.201; control2X: -61.4; control2Y: 216.801; x: -67; y: 226.801 }
- PathCubic { control1X: -67; control1Y: 226.801; control2X: -54.6; control2Y: 217.201; x: -42.6; y: 211.201 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 45.116; y: 303.847 }
- PathCubic { control1X: 45.257; control1Y: 304.105; control2X: 45.312; control2Y: 304.525; x: 45.604; y: 304.542 }
- PathCubic { control1X: 46.262; control1Y: 304.582; control2X: 47.495; control2Y: 304.883; x: 47.37; y: 304.247 }
- PathCubic { control1X: 46.522; control1Y: 299.941; control2X: 45.648; control2Y: 295.004; x: 41.515; y: 293.197 }
- PathCubic { control1X: 40.876; control1Y: 292.918; control2X: 39.434; control2Y: 293.331; x: 39.36; y: 294.215 }
- PathCubic { control1X: 39.233; control1Y: 295.739; control2X: 39.116; control2Y: 297.088; x: 39.425; y: 298.554 }
- PathCubic { control1X: 39.725; control1Y: 299.975; control2X: 41.883; control2Y: 299.985; x: 42.8; y: 298.601 }
- PathCubic { control1X: 43.736; control1Y: 300.273; control2X: 44.168; control2Y: 302.116; x: 45.116; y: 303.847 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 34.038; y: 308.581 }
- PathCubic { control1X: 34.786; control1Y: 309.994; control2X: 34.659; control2Y: 311.853; x: 36.074; y: 312.416 }
- PathCubic { control1X: 36.814; control1Y: 312.71; control2X: 38.664; control2Y: 311.735; x: 38.246; y: 310.661 }
- PathCubic { control1X: 37.444; control1Y: 308.6; control2X: 37.056; control2Y: 306.361; x: 35.667; y: 304.55 }
- PathCubic { control1X: 35.467; control1Y: 304.288; control2X: 35.707; control2Y: 303.755; x: 35.547; y: 303.427 }
- PathCubic { control1X: 34.953; control1Y: 302.207; control2X: 33.808; control2Y: 301.472; x: 32.4; y: 301.801 }
- PathCubic { control1X: 31.285; control1Y: 304.004; control2X: 32.433; control2Y: 306.133; x: 33.955; y: 307.842 }
- PathCubic { control1X: 34.091; control1Y: 307.994; control2X: 33.925; control2Y: 308.37; x: 34.038; y: 308.581 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -5.564; y: 303.391 }
- PathCubic { control1X: -5.672; control1Y: 303.014; control2X: -5.71; control2Y: 302.551; x: -5.545; y: 302.23 }
- PathCubic { control1X: -5.014; control1Y: 301.197; control2X: -4.221; control2Y: 300.075; x: -4.558; y: 299.053 }
- PathCubic { control1X: -4.906; control1Y: 297.997; control2X: -6.022; control2Y: 298.179; x: -6.672; y: 298.748 }
- PathCubic { control1X: -7.807; control1Y: 299.742; control2X: -7.856; control2Y: 301.568; x: -8.547; y: 302.927 }
- PathCubic { control1X: -8.743; control1Y: 303.313; control2X: -8.692; control2Y: 303.886; x: -9.133; y: 304.277 }
- PathCubic { control1X: -9.607; control1Y: 304.698; control2X: -10.047; control2Y: 306.222; x: -9.951; y: 306.793 }
- PathCubic { control1X: -9.898; control1Y: 307.106; control2X: -10.081; control2Y: 317.014; x: -9.859; y: 316.751 }
- PathCubic { control1X: -9.24; control1Y: 316.018; control2X: -6.19; control2Y: 306.284; x: -6.121; y: 305.392 }
- PathCubic { control1X: -6.064; control1Y: 304.661; control2X: -5.332; control2Y: 304.196; x: -5.564; y: 303.391 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -31.202; y: 296.599 }
- PathCubic { control1X: -28.568; control1Y: 294.1; control2X: -25.778; control2Y: 291.139; x: -26.22; y: 287.427 }
- PathCubic { control1X: -26.336; control1Y: 286.451; control2X: -28.111; control2Y: 286.978; x: -28.298; y: 287.824 }
- PathCubic { control1X: -29.1; control1Y: 291.449; control2X: -31.139; control2Y: 294.11; x: -33.707; y: 296.502 }
- PathCubic { control1X: -35.903; control1Y: 298.549; control2X: -37.765; control2Y: 304.893; x: -38; y: 305.401 }
- PathCubic { control1X: -34.303; control1Y: 300.145; control2X: -32.046; control2Y: 297.399; x: -31.202; y: 296.599 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -44.776; y: 290.635 }
- PathCubic { control1X: -44.253; control1Y: 290.265; control2X: -44.555; control2Y: 289.774; x: -44.338; y: 289.442 }
- PathCubic { control1X: -43.385; control1Y: 287.984; control2X: -42.084; control2Y: 286.738; x: -42.066; y: 285 }
- PathCubic { control1X: -42.063; control1Y: 284.723; control2X: -42.441; control2Y: 284.414; x: -42.776; y: 284.638 }
- PathCubic { control1X: -43.053; control1Y: 284.822; control2X: -43.395; control2Y: 284.952; x: -43.503; y: 285.082 }
- PathCubic { control1X: -45.533; control1Y: 287.531; control2X: -46.933; control2Y: 290.202; x: -48.376; y: 293.014 }
- PathCubic { control1X: -48.559; control1Y: 293.371; control2X: -49.703; control2Y: 297.862; x: -49.39; y: 297.973 }
- PathCubic { control1X: -49.151; control1Y: 298.058; control2X: -47.431; control2Y: 293.877; x: -47.221; y: 293.763 }
- PathCubic { control1X: -45.958; control1Y: 293.077; control2X: -45.946; control2Y: 291.462; x: -44.776; y: 290.635 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -28.043; y: 310.179 }
- PathCubic { control1X: -27.599; control1Y: 309.31; control2X: -26.023; control2Y: 308.108; x: -26.136; y: 307.219 }
- PathCubic { control1X: -26.254; control1Y: 306.291; control2X: -25.786; control2Y: 304.848; x: -26.698; y: 305.536 }
- PathCubic { control1X: -27.955; control1Y: 306.484; control2X: -31.404; control2Y: 307.833; x: -31.674; y: 313.641 }
- PathCubic { control1X: -31.7; control1Y: 314.212; control2X: -28.726; control2Y: 311.519; x: -28.043; y: 310.179 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -13.6; y: 293.001 }
- PathCubic { control1X: -13.2; control1Y: 292.333; control2X: -12.492; control2Y: 292.806; x: -12.033; y: 292.543 }
- PathCubic { control1X: -11.385; control1Y: 292.171; control2X: -10.774; control2Y: 291.613; x: -10.482; y: 290.964 }
- PathCubic { control1X: -9.512; control1Y: 288.815; control2X: -7.743; control2Y: 286.995; x: -7.6; y: 284.601 }
- PathCubic { control1X: -9.091; control1Y: 283.196; control2X: -9.77; control2Y: 285.236; x: -10.4; y: 286.201 }
- PathCubic { control1X: -11.723; control1Y: 284.554; control2X: -12.722; control2Y: 286.428; x: -14.022; y: 286.947 }
- PathCubic { control1X: -14.092; control1Y: 286.975; control2X: -14.305; control2Y: 286.628; x: -14.38; y: 286.655 }
- PathCubic { control1X: -15.557; control1Y: 287.095; control2X: -16.237; control2Y: 288.176; x: -17.235; y: 288.957 }
- PathCubic { control1X: -17.406; control1Y: 289.091; control2X: -17.811; control2Y: 288.911; x: -17.958; y: 289.047 }
- PathCubic { control1X: -18.61; control1Y: 289.65; control2X: -19.583; control2Y: 289.975; x: -19.863; y: 290.657 }
- PathCubic { control1X: -20.973; control1Y: 293.364; control2X: -24.113; control2Y: 295.459; x: -26; y: 303.001 }
- PathCubic { control1X: -25.619; control1Y: 303.91; control2X: -21.488; control2Y: 296.359; x: -21.001; y: 295.661 }
- PathCubic { control1X: -20.165; control1Y: 294.465; control2X: -20.047; control2Y: 297.322; x: -18.771; y: 296.656 }
- PathCubic { control1X: -18.72; control1Y: 296.629; control2X: -18.534; control2Y: 296.867; x: -18.4; y: 297.001 }
- PathCubic { control1X: -18.206; control1Y: 296.721; control2X: -17.988; control2Y: 296.492; x: -17.6; y: 296.601 }
- PathCubic { control1X: -17.6; control1Y: 296.201; control2X: -17.734; control2Y: 295.645; x: -17.533; y: 295.486 }
- PathCubic { control1X: -16.296; control1Y: 294.509; control2X: -16.38; control2Y: 293.441; x: -15.6; y: 292.201 }
- PathCubic { control1X: -15.142; control1Y: 292.99; control2X: -14.081; control2Y: 292.271; x: -13.6; y: 293.001 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 46.2; y: 347.401 }
- PathCubic { control1X: 46.2; control1Y: 347.401; control2X: 53.6; control2Y: 327.001; x: 49.2; y: 315.801 }
- PathCubic { control1X: 49.2; control1Y: 315.801; control2X: 60.6; control2Y: 337.401; x: 56; y: 348.601 }
- PathCubic { control1X: 56; control1Y: 348.601; control2X: 55.6; control2Y: 338.201; x: 51.6; y: 333.201 }
- PathCubic { control1X: 51.6; control1Y: 333.201; control2X: 47.6; control2Y: 346.001; x: 46.2; y: 347.401 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 31.4; y: 344.801 }
- PathCubic { control1X: 31.4; control1Y: 344.801; control2X: 36.8; control2Y: 336.001; x: 28.8; y: 317.601 }
- PathCubic { control1X: 28.8; control1Y: 317.601; control2X: 28; control2Y: 338.001; x: 21.2; y: 349.001 }
- PathCubic { control1X: 21.2; control1Y: 349.001; control2X: 35.4; control2Y: 328.801; x: 31.4; y: 344.801 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 21.4; y: 342.801 }
- PathCubic { control1X: 21.4; control1Y: 342.801; control2X: 21.2; control2Y: 322.801; x: 21.6; y: 319.801 }
- PathCubic { control1X: 21.6; control1Y: 319.801; control2X: 17.8; control2Y: 336.401; x: 7.6; y: 346.001 }
- PathCubic { control1X: 7.6; control1Y: 346.001; control2X: 22; control2Y: 334.001; x: 21.4; y: 342.801 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 11.8; y: 310.801 }
- PathCubic { control1X: 11.8; control1Y: 310.801; control2X: 17.8; control2Y: 324.401; x: 7.8; y: 342.801 }
- PathCubic { control1X: 7.8; control1Y: 342.801; control2X: 14.2; control2Y: 330.601; x: 9.4; y: 323.601 }
- PathCubic { control1X: 9.4; control1Y: 323.601; control2X: 12; control2Y: 320.201; x: 11.8; y: 310.801 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -7.4; y: 342.401 }
- PathCubic { control1X: -7.4; control1Y: 342.401; control2X: -8.4; control2Y: 326.801; x: -6.6; y: 324.601 }
- PathCubic { control1X: -6.6; control1Y: 324.601; control2X: -6.4; control2Y: 318.201; x: -6.8; y: 317.201 }
- PathCubic { control1X: -6.8; control1Y: 317.201; control2X: -2.8; control2Y: 311.001; x: -2.6; y: 318.401 }
- PathCubic { control1X: -2.6; control1Y: 318.401; control2X: -1.2; control2Y: 326.201; x: 1.6; y: 330.801 }
- PathCubic { control1X: 1.6; control1Y: 330.801; control2X: 5.2; control2Y: 336.201; x: 5; y: 342.601 }
- PathCubic { control1X: 5; control1Y: 342.601; control2X: -5; control2Y: 312.401; x: -7.4; y: 342.401 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -11; y: 314.801 }
- PathCubic { control1X: -11; control1Y: 314.801; control2X: -17.6; control2Y: 325.601; x: -19.4; y: 344.601 }
- PathCubic { control1X: -19.4; control1Y: 344.601; control2X: -20.8; control2Y: 338.401; x: -17; y: 324.001 }
- PathCubic { control1X: -17; control1Y: 324.001; control2X: -12.8; control2Y: 308.601; x: -11; y: 314.801 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -32.8; y: 334.601 }
- PathCubic { control1X: -32.8; control1Y: 334.601; control2X: -27.8; control2Y: 329.201; x: -26.4; y: 324.201 }
- PathCubic { control1X: -26.4; control1Y: 324.201; control2X: -22.8; control2Y: 308.401; x: -29.2; y: 317.001 }
- PathCubic { control1X: -29.2; control1Y: 317.001; control2X: -29; control2Y: 325.001; x: -37.2; y: 332.401 }
- PathCubic { control1X: -37.2; control1Y: 332.401; control2X: -32.4; control2Y: 330.001; x: -32.8; y: 334.601 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -38.6; y: 329.601 }
- PathCubic { control1X: -38.6; control1Y: 329.601; control2X: -35.2; control2Y: 312.201; x: -34.4; y: 311.401 }
- PathCubic { control1X: -34.4; control1Y: 311.401; control2X: -32.6; control2Y: 308.001; x: -35.4; y: 311.201 }
- PathCubic { control1X: -35.4; control1Y: 311.201; control2X: -44.2; control2Y: 330.401; x: -48.2; y: 337.001 }
- PathCubic { control1X: -48.2; control1Y: 337.001; control2X: -40.2; control2Y: 327.801; x: -38.6; y: 329.601 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -44.4; y: 313.001 }
- PathCubic { control1X: -44.4; control1Y: 313.001; control2X: -32.8; control2Y: 290.601; x: -54.6; y: 316.401 }
- PathCubic { control1X: -54.6; control1Y: 316.401; control2X: -43.6; control2Y: 306.601; x: -44.4; y: 313.001 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: -59.8; y: 298.401 }
- PathCubic { control1X: -59.8; control1Y: 298.401; control2X: -55; control2Y: 279.601; x: -52.4; y: 279.801 }
- PathCubic { control1X: -52.4; control1Y: 279.801; control2X: -44.2; control2Y: 270.801; x: -50.8; y: 281.401 }
- PathCubic { control1X: -50.8; control1Y: 281.401; control2X: -56.8; control2Y: 291.001; x: -56.2; y: 300.801 }
- PathCubic { control1X: -56.2; control1Y: 300.801; control2X: -56.8; control2Y: 291.201; x: -59.8; y: 298.401 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 270.5; y: 287 }
- PathCubic { control1X: 270.5; control1Y: 287; control2X: 258.5; control2Y: 277; x: 256; y: 273.5 }
- PathCubic { control1X: 256; control1Y: 273.5; control2X: 269.5; control2Y: 292; x: 269.5; y: 299 }
- PathCubic { control1X: 269.5; control1Y: 299; control2X: 272; control2Y: 291.5; x: 270.5; y: 287 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 276; y: 265 }
- PathCubic { control1X: 276; control1Y: 265; control2X: 255; control2Y: 250; x: 251.5; y: 242.5 }
- PathCubic { control1X: 251.5; control1Y: 242.5; control2X: 278; control2Y: 272; x: 278; y: 276.5 }
- PathCubic { control1X: 278; control1Y: 276.5; control2X: 278.5; control2Y: 267.5; x: 276; y: 265 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 293; y: 111 }
- PathCubic { control1X: 293; control1Y: 111; control2X: 281; control2Y: 103; x: 279.5; y: 105 }
- PathCubic { control1X: 279.5; control1Y: 105; control2X: 290; control2Y: 111.5; x: 292.5; y: 120 }
- PathCubic { control1X: 292.5; control1Y: 120; control2X: 291; control2Y: 111; x: 293; y: 111 }
- }
-
- ShapePath {
- fillColor: "#cccccc"
- strokeWidth: -1
- PathMove { x: 301.5; y: 191.5 }
- PathLine { x: 284; y: 179.5 }
- PathCubic { control1X: 284; control1Y: 179.5; control2X: 303; control2Y: 196.5; x: 303.5; y: 200.5 }
- PathLine { x: 301.5; y: 191.5 }
- }
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "#000000"
- strokeWidth: 1
- PathMove { x: -89.25; y: 169 }
- PathLine { x: -67.25; y: 173.75 }
- }
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "#000000"
- strokeWidth: 1
- PathMove { x: -39; y: 331 }
- PathCubic { control1X: -39; control1Y: 331; control2X: -39.5; control2Y: 327.5; x: -48.5; y: 338 }
- }
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "#000000"
- strokeWidth: 1
- PathMove { x: -33.5; y: 336 }
- PathCubic { control1X: -33.5; control1Y: 336; control2X: -31.5; control2Y: 329.5; x: -38; y: 334 }
- }
-
- ShapePath {
- fillColor: "transparent"
- strokeColor: "#000000"
- strokeWidth: 1
- PathMove { x: 20.5; y: 344.5 }
- PathCubic { control1X: 20.5; control1Y: 344.5; control2X: 22; control2Y: 333.5; x: 10.5; y: 346.5 }
- }
-
- Shape {
- x: -184; y: -144; width: parent.width; height: parent.height
- opacity: tapHandler.pressed ? 1 : 0
- containsMode: Shape.FillContains
-
- TapHandler { id: tapHandler }
-
- ShapePath {
- strokeColor: "red"
- strokeWidth: 4
- fillColor: "transparent"
- PathSvg { path: `m 325.03711,0.5
- c -26.61408,6.4494547 -49.95197,2.1018066 -76.21132,1.0771669
- -22.26577,7.6817151 -47.96405,9.3627181 -65.67832,25.8497861
- -15.74718,12.80008 -41.1564,19.605644 -45.74903,40.600391
- -12.46933,17.76181 -25.36105,35.720146 -29.20117,57.999996
- -18.709864,3.10961 -16.347355,30.83801 -22.385143,46.675
- -6.848711,11.2677 11.07278,24.69174 -8.514666,27.97383
- -10.266901,5.61543 -12.859313,28.96588 -13.732346,5.78143
- 0.940083,-11.53398 -13.486195,-38.30626 -16.81701,-34.20231
- 14.608079,7.8234 21.299281,50.52979 11.380052,48.14418
- -3.406456,-15.12428 -26.181106,-38.29457 -31.849471,-35.62945
- 16.851912,6.41472 35.569884,31.75215 28.172486,47.93115
- -7.906485,-15.42757 -37.758959,-35.53783 -44.275447,-31.28685
- 18.975831,1.7428 37.986009,20.68109 42.87115,37.14427 C
- 42.279655,225.774 9.879724,213.57795 4.7080253,219.04989
- 20.780803,212.57418 55.055919,239.88547 49.602579,241.25683
- 38.186641,230.40078 6.6930104,222.77983 2.5752529,228.41774 c
- 13.6045481,-8.33065 49.4437901,14.89041 43.5525671,14.2358
- -9.759981,-7.96123 -43.5842921,7.36937 -17.554974,-1.20248
- 9.464499,-3.73452 40.555672,12.80659 16.398749,5.14121
- -9.1987,-7.28225 -39.0013156,3.37352 -14.121965,-2.12828
- 13.244874,-0.0206 35.758428,14.62706 10.562447,6.42228
- -10.780465,-8.4873 -47.8282254,11.10651 -21.027329,-0.003
- 11.640859,-4.82877 52.615601,10.74471 24.234828,8.2659
- -10.695834,-7.03902 -42.9384162,8.93905 -34.227854,5.58373
- 9.077539,-8.56443 49.068801,-5.28097 43.06838,0.45546
- -10.900893,-0.7118 -27.449619,17.27258 -10.00187,3.46526
- 15.705191,-9.18198 18.344231,9.31645 1.10807,8.73907
- -9.908444,1.77856 -21.108189,20.66671 -7.974821,4.92019
- 15.750746,-14.10374 34.01348,2.07267 9.796961,8.69337
- -8.17128,5.49929 -12.642664,19.13654 -3.994573,4.19708
- 9.044753,-8.7077 23.850399,-13.64552 21.404959,4.02329
- 12.509737,17.12562 51.158782,11.0442 45.106112,43.34009
- -0.65006,10.05318 -3.79228,13.95389 1.62128,14.30064
- -4.30913,8.82737 -14.652714,37.9591 2.92144,17.46024
- 7.37972,-3.68333 -7.62399,16.24161 -7.98007,23.83761
- -9.336865,18.77418 19.74873,-18.55943 6.62229,5.46195
- 5.46464,-3.7389 36.23886,-19.41901 14.78167,0.58987
- -8.59505,4.55644 29.29441,-2.99423 8.95489,6.47134 -9.22562,5.54437
- -24.09765,26.79976 -11.73274,22.20385 -0.81685,5.4936
- -1.58629,21.47626 2.34158,9.14886 1.61237,14.67029
- -2.38384,25.22225 12.26908,15.1741 -4.40761,8.01039
- -8.23679,36.91214 5.12235,17.92578 1.53454,2.99551 9.37569,3.1726
- 7.15304,14.93579 3.51234,-11.31873 18.4607,-29.83809
- 12.36869,-6.48005 -0.22629,16.26174 5.44303,-7.24791
- 6.56926,10.49819 12.45412,28.9931 3.40908,-41.89883
- 17.52051,-9.19238 3.23093,11.1924 6.53006,29.46941 7.55984,5.1249
- 15.37236,-19.52583 4.09776,20.07416 12.64063,1.48215
- 18.11247,-24.55068 -8.92586,38.39355 6.73828,6.62225
- 4.55353,-6.91007 15.35028,-38.88977 12.55806,-13.78666
- 1.05309,27.02664 11.54743,-24.40259 12.40657,6.86306
- -1.72561,13.28253 11.85393,-24.15909 13.85568,-1.38002
- 3.12455,8.33539 8.76536,26.46432 8.73882,5.09231 3.57025,-10.37352
- -16.025,-37.75672 0.20707,-22.5788 -1.2458,-14.17213
- -2.38918,-16.90145 10.85489,-6.71468 -16.57629,-17.22152
- 0.19706,-26.08949 5.7751,-19.14889 -14.91681,-16.1674
- 19.74174,7.19334 2.31875,-9.86869 -4.32508,-15.23278
- 27.25228,29.12341 20.27514,18.81172 -11.97527,-18.92603
- -17.96305,-45.80333 11.70099,-51.52566 17.19069,-9.57351
- 31.17452,21.93154 38.50541,1.56304 16.26048,-4.6633
- 22.3749,38.26516 24.86349,9.11316 5.94153,-9.9731 30.14313,6.97379
- 36.34294,4.75012 7.07435,18.27732 8.06778,14.78971 11.04264,3.86016
- 2.73754,-15.85945 28.7269,10.06391 28.09146,25.96561 3.00672,2.4754
- 6.55025,-22.10264 11.23552,-14.43872 2.84155,-11.4823
- -3.28976,-27.88574 4.24895,-25.5189 -0.61494,-11.53957
- 22.83611,0.11011 10.64648,-15.28756 -6.5587,-21.38598
- 9.32959,-3.0159 13.5107,-4.69375 -1.38592,-16.74533
- -8.66673,-31.83316 -1.90087,-41.0875 2.39623,-15.14303
- -12.50533,-44.45478 -4.70573,-48.49375 15.08472,3.42779
- -20.39159,-42.17451 -1.69776,-40.85728 24.07272,21.63552
- -3.65989,-30.10299 2.27233,-33.17152 16.90643,17.53071
- -12.7383,-38.42821 6.79531,-21.57013 -4.50946,-21.08135
- -2.53357,-37.43561 -15.5535,-55.59527 -11.0035,-12.40086
- -1.87775,-7.12745 1.34831,-8.11755 C 468.27562,118.9774
- 451.40746,102.656 430.98897,92.119168 439.06192,78.203836
- 455.88012,60.123881 457.38638,40.337815 463.2373,23.183067
- 450.82861,4.7342783 435.04883,22.626367 409.5188,28.206712
- 386.3569,24.131269 365.63904,8.0954152 352.788,2.8857182
- 338.88892,0.40735091 325.03711,0.5 Z m -219.0625,357.04297
- -0.97656,0.88476 z`
- }
- }
- }
-}
-
diff --git a/examples/quick/shapes/tigerLoader.qml b/examples/quick/shapes/tigerLoader.qml
deleted file mode 100644
index 302d8cac27..0000000000
--- a/examples/quick/shapes/tigerLoader.qml
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Shapes
-
-Rectangle {
- color: "lightGray"
- width: 256
- height: 256
-
- Item {
- anchors.fill: parent
-
- Text {
- anchors.centerIn: parent
- text: "Loading"
- // Phase #1: Loader loads tiger.qml. After this we have our item.
- // Phase #2: With some backends (generic) the item will start async processing. Wait for this too.
- visible: shapeLoader.status != Loader.Ready || shapeLoader.item.status === Shape.Processing
- }
-
- Loader {
- id: shapeLoader
- anchors.fill: parent
- source: "tiger.qml"
- asynchronous: true
- visible: status == Loader.Ready
- scale: 0.4
- }
- }
-}
diff --git a/examples/quick/shared/CMakeLists.txt b/examples/quick/shared/CMakeLists.txt
index 159f1e8699..7382df7689 100644
--- a/examples/quick/shared/CMakeLists.txt
+++ b/examples/quick/shared/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
set_source_files_properties(CheckBox.qml TabSet.qml TextField.qml
PROPERTIES
@@ -16,13 +16,11 @@ qt_add_qml_module(${PROJECT_NAME}_shared
URI shared
VERSION 2.2
PLUGIN_TARGET ${PROJECT_NAME}_shared
- AUTO_RESOURCE_PREFIX
SOURCES
"shared.h"
QML_FILES
"Button.qml"
"CheckBox.qml"
- "FlickrRssModel.qml"
"Label.qml"
"LauncherList.qml"
"SimpleLauncherDelegate.qml"
@@ -38,23 +36,3 @@ qt_add_qml_module(${PROJECT_NAME}_shared
"images/slider_handle.png"
"images/tab.png"
)
-
-include(QtBundleQmlModuleForMacOS.cmake)
-# Puts the shared qml module plugin and qmldir into the macOS app bundle directory.
-# Only call this function if your main project has the MACOSX_BUNDLE option set.
-function(bundle_shared app_target)
- set(qml_plugin_target "${PROJECT_NAME}_shared")
- set(qml_module_uri "shared")
- add_qml_module_to_macos_app_bundle(
- "${app_target}" "${qml_plugin_target}" "${qml_module_uri}")
-endfunction()
-
-set(INSTALL_SHAREDDIR "${INSTALL_EXAMPLESDIR}/quick/${PROJECT_NAME}/shared")
-install(TARGETS ${PROJECT_NAME}_shared
- RUNTIME DESTINATION "${INSTALL_SHAREDDIR}"
- LIBRARY DESTINATION "${INSTALL_SHAREDDIR}"
-)
-
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qmldir
- DESTINATION "${INSTALL_SHAREDDIR}"
-)
diff --git a/examples/quick/shared/FlickrRssModel.qml b/examples/quick/shared/FlickrRssModel.qml
deleted file mode 100644
index e78d1ffa21..0000000000
--- a/examples/quick/shared/FlickrRssModel.qml
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-ListModel {
- id: flickrImages
- property string tags : ""
- readonly property string queryUrl : "http://api.flickr.com/services/feeds/photos_public.gne?"
-
- function encodeParams(x) {
- return encodeURIComponent(x.replace(" ",","));
- }
- function fetchImages(format) {
- var requestURL = queryUrl + (tags ? "tags="+encodeParams(tags)+"&" : "") + "format=" + format + "&nojsoncallback=1";
- var xhr = new XMLHttpRequest;
- xhr.onreadystatechange = function() {
- if (xhr.readyState === XMLHttpRequest.DONE) {
-
- if (xhr.status !== 200) {
- console.log("Failed to get images from flickr. status code: " + xhr.status);
- return;
- }
-
- var jsonText = xhr.responseText;
- var objArray = JSON.parse(jsonText.replace(/\'/g,"'"))
- if (objArray.errors !== undefined)
- console.log("Error fetching tweets: " + objArray.errors[0].message)
- else {
- for (var key in objArray.items) {
- var rssItem = objArray.items[key];
- var jsonObject = "{ \"title\": \"" + rssItem.title +"\",\"media\": \"" + rssItem.media.m + "\", \"thumbnail\": \"" + rssItem.media.m.replace(/\_m\.jpg/,"_s.jpg") +"\"}"
- flickrImages.append(JSON.parse(jsonObject));
- }
- }
- }
- }
- xhr.open("GET", requestURL, true);
- xhr.send();
- }
- Component.onCompleted: {
- fetchImages("json");
- }
-}
-
diff --git a/examples/quick/shared/LauncherList.qml b/examples/quick/shared/LauncherList.qml
index ee8fc3984e..f86ab80446 100644
--- a/examples/quick/shared/LauncherList.qml
+++ b/examples/quick/shared/LauncherList.qml
@@ -174,22 +174,26 @@ Rectangle {
id: back
source: "images/back.png"
anchors.verticalCenter: parent.verticalCenter
- anchors.verticalCenterOffset: 2
+ anchors.verticalCenterOffset: 1
anchors.left: parent.left
- anchors.leftMargin: 16
+ anchors.leftMargin: 6
+ width: 38
+ height: 31
+ fillMode: Image.Pad
+ horizontalAlignment: Image.AlignHCenter
+ verticalAlignment: Image.AlignVCenter
TapHandler {
id: tapHandler
enabled: root.activePageCount > 0
+ gesturePolicy: TapHandler.ReleaseWithinBounds
+ longPressThreshold: 0
onTapped: {
pageContainer.children[pageContainer.children.length - 1].exit()
}
}
Rectangle {
- anchors.centerIn: back
- width: 38
- height: 31
- anchors.verticalCenterOffset: -1
+ anchors.fill: parent
opacity: tapHandler.pressed ? 1 : 0
Behavior on opacity { NumberAnimation{ duration: 100 }}
gradient: Gradient {
diff --git a/examples/quick/shared/QtBundleQmlModuleForMacOS.cmake b/examples/quick/shared/QtBundleQmlModuleForMacOS.cmake
deleted file mode 100644
index 06d1487323..0000000000
--- a/examples/quick/shared/QtBundleQmlModuleForMacOS.cmake
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-function(add_qml_module_to_macos_app_bundle app_target qml_plugin_target qml_module_uri)
- if(QT6_IS_SHARED_LIBS_BUILD AND APPLE)
- # The application's main.cpp adds an explicit QML import path to look for qml module plugins
- # under a PlugIns subdirectory of a macOS app bundle.
- # Copy the qmldir and shared library qml plugin.
-
- # Ensure the executable depends on the plugin so the plugin is copied
- # only after it was built.
- add_dependencies(${app_target} ${qml_plugin_target})
-
- set(app_dir "$<TARGET_FILE_DIR:${app_target}>")
-
- string(REGEX REPLACE "[^A-Za-z0-9]" "_" escaped_uri "${qml_module_uri}")
-
- set(dest_module_dir_in_app_bundle "${app_dir}/../PlugIns/${escaped_uri}")
-
- set(qml_plugin_dir "$<TARGET_FILE_DIR:${qml_plugin_target}>")
- set(qmldir_file "${qml_plugin_dir}/qmldir")
-
- add_custom_command(TARGET ${app_target} POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E make_directory ${dest_module_dir_in_app_bundle}
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- $<TARGET_FILE:${qml_plugin_target}> ${dest_module_dir_in_app_bundle}
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- ${qmldir_file} ${dest_module_dir_in_app_bundle}
- )
- endif()
-endfunction()
-
diff --git a/examples/quick/shared/SimpleLauncherDelegate.qml b/examples/quick/shared/SimpleLauncherDelegate.qml
index c6ca9802d2..a6ac090b34 100644
--- a/examples/quick/shared/SimpleLauncherDelegate.qml
+++ b/examples/quick/shared/SimpleLauncherDelegate.qml
@@ -9,7 +9,7 @@ Rectangle {
property Item exampleItem
width: ListView.view.width
- height: button.implicitHeight + 22
+ height: col.implicitHeight + 22
signal clicked()
@@ -22,10 +22,18 @@ Rectangle {
GradientStop {
position: 1
Behavior on color {ColorAnimation { duration: 100 }}
- color: tapHandler.pressed ? "#e0e0e0" : button.containsMouse ? "#f5f5f5" : "#eee"
+ color: tapHandler.pressed ? "#e0e0e0" : hoverHandler.hovered ? "#f5f5f5" : "#eee"
}
}
+ TapHandler {
+ id: tapHandler
+ onTapped: container.clicked()
+ }
+ HoverHandler {
+ id: hoverHandler
+ }
+
Image {
id: image
opacity: 0.7
@@ -36,53 +44,28 @@ Rectangle {
anchors.rightMargin: 16
}
- Item {
- id: button
- anchors.top: parent.top
+ Column {
+ id: col
+ spacing: 2
anchors.left: parent.left
- anchors.bottom: parent.bottom
anchors.right:image.left
- implicitHeight: col.height
- height: implicitHeight
- width: buttonLabel.width + 20
- property alias containsMouse: hoverHandler.hovered
-
- TapHandler {
- id: tapHandler
- onTapped: container.clicked()
- }
- HoverHandler {
- id: hoverHandler
+ anchors.margins: 10
+ anchors.verticalCenter: parent.verticalCenter
+ Text {
+ width: parent.width
+ text: container.name
+ color: "black"
+ font.pixelSize: 22
+ wrapMode: Text.WrapAtWordBoundaryOrAnywhere
+ styleColor: "white"
+ style: Text.Raised
}
-
- Column {
- spacing: 2
- id: col
- anchors.verticalCenter: parent.verticalCenter
+ Text {
width: parent.width
- Text {
- id: buttonLabel
- anchors.left: parent.left
- anchors.leftMargin: 10
- anchors.right: parent.right
- anchors.rightMargin: 10
- text: container.name
- color: "black"
- font.pixelSize: 22
- wrapMode: Text.WrapAtWordBoundaryOrAnywhere
- styleColor: "white"
- style: Text.Raised
-
- }
- Text {
- id: buttonLabel2
- anchors.left: parent.left
- anchors.leftMargin: 10
- text: container.description
- wrapMode: Text.WrapAtWordBoundaryOrAnywhere
- color: "#666"
- font.pixelSize: 12
- }
+ text: container.description
+ wrapMode: Text.WrapAtWordBoundaryOrAnywhere
+ color: "#666"
+ font.pixelSize: 12
}
}
diff --git a/examples/quick/shared/qmldir b/examples/quick/shared/qmldir
index 5ccdf60219..8a3d856a08 100644
--- a/examples/quick/shared/qmldir
+++ b/examples/quick/shared/qmldir
@@ -1,7 +1,6 @@
module shared
Button 2.0 Button.qml
CheckBox 2.1 CheckBox.qml
-FlickrRssModel 2.0 FlickrRssModel.qml
Label 2.0 Label.qml
LauncherList 2.0 LauncherList.qml
SimpleLauncherDelegate 2.0 SimpleLauncherDelegate.qml
diff --git a/examples/quick/shared/shared.qrc b/examples/quick/shared/shared.qrc
index 67f69c9c8d..054db1f352 100644
--- a/examples/quick/shared/shared.qrc
+++ b/examples/quick/shared/shared.qrc
@@ -2,7 +2,6 @@
<qresource prefix="/qt/qml/shared">
<file>Button.qml</file>
<file>CheckBox.qml</file>
- <file>FlickrRssModel.qml</file>
<file>Images.qml</file>
<file>Label.qml</file>
<file>LauncherList.qml</file>
diff --git a/examples/quick/tableview/gameoflife/CMakeLists.txt b/examples/quick/tableview/gameoflife/CMakeLists.txt
index 8195fba9f6..0af748fc80 100644
--- a/examples/quick/tableview/gameoflife/CMakeLists.txt
+++ b/examples/quick/tableview/gameoflife/CMakeLists.txt
@@ -1,34 +1,27 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(gameoflife LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/tableview/gameoflife")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(gameoflife
+ WIN32
+ MACOSX_BUNDLE
gameoflifemodel.cpp gameoflifemodel.h
main.cpp
)
-set_target_properties(gameoflife PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(gameoflife PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+target_link_libraries(gameoflife PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(gameoflife
@@ -41,7 +34,16 @@ qt_add_qml_module(gameoflife
)
install(TARGETS gameoflife
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET gameoflife
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/tableview/gameoflife/doc/src/gameoflife.qdoc b/examples/quick/tableview/gameoflife/doc/src/gameoflife.qdoc
index c7fffacecf..b8d594d598 100644
--- a/examples/quick/tableview/gameoflife/doc/src/gameoflife.qdoc
+++ b/examples/quick/tableview/gameoflife/doc/src/gameoflife.qdoc
@@ -5,6 +5,7 @@
\example tableview/gameoflife
\brief The \e{Conway’s Game of Life} example shows how the QML TableView
type can be used to display a C++ model that the user can pan around.
+ \examplecategory {Graphics}
\image gameoflife.png
\ingroup qtquickexamples
diff --git a/examples/quick/tableview/gameoflife/main.qml b/examples/quick/tableview/gameoflife/main.qml
index bedb624223..55c5b193f8 100644
--- a/examples/quick/tableview/gameoflife/main.qml
+++ b/examples/quick/tableview/gameoflife/main.qml
@@ -74,6 +74,7 @@ ApplicationWindow {
text: qsTr("Next")
onClicked: gameOfLifeModel.nextStep()
Layout.rightMargin: 50
+ Layout.fillWidth: false
}
//! [next]
@@ -82,10 +83,12 @@ ApplicationWindow {
from: 0
to: 1
value: 0.9
+ Layout.fillWidth: false
}
Button {
text: timer.running ? "❙❙" : "▶️"
+ Layout.fillWidth: false
onClicked: timer.running = !timer.running
}
}
diff --git a/examples/quick/tableview/pixelator/CMakeLists.txt b/examples/quick/tableview/pixelator/CMakeLists.txt
index 6de15b8615..de24974bcd 100644
--- a/examples/quick/tableview/pixelator/CMakeLists.txt
+++ b/examples/quick/tableview/pixelator/CMakeLists.txt
@@ -1,34 +1,27 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(qml_pixelator LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/tableview/pixelator")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(qml_pixelator
+ WIN32
+ MACOSX_BUNDLE
imagemodel.cpp imagemodel.h
main.cpp
)
-set_target_properties(qml_pixelator PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(qml_pixelator PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+target_link_libraries(qml_pixelator PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(qml_pixelator
@@ -39,7 +32,16 @@ qt_add_qml_module(qml_pixelator
)
install(TARGETS qml_pixelator
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET qml_pixelator
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/tableview/pixelator/doc/src/pixelator.qdoc b/examples/quick/tableview/pixelator/doc/src/pixelator.qdoc
index 552b70e198..35d3ac6732 100644
--- a/examples/quick/tableview/pixelator/doc/src/pixelator.qdoc
+++ b/examples/quick/tableview/pixelator/doc/src/pixelator.qdoc
@@ -5,6 +5,7 @@
\example tableview/pixelator
\brief The Pixelator example shows how a QML TableView and a delegate
can be used for custom table models.
+ \examplecategory {Graphics}
\image qt-pixelator.png
\ingroup qtquickexamples
diff --git a/examples/quick/text/CMakeLists.txt b/examples/quick/text/CMakeLists.txt
index 31076c5339..5560256793 100644
--- a/examples/quick/text/CMakeLists.txt
+++ b/examples/quick/text/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(text LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/text")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../shared" "shared")
@@ -23,17 +17,16 @@ qt_add_executable(textexample
)
target_link_libraries(textexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
add_dependencies(textexample text_shared)
qt_add_qml_module(textexample
URI text
- AUTO_RESOURCE_PREFIX
QML_FILES
"fonts/availableFonts.qml"
"fonts/banner.qml"
@@ -43,7 +36,6 @@ qt_add_qml_module(textexample
"imgtag/imgtag.qml"
"styledtext-layout.qml"
"text.qml"
- "textselection/textselection.qml"
RESOURCES
"fonts/content/fonts/tarzeau_ocr_a.ttf"
"imgtag/images/face-sad.png"
@@ -52,16 +44,19 @@ qt_add_qml_module(textexample
"imgtag/images/heart200.png"
"imgtag/images/qtlogo.png"
"imgtag/images/starfish_2.png"
- "textselection/pics/endHandle.png"
- "textselection/pics/endHandle.sci"
- "textselection/pics/startHandle.png"
- "textselection/pics/startHandle.sci"
)
install(TARGETS textexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(textexample)
+qt_generate_deploy_qml_app_script(
+ TARGET textexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/text/doc/src/text.qdoc b/examples/quick/text/doc/src/text.qdoc
index 725f8c04bb..9aa5fb2f06 100644
--- a/examples/quick/text/doc/src/text.qdoc
+++ b/examples/quick/text/doc/src/text.qdoc
@@ -6,6 +6,7 @@
\brief This is a collection of QML examples relating to text.
\image qml-text-example.png
\ingroup qtquickexamples
+ \examplecategory {Graphics}
\e Text is a collection of small QML examples relating to text. Each example
is a small QML file, usually containing or emphasizing a particular type or
diff --git a/examples/quick/text/fonts/availableFonts.qml b/examples/quick/text/fonts/availableFonts.qml
index 2564bb6447..7f4f938b48 100644
--- a/examples/quick/text/fonts/availableFonts.qml
+++ b/examples/quick/text/fonts/availableFonts.qml
@@ -4,7 +4,9 @@
import QtQuick
Rectangle {
- width: 320; height: 480; color: "steelblue"
+ width: 320
+ height: 480
+ color: "steelblue"
ListView {
anchors.fill: parent
@@ -13,7 +15,8 @@ Rectangle {
//! [model]
delegate: Item {
- height: 40; width: ListView.view.width
+ height: 40
+ width: ListView.view.width
required property string modelData
Text {
anchors.centerIn: parent
diff --git a/examples/quick/text/fonts/banner.qml b/examples/quick/text/fonts/banner.qml
index 2c0742018a..aae93baea2 100644
--- a/examples/quick/text/fonts/banner.qml
+++ b/examples/quick/text/fonts/banner.qml
@@ -8,17 +8,36 @@ Rectangle {
property int pixelSize: screen.height * 1.25
property color textColor: "lightsteelblue"
- property string text: "Hello world! "
+ readonly property string text: qsTr("Hello world! ")
- width: 320; height: 480
+ width: 320
+ height: 480
color: "steelblue"
Row {
y: -screen.height / 4.5
- NumberAnimation on x { from: 0; to: -text.width; duration: 6000; loops: Animation.Infinite }
- Text { id: text; font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text }
- Text { font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text }
- Text { font.pixelSize: screen.pixelSize; color: screen.textColor; text: screen.text }
+ NumberAnimation on x {
+ from: 0
+ to: -text.width
+ duration: 6000
+ loops: Animation.Infinite
+ }
+ Text {
+ id: text
+ font.pixelSize: screen.pixelSize
+ color: screen.textColor
+ text: screen.text
+ }
+ Text {
+ font.pixelSize: screen.pixelSize
+ color: screen.textColor
+ text: screen.text
+ }
+ Text {
+ font.pixelSize: screen.pixelSize
+ color: screen.textColor
+ text: screen.text
+ }
}
}
diff --git a/examples/quick/text/fonts/fonts.qml b/examples/quick/text/fonts/fonts.qml
index 8e0f906493..84cb6baa20 100644
--- a/examples/quick/text/fonts/fonts.qml
+++ b/examples/quick/text/fonts/fonts.qml
@@ -5,20 +5,32 @@ import QtQuick
Rectangle {
id: root
- property string myText: "The quick brown fox jumps over the lazy dog."
+ readonly property string myText: qsTr("The quick brown fox jumps over the lazy dog.")
- width: 320; height: 480
+ width: 320
+ height: 480
color: "steelblue"
//! [fontloaderlocal]
- FontLoader { id: localFont; source: "content/fonts/tarzeau_ocr_a.ttf" }
+ FontLoader {
+ id: localFont
+ source: "content/fonts/tarzeau_ocr_a.ttf"
+ }
//! [fontloaderlocal]
//! [fontloaderremote]
- FontLoader { id: webFont; source: "http://www.princexml.com/fonts/steffmann/Starburst.ttf" }
+ FontLoader {
+ id: webFont
+ source: "http://www.princexml.com/fonts/steffmann/Starburst.ttf"
+ }
//! [fontloaderremote]
Column {
- anchors { fill: parent; leftMargin: 10; rightMargin: 10; topMargin: 10 }
+ anchors {
+ fill: parent
+ leftMargin: 10
+ rightMargin: 10
+ topMargin: 10
+ }
spacing: 15
Text {
@@ -37,7 +49,11 @@ Rectangle {
width: parent.width
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
- font { family: "Times"; pixelSize: 20; capitalization: Font.AllUppercase }
+ font {
+ family: "Times"
+ pixelSize: 20
+ capitalization: Font.AllUppercase
+ }
}
Text {
text: root.myText
@@ -45,21 +61,35 @@ Rectangle {
width: parent.width
horizontalAlignment: Text.AlignRight
wrapMode: Text.WordWrap
- font { family: "Courier"; pixelSize: 20; weight: Font.Bold; capitalization: Font.AllLowercase }
+ font {
+ family: "Courier"
+ pixelSize: 20
+ weight: Font.Bold
+ capitalization: Font.AllLowercase
+ }
}
Text {
text: root.myText
color: "lightsteelblue"
width: parent.width
wrapMode: Text.WordWrap
- font { family: "Courier"; pixelSize: 20; italic: true; capitalization: Font.SmallCaps }
+ font {
+ family: "Courier"
+ pixelSize: 20
+ italic: true
+ capitalization: Font.SmallCaps
+ }
}
Text {
text: root.myText
color: "lightsteelblue"
width: parent.width
wrapMode: Text.WordWrap
- font { family: localFont.name; pixelSize: 20; capitalization: Font.Capitalize }
+ font {
+ family: localFont.name
+ pixelSize: 20
+ capitalization: Font.Capitalize
+ }
}
Text {
text: {
@@ -70,7 +100,8 @@ Rectangle {
color: "lightsteelblue"
width: parent.width
wrapMode: Text.WordWrap
- font.family: webFont.name; font.pixelSize: 20
+ font.family: webFont.name
+ font.pixelSize: 20
}
}
}
diff --git a/examples/quick/text/fonts/hello.qml b/examples/quick/text/fonts/hello.qml
index e0cdc26ea6..89760b0b4b 100644
--- a/examples/quick/text/fonts/hello.qml
+++ b/examples/quick/text/fonts/hello.qml
@@ -6,24 +6,31 @@ import QtQuick
Rectangle {
id: screen
- width: 320; height: 480
+ width: 320
+ height: 480
color: "black"
Item {
id: container
- x: screen.width / 2; y: screen.height / 2
+ x: screen.width / 2
+ y: screen.height / 2
Text {
id: text
anchors.centerIn: parent
color: "white"
- text: "Hello world!"
+ text: qsTr("Hello world!")
font.pixelSize: 32
//! [letterspacing]
SequentialAnimation on font.letterSpacing {
- loops: Animation.Infinite;
- NumberAnimation { from: 0; to: 50; easing.type: Easing.InQuad; duration: 3000 }
+ loops: Animation.Infinite
+ NumberAnimation {
+ from: 0
+ to: 50
+ easing.type: Easing.InQuad
+ duration: 3000
+ }
ScriptAction {
script: {
container.y = (screen.height / 4) + (Math.random() * screen.height / 2)
@@ -34,9 +41,15 @@ Rectangle {
//! [letterspacing]
SequentialAnimation on opacity {
- loops: Animation.Infinite;
- NumberAnimation { from: 1; to: 0; duration: 2600 }
- PauseAnimation { duration: 400 }
+ loops: Animation.Infinite
+ NumberAnimation {
+ from: 1
+ to: 0
+ duration: 2600
+ }
+ PauseAnimation {
+ duration: 400
+ }
}
}
}
diff --git a/examples/quick/text/styledtext-layout.qml b/examples/quick/text/styledtext-layout.qml
index 4f63d3ea90..1f99729488 100644
--- a/examples/quick/text/styledtext-layout.qml
+++ b/examples/quick/text/styledtext-layout.qml
@@ -5,11 +5,12 @@ import QtQuick
Rectangle {
id: main
- width: 320; height: 480
- focus: true
- property real offset: 0
- property real margin: 8
+ readonly property real margin: 8
+
+ width: 320
+ height: 480
+ focus: true
Text {
id: myText
@@ -47,11 +48,10 @@ Rectangle {
Text {
id: theEndText
- text: "THE\nEND"
+ text: qsTr("THE\nEND")
anchors.centerIn: parent
font.pixelSize: myText.font.pixelSize / 2
}
}
}
-
}
diff --git a/examples/quick/text/text.qml b/examples/quick/text/text.qml
index 8f1c24ebc2..f16c0bf13a 100644
--- a/examples/quick/text/text.qml
+++ b/examples/quick/text/text.qml
@@ -8,15 +8,14 @@ Item {
height: 480
width: 320
LauncherList {
- id: ll
anchors.fill: parent
Component.onCompleted: {
- addExample("Hello", "An Animated Hello World", Qt.resolvedUrl("fonts/hello.qml"));
- addExample("Fonts", "Using various fonts with a Text element", Qt.resolvedUrl("fonts/fonts.qml"));
- addExample("Available Fonts", "A list of your available fonts", Qt.resolvedUrl("fonts/availableFonts.qml"));
- addExample("Banner", "Large, scrolling text", Qt.resolvedUrl("fonts/banner.qml"));
- addExample("Img tag", "Embedding images into text", Qt.resolvedUrl("imgtag/imgtag.qml"));
- addExample("Text Layout", "Flowing text around items", Qt.resolvedUrl("styledtext-layout.qml"));
+ addExample(qsTr("Hello"), qsTr("An Animated Hello World"), Qt.resolvedUrl("fonts/hello.qml"));
+ addExample(qsTr("Fonts"), qsTr("Using various fonts with a Text element"), Qt.resolvedUrl("fonts/fonts.qml"));
+ addExample(qsTr("Available Fonts"), qsTr("A list of your available fonts"), Qt.resolvedUrl("fonts/availableFonts.qml"));
+ addExample(qsTr("Banner"), qsTr("Large, scrolling text"), Qt.resolvedUrl("fonts/banner.qml"));
+ addExample(qsTr("Img tag"), qsTr("Embedding images into text"), Qt.resolvedUrl("imgtag/imgtag.qml"));
+ addExample(qsTr("Text Layout"), qsTr("Flowing text around items"), Qt.resolvedUrl("styledtext-layout.qml"));
}
}
}
diff --git a/examples/quick/text/text.qrc b/examples/quick/text/text.qrc
index a59d66fdbe..8d727c2831 100644
--- a/examples/quick/text/text.qrc
+++ b/examples/quick/text/text.qrc
@@ -13,11 +13,6 @@
<file>imgtag/images/heart200.png</file>
<file>imgtag/images/qtlogo.png</file>
<file>imgtag/images/starfish_2.png</file>
- <file>textselection/textselection.qml</file>
- <file>textselection/pics/endHandle.png</file>
- <file>textselection/pics/endHandle.sci</file>
- <file>textselection/pics/startHandle.png</file>
- <file>textselection/pics/startHandle.sci</file>
<file>styledtext-layout.qml</file>
<file>imgtag/TextWithImage.qml</file>
</qresource>
diff --git a/examples/quick/text/textselection/pics/endHandle.png b/examples/quick/text/textselection/pics/endHandle.png
deleted file mode 100644
index 598cf98857..0000000000
--- a/examples/quick/text/textselection/pics/endHandle.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/text/textselection/pics/endHandle.sci b/examples/quick/text/textselection/pics/endHandle.sci
deleted file mode 100644
index 4f51f24278..0000000000
--- a/examples/quick/text/textselection/pics/endHandle.sci
+++ /dev/null
@@ -1,5 +0,0 @@
-border.left: 0
-border.top: 6
-border.bottom: 6
-border.right: 6
-source: endHandle.png
diff --git a/examples/quick/text/textselection/pics/startHandle.png b/examples/quick/text/textselection/pics/startHandle.png
deleted file mode 100644
index 51def03054..0000000000
--- a/examples/quick/text/textselection/pics/startHandle.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/text/textselection/pics/startHandle.sci b/examples/quick/text/textselection/pics/startHandle.sci
deleted file mode 100644
index f9eae204c1..0000000000
--- a/examples/quick/text/textselection/pics/startHandle.sci
+++ /dev/null
@@ -1,5 +0,0 @@
-border.left: 6
-border.top: 6
-border.bottom: 6
-border.right: 0
-source: startHandle.png
diff --git a/examples/quick/text/textselection/textselection.qml b/examples/quick/text/textselection/textselection.qml
deleted file mode 100644
index d4224ee14c..0000000000
--- a/examples/quick/text/textselection/textselection.qml
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick
-
-Rectangle {
- id: editor
- color: "lightGrey"
- width: 640; height: 480
-
- Rectangle {
- color: "white"
- anchors.fill: parent
- anchors.margins: 20
-
- BorderImage {
- id: startHandle
- source: "pics/startHandle.sci"
- opacity: 0.0
- width: 10
- x: edit.positionToRectangle(edit.selectionStart).x - flick.contentX-width
- y: edit.positionToRectangle(edit.selectionStart).y - flick.contentY
- height: edit.positionToRectangle(edit.selectionStart).height
- }
-
- BorderImage {
- id: endHandle
- source: "pics/endHandle.sci"
- opacity: 0.0
- width: 10
- x: edit.positionToRectangle(edit.selectionEnd).x - flick.contentX
- y: edit.positionToRectangle(edit.selectionEnd).y - flick.contentY
- height: edit.positionToRectangle(edit.selectionEnd).height
- }
-
- Flickable {
- id: flick
-
- anchors.fill: parent
- contentWidth: edit.contentWidth
- contentHeight: edit.contentHeight
- interactive: true
- clip: true
-
- function ensureVisible(r) {
- if (contentX >= r.x)
- contentX = r.x;
- else if (contentX+width <= r.x+r.width)
- contentX = r.x+r.width-width;
- if (contentY >= r.y)
- contentY = r.y;
- else if (contentY+height <= r.y+r.height)
- contentY = r.y+r.height-height;
- }
-
- TextEdit {
- id: edit
- width: flick.width
- height: flick.height
- focus: true
- wrapMode: TextEdit.Wrap
- textFormat: TextEdit.RichText
-
- onCursorRectangleChanged: flick.ensureVisible(cursorRectangle)
-
- text: "<h1>Text Selection</h1>"
- +"<p>This example is a whacky text selection mechanisms, showing how these can be implemented in the TextEdit element, to cater for whatever style is appropriate for the target platform."
- +"<p><b>Press-and-hold</b> to select a word, then drag the selection handles."
- +"<p><b>Drag outside the selection</b> to scroll the text."
- +"<p><b>Click inside the selection</b> to cut/copy/paste/cancel selection."
- +"<p>It's too whacky to let you paste if there is no current selection."
-
- }
- }
-
- Item {
- id: menu
- opacity: 0.0
- width: 100
- height: 120
- anchors.centerIn: parent
-
- Rectangle {
- border.width: 1
- border.color: "darkBlue"
- radius: 15
- color: "#806080FF"
- anchors.fill: parent
- }
-
- Column {
- anchors.centerIn: parent
- spacing: 8
-
- Rectangle {
- border.width: 1
- border.color: "darkBlue"
- color: "#ff7090FF"
- width: 60
- height: 16
-
- Text { anchors.centerIn: parent; text: "Cut" }
-
- MouseArea {
- anchors.fill: parent
- onClicked: { edit.cut(); editor.state = "" }
- }
- }
-
- Rectangle {
- border.width: 1
- border.color: "darkBlue"
- color: "#ff7090FF"
- width: 60
- height: 16
-
- Text { anchors.centerIn: parent; text: "Copy" }
-
- MouseArea {
- anchors.fill: parent
- onClicked: { edit.copy(); editor.state = "selection" }
- }
- }
-
- Rectangle {
- border.width: 1
- border.color: "darkBlue"
- color: "#ff7090FF"
- width: 60
- height: 16
-
- Text { anchors.centerIn: parent; text: "Paste" }
-
- MouseArea {
- anchors.fill: parent
- onClicked: { edit.paste(); edit.cursorPosition = edit.selectionEnd; editor.state = "" }
- }
- }
-
- Rectangle {
- border.width: 1
- border.color: "darkBlue"
- color: "#ff7090FF"
- width: 60
- height: 16
-
- Text { anchors.centerIn: parent; text: "Deselect" }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- edit.cursorPosition = edit.selectionEnd;
- edit.deselect();
- editor.state = ""
- }
- }
- }
- }
- }
- }
-
- states: [
- State {
- name: "selection"
- PropertyChanges {
- startHandle.opacity: 1.0
- endHandle.opacity: 1.0
- }
- },
- State {
- name: "menu"
- PropertyChanges {
- startHandle.opacity: 0.5
- endHandle.opacity: 0.5
- menu.opacity: 1.0
- }
- }
- ]
-}
diff --git a/examples/quick/threading/CMakeLists.txt b/examples/quick/threading/CMakeLists.txt
deleted file mode 100644
index 0eb73afc76..0000000000
--- a/examples/quick/threading/CMakeLists.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(threading LANGUAGES CXX)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/threading")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-
-qt_standard_project_setup()
-
-add_subdirectory("../shared" "shared")
-
-qt_add_executable(threadingexample
- WIN32
- MACOSX_BUNDLE
- main.cpp
-)
-
-target_link_libraries(threadingexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-add_dependencies(threadingexample threading_shared)
-
-qt_add_qml_module(threadingexample
- URI threading
- AUTO_RESOURCE_PREFIX
- QML_FILES
- "threadedlistmodel/dataloader.mjs"
- "threadedlistmodel/timedisplay.qml"
- "threading.qml"
- "workerscript/Spinner.qml"
- "workerscript/workerscript.mjs"
- "workerscript/workerscript.qml"
-)
-
-install(TARGETS threadingexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-bundle_shared(threadingexample)
diff --git a/examples/quick/threading/doc/images/qml-threading-example.png b/examples/quick/threading/doc/images/qml-threading-example.png
deleted file mode 100644
index 6ed79ab190..0000000000
--- a/examples/quick/threading/doc/images/qml-threading-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/threading/doc/src/threading.qdoc b/examples/quick/threading/doc/src/threading.qdoc
deleted file mode 100644
index fb90c32ab6..0000000000
--- a/examples/quick/threading/doc/src/threading.qdoc
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-/*!
- \title Qt Quick Examples - Threading
- \example threading
- \brief This is a collection of QML multithreading examples.
- \image qml-threading-example.png
- \ingroup qtquickexamples
-
- \e Threading is a collection of QML multithreading examples.
-
- \include examples-run.qdocinc
-
- \section1 Threaded ListModel
-
- \e{Threaded ListModel} contains a \l ListView and a \l ListModel.
- The ListModel object is updated asynchronously in another thread, and the
- results propagate back to the main thread. A timer requests updates from the
- worker thread periodically:
- \snippet threading/threadedlistmodel/timedisplay.qml 0
-
- Inside the worker thread, the ListModel is synchronized once the data is
- finished loading:
- \snippet threading/threadedlistmodel/dataloader.mjs 0
-
- \section1 WorkerScript
-
- \e WorkerScript contains an example of using a \l WorkerScript to offload
- expensive calculations into another thread. This keeps the UI from being
- blocked. This example calculates numbers in Pascal's Triangle, and not in a
- very optimal way, so it will often take several seconds to complete the
- calculation. By doing this in a WorkerScript in another thread, the UI is
- not blocked during this time.
-
- When the UI needs another value, a request is sent to the WorkerScript:
- \snippet threading/workerscript/workerscript.qml 0
-
- The workerscript then is free to take a really long time to calculate it:
- \snippet threading/workerscript/workerscript.mjs 0
-
- When it's done, the result returns to the main scene via the WorkerScript
- type:
- \snippet threading/workerscript/workerscript.qml 1
-*/
diff --git a/examples/quick/threading/main.cpp b/examples/quick/threading/main.cpp
deleted file mode 100644
index f9df4b795a..0000000000
--- a/examples/quick/threading/main.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include "../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(threading/threading)
diff --git a/examples/quick/threading/threadedlistmodel/dataloader.mjs b/examples/quick/threading/threadedlistmodel/dataloader.mjs
deleted file mode 100644
index f94e1bf895..0000000000
--- a/examples/quick/threading/threadedlistmodel/dataloader.mjs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-// ![0]
-WorkerScript.onMessage = function(msg) {
- if (msg.action == 'appendCurrentTime') {
- var data = {'time': new Date().toTimeString()};
- msg.model.append(data);
- msg.model.sync(); // updates the changes to the list
- }
-}
-// ![0]
diff --git a/examples/quick/threading/threadedlistmodel/doc/src/threadedlistmodel.qdoc b/examples/quick/threading/threadedlistmodel/doc/src/threadedlistmodel.qdoc
deleted file mode 100644
index 1f4d7b38e2..0000000000
--- a/examples/quick/threading/threadedlistmodel/doc/src/threadedlistmodel.qdoc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \title Threaded ListModel Example
- \example threading/threadedlistmodel
- \brief The Threaded ListModel example shows how to use a ListModel from multiple
- threads using WorkerScript.
-
- This example shows how to use a ListModel from multiple threads using
- WorkerScript.
-*/
-
diff --git a/examples/quick/threading/threadedlistmodel/threadedlistmodel.qmlproject b/examples/quick/threading/threadedlistmodel/threadedlistmodel.qmlproject
deleted file mode 100644
index bfc1c25bf9..0000000000
--- a/examples/quick/threading/threadedlistmodel/threadedlistmodel.qmlproject
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QmlProject 1.1
-
-Project {
- mainFile: "timedisplay.qml"
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/quick/threading/threadedlistmodel/timedisplay.qml b/examples/quick/threading/threadedlistmodel/timedisplay.qml
deleted file mode 100644
index 9c14fb1d11..0000000000
--- a/examples/quick/threading/threadedlistmodel/timedisplay.qml
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Rectangle {
- color: "white"
- width: 200
- height: 300
-
- ListView {
- anchors.fill: parent
- model: listModel
- delegate: Component {
- Text {
- required property string time
- text: time
- }
- }
-
- ListModel { id: listModel }
-
- WorkerScript {
- id: worker
- source: "dataloader.mjs"
- }
-
-// ![0]
- Timer {
- id: timer
- interval: 2000; repeat: true
- running: true
- triggeredOnStart: true
-
- onTriggered: {
- var msg = {'action': 'appendCurrentTime', 'model': listModel};
- worker.sendMessage(msg);
- }
- }
-// ![0]
- }
-}
diff --git a/examples/quick/threading/threading.pro b/examples/quick/threading/threading.pro
deleted file mode 100644
index cd9ed25e0c..0000000000
--- a/examples/quick/threading/threading.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-RESOURCES += \
- threading.qrc \
- ../shared/shared.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/threading
-INSTALLS += target
diff --git a/examples/quick/threading/threading.qml b/examples/quick/threading/threading.qml
deleted file mode 100644
index 55a61ee155..0000000000
--- a/examples/quick/threading/threading.qml
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import shared as Examples
-
-Item {
- height: 480
- width: 320
- Examples.LauncherList {
- id: ll
- anchors.fill: parent
- Component.onCompleted: {
- addExample("Threaded ListModel", "Updates a ListModel in another thread", Qt.resolvedUrl("threadedlistmodel/timedisplay.qml"));
- addExample("WorkerScript", "Performs calculations in another thread", Qt.resolvedUrl("workerscript/workerscript.qml"));
- }
- }
-}
diff --git a/examples/quick/threading/threading.qmlproject b/examples/quick/threading/threading.qmlproject
deleted file mode 100644
index 877dcd7d63..0000000000
--- a/examples/quick/threading/threading.qmlproject
+++ /dev/null
@@ -1,17 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "threading.qml"
- importPaths: ["../"]
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/quick/threading/threading.qrc b/examples/quick/threading/threading.qrc
deleted file mode 100644
index e20d9a111e..0000000000
--- a/examples/quick/threading/threading.qrc
+++ /dev/null
@@ -1,10 +0,0 @@
-<RCC>
- <qresource prefix="/qt/qml/threading">
- <file>threading.qml</file>
- <file>threadedlistmodel/timedisplay.qml</file>
- <file>threadedlistmodel/dataloader.mjs</file>
- <file>workerscript/Spinner.qml</file>
- <file>workerscript/workerscript.mjs</file>
- <file>workerscript/workerscript.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/threading/workerscript/Spinner.qml b/examples/quick/threading/workerscript/Spinner.qml
deleted file mode 100644
index c21433961e..0000000000
--- a/examples/quick/threading/workerscript/Spinner.qml
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Rectangle {
- width: 64
- height: 64
- property alias value: list.currentIndex
- property alias label: caption.text
-
- Text {
- id: caption
- text: "Spinner"
- anchors.horizontalCenter: parent.horizontalCenter
- }
-
- Rectangle {
- anchors.top: caption.bottom
- anchors.topMargin: 4
- anchors.horizontalCenter: parent.horizontalCenter
- height: 48
- width: 32
- color: "black"
- ListView {
- id: list
- anchors.fill: parent
- highlightRangeMode: ListView.StrictlyEnforceRange
- preferredHighlightBegin: height/3
- preferredHighlightEnd: height/3
- clip: true
- model: 64
- delegate: Text {
- required property int index
- font.pixelSize: 18;
- color: "white";
- text: index;
- anchors.horizontalCenter: parent.horizontalCenter
- }
- }
- Rectangle {
- anchors.fill: parent
- gradient: Gradient {
- GradientStop { position: 0.0; color: "#FF000000" }
- GradientStop { position: 0.2; color: "#00000000" }
- GradientStop { position: 0.8; color: "#00000000" }
- GradientStop { position: 1.0; color: "#FF000000" }
- }
- }
- }
-}
diff --git a/examples/quick/threading/workerscript/workerscript.mjs b/examples/quick/threading/workerscript/workerscript.mjs
deleted file mode 100644
index 560c304b47..0000000000
--- a/examples/quick/threading/workerscript/workerscript.mjs
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-//Will be initialized when WorkerScript{} is instantiated
-var cache = new Array(64);
-for (var i = 0; i < 64; i++)
- cache[i] = new Array(64);
-
-function triangle(row, column) {
- if (cache[row][column])
- return cache[row][column]
- if (column < 0 || column > row)
- return -1;
- if (column == 0 || column == row)
- return 1;
- return triangle(row-1, column-1) + triangle(row-1, column);
-}
-//! [0]
-WorkerScript.onMessage = function(message) {
- //Calculate result (may take a while, using a naive algorithm)
- var calculatedResult = triangle(message.row, message.column);
- //Send result back to main thread
- WorkerScript.sendMessage( { row: message.row,
- column: message.column,
- result: calculatedResult} );
-}
-//! [0]
diff --git a/examples/quick/threading/workerscript/workerscript.qml b/examples/quick/threading/workerscript/workerscript.qml
deleted file mode 100644
index 3d01f90968..0000000000
--- a/examples/quick/threading/workerscript/workerscript.qml
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Rectangle {
- width: 320; height: 480
-
-//! [1]
- WorkerScript {
- id: myWorker
- source: "workerscript.mjs"
-
- onMessage: (messageObject) => {
- if (messageObject.row == rowSpinner.value && messageObject.column == columnSpinner.value){ //Not an old result
- if (messageObject.result == -1)
- resultText.text = "Column must be <= Row";
- else
- resultText.text = messageObject.result;
- }
- }
- }
-//! [1]
- Row {
- y: 24
- spacing: 24
- anchors.horizontalCenter: parent.horizontalCenter
-//! [0]
- Spinner {
- id: rowSpinner
- label: "Row"
- onValueChanged: {
- resultText.text = "Loading...";
- myWorker.sendMessage( { row: rowSpinner.value, column: columnSpinner.value } );
- }
- }
-//! [0]
-
- Spinner {
- id: columnSpinner
- label: "Column"
- onValueChanged: {
- resultText.text = "Loading...";
- myWorker.sendMessage( { row: rowSpinner.value, column: columnSpinner.value } );
- }
- }
- }
-
- Text {
- id: resultText
- y: 180
- width: parent.width
- horizontalAlignment: Text.AlignHCenter
- wrapMode: Text.WordWrap
- font.pixelSize: 32
- }
-
- Text {
- text: "Pascal's Triangle Calculator"
- anchors { horizontalCenter: parent.horizontalCenter; bottom: parent.bottom; bottomMargin: 50 }
- }
-}
diff --git a/examples/quick/threading/workerscript/workerscript.qmlproject b/examples/quick/threading/workerscript/workerscript.qmlproject
deleted file mode 100644
index 2eb5b7fe9f..0000000000
--- a/examples/quick/threading/workerscript/workerscript.qmlproject
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QmlProject 1.1
-
-Project {
- mainFile: "workerscript.qml"
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/quick/touchinteraction/CMakeLists.txt b/examples/quick/touchinteraction/CMakeLists.txt
deleted file mode 100644
index 3a0ced72f9..0000000000
--- a/examples/quick/touchinteraction/CMakeLists.txt
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(touchinteraction LANGUAGES CXX)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/touchinteraction")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-
-qt_standard_project_setup()
-
-add_subdirectory("../shared" "shared")
-
-qt_add_executable(touchinteractionexample
- WIN32
- MACOSX_BUNDLE
- main.cpp
-)
-
-target_link_libraries(touchinteractionexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-add_dependencies(touchinteractionexample touchinteraction_shared)
-
-qt_add_qml_module(touchinteractionexample
- URI touchinteraction
- AUTO_RESOURCE_PREFIX
- QML_FILES
- "flickable/Panel.qml"
- "flickable/basic-flickable.qml"
- "flickable/corkboards.qml"
- "multipointtouch/AugmentedTouchPoint.qml"
- "multipointtouch/BearWhackParticleSystem.qml"
- "multipointtouch/ParticleFlame.qml"
- "multipointtouch/bearwhack.qml"
- "multipointtouch/multiflame.qml"
- "pincharea/flickresize.qml"
- "touchinteraction.qml"
- RESOURCES
- "flickable/cork.jpg"
- "flickable/note-yellow.png"
- "flickable/tack.png"
- "multipointtouch/Bear0.png"
- "multipointtouch/Bear1.png"
- "multipointtouch/Bear2.png"
- "multipointtouch/Bear3.png"
- "multipointtouch/BearB.png"
- "multipointtouch/blur-circle.png"
- "multipointtouch/blur-circle3.png"
- "multipointtouch/heart-blur.png"
- "multipointtouch/title.png"
- "pincharea/qt-logo.jpg"
-)
-
-install(TARGETS touchinteractionexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-bundle_shared(touchinteractionexample)
diff --git a/examples/quick/touchinteraction/doc/images/qml-touchinteraction-example.png b/examples/quick/touchinteraction/doc/images/qml-touchinteraction-example.png
deleted file mode 100644
index d4f0cab201..0000000000
--- a/examples/quick/touchinteraction/doc/images/qml-touchinteraction-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/doc/src/touchinteraction.qdoc b/examples/quick/touchinteraction/doc/src/touchinteraction.qdoc
deleted file mode 100644
index 519e79e741..0000000000
--- a/examples/quick/touchinteraction/doc/src/touchinteraction.qdoc
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-/*!
- \title Qt Quick Examples - Touch Interaction
- \example touchinteraction
- \brief A collection of QML Touch Interaction examples.
- \image qml-touchinteraction-example.png
-
- \e{Touch Interaction} is a collection of small QML examples relating to
- touch interaction methods. For more information, visit
- \l{Important Concepts In Qt Quick - User Input}.
-
- \include examples-run.qdocinc
-
- \section1 Multipoint Flames Example
-
- \e{Multipoint Flames} demonstrates distinguishing different fingers in a
- \l MultiPointTouchArea, by assigning a different colored flame to each touch
- point.
-
- The MultipointTouchArea sets up multiple touch points:
- \snippet touchinteraction/multipointtouch/multiflame.qml 0
-
- The flames are then simply bound to the coordinates of the touch point, and
- whether it is currently pressed, as follows:
- \snippet touchinteraction/multipointtouch/multiflame.qml 1
-
- \section1 Bear-Whack Example
-
- \e{Bear-Whack} demonstrates using \l MultiPointTouchArea to add multiple
- finger support to a simple game. The interaction with the game
- is done through a SpriteGoal that follows the TouchPoint. The TouchPoints
- added to the MultiPointTouchArea are a component with the relevant logic
- embedded into it:
- \snippet touchinteraction/multipointtouch/AugmentedTouchPoint.qml 0
-
- \section1 Flick Resize Example
-
- \e{Flick Resize} uses a \l PinchArea to implement a \e{pinch-to-resize}
- behavior. This is easily achieved by listening to the PinchArea signals and
- responding to user input.
- \snippet touchinteraction/pincharea/flickresize.qml 0
-
- \section1 Flickable Example
-
- \e Flickable is a simple example demonstrating the \l Flickable type.
- \snippet touchinteraction/flickable/basic-flickable.qml 0
-
- \section1 Corkboards Example
-
- \e Corkboards shows another use for \l Flickable, with QML types within the
- flickable object that respond to mouse and keyboard interaction. This
- behavior does not require special code as the Qt Quick types already
- cooperate with the Flickable type for accepting touch events.
-*/
diff --git a/examples/quick/touchinteraction/flickable/Panel.qml b/examples/quick/touchinteraction/flickable/Panel.qml
deleted file mode 100644
index 25c864799e..0000000000
--- a/examples/quick/touchinteraction/flickable/Panel.qml
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Item {
- required property string name
- required property var notes
-
- property real horizontalVelocity: 0
-
- id: page
- width: ListView.view.width+40; height: ListView.view.height
-
-
- Image {
- source: "cork.jpg"
- width: page.ListView.view.width
- height: page.ListView.view.height
- fillMode: Image.PreserveAspectCrop
- clip: true
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: page.focus = false;
- }
-
- Text {
- text: page.name; x: 15; y: 8; height: 40; width: 370
- font.pixelSize: 18; font.bold: true; color: "white"
- style: Text.Outline; styleColor: "black"
- }
-
- Repeater {
- model: page.notes
- Item {
- id: stickyPage
- required property string noteText
-
- property int randomX: Math.random() * (page.ListView.view.width-0.5*stickyImage.width) +100
- property int randomY: Math.random() * (page.ListView.view.height-0.5*stickyImage.height) +50
-
- x: randomX; y: randomY
-
- rotation: -page.horizontalVelocity / 100
- Behavior on rotation {
- SpringAnimation { spring: 2.0; damping: 0.15 }
- }
-
- Item {
- id: sticky
- scale: 0.7
-
- Image {
- id: stickyImage
- x: 8 + -width * 0.6 / 2; y: -20
- source: "note-yellow.png"
- scale: 0.6; transformOrigin: Item.TopLeft
- }
-
- TextEdit {
- id: myText
- x: -104; y: 36; width: 215; height: 200
- font.pixelSize: 24
- readOnly: false
- rotation: -8
- text: stickyPage.noteText
- }
-
- Item {
- x: stickyImage.x; y: -20
- width: stickyImage.width * stickyImage.scale
- height: stickyImage.height * stickyImage.scale
-
- MouseArea {
- id: mouse
- anchors.fill: parent
- drag.target: stickyPage
- drag.axis: Drag.XAndYAxis
- drag.minimumY: 0
- drag.maximumY: page.height - 80
- drag.minimumX: 100
- drag.maximumX: page.width - 140
- onClicked: myText.forceActiveFocus()
- }
- }
- }
-
- Image {
- x: -width / 2; y: -height * 0.5 / 2
- source: "tack.png"
- scale: 0.7; transformOrigin: Item.TopLeft
- }
-
- states: State {
- name: "pressed"
- when: mouse.pressed
- PropertyChanges {
- sticky {
- rotation: 8
- scale: 1
- }
- page.z: 8
- }
- }
-
- transitions: Transition {
- NumberAnimation { properties: "rotation,scale"; duration: 200 }
- }
- }
- }
-}
diff --git a/examples/quick/touchinteraction/flickable/basic-flickable.qml b/examples/quick/touchinteraction/flickable/basic-flickable.qml
deleted file mode 100644
index d529f0bec2..0000000000
--- a/examples/quick/touchinteraction/flickable/basic-flickable.qml
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
- //![0]
-Rectangle {
- width: 320
- height: 480
- Flickable {
- anchors.fill: parent
- contentWidth: 1200
- contentHeight: 1200
- Rectangle {
- width: 1000
- height: 1000
- //![0]
- x: 100
- y: 100
- radius: 128
- border.width: 4
- border.color: "black"
- gradient: Gradient {
- GradientStop { position: 0.0; color: "#000000" }
- GradientStop { position: 0.2; color: "#888888" }
- GradientStop { position: 0.4; color: "#FFFFFF" }
- GradientStop { position: 0.6; color: "#FFFFFF" }
- GradientStop { position: 0.8; color: "#888888" }
- GradientStop { position: 1.0; color: "#000000" }
- }
- }
- }
-}
diff --git a/examples/quick/touchinteraction/flickable/corkboards.qml b/examples/quick/touchinteraction/flickable/corkboards.qml
deleted file mode 100644
index a8b9032dfd..0000000000
--- a/examples/quick/touchinteraction/flickable/corkboards.qml
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Rectangle {
- width: 320; height: 480
- color: "#464646"
-
- ListModel {
- id: list
-
- ListElement {
- name: "Panel One"
- notes: [
- ListElement { noteText: "Tap to edit" },
- ListElement { noteText: "Drag to move" },
- ListElement { noteText: "Flick to scroll" }
- ]
- }
-
- ListElement {
- name: "Panel Two"
- notes: [
- ListElement { noteText: "Note One" },
- ListElement { noteText: "Note Two" }
- ]
- }
-
- ListElement {
- name: "Panel Three"
- notes: [
- ListElement { noteText: "Note Three" }
- ]
- }
- }
-
- ListView {
- id: flickable
-
- anchors.fill: parent
- focus: true
- highlightRangeMode: ListView.StrictlyEnforceRange
- orientation: ListView.Horizontal
- snapMode: ListView.SnapOneItem
- model: list
- delegate: Panel {
- horizontalVelocity: flickable.horizontalVelocity
- }
- }
-}
diff --git a/examples/quick/touchinteraction/main.cpp b/examples/quick/touchinteraction/main.cpp
deleted file mode 100644
index e268ff0391..0000000000
--- a/examples/quick/touchinteraction/main.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include "../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(touchinteraction/touchinteraction)
diff --git a/examples/quick/touchinteraction/multipointtouch/AugmentedTouchPoint.qml b/examples/quick/touchinteraction/multipointtouch/AugmentedTouchPoint.qml
deleted file mode 100644
index b1d162bbd3..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/AugmentedTouchPoint.qml
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick
-import QtQuick.Particles
-
-//! [0]
-TouchPoint {
- id: container
- property ParticleSystem system
- onPressedChanged: {
- if (pressed) {
- timer.restart();
- child.enabled = true;
- system.explode(x,y);
- }
- }
- property QtObject obj: Timer {
- id: timer
- interval: 100
- running: false
- repeat: false
- onTriggered: container.child.enabled = false
- }
- property Item child: SpriteGoal {
- enabled: false
- x: container.area.x - 16
- y: container.area.y - 16
- width: container.area.width + 32
- height: container.area.height + 32 //+32 so it doesn't have to hit the exact center
- system: container.system
- parent: container.system
- goalState: "falling"
- }
-}
-//! [0]
diff --git a/examples/quick/touchinteraction/multipointtouch/Bear0.png b/examples/quick/touchinteraction/multipointtouch/Bear0.png
deleted file mode 100644
index f520cc1f1b..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/Bear0.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/Bear1.png b/examples/quick/touchinteraction/multipointtouch/Bear1.png
deleted file mode 100644
index 3b88f3b32e..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/Bear1.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/Bear2.png b/examples/quick/touchinteraction/multipointtouch/Bear2.png
deleted file mode 100644
index 337b636070..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/Bear2.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/Bear3.png b/examples/quick/touchinteraction/multipointtouch/Bear3.png
deleted file mode 100644
index f0e68590f4..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/Bear3.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/BearB.png b/examples/quick/touchinteraction/multipointtouch/BearB.png
deleted file mode 100644
index 60be2b32c6..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/BearB.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/BearWhackParticleSystem.qml b/examples/quick/touchinteraction/multipointtouch/BearWhackParticleSystem.qml
deleted file mode 100644
index 6537f37087..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/BearWhackParticleSystem.qml
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick
-import QtQuick.Particles
-
-ParticleSystem {
- id: particleSystem
-
- property int score
-
- function explode(x,y) {
- fireEmitter.burst(100,x,y);
- }
-
- Emitter {
- id: emitter
- group: "bears"
- width: parent.width
- emitRate: 1
- NumberAnimation on emitRate {
- id: goFaster
- from: 1
- to: 16
- running: particleSystem.running
- loops: 1
- duration: 60000 * 5
- easing.type: Easing.Linear
- }
- lifeSpan: 4000 + 800*(16-emitRate)
- maximumEmitted: 128
- size: 64
- velocity: PointDirection{ y: 40 + 10 * emitter.emitRate }
- }
-
- Emitter {
- id: fireEmitter
- enabled: false
- maximumEmitted: 6000
- group: "flame"
- emitRate: 1000
- size: 16
- endSize: 8
- velocity: CumulativeDirection { AngleDirection {angleVariation: 180; magnitudeVariation: 120;} PointDirection { y: -60 }}
- lifeSpan: 400
- }
- Emitter {
- id: heartEmitter
- enabled: false
- maximumEmitted: 6000
- group: "hearts"
- emitRate: 1000
- size: 16
- endSize: 8
- velocity: AngleDirection {angleVariation: 180; magnitudeVariation: 180;}
- lifeSpan: 600
- }
- Emitter {
- id: bloodEmitter
- enabled: false
- maximumEmitted: 6000
- group: "blood"
- emitRate: 1000
- size: 16
- endSize: 8
- velocity: CumulativeDirection { AngleDirection {angleVariation: 180; magnitudeVariation: 80;} PointDirection { y: 40 }}
- lifeSpan: 600
- }
-
- Affector {
- width: parent.width
- height: 64
- once: true
- y: parent.height - 32
- groups: "bears"
- onAffectParticles: function(particles) {
- for (var i=0;i<particles.length; i++) {
- if (particles[i].animationIndex != 0) {
- particleSystem.score++;
- bloodEmitter.burst(100, particles[i].x, particles[i].y);
- } else {
- particleSystem.score--;
- heartEmitter.burst(100, particles[i].x, particles[i].y);
- }
- particles[i].update = 1.0;
- particles[i].t -= 1000.0;
- }
- }
- }
- ImageParticle {
- groups: ["flame"]
- source: "blur-circle.png"
- z: 4
- colorVariation: 0.1
- color: "#ffa24d"
- alpha: 0.4
- }
- ImageParticle {
- groups: ["blood"]
- color: "red"
- z: 2
- source: "blur-circle3.png"
- alpha: 0.2
- }
- ImageParticle {
- groups: ["hearts"]
- color: "#ff66AA"
- z: 3
- source: "heart-blur.png"
- alpha: 0.4
- autoRotation: true
- }
- ImageParticle {
- groups: ["bears"]
- z: 1
- spritesInterpolate: false
- sprites:[
- Sprite{
- name: "floating"
- source: "Bear1.png"
- frameCount: 9
- frameWidth: 256
- frameHeight: 256
- frameDuration: 80
- to: {"still":0, "flailing":0}
- },
- Sprite{
- name: "flailing"
- source: "Bear2.png"
- frameCount: 8
- frameWidth: 256
- frameHeight: 256
- frameDuration: 80
- to: {"falling":1}
- },
- Sprite{
- name: "falling"
- source: "Bear3.png"
- frameCount: 5
- frameWidth: 256
- frameHeight: 256
- frameDuration: 80
- to: {"falling":1}
- }
- ]
- }
-}
diff --git a/examples/quick/touchinteraction/multipointtouch/ParticleFlame.qml b/examples/quick/touchinteraction/multipointtouch/ParticleFlame.qml
deleted file mode 100644
index 66907b1f0d..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/ParticleFlame.qml
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Particles
-
-ParticleSystem {
- anchors.fill: parent
-
- property alias emitterX: emitter.x
- property alias emitterY: emitter.y
-
- property alias color: img.color
- property alias emitting: emitter.enabled
- ImageParticle {
- id: img
- source: "blur-circle.png"
- colorVariation: 0.1
- color: "#ff521d"
- alpha: 0
- }
- Emitter {
- id: emitter
- velocityFromMovement: 10
- emitRate: 80
- lifeSpan: 1500
- velocity: PointDirection{ y: -90; yVariation: 50; }
- acceleration: PointDirection{ xVariation: 100; yVariation: 90; }
- size: 51
- sizeVariation: 53
- endSize: 64
- }
-}
diff --git a/examples/quick/touchinteraction/multipointtouch/bearwhack.qml b/examples/quick/touchinteraction/multipointtouch/bearwhack.qml
deleted file mode 100644
index c5f7dc585c..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/bearwhack.qml
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick
-import QtQuick.Particles
-
-Item {
- id: root
- height: 480
- width: 320
- Item {
- id: startScreen
- anchors.fill: parent
- z: 1000
- Image {
- source: "title.png"
- anchors.centerIn: parent
- }
- MouseArea{
- anchors.fill: parent
- onClicked: {//Game Start
- parent.visible = false;
- }
- }
- }
- Rectangle {
- id: bg
- anchors.fill: parent
- gradient: Gradient {
- GradientStop { position: 0.0; color: "DarkBlue" }
- GradientStop { position: 0.8; color: "SkyBlue" }
- GradientStop { position: 0.81; color: "ForestGreen" }
- GradientStop { position: 1.0; color: "DarkGreen" }
- }
- }
-
- BearWhackParticleSystem {
- id: particleSystem
- anchors.fill: parent
- running: !startScreen.visible
- }
-
- property int score: particleSystem.score
-
- Text {
- anchors.right: parent.right
- anchors.margins: 4
- anchors.top: parent.top
- color: "white"
- function padded(num) {
- var ret = num.toString();
-
- if (ret >= 0)
- return ret.padStart(6, "0");
- else
- return "-" + ret.substr(1).padStart(6, "0");
- }
- text: "Score: " + padded(root.score)
- }
- MultiPointTouchArea {
- anchors.fill: parent
- touchPoints: [//Support up to 4 touches at once?
- AugmentedTouchPoint{ system: particleSystem },
- AugmentedTouchPoint{ system: particleSystem },
- AugmentedTouchPoint{ system: particleSystem },
- AugmentedTouchPoint{ system: particleSystem }
- ]
- }
- MouseArea{
- anchors.fill: parent
- id: ma
- onPressedChanged: {
- if (pressed) {
- timer.restart();
- sgoal.enabled = true;
- particleSystem.explode(mouseX,mouseY);
- }
- }
- Timer {
- id: timer
- interval: 100
- running: false
- repeat: false
- onTriggered: sgoal.enabled = false
- }
- SpriteGoal {
- id: sgoal
- x: ma.mouseX - 16
- y: ma.mouseY - 16
- width: 32
- height: 32
- system: particleSystem
- parent: particleSystem
- goalState: "falling"
- enabled: false
- }
- }
-}
diff --git a/examples/quick/touchinteraction/multipointtouch/blur-circle3.png b/examples/quick/touchinteraction/multipointtouch/blur-circle3.png
deleted file mode 100644
index dbc39cb16e..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/blur-circle3.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/heart-blur.png b/examples/quick/touchinteraction/multipointtouch/heart-blur.png
deleted file mode 100644
index dbc38804ee..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/heart-blur.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/multiflame.qml b/examples/quick/touchinteraction/multipointtouch/multiflame.qml
deleted file mode 100644
index 3e03bf2815..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/multiflame.qml
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick
-
-Rectangle {
- width: 360
- height: 480
- color: "black"
-
-//! [0]
- MultiPointTouchArea {
- anchors.fill: parent
- minimumTouchPoints: 1
- maximumTouchPoints: 5
- touchPoints: [
- TouchPoint { id: touch1 },
- TouchPoint { id: touch2 },
- TouchPoint { id: touch11 },
- TouchPoint { id: touch21 },
- TouchPoint { id: touch31 }
- ]
- }
-//! [0]
-
-//! [1]
- ParticleFlame {
- color: "red"
- emitterX: touch1.x
- emitterY: touch1.y
- emitting: touch1.pressed
- }
-//! [1]
- ParticleFlame {
- color: "green"
- emitterX: touch2.x
- emitterY: touch2.y
- emitting: touch2.pressed
- }
- ParticleFlame {
- color: "yellow"
- emitterX: touch11.x
- emitterY: touch11.y
- emitting: touch11.pressed
- }
- ParticleFlame {
- color: "blue"
- emitterX: touch21.x
- emitterY: touch21.y
- emitting: touch21.pressed
- }
- ParticleFlame {
- color: "violet"
- emitterX: touch31.x
- emitterY: touch31.y
- emitting: touch31.pressed
- }
-}
diff --git a/examples/quick/touchinteraction/multipointtouch/title.png b/examples/quick/touchinteraction/multipointtouch/title.png
deleted file mode 100644
index 01893a247d..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/title.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/pincharea/flickresize.qml b/examples/quick/touchinteraction/pincharea/flickresize.qml
deleted file mode 100644
index 16108be1a7..0000000000
--- a/examples/quick/touchinteraction/pincharea/flickresize.qml
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-Rectangle {
- width: 640
- height: 360
- color: "gray"
-
- Flickable {
- id: flick
- anchors.fill: parent
- contentWidth: 500
- contentHeight: 500
-
- PinchArea {
- width: Math.max(flick.contentWidth, flick.width)
- height: Math.max(flick.contentHeight, flick.height)
-
- property real initialWidth
- property real initialHeight
- //![0]
- onPinchStarted: {
- initialWidth = flick.contentWidth
- initialHeight = flick.contentHeight
- }
-
- onPinchUpdated: (pinch)=> {
- // adjust content pos due to drag
- flick.contentX += pinch.previousCenter.x - pinch.center.x
- flick.contentY += pinch.previousCenter.y - pinch.center.y
-
- // resize content
- flick.resizeContent(initialWidth * pinch.scale, initialHeight * pinch.scale, pinch.center)
- }
-
- onPinchFinished: {
- // Move its content within bounds.
- flick.returnToBounds()
- }
- //![0]
-
- Rectangle {
- width: flick.contentWidth
- height: flick.contentHeight
- color: "white"
- Image {
- anchors.fill: parent
- source: "qt-logo.jpg"
- MouseArea {
- anchors.fill: parent
- onDoubleClicked: {
- flick.contentWidth = 500
- flick.contentHeight = 500
- }
- }
- }
- }
- }
- }
-}
diff --git a/examples/quick/touchinteraction/pincharea/qt-logo.jpg b/examples/quick/touchinteraction/pincharea/qt-logo.jpg
deleted file mode 100644
index 4014b4659c..0000000000
--- a/examples/quick/touchinteraction/pincharea/qt-logo.jpg
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/touchinteraction.pro b/examples/quick/touchinteraction/touchinteraction.pro
deleted file mode 100644
index 0ae0a41cce..0000000000
--- a/examples/quick/touchinteraction/touchinteraction.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-RESOURCES += \
- touchinteraction.qrc \
- ../shared/shared.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/touchinteraction
-INSTALLS += target
diff --git a/examples/quick/touchinteraction/touchinteraction.qml b/examples/quick/touchinteraction/touchinteraction.qml
deleted file mode 100644
index 6961e48fd4..0000000000
--- a/examples/quick/touchinteraction/touchinteraction.qml
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import shared
-
-Item {
- height: 480
- width: 320
- LauncherList {
- id: ll
- anchors.fill: parent
- Component.onCompleted: {
- addExample("Multipoint Flames", "Create multiple flames with multiple fingers", Qt.resolvedUrl("multipointtouch/multiflame.qml"));
- addExample("Bear-Whack", "Use multiple touches to knock all the bears down", Qt.resolvedUrl("multipointtouch/bearwhack.qml"));
- addExample("Flick Resize", "Manipulate images using pinch gestures", Qt.resolvedUrl("pincharea/flickresize.qml"));
- addExample("Flickable", "A viewport you can move with touch gestures", Qt.resolvedUrl("flickable/basic-flickable.qml"));
- addExample("Corkboards", "Uses touch input on items inside a Flickable", Qt.resolvedUrl("flickable/corkboards.qml"));
- }
- }
-}
diff --git a/examples/quick/touchinteraction/touchinteraction.qmlproject b/examples/quick/touchinteraction/touchinteraction.qmlproject
deleted file mode 100644
index 50254f287f..0000000000
--- a/examples/quick/touchinteraction/touchinteraction.qmlproject
+++ /dev/null
@@ -1,17 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "touchinteraction.qml"
- importPaths: [ "../" ]
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/quick/touchinteraction/touchinteraction.qrc b/examples/quick/touchinteraction/touchinteraction.qrc
deleted file mode 100644
index 6d0427b053..0000000000
--- a/examples/quick/touchinteraction/touchinteraction.qrc
+++ /dev/null
@@ -1,27 +0,0 @@
-<RCC>
- <qresource prefix="/qt/qml/touchinteraction">
- <file>touchinteraction.qml</file>
- <file>flickable/basic-flickable.qml</file>
- <file>flickable/corkboards.qml</file>
- <file>flickable/cork.jpg</file>
- <file>flickable/note-yellow.png</file>
- <file>flickable/Panel.qml</file>
- <file>flickable/tack.png</file>
- <file>multipointtouch/bearwhack.qml</file>
- <file>multipointtouch/multiflame.qml</file>
- <file>multipointtouch/AugmentedTouchPoint.qml</file>
- <file>multipointtouch/Bear0.png</file>
- <file>multipointtouch/Bear1.png</file>
- <file>multipointtouch/Bear2.png</file>
- <file>multipointtouch/Bear3.png</file>
- <file>multipointtouch/BearB.png</file>
- <file>multipointtouch/BearWhackParticleSystem.qml</file>
- <file>multipointtouch/blur-circle.png</file>
- <file>multipointtouch/blur-circle3.png</file>
- <file>multipointtouch/heart-blur.png</file>
- <file>multipointtouch/ParticleFlame.qml</file>
- <file>multipointtouch/title.png</file>
- <file>pincharea/flickresize.qml</file>
- <file>pincharea/qt-logo.jpg</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/tutorials/dynamicview/CMakeLists.txt b/examples/quick/tutorials/dynamicview/CMakeLists.txt
index 27a94e84f0..2245f3cdfb 100644
--- a/examples/quick/tutorials/dynamicview/CMakeLists.txt
+++ b/examples/quick/tutorials/dynamicview/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_internal_add_example(dynamicview1)
qt_internal_add_example(dynamicview2)
diff --git a/examples/quick/tutorials/dynamicview/dynamicview1/CMakeLists.txt b/examples/quick/tutorials/dynamicview/dynamicview1/CMakeLists.txt
index 4cc0d60742..a1ba04f8e9 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview1/CMakeLists.txt
+++ b/examples/quick/tutorials/dynamicview/dynamicview1/CMakeLists.txt
@@ -1,19 +1,15 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(dynamicview1 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/tutorials/dynamicview/dynamicview1")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(dynamicview1
main.cpp
)
@@ -25,21 +21,29 @@ set_target_properties(dynamicview1 PROPERTIES
qt_add_qml_module(dynamicview1
URI dynamicview
- AUTO_RESOURCE_PREFIX
QML_FILES
dynamicview.qml
PetsModel.qml
)
target_link_libraries(dynamicview1 PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS dynamicview1
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET dynamicview1
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/tutorials/dynamicview/dynamicview1/PetsModel.qml b/examples/quick/tutorials/dynamicview/dynamicview1/PetsModel.qml
index 45c43909e4..0ebbb1d12e 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview1/PetsModel.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview1/PetsModel.qml
@@ -6,59 +6,59 @@ import QtQuick
ListModel {
ListElement {
- name: "Polly"
- type: "Parrot"
+ name: qsTr("Polly")
+ type: qsTr("Parrot")
age: 12
- size: "Small"
+ size: qsTr("Small")
}
ListElement {
- name: "Penny"
- type: "Turtle"
+ name: qsTr("Penny")
+ type: qsTr("Turtle")
age: 4
- size: "Small"
+ size: qsTr("Small")
}
//![0]
ListElement {
- name: "Warren"
- type: "Rabbit"
+ name: qsTr("Warren")
+ type: qsTr("Rabbit")
age: 2
- size: "Small"
+ size: qsTr("Small")
}
ListElement {
- name: "Spot"
- type: "Dog"
+ name: qsTr("Spot")
+ type: qsTr("Dog")
age: 9
- size: "Medium"
+ size: qsTr("Medium")
}
ListElement {
- name: "Schrödinger"
- type: "Cat"
+ name: qsTr("Schrödinger")
+ type: qsTr("Cat")
age: 2
- size: "Medium"
+ size: qsTr("Medium")
}
ListElement {
- name: "Joey"
- type: "Kangaroo"
+ name: qsTr("Joey")
+ type: qsTr("Kangaroo")
age: 1
- size: "Medium"
+ size: qsTr("Medium")
}
ListElement {
- name: "Kimba"
- type: "Bunny"
+ name: qsTr("Kimba")
+ type: qsTr("Bunny")
age: 65
- size: "Large"
+ size: qsTr("Large")
}
ListElement {
- name: "Rover"
- type: "Dog"
+ name: qsTr("Rover")
+ type: qsTr("Dog")
age: 5
- size: "Large"
+ size: qsTr("Large")
}
ListElement {
- name: "Tiny"
- type: "Elephant"
+ name: qsTr("Tiny")
+ type: qsTr("Elephant")
age: 15
- size: "Large"
+ size: qsTr("Large")
}
//![1]
}
diff --git a/examples/quick/tutorials/dynamicview/dynamicview1/dynamicview.qml b/examples/quick/tutorials/dynamicview/dynamicview1/dynamicview.qml
index ec776d4153..3cf9194729 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview1/dynamicview.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview1/dynamicview.qml
@@ -8,7 +8,8 @@ import QtQuick
Rectangle {
id: root
- width: 300; height: 400
+ width: 300
+ height: 400
//![1]
Component {
@@ -32,12 +33,15 @@ Rectangle {
Column {
id: column
- anchors { fill: parent; margins: 2 }
+ anchors {
+ fill: parent
+ margins: 2
+ }
- Text { text: 'Name: ' + name }
- Text { text: 'Type: ' + type }
- Text { text: 'Age: ' + age }
- Text { text: 'Size: ' + size }
+ Text { text: qsTr('Name: ') + content.name }
+ Text { text: qsTr('Type: ') + content.type }
+ Text { text: qsTr('Age: ') + content.age }
+ Text { text: qsTr('Size: ') + content.size }
}
}
}
@@ -46,7 +50,10 @@ Rectangle {
ListView {
id: view
- anchors { fill: parent; margins: 2 }
+ anchors {
+ fill: parent
+ margins: 2
+ }
model: PetsModel {}
delegate: dragDelegate
diff --git a/examples/quick/tutorials/dynamicview/dynamicview2/CMakeLists.txt b/examples/quick/tutorials/dynamicview/dynamicview2/CMakeLists.txt
index 6db9439a77..d1d65497f5 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview2/CMakeLists.txt
+++ b/examples/quick/tutorials/dynamicview/dynamicview2/CMakeLists.txt
@@ -1,19 +1,15 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(dynamicview2 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/tutorials/dynamicview/dynamicview2")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(dynamicview2
main.cpp
)
@@ -25,21 +21,29 @@ set_target_properties(dynamicview2 PROPERTIES
qt_add_qml_module(dynamicview2
URI dynamicview
- AUTO_RESOURCE_PREFIX
QML_FILES
dynamicview.qml
PetsModel.qml
)
target_link_libraries(dynamicview2 PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS dynamicview2
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET dynamicview2
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/tutorials/dynamicview/dynamicview2/PetsModel.qml b/examples/quick/tutorials/dynamicview/dynamicview2/PetsModel.qml
index acdab53c20..457d8e5dcf 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview2/PetsModel.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview2/PetsModel.qml
@@ -5,57 +5,57 @@ import QtQuick
ListModel {
ListElement {
- name: "Polly"
- type: "Parrot"
+ name: qsTr("Polly")
+ type: qsTr("Parrot")
age: 12
- size: "Small"
+ size: qsTr("Small")
}
ListElement {
- name: "Penny"
- type: "Turtle"
+ name: qsTr("Penny")
+ type: qsTr("Turtle")
age: 4
- size: "Small"
+ size: qsTr("Small")
}
ListElement {
- name: "Warren"
- type: "Rabbit"
+ name: qsTr("Warren")
+ type: qsTr("Rabbit")
age: 2
- size: "Small"
+ size: qsTr("Small")
}
ListElement {
- name: "Spot"
- type: "Dog"
+ name: qsTr("Spot")
+ type: qsTr("Dog")
age: 9
- size: "Medium"
+ size: qsTr("Medium")
}
ListElement {
- name: "Schrödinger"
- type: "Cat"
+ name: qsTr("Schrödinger")
+ type: qsTr("Cat")
age: 2
- size: "Medium"
+ size: qsTr("Medium")
}
ListElement {
- name: "Joey"
- type: "Kangaroo"
+ name: qsTr("Joey")
+ type: qsTr("Kangaroo")
age: 1
- size: "Medium"
+ size: qsTr("Medium")
}
ListElement {
- name: "Kimba"
- type: "Bunny"
+ name: qsTr("Kimba")
+ type: qsTr("Bunny")
age: 65
- size: "Large"
+ size: qsTr("Large")
}
ListElement {
- name: "Rover"
- type: "Dog"
+ name: qsTr("Rover")
+ type: qsTr("Dog")
age: 5
- size: "Large"
+ size: qsTr("Large")
}
ListElement {
- name: "Tiny"
- type: "Elephant"
+ name: qsTr("Tiny")
+ type: qsTr("Elephant")
age: 15
- size: "Large"
+ size: qsTr("Large")
}
}
diff --git a/examples/quick/tutorials/dynamicview/dynamicview2/dynamicview.qml b/examples/quick/tutorials/dynamicview/dynamicview2/dynamicview.qml
index 99b1bbdaa1..d1e954ba27 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview2/dynamicview.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview2/dynamicview.qml
@@ -1,12 +1,14 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
import QtQuick
Rectangle {
id: root
- width: 300; height: 400
+ width: 300
+ height: 400
//![0]
Component {
@@ -17,8 +19,15 @@ Rectangle {
id: dragArea
property bool held: false
-
- anchors { left: parent.left; right: parent.right }
+ required property string name
+ required property string type
+ required property string size
+ required property int age
+
+ anchors {
+ left: parent?.left
+ right: parent?.right
+ }
height: content.height
drag.target: held ? content : undefined
@@ -34,7 +43,8 @@ Rectangle {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
- width: dragArea.width; height: column.implicitHeight + 4
+ width: dragArea.width
+ height: column.implicitHeight + 4
border.width: 1
border.color: "lightsteelblue"
@@ -47,21 +57,30 @@ Rectangle {
states: State {
when: dragArea.held
- ParentChange { target: content; parent: root }
+ ParentChange {
+ target: content
+ parent: root
+ }
AnchorChanges {
target: content
- anchors { horizontalCenter: undefined; verticalCenter: undefined }
+ anchors {
+ horizontalCenter: undefined
+ verticalCenter: undefined
+ }
}
}
//![4]
Column {
id: column
- anchors { fill: parent; margins: 2 }
+ anchors {
+ fill: parent
+ margins: 2
+ }
- Text { text: 'Name: ' + name }
- Text { text: 'Type: ' + type }
- Text { text: 'Age: ' + age }
- Text { text: 'Size: ' + size }
+ Text { text: qsTr('Name: ') + dragArea.name }
+ Text { text: qsTr('Type: ') + dragArea.type }
+ Text { text: qsTr('Age: ') + dragArea.age }
+ Text { text: qsTr('Size: ') + dragArea.size }
}
//![2]
}
@@ -73,7 +92,10 @@ Rectangle {
ListView {
id: view
- anchors { fill: parent; margins: 2 }
+ anchors {
+ fill: parent
+ margins: 2
+ }
model: PetsModel {}
delegate: dragDelegate
diff --git a/examples/quick/tutorials/dynamicview/dynamicview3/CMakeLists.txt b/examples/quick/tutorials/dynamicview/dynamicview3/CMakeLists.txt
index 6b7a4b1605..5c561f1112 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview3/CMakeLists.txt
+++ b/examples/quick/tutorials/dynamicview/dynamicview3/CMakeLists.txt
@@ -1,19 +1,15 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(dynamicview3 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/tutorials/dynamicview/dynamicview3")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(dynamicview3
main.cpp
)
@@ -25,21 +21,29 @@ set_target_properties(dynamicview3 PROPERTIES
qt_add_qml_module(dynamicview3
URI dynamicview
- AUTO_RESOURCE_PREFIX
QML_FILES
dynamicview.qml
PetsModel.qml
)
target_link_libraries(dynamicview3 PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS dynamicview3
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET dynamicview3
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/tutorials/dynamicview/dynamicview3/PetsModel.qml b/examples/quick/tutorials/dynamicview/dynamicview3/PetsModel.qml
index acdab53c20..457d8e5dcf 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview3/PetsModel.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview3/PetsModel.qml
@@ -5,57 +5,57 @@ import QtQuick
ListModel {
ListElement {
- name: "Polly"
- type: "Parrot"
+ name: qsTr("Polly")
+ type: qsTr("Parrot")
age: 12
- size: "Small"
+ size: qsTr("Small")
}
ListElement {
- name: "Penny"
- type: "Turtle"
+ name: qsTr("Penny")
+ type: qsTr("Turtle")
age: 4
- size: "Small"
+ size: qsTr("Small")
}
ListElement {
- name: "Warren"
- type: "Rabbit"
+ name: qsTr("Warren")
+ type: qsTr("Rabbit")
age: 2
- size: "Small"
+ size: qsTr("Small")
}
ListElement {
- name: "Spot"
- type: "Dog"
+ name: qsTr("Spot")
+ type: qsTr("Dog")
age: 9
- size: "Medium"
+ size: qsTr("Medium")
}
ListElement {
- name: "Schrödinger"
- type: "Cat"
+ name: qsTr("Schrödinger")
+ type: qsTr("Cat")
age: 2
- size: "Medium"
+ size: qsTr("Medium")
}
ListElement {
- name: "Joey"
- type: "Kangaroo"
+ name: qsTr("Joey")
+ type: qsTr("Kangaroo")
age: 1
- size: "Medium"
+ size: qsTr("Medium")
}
ListElement {
- name: "Kimba"
- type: "Bunny"
+ name: qsTr("Kimba")
+ type: qsTr("Bunny")
age: 65
- size: "Large"
+ size: qsTr("Large")
}
ListElement {
- name: "Rover"
- type: "Dog"
+ name: qsTr("Rover")
+ type: qsTr("Dog")
age: 5
- size: "Large"
+ size: qsTr("Large")
}
ListElement {
- name: "Tiny"
- type: "Elephant"
+ name: qsTr("Tiny")
+ type: qsTr("Elephant")
age: 15
- size: "Large"
+ size: qsTr("Large")
}
}
diff --git a/examples/quick/tutorials/dynamicview/dynamicview3/dynamicview.qml b/examples/quick/tutorials/dynamicview/dynamicview3/dynamicview.qml
index ea88da4e53..1212ac066c 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview3/dynamicview.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview3/dynamicview.qml
@@ -1,13 +1,15 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
import QtQuick
import QtQml.Models
//![0]
Rectangle {
id: root
- width: 300; height: 400
+ width: 300
+ height: 400
Component {
id: dragDelegate
@@ -16,8 +18,15 @@ Rectangle {
id: dragArea
property bool held: false
-
- anchors { left: parent.left; right: parent.right }
+ required property string name
+ required property string type
+ required property string size
+ required property int age
+
+ anchors {
+ left: parent?.left
+ right: parent?.right
+ }
height: content.height
drag.target: held ? content : undefined
@@ -33,7 +42,8 @@ Rectangle {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
- width: dragArea.width; height: column.implicitHeight + 4
+ width: dragArea.width
+ height: column.implicitHeight + 4
border.width: 1
border.color: "lightsteelblue"
@@ -51,29 +61,41 @@ Rectangle {
states: State {
when: dragArea.held
- ParentChange { target: content; parent: root }
+ ParentChange {
+ target: content
+ parent: root
+ }
AnchorChanges {
target: content
- anchors { horizontalCenter: undefined; verticalCenter: undefined }
+ anchors {
+ horizontalCenter: undefined
+ verticalCenter: undefined
+ }
}
}
Column {
id: column
- anchors { fill: parent; margins: 2 }
+ anchors {
+ fill: parent
+ margins: 2
+ }
- Text { text: 'Name: ' + name }
- Text { text: 'Type: ' + type }
- Text { text: 'Age: ' + age }
- Text { text: 'Size: ' + size }
+ Text { text: qsTr('Name: ') + dragArea.name }
+ Text { text: qsTr('Type: ') + dragArea.type }
+ Text { text: qsTr('Age: ') + dragArea.age }
+ Text { text: qsTr('Size: ') + dragArea.size }
}
//![2]
}
//![3]
DropArea {
- anchors { fill: parent; margins: 10 }
+ anchors {
+ fill: parent
+ margins: 10
+ }
- onEntered: (drag)=> {
+ onEntered: (drag) => {
visualModel.items.move(
drag.source.DelegateModel.itemsIndex,
dragArea.DelegateModel.itemsIndex)
@@ -94,7 +116,10 @@ Rectangle {
ListView {
id: view
- anchors { fill: parent; margins: 2 }
+ anchors {
+ fill: parent
+ margins: 2
+ }
model: visualModel
diff --git a/examples/quick/tutorials/dynamicview/dynamicview4/CMakeLists.txt b/examples/quick/tutorials/dynamicview/dynamicview4/CMakeLists.txt
index aff35996da..a3f0ae04e9 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview4/CMakeLists.txt
+++ b/examples/quick/tutorials/dynamicview/dynamicview4/CMakeLists.txt
@@ -1,19 +1,15 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(dynamicview4 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/tutorials/dynamicview/dynamicview4")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(dynamicview4
main.cpp
)
@@ -25,7 +21,6 @@ set_target_properties(dynamicview4 PROPERTIES
qt_add_qml_module(dynamicview4
URI dynamicview
- AUTO_RESOURCE_PREFIX
QML_FILES
dynamicview.qml
ListSelector.qml
@@ -33,14 +28,23 @@ qt_add_qml_module(dynamicview4
)
target_link_libraries(dynamicview4 PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS dynamicview4
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET dynamicview4
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/tutorials/dynamicview/dynamicview4/ListSelector.qml b/examples/quick/tutorials/dynamicview/dynamicview4/ListSelector.qml
index 42a200a936..ee788417d9 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview4/ListSelector.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview4/ListSelector.qml
@@ -1,6 +1,7 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
import QtQuick
Item {
@@ -11,12 +12,17 @@ Item {
property alias label: labelText.text
property bool expanded
- width: 100; height: labelText.implicitHeight + 26
+ width: 100
+ height: labelText.implicitHeight + 26
Rectangle {
- anchors { left: parent.left; right: parent.right; bottom: parent.bottom; }
+ anchors {
+ left: parent.left
+ right: parent.right
+ bottom: parent.bottom
+ }
- height: labelText.implicitHeight + 4 + (expanded ? 20 * view.count : 20)
+ height: labelText.implicitHeight + 4 + (selector.expanded ? 20 * view.count : 20)
Behavior on height { NumberAnimation { duration: 300 } }
radius: 2
@@ -31,13 +37,20 @@ Item {
Text {
id: labelText
- anchors { left: parent.left; top: parent.top; margins: 2 }
+
+ anchors {
+ left: parent.left
+ top: parent.top
+ margins: 2
+ }
}
Rectangle {
anchors {
- left: parent.left; top: labelText.bottom;
- right: parent.right; bottom: parent.bottom;
+ left: parent.left
+ top: labelText.bottom
+ right: parent.right
+ bottom: parent.bottom
margins: 2
leftMargin: 10
}
@@ -53,7 +66,13 @@ Item {
clip: true
delegate: Text {
- anchors { left: parent.left; right: parent.right }
+ required property int index
+ required property string modelData
+
+ anchors {
+ left: parent.left
+ right: parent.right
+ }
height: 20
verticalAlignment: Text.AlignVCenter
@@ -64,13 +83,16 @@ Item {
anchors.fill: parent
onClicked: {
- view.currentIndex = index
+ parent.ListView.view.currentIndex = parent.index
selector.expanded = !selector.expanded
}
}
}
highlight: Rectangle {
- anchors { left: parent.left; right: parent.right }
+ anchors {
+ left: parent.left
+ right: parent.right
+ }
height: 20
radius: 2
diff --git a/examples/quick/tutorials/dynamicview/dynamicview4/PetsModel.qml b/examples/quick/tutorials/dynamicview/dynamicview4/PetsModel.qml
index acdab53c20..457d8e5dcf 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview4/PetsModel.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview4/PetsModel.qml
@@ -5,57 +5,57 @@ import QtQuick
ListModel {
ListElement {
- name: "Polly"
- type: "Parrot"
+ name: qsTr("Polly")
+ type: qsTr("Parrot")
age: 12
- size: "Small"
+ size: qsTr("Small")
}
ListElement {
- name: "Penny"
- type: "Turtle"
+ name: qsTr("Penny")
+ type: qsTr("Turtle")
age: 4
- size: "Small"
+ size: qsTr("Small")
}
ListElement {
- name: "Warren"
- type: "Rabbit"
+ name: qsTr("Warren")
+ type: qsTr("Rabbit")
age: 2
- size: "Small"
+ size: qsTr("Small")
}
ListElement {
- name: "Spot"
- type: "Dog"
+ name: qsTr("Spot")
+ type: qsTr("Dog")
age: 9
- size: "Medium"
+ size: qsTr("Medium")
}
ListElement {
- name: "Schrödinger"
- type: "Cat"
+ name: qsTr("Schrödinger")
+ type: qsTr("Cat")
age: 2
- size: "Medium"
+ size: qsTr("Medium")
}
ListElement {
- name: "Joey"
- type: "Kangaroo"
+ name: qsTr("Joey")
+ type: qsTr("Kangaroo")
age: 1
- size: "Medium"
+ size: qsTr("Medium")
}
ListElement {
- name: "Kimba"
- type: "Bunny"
+ name: qsTr("Kimba")
+ type: qsTr("Bunny")
age: 65
- size: "Large"
+ size: qsTr("Large")
}
ListElement {
- name: "Rover"
- type: "Dog"
+ name: qsTr("Rover")
+ type: qsTr("Dog")
age: 5
- size: "Large"
+ size: qsTr("Large")
}
ListElement {
- name: "Tiny"
- type: "Elephant"
+ name: qsTr("Tiny")
+ type: qsTr("Elephant")
age: 15
- size: "Large"
+ size: qsTr("Large")
}
}
diff --git a/examples/quick/tutorials/dynamicview/dynamicview4/dynamicview.qml b/examples/quick/tutorials/dynamicview/dynamicview4/dynamicview.qml
index cb454c0d46..1a354d12d9 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview4/dynamicview.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview4/dynamicview.qml
@@ -1,13 +1,15 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
import QtQuick
import QtQml.Models
Rectangle {
id: root
- width: 300; height: 400
+ width: 300
+ height: 400
Component {
id: dragDelegate
@@ -16,8 +18,15 @@ Rectangle {
id: dragArea
property bool held: false
-
- anchors { left: parent.left; right: parent.right }
+ required property string name
+ required property string type
+ required property string size
+ required property int age
+
+ anchors {
+ left: parent?.left
+ right: parent?.right
+ }
height: content.height
enabled: visualModel.sortOrder == visualModel.lessThan.length
@@ -35,7 +44,8 @@ Rectangle {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
- width: dragArea.width; height: column.implicitHeight + 4
+ width: dragArea.width
+ height: column.implicitHeight + 4
border.width: 1
border.color: "lightsteelblue"
@@ -53,28 +63,40 @@ Rectangle {
states: State {
when: dragArea.held
- ParentChange { target: content; parent: root }
+ ParentChange {
+ target: content
+ parent: root
+ }
AnchorChanges {
target: content
- anchors { horizontalCenter: undefined; verticalCenter: undefined }
+ anchors {
+ horizontalCenter: undefined
+ verticalCenter: undefined
+ }
}
}
Column {
id: column
- anchors { fill: parent; margins: 2 }
+ anchors {
+ fill: parent
+ margins: 2
+ }
- Text { text: 'Name: ' + name }
- Text { text: 'Type: ' + type }
- Text { text: 'Age: ' + age }
- Text { text: 'Size: ' + size }
+ Text { text: qsTr('Name: ') + dragArea.name }
+ Text { text: qsTr('Type: ') + dragArea.type }
+ Text { text: qsTr('Age: ') + dragArea.age }
+ Text { text: qsTr('Size: ') + dragArea.size }
}
}
DropArea {
- anchors { fill: parent; margins: 10 }
+ anchors {
+ fill: parent
+ margins: 10
+ }
- onEntered: (drag)=> {
+ onEntered: (drag) => {
visualModel.items.move(
drag.source.DelegateModel.itemsIndex,
dragArea.DelegateModel.itemsIndex)
@@ -110,11 +132,11 @@ Rectangle {
//![6]
//![3]
function insertPosition(lessThan, item) {
- var lower = 0
- var upper = items.count
+ let lower = 0
+ let upper = items.count
while (lower < upper) {
- var middle = Math.floor(lower + (upper - lower) / 2)
- var result = lessThan(item.model, items.get(middle).model);
+ const middle = Math.floor(lower + (upper - lower) / 2)
+ const result = lessThan(item.model, items.get(middle).model)
if (result) {
upper = middle
} else {
@@ -126,8 +148,8 @@ Rectangle {
function sort(lessThan) {
while (unsortedItems.count > 0) {
- var item = unsortedItems.get(0)
- var index = insertPosition(lessThan, item)
+ const item = unsortedItems.get(0)
+ const index = insertPosition(lessThan, item)
item.groups = "items"
items.move(item.itemsIndex, index)
@@ -162,7 +184,10 @@ Rectangle {
id: view
anchors {
- left: parent.left; top: parent.top; right: parent.right; bottom: orderSelector.top;
+ left: parent.left
+ top: parent.top
+ right: parent.right
+ bottom: orderSelector.top
margins: 2
}
@@ -175,9 +200,14 @@ Rectangle {
ListSelector {
id: orderSelector
- anchors { left: parent.left; right: parent.right; bottom: parent.bottom; margins: 2 }
+ anchors {
+ left: parent.left
+ right: parent.right
+ bottom: parent.bottom
+ margins: 2
+ }
- label: "Sort By"
- list: [ "Name", "Type", "Age", "Size", "Custom" ]
+ label: qsTr("Sort By")
+ list: [ qsTr("Name"), qsTr("Type"), qsTr("Age"), qsTr("Size"), qsTr("Custom") ]
}
}
diff --git a/examples/quick/tutorials/samegame/CMakeLists.txt b/examples/quick/tutorials/samegame/CMakeLists.txt
index 49b043e18d..4582f44309 100644
--- a/examples/quick/tutorials/samegame/CMakeLists.txt
+++ b/examples/quick/tutorials/samegame/CMakeLists.txt
@@ -1,5 +1,5 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_internal_add_example(samegame1)
qt_internal_add_example(samegame2)
diff --git a/examples/quick/tutorials/samegame/samegame1/CMakeLists.txt b/examples/quick/tutorials/samegame/samegame1/CMakeLists.txt
index 8cc399ccd0..0ce11660a8 100644
--- a/examples/quick/tutorials/samegame/samegame1/CMakeLists.txt
+++ b/examples/quick/tutorials/samegame/samegame1/CMakeLists.txt
@@ -1,19 +1,15 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(samegame1 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/tutorials/samegame/samegame1")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(samegame1
main.cpp
)
@@ -25,7 +21,6 @@ set_target_properties(samegame1 PROPERTIES
qt_add_qml_module(samegame1
URI samegame
- AUTO_RESOURCE_PREFIX
QML_FILES
"Block.qml"
"Button.qml"
@@ -36,14 +31,23 @@ qt_add_qml_module(samegame1
)
target_link_libraries(samegame1 PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS samegame1
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET samegame1
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/tutorials/samegame/samegame2/CMakeLists.txt b/examples/quick/tutorials/samegame/samegame2/CMakeLists.txt
index 1233e4d407..3fe42e4cd4 100644
--- a/examples/quick/tutorials/samegame/samegame2/CMakeLists.txt
+++ b/examples/quick/tutorials/samegame/samegame2/CMakeLists.txt
@@ -1,19 +1,15 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(samegame2 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/tutorials/samegame/samegame2")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(samegame2
main.cpp
)
@@ -25,7 +21,6 @@ set_target_properties(samegame2 PROPERTIES
qt_add_qml_module(samegame2
URI samegame
- AUTO_RESOURCE_PREFIX
QML_FILES
"Block.qml"
"Button.qml"
@@ -37,14 +32,23 @@ qt_add_qml_module(samegame2
)
target_link_libraries(samegame2 PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS samegame2
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET samegame2
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/tutorials/samegame/samegame3/CMakeLists.txt b/examples/quick/tutorials/samegame/samegame3/CMakeLists.txt
index 59fa1302a6..4bd5124fbe 100644
--- a/examples/quick/tutorials/samegame/samegame3/CMakeLists.txt
+++ b/examples/quick/tutorials/samegame/samegame3/CMakeLists.txt
@@ -1,19 +1,15 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(samegame3 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/tutorials/samegame/samegame3")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(samegame3
main.cpp
)
@@ -25,7 +21,6 @@ set_target_properties(samegame3 PROPERTIES
qt_add_qml_module(samegame3
URI samegame
- AUTO_RESOURCE_PREFIX
QML_FILES
"Block.qml"
"Button.qml"
@@ -40,14 +35,23 @@ qt_add_qml_module(samegame3
)
target_link_libraries(samegame3 PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS samegame3
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET samegame3
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/tutorials/samegame/samegame4/CMakeLists.txt b/examples/quick/tutorials/samegame/samegame4/CMakeLists.txt
index 77fdb83718..7760ee1abf 100644
--- a/examples/quick/tutorials/samegame/samegame4/CMakeLists.txt
+++ b/examples/quick/tutorials/samegame/samegame4/CMakeLists.txt
@@ -1,19 +1,15 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(samegame4 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/tutorials/samegame/samegame4")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
qt_add_executable(samegame4
main.cpp
)
@@ -25,7 +21,6 @@ set_target_properties(samegame4 PROPERTIES
qt_add_qml_module(samegame4
URI samegame
- AUTO_RESOURCE_PREFIX
QML_FILES
"BoomBlock.qml"
"Button.qml"
@@ -47,14 +42,23 @@ qt_add_qml_module(samegame4
)
target_link_libraries(samegame4 PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
install(TARGETS samegame4
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET samegame4
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/tutorials/samegame/samegame4/samegame.js b/examples/quick/tutorials/samegame/samegame4/samegame.js
index 80b175d450..99d34c64a0 100644
--- a/examples/quick/tutorials/samegame/samegame4/samegame.js
+++ b/examples/quick/tutorials/samegame/samegame4/samegame.js
@@ -27,10 +27,6 @@ function startNewGame() {
maxRow = Math.floor(gameCanvas.height / gameCanvas.blockSize);
maxIndex = maxRow * maxColumn;
- //Close dialogs
- nameInputDialog.hide();
- dialog.hide();
-
//Initialize Board
board = new Array(maxIndex);
gameCanvas.score = 0;
@@ -41,6 +37,10 @@ function startNewGame() {
}
}
+ //Close dialogs
+ nameInputDialog.hide();
+ dialog.hide();
+
gameDuration = new Date();
}
@@ -191,6 +191,9 @@ function floodMoveCheck(column, row, type) {
//![2]
function saveHighScore(name) {
+ if (gameCanvas.score == 0)
+ return;
+
if (scoresURL != "")
sendHighScore(name);
diff --git a/examples/quick/views/CMakeLists.txt b/examples/quick/views/CMakeLists.txt
index 0eadd33a5a..6800983c6e 100644
--- a/examples/quick/views/CMakeLists.txt
+++ b/examples/quick/views/CMakeLists.txt
@@ -1,45 +1,36 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(views LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/views")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+
add_subdirectory("../shared" "shared")
qt_add_executable(viewsexample
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(viewsexample PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
target_link_libraries(viewsexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
add_dependencies(viewsexample views_shared)
qt_add_qml_module(viewsexample
URI views
- AUTO_RESOURCE_PREFIX
QML_FILES
"delegatemodel/dragselection.qml"
- "delegatemodel/slideshow.qml"
"gridview/gridview-example.qml"
"listview/content/PetsModel.qml"
"listview/content/PressAndHoldButton.qml"
@@ -88,9 +79,16 @@ qt_add_qml_module(viewsexample
)
install(TARGETS viewsexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(viewsexample)
+qt_generate_deploy_qml_app_script(
+ TARGET viewsexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/views/delegatemodel/delegatemodel.qmlproject b/examples/quick/views/delegatemodel/delegatemodel.qmlproject
deleted file mode 100644
index e78ddcb187..0000000000
--- a/examples/quick/views/delegatemodel/delegatemodel.qmlproject
+++ /dev/null
@@ -1,17 +0,0 @@
-import QmlProject 1.0
-
-Project {
- mainFile: "slideshow.qml"
- importPaths: [ "../../" ]
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "."
- }
-}
diff --git a/examples/quick/views/delegatemodel/dragselection.qml b/examples/quick/views/delegatemodel/dragselection.qml
index 1a66264e1d..57a769fb29 100644
--- a/examples/quick/views/delegatemodel/dragselection.qml
+++ b/examples/quick/views/delegatemodel/dragselection.qml
@@ -5,6 +5,8 @@ import QtQml
import QtQuick
import QtQml.Models
+pragma ComponentBehavior: Bound
+
Item {
id: root
@@ -15,6 +17,7 @@ Item {
Component {
id: packageDelegate
+//![0]
Package {
id: packageRoot
@@ -33,19 +36,39 @@ Item {
Item {
id: draggable
+ Drag.active: visibleContainer.drag.active
+//![0]
+
width: 64
height: 64
- Drag.active: visibleContainer.drag.active
-
- anchors { horizontalCenter: parent.horizontalCenter; verticalCenter: parent.verticalCenter }
+ anchors {
+ horizontalCenter: parent.horizontalCenter
+ verticalCenter: parent.verticalCenter
+ }
states: State {
when: visibleContainer.drag.active
- AnchorChanges { target: draggable; anchors { horizontalCenter: undefined; verticalCenter: undefined} }
- ParentChange { target: selectionView; parent: draggable; x: 0; y: 0 }
- PropertyChanges { root.dragging: true }
- ParentChange { target: draggable; parent: root }
+ AnchorChanges {
+ target: draggable
+ anchors {
+ horizontalCenter: undefined
+ verticalCenter: undefined
+ }
+ }
+ ParentChange {
+ target: selectionView
+ parent: draggable
+ x: 0
+ y: 0
+ }
+ PropertyChanges {
+ root.dragging: true
+ }
+ ParentChange {
+ target: draggable
+ parent: root
+ }
}
}
DropArea {
@@ -72,8 +95,16 @@ Item {
radius: 8
gradient: Gradient {
- GradientStop { id: gradientStart; position: 0.0; color: "#8AC953" }
- GradientStop { id: gradientEnd; position: 1.0; color: "#8BC953" }
+ GradientStop {
+ id: gradientStart
+ position: 0.0
+ color: "#8AC953"
+ }
+ GradientStop {
+ id: gradientEnd
+ position: 1.0
+ color: "#8BC953"
+ }
}
border.width: 2
@@ -91,8 +122,13 @@ Item {
}
Rectangle {
- anchors { right: parent.right; top: parent.top; margins: 3 }
- width: 12; height: 12
+ anchors {
+ right: parent.right
+ top: parent.top
+ margins: 3
+ }
+ width: 12
+ height: 12
color: packageRoot.DelegateModel.inSelected ? "black" : "white"
radius: 6
@@ -108,27 +144,55 @@ Item {
states: [
State {
name: "selected"
- ParentChange { target: content; parent: selectionContainer; x: 3; y: 3 }
+ ParentChange {
+ target: content
+ parent: selectionContainer
+ x: 3
+ y: 3
+ }
PropertyChanges {
packageRoot.DelegateModel.inItems: visibleContainer.drag.active
gradientStart.color: "#017423"
}
- PropertyChanges { gradientStart.color: "#007423" }
+ PropertyChanges {
+ gradientStart.color: "#007423"
+ }
}, State {
name: "visible"
- PropertyChanges { packageRoot.DelegateModel.inItems: true }
- ParentChange { target: content; parent: visibleContainer; x: 3; y: 3 }
- PropertyChanges { gradientStart.color: "#8AC953" }
- PropertyChanges { gradientStart.color: "#8BC953" }
+ PropertyChanges {
+ packageRoot.DelegateModel.inItems: true
+ }
+ ParentChange {
+ target: content
+ parent: visibleContainer
+ x: 3
+ y: 3
+ }
+ PropertyChanges {
+ gradientStart.color: "#8AC953"
+ }
+ PropertyChanges {
+ gradientStart.color: "#8BC953"
+ }
}
]
transitions: Transition {
- PropertyAction { target: packageRoot; properties: "DelegateModel.inItems" }
+ PropertyAction {
+ target: packageRoot
+ properties: "DelegateModel.inItems"
+ }
ParentAnimation {
target: content
- NumberAnimation { target: content; properties: "x,y"; duration: 500 }
+ NumberAnimation {
+ target: content
+ properties: "x,y"
+ duration: 500
+ }
+ }
+ ColorAnimation {
+ targets: [gradientStart, gradientEnd]
+ duration: 500
}
- ColorAnimation { targets: [gradientStart, gradientEnd]; duration: 500 }
}
}
}
@@ -139,7 +203,10 @@ Item {
model: 35
delegate: packageDelegate
- groups: DelegateModelGroup { id: selectedItems; name: "selected" }
+ groups: DelegateModelGroup {
+ id: selectedItems
+ name: "selected"
+ }
Component.onCompleted: parts.selection.filterOnGroup = "selected"
}
@@ -155,13 +222,16 @@ Item {
path: Path {
startX: 0
startY: 0
- PathLine { x: 64; y: 64 }
+ PathLine {
+ x: 64
+ y: 64
+ }
}
}
GridView {
id: itemsView
- anchors { fill: parent }
+ anchors.fill: parent
cellWidth: 64
cellHeight: 64
model: visualModel.parts.visible
diff --git a/examples/quick/views/delegatemodel/flipable.pro b/examples/quick/views/delegatemodel/flipable.pro
deleted file mode 100644
index ba00bf792c..0000000000
--- a/examples/quick/views/delegatemodel/flipable.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-
-RESOURCES += flipable.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/customitems/flipable
-INSTALLS += target
diff --git a/examples/quick/views/delegatemodel/flipable.qrc b/examples/quick/views/delegatemodel/flipable.qrc
deleted file mode 100644
index 7918ccf00e..0000000000
--- a/examples/quick/views/delegatemodel/flipable.qrc
+++ /dev/null
@@ -1,9 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>flipable.qml</file>
- <file>content/5_heart.png</file>
- <file>content/9_club.png</file>
- <file>content/back.png</file>
- <file>content/Card.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/views/delegatemodel/main.cpp b/examples/quick/views/delegatemodel/main.cpp
deleted file mode 100644
index 8eb2fc72c3..0000000000
--- a/examples/quick/views/delegatemodel/main.cpp
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (C) 2020 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(flipable)
diff --git a/examples/quick/views/delegatemodel/slideshow.qml b/examples/quick/views/delegatemodel/slideshow.qml
deleted file mode 100644
index c11a72147f..0000000000
--- a/examples/quick/views/delegatemodel/slideshow.qml
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright (C) 2018 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQml.Models
-import shared as Shared
-
-Rectangle {
- id: root
-
- property Item displayItem: null
-
- width: 300; height: 400
-
- color: "black"
-
- Shared.FlickrRssModel {
- id: flickrModel
- tags: "fjords,mountains"
- }
- DelegateModel {
- id: visualModel
-
- model: flickrModel
- delegate: Item {
- id: delegateItem
-
- width: 76; height: 76
-
- required property string thumbnail
-
- Rectangle {
- id: image
- x: 0; y: 0; width: 76; height: 76
- border.width: 1
- border.color: "white"
- color: "black"
-
- Image {
- anchors.fill: parent
- anchors.leftMargin: 1
- anchors.topMargin: 1
-
- source: delegateItem.thumbnail
- fillMode: Image.PreserveAspectFit
- }
-
- MouseArea {
- id: clickArea
- anchors.fill: parent
-
- onClicked: root.displayItem = root.displayItem !== delegateItem ? delegateItem : null
- }
-
- states: [
- State {
- when: root.displayItem === delegateItem
- name: "inDisplay";
- ParentChange { target: image; parent: imageContainer; x: 75; y: 75; width: 150; height: 150 }
- PropertyChanges {
- image.z: 2
- delegateItem.DelegateModel.inItems: false
- }
- },
- State {
- when: root.displayItem !== delegateItem
- name: "inList";
- ParentChange { target: image; parent: delegateItem; x: 2; y: 2; width: 75; height: 75 }
- PropertyChanges {
- image.z: 1
- delegateItem.DelegateModel.inItems: true
- }
- }
- ]
-
- transitions: [
- Transition {
- from: "inList"
- SequentialAnimation {
- PropertyAction { target: delegateItem; property: "DelegateModel.inPersistedItems"; value: true }
- ParentAnimation {
- target: image;
- via: root
- NumberAnimation { target: image; properties: "x,y,width,height"; duration: 1000 }
- }
- }
- }, Transition {
- from: "inDisplay"
- SequentialAnimation {
- ParentAnimation {
- target: image
- NumberAnimation { target: image; properties: "x,y,width,height"; duration: 1000 }
- }
- PropertyAction { target: delegateItem; property: "DelegateModel.inPersistedItems"; value: false }
- }
- }
- ]
- }
- }
- }
-
-
- PathView {
- id: imagePath
-
- anchors { left: parent.left; top: imageContainer.bottom; right: parent.right; bottom: parent.bottom }
- model: visualModel
-
- pathItemCount: 7
- path: Path {
- startX: -50; startY: 0
- PathQuad { x: 150; y: 50; controlX: 0; controlY: 50 }
- PathQuad { x: 350; y: 0; controlX: 300; controlY: 50 }
- }
- }
-
- Item {
- id: imageContainer
- anchors { fill: parent; bottomMargin: 100 }
- }
-}
diff --git a/examples/quick/views/doc/src/views.qdoc b/examples/quick/views/doc/src/views.qdoc
index 8e6e6c1846..7e73ce31d7 100644
--- a/examples/quick/views/doc/src/views.qdoc
+++ b/examples/quick/views/doc/src/views.qdoc
@@ -7,6 +7,7 @@
\brief This is a collection of QML model-view examples.
\image qml-modelviews-example.png
\ingroup qtquickexamples
+ \examplecategory {Graphics}
\e Views is a collection of small QML examples relating to model and view
functionality. They demonstrate how to show data from a model using the
@@ -63,7 +64,7 @@
\section1 Using Packages
- \e Packages use the \l [QML]{Package} type to transition delegates between
+ \e Packages uses the \l [QML]{Package} type to transition delegates between
two views.
It has a Package object which defines delegate items for each view and an
@@ -76,6 +77,11 @@
\snippet views/package/view.qml 0
+ \e{Draggable Selections} demonstrates the use of Package to group together
+ multiple selected delegates for drag-and-drop within an item view.
+
+ \snippet views/delegatemodel/dragselection.qml 0
+
\section1 Using ObjectModel
\e ObjectModel uses an ObjectModel for the model instead of a \l ListModel.
diff --git a/examples/quick/views/gridview/gridview-example.qml b/examples/quick/views/gridview/gridview-example.qml
index 3f849565ca..f340a97b4c 100644
--- a/examples/quick/views/gridview/gridview-example.qml
+++ b/examples/quick/views/gridview/gridview-example.qml
@@ -4,7 +4,8 @@
import QtQuick
Rectangle {
- width: 300; height: 400
+ width: 300
+ height: 400
color: "white"
ListModel {
@@ -20,26 +21,36 @@ Rectangle {
//! [0]
GridView {
anchors.fill: parent
- cellWidth: 100; cellHeight: 100
+ cellWidth: 100
+ cellHeight: 100
focus: true
model: appModel
- highlight: Rectangle { width: 80; height: 80; color: "lightsteelblue" }
+ highlight: Rectangle {
+ width: 80
+ height: 80
+ color: "lightsteelblue"
+ }
delegate: Item {
required property string icon
required property string name
required property int index
- width: 100; height: 100
+ width: 100
+ height: 100
Image {
id: myIcon
- y: 20; anchors.horizontalCenter: parent.horizontalCenter
+ y: 20
+ anchors.horizontalCenter: parent.horizontalCenter
source: parent.icon
}
Text {
- anchors { top: myIcon.bottom; horizontalCenter: parent.horizontalCenter }
+ anchors {
+ top: myIcon.bottom
+ horizontalCenter: parent.horizontalCenter
+ }
text: parent.name
}
MouseArea {
diff --git a/examples/quick/views/listview/content/PressAndHoldButton.qml b/examples/quick/views/listview/content/PressAndHoldButton.qml
index cdd2fb963d..51ab9435d2 100644
--- a/examples/quick/views/listview/content/PressAndHoldButton.qml
+++ b/examples/quick/views/listview/content/PressAndHoldButton.qml
@@ -8,7 +8,7 @@ Image {
property int repeatDelay: 300
property int repeatDuration: 75
- property bool pressed: false
+ property bool pressed
signal clicked
diff --git a/examples/quick/views/listview/content/SmallText.qml b/examples/quick/views/listview/content/SmallText.qml
index a808e3a27d..756610f4b3 100644
--- a/examples/quick/views/listview/content/SmallText.qml
+++ b/examples/quick/views/listview/content/SmallText.qml
@@ -4,6 +4,6 @@
import QtQuick
Text {
- font.pixelSize: 12
+ font.pointSize: 9
}
diff --git a/examples/quick/views/listview/displaymargin.qml b/examples/quick/views/listview/displaymargin.qml
index c4c32bdd64..0030b82b55 100644
--- a/examples/quick/views/listview/displaymargin.qml
+++ b/examples/quick/views/listview/displaymargin.qml
@@ -34,7 +34,8 @@ Item {
Rectangle {
id: header
- width: parent.width; height: 40
+ width: parent.width
+ height: 40
color: "#AAFF0000"
Text {
@@ -47,7 +48,8 @@ Item {
Rectangle {
id: footer
anchors.bottom: parent.bottom
- width: parent.width; height: 40
+ width: parent.width
+ height: 40
color: "#AAFF0000"
Text {
diff --git a/examples/quick/views/listview/dynamiclist.qml b/examples/quick/views/listview/dynamiclist.qml
index fe32ce23d7..736088fbf7 100644
--- a/examples/quick/views/listview/dynamiclist.qml
+++ b/examples/quick/views/listview/dynamiclist.qml
@@ -6,9 +6,12 @@ import "content"
// This example shows how items can be dynamically added to and removed from
// a ListModel, and how these list modifications can be animated.
+pragma ComponentBehavior: Bound
+
Rectangle {
id: container
- width: 500; height: 400
+ width: 500
+ height: 400
color: "#343434"
// The model:
@@ -16,30 +19,48 @@ Rectangle {
id: fruitModel
ListElement {
- name: "Apple"; cost: 2.45
+ name: "Apple"
+ cost: 2.45
attributes: [
- ListElement { description: "Core" },
- ListElement { description: "Deciduous" }
+ ListElement {
+ description: "Core"
+ },
+ ListElement {
+ description: "Deciduous"
+ }
]
}
ListElement {
- name: "Banana"; cost: 1.95
+ name: "Banana"
+ cost: 1.95
attributes: [
- ListElement { description: "Tropical" },
- ListElement { description: "Seedless" }
+ ListElement {
+ description: "Tropical"
+ },
+ ListElement {
+ description: "Seedless"
+ }
]
}
ListElement {
- name: "Cumquat"; cost: 3.25
+ name: "Kumquat"
+ cost: 3.25
attributes: [
- ListElement { description: "Citrus" }
+ ListElement {
+ description: "Citrus"
+ }
]
}
ListElement {
- name: "Durian"; cost: 9.95
+ name: "Durian"
+ cost: 9.95
attributes: [
- ListElement { description: "Tropical" },
- ListElement { description: "Smelly" }
+ ListElement {
+ description: "Tropical"
+ },
+ ListElement {
+ description: "Smelly"
+ }
]
}
}
@@ -51,7 +72,8 @@ Rectangle {
Item {
//! [0]
id: delegateItem
- width: listView.width; height: 80
+ width: listView.width
+ height: 80
clip: true
required property int index
@@ -83,7 +105,7 @@ Rectangle {
Column {
anchors {
left: arrows.right
- horizontalCenter: parent.horizontalCenter;
+ horizontalCenter: parent.horizontalCenter
bottom: parent.verticalCenter
}
@@ -155,18 +177,42 @@ Rectangle {
//! [1]
SequentialAnimation {
id: addAnimation
- PropertyAction { target: delegateItem; property: "height"; value: 0 }
- NumberAnimation { target: delegateItem; property: "height"; to: 80; duration: 250; easing.type: Easing.InOutQuad }
+ PropertyAction {
+ target: delegateItem
+ property: "height"
+ value: 0
+ }
+ NumberAnimation {
+ target: delegateItem
+ property: "height"
+ to: 80
+ duration: 250
+ easing.type: Easing.InOutQuad
+ }
}
ListView.onAdd: addAnimation.start()
SequentialAnimation {
id: removeAnimation
- PropertyAction { target: delegateItem; property: "ListView.delayRemove"; value: true }
- NumberAnimation { target: delegateItem; property: "height"; to: 0; duration: 250; easing.type: Easing.InOutQuad }
+ PropertyAction {
+ target: delegateItem
+ property: "ListView.delayRemove"
+ value: true
+ }
+ NumberAnimation {
+ target: delegateItem
+ property: "height"
+ to: 0
+ duration: 250
+ easing.type: Easing.InOutQuad
+ }
// Make sure delayRemove is set back to false so that the item can be destroyed
- PropertyAction { target: delegateItem; property: "ListView.delayRemove"; value: false }
+ PropertyAction {
+ target: delegateItem
+ property: "ListView.delayRemove"
+ value: false
+ }
}
ListView.onRemove: removeAnimation.start()
}
@@ -177,8 +223,10 @@ Rectangle {
ListView {
id: listView
anchors {
- left: parent.left; top: parent.top;
- right: parent.right; bottom: buttons.top;
+ left: parent.left
+ top: parent.top
+ right: parent.right
+ bottom: buttons.top
margins: 20
}
model: fruitModel
@@ -187,11 +235,15 @@ Rectangle {
Row {
id: buttons
- anchors { left: parent.left; bottom: parent.bottom; margins: 20 }
+ anchors {
+ left: parent.left
+ bottom: parent.bottom
+ margins: 20
+ }
spacing: 10
TextButton {
- text: "Add an item"
+ text: qsTr("Add an item")
onClicked: {
fruitModel.append({
"name": "Pizza Margarita",
@@ -202,7 +254,7 @@ Rectangle {
}
TextButton {
- text: "Remove all items"
+ text: qsTr("Remove all items")
onClicked: fruitModel.clear()
}
}
diff --git a/examples/quick/views/listview/expandingdelegates.qml b/examples/quick/views/listview/expandingdelegates.qml
index 26f2288922..5c1811a00a 100644
--- a/examples/quick/views/listview/expandingdelegates.qml
+++ b/examples/quick/views/listview/expandingdelegates.qml
@@ -8,7 +8,8 @@ import "content"
Rectangle {
id: page
- width: 400; height: 240
+ width: 400
+ height: 240
color: "black"
// Delegate for the recipes. This delegate has two modes:
@@ -31,13 +32,16 @@ Rectangle {
// want to fade.
property real detailsOpacity : 0
//! [0]
- width: listView.width
+ width: ListView.view.width
height: 70
// A simple rounded rectangle for the background
Rectangle {
id: background
- x: 2; y: 2; width: parent.width - x*2; height: parent.height - y*2
+ x: 2
+ y: 2
+ width: parent.width - x * 2
+ height: parent.height - y * 2
color: "ivory"
border.color: "orange"
radius: 5
@@ -58,26 +62,32 @@ Rectangle {
Row {
id: topLayout
- x: 10; y: 10; height: recipeImage.height; width: parent.width
+ x: 10
+ y: 10
+ height: recipeImage.height
+ width: parent.width
spacing: 10
Image {
id: recipeImage
- width: 50; height: 50
+ width: 50
+ height: 50
source: recipe.picture
}
//! [1]
Column {
- width: background.width - recipeImage.width - 20; height: recipeImage.height
+ width: background.width - recipeImage.width - 20
+ height: recipeImage.height
spacing: 5
Text {
text: recipe.title
- font.bold: true; font.pointSize: 16
+ font.bold: true
+ font.pointSize: 16
}
SmallText {
- text: "Ingredients"
+ text: qsTr("Ingredients")
font.bold: true
opacity: recipe.detailsOpacity
}
@@ -94,22 +104,32 @@ Rectangle {
//! [2]
Item {
id: details
- x: 10; width: parent.width - 20
-
- anchors { top: topLayout.bottom; topMargin: 10; bottom: parent.bottom; bottomMargin: 10 }
+ x: 10
+ width: parent.width - 20
+
+ anchors {
+ top: topLayout.bottom
+ topMargin: 10
+ bottom: parent.bottom
+ bottomMargin: 10
+ }
opacity: recipe.detailsOpacity
//! [2]
SmallText {
id: methodTitle
anchors.top: parent.top
- text: "Method"
- font.pointSize: 12; font.bold: true
+ text: qsTr("Method")
+ font.pointSize: 12
+ font.bold: true
}
Flickable {
id: flick
width: parent.width
- anchors { top: methodTitle.bottom; bottom: parent.bottom }
+ anchors {
+ top: methodTitle.bottom
+ bottom: parent.bottom
+ }
contentHeight: methodText.height
clip: true
@@ -122,13 +142,19 @@ Rectangle {
}
Image {
- anchors { right: flick.right; top: flick.top }
+ anchors {
+ right: flick.right
+ top: flick.top
+ }
source: "content/pics/moreUp.png"
opacity: flick.atYBeginning ? 0 : 1
}
Image {
- anchors { right: flick.right; bottom: flick.bottom }
+ anchors {
+ right: flick.right
+ bottom: flick.bottom
+ }
source: "content/pics/moreDown.png"
opacity: flick.atYEnd ? 0 : 1
}
@@ -138,9 +164,12 @@ Rectangle {
// A button to close the detailed view, i.e. set the state back to default ('').
TextButton {
y: 10
- anchors { right: background.right; rightMargin: 10 }
+ anchors {
+ right: background.right
+ rightMargin: 10
+ }
opacity: recipe.detailsOpacity
- text: "Close"
+ text: qsTr("Close")
onClicked: recipe.state = '';
}
@@ -180,8 +209,14 @@ Rectangle {
transitions: Transition {
// Make the state changes smooth
ParallelAnimation {
- ColorAnimation { property: "color"; duration: 500 }
- NumberAnimation { duration: 300; properties: "detailsOpacity,x,contentY,height,width" }
+ ColorAnimation {
+ property: "color"
+ duration: 500
+ }
+ NumberAnimation {
+ duration: 300
+ properties: "detailsOpacity,x,contentY,height,width"
+ }
}
}
}
@@ -192,7 +227,7 @@ Rectangle {
ListView {
id: listView
anchors.fill: parent
- model: RecipesModel {}
+ model: RecipesModel { }
delegate: recipeDelegate
}
}
diff --git a/examples/quick/views/listview/highlight.qml b/examples/quick/views/listview/highlight.qml
index 137347203a..1f9b9c015c 100644
--- a/examples/quick/views/listview/highlight.qml
+++ b/examples/quick/views/listview/highlight.qml
@@ -9,13 +9,15 @@ import QtQuick
import "content"
Rectangle {
- width: 200; height: 300
+ width: 200
+ height: 300
// Define a delegate component. The component will be
// instantiated for each visible item in the list.
component PetDelegate: Item {
id: pet
- width: 200; height: 55
+ width: 200
+ height: 55
required property int index
required property string name
@@ -23,9 +25,15 @@ Rectangle {
required property int age
Column {
- SmallText { text: 'Name: ' + pet.name }
- SmallText { text: 'Type: ' + pet.type }
- SmallText { text: 'Age: ' + pet.age }
+ SmallText {
+ text: 'Name: ' + pet.name
+ }
+ SmallText {
+ text: 'Type: ' + pet.type
+ }
+ SmallText {
+ text: 'Age: ' + pet.age
+ }
}
// indent the item if it is the current item
states: State {
@@ -34,7 +42,10 @@ Rectangle {
PropertyChanges { pet.x: 20 }
}
transitions: Transition {
- NumberAnimation { properties: "x"; duration: 200 }
+ NumberAnimation {
+ properties: "x"
+ duration: 200
+ }
}
MouseArea {
anchors.fill: parent
@@ -45,24 +56,31 @@ Rectangle {
//! [0]
// Define a highlight with customized movement between items.
component HighlightBar : Rectangle {
- width: 200; height: 50
+ width: 200
+ height: 50
color: "#FFFF88"
- y: listView.currentItem.y
- Behavior on y { SpringAnimation { spring: 2; damping: 0.1 } }
+ y: ListView.view.currentItem.y
+ Behavior on y {
+ SpringAnimation {
+ spring: 2
+ damping: 0.1
+ }
+ }
}
ListView {
id: listView
- width: 200; height: parent.height
+ width: 200
+ height: parent.height
x: 30
- model: PetsModel {}
- delegate: PetDelegate {}
+ model: PetsModel { }
+ delegate: PetDelegate { }
focus: true
// Set the highlight delegate. Note we must also set highlightFollowsCurrentItem
// to false so the highlight delegate can control how the highlight is moved.
- highlight: HighlightBar {}
+ highlight: HighlightBar { }
highlightFollowsCurrentItem: false
}
//! [0]
diff --git a/examples/quick/views/listview/highlightranges.qml b/examples/quick/views/listview/highlightranges.qml
index 78f8b197d3..91304ae08b 100644
--- a/examples/quick/views/listview/highlightranges.qml
+++ b/examples/quick/views/listview/highlightranges.qml
@@ -4,6 +4,8 @@
import QtQuick
import "content"
+pragma ComponentBehavior: Bound
+
//! [0]
Rectangle {
id: root
@@ -30,17 +32,26 @@ Rectangle {
}
}
- PauseAnimation { duration: 500 }
+ PauseAnimation {
+ duration: 500
+ }
}
//! [0]
- MouseArea{
+ MouseArea {
id: ma
z: 1
anchors.fill: parent
- onClicked: { z = 1 - z; if (anim.running) anim.stop(); else anim.restart();}
+ onClicked: function () {
+ z = 1 - z;
+ if (anim.running)
+ anim.stop();
+ else
+ anim.restart();
+ }
}
- width: 320; height: 480
+ width: 320
+ height: 480
// This example shows the same model in three different ListView items,
// with different highlight ranges. The highlight ranges are set by the
@@ -68,12 +79,16 @@ Rectangle {
//! [1]
ListView {
id: list1
- height: 50; width: parent.width
- model: PetsModel {id: aModel}
+ height: 50
+ width: parent.width
+ model: PetsModel {
+ id: aModel
+ }
delegate: petDelegate
orientation: ListView.Horizontal
-
- highlight: Rectangle { color: "lightsteelblue" }
+ highlight: Rectangle {
+ color: "lightsteelblue"
+ }
currentIndex: root.current
onCurrentIndexChanged: root.current = currentIndex
focus: true
@@ -82,29 +97,33 @@ Rectangle {
ListView {
id: list2
y: 160
- height: 50; width: parent.width
- model: PetsModel {}
+ height: 50
+ width: parent.width
+ model: PetsModel { }
delegate: petDelegate
orientation: ListView.Horizontal
-
- highlight: Rectangle { color: "yellow" }
+ highlight: Rectangle {
+ color: "yellow"
+ }
currentIndex: root.current
- preferredHighlightBegin: 80; preferredHighlightEnd: 220
+ preferredHighlightBegin: 80
+ preferredHighlightEnd: 220
highlightRangeMode: ListView.ApplyRange
}
ListView {
id: list3
y: 320
- height: 50; width: parent.width
+ height: 50
+ width: parent.width
model: PetsModel {}
delegate: petDelegate
orientation: ListView.Horizontal
-
highlight: Rectangle { color: "yellow" }
currentIndex: root.current
onCurrentIndexChanged: root.current = currentIndex
- preferredHighlightBegin: 125; preferredHighlightEnd: 125
+ preferredHighlightBegin: 125
+ preferredHighlightEnd: 125
highlightRangeMode: ListView.StrictlyEnforceRange
}
//! [1]
@@ -123,9 +142,15 @@ Rectangle {
Column {
id: column
- Text { text: 'Name: ' + petDelegateItem.name }
- Text { text: 'Type: ' + petDelegateItem.type }
- Text { text: 'Age: ' + petDelegateItem.age }
+ Text {
+ text: 'Name: ' + petDelegateItem.name
+ }
+ Text {
+ text: 'Type: ' + petDelegateItem.type
+ }
+ Text {
+ text: 'Age: ' + petDelegateItem.age
+ }
}
MouseArea {
diff --git a/examples/quick/views/listview/sections.qml b/examples/quick/views/listview/sections.qml
index 5b2dfc67cc..83370958fa 100644
--- a/examples/quick/views/listview/sections.qml
+++ b/examples/quick/views/listview/sections.qml
@@ -5,7 +5,7 @@
// the ListView.section attached property.
import QtQuick
-import "content"
+import QtQuick.Controls
Rectangle {
id: container
@@ -14,21 +14,67 @@ Rectangle {
ListModel {
id: animalsModel
- ListElement { name: "Ant"; size: "Tiny" }
- ListElement { name: "Flea"; size: "Tiny" }
- ListElement { name: "Parrot"; size: "Small" }
- ListElement { name: "Guinea pig"; size: "Small" }
- ListElement { name: "Rat"; size: "Small" }
- ListElement { name: "Butterfly"; size: "Small" }
- ListElement { name: "Dog"; size: "Medium" }
- ListElement { name: "Cat"; size: "Medium" }
- ListElement { name: "Pony"; size: "Medium" }
- ListElement { name: "Koala"; size: "Medium" }
- ListElement { name: "Horse"; size: "Large" }
- ListElement { name: "Tiger"; size: "Large" }
- ListElement { name: "Giraffe"; size: "Large" }
- ListElement { name: "Elephant"; size: "Huge" }
- ListElement { name: "Whale"; size: "Huge" }
+
+ ListElement {
+ name: "Ant"
+ size: "Tiny"
+ }
+ ListElement {
+ name: "Flea"
+ size: "Tiny"
+ }
+ ListElement {
+ name: "Parrot"
+ size: "Small"
+ }
+ ListElement {
+ name: "Guinea pig"
+ size: "Small"
+ }
+ ListElement {
+ name: "Rat"
+ size: "Small"
+ }
+ ListElement {
+ name: "Butterfly"
+ size: "Small"
+ }
+ ListElement {
+ name: "Dog"
+ size: "Medium"
+ }
+ ListElement {
+ name: "Cat"
+ size: "Medium"
+ }
+ ListElement {
+ name: "Pony"
+ size: "Medium"
+ }
+ ListElement {
+ name: "Koala"
+ size: "Medium"
+ }
+ ListElement {
+ name: "Horse"
+ size: "Large"
+ }
+ ListElement {
+ name: "Tiger"
+ size: "Large"
+ }
+ ListElement {
+ name: "Giraffe"
+ size: "Large"
+ }
+ ListElement {
+ name: "Elephant"
+ size: "Huge"
+ }
+ ListElement {
+ name: "Whale"
+ size: "Huge"
+ }
}
//! [0]
@@ -36,7 +82,7 @@ Rectangle {
Component {
id: sectionHeading
Rectangle {
- width: container.width
+ width: ListView.view.width
height: childrenRect.height
color: "lightsteelblue"
@@ -58,6 +104,7 @@ Rectangle {
model: animalsModel
delegate: Text {
required property string name
+
text: name
font.pixelSize: 18
}
@@ -73,19 +120,23 @@ Rectangle {
anchors.bottom: parent.bottom
anchors.bottomMargin: 1
spacing: 1
- ToggleButton {
- label: "CurrentLabelAtStart"
- onToggled: {
- if (active)
+
+ CheckBox {
+ id: labelAtStartCheckBox
+ text: qsTr("CurrentLabelAtStart")
+ onClicked: {
+ if (checked)
view.section.labelPositioning |= ViewSection.CurrentLabelAtStart
else
view.section.labelPositioning &= ~ViewSection.CurrentLabelAtStart
}
}
- ToggleButton {
- label: "NextLabelAtEnd"
- onToggled: {
- if (active)
+
+ CheckBox {
+ id: labelAtEndCheckBox
+ text: qsTr("NextLabelAtEnd")
+ onClicked: {
+ if (checked)
view.section.labelPositioning |= ViewSection.NextLabelAtEnd
else
view.section.labelPositioning &= ~ViewSection.NextLabelAtEnd
diff --git a/examples/quick/views/objectmodel/objectmodel.qml b/examples/quick/views/objectmodel/objectmodel.qml
index 898ef7f9e2..f0b116a247 100644
--- a/examples/quick/views/objectmodel/objectmodel.qml
+++ b/examples/quick/views/objectmodel/objectmodel.qml
@@ -7,6 +7,8 @@
import QtQuick
import QtQml.Models
+pragma ComponentBehavior: Bound
+
Rectangle {
id: root
color: "lightgray"
@@ -19,23 +21,41 @@ Rectangle {
id: itemModel
Rectangle {
- width: view.width; height: view.height
+ width: view.width
+ height: view.height
color: "#FFFEF0"
- Text { text: "Page 1"; font.bold: true; anchors.centerIn: parent }
+
+ Text {
+ anchors.centerIn: parent
+ text: qsTr("Page 1")
+ font.bold: true
+ }
Component.onDestruction: if (root.printDestruction) print("destroyed 1")
}
Rectangle {
- width: view.width; height: view.height
+ width: view.width
+ height: view.height
color: "#F0FFF7"
- Text { text: "Page 2"; font.bold: true; anchors.centerIn: parent }
+
+ Text {
+ anchors.centerIn: parent
+ text: qsTr("Page 2")
+ font.bold: true
+ }
Component.onDestruction: if (root.printDestruction) print("destroyed 2")
}
Rectangle {
- width: view.width; height: view.height
+ width: view.width
+ height: view.height
color: "#F4F0FF"
- Text { text: "Page 3"; font.bold: true; anchors.centerIn: parent }
+
+ Text {
+ anchors.centerIn: parent
+ text: qsTr("Page 3")
+ font.bold: true
+ }
Component.onDestruction: if (root.printDestruction) print("destroyed 3")
}
@@ -43,18 +63,27 @@ Rectangle {
ListView {
id: view
- anchors { fill: parent; bottomMargin: 30 }
+ anchors {
+ fill: parent
+ bottomMargin: 30
+ }
model: itemModel
- preferredHighlightBegin: 0; preferredHighlightEnd: 0
+ preferredHighlightBegin: 0
+ preferredHighlightEnd: 0
highlightRangeMode: ListView.StrictlyEnforceRange
orientation: ListView.Horizontal
- snapMode: ListView.SnapOneItem; flickDeceleration: 2000
+ snapMode: ListView.SnapOneItem
+ flickDeceleration: 2000
cacheBuffer: 200
}
//! [0]
Rectangle {
- width: root.width; height: 30
- anchors { top: view.bottom; bottom: parent.bottom }
+ width: root.width
+ height: 30
+ anchors {
+ top: view.bottom
+ bottom: parent.bottom
+ }
color: "gray"
Row {
@@ -63,17 +92,18 @@ Rectangle {
Repeater {
model: itemModel.count
-
- Rectangle {
+ delegate: Rectangle {
required property int index
- width: 5; height: 5
+ width: 5
+ height: 5
radius: 3
- color: view.currentIndex == index ? "blue" : "white"
+ color: view.currentIndex === index ? "blue" : "white"
MouseArea {
- width: 20; height: 20
anchors.centerIn: parent
+ width: 20
+ height: 20
onClicked: view.currentIndex = parent.index
}
}
diff --git a/examples/quick/views/package/Delegate.qml b/examples/quick/views/package/Delegate.qml
index 2e810aebec..7f3eeaa833 100644
--- a/examples/quick/views/package/Delegate.qml
+++ b/examples/quick/views/package/Delegate.qml
@@ -11,26 +11,50 @@ Package {
required property int index
required property string display
- Text { id: listDelegate; width: parent.width; height: 25; text: 'Empty'; Package.name: 'list' }
- Text { id: gridDelegate; width: parent.width / 2; height: 50; text: 'Empty'; Package.name: 'grid' }
+ Text {
+ id: listDelegate
+ width: parent.width
+ height: 25
+ text: 'Empty'
+ Package.name: 'list'
+ }
+
+ Text {
+ id: gridDelegate
+ width: parent.width / 2
+ height: 50
+ text: 'Empty'
+ Package.name: 'grid'
+ }
Rectangle {
id: wrapper
- width: parent.width; height: 25
+ width: parent?.width ?? 0
+ height: 25
color: 'lightsteelblue'
- Text { text: delegate.display; anchors.centerIn: parent }
+ Text {
+ text: delegate.display
+ anchors.centerIn: parent
+ }
state: delegate.upTo > delegate.index ? 'inGrid' : 'inList'
states: [
State {
name: 'inList'
- ParentChange { target: wrapper; parent: listDelegate }
+ ParentChange {
+ target: wrapper
+ parent: listDelegate
+ }
},
State {
name: 'inGrid'
ParentChange {
- target: wrapper; parent: gridDelegate
- x: 0; y: 0; width: gridDelegate.width; height: gridDelegate.height
+ target: wrapper
+ parent: gridDelegate
+ x: 0
+ y: 0
+ width: gridDelegate.width
+ height: gridDelegate.height
}
}
]
@@ -38,7 +62,10 @@ Package {
transitions: [
Transition {
ParentAnimation {
- NumberAnimation { properties: 'x,y,width,height'; duration: 300 }
+ NumberAnimation {
+ properties: 'x,y,width,height'
+ duration: 300
+ }
}
}
]
diff --git a/examples/quick/views/package/view.qml b/examples/quick/views/package/view.qml
index 696557ed7c..a9a0c46198 100644
--- a/examples/quick/views/package/view.qml
+++ b/examples/quick/views/package/view.qml
@@ -4,16 +4,24 @@
import QtQuick
import QtQml.Models
+pragma ComponentBehavior: Bound
+
Rectangle {
id: root
color: "white"
width: 320
height: 480
- property int upTo: 0
+ property int upTo
SequentialAnimation on upTo {
loops: -1
- NumberAnimation { to: 8; duration: 3500 }
- NumberAnimation { to: 0; duration: 3500 }
+ NumberAnimation {
+ to: 8
+ duration: 3500
+ }
+ NumberAnimation {
+ to: 0
+ duration: 3500
+ }
}
ListModel {
@@ -38,14 +46,14 @@ Rectangle {
ListView {
id: lv
- height: parent.height/2
+ height: parent.height / 2
width: parent.width
model: visualModel.parts.list
}
GridView {
- y: parent.height/2
- height: parent.height/2
+ y: parent.height / 2
+ height: parent.height / 2
width: parent.width
cellWidth: width / 2
cellHeight: 50
diff --git a/examples/quick/views/pathview/pathview-example.qml b/examples/quick/views/pathview/pathview-example.qml
index 19fd470c04..f1ecd099c1 100644
--- a/examples/quick/views/pathview/pathview-example.qml
+++ b/examples/quick/views/pathview/pathview-example.qml
@@ -4,24 +4,47 @@
import QtQuick
Rectangle {
- width: 400; height: 240
+ width: 400
+ height: 240
color: "white"
ListModel {
id: appModel
- ListElement { name: "Music"; icon: "pics/AudioPlayer_48.png" }
- ListElement { name: "Movies"; icon: "pics/VideoPlayer_48.png" }
- ListElement { name: "Camera"; icon: "pics/Camera_48.png" }
- ListElement { name: "Calendar"; icon: "pics/DateBook_48.png" }
- ListElement { name: "Messaging"; icon: "pics/EMail_48.png" }
- ListElement { name: "Todo List"; icon: "pics/TodoList_48.png" }
- ListElement { name: "Contacts"; icon: "pics/AddressBook_48.png" }
+ ListElement {
+ name: "Music"
+ icon: "pics/AudioPlayer_48.png"
+ }
+ ListElement {
+ name: "Movies"
+ icon: "pics/VideoPlayer_48.png"
+ }
+ ListElement {
+ name: "Camera"
+ icon: "pics/Camera_48.png"
+ }
+ ListElement {
+ name: "Calendar"
+ icon: "pics/DateBook_48.png"
+ }
+ ListElement {
+ name: "Messaging"
+ icon: "pics/EMail_48.png"
+ }
+ ListElement {
+ name: "Todo List"
+ icon: "pics/TodoList_48.png"
+ }
+ ListElement {
+ name: "Contacts"
+ icon: "pics/AddressBook_48.png"
+ }
}
Component {
id: appDelegate
Item {
- width: 100; height: 100
+ width: 100
+ height: 100
scale: PathView.iconScale
required property string name
@@ -30,11 +53,15 @@ Rectangle {
Image {
id: myIcon
- y: 20; anchors.horizontalCenter: parent.horizontalCenter
+ y: 20
+ anchors.horizontalCenter: parent.horizontalCenter
source: parent.icon
}
Text {
- anchors { top: myIcon.bottom; horizontalCenter: parent.horizontalCenter }
+ anchors {
+ top: myIcon.bottom
+ horizontalCenter: parent.horizontalCenter
+ }
text: parent.name
}
@@ -47,7 +74,11 @@ Rectangle {
Component {
id: appHighlight
- Rectangle { width: 80; height: 80; color: "lightsteelblue" }
+ Rectangle {
+ width: 80
+ height: 80
+ color: "lightsteelblue"
+ }
}
PathView {
@@ -62,11 +93,30 @@ Rectangle {
path: Path {
startX: 10
startY: 50
- PathAttribute { name: "iconScale"; value: 0.5 }
- PathQuad { x: 200; y: 150; controlX: 50; controlY: 200 }
- PathAttribute { name: "iconScale"; value: 1.0 }
- PathQuad { x: 390; y: 50; controlX: 350; controlY: 200 }
- PathAttribute { name: "iconScale"; value: 0.5 }
+ PathAttribute {
+ name: "iconScale"
+ value: 0.5
+ }
+ PathQuad {
+ x: 200
+ y: 150
+ controlX: 50
+ controlY: 200
+ }
+ PathAttribute {
+ name: "iconScale"
+ value: 1.0
+ }
+ PathQuad {
+ x: 390
+ y: 50
+ controlX: 350
+ controlY: 200
+ }
+ PathAttribute {
+ name: "iconScale"
+ value: 0.5
+ }
}
}
}
diff --git a/examples/quick/views/views.qml b/examples/quick/views/views.qml
index 1c47df4fcb..77b16fa6bb 100644
--- a/examples/quick/views/views.qml
+++ b/examples/quick/views/views.qml
@@ -19,9 +19,8 @@ Item {
addExample("Sections", "ListView section headers and footers", Qt.resolvedUrl("listview/sections.qml"))
addExample("Packages", "Transitions between a ListView and GridView", Qt.resolvedUrl("package/view.qml"))
addExample("PathView", "A simple PathView", Qt.resolvedUrl("pathview/pathview-example.qml"))
- addExample("ObjectModel", "Using a ObjectModel", Qt.resolvedUrl("objectmodel/objectmodel.qml"))
+ addExample("ObjectModel", "Using an ObjectModel", Qt.resolvedUrl("objectmodel/objectmodel.qml"))
addExample("Display Margins", "A ListView with display margins", Qt.resolvedUrl("listview/displaymargin.qml"))
- addExample("DelegateModel", "A PathView using DelegateModel to instantiate delegates", Qt.resolvedUrl("delegatemodel/slideshow.qml"))
addExample("Draggable Selections", "Enabling drag-and-drop on DelegateModel delegates", Qt.resolvedUrl("delegatemodel/dragselection.qml"))
}
}
diff --git a/examples/quick/views/views.qrc b/examples/quick/views/views.qrc
index 67e708ff93..9b16e81321 100644
--- a/examples/quick/views/views.qrc
+++ b/examples/quick/views/views.qrc
@@ -1,5 +1,6 @@
<RCC>
<qresource prefix="/qt/qml/views">
+
<file>gridview/gridview-example.qml</file>
<file>gridview/pics/AddressBook_48.png</file>
<file>gridview/pics/AudioPlayer_48.png</file>
@@ -41,7 +42,6 @@
<file>pathview/pics/EMail_48.png</file>
<file>pathview/pics/TodoList_48.png</file>
<file>pathview/pics/VideoPlayer_48.png</file>
- <file>delegatemodel/slideshow.qml</file>
<file>delegatemodel/dragselection.qml</file>
<file>objectmodel/objectmodel.qml</file>
<file>views.qml</file>
diff --git a/examples/quick/window/CMakeLists.txt b/examples/quick/window/CMakeLists.txt
index 31932654ea..58bd8fd7e9 100644
--- a/examples/quick/window/CMakeLists.txt
+++ b/examples/quick/window/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(window LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/window")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory("../shared" "shared")
@@ -23,15 +17,14 @@ qt_add_executable(windowexample
)
target_link_libraries(windowexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_add_qml_module(windowexample
URI window
- AUTO_RESOURCE_PREFIX
QML_FILES
"AllScreens.qml"
"CurrentScreen.qml"
@@ -42,9 +35,16 @@ qt_add_qml_module(windowexample
add_dependencies(windowexample window_shared)
install(TARGETS windowexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-bundle_shared(windowexample)
+qt_generate_deploy_qml_app_script(
+ TARGET windowexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/window/Splash.qml b/examples/quick/window/Splash.qml
index 0a7da219db..6989425548 100644
--- a/examples/quick/window/Splash.qml
+++ b/examples/quick/window/Splash.qml
@@ -24,19 +24,20 @@ Window {
Image {
id: splashImage
source: Images.qtLogo
- MouseArea {
- anchors.fill: parent
- onClicked: Qt.quit()
+ TapHandler {
+ onTapped: splash.exit()
}
}
+
+ function exit() {
+ splash.visible = false
+ splash.timeout()
+ }
+
//! [timer]
Timer {
- interval: splash.timeoutInterval; running: true; repeat: false
- onTriggered: {
- splash.visible = false
- splash.timeout()
- }
+ interval: splash.timeoutInterval; running: splash.visible; repeat: false
+ onTriggered: splash.exit()
}
//! [timer]
- Component.onCompleted: visible = true
}
diff --git a/examples/quick/window/doc/src/window.qdoc b/examples/quick/window/doc/src/window.qdoc
index 3dfbf1cd0c..ca3b90b76e 100644
--- a/examples/quick/window/doc/src/window.qdoc
+++ b/examples/quick/window/doc/src/window.qdoc
@@ -6,6 +6,7 @@
\brief This example demonstrates the Window and Screen types in QML.
\image qml-window-example.png
\ingroup qtquickexamples
+ \examplecategory {Graphics}
\e{Window and Screen} shows how to:
diff --git a/examples/quick/window/window.qml b/examples/quick/window/window.qml
index 47cc5257bb..99ff4403e4 100644
--- a/examples/quick/window/window.qml
+++ b/examples/quick/window/window.qml
@@ -7,12 +7,11 @@ import QtQuick.Controls
QtObject {
id: root
property real defaultSpacing: 10
- property SystemPalette palette: SystemPalette { }
property var controlWindow: Window {
width: col.implicitWidth + root.defaultSpacing * 2
height: col.implicitHeight + root.defaultSpacing * 2
- color: root.palette.window
+ color: palette.window
title: "Control Window"
Column {
id: col
@@ -90,13 +89,13 @@ QtObject {
" and has visibility " + parent.visibilityToString(root.testWindow.visibility)
}
Rectangle {
- color: root.palette.text
+ color: palette.text
width: parent.width
height: 1
}
CurrentScreen { }
Rectangle {
- color: root.palette.text
+ color: palette.text
width: parent.width
height: 1
}
@@ -117,35 +116,44 @@ QtObject {
anchors.centerIn: parent
text: "Second Window"
}
- MouseArea {
- anchors.fill: parent
- onClicked: root.testWindow.color = "#e0c31e"
+ TapHandler {
+ onTapped: root.testWindow.color = Qt.rgba(0.25 + Math.random() / 2,
+ 0.65 + Math.random() / 4,
+ 0.15 + Math.random() / 3)
}
Button {
- anchors.right: parent.right
- anchors.top: parent.top
- anchors.margins: root.defaultSpacing
- text: root.testWindow.visibility === Window.FullScreen ? "exit fullscreen" : "go fullscreen"
- width: 150
- onClicked: {
- if (root.testWindow.visibility === Window.FullScreen)
- root.testWindow.visibility = Window.AutomaticVisibility
- else
- root.testWindow.visibility = Window.FullScreen
+ id: fullscreenButton
+ anchors {
+ right: parent.right
+ top: parent.top
+ margins: root.defaultSpacing
}
+ width: height
+ checkable: true
+ Binding on checked { value: root.testWindow.visibility === Window.FullScreen }
+ onClicked: root.testWindow.visibility = checked ? Window.FullScreen : Window.AutomaticVisibility
+ text: "⛶"
+ ToolTip.visible: hovered
+ ToolTip.delay: Qt.styleHints.mousePressAndHoldInterval
+ ToolTip.text: root.testWindow.visibility === Window.FullScreen ? qsTr("restore") : qsTr("fill screen")
}
Button {
anchors.left: parent.left
anchors.top: parent.top
anchors.margins: root.defaultSpacing
- text: "X"
- width: 30
+ text: "✘"
+ width: height
+ height: fullscreenButton.height
onClicked: root.testWindow.close()
+ ToolTip.visible: hovered
+ ToolTip.delay: Qt.styleHints.mousePressAndHoldInterval
+ ToolTip.text: qsTr("close this window")
}
}
}
property var splashWindow: Splash {
+ visible: true
onTimeout: root.controlWindow.visible = true
}
}
diff --git a/examples/quick/window/window.qrc b/examples/quick/window/window.qrc
index 89d1de1b1f..206491cc13 100644
--- a/examples/quick/window/window.qrc
+++ b/examples/quick/window/window.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/window">
+ <qresource prefix="/qt/qml/window">
<file>window.qml</file>
<file>Splash.qml</file>
<file>CurrentScreen.qml</file>
diff --git a/examples/quickcontrols/CMakeLists.txt b/examples/quickcontrols/CMakeLists.txt
index e4021bf430..362fa34698 100644
--- a/examples/quickcontrols/CMakeLists.txt
+++ b/examples/quickcontrols/CMakeLists.txt
@@ -1,21 +1,21 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_internal_add_example(attachedstyleproperties)
qt_internal_add_example(gallery)
-if (TARGET Qt::Sql)
+if (TARGET Qt6::Sql)
add_subdirectory(chattutorial)
endif()
-if (QT_FEATURE_quicktemplates2_calendar AND TARGET Qt::Sql)
+if (QT_FEATURE_quicktemplates2_calendar AND TARGET Qt6::Sql)
qt_internal_add_example(eventcalendar)
endif()
qt_internal_add_example(texteditor)
qt_internal_add_example(contactlist)
-qt_internal_add_example(sidepanel)
-qt_internal_add_example(swipetoremove)
qt_internal_add_example(wearable)
qt_internal_add_example(imagine/automotive)
-qt_internal_add_example(imagine/musicplayer)
-if(TARGET Qt::Widgets)
+if (TARGET Qt6::Svg AND NOT ANDROID AND NOT IOS)
+ qt_internal_add_example(filesystemexplorer)
+endif()
+if(TARGET Qt6::Widgets)
qt_internal_add_example(flatstyle)
endif()
diff --git a/examples/quickcontrols/attachedstyleproperties/CMakeLists.txt b/examples/quickcontrols/attachedstyleproperties/CMakeLists.txt
index 4228052a26..0e4f2778fa 100644
--- a/examples/quickcontrols/attachedstyleproperties/CMakeLists.txt
+++ b/examples/quickcontrols/attachedstyleproperties/CMakeLists.txt
@@ -3,14 +3,9 @@ project(attachedstyleproperties LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/attachedstyleproperties")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml QuickControls2)
-qt_standard_project_setup()
+
+qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory(MyStyle)
@@ -28,24 +23,25 @@ qt_add_qml_module(attachedstylepropertiesexample
)
target_link_libraries(attachedstylepropertiesexample PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::QuickControls2
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::QuickControls2
)
add_dependencies(attachedstylepropertiesexample MyStyle)
install(TARGETS attachedstylepropertiesexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-include(../../quick/shared/QtBundleQmlModuleForMacOS.cmake)
-
-set(app_target "attachedstylepropertiesexample")
-set(qml_plugin_target "MyStyleplugin")
-set(qml_module_uri "MyStyle")
-add_qml_module_to_macos_app_bundle(
- "${app_target}" "${qml_plugin_target}" "${qml_module_uri}")
+qt_generate_deploy_qml_app_script(
+ TARGET attachedstylepropertiesexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/attachedstyleproperties/MyStyle/CMakeLists.txt b/examples/quickcontrols/attachedstyleproperties/MyStyle/CMakeLists.txt
index 9cb00a81e7..0ff17420b9 100644
--- a/examples/quickcontrols/attachedstyleproperties/MyStyle/CMakeLists.txt
+++ b/examples/quickcontrols/attachedstyleproperties/MyStyle/CMakeLists.txt
@@ -2,8 +2,6 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
message(FATAL_ERROR "MyStyle should be built as part of the 'attachedstyleproperties' project, and not in isolation.")
endif()
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/attachedstyleproperties")
-
qt_policy(SET QTP0001 NEW)
qt_add_qml_module(MyStyle
URI MyStyle
@@ -28,18 +26,22 @@ generate_export_header(MyStyle)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml QuickControls2)
target_link_libraries(MyStyle PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::QuickControls2
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::QuickControls2
)
install(TARGETS MyStyle
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
+install(TARGETS MyStyleplugin
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/MyStyle"
+ LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR}/MyStyle"
+)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qmldir
- DESTINATION "${INSTALL_EXAMPLEDIR}"
+ DESTINATION "${CMAKE_INSTALL_BINDIR}/MyStyle"
)
diff --git a/examples/quickcontrols/attachedstyleproperties/MyStyle/Label.qml b/examples/quickcontrols/attachedstyleproperties/MyStyle/Label.qml
index 3d045aa70e..202528a732 100644
--- a/examples/quickcontrols/attachedstyleproperties/MyStyle/Label.qml
+++ b/examples/quickcontrols/attachedstyleproperties/MyStyle/Label.qml
@@ -1,7 +1,6 @@
-// Copyright (C) 2022 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick
import QtQuick.Templates as T
import MyStyle
diff --git a/examples/quickcontrols/attachedstyleproperties/MyStyle/Popup.qml b/examples/quickcontrols/attachedstyleproperties/MyStyle/Popup.qml
index 0f5e753f60..25c4ace64a 100644
--- a/examples/quickcontrols/attachedstyleproperties/MyStyle/Popup.qml
+++ b/examples/quickcontrols/attachedstyleproperties/MyStyle/Popup.qml
@@ -1,6 +1,7 @@
-// Copyright (C) 2022 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Templates as T
import MyStyle
diff --git a/examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp b/examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp
index 40f7af702e..feadb138f7 100644
--- a/examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp
+++ b/examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp
@@ -108,8 +108,6 @@ QColor MyStyle::toolBarColor() const
QColor MyStyle::popupColor() const
{
-// const QColor winColor = windowColor();
-// return m_theme == Light ? winColor.darker(120) : winColor.lighter(120);
return windowColor().lighter(120);
}
diff --git a/examples/quickcontrols/attachedstyleproperties/attachedstyleproperties.qml b/examples/quickcontrols/attachedstyleproperties/attachedstyleproperties.qml
index e08e19801f..95ff4418e8 100644
--- a/examples/quickcontrols/attachedstyleproperties/attachedstyleproperties.qml
+++ b/examples/quickcontrols/attachedstyleproperties/attachedstyleproperties.qml
@@ -1,4 +1,4 @@
-// Copyright (C) 2022 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
@@ -32,6 +32,7 @@ ApplicationWindow {
Switch {
id: darkModeSwitch
text: qsTr("Dark mode")
+ Layout.fillWidth: false
}
}
}
@@ -48,11 +49,13 @@ ApplicationWindow {
RowLayout {
Button {
text: qsTr("Open Popup")
+ Layout.fillWidth: false
onClicked: popup.open()
}
Button {
text: qsTr("Open Window")
+ Layout.fillWidth: false
onClicked: {
if (!childWindow.active)
childWindow.show()
@@ -65,8 +68,8 @@ ApplicationWindow {
Popup {
id: popup
- dim: true
anchors.centerIn: parent
+ closePolicy: Popup.NoAutoClose
ColumnLayout {
anchors.centerIn: parent
@@ -80,6 +83,7 @@ ApplicationWindow {
Button {
text: qsTr("Close Popup")
Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: false
onClicked: popup.close()
}
}
@@ -103,6 +107,7 @@ ApplicationWindow {
Button {
text: qsTr("Close Window")
Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: false
onClicked: childWindow.close()
}
}
diff --git a/examples/quickcontrols/attachedstyleproperties/doc/src/qtquickcontrols-attachedstyleproperties.qdoc b/examples/quickcontrols/attachedstyleproperties/doc/src/qtquickcontrols-attachedstyleproperties.qdoc
index 4e273ffd38..1b0116c7ec 100644
--- a/examples/quickcontrols/attachedstyleproperties/doc/src/qtquickcontrols-attachedstyleproperties.qdoc
+++ b/examples/quickcontrols/attachedstyleproperties/doc/src/qtquickcontrols-attachedstyleproperties.qdoc
@@ -6,6 +6,7 @@
\keyword Qt Quick Controls - Attached Style Properties Example
\title Qt Quick Controls - Attached Style Properties Example
\ingroup qtquickcontrols-examples
+ \examplecategory {Graphics}
\brief Demonstrates use of QQuickAttachedPropertyPropagator.
\image qtquickcontrols-attachedstyleproperties.png
diff --git a/examples/quickcontrols/chattutorial/CMakeLists.txt b/examples/quickcontrols/chattutorial/CMakeLists.txt
index 4da558f2f5..83744b78cf 100644
--- a/examples/quickcontrols/chattutorial/CMakeLists.txt
+++ b/examples/quickcontrols/chattutorial/CMakeLists.txt
@@ -1,10 +1,16 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qt_internal_add_example(chapter1)
qt_internal_add_example(chapter2)
qt_internal_add_example(chapter3)
-if (TARGET Qt::Sql)
+if (TARGET Qt6::Sql)
qt_internal_add_example(chapter4)
+ if(TARGET chattutorial-chapter4)
+ set_target_properties(chattutorial-chapter4 PROPERTIES UNITY_BUILD OFF)
+ endif()
qt_internal_add_example(chapter5)
+ if(TARGET chattutorial-chapter5)
+ set_target_properties(chattutorial-chapter5 PROPERTIES UNITY_BUILD OFF)
+ endif()
endif()
diff --git a/examples/quickcontrols/chattutorial/chapter1/CMakeLists.txt b/examples/quickcontrols/chattutorial/chapter1/CMakeLists.txt
index 549790b9e8..c17c054418 100644
--- a/examples/quickcontrols/chattutorial/chapter1/CMakeLists.txt
+++ b/examples/quickcontrols/chattutorial/chapter1/CMakeLists.txt
@@ -1,17 +1,11 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(chapter1 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/chattutorial/chapter1")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
qt_add_executable(chattutorial-chapter1 WIN32 MACOSX_BUNDLE
@@ -19,17 +13,17 @@ qt_add_executable(chattutorial-chapter1 WIN32 MACOSX_BUNDLE
)
target_link_libraries(chattutorial-chapter1 PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_policy(SET QTP0001 NEW)
qt_add_qml_module(chattutorial-chapter1
- URI chapter1
+ URI chattutorial
QML_FILES
- "main.qml"
+ "Main.qml"
)
qt6_add_resources(chattutorial-chapter1 "conf"
@@ -40,7 +34,16 @@ qt6_add_resources(chattutorial-chapter1 "conf"
)
install(TARGETS chattutorial-chapter1
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET chattutorial-chapter1
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/chattutorial/chapter1/Main.qml b/examples/quickcontrols/chattutorial/chapter1/Main.qml
new file mode 100644
index 0000000000..19496f44eb
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter1/Main.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 540
+ height: 960
+ visible: true
+
+ Page {
+ anchors.fill: parent
+ header: Label {
+ padding: 10
+ text: qsTr("Contacts")
+ font.pixelSize: 20
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+}
+
diff --git a/examples/quickcontrols/chattutorial/chapter1/chapter1.pro b/examples/quickcontrols/chattutorial/chapter1/chapter1.pro
index 40c7d2ff7d..323b0709d4 100644
--- a/examples/quickcontrols/chattutorial/chapter1/chapter1.pro
+++ b/examples/quickcontrols/chattutorial/chapter1/chapter1.pro
@@ -1,12 +1,13 @@
TEMPLATE = app
QT += qml quick
-CONFIG += c++11
SOURCES += main.cpp
-resources.files = main.qml
-resources.prefix = qt/qml/chapter1/
+resources.files = \
+ Main.qml \
+ qmldir
+resources.prefix = qt/qml/chattutorial/
RESOURCES += resources \
qtquickcontrols2.conf
diff --git a/examples/quickcontrols/chattutorial/chapter1/main.cpp b/examples/quickcontrols/chattutorial/chapter1/main.cpp
index 7252c0c3ad..73d4bf3b63 100644
--- a/examples/quickcontrols/chattutorial/chapter1/main.cpp
+++ b/examples/quickcontrols/chattutorial/chapter1/main.cpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
@@ -9,7 +9,7 @@ int main(int argc, char *argv[])
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
- engine.load(QUrl(QStringLiteral("qrc:/qt/qml/chapter1/main.qml")));
+ engine.loadFromModule("chattutorial", "Main");
return app.exec();
}
diff --git a/examples/quickcontrols/chattutorial/chapter1/main.qml b/examples/quickcontrols/chattutorial/chapter1/main.qml
deleted file mode 100644
index d0651b5816..0000000000
--- a/examples/quickcontrols/chattutorial/chapter1/main.qml
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-
-ApplicationWindow {
- width: 540
- height: 960
- visible: true
-
- Page {
- anchors.fill: parent
- header: Label {
- padding: 10
- text: qsTr("Contacts")
- font.pixelSize: 20
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- }
- }
-}
-
diff --git a/examples/quickcontrols/chattutorial/chapter1/qmldir b/examples/quickcontrols/chattutorial/chapter1/qmldir
new file mode 100644
index 0000000000..1044557225
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter1/qmldir
@@ -0,0 +1,2 @@
+module chattutorial
+Main 1.0 Main.qml
diff --git a/examples/quickcontrols/chattutorial/chapter2/CMakeLists.txt b/examples/quickcontrols/chattutorial/chapter2/CMakeLists.txt
index 561861afc0..b6e37b4449 100644
--- a/examples/quickcontrols/chattutorial/chapter2/CMakeLists.txt
+++ b/examples/quickcontrols/chattutorial/chapter2/CMakeLists.txt
@@ -1,17 +1,11 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(chapter2 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/chattutorial/chapter2")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
qt_add_executable(chattutorial-chapter2 WIN32 MACOSX_BUNDLE
@@ -19,17 +13,17 @@ qt_add_executable(chattutorial-chapter2 WIN32 MACOSX_BUNDLE
)
target_link_libraries(chattutorial-chapter2 PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_policy(SET QTP0001 NEW)
qt_add_qml_module(chattutorial-chapter2
- URI chapter2
+ URI chattutorial
QML_FILES
- "main.qml"
+ "Main.qml"
RESOURCES
"images/Albert_Einstein.png"
"images/Albert_Einstein@2x.png"
@@ -53,7 +47,16 @@ qt6_add_resources(chattutorial-chapter2 "conf"
)
install(TARGETS chattutorial-chapter2
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET chattutorial-chapter2
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/chattutorial/chapter2/Main.qml b/examples/quickcontrols/chattutorial/chapter2/Main.qml
new file mode 100644
index 0000000000..daa4360fb9
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/Main.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+pragma ComponentBehavior: Bound
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 540
+ height: 960
+ visible: true
+
+ Page {
+ anchors.fill: parent
+ header: Label {
+ padding: 10
+ text: qsTr("Contacts")
+ font.pixelSize: 20
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ ListView {
+ id: listView
+ anchors.fill: parent
+ topMargin: 48
+ leftMargin: 48
+ bottomMargin: 48
+ rightMargin: 48
+ spacing: 20
+ model: ["Albert Einstein", "Ernest Hemingway", "Hans Gude"]
+ delegate: ItemDelegate {
+ id: contactDelegate
+ text: modelData
+ width: listView.width - listView.leftMargin - listView.rightMargin
+ height: avatar.implicitHeight
+ leftPadding: avatar.implicitWidth + 32
+
+ required property string modelData
+
+ Image {
+ id: avatar
+ source: "images/" + contactDelegate.modelData.replace(" ", "_") + ".png"
+ }
+ }
+ }
+ }
+}
+
diff --git a/examples/quickcontrols/chattutorial/chapter2/chapter2.pro b/examples/quickcontrols/chattutorial/chapter2/chapter2.pro
index 8679db986a..88f70ce08a 100644
--- a/examples/quickcontrols/chattutorial/chapter2/chapter2.pro
+++ b/examples/quickcontrols/chattutorial/chapter2/chapter2.pro
@@ -1,7 +1,6 @@
TEMPLATE = app
QT += qml quick
-CONFIG += c++11
SOURCES += main.cpp
@@ -18,8 +17,9 @@ resources.files = \
images/Hans_Gude@2x.png \
images/Hans_Gude@3x.png \
images/Hans_Gude@4x.png \
- main.qml
-resources.prefix = qt/qml/chapter2/
+ Main.qml \
+ qmldir
+resources.prefix = qt/qml/chattutorial/
RESOURCES += resources \
qtquickcontrols2.conf
diff --git a/examples/quickcontrols/chattutorial/chapter2/main.cpp b/examples/quickcontrols/chattutorial/chapter2/main.cpp
index 07f034a827..73d4bf3b63 100644
--- a/examples/quickcontrols/chattutorial/chapter2/main.cpp
+++ b/examples/quickcontrols/chattutorial/chapter2/main.cpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
@@ -9,7 +9,7 @@ int main(int argc, char *argv[])
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
- engine.load(QUrl(QStringLiteral("qrc:/qt/qml/chapter2/main.qml")));
+ engine.loadFromModule("chattutorial", "Main");
return app.exec();
}
diff --git a/examples/quickcontrols/chattutorial/chapter2/main.qml b/examples/quickcontrols/chattutorial/chapter2/main.qml
deleted file mode 100644
index 851b482b01..0000000000
--- a/examples/quickcontrols/chattutorial/chapter2/main.qml
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-
-ApplicationWindow {
- width: 540
- height: 960
- visible: true
-
- Page {
- anchors.fill: parent
- header: Label {
- padding: 10
- text: qsTr("Contacts")
- font.pixelSize: 20
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- }
-
- ListView {
- id: listView
- anchors.fill: parent
- topMargin: 48
- leftMargin: 48
- bottomMargin: 48
- rightMargin: 48
- spacing: 20
- model: ["Albert Einstein", "Ernest Hemingway", "Hans Gude"]
- delegate: ItemDelegate {
- text: modelData
- width: listView.width - listView.leftMargin - listView.rightMargin
- height: avatar.implicitHeight
- leftPadding: avatar.implicitWidth + 32
-
- Image {
- id: avatar
- source: "images/" + modelData.replace(" ", "_") + ".png"
- }
- }
- }
- }
-}
-
diff --git a/examples/quickcontrols/chattutorial/chapter2/qmldir b/examples/quickcontrols/chattutorial/chapter2/qmldir
new file mode 100644
index 0000000000..1044557225
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/qmldir
@@ -0,0 +1,2 @@
+module chattutorial
+Main 1.0 Main.qml
diff --git a/examples/quickcontrols/chattutorial/chapter3/CMakeLists.txt b/examples/quickcontrols/chattutorial/chapter3/CMakeLists.txt
index 92ac5683fd..a101f3ebb3 100644
--- a/examples/quickcontrols/chattutorial/chapter3/CMakeLists.txt
+++ b/examples/quickcontrols/chattutorial/chapter3/CMakeLists.txt
@@ -1,17 +1,11 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(chapter3 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/chattutorial/chapter3")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
qt_add_executable(chattutorial-chapter3 WIN32 MACOSX_BUNDLE
@@ -19,19 +13,19 @@ qt_add_executable(chattutorial-chapter3 WIN32 MACOSX_BUNDLE
)
target_link_libraries(chattutorial-chapter3 PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
qt_policy(SET QTP0001 NEW)
qt_add_qml_module(chattutorial-chapter3
- URI chapter3
+ URI chattutorial
QML_FILES
"ContactPage.qml"
"ConversationPage.qml"
- "main.qml"
+ "Main.qml"
RESOURCES
"images/Albert_Einstein.png"
"images/Albert_Einstein@2x.png"
@@ -55,7 +49,16 @@ qt6_add_resources(chattutorial-chapter3 "conf"
)
install(TARGETS chattutorial-chapter3
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET chattutorial-chapter3
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/chattutorial/chapter3/ContactPage.qml b/examples/quickcontrols/chattutorial/chapter3/ContactPage.qml
index 88979a40b2..939d911964 100644
--- a/examples/quickcontrols/chattutorial/chapter3/ContactPage.qml
+++ b/examples/quickcontrols/chattutorial/chapter3/ContactPage.qml
@@ -1,6 +1,8 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
+
import QtQuick
import QtQuick.Controls
@@ -25,15 +27,19 @@ Page {
spacing: 20
model: ["Albert Einstein", "Ernest Hemingway", "Hans Gude"]
delegate: ItemDelegate {
+ id: contactDelegate
text: modelData
width: listView.width - listView.leftMargin - listView.rightMargin
height: avatar.implicitHeight
leftPadding: avatar.implicitWidth + 32
+
+ required property string modelData
+
onClicked: root.StackView.view.push("ConversationPage.qml", { inConversationWith: modelData })
Image {
id: avatar
- source: "images/" + modelData.replace(" ", "_") + ".png"
+ source: "images/" + contactDelegate.modelData.replace(" ", "_") + ".png"
}
}
}
diff --git a/examples/quickcontrols/chattutorial/chapter3/ConversationPage.qml b/examples/quickcontrols/chattutorial/chapter3/ConversationPage.qml
index e61d014e6e..9a4f1861bd 100644
--- a/examples/quickcontrols/chattutorial/chapter3/ConversationPage.qml
+++ b/examples/quickcontrols/chattutorial/chapter3/ConversationPage.qml
@@ -1,6 +1,8 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
+
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
@@ -21,7 +23,7 @@ Page {
Label {
id: pageTitle
- text: inConversationWith
+ text: root.inConversationWith
font.pixelSize: 20
anchors.centerIn: parent
}
@@ -41,28 +43,30 @@ Page {
spacing: 12
model: 10
delegate: Row {
- readonly property bool sentByMe: index % 2 == 0
-
+ id: messageDelegate
anchors.right: sentByMe ? listView.contentItem.right : undefined
spacing: 6
+ required property int index
+ readonly property bool sentByMe: index % 2 == 0
+
Rectangle {
id: avatar
width: height
height: parent.height
color: "grey"
- visible: !sentByMe
+ visible: !messageDelegate.sentByMe
}
Rectangle {
width: 80
height: 40
- color: sentByMe ? "lightgrey" : "steelblue"
+ color: messageDelegate.sentByMe ? "lightgrey" : "steelblue"
Label {
anchors.centerIn: parent
- text: index
- color: sentByMe ? "black" : "white"
+ text: messageDelegate.index
+ color: messageDelegate.sentByMe ? "black" : "white"
}
}
}
@@ -73,6 +77,7 @@ Page {
Pane {
id: pane
Layout.fillWidth: true
+ Layout.fillHeight: false
RowLayout {
width: parent.width
@@ -88,6 +93,7 @@ Page {
id: sendButton
text: qsTr("Send")
enabled: messageField.length > 0
+ Layout.fillWidth: false
}
}
}
diff --git a/examples/quickcontrols/chattutorial/chapter3/Main.qml b/examples/quickcontrols/chattutorial/chapter3/Main.qml
new file mode 100644
index 0000000000..bb968e9f7a
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/Main.qml
@@ -0,0 +1,18 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: 540
+ height: 960
+ visible: true
+
+ StackView {
+ id: stackView
+ anchors.fill: parent
+ initialItem: ContactPage {}
+ }
+}
+
diff --git a/examples/quickcontrols/chattutorial/chapter3/chapter3.pro b/examples/quickcontrols/chattutorial/chapter3/chapter3.pro
index 5314e2dd36..b0eebae94a 100644
--- a/examples/quickcontrols/chattutorial/chapter3/chapter3.pro
+++ b/examples/quickcontrols/chattutorial/chapter3/chapter3.pro
@@ -1,7 +1,6 @@
TEMPLATE = app
QT += qml quick
-CONFIG += c++11
SOURCES += main.cpp
@@ -20,8 +19,9 @@ resources.files = \
images/Hans_Gude@2x.png \
images/Hans_Gude@3x.png \
images/Hans_Gude@4x.png \
- main.qml
-resources.prefix = qt/qml/chapter3/
+ Main.qml \
+ qmldir
+resources.prefix = qt/qml/chattutorial/
RESOURCES += resources \
qtquickcontrols2.conf
diff --git a/examples/quickcontrols/chattutorial/chapter3/main.cpp b/examples/quickcontrols/chattutorial/chapter3/main.cpp
index 71e250bed5..73d4bf3b63 100644
--- a/examples/quickcontrols/chattutorial/chapter3/main.cpp
+++ b/examples/quickcontrols/chattutorial/chapter3/main.cpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
@@ -9,7 +9,7 @@ int main(int argc, char *argv[])
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
- engine.load(QUrl(QStringLiteral("qrc:/qt/qml/chapter3/main.qml")));
+ engine.loadFromModule("chattutorial", "Main");
return app.exec();
}
diff --git a/examples/quickcontrols/chattutorial/chapter3/main.qml b/examples/quickcontrols/chattutorial/chapter3/main.qml
deleted file mode 100644
index da080e3a45..0000000000
--- a/examples/quickcontrols/chattutorial/chapter3/main.qml
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-
-ApplicationWindow {
- id: window
- width: 540
- height: 960
- visible: true
-
- StackView {
- id: stackView
- anchors.fill: parent
- initialItem: ContactPage {}
- }
-}
-
diff --git a/examples/quickcontrols/chattutorial/chapter3/qmldir b/examples/quickcontrols/chattutorial/chapter3/qmldir
new file mode 100644
index 0000000000..16e455a37b
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/qmldir
@@ -0,0 +1,4 @@
+module chattutorial
+ContactPage 1.0 ContactPage.qml
+ConversationPage 1.0 ConversationPage.qml
+Main 1.0 Main.qml
diff --git a/examples/quickcontrols/chattutorial/chapter4/CMakeLists.txt b/examples/quickcontrols/chattutorial/chapter4/CMakeLists.txt
index cc56b319e7..2d5b930e45 100644
--- a/examples/quickcontrols/chattutorial/chapter4/CMakeLists.txt
+++ b/examples/quickcontrols/chattutorial/chapter4/CMakeLists.txt
@@ -1,17 +1,11 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(chapter4 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/chattutorial/chapter4")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick Sql)
qt_add_executable(chattutorial-chapter4 WIN32 MACOSX_BUNDLE
@@ -21,20 +15,20 @@ qt_add_executable(chattutorial-chapter4 WIN32 MACOSX_BUNDLE
)
target_link_libraries(chattutorial-chapter4 PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
- Qt::Sql
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+ Qt6::Sql
)
qt_policy(SET QTP0001 NEW)
qt_add_qml_module(chattutorial-chapter4
- URI chapter4
+ URI chattutorial
QML_FILES
"ContactPage.qml"
"ConversationPage.qml"
- "main.qml"
+ "Main.qml"
RESOURCES
"images/Albert_Einstein.png"
"images/Albert_Einstein@2x.png"
@@ -58,7 +52,16 @@ qt6_add_resources(chattutorial-chapter4 "conf"
)
install(TARGETS chattutorial-chapter4
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET chattutorial-chapter4
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/chattutorial/chapter4/ContactPage.qml b/examples/quickcontrols/chattutorial/chapter4/ContactPage.qml
index 739d0b5402..2ed2243289 100644
--- a/examples/quickcontrols/chattutorial/chapter4/ContactPage.qml
+++ b/examples/quickcontrols/chattutorial/chapter4/ContactPage.qml
@@ -1,10 +1,12 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
+
import QtQuick
import QtQuick.Controls
-import io.qt.examples.chattutorial
+import chattutorial
Page {
id: root
@@ -27,15 +29,21 @@ Page {
spacing: 20
model: SqlContactModel {}
delegate: ItemDelegate {
+ id: contactDelegate
text: model.display
width: listView.width - listView.leftMargin - listView.rightMargin
height: avatar.implicitHeight
leftPadding: avatar.implicitWidth + 32
+
+ // Use "model" rather than the specific "display" role, because it
+ // would conflict with the display property of ItemDelegate.
+ required property var model
+
onClicked: root.StackView.view.push("ConversationPage.qml", { inConversationWith: model.display })
Image {
id: avatar
- source: "images/" + model.display.replace(" ", "_") + ".png"
+ source: "images/" + contactDelegate.model.display.replace(" ", "_") + ".png"
}
}
}
diff --git a/examples/quickcontrols/chattutorial/chapter4/ConversationPage.qml b/examples/quickcontrols/chattutorial/chapter4/ConversationPage.qml
index ef5b959aec..87ed487c66 100644
--- a/examples/quickcontrols/chattutorial/chapter4/ConversationPage.qml
+++ b/examples/quickcontrols/chattutorial/chapter4/ConversationPage.qml
@@ -1,11 +1,13 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
+
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
-import io.qt.examples.chattutorial
+import chattutorial
Page {
id: root
@@ -23,7 +25,7 @@ Page {
Label {
id: pageTitle
- text: inConversationWith
+ text: root.inConversationWith
font.pixelSize: 20
anchors.centerIn: parent
}
@@ -42,34 +44,40 @@ Page {
verticalLayoutDirection: ListView.BottomToTop
spacing: 12
model: SqlConversationModel {
- recipient: inConversationWith
+ recipient: root.inConversationWith
}
delegate: Column {
+ id: conversationDelegate
anchors.right: sentByMe ? listView.contentItem.right : undefined
spacing: 6
- readonly property bool sentByMe: model.recipient !== "Me"
+ required property string author
+ required property string recipient
+ required property date timestamp
+ required property string message
+ readonly property bool sentByMe: recipient !== "Me"
Row {
id: messageRow
spacing: 6
- anchors.right: sentByMe ? parent.right : undefined
+ anchors.right: conversationDelegate.sentByMe ? parent.right : undefined
Image {
id: avatar
- source: !sentByMe ? "images/" + model.author.replace(" ", "_") + ".png" : ""
+ source: !conversationDelegate.sentByMe
+ ? "images/" + conversationDelegate.author.replace(" ", "_") + ".png" : ""
}
Rectangle {
width: Math.min(messageText.implicitWidth + 24,
- listView.width - (!sentByMe ? avatar.width + messageRow.spacing : 0))
+ listView.width - (!conversationDelegate.sentByMe ? avatar.width + messageRow.spacing : 0))
height: messageText.implicitHeight + 24
- color: sentByMe ? "lightgrey" : "steelblue"
+ color: conversationDelegate.sentByMe ? "lightgrey" : "steelblue"
Label {
id: messageText
- text: model.message
- color: sentByMe ? "black" : "white"
+ text: conversationDelegate.message
+ color: conversationDelegate.sentByMe ? "black" : "white"
anchors.fill: parent
anchors.margins: 12
wrapMode: Label.Wrap
@@ -79,9 +87,9 @@ Page {
Label {
id: timestampText
- text: Qt.formatDateTime(model.timestamp, "d MMM hh:mm")
+ text: Qt.formatDateTime(conversationDelegate.timestamp, "d MMM hh:mm")
color: "lightgrey"
- anchors.right: sentByMe ? parent.right : undefined
+ anchors.right: conversationDelegate.sentByMe ? parent.right : undefined
}
}
@@ -91,6 +99,7 @@ Page {
Pane {
id: pane
Layout.fillWidth: true
+ Layout.fillHeight: false
RowLayout {
width: parent.width
@@ -106,9 +115,10 @@ Page {
id: sendButton
text: qsTr("Send")
enabled: messageField.length > 0
+ Layout.fillWidth: false
onClicked: {
- listView.model.sendMessage(inConversationWith, messageField.text);
- messageField.text = "";
+ listView.model.sendMessage(root.inConversationWith, messageField.text)
+ messageField.text = ""
}
}
}
diff --git a/examples/quickcontrols/chattutorial/chapter4/Main.qml b/examples/quickcontrols/chattutorial/chapter4/Main.qml
new file mode 100644
index 0000000000..bb968e9f7a
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/Main.qml
@@ -0,0 +1,18 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: 540
+ height: 960
+ visible: true
+
+ StackView {
+ id: stackView
+ anchors.fill: parent
+ initialItem: ContactPage {}
+ }
+}
+
diff --git a/examples/quickcontrols/chattutorial/chapter4/chapter4.pro b/examples/quickcontrols/chattutorial/chapter4/chapter4.pro
index 399b3506c2..4f40fd726b 100644
--- a/examples/quickcontrols/chattutorial/chapter4/chapter4.pro
+++ b/examples/quickcontrols/chattutorial/chapter4/chapter4.pro
@@ -1,7 +1,11 @@
TEMPLATE = app
QT += qml quick sql
-CONFIG += c++11
+CONFIG += c++11 qmltypes
+
+QML_IMPORT_PATH = $$pwd/.
+QML_IMPORT_NAME = chattutorial
+QML_IMPORT_MAJOR_VERSION = 1
HEADERS += sqlcontactmodel.h \
sqlconversationmodel.h
@@ -25,8 +29,9 @@ resources.files = \
images/Hans_Gude@2x.png \
images/Hans_Gude@3x.png \
images/Hans_Gude@4x.png \
- main.qml
-resources.prefix = qt/qml/chapter4/
+ Main.qml \
+ qmldir
+resources.prefix = qt/qml/chattutorial/
RESOURCES += resources \
qtquickcontrols2.conf
diff --git a/examples/quickcontrols/chattutorial/chapter4/main.cpp b/examples/quickcontrols/chattutorial/chapter4/main.cpp
index 4c7289deb3..bcb6c1e923 100644
--- a/examples/quickcontrols/chattutorial/chapter4/main.cpp
+++ b/examples/quickcontrols/chattutorial/chapter4/main.cpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtCore>
@@ -7,9 +7,6 @@
#include <QSqlError>
#include <QtQml>
-#include "sqlcontactmodel.h"
-#include "sqlconversationmodel.h"
-
static void connectToDatabase()
{
QSqlDatabase database = QSqlDatabase::database();
@@ -37,13 +34,10 @@ int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
- qmlRegisterType<SqlContactModel>("io.qt.examples.chattutorial", 1, 0, "SqlContactModel");
- qmlRegisterType<SqlConversationModel>("io.qt.examples.chattutorial", 1, 0, "SqlConversationModel");
-
connectToDatabase();
QQmlApplicationEngine engine;
- engine.load(QUrl(QStringLiteral("qrc:/qt/qml/chapter4/main.qml")));
+ engine.loadFromModule("chattutorial", "Main");
if (engine.rootObjects().isEmpty())
return -1;
diff --git a/examples/quickcontrols/chattutorial/chapter4/main.qml b/examples/quickcontrols/chattutorial/chapter4/main.qml
deleted file mode 100644
index da080e3a45..0000000000
--- a/examples/quickcontrols/chattutorial/chapter4/main.qml
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-
-ApplicationWindow {
- id: window
- width: 540
- height: 960
- visible: true
-
- StackView {
- id: stackView
- anchors.fill: parent
- initialItem: ContactPage {}
- }
-}
-
diff --git a/examples/quickcontrols/chattutorial/chapter4/qmldir b/examples/quickcontrols/chattutorial/chapter4/qmldir
new file mode 100644
index 0000000000..27f99a4777
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/qmldir
@@ -0,0 +1,5 @@
+module chattutorial
+ContactPage 1.0 ContactPage.qml
+ConversationPage 1.0 ConversationPage.qml
+Main 1.0 Main.qml
+typeinfo chapter4.qmltypes
diff --git a/examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.cpp b/examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.cpp
index 0bccc0d7af..189924deec 100644
--- a/examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.cpp
+++ b/examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.cpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "sqlcontactmodel.h"
@@ -37,7 +37,7 @@ SqlContactModel::SqlContactModel(QObject *parent) :
if (!query.exec("SELECT * FROM Contacts"))
qFatal("Contacts SELECT query failed: %s", qPrintable(query.lastError().text()));
- setQuery(query);
+ setQuery(std::move(query));
if (lastError().isValid())
qFatal("Cannot set query on SqlContactModel: %s", qPrintable(lastError().text()));
}
diff --git a/examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.h b/examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.h
index a6d24a4774..c7f9a154eb 100644
--- a/examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.h
+++ b/examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.h
@@ -1,13 +1,17 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef SQLCONTACTMODEL_H
#define SQLCONTACTMODEL_H
+#include <QQmlEngine>
#include <QSqlQueryModel>
class SqlContactModel : public QSqlQueryModel
{
+ Q_OBJECT
+ QML_ELEMENT
+
public:
SqlContactModel(QObject *parent = nullptr);
};
diff --git a/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.cpp b/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.cpp
index 1a1594b094..5be01de52c 100644
--- a/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.cpp
+++ b/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.cpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "sqlconversationmodel.h"
diff --git a/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.h b/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.h
index 8a3cdd4c43..b4917c0eff 100644
--- a/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.h
+++ b/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.h
@@ -1,14 +1,16 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef SQLCONVERSATIONMODEL_H
#define SQLCONVERSATIONMODEL_H
+#include <QQmlEngine>
#include <QSqlTableModel>
class SqlConversationModel : public QSqlTableModel
{
Q_OBJECT
+ QML_ELEMENT
Q_PROPERTY(QString recipient READ recipient WRITE setRecipient NOTIFY recipientChanged)
public:
diff --git a/examples/quickcontrols/chattutorial/chapter5/+Material/ChatToolBar.qml b/examples/quickcontrols/chattutorial/chapter5/+Material/ChatToolBar.qml
index 3fa10c7f13..1b46cfec4e 100644
--- a/examples/quickcontrols/chattutorial/chapter5/+Material/ChatToolBar.qml
+++ b/examples/quickcontrols/chattutorial/chapter5/+Material/ChatToolBar.qml
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick.Controls
diff --git a/examples/quickcontrols/chattutorial/chapter5/CMakeLists.txt b/examples/quickcontrols/chattutorial/chapter5/CMakeLists.txt
index dfffa0f6de..fa20c96d2d 100644
--- a/examples/quickcontrols/chattutorial/chapter5/CMakeLists.txt
+++ b/examples/quickcontrols/chattutorial/chapter5/CMakeLists.txt
@@ -1,17 +1,11 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(chapter5 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/chattutorial/chapter5")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick Sql)
qt_add_executable(chattutorial-chapter5 WIN32 MACOSX_BUNDLE
@@ -21,22 +15,22 @@ qt_add_executable(chattutorial-chapter5 WIN32 MACOSX_BUNDLE
)
target_link_libraries(chattutorial-chapter5 PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
- Qt::Sql
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+ Qt6::Sql
)
qt_policy(SET QTP0001 NEW)
qt_add_qml_module(chattutorial-chapter5
- URI chapter5
+ URI chattutorial
QML_FILES
"+Material/ChatToolBar.qml"
"ChatToolBar.qml"
"ContactPage.qml"
"ConversationPage.qml"
- "main.qml"
+ "Main.qml"
RESOURCES
"images/Albert_Einstein.png"
"images/Albert_Einstein@2x.png"
@@ -60,7 +54,16 @@ qt6_add_resources(chattutorial-chapter5 "conf"
)
install(TARGETS chattutorial-chapter5
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET chattutorial-chapter5
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/chattutorial/chapter5/ChatToolBar.qml b/examples/quickcontrols/chattutorial/chapter5/ChatToolBar.qml
index 73f2c655a9..af3a7a3f8c 100644
--- a/examples/quickcontrols/chattutorial/chapter5/ChatToolBar.qml
+++ b/examples/quickcontrols/chattutorial/chapter5/ChatToolBar.qml
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick.Controls
diff --git a/examples/quickcontrols/chattutorial/chapter5/ContactPage.qml b/examples/quickcontrols/chattutorial/chapter5/ContactPage.qml
index 920c824090..d7254a52b3 100644
--- a/examples/quickcontrols/chattutorial/chapter5/ContactPage.qml
+++ b/examples/quickcontrols/chattutorial/chapter5/ContactPage.qml
@@ -1,10 +1,12 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
+
import QtQuick
import QtQuick.Controls
-import io.qt.examples.chattutorial
+import chattutorial
Page {
id: root
@@ -27,15 +29,21 @@ Page {
spacing: 20
model: SqlContactModel {}
delegate: ItemDelegate {
+ id: contactDelegate
text: model.display
width: listView.width - listView.leftMargin - listView.rightMargin
height: avatar.implicitHeight
leftPadding: avatar.implicitWidth + 32
+
+ // Use "model" rather than the specific "display" role, because it
+ // would conflict with the display property of ItemDelegate.
+ required property var model
+
onClicked: root.StackView.view.push("ConversationPage.qml", { inConversationWith: model.display })
Image {
id: avatar
- source: "images/" + model.display.replace(" ", "_") + ".png"
+ source: "images/" + contactDelegate.model.display.replace(" ", "_") + ".png"
}
}
}
diff --git a/examples/quickcontrols/chattutorial/chapter5/ConversationPage.qml b/examples/quickcontrols/chattutorial/chapter5/ConversationPage.qml
index 6e209b7a85..db45deac5b 100644
--- a/examples/quickcontrols/chattutorial/chapter5/ConversationPage.qml
+++ b/examples/quickcontrols/chattutorial/chapter5/ConversationPage.qml
@@ -1,11 +1,13 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
+
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
-import io.qt.examples.chattutorial
+import chattutorial
Page {
id: root
@@ -23,7 +25,7 @@ Page {
Label {
id: pageTitle
- text: inConversationWith
+ text: root.inConversationWith
font.pixelSize: 20
anchors.centerIn: parent
}
@@ -42,33 +44,39 @@ Page {
verticalLayoutDirection: ListView.BottomToTop
spacing: 12
model: SqlConversationModel {
- recipient: inConversationWith
+ recipient: root.inConversationWith
}
delegate: Column {
+ id: conversationDelegate
anchors.right: sentByMe ? listView.contentItem.right : undefined
spacing: 6
- readonly property bool sentByMe: model.recipient !== "Me"
+ required property string author
+ required property string recipient
+ required property date timestamp
+ required property string message
+ readonly property bool sentByMe: recipient !== "Me"
Row {
id: messageRow
spacing: 6
- anchors.right: sentByMe ? parent.right : undefined
+ anchors.right: conversationDelegate.sentByMe ? parent.right : undefined
Image {
id: avatar
- source: !sentByMe ? "images/" + model.author.replace(" ", "_") + ".png" : ""
+ source: !conversationDelegate.sentByMe
+ ? "images/" + conversationDelegate.author.replace(" ", "_") + ".png" : ""
}
Rectangle {
width: Math.min(messageText.implicitWidth + 24, listView.width - avatar.width - messageRow.spacing)
height: messageText.implicitHeight + 24
- color: sentByMe ? "lightgrey" : "steelblue"
+ color: conversationDelegate.sentByMe ? "lightgrey" : "steelblue"
Label {
id: messageText
- text: model.message
- color: sentByMe ? "black" : "white"
+ text: conversationDelegate.message
+ color: conversationDelegate.sentByMe ? "black" : "white"
anchors.fill: parent
anchors.margins: 12
wrapMode: Label.Wrap
@@ -78,9 +86,9 @@ Page {
Label {
id: timestampText
- text: Qt.formatDateTime(model.timestamp, "d MMM hh:mm")
+ text: Qt.formatDateTime(conversationDelegate.timestamp, "d MMM hh:mm")
color: "lightgrey"
- anchors.right: sentByMe ? parent.right : undefined
+ anchors.right: conversationDelegate.sentByMe ? parent.right : undefined
}
}
@@ -90,6 +98,7 @@ Page {
Pane {
id: pane
Layout.fillWidth: true
+ Layout.fillHeight: false
RowLayout {
width: parent.width
@@ -105,9 +114,10 @@ Page {
id: sendButton
text: qsTr("Send")
enabled: messageField.length > 0
+ Layout.fillWidth: false
onClicked: {
- listView.model.sendMessage(inConversationWith, messageField.text);
- messageField.text = "";
+ listView.model.sendMessage(root.inConversationWith, messageField.text)
+ messageField.text = ""
}
}
}
diff --git a/examples/quickcontrols/chattutorial/chapter5/Main.qml b/examples/quickcontrols/chattutorial/chapter5/Main.qml
new file mode 100644
index 0000000000..bb968e9f7a
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/Main.qml
@@ -0,0 +1,18 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: 540
+ height: 960
+ visible: true
+
+ StackView {
+ id: stackView
+ anchors.fill: parent
+ initialItem: ContactPage {}
+ }
+}
+
diff --git a/examples/quickcontrols/chattutorial/chapter5/chapter5.pro b/examples/quickcontrols/chattutorial/chapter5/chapter5.pro
index 9f44cb0459..aba1e33cdb 100644
--- a/examples/quickcontrols/chattutorial/chapter5/chapter5.pro
+++ b/examples/quickcontrols/chattutorial/chapter5/chapter5.pro
@@ -1,7 +1,11 @@
TEMPLATE = app
QT += qml quick sql
-CONFIG += c++11
+CONFIG += c++11 qmltypes
+
+QML_IMPORT_PATH = $$pwd/.
+QML_IMPORT_NAME = chattutorial
+QML_IMPORT_MAJOR_VERSION = 1
HEADERS += sqlcontactmodel.h \
sqlconversationmodel.h
@@ -27,8 +31,9 @@ resources.files = \
images/Hans_Gude@2x.png \
images/Hans_Gude@3x.png \
images/Hans_Gude@4x.png \
- main.qml
-resources.prefix = qt/qml/chapter5/
+ Main.qml \
+ qmldir
+resources.prefix = qt/qml/chattutorial/
RESOURCES += resources \
qtquickcontrols2.conf
diff --git a/examples/quickcontrols/chattutorial/chapter5/main.cpp b/examples/quickcontrols/chattutorial/chapter5/main.cpp
index a084655830..bcb6c1e923 100644
--- a/examples/quickcontrols/chattutorial/chapter5/main.cpp
+++ b/examples/quickcontrols/chattutorial/chapter5/main.cpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtCore>
@@ -7,9 +7,6 @@
#include <QSqlError>
#include <QtQml>
-#include "sqlcontactmodel.h"
-#include "sqlconversationmodel.h"
-
static void connectToDatabase()
{
QSqlDatabase database = QSqlDatabase::database();
@@ -37,13 +34,10 @@ int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
- qmlRegisterType<SqlContactModel>("io.qt.examples.chattutorial", 1, 0, "SqlContactModel");
- qmlRegisterType<SqlConversationModel>("io.qt.examples.chattutorial", 1, 0, "SqlConversationModel");
-
connectToDatabase();
QQmlApplicationEngine engine;
- engine.load(QUrl(QStringLiteral("qrc:/qt/qml/chapter5/main.qml")));
+ engine.loadFromModule("chattutorial", "Main");
if (engine.rootObjects().isEmpty())
return -1;
diff --git a/examples/quickcontrols/chattutorial/chapter5/main.qml b/examples/quickcontrols/chattutorial/chapter5/main.qml
deleted file mode 100644
index da080e3a45..0000000000
--- a/examples/quickcontrols/chattutorial/chapter5/main.qml
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-
-ApplicationWindow {
- id: window
- width: 540
- height: 960
- visible: true
-
- StackView {
- id: stackView
- anchors.fill: parent
- initialItem: ContactPage {}
- }
-}
-
diff --git a/examples/quickcontrols/chattutorial/chapter5/qmldir b/examples/quickcontrols/chattutorial/chapter5/qmldir
new file mode 100644
index 0000000000..4ae7752b55
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/qmldir
@@ -0,0 +1,6 @@
+module chattutorial
+ChatToolBar 1.0 ChatToolBar.qml
+ContactPage 1.0 ContactPage.qml
+ConversationPage 1.0 ConversationPage.qml
+Main 1.0 Main.qml
+typeinfo chapter5.qmltypes
diff --git a/examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.cpp b/examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.cpp
index 0bccc0d7af..189924deec 100644
--- a/examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.cpp
+++ b/examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.cpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "sqlcontactmodel.h"
@@ -37,7 +37,7 @@ SqlContactModel::SqlContactModel(QObject *parent) :
if (!query.exec("SELECT * FROM Contacts"))
qFatal("Contacts SELECT query failed: %s", qPrintable(query.lastError().text()));
- setQuery(query);
+ setQuery(std::move(query));
if (lastError().isValid())
qFatal("Cannot set query on SqlContactModel: %s", qPrintable(lastError().text()));
}
diff --git a/examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.h b/examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.h
index a6d24a4774..c7f9a154eb 100644
--- a/examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.h
+++ b/examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.h
@@ -1,13 +1,17 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef SQLCONTACTMODEL_H
#define SQLCONTACTMODEL_H
+#include <QQmlEngine>
#include <QSqlQueryModel>
class SqlContactModel : public QSqlQueryModel
{
+ Q_OBJECT
+ QML_ELEMENT
+
public:
SqlContactModel(QObject *parent = nullptr);
};
diff --git a/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.cpp b/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.cpp
index 1a1594b094..5be01de52c 100644
--- a/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.cpp
+++ b/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.cpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "sqlconversationmodel.h"
diff --git a/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.h b/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.h
index 8a3cdd4c43..b4917c0eff 100644
--- a/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.h
+++ b/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.h
@@ -1,14 +1,16 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef SQLCONVERSATIONMODEL_H
#define SQLCONVERSATIONMODEL_H
+#include <QQmlEngine>
#include <QSqlTableModel>
class SqlConversationModel : public QSqlTableModel
{
Q_OBJECT
+ QML_ELEMENT
Q_PROPERTY(QString recipient READ recipient WRITE setRecipient NOTIFY recipientChanged)
public:
diff --git a/examples/quickcontrols/chattutorial/doc/src/qtquickcontrols-chattutorial.qdoc b/examples/quickcontrols/chattutorial/doc/src/qtquickcontrols-chattutorial.qdoc
index c34c20d508..a42ef81575 100644
--- a/examples/quickcontrols/chattutorial/doc/src/qtquickcontrols-chattutorial.qdoc
+++ b/examples/quickcontrols/chattutorial/doc/src/qtquickcontrols-chattutorial.qdoc
@@ -2,7 +2,7 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
-\example chattutorial
+\page qtquickcontrols-chattutorial-example.html
\keyword Qt Quick Controls - Chat Tutorial
\title Qt Quick Controls - Chat Tutorial
\keyword Qt Quick Controls 2 - Chat Tutorial
@@ -21,16 +21,12 @@ When setting up a new project, it's easiest to use
basic "Hello World" application with the following files:
\list
-\li \c MainForm.ui.qml - Defines the default UI
-\li \c main.qml - Embeds the default UI in a Window
-\li \c qml.qrc - Lists the \c .qml files that are built into the binary
+\li \c CMakeLists.txt - Instructs CMake how our project should be built
+\li \c Main.qml - Provides a default UI containing an empty Window
\li \c main.cpp - Loads \c main.qml
-\li \c chattutorial.pro - Provides the qmake configuration
+\li \c qtquickcontrols2.conf - Tells the application which style it should use
\endlist
-\note Delete the \c MainForm.ui.qml and \c qml.qrc files from the project, as
-we will not use them in this tutorial.
-
\section2 main.cpp
The default code in \c main.cpp has two includes:
@@ -46,42 +42,35 @@ does. QCoreApplication is sufficient for non-graphical applications.
QGuiApplication is sufficient for graphical applications that do not use
\l {Qt Widgets}, while QApplication is required for those that do.
-The second include makes QQmlApplicationEngine available, along with
-some useful functions required for making C++ types accessible from QML.
+The second include makes QQmlApplicationEngine available, allowing us to
+load our QML.
Within \c main(), we set up the application object and QML engine:
\skipto main
\printuntil }
-It begins with enabling \l {High DPI}{high DPI scaling}, which is not
-part of the default code. It is necessary to do so before the application
-object is constructed.
-
-After that's done, we construct the application object, passing any application
-arguments provided by the user.
-
-Next, the QML engine is created. \l QQmlApplicationEngine is a convenient
-wrapper over QQmlEngine, providing the \l {QQmlApplicationEngine::load}{load()}
-function to easily load QML for an application. It also adds some convenience
-for using \l {Using File Selectors with Qt Quick Controls}{file selectors}.
+\l QQmlApplicationEngine is a convenient wrapper over QQmlEngine, providing the
+\l {QQmlApplicationEngine::}{loadFromModule} function to easily load QML for an
+application. It also adds some convenience for using \l {Using File Selectors
+with Qt Quick Controls}{file selectors}.
Once we've set up things in C++, we can move on to the user interface in QML.
-\section2 main.qml
+\section2 Main.qml
Let's modify the default QML code to suit our needs.
-\quotefromfile chattutorial/chapter1/main.qml
+\quotefromfile chattutorial/chapter1/Main.qml
\skipto import
\printuntil import QtQuick.Controls
-First, import the \l {Qt Quick} module. This gives us
-access to graphical primitives such as \l Item, \l Rectangle, \l Text, and so
-on.
-For the full list of types, see the \l {Qt Quick QML Types} documentation.
+You'll notice that the \l {Qt Quick} module has already been imported. This
+gives us access to graphical primitives such as \l Item, \l Rectangle, \l Text,
+and so on. For the full list of types, see the \l {Qt Quick QML Types}
+documentation.
-Next, import the Qt Quick Controls module. Amongst other things, this
+Add an import of the Qt Quick Controls module. Amongst other things, this
provides access to \l ApplicationWindow, which will replace the existing
root type, \c Window:
@@ -90,6 +79,7 @@ root type, \c Window:
\dots
\skipto }
\skipuntil }
+\skipuntil }
\printuntil }
ApplicationWindow is a \l Window with some added convenience for creating a
@@ -121,14 +111,13 @@ which screen the user is viewing, it is much easier to use \l Page.
For now, we'll just add one page, but in the next chapter, we'll demonstrate
how to navigate between several pages.
-\quotefromfile chattutorial/chapter1/main.qml
+\quotefromfile chattutorial/chapter1/Main.qml
\skipto Page
\printuntil }
\printuntil }
-We replace the default \c{MainForm {...}} code block with a Page, which is
-sized to occupy all the space on the window using the \l {Item::}{anchors.fill}
-property.
+First, we add a Page, which is sized to occupy all the space on the window
+using the \l {Item::}{anchors.fill} property.
Then, we assign a \l Label to its \l {Page::}{header} property. Label extends
the primitive \l Text item from the Qt Quick module by adding
@@ -155,49 +144,15 @@ bounds, both horizontally and vertically.
\section2 The Project File
-The \c .pro or \l {Creating Project Files}{project} file contains all of the
-information needed by \l {qmake Manual}{qmake} to generate a Makefile, which is
-then used to compile and link the application.
-
-\quotefromfile chattutorial/chapter1/chapter1.pro
-\printline TEMPLATE
-
-The first line tells \c qmake which kind of project this is. We're building an
-application, so we use the \c app template.
-
-\printline QT
-
-The next line declares the Qt libraries that we want to use from C++.
+The \c CMakeLists.txt file contains all of the information needed by \l {Build
+with CMake}{CMake} to build our project into an executable that we can run.
-\printline CONFIG
+For an in-depth explanation of this file, see \l {Building a QML application}.
-This line states that a C++11 compatible compiler is required to build the
-project.
-
-\printline SOURCES
-
-The \c SOURCES variable lists all of the source files that should be compiled.
-A similar variable, \c HEADERS, is available for header files.
-
-\printuntil qtquickcontrols2
-
-The next line tells \c qmake that we have a collection of
-\l {The Qt Resource System}{resources} that should be built into the
-executable.
-
-\skipto target
-\printline
-
-This line replaces deployment settings that come with the default project file.
-It determines where the example is copied, on running "\c{make install}".
-
-Now we can build and run the application:
+Here is what our application currently looks like when run:
\borderedimage qtquickcontrols-chattutorial-chapter1.png
-\noautolist
-\generatelist examplefiles .*chapter1.*
-
\section1 Chapter 2: Lists
In this chapter, we'll explain how to create a list of interactive items using
@@ -211,7 +166,7 @@ can display text, be checked on and off, and react to mouse clicks.
Here is our ListView:
-\quotefromfile chattutorial/chapter2/main.qml
+\quotefromfile chattutorial/chapter2/Main.qml
\dots 8
\codeline
\skipto ListView
@@ -272,15 +227,13 @@ vertical space.
\borderedimage qtquickcontrols-chattutorial-chapter2.png
-\generatelist examplefiles .*(chapter2|shared).*
-\generatelist exampleimages .*shared.*(Einstein|Hemingway|Gude)\.png
\section1 Chapter 3: Navigation
In this chapter, you'll learn how to use \l StackView to navigate between pages
in an application. Here's the revised \c main.qml:
-\quotefromfile chattutorial/chapter3/main.qml
+\quotefromfile chattutorial/chapter3/Main.qml
\skipto import
\printuntil }
\printuntil }
@@ -499,8 +452,6 @@ Finally, the button is only enabled when there is actually a message to send.
\borderedimage qtquickcontrols-chattutorial-chapter3.gif
-\generatelist examplefiles .*(chapter3|shared).*
-\generatelist exampleimages .*shared.*(Einstein|Hemingway|Gude)\.png
\section1 Chapter 4: Models
@@ -644,8 +595,8 @@ changes to be done to \c ContactPage.qml. To be able to use the types,
we must first import them using the URI we set in \c main.cpp:
\quotefromfile chattutorial/chapter4/ContactPage.qml
-\skipto import io.qt.examples.chattutorial
-\printline import io.qt.examples.chattutorial
+\skipto import chattutorial
+\printline import chattutorial
We then replace the dummy model with the proper one:
@@ -718,8 +669,6 @@ text field to make way for future input.
\borderedimage qtquickcontrols-chattutorial-chapter4.gif
-\generatelist examplefiles .*(chapter4|shared).*
-\generatelist exampleimages
\section1 Chapter 5: Styling
@@ -848,8 +797,6 @@ After building and running the application, you should see these results:
\borderedimage qtquickcontrols-chattutorial-chapter5-contacts-universal-dark.png
\borderedimage qtquickcontrols-chattutorial-chapter5-conversations-universal-dark.png
-\generatelist examplefiles .*(chapter5|shared).*
-\generatelist exampleimages
\section1 Summary
diff --git a/examples/quickcontrols/contactlist/CMakeLists.txt b/examples/quickcontrols/contactlist/CMakeLists.txt
index d353e3374f..7de83d98c3 100644
--- a/examples/quickcontrols/contactlist/CMakeLists.txt
+++ b/examples/quickcontrols/contactlist/CMakeLists.txt
@@ -1,19 +1,14 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(contactlist LANGUAGES CXX)
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/contactlist")
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick)
+qt_standard_project_setup(REQUIRES 6.6)
+
qt_add_executable(contactlistexample WIN32 MACOSX_BUNDLE
contactmodel.cpp contactmodel.h
main.cpp
@@ -21,25 +16,33 @@ qt_add_executable(contactlistexample WIN32 MACOSX_BUNDLE
qt_add_qml_module(contactlistexample
URI contactlist
- NO_RESOURCE_TARGET_PATH
QML_FILES
"ContactDelegate.ui.qml"
"ContactDialog.qml"
"ContactForm.ui.qml"
"ContactView.ui.qml"
"SectionDelegate.ui.qml"
- "contactlist.qml"
+ "ContactList.qml"
"designer/Backend/ContactModel.qml"
)
target_link_libraries(contactlistexample PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
)
install(TARGETS contactlistexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET contactlistexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/contactlist/ContactDelegate.ui.qml b/examples/quickcontrols/contactlist/ContactDelegate.ui.qml
index 3591b2f3fd..e1e6127bb5 100644
--- a/examples/quickcontrols/contactlist/ContactDelegate.ui.qml
+++ b/examples/quickcontrols/contactlist/ContactDelegate.ui.qml
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
@@ -7,14 +7,18 @@ import QtQuick.Controls
ItemDelegate {
id: delegate
-
checkable: true
+ required property string fullName
+ required property string address
+ required property string city
+ required property string number
+
contentItem: ColumnLayout {
spacing: 10
Label {
- text: fullName
+ text: delegate.fullName
font.bold: true
elide: Text.ElideRight
Layout.fillWidth: true
@@ -34,7 +38,7 @@ ItemDelegate {
}
Label {
- text: address
+ text: delegate.address
font.bold: true
elide: Text.ElideRight
Layout.fillWidth: true
@@ -46,7 +50,7 @@ ItemDelegate {
}
Label {
- text: city
+ text: delegate.city
font.bold: true
elide: Text.ElideRight
Layout.fillWidth: true
@@ -58,7 +62,7 @@ ItemDelegate {
}
Label {
- text: number
+ text: delegate.number
font.bold: true
elide: Text.ElideRight
Layout.fillWidth: true
@@ -74,6 +78,7 @@ ItemDelegate {
PropertyChanges {
// TODO: When Qt Design Studio supports generalized grouped properties, change to:
// grid.visible: true
+ // qmllint disable Quick.property-changes-parsed
target: grid
visible: true
}
diff --git a/examples/quickcontrols/contactlist/ContactDialog.qml b/examples/quickcontrols/contactlist/ContactDialog.qml
index 9bb990f2ad..3f287447ef 100644
--- a/examples/quickcontrols/contactlist/ContactDialog.qml
+++ b/examples/quickcontrols/contactlist/ContactDialog.qml
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
@@ -41,5 +41,9 @@ Dialog {
id: form
}
- onAccepted: finished(form.fullName.text, form.address.text, form.city.text, form.number.text)
+ onAccepted: {
+ if (form.fullName.text && form.address.text && form.city.text && form.number.text) {
+ finished(form.fullName.text, form.address.text, form.city.text, form.number.text);
+ }
+ }
}
diff --git a/examples/quickcontrols/contactlist/ContactForm.ui.qml b/examples/quickcontrols/contactlist/ContactForm.ui.qml
index 918da57f30..56c9186194 100644
--- a/examples/quickcontrols/contactlist/ContactForm.ui.qml
+++ b/examples/quickcontrols/contactlist/ContactForm.ui.qml
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
diff --git a/examples/quickcontrols/contactlist/ContactList.qml b/examples/quickcontrols/contactlist/ContactList.qml
new file mode 100644
index 0000000000..121b38f352
--- /dev/null
+++ b/examples/quickcontrols/contactlist/ContactList.qml
@@ -0,0 +1,70 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+
+ property int currentContact: -1
+
+ width: 320
+ height: 480
+ visible: true
+ title: qsTr("Contact List")
+
+ ContactDialog {
+ id: contactDialog
+ onFinished: function(fullName, address, city, number) {
+ if (window.currentContact === -1)
+ contactView.model.append(fullName, address, city, number)
+ else
+ contactView.model.set(window.currentContact, fullName, address, city, number)
+ }
+ }
+
+ Menu {
+ id: contactMenu
+ x: parent.width / 2 - width / 2
+ y: parent.height / 2 - height / 2
+ modal: true
+
+ Label {
+ padding: 10
+ font.bold: true
+ width: parent.width
+ horizontalAlignment: Qt.AlignHCenter
+ text: window.currentContact >= 0 ? contactView.model.get(window.currentContact).fullName : ""
+ }
+ MenuItem {
+ text: qsTr("Edit...")
+ onTriggered: contactDialog.editContact(contactView.model.get(window.currentContact))
+ }
+ MenuItem {
+ text: qsTr("Remove")
+ onTriggered: contactView.model.remove(window.currentContact)
+ }
+ }
+
+ ContactView {
+ id: contactView
+ anchors.fill: parent
+ onPressAndHold: function(index) {
+ window.currentContact = index
+ contactMenu.open()
+ }
+ }
+
+ RoundButton {
+ text: qsTr("+")
+ highlighted: true
+ anchors.margins: 10
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ onClicked: {
+ window.currentContact = -1
+ contactDialog.createContact()
+ }
+ }
+}
diff --git a/examples/quickcontrols/contactlist/ContactView.ui.qml b/examples/quickcontrols/contactlist/ContactView.ui.qml
index 6e80d05bac..7d5b3cf6c8 100644
--- a/examples/quickcontrols/contactlist/ContactView.ui.qml
+++ b/examples/quickcontrols/contactlist/ContactView.ui.qml
@@ -1,9 +1,11 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
+
import QtQuick
import QtQuick.Controls
-import Backend
+import contactlist
ListView {
id: listView
@@ -25,6 +27,9 @@ ListView {
delegate: ContactDelegate {
id: delegate
width: listView.width
+
+ required property int index
+
onPressAndHold: listView.pressAndHold(index)
}
diff --git a/examples/quickcontrols/contactlist/SectionDelegate.ui.qml b/examples/quickcontrols/contactlist/SectionDelegate.ui.qml
index 05b2147288..1ed587abd7 100644
--- a/examples/quickcontrols/contactlist/SectionDelegate.ui.qml
+++ b/examples/quickcontrols/contactlist/SectionDelegate.ui.qml
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
@@ -7,9 +7,11 @@ import QtQuick.Controls
ToolBar {
id: background
+ required property string section
+
Label {
id: label
- text: section
+ text: background.section
anchors.fill: parent
horizontalAlignment: Qt.AlignHCenter
verticalAlignment: Qt.AlignVCenter
diff --git a/examples/quickcontrols/contactlist/contactlist.pro b/examples/quickcontrols/contactlist/contactlist.pro
index ceb99cbc47..2fead83186 100644
--- a/examples/quickcontrols/contactlist/contactlist.pro
+++ b/examples/quickcontrols/contactlist/contactlist.pro
@@ -2,6 +2,12 @@ TEMPLATE = app
TARGET = contactlist
QT += quick
+CONFIG += qmltypes
+
+QML_IMPORT_PATH = $$pwd/.
+QML_IMPORT_NAME = contactlist
+QML_IMPORT_MAJOR_VERSION = 1
+
HEADERS += \
contactmodel.h
@@ -9,15 +15,20 @@ SOURCES += \
main.cpp \
contactmodel.cpp
-RESOURCES += \
+qml_resources.files = \
+ qmldir \
ContactDelegate.ui.qml \
ContactDialog.qml \
ContactForm.ui.qml \
- contactlist.qml \
+ ContactList.qml \
ContactView.ui.qml \
designer/Backend/ContactModel.qml \
SectionDelegate.ui.qml
+qml_resources.prefix = /qt/qml/contactlist
+
+RESOURCES += qml_resources
+
# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH = $$PWD/designer
diff --git a/examples/quickcontrols/contactlist/contactlist.qml b/examples/quickcontrols/contactlist/contactlist.qml
deleted file mode 100644
index 28f887f2db..0000000000
--- a/examples/quickcontrols/contactlist/contactlist.qml
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-
-ApplicationWindow {
- id: window
-
- property int currentContact: -1
-
- width: 320
- height: 480
- visible: true
- title: qsTr("Contact List")
-
- ContactDialog {
- id: contactDialog
- onFinished: function(fullName, address, city, number) {
- if (currentContact === -1)
- contactView.model.append(fullName, address, city, number)
- else
- contactView.model.set(currentContact, fullName, address, city, number)
- }
- }
-
- Menu {
- id: contactMenu
- x: parent.width / 2 - width / 2
- y: parent.height / 2 - height / 2
- modal: true
-
- Label {
- padding: 10
- font.bold: true
- width: parent.width
- horizontalAlignment: Qt.AlignHCenter
- text: currentContact >= 0 ? contactView.model.get(currentContact).fullName : ""
- }
- MenuItem {
- text: qsTr("Edit...")
- onTriggered: contactDialog.editContact(contactView.model.get(currentContact))
- }
- MenuItem {
- text: qsTr("Remove")
- onTriggered: contactView.model.remove(currentContact)
- }
- }
-
- ContactView {
- id: contactView
- anchors.fill: parent
- onPressAndHold: {
- currentContact = index
- contactMenu.open()
- }
- }
-
- RoundButton {
- text: qsTr("+")
- highlighted: true
- anchors.margins: 10
- anchors.right: parent.right
- anchors.bottom: parent.bottom
- onClicked: {
- currentContact = -1
- contactDialog.createContact()
- }
- }
-}
diff --git a/examples/quickcontrols/contactlist/contactmodel.cpp b/examples/quickcontrols/contactlist/contactmodel.cpp
index 1add2e7776..85ebad0515 100644
--- a/examples/quickcontrols/contactlist/contactmodel.cpp
+++ b/examples/quickcontrols/contactlist/contactmodel.cpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "contactmodel.h"
diff --git a/examples/quickcontrols/contactlist/contactmodel.h b/examples/quickcontrols/contactlist/contactmodel.h
index 564ec0fab3..78a06b8132 100644
--- a/examples/quickcontrols/contactlist/contactmodel.h
+++ b/examples/quickcontrols/contactlist/contactmodel.h
@@ -1,14 +1,16 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef CONTACTMODEL_H
#define CONTACTMODEL_H
#include <QAbstractListModel>
+#include <QQmlEngine>
class ContactModel : public QAbstractListModel
{
Q_OBJECT
+ QML_ELEMENT
public:
enum ContactRole {
diff --git a/examples/quickcontrols/contactlist/designer/Backend/ContactModel.qml b/examples/quickcontrols/contactlist/designer/Backend/ContactModel.qml
index c7a3f4817b..850b444d08 100644
--- a/examples/quickcontrols/contactlist/designer/Backend/ContactModel.qml
+++ b/examples/quickcontrols/contactlist/designer/Backend/ContactModel.qml
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
diff --git a/examples/quickcontrols/contactlist/doc/src/qtquickcontrols-contactlist.qdoc b/examples/quickcontrols/contactlist/doc/src/qtquickcontrols-contactlist.qdoc
index 7decce2e05..bb9e935d6d 100644
--- a/examples/quickcontrols/contactlist/doc/src/qtquickcontrols-contactlist.qdoc
+++ b/examples/quickcontrols/contactlist/doc/src/qtquickcontrols-contactlist.qdoc
@@ -6,6 +6,8 @@
\title Qt Quick Controls - Contact List
\keyword Qt Quick Controls 2 - Contact List
\ingroup qtquickcontrols-examples
+ \examplecategory {User Interface Components}
+ \examplecategory {Mobile}
\brief A QML app using Qt Quick Controls and a C++ class that implements
a simple contact list.
diff --git a/examples/quickcontrols/contactlist/main.cpp b/examples/quickcontrols/contactlist/main.cpp
index 32a88def4c..2f9f15fd36 100644
--- a/examples/quickcontrols/contactlist/main.cpp
+++ b/examples/quickcontrols/contactlist/main.cpp
@@ -1,19 +1,15 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QQmlApplicationEngine>
-#include "contactmodel.h"
-
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
- qmlRegisterType<ContactModel>("Backend", 1, 0, "ContactModel");
-
QQmlApplicationEngine engine;
- engine.load(QUrl(QStringLiteral("qrc:/contactlist.qml")));
+ engine.loadFromModule("contactlist", "ContactList");
return app.exec();
}
diff --git a/examples/quickcontrols/contactlist/qmldir b/examples/quickcontrols/contactlist/qmldir
new file mode 100644
index 0000000000..2d0af68242
--- /dev/null
+++ b/examples/quickcontrols/contactlist/qmldir
@@ -0,0 +1,8 @@
+module contactlist
+
+ContactDelegate 1.0 ContactDelegate.ui.qml
+ContactDialog 1.0 ContactDialog.qml
+ContactForm 1.0 ContactForm.ui.qml
+ContactList 1.0 ContactList.qml
+ContactView 1.0 ContactView.ui.qml
+SectionDelegate 1.0 SectionDelegate.ui.qml
diff --git a/examples/quickcontrols/eventcalendar/CMakeLists.txt b/examples/quickcontrols/eventcalendar/CMakeLists.txt
index 92299b1870..43ed385a3e 100644
--- a/examples/quickcontrols/eventcalendar/CMakeLists.txt
+++ b/examples/quickcontrols/eventcalendar/CMakeLists.txt
@@ -1,17 +1,11 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(eventcalendar LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/eventcalendar")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Sql)
qt_add_executable(eventcalendar
@@ -27,10 +21,10 @@ set_target_properties(eventcalendar PROPERTIES
)
target_link_libraries(eventcalendar PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Sql
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Sql
)
qt_add_qml_module(eventcalendar
@@ -44,7 +38,16 @@ qt_add_qml_module(eventcalendar
)
install(TARGETS eventcalendar
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET eventcalendar
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/eventcalendar/doc/src/qtquickcontrols-eventcalendar.qdoc b/examples/quickcontrols/eventcalendar/doc/src/qtquickcontrols-eventcalendar.qdoc
index 567ad12fa1..450b1d37a8 100644
--- a/examples/quickcontrols/eventcalendar/doc/src/qtquickcontrols-eventcalendar.qdoc
+++ b/examples/quickcontrols/eventcalendar/doc/src/qtquickcontrols-eventcalendar.qdoc
@@ -6,6 +6,7 @@
\keyword Qt Quick Controls - Event Calendar
\title Qt Quick Controls - Event Calendar
\ingroup qtquickcontrols-examples
+ \examplecategory {User Interface Components}
\brief A simple event calendar.
\image qtquickcalendar-eventcalendar.png
diff --git a/examples/quickcontrols/eventcalendar/eventmodel.cpp b/examples/quickcontrols/eventcalendar/eventmodel.cpp
index a380e00d11..0b225883ff 100644
--- a/examples/quickcontrols/eventcalendar/eventmodel.cpp
+++ b/examples/quickcontrols/eventcalendar/eventmodel.cpp
@@ -30,7 +30,7 @@ QDate EventModel::date() const
return m_date;
}
-void EventModel::setDate(const QDate &date)
+void EventModel::setDate(QDate date)
{
if (date == m_date)
return;
diff --git a/examples/quickcontrols/eventcalendar/eventmodel.h b/examples/quickcontrols/eventcalendar/eventmodel.h
index 3dc391fdd7..62a30df33b 100644
--- a/examples/quickcontrols/eventcalendar/eventmodel.h
+++ b/examples/quickcontrols/eventcalendar/eventmodel.h
@@ -34,7 +34,7 @@ public:
void setEventDatabase(SqlEventDatabase *eventDatabase);
QDate date() const;
- void setDate(const QDate &date);
+ void setDate(QDate date);
int rowCount(const QModelIndex & = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
diff --git a/examples/quickcontrols/eventcalendar/sqleventdatabase.cpp b/examples/quickcontrols/eventcalendar/sqleventdatabase.cpp
index e958448695..3d845f3b3b 100644
--- a/examples/quickcontrols/eventcalendar/sqleventdatabase.cpp
+++ b/examples/quickcontrols/eventcalendar/sqleventdatabase.cpp
@@ -13,7 +13,7 @@ SqlEventDatabase::SqlEventDatabase()
createConnection();
}
-QVector<Event> SqlEventDatabase::eventsForDate(const QDate &date)
+QVector<Event> SqlEventDatabase::eventsForDate(QDate date)
{
const QString queryStr = QString::fromLatin1("SELECT * FROM Event WHERE '%1' >= startDate AND '%1' <= endDate").arg(date.toString("yyyy-MM-dd"));
QSqlQuery query(queryStr);
diff --git a/examples/quickcontrols/eventcalendar/sqleventdatabase.h b/examples/quickcontrols/eventcalendar/sqleventdatabase.h
index aa59bfb6b1..b867b7860d 100644
--- a/examples/quickcontrols/eventcalendar/sqleventdatabase.h
+++ b/examples/quickcontrols/eventcalendar/sqleventdatabase.h
@@ -19,7 +19,7 @@ class SqlEventDatabase : public QObject
public:
SqlEventDatabase();
- QVector<Event> eventsForDate(const QDate &date);
+ QVector<Event> eventsForDate(QDate date);
private:
static void createConnection();
diff --git a/examples/quickcontrols/filesystemexplorer/CMakeLists.txt b/examples/quickcontrols/filesystemexplorer/CMakeLists.txt
new file mode 100644
index 0000000000..26427a6ed1
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/CMakeLists.txt
@@ -0,0 +1,84 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(filesystemexplorer LANGUAGES CXX)
+
+if (ANDROID OR IOS)
+ message(FATAL_ERROR "Platform is not supported")
+ return()
+endif ()
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2 Svg)
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(filesystemexplorer
+ main.cpp
+)
+
+set_target_properties(filesystemexplorer
+ PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+set_source_files_properties(qml/Colors.qml
+ PROPERTIES
+ QT_QML_SINGLETON_TYPE TRUE
+)
+
+qt_add_qml_module(filesystemexplorer
+ URI FileSystemModule
+ VERSION 1.0
+ QML_FILES
+ "Main.qml"
+ "qml/About.qml"
+ "qml/Colors.qml"
+ "qml/Editor.qml"
+ "qml/FileSystemView.qml"
+ "qml/MyMenu.qml"
+ "qml/MyMenuBar.qml"
+ "qml/Sidebar.qml"
+ "qml/ResizeButton.qml"
+ "qml/WindowDragHandler.qml"
+ RESOURCES
+ "icons/folder_closed.svg"
+ "icons/folder_open.svg"
+ "icons/generic_file.svg"
+ "icons/globe.svg"
+ "icons/info_sign.svg"
+ "icons/light_bulb.svg"
+ "icons/read.svg"
+ "icons/resize.svg"
+ "icons/qt_logo.svg"
+ "icons/app_icon.svg"
+ SOURCES
+ filesystemmodel.cpp
+ filesystemmodel.h
+ linenumbermodel.cpp
+ linenumbermodel.h
+)
+
+target_link_libraries(filesystemexplorer
+ PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickControls2
+ Qt6::Svg
+)
+
+install(TARGETS filesystemexplorer
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET filesystemexplorer
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/filesystemexplorer/Main.qml b/examples/quickcontrols/filesystemexplorer/Main.qml
new file mode 100644
index 0000000000..4d9ce7f2da
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/Main.qml
@@ -0,0 +1,184 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+import QtQuick
+import QtQuick.Controls.Basic
+import QtQuick.Layouts
+import FileSystemModule
+
+pragma ComponentBehavior: Bound
+
+ApplicationWindow {
+ id: root
+
+ property bool expandPath: false
+ property bool showLineNumbers: true
+ property string currentFilePath: ""
+
+ width: 1100
+ height: 600
+ minimumWidth: 200
+ minimumHeight: 100
+ visible: true
+ color: Colors.background
+ flags: Qt.Window | Qt.FramelessWindowHint
+ title: qsTr("File System Explorer Example")
+
+ function getInfoText() : string {
+ let out = root.currentFilePath
+ if (!out)
+ return qsTr("File System Explorer")
+ return root.expandPath ? out : out.substring(out.lastIndexOf("/") + 1, out.length)
+ }
+
+ menuBar: MyMenuBar {
+ dragWindow: root
+ infoText: root.getInfoText()
+ MyMenu {
+ title: qsTr("File")
+
+ Action {
+ text: qsTr("Increase Font")
+ shortcut: StandardKey.ZoomIn
+ onTriggered: editor.text.font.pixelSize += 1
+ }
+ Action {
+ text: qsTr("Decrease Font")
+ shortcut: StandardKey.ZoomOut
+ onTriggered: editor.text.font.pixelSize -= 1
+ }
+ Action {
+ text: root.showLineNumbers ? qsTr("Toggle Line Numbers OFF")
+ : qsTr("Toggle Line Numbers ON")
+ shortcut: "Ctrl+L"
+ onTriggered: root.showLineNumbers = !root.showLineNumbers
+ }
+ Action {
+ text: root.expandPath ? qsTr("Toggle Short Path")
+ : qsTr("Toggle Expand Path")
+ enabled: root.currentFilePath
+ onTriggered: root.expandPath = !root.expandPath
+ }
+ Action {
+ text: qsTr("Reset Filesystem")
+ enabled: sidebar.currentTabIndex === 1
+ onTriggered: fileSystemView.rootIndex = undefined
+ }
+ Action {
+ text: qsTr("Exit")
+ onTriggered: Qt.exit(0)
+ shortcut: StandardKey.Quit
+ }
+ }
+
+ MyMenu {
+ title: qsTr("Edit")
+
+ Action {
+ text: qsTr("Cut")
+ shortcut: StandardKey.Cut
+ enabled: editor.text.selectedText.length > 0
+ onTriggered: editor.text.cut()
+ }
+ Action {
+ text: qsTr("Copy")
+ shortcut: StandardKey.Copy
+ enabled: editor.text.selectedText.length > 0
+ onTriggered: editor.text.copy()
+ }
+ Action {
+ text: qsTr("Paste")
+ shortcut: StandardKey.Paste
+ enabled: editor.text.canPaste
+ onTriggered: editor.text.paste()
+ }
+ Action {
+ text: qsTr("Select All")
+ shortcut: StandardKey.SelectAll
+ enabled: editor.text.length > 0
+ onTriggered: editor.text.selectAll()
+ }
+ Action {
+ text: qsTr("Undo")
+ shortcut: StandardKey.Undo
+ enabled: editor.text.canUndo
+ onTriggered: editor.text.undo()
+ }
+ }
+ }
+ // Set up the layout of the main components in a row:
+ // [ Sidebar, Navigation, Editor ]
+ RowLayout {
+ anchors.fill: parent
+ spacing: 0
+
+ // Stores the buttons that navigate the application.
+ Sidebar {
+ id: sidebar
+ dragWindow: root
+ Layout.preferredWidth: 50
+ Layout.fillHeight: true
+ }
+
+ // Allows resizing parts of the UI.
+ SplitView {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ // Customized handle to drag between the Navigation and the Editor.
+ handle: Rectangle {
+ implicitWidth: 10
+ color: SplitHandle.pressed ? Colors.color2 : Colors.background
+ border.color: SplitHandle.hovered ? Colors.color2 : Colors.background
+ opacity: SplitHandle.hovered || navigationView.width < 15 ? 1.0 : 0.0
+
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: 1400
+ }
+ }
+ }
+
+ Rectangle {
+ id: navigationView
+ color: Colors.surface1
+ SplitView.preferredWidth: 250
+ SplitView.fillHeight: true
+ // The stack-layout provides different views, based on the
+ // selected buttons inside the sidebar.
+ StackLayout {
+ anchors.fill: parent
+ currentIndex: sidebar.currentTabIndex
+
+ // Shows the help text.
+ Text {
+ text: qsTr("This example shows how to use and visualize the file system.\n\n"
+ + "Customized Qt Quick Components have been used to achieve this look.\n\n"
+ + "You can edit the files but they won't be changed on the file system.\n\n"
+ + "Click on the folder icon to the left to get started.")
+ wrapMode: TextArea.Wrap
+ color: Colors.text
+ }
+
+ // Shows the files on the file system.
+ FileSystemView {
+ id: fileSystemView
+ color: Colors.surface1
+ onFileClicked: path => root.currentFilePath = path
+ }
+ }
+ }
+
+ // The main view that contains the editor.
+ Editor {
+ id: editor
+ showLineNumbers: root.showLineNumbers
+ currentFilePath: root.currentFilePath
+ SplitView.fillWidth: true
+ SplitView.fillHeight: true
+ }
+ }
+ }
+
+ ResizeButton {
+ resizeWindow: root
+ }
+}
diff --git a/examples/quickcontrols/filesystemexplorer/doc/images/qtquickcontrols-filesystemexplorer.webp b/examples/quickcontrols/filesystemexplorer/doc/images/qtquickcontrols-filesystemexplorer.webp
new file mode 100644
index 0000000000..10ad0d26e7
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/doc/images/qtquickcontrols-filesystemexplorer.webp
Binary files differ
diff --git a/examples/quickcontrols/filesystemexplorer/doc/src/qtquickcontrols-filesystemexplorer.qdoc b/examples/quickcontrols/filesystemexplorer/doc/src/qtquickcontrols-filesystemexplorer.qdoc
new file mode 100644
index 0000000000..686c2ab48a
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/doc/src/qtquickcontrols-filesystemexplorer.qdoc
@@ -0,0 +1,123 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+/*!
+ \example filesystemexplorer
+ \examplecategory {Application Examples}
+ \meta tags {quickcontrols, layout, styling, treeview}
+ \title File System Explorer
+ \ingroup qtquickcontrols-examples
+ \brief A desktop QML app utilizing customized Qt Quick Controls to display
+ text files from a filesystem.
+
+ In this example, a modern layout is used that consists of three major
+ components. There is an icon-based \e {Sidebar} to the left, followed by a
+ resizable TreeView displaying the file system from a QFileSystemModel, and
+ finally the TextArea displaying the selected text files. There is a common
+ look and feel across all operating systems. We accomplish this by using
+ customized quick controls and frameless windows, with our own window
+ decorations. When launching this application from the command-line, you
+ have the option to provide an initial directory as a parameter. This
+ initial directory will be used by the TreeView to set the starting point
+ for displaying the directory structure.
+
+ \image qtquickcontrols-filesystemexplorer.webp
+
+ \include examples-run.qdocinc
+
+ \section1 Modern layout and structure
+
+ To begin with, we are providing the colors throughout a singleton QML
+ object. In this way, we can provide more structured control over the
+ appearance of the application.
+
+ \quotefromfile filesystemexplorer/qml/Colors.qml
+ \skipto pragma
+ \printuntil }
+
+ Since we do not want to rely on the operating system's window decoration
+ and instead want to provide our own, we use the \c FramelessWindowHint flag
+ inside the ApplicationWindow. In order to achieve an equivalent interaction
+ with the window, we override the \c contentItem property of our customized
+ MenuBar and display some information text as well as interaction
+ possibilities for dragging or closing the application. \l {Inline
+ Components} have been used to simplify this process.
+
+ \quotefromfile filesystemexplorer/qml/MyMenuBar.qml
+ \skipto component InteractionButton
+ \printuntil id: maximize
+ \dots
+
+ The \e {Sidebar} on the left includes checkable navigation buttons on top
+ and one-shot buttons on the bottom. A ButtonGroup and a Container are used
+ to ensure that only one entry is active at any given time. It is then
+ possible to provide different views using a property alias for the current
+ position, along with a StackLayout.
+
+ This technique allows us to simply extend the functionality by adding
+ another button and the corresponding element inside the StackLayout.
+
+ \quotefromfile filesystemexplorer/Main.qml
+ \skipto StackLayout {
+ \printuntil /^\s{16}\}$/
+
+ The StackLayout includes, besides some information text, the \e
+ {FileSystemView}. This custom component displays files and folders and
+ populates it with data from a \l {Using C++ Models with Qt Quick Views}{C++
+ model}. We can then select the files and read them accordingly.
+
+ \quotefromfile filesystemexplorer/filesystemmodel.cpp
+ \skipto readFile
+ \printuntil /^\s{0}\}$/
+
+ By right-clicking on a folder in the TreeView, a popup Menu is opened,
+ which allows control over the \c rootIndex property of the TreeView.
+
+ \quotefromfile filesystemexplorer/qml/FileSystemView.qml
+ \skipto MyMenu
+ \printuntil /^\s{8}\}$/
+
+ By using a SplitView, we are able to dynamically share the space between
+ the StackLayout and the Editor. Our Editor contains the TextArea that
+ displays the opened file and provides us with all the functionality needed
+ to edit text files. Additionally, we provide a visualization of the line
+ numbers, which can be toggled on and off in the Menu.
+
+ \quotefromfile filesystemexplorer/Main.qml
+ \skipto Editor {
+ \printuntil /^\s{12}\}$/
+
+ \section1 Custom components
+
+ For a better understanding of the customization process, investigate
+ \l {Customizing a Control} {this} article first. We are using reusable and
+ customized components throughout this example.
+
+ For instance, the \e {MyMenu} component customizes Menu's \c background
+ property as well as its delegates' \c contentItem and \c background
+ properties.
+
+ \quotefile filesystemexplorer/qml/MyMenu.qml
+
+ Another example is the customization of the ScrollIndicator inside the \e
+ {FileSystemView}, which additionally uses customized animations. Here we
+ also override the \c contentItem.
+
+ \quotefromfile filesystemexplorer/qml/FileSystemView.qml
+ \skipto ScrollIndicator.vertical
+ \printuntil /^\s{8}\}$/
+
+ \section1 Python version
+
+ If you're interested in the Python version of this example, you can find it
+ \l{https://doc.qt.io/qtforpython-6/examples/example_quickcontrols_filesystemexplorer.html}
+ {here}. This showcases the usage of Qt for Python and demonstrates how it
+ can be used to create the same application.
+
+ Additionally, there is a detailed
+ \l {https://doc.qt.io/qtforpython-6/tutorials/extendedexplorer/extendedexplorer.html}
+ {tutorial} available that provides step-by-step instructions on how to
+ extend this example with additional features. This tutorial can be helpful
+ if you want to explore and learn more about building upon the existing
+ functionality of the filesystem explorer.
+*/
+
diff --git a/examples/quickcontrols/filesystemexplorer/filesystemexplorer.pro b/examples/quickcontrols/filesystemexplorer/filesystemexplorer.pro
new file mode 100644
index 0000000000..371baac41a
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/filesystemexplorer.pro
@@ -0,0 +1,60 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+android|ios {
+ error( "Platform not supported" )
+}
+
+QT += quick
+
+CONFIG += qmltypes
+
+QML_IMPORT_PATH = $$pwd/.
+QML_IMPORT_NAME = FileSystemModule
+QML_IMPORT_MAJOR_VERSION = 1
+
+TARGET = filesystemexplorer
+TEMPLATE = app
+
+SOURCES += \
+ main.cpp \
+ filesystemmodel.cpp \
+ linenumbermodel.cpp \
+
+HEADERS += \
+ filesystemmodel.h \
+ linenumbermodel.h \
+
+qml_resources.files = \
+ qmldir \
+ Main.qml \
+ qml/About.qml \
+ qml/Colors.qml \
+ qml/Editor.qml \
+ qml/MyMenu.qml \
+ qml/Sidebar.qml \
+ qml/MyMenuBar.qml \
+ qml/ResizeButton.qml \
+ qml/FileSystemView.qml \
+ qml/WindowDragHandler.qml \
+
+qml_resources.prefix = /qt/qml/FileSystemModule
+
+theme_resources.files = \
+ icons/folder_closed.svg \
+ icons/folder_open.svg \
+ icons/generic_file.svg \
+ icons/globe.svg \
+ icons/info_sign.svg \
+ icons/light_bulb.svg \
+ icons/read.svg \
+ icons/resize.svg \
+ icons/qt_logo.svg \
+ icons/app_icon.svg
+
+theme_resources.prefix = /qt/qml/FileSystemModule
+
+RESOURCES += qml_resources theme_resources
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/filesystemexplorer
+INSTALLS += target
diff --git a/examples/quickcontrols/filesystemexplorer/filesystemmodel.cpp b/examples/quickcontrols/filesystemexplorer/filesystemmodel.cpp
new file mode 100644
index 0000000000..b580bced05
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/filesystemmodel.cpp
@@ -0,0 +1,89 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "filesystemmodel.h"
+
+#include <QStandardPaths>
+#include <QMimeDatabase>
+#include <QTextDocument>
+#include <QTextObject>
+
+FileSystemModel::FileSystemModel(QObject *parent) : QFileSystemModel(parent)
+{
+ setFilter(QDir::AllEntries | QDir::Hidden | QDir::NoDotAndDotDot);
+ setInitialDirectory();
+}
+
+QString FileSystemModel::readFile(const QString &filePath)
+{
+ // Don't issue errors for an empty path, as the initial binding
+ // will result in an empty path, and that's OK.
+ if (filePath.isEmpty())
+ return {};
+
+ QFile file(filePath);
+
+ if (file.size() >= 2'000'000)
+ return tr("File size is too big.\nYou can read files up to %1 MB.").arg(2);
+
+ static const QMimeDatabase db;
+ const QMimeType mime = db.mimeTypeForFile(QFileInfo(file));
+
+ // Check if the mimetype is supported and return the content.
+ const auto mimeTypesForFile = mime.parentMimeTypes();
+ for (const auto &m : mimeTypesForFile) {
+ if (m.contains("text", Qt::CaseInsensitive)
+ || mime.comment().contains("text", Qt::CaseInsensitive)) {
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
+ return tr("Error opening the File!");
+
+ QTextStream stream(&file);
+ return stream.readAll();
+ }
+ }
+ return tr("Filetype not supported!");
+}
+
+// This function gets called from Editor.qml
+int FileSystemModel::currentLineNumber(QQuickTextDocument *textDocument, int cursorPosition)
+{
+ if (QTextDocument *td = textDocument->textDocument()) {
+ QTextBlock tb = td->findBlock(cursorPosition);
+ return tb.blockNumber();
+ }
+ return -1;
+}
+
+int FileSystemModel::columnCount(const QModelIndex &parent) const
+{
+ Q_UNUSED(parent)
+ return 1;
+}
+
+QModelIndex FileSystemModel::rootIndex() const
+{
+ return m_rootIndex;
+}
+
+void FileSystemModel::setRootIndex(const QModelIndex index)
+{
+ if (index == m_rootIndex)
+ return;
+ m_rootIndex = index;
+ emit rootIndexChanged();
+}
+
+void FileSystemModel::setInitialDirectory(const QString &path)
+{
+ QDir dir(path);
+ if (dir.makeAbsolute())
+ setRootPath(dir.path());
+ else
+ setRootPath(getDefaultRootDir());
+ setRootIndex(QFileSystemModel::index(dir.path(), 0));
+}
+
+QString FileSystemModel::getDefaultRootDir()
+{
+ return QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
+}
diff --git a/examples/quickcontrols/filesystemexplorer/filesystemmodel.h b/examples/quickcontrols/filesystemexplorer/filesystemmodel.h
new file mode 100644
index 0000000000..c79af4aa82
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/filesystemmodel.h
@@ -0,0 +1,40 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef FILESYSTEMMODEL_H
+#define FILESYSTEMMODEL_H
+
+#include <QFileSystemModel>
+#include <QQuickTextDocument>
+
+class FileSystemModel : public QFileSystemModel
+{
+ Q_OBJECT
+ QML_ELEMENT
+ QML_SINGLETON
+ Q_PROPERTY(QModelIndex rootIndex READ rootIndex WRITE setRootIndex NOTIFY rootIndexChanged)
+public:
+ explicit FileSystemModel(QObject *parent = nullptr);
+
+ // Functions invokable from QML
+ Q_INVOKABLE QString readFile(const QString &filePath);
+ Q_INVOKABLE int currentLineNumber(QQuickTextDocument *textDocument, int cursorPosition);
+
+ // Overridden functions
+ int columnCount(const QModelIndex &parent) const override;
+
+ // Member functions from here
+ QModelIndex rootIndex() const;
+ void setRootIndex(const QModelIndex index);
+ void setInitialDirectory(const QString &path = getDefaultRootDir());
+
+ static QString getDefaultRootDir();
+
+signals:
+ void rootIndexChanged();
+
+private:
+ QModelIndex m_rootIndex;
+};
+
+#endif
diff --git a/examples/quickcontrols/filesystemexplorer/icons/app_icon.svg b/examples/quickcontrols/filesystemexplorer/icons/app_icon.svg
new file mode 100644
index 0000000000..5aae4221f4
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/icons/app_icon.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="800px" height="800px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="#EBDBB2" d="M13.25 8.5a.75.75 0 1 1-.75-.75.75.75 0 0 1 .75.75zM9.911 21.35l.816.578C10.819 21.798 13 18.666 13 13h-1a15.503 15.503 0 0 1-2.089 8.35zM4 6.703V10a2.002 2.002 0 0 1-2 2v1a2.002 2.002 0 0 1 2 2v3.297A3.707 3.707 0 0 0 7.703 22H9v-1H7.703A2.706 2.706 0 0 1 5 18.297V15a2.999 2.999 0 0 0-1.344-2.5A2.999 2.999 0 0 0 5 10V6.703A2.706 2.706 0 0 1 7.703 4H9V3H7.703A3.707 3.707 0 0 0 4 6.703zM20 10V6.703A3.707 3.707 0 0 0 16.297 3H15v1h1.297A2.706 2.706 0 0 1 19 6.703V10a2.999 2.999 0 0 0 1.344 2.5A2.999 2.999 0 0 0 19 15v3.297A2.706 2.706 0 0 1 16.297 21H15v1h1.297A3.707 3.707 0 0 0 20 18.297V15a2.002 2.002 0 0 1 2-2v-1a2.002 2.002 0 0 1-2-2z"/><path fill="none" d="M0 0h24v24H0z"/></svg>
diff --git a/examples/quickcontrols/filesystemexplorer/icons/folder_closed.svg b/examples/quickcontrols/filesystemexplorer/icons/folder_closed.svg
new file mode 100644
index 0000000000..36f119c96f
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/icons/folder_closed.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="-10 0 1792 1792"
+ id="svg51"
+ sodipodi:docname="folder_closed.svg"
+ width="1792"
+ height="1792"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ 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">
+ <defs
+ id="defs55" />
+ <sodipodi:namedview
+ id="namedview53"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="0.45033482"
+ inkscape:cx="842.70632"
+ inkscape:cy="896"
+ inkscape:window-width="1846"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg51" />
+ <path
+ fill="currentColor"
+ d="m 1718,672 v 704 q 0,92 -66,158 -66,66 -158,66 H 278 q -92,0 -158,-66 -66,-66 -66,-158 V 416 q 0,-92 66,-158 66,-66 158,-66 h 320 q 92,0 158,66 66,66 66,158 v 32 h 672 q 92,0 158,66 66,66 66,158 z"
+ id="path49" />
+</svg>
diff --git a/examples/quickcontrols/filesystemexplorer/icons/folder_open.svg b/examples/quickcontrols/filesystemexplorer/icons/folder_open.svg
new file mode 100644
index 0000000000..daa55a7a1f
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/icons/folder_open.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="-10 0 1792 1792"
+ id="svg139"
+ sodipodi:docname="folder_open.svg"
+ width="1792"
+ height="1792"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ 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">
+ <defs
+ id="defs143" />
+ <sodipodi:namedview
+ id="namedview141"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="0.24358259"
+ inkscape:cx="149.84651"
+ inkscape:cy="1098.1901"
+ inkscape:window-width="1846"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg139" />
+ <path
+ fill="currentColor"
+ d="M 1590,1376 V 672 q 0,-40 -28,-68 -28,-28 -68,-28 H 790 q -40,0 -68,-28 -28,-28 -28,-68 v -64 q 0,-40 -28,-68 -28,-28 -68,-28 H 278 q -40,0 -68,28 -28,28 -28,68 v 960 q 0,40 28,68 28,28 68,28 h 1216 q 40,0 68,-28 28,-28 28,-68 z m 128,-704 v 704 q 0,92 -66,158 -66,66 -158,66 H 278 q -92,0 -158,-66 -66,-66 -66,-158 V 416 q 0,-92 66,-158 66,-66 158,-66 h 320 q 92,0 158,66 66,66 66,158 v 32 h 672 q 92,0 158,66 66,66 66,158 z"
+ id="path137" />
+</svg>
diff --git a/examples/quickcontrols/filesystemexplorer/icons/generic_file.svg b/examples/quickcontrols/filesystemexplorer/icons/generic_file.svg
new file mode 100644
index 0000000000..9c855676e4
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/icons/generic_file.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="-10 0 1792 1792"
+ id="svg147"
+ sodipodi:docname="generic_file.svg"
+ width="1792"
+ height="1792"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ 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">
+ <defs
+ id="defs151" />
+ <sodipodi:namedview
+ id="namedview149"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="0.12179129"
+ inkscape:cx="-578.85911"
+ inkscape:cy="1687.3127"
+ inkscape:window-width="1846"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg147" />
+ <path
+ fill="currentColor"
+ d="m 1586,476 q 14,14 28,36 H 1142 V 40 q 22,14 36,28 z m -476,164 h 544 v 1056 q 0,40 -28,68 -28,28 -68,28 H 214 q -40,0 -68,-28 -28,-28 -28,-68 V 96 Q 118,56 146,28 174,0 214,0 h 800 v 544 q 0,40 28,68 28,28 68,28 z m 160,736 v -64 q 0,-14 -9,-23 -9,-9 -23,-9 H 534 q -14,0 -23,9 -9,9 -9,23 v 64 q 0,14 9,23 9,9 23,9 h 704 q 14,0 23,-9 9,-9 9,-23 z m 0,-256 v -64 q 0,-14 -9,-23 -9,-9 -23,-9 H 534 q -14,0 -23,9 -9,9 -9,23 v 64 q 0,14 9,23 9,9 23,9 h 704 q 14,0 23,-9 9,-9 9,-23 z m 0,-256 v -64 q 0,-14 -9,-23 -9,-9 -23,-9 H 534 q -14,0 -23,9 -9,9 -9,23 v 64 q 0,14 9,23 9,9 23,9 h 704 q 14,0 23,-9 9,-9 9,-23 z"
+ id="path145" />
+</svg>
diff --git a/examples/quickcontrols/filesystemexplorer/icons/globe.svg b/examples/quickcontrols/filesystemexplorer/icons/globe.svg
new file mode 100644
index 0000000000..0814338136
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/icons/globe.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="-10 0 1792 1792"
+ id="svg155"
+ sodipodi:docname="globe.svg"
+ width="1792"
+ height="1792"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ 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">
+ <defs
+ id="defs159" />
+ <sodipodi:namedview
+ id="namedview157"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="0.12179129"
+ inkscape:cx="504.9622"
+ inkscape:cy="1720.1558"
+ inkscape:window-width="1846"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg155" />
+ <path
+ fill="currentColor"
+ d="m 886,128 q 209,0 385.5,103 176.5,103 279.5,279.5 103,176.5 103,385.5 0,209 -103,385.5 Q 1448,1458 1271.5,1561 1095,1664 886,1664 677,1664 500.5,1561 324,1458 221,1281.5 118,1105 118,896 118,687 221,510.5 324,334 500.5,231 677,128 886,128 Z m 274,521 q -2,1 -9.5,9.5 -7.5,8.5 -13.5,9.5 2,0 4.5,-5 2.5,-5 5,-11 2.5,-6 3.5,-7 6,-7 22,-15 14,-6 52,-12 34,-8 51,11 -2,-2 9.5,-13 11.5,-11 14.5,-12 3,-2 15,-4.5 12,-2.5 15,-7.5 l 2,-22 q -12,1 -17.5,-7 -5.5,-8 -6.5,-21 0,2 -6,8 0,-7 -4.5,-8 -4.5,-1 -11.5,1 -7,2 -9,1 -10,-3 -15,-7.5 -5,-4.5 -8,-16.5 -3,-12 -4,-15 -2,-5 -9.5,-10.5 -7.5,-5.5 -9.5,-10.5 -1,-2 -2.5,-5.5 -1.5,-3.5 -3,-6.5 -1.5,-3 -4,-5.5 -2.5,-2.5 -5.5,-2.5 -3,0 -7,5 -4,5 -7.5,10 -3.5,5 -4.5,5 -3,-2 -6,-1.5 -3,0.5 -4.5,1 -1.5,0.5 -4.5,3 -3,2.5 -5,3.5 -3,2 -8.5,3 -5.5,1 -8.5,2 15,-5 -1,-11 -10,-4 -16,-3 9,-4 7.5,-12 -1.5,-8 -8.5,-14 h 5 q -1,-4 -8.5,-8.5 -7.5,-4.5 -17.5,-8.5 -10,-4 -13,-6 -8,-5 -34,-9.5 -26,-4.5 -33,-0.5 -5,6 -4.5,10.5 0.5,4.5 4,14 3.5,9.5 3.5,12.5 1,6 -5.5,13 -6.5,7 -6.5,12 0,7 14,15.5 14,8.5 10,21.5 -3,8 -16,16 -13,8 -16,12 -5,8 -1.5,18.5 3.5,10.5 10.5,16.5 2,2 1.5,4 -0.5,2 -3.5,4.5 -3,2.5 -5.5,4 -2.5,1.5 -6.5,3.5 l -3,2 q -11,5 -20.5,-6 -9.5,-11 -13.5,-26 -7,-25 -16,-30 -23,-8 -29,1 -5,-13 -41,-26 -25,-9 -58,-4 6,-1 0,-15 -7,-15 -19,-12 3,-6 4,-17.5 1,-11.5 1,-13.5 3,-13 12,-23 1,-1 7,-8.5 6,-7.5 9.5,-13.5 3.5,-6 0.5,-6 35,4 50,-11 5,-5 11.5,-17 6.5,-12 10.5,-17 9,-6 14,-5.5 5,0.5 14.5,5.5 9.5,5 14.5,5 14,1 15.5,-11 1.5,-12 -7.5,-20 12,1 3,-17 -5,-7 -8,-9 -12,-4 -27,5 -8,4 2,8 -1,-1 -9.5,10.5 Q 927,340 919,346 q -8,6 -16,-5 -1,-1 -5.5,-13.5 Q 893,315 888,314 q -8,0 -16,15 3,-8 -11,-15 -14,-7 -24,-8 19,-12 -8,-27 -7,-4 -20.5,-5 -13.5,-1 -19.5,4 -5,7 -5.5,11.5 -0.5,4.5 5,8 5.5,3.5 10.5,5.5 5,2 11.5,4 6.5,2 8.5,3 14,10 8,14 -2,1 -8.5,3.5 -6.5,2.5 -11.5,4.5 -5,2 -6,4 -3,4 0,14 3,10 -2,14 -5,-5 -9,-17.5 -4,-12.5 -7,-16.5 7,9 -25,6 l -10,-1 q -4,0 -16,2 -12,2 -20.5,1 -8.5,-1 -13.5,-8 -4,-8 0,-20 1,-4 4,-2 -4,-3 -11,-9.5 -7,-6.5 -10,-8.5 -46,15 -94,41 6,1 12,-1 5,-2 13,-6.5 8,-4.5 10,-5.5 34,-14 42,-7 l 5,-5 q 14,16 20,25 -7,-4 -30,-1 -20,6 -22,12 7,12 5,18 -4,-3 -11.5,-10 -7.5,-7 -14.5,-11 -7,-4 -15,-5 -16,0 -22,1 -146,80 -235,222 7,7 12,8 4,1 5,9 1,8 2.5,11 1.5,3 11.5,-3 9,8 3,19 1,-1 44,27 19,17 21,21 3,11 -10,18 -1,-2 -9,-9 -8,-7 -9,-4 -3,5 0.5,18.5 3.5,13.5 10.5,12.5 -7,0 -9.5,16 -2.5,16 -2.5,35.5 0,19.5 -1,23.5 l 2,1 q -3,12 5.5,34.5 8.5,22.5 21.5,19.5 -13,3 20,43 6,8 8,9 3,2 12,7.5 9,5.5 15,10 6,4.5 10,10.5 4,5 10,22.5 6,17.5 14,23.5 -2,6 9.5,20 11.5,14 10.5,23 -1,0 -2.5,1 -1.5,1 -2.5,1 3,7 15.5,14 12.5,7 15.5,13 1,3 2,10 1,7 3,11 2,4 8,2 2,-20 -24,-62 -15,-25 -17,-29 -3,-5 -5.5,-15.5 Q 541,919 539,915 q 2,0 6,1.5 4,1.5 8.5,3.5 4.5,2 7.5,4 3,2 2,3 -3,7 2,17.5 5,10.5 12,18.5 7,8 17,19 10,11 12,13 6,6 14,19.5 8,13.5 0,13.5 9,0 20,10 11,10 17,20 5,8 8,26 3,18 5,24 2,7 8.5,13.5 6.5,6.5 12.5,9.5 l 16,8 q 0,0 13,7 5,2 18.5,10.5 13.5,8.5 21.5,11.5 10,4 16,4 6,0 14.5,-2.5 8.5,-2.5 13.5,-3.5 15,-2 29,15 14,17 21,21 36,19 55,11 -2,1 0.5,7.5 2.5,6.5 8,15.5 5.5,9 9,14.5 3.5,5.5 5.5,8.5 5,6 18,15 13,9 18,15 6,-4 7,-9 -3,8 7,20 10,12 18,10 14,-3 14,-32 -31,15 -49,-18 0,-1 -2.5,-5.5 -2.5,-4.5 -4,-8.5 -1.5,-4 -2.5,-8.5 -1,-4.5 0,-7.5 1,-3 5,-3 9,0 10,-3.5 1,-3.5 -2,-12.5 -3,-9 -4,-13 -1,-8 -11,-20 -10,-12 -12,-15 -5,9 -16,8 -11,-1 -16,-9 0,1 -1.5,5.5 -1.5,4.5 -1.5,6.5 -13,0 -15,-1 1,-3 2.5,-17.5 1.5,-14.5 3.5,-22.5 1,-4 5.5,-12 4.5,-8 7.5,-14.5 3,-6.5 4,-12.5 1,-6 -4.5,-9.5 -5.5,-3.5 -17.5,-2.5 -19,1 -26,20 -1,3 -3,10.5 -2,7.5 -5,11.5 -3,4 -9,7 -7,3 -24,2 -17,-1 -24,-5 -13,-8 -22.5,-29 -9.5,-21 -9.5,-37 0,-10 2.5,-26.5 2.5,-16.5 3,-25 0.5,-8.5 -5.5,-24.5 3,-2 9,-9.5 6,-7.5 10,-10.5 2,-1 4.5,-1.5 2.5,-0.5 4.5,0 2,0.5 4,-1.5 2,-2 3,-6 -1,-1 -4,-3 -3,-3 -4,-3 7,3 28.5,-1.5 21.5,-4.5 27.5,1.5 15,11 22,-2 0,-1 -2.5,-9.5 Q 870,931 872,926 q 5,27 29,9 3,3 15.5,5 12.5,2 17.5,5 3,2 7,5.5 4,3.5 5.5,4.5 1.5,1 5,-0.5 3.5,-1.5 8.5,-6.5 10,14 12,24 11,40 19,44 7,3 11,2 4,-1 4.5,-9.5 0.5,-8.5 0,-14 Q 1006,989 1005,982 l -1,-8 v -18 l -1,-8 q -15,-3 -18.5,-12 -3.5,-9 1.5,-18.5 5,-9.5 15,-18.5 1,-1 8,-3.5 7,-2.5 15.5,-6.5 8.5,-4 12.5,-8 21,-19 15,-35 7,0 11,-9 -1,0 -5,-3 -4,-3 -7.5,-5 -3.5,-2 -4.5,-2 9,-5 2,-16 5,-3 7.5,-11 2.5,-8 7.5,-10 9,12 21,2 7,-8 1,-16 5,-7 20.5,-10.5 15.5,-3.5 18.5,-9.5 7,2 8,-2 1,-4 1,-12 0,-8 3,-12 4,-5 15,-9 11,-4 13,-5 l 17,-11 q 3,-4 0,-4 18,2 31,-11 10,-11 -6,-20 3,-6 -3,-9.5 -6,-3.5 -15,-5.5 3,-1 11.5,-0.5 8.5,0.5 10.5,-1.5 15,-10 -7,-16 -17,-5 -43,12 z m -163,877 q 206,-36 351,-189 -3,-3 -12.5,-4.5 -9.5,-1.5 -12.5,-3.5 -18,-7 -24,-8 1,-7 -2.5,-13 -3.5,-6 -8,-9 -4.5,-3 -12.5,-8 -8,-5 -11,-7 -2,-2 -7,-6 -5,-4 -7,-5.5 -2,-1.5 -7.5,-4.5 -5.5,-3 -8.5,-2 -3,1 -10,1 l -3,1 q -3,1 -5.5,2.5 -2.5,1.5 -5.5,3 -3,1.5 -4,3 -1,1.5 0,2.5 -21,-17 -36,-22 -5,-1 -11,-5.5 -6,-4.5 -10.5,-7 -4.5,-2.5 -10,-1.5 -5.5,1 -11.5,7 -5,5 -6,15 -1,10 -2,13 -7,-5 0,-17.5 7,-12.5 2,-18.5 -3,-6 -10.5,-4.5 -7.5,1.5 -12,4.5 -4.5,3 -11.5,8.5 -7,5.5 -9,6.5 -2,1 -8.5,5.5 -6.5,4.5 -8.5,7.5 -3,4 -6,12 -3,8 -5,11 -2,-4 -11.5,-6.5 -9.5,-2.5 -9.5,-5.5 2,10 4,35 2,25 5,38 7,31 -12,48 -27,25 -29,40 -4,22 12,26 0,7 -8,20.5 -8,13.5 -7,21.5 0,6 2,16 z"
+ id="path153" />
+</svg>
diff --git a/examples/quickcontrols/filesystemexplorer/icons/info_sign.svg b/examples/quickcontrols/filesystemexplorer/icons/info_sign.svg
new file mode 100644
index 0000000000..517f763604
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/icons/info_sign.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="-10 0 1792 1792"
+ id="svg163"
+ sodipodi:docname="info_sign.svg"
+ width="1792"
+ height="1792"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ 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">
+ <defs
+ id="defs167" />
+ <sodipodi:namedview
+ id="namedview165"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="0.48716518"
+ inkscape:cx="72.870561"
+ inkscape:cy="896"
+ inkscape:window-width="1846"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg163" />
+ <path
+ fill="currentColor"
+ d="m 1142,1376 v -160 q 0,-14 -9,-23 -9,-9 -23,-9 h -96 V 672 q 0,-14 -9,-23 -9,-9 -23,-9 H 662 q -14,0 -23,9 -9,9 -9,23 v 160 q 0,14 9,23 9,9 23,9 h 96 v 320 h -96 q -14,0 -23,9 -9,9 -9,23 v 160 q 0,14 9,23 9,9 23,9 h 448 q 14,0 23,-9 9,-9 9,-23 z M 1014,480 V 320 q 0,-14 -9,-23 -9,-9 -23,-9 H 790 q -14,0 -23,9 -9,9 -9,23 v 160 q 0,14 9,23 9,9 23,9 h 192 q 14,0 23,-9 9,-9 9,-23 z m 640,416 q 0,209 -103,385.5 Q 1448,1458 1271.5,1561 1095,1664 886,1664 677,1664 500.5,1561 324,1458 221,1281.5 118,1105 118,896 118,687 221,510.5 324,334 500.5,231 677,128 886,128 1095,128 1271.5,231 1448,334 1551,510.5 1654,687 1654,896 Z"
+ id="path161" />
+</svg>
diff --git a/examples/quickcontrols/filesystemexplorer/icons/light_bulb.svg b/examples/quickcontrols/filesystemexplorer/icons/light_bulb.svg
new file mode 100644
index 0000000000..ed2ed55fb3
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/icons/light_bulb.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="-10 0 1538 1538"
+ id="svg4"
+ sodipodi:docname="light_bulb.svg"
+ width="1538"
+ height="1538"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ 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">
+ <defs
+ id="defs8" />
+ <sodipodi:namedview
+ id="namedview6"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ fit-margin-top="1"
+ fit-margin-left="1"
+ fit-margin-right="1"
+ fit-margin-bottom="1"
+ lock-margins="true"
+ inkscape:zoom="0.16"
+ inkscape:cx="1234.375"
+ inkscape:cy="409.375"
+ inkscape:window-width="1846"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg4" />
+ <path
+ fill="currentColor"
+ d="m 983,449 q 0,13 -9.5,22.5 Q 964,481 951,481 938,481 928.5,471.5 919,462 919,449 919,403 865,378 811,353 759,353 746,353 736.5,343.5 727,334 727,321 q 0,-13 9.5,-22.5 9.5,-9.5 22.5,-9.5 50,0 99.5,16 49.5,16 87,54 37.5,38 37.5,90 z m 160,0 q 0,-72 -34.5,-134 -34.5,-62 -90,-101.5 Q 963,174 895.5,151.5 828,129 759,129 690,129 622.5,151.5 555,174 499.5,213.5 444,253 409.5,315 375,377 375,449 q 0,101 68,180 10,11 30.5,33 20.5,22 30.5,33 128,153 141,298 h 228 q 13,-145 141,-298 10,-11 30.5,-33 20.5,-22 30.5,-33 68,-79 68,-180 z m 128,0 q 0,155 -103,268 -45,49 -74.5,87 -29.5,38 -59.5,95.5 -30,57.5 -34,107.5 47,28 47,82 0,37 -25,64 25,27 25,64 0,52 -45,81 13,23 13,47 0,46 -31.5,71 -31.5,25 -77.5,25 -20,44 -60,70 -40,26 -87,26 -47,0 -87,-26 -40,-26 -60,-70 -46,0 -77.5,-25 -31.5,-25 -31.5,-71 0,-24 13,-47 -45,-29 -45,-81 0,-37 25,-64 -25,-27 -25,-64 0,-54 47,-82 Q 514,957 484,899.5 454,842 424.5,804 395,766 350,717 247,604 247,449 247,350 291.5,264.5 336,179 408.5,122.5 481,66 572.5,33.5 664,1 759,1 q 95,0 186.5,32.5 91.5,32.5 164,89 72.5,56.5 117,142 Q 1271,350 1271,449 Z"
+ id="path2" />
+</svg>
diff --git a/examples/quickcontrols/filesystemexplorer/icons/qt_logo.svg b/examples/quickcontrols/filesystemexplorer/icons/qt_logo.svg
new file mode 100644
index 0000000000..062daff3e9
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/icons/qt_logo.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns="http://www.w3.org/2000/svg"
+ width="462pt"
+ height="339pt"
+ viewBox="0 0 462 339"
+ version="1.1"
+ id="svg2"
+>
+ <path
+ fill="#41cd52"
+ d=" M 63.50 0.00 L 462.00 0.00 L 462.00 274.79 C 440.60 296.26 419.13 317.66 397.61 339.00 L 0.00 339.00 L 0.00 63.39 C 21.08 42.18 42.34 21.13 63.50 0.00 Z"
+ id="path6"/>
+ <path
+ d=" M 122.37 71.33 C 137.50 61.32 156.21 58.79 174.00 58.95 C 190.94 59.16 208.72 62.13 222.76 72.24 C 232.96 79.41 239.59 90.48 244.01 101.93 C 251.16 120.73 253.26 141.03 253.50 161.01 C 253.53 181.13 252.62 201.69 245.96 220.86 C 241.50 233.90 233.01 245.48 221.81 253.52 C 229.87 266.58 238.09 279.54 246.15 292.60 C 236.02 297.27 225.92 301.97 215.78 306.62 C 207.15 292.38 198.56 278.11 189.90 263.89 C 178.19 265.81 166.21 265.66 154.44 264.36 C 140.34 262.67 125.97 258.37 115.09 248.88 C 106.73 241.64 101.48 231.51 97.89 221.21 C 92.01 203.79 90.43 185.25 90.16 166.97 C 90.02 147.21 91.28 127.14 97.24 108.18 C 101.85 93.92 109.48 79.69 122.37 71.33 Z"
+ id="path8"
+ fill="#ffffff"/>
+ <path
+ d=" M 294.13 70.69 C 304.73 70.68 315.33 70.68 325.93 70.69 C 325.96 84.71 325.92 98.72 325.95 112.74 C 339.50 112.76 353.05 112.74 366.60 112.75 C 366.37 121.85 366.12 130.95 365.86 140.05 C 352.32 140.08 338.79 140.04 325.25 140.07 C 325.28 163.05 325.18 186.03 325.30 209.01 C 325.56 215.30 325.42 221.94 328.19 227.75 C 330.21 232.23 335.65 233.38 340.08 233.53 C 348.43 233.50 356.77 233.01 365.12 232.86 C 365.63 241.22 366.12 249.59 366.60 257.95 C 349.99 260.74 332.56 264.08 316.06 258.86 C 309.11 256.80 302.63 252.19 299.81 245.32 C 294.76 233.63 294.35 220.62 294.13 208.07 C 294.11 185.40 294.13 162.74 294.12 140.07 C 286.73 140.05 279.34 140.08 271.95 140.05 C 271.93 130.96 271.93 121.86 271.95 112.76 C 279.34 112.73 286.72 112.77 294.11 112.74 C 294.14 98.72 294.10 84.71 294.13 70.69 Z"
+ id="path10"
+ fill="#ffffff"/>
+ <path
+ fill="#41cd52"
+ d=" M 160.51 87.70 C 170.80 86.36 181.60 86.72 191.34 90.61 C 199.23 93.73 205.93 99.84 209.47 107.58 C 214.90 119.31 216.98 132.26 218.03 145.05 C 219.17 162.07 219.01 179.25 216.66 196.17 C 215.01 206.24 212.66 216.85 205.84 224.79 C 198.92 232.76 188.25 236.18 178.01 236.98 C 167.21 237.77 155.82 236.98 146.07 231.87 C 140.38 228.84 135.55 224.09 132.73 218.27 C 129.31 211.30 127.43 203.69 126.11 196.07 C 122.13 171.91 121.17 146.91 126.61 122.89 C 128.85 113.83 132.11 104.53 138.73 97.70 C 144.49 91.85 152.51 88.83 160.51 87.70 Z"
+ id="path12"/>
+</svg>
diff --git a/examples/quickcontrols/filesystemexplorer/icons/read.svg b/examples/quickcontrols/filesystemexplorer/icons/read.svg
new file mode 100644
index 0000000000..c3af473d21
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/icons/read.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ version="1.1"
+ viewBox="-11 0 1792 1792"
+ id="svg184"
+ sodipodi:docname="read.svg"
+ width="1792"
+ height="1792"
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ 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">
+ <defs
+ id="defs188" />
+ <sodipodi:namedview
+ id="namedview186"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="0.24358259"
+ inkscape:cx="519.33104"
+ inkscape:cy="1089.9794"
+ inkscape:window-width="1846"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg184" />
+ <path
+ fill="currentColor"
+ d="m 1691.8576,478 q 40,57 18,129 l -275,906 q -19,64 -76.5,107.5 -57.5,43.5 -122.5,43.5 H 312.85764 q -77,0 -148.5,-53.5 Q 92.857644,1557 64.857644,1479 q -24,-67 -2,-127 0,-4 3,-27 3,-23 4,-37 1,-8 -3,-21.5 -4,-13.5 -3,-19.5 2,-11 8,-21 6,-10 16.5,-23.5 10.5,-13.5 16.499996,-23.5 23,-38 45,-91.5 22,-53.5 30,-91.5 3,-10 0.5,-30 -2.5,-20 -0.5,-28 3,-11 17,-28 14,-17 17,-23 21,-36 42,-92 21,-56 25,-90 1,-9 -2.5,-32 -3.5,-23 0.5,-28 4,-13 22,-30.5 18,-17.5 22,-22.5 19,-26 42.5,-84.5 23.5,-58.5 27.5,-96.5 1,-8 -3,-25.5 -4,-17.5 -2,-26.5 2,-8 9,-18 7,-10 18,-23 11,-13 17,-21 8,-12 16.5,-30.5 8.5,-18.5 15,-35 6.5,-16.5 16,-36 9.5,-19.5 19.5,-32 10,-12.5 26.5,-23.5 16.5,-11 36,-11.5 19.5,-0.5 47.5,5.5 l -1,3 q 38,-9 51,-9 h 760.99996 q 74,0 114,56 40,56 18,130 l -274,906 q -36,119 -71.5,153.5 -35.5,34.5 -128.5,34.5 H 208.85764 q -27,0 -38,15 -11,16 -1,43 24,70 144,70 h 922.99996 q 29,0 56,-15.5 27,-15.5 35,-41.5 l 300,-987 q 7,-22 5,-57 38,15 59,43 z m -1063.99996,2 q -4,13 2,22.5 6,9.5 20,9.5 h 607.99996 q 13,0 25.5,-9.5 12.5,-9.5 16.5,-22.5 l 21,-64 q 4,-13 -2,-22.5 -6,-9.5 -20,-9.5 H 690.85764 q -13,0 -25.5,9.5 -12.5,9.5 -16.5,22.5 z m -83,256 q -4,13 2,22.5 6,9.5 20,9.5 h 607.99996 q 13,0 25.5,-9.5 12.5,-9.5 16.5,-22.5 l 21,-64 q 4,-13 -2,-22.5 -6,-9.5 -20,-9.5 H 607.85764 q -13,0 -25.5,9.5 -12.5,9.5 -16.5,22.5 z"
+ id="path182" />
+</svg>
diff --git a/examples/quickcontrols/filesystemexplorer/icons/resize.svg b/examples/quickcontrols/filesystemexplorer/icons/resize.svg
new file mode 100644
index 0000000000..e86d612f3f
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/icons/resize.svg
@@ -0,0 +1,6 @@
+<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100'>
+ <line x1="00" y1="100" x2="100" y2="00" stroke="black" stroke-width="3" />
+ <line x1="20" y1="100" x2="100" y2="20" stroke="black" stroke-width="3" />
+ <line x1="40" y1="100" x2="100" y2="40" stroke="black" stroke-width="3" />
+ <line x1="60" y1="100" x2="100" y2="60" stroke="black" stroke-width="3" />
+</svg>
diff --git a/examples/quickcontrols/filesystemexplorer/linenumbermodel.cpp b/examples/quickcontrols/filesystemexplorer/linenumbermodel.cpp
new file mode 100644
index 0000000000..5a7982dca9
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/linenumbermodel.cpp
@@ -0,0 +1,58 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "linenumbermodel.h"
+
+#include <QQmlInfo>
+
+/*!
+ When using an integer model based on the line count of the editor,
+ any changes in that line count cause all delegates to be destroyed
+ and recreated. That's inefficient, so instead, we add/remove model
+ items as necessary ourselves, based on the lineCount property.
+*/
+LineNumberModel::LineNumberModel(QObject *parent)
+ : QAbstractListModel(parent)
+{
+}
+
+int LineNumberModel::lineCount() const
+{
+ return m_lineCount;
+}
+
+void LineNumberModel::setLineCount(int lineCount)
+{
+ if (lineCount < 0) {
+ qmlWarning(this) << "lineCount must be greater than zero";
+ return;
+ }
+
+ if (m_lineCount == lineCount)
+ return;
+
+ if (m_lineCount < lineCount) {
+ beginInsertRows(QModelIndex(), m_lineCount, lineCount - 1);
+ m_lineCount = lineCount;
+ endInsertRows();
+ } else if (m_lineCount > lineCount) {
+ beginRemoveRows(QModelIndex(), lineCount, m_lineCount - 1);
+ m_lineCount = lineCount;
+ endRemoveRows();
+ }
+
+ emit lineCountChanged();
+}
+
+int LineNumberModel::rowCount(const QModelIndex &) const
+{
+ return m_lineCount;
+}
+
+QVariant LineNumberModel::data(const QModelIndex &index, int role) const
+{
+ if (!checkIndex(index) || role != Qt::DisplayRole)
+ return QVariant();
+
+ return index.row();
+}
diff --git a/examples/quickcontrols/filesystemexplorer/linenumbermodel.h b/examples/quickcontrols/filesystemexplorer/linenumbermodel.h
new file mode 100644
index 0000000000..1ec800ffd8
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/linenumbermodel.h
@@ -0,0 +1,32 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef LINENUMBERMODEL_H
+#define LINENUMBERMODEL_H
+
+#include <QAbstractItemModel>
+#include <QQmlEngine>
+
+class LineNumberModel : public QAbstractListModel
+{
+ Q_OBJECT
+ QML_ELEMENT
+ Q_PROPERTY(int lineCount READ lineCount WRITE setLineCount NOTIFY lineCountChanged)
+
+public:
+ explicit LineNumberModel(QObject *parent = nullptr);
+
+ int lineCount() const;
+ void setLineCount(int lineCount);
+
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+
+signals:
+ void lineCountChanged();
+
+private:
+ int m_lineCount = 0;
+};
+
+#endif // LINENUMBERMODEL_H
diff --git a/examples/quickcontrols/filesystemexplorer/main.cpp b/examples/quickcontrols/filesystemexplorer/main.cpp
new file mode 100644
index 0000000000..9a43fa9d6d
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/main.cpp
@@ -0,0 +1,43 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "filesystemmodel.h"
+
+#include <QGuiApplication>
+#include <QCommandLineParser>
+#include <QQmlApplicationEngine>
+
+int main(int argc, char *argv[])
+{
+ // Initialize the static application object.
+ QGuiApplication app(argc, argv);
+ QGuiApplication::setOrganizationName("QtProject");
+ QGuiApplication::setApplicationName("File System Explorer");
+ QGuiApplication::setApplicationVersion(QT_VERSION_STR);
+ QGuiApplication::setWindowIcon(QIcon(":/qt/qml/FileSystemModule/icons/app_icon.svg"));
+
+ // Setup the parser and parse the command-line arguments.
+ QCommandLineParser parser;
+ parser.setApplicationDescription("Qt Filesystemexplorer Example");
+ parser.addHelpOption();
+ parser.addVersionOption();
+ parser.addPositionalArgument("", QGuiApplication::translate(
+ "main", "Initial directory"),"[path]");
+ parser.process(app);
+ const auto args = parser.positionalArguments();
+
+ // Load the QML entry point.
+ QQmlApplicationEngine engine;
+ engine.loadFromModule("FileSystemModule", "Main");
+ if (engine.rootObjects().isEmpty())
+ return -1;
+
+ // Set the initial directory if provided
+ if (args.length() == 1) {
+ auto *fileSystemModel = engine.singletonInstance<FileSystemModel*>(
+ "FileSystemModule","FileSystemModel");
+ fileSystemModel->setInitialDirectory(args[0]);
+ }
+
+ return QGuiApplication::exec(); // Start the event loop.
+}
diff --git a/examples/quickcontrols/filesystemexplorer/qml/About.qml b/examples/quickcontrols/filesystemexplorer/qml/About.qml
new file mode 100644
index 0000000000..0d308a2a1d
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/qml/About.qml
@@ -0,0 +1,93 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls.Basic
+import FileSystemModule
+
+ApplicationWindow {
+ id: root
+ width: 650
+ height: 550
+ flags: Qt.Window | Qt.FramelessWindowHint
+ color: Colors.surface1
+
+ menuBar: MyMenuBar {
+ id: menuBar
+
+ dragWindow: root
+ implicitHeight: 30
+ infoText: "About Qt"
+ }
+
+ Image {
+ id: logo
+
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.margins: 20
+
+ source: "../icons/qt_logo.svg"
+ sourceSize.width: 80
+ sourceSize.height: 80
+ fillMode: Image.PreserveAspectFit
+
+ smooth: true
+ antialiasing: true
+ asynchronous: true
+ }
+
+ ScrollView {
+ anchors.top: logo.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ anchors.margins: 20
+
+ TextArea {
+ selectedTextColor: Colors.textFile
+ selectionColor: Colors.selection
+ horizontalAlignment: Text.AlignHCenter
+ textFormat: Text.RichText
+
+ text: qsTr("<h3>About Qt</h3>"
+ + "<p>This program uses Qt version %1.</p>"
+ + "<p>Qt is a C++ toolkit for cross-platform application "
+ + "development.</p>"
+ + "<p>Qt provides single-source portability across all major desktop "
+ + "operating systems. It is also available for embedded Linux and other "
+ + "embedded and mobile operating systems.</p>"
+ + "<p>Qt is available under multiple licensing options designed "
+ + "to accommodate the needs of our various users.</p>"
+ + "<p>Qt licensed under our commercial license agreement is appropriate "
+ + "for development of proprietary/commercial software where you do not "
+ + "want to share any source code with third parties or otherwise cannot "
+ + "comply with the terms of GNU (L)GPL.</p>"
+ + "<p>Qt licensed under GNU (L)GPL is appropriate for the "
+ + "development of Qt&nbsp;applications provided you can comply with the terms "
+ + "and conditions of the respective licenses.</p>"
+ + "<p>Please see <a href=\"http://%2/\">%2</a> "
+ + "for an overview of Qt licensing.</p>"
+ + "<p>Copyright (C) %3 The Qt Company Ltd and other "
+ + "contributors.</p>"
+ + "<p>Qt and the Qt logo are trademarks of The Qt Company Ltd.</p>"
+ + "<p>Qt is The Qt Company Ltd product developed as an open source "
+ + "project. See <a href=\"http://%4/\">%4</a> for more information.</p>")
+ .arg(Application.version).arg("qt.io/licensing").arg("2023").arg("qt.io")
+ color: Colors.textFile
+ wrapMode: Text.WordWrap
+ readOnly: true
+ antialiasing: true
+ background: null
+
+ onLinkActivated: function(link) {
+ Qt.openUrlExternally(link)
+ }
+ }
+ }
+
+ ResizeButton {
+ resizeWindow: root
+ }
+}
diff --git a/examples/quickcontrols/filesystemexplorer/qml/Colors.qml b/examples/quickcontrols/filesystemexplorer/qml/Colors.qml
new file mode 100644
index 0000000000..2856677738
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/qml/Colors.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+pragma Singleton
+
+QtObject {
+ readonly property color background: "#292828"
+ readonly property color surface1: "#171819"
+ readonly property color surface2: "#090A0C"
+ readonly property color text: "#D4BE98"
+ readonly property color textFile: "#E1D2B7"
+ readonly property color disabledText: "#2C313A"
+ readonly property color selection: "#4B4A4A"
+ readonly property color active: "#292828"
+ readonly property color inactive: "#383737"
+ readonly property color folder: "#383737"
+ readonly property color icon: "#383737"
+ readonly property color iconIndicator: "#D5B35D"
+ readonly property color color1: "#A7B464"
+ readonly property color color2: "#D3869B"
+}
diff --git a/examples/quickcontrols/filesystemexplorer/qml/Editor.qml b/examples/quickcontrols/filesystemexplorer/qml/Editor.qml
new file mode 100644
index 0000000000..2f995c88c9
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/qml/Editor.qml
@@ -0,0 +1,161 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import FileSystemModule
+
+pragma ComponentBehavior: Bound
+
+// This is the text editor that displays the currently open file, including
+// their corresponding line numbers.
+Rectangle {
+ id: root
+
+ required property string currentFilePath
+ required property bool showLineNumbers
+ property alias text: textArea
+ property int currentLineNumber: -1
+ property int rowHeight: Math.ceil(fontMetrics.lineSpacing)
+
+ color: Colors.background
+
+ onWidthChanged: textArea.update()
+ onHeightChanged: textArea.update()
+
+ RowLayout {
+ anchors.fill: parent
+ // We use a flickable to synchronize the position of the editor and
+ // the line numbers. This is necessary because the line numbers can
+ // extend the available height.
+ Flickable {
+ id: lineNumbers
+
+ // Calculate the width based on the logarithmic scale.
+ Layout.preferredWidth: fontMetrics.averageCharacterWidth
+ * (Math.floor(Math.log10(textArea.lineCount)) + 1) + 10
+ Layout.fillHeight: true
+ Layout.fillWidth: false
+
+ interactive: false
+ contentY: editorFlickable.contentY
+ visible: textArea.text !== "" && root.showLineNumbers
+
+ Column {
+ anchors.fill: parent
+ Repeater {
+ id: repeatedLineNumbers
+
+ model: LineNumberModel {
+ lineCount: textArea.text !== "" ? textArea.lineCount : 0
+ }
+
+ delegate: Item {
+ required property int index
+
+ width: parent.width
+ height: root.rowHeight
+ Label {
+ id: numbers
+
+ text: parent.index + 1
+
+ width: parent.width
+ height: parent.height
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+
+ color: (root.currentLineNumber === parent.index)
+ ? Colors.iconIndicator : Qt.darker(Colors.text, 2)
+ font: textArea.font
+ }
+ Rectangle {
+ id: indicator
+
+ anchors.left: numbers.right
+ width: 1
+ height: parent.height
+ color: Qt.darker(Colors.text, 3)
+ }
+ }
+ }
+ }
+ }
+
+ Flickable {
+ id: editorFlickable
+
+ property alias textArea: textArea
+
+ // We use an inline component to customize the horizontal and vertical
+ // scroll-bars. This is convenient when the component is only used in one file.
+ component MyScrollBar: ScrollBar {
+ id: scrollBar
+ background: Rectangle {
+ implicitWidth: scrollBar.interactive ? 8 : 4
+ implicitHeight: scrollBar.interactive ? 8 : 4
+
+ opacity: scrollBar.active && scrollBar.size < 1.0 ? 1.0 : 0.0
+ color: Colors.background
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: 500
+ }
+ }
+ }
+ contentItem: Rectangle {
+ implicitWidth: scrollBar.interactive ? 8 : 4
+ implicitHeight: scrollBar.interactive ? 8 : 4
+ opacity: scrollBar.active && scrollBar.size < 1.0 ? 1.0 : 0.0
+ color: Colors.color1
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: 1000
+ }
+ }
+ }
+ }
+
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ ScrollBar.horizontal: MyScrollBar {}
+ ScrollBar.vertical: MyScrollBar {}
+
+ boundsBehavior: Flickable.StopAtBounds
+
+ TextArea.flickable: TextArea {
+ id: textArea
+ anchors.fill: parent
+
+ focus: false
+ topPadding: 0
+ leftPadding: 10
+
+ text: FileSystemModel.readFile(root.currentFilePath)
+ tabStopDistance: fontMetrics.averageCharacterWidth * 4
+
+ // Grab the current line number from the C++ interface.
+ onCursorPositionChanged: {
+ root.currentLineNumber = FileSystemModel.currentLineNumber(
+ textArea.textDocument, textArea.cursorPosition)
+ }
+
+ color: Colors.textFile
+ selectedTextColor: Colors.textFile
+ selectionColor: Colors.selection
+
+ textFormat: TextEdit.PlainText
+ renderType: Text.QtRendering
+ selectByMouse: true
+ antialiasing: true
+ background: null
+ }
+
+ FontMetrics {
+ id: fontMetrics
+ font: textArea.font
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/filesystemexplorer/qml/FileSystemView.qml b/examples/quickcontrols/filesystemexplorer/qml/FileSystemView.qml
new file mode 100644
index 0000000000..db955168c5
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/qml/FileSystemView.qml
@@ -0,0 +1,156 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Effects
+import QtQuick.Controls.Basic
+import FileSystemModule
+
+pragma ComponentBehavior: Bound
+
+// This is the file system view which gets populated by the C++ model.
+Rectangle {
+ id: root
+
+ signal fileClicked(string filePath)
+ property alias rootIndex: fileSystemTreeView.rootIndex
+
+ TreeView {
+ id: fileSystemTreeView
+
+ property int lastIndex: -1
+
+ anchors.fill: parent
+ model: FileSystemModel
+ rootIndex: FileSystemModel.rootIndex
+ boundsBehavior: Flickable.StopAtBounds
+ boundsMovement: Flickable.StopAtBounds
+ clip: true
+
+ Component.onCompleted: fileSystemTreeView.toggleExpanded(0)
+
+ // The delegate represents a single entry in the filesystem.
+ delegate: TreeViewDelegate {
+ id: treeDelegate
+ indentation: 8
+ implicitWidth: fileSystemTreeView.width > 0 ? fileSystemTreeView.width : 250
+ implicitHeight: 25
+
+ // Since we have the 'ComponentBehavior Bound' pragma, we need to
+ // require these properties from our model. This is a convenient way
+ // to bind the properties provided by the model's role names.
+ required property int index
+ required property url filePath
+ required property string fileName
+
+ indicator: Image {
+ id: directoryIcon
+
+ x: treeDelegate.leftMargin + (treeDelegate.depth * treeDelegate.indentation)
+ anchors.verticalCenter: parent.verticalCenter
+ source: treeDelegate.hasChildren ? (treeDelegate.expanded
+ ? "../icons/folder_open.svg" : "../icons/folder_closed.svg")
+ : "../icons/generic_file.svg"
+ sourceSize.width: 20
+ sourceSize.height: 20
+ fillMode: Image.PreserveAspectFit
+
+ smooth: true
+ antialiasing: true
+ asynchronous: true
+ }
+
+ contentItem: Text {
+ text: treeDelegate.fileName
+ color: Colors.text
+ }
+
+ background: Rectangle {
+ color: (treeDelegate.index === fileSystemTreeView.lastIndex)
+ ? Colors.selection
+ : (hoverHandler.hovered ? Colors.active : "transparent")
+ }
+
+ // We color the directory icons with this MultiEffect, where we overlay
+ // the colorization color ontop of the SVG icons.
+ MultiEffect {
+ id: iconOverlay
+
+ anchors.fill: directoryIcon
+ source: directoryIcon
+ colorization: 1.0
+ brightness: 1.0
+ colorizationColor: {
+ const isFile = treeDelegate.index === fileSystemTreeView.lastIndex
+ && !treeDelegate.hasChildren;
+ if (isFile)
+ return Qt.lighter(Colors.folder, 3)
+
+ const isExpandedFolder = treeDelegate.expanded && treeDelegate.hasChildren;
+ if (isExpandedFolder)
+ return Colors.color2
+ else
+ return Colors.folder
+ }
+ }
+
+ HoverHandler {
+ id: hoverHandler
+ }
+
+ TapHandler {
+ acceptedButtons: Qt.LeftButton | Qt.RightButton
+ onSingleTapped: (eventPoint, button) => {
+ switch (button) {
+ case Qt.LeftButton:
+ fileSystemTreeView.toggleExpanded(treeDelegate.row)
+ fileSystemTreeView.lastIndex = treeDelegate.index
+ // If this model item doesn't have children, it means it's
+ // representing a file.
+ if (!treeDelegate.hasChildren)
+ root.fileClicked(treeDelegate.filePath)
+ break;
+ case Qt.RightButton:
+ if (treeDelegate.hasChildren)
+ contextMenu.popup();
+ break;
+ }
+ }
+ }
+
+ MyMenu {
+ id: contextMenu
+ Action {
+ text: qsTr("Set as root index")
+ onTriggered: {
+ fileSystemTreeView.rootIndex = fileSystemTreeView.index(treeDelegate.row, 0)
+ }
+ }
+ Action {
+ text: qsTr("Reset root index")
+ onTriggered: fileSystemTreeView.rootIndex = undefined
+ }
+ }
+ }
+
+ // Provide our own custom ScrollIndicator for the TreeView.
+ ScrollIndicator.vertical: ScrollIndicator {
+ active: true
+ implicitWidth: 15
+
+ contentItem: Rectangle {
+ implicitWidth: 6
+ implicitHeight: 6
+
+ color: Colors.color1
+ opacity: fileSystemTreeView.movingVertically ? 0.5 : 0.0
+
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: 500
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/filesystemexplorer/qml/MyMenu.qml b/examples/quickcontrols/filesystemexplorer/qml/MyMenu.qml
new file mode 100644
index 0000000000..1f1d30c566
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/qml/MyMenu.qml
@@ -0,0 +1,45 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls.Basic
+import FileSystemModule
+
+Menu {
+ id: root
+
+ delegate: MenuItem {
+ id: menuItem
+ contentItem: Item {
+ Text {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.leftMargin: 5
+
+ text: menuItem.text
+ color: enabled ? Colors.text : Colors.disabledText
+ }
+ Rectangle {
+ id: indicator
+
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ width: 6
+ height: parent.height
+
+ visible: menuItem.highlighted
+ color: Colors.color2
+ }
+ }
+ background: Rectangle {
+ implicitWidth: 210
+ implicitHeight: 35
+ color: menuItem.highlighted ? Colors.active : "transparent"
+ }
+ }
+ background: Rectangle {
+ implicitWidth: 210
+ implicitHeight: 35
+ color: Colors.surface2
+ }
+}
diff --git a/examples/quickcontrols/filesystemexplorer/qml/MyMenuBar.qml b/examples/quickcontrols/filesystemexplorer/qml/MyMenuBar.qml
new file mode 100644
index 0000000000..4874a2c03f
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/qml/MyMenuBar.qml
@@ -0,0 +1,177 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls.Basic
+import FileSystemModule
+
+// The MenuBar also serves as a controller for our window as we don't use any decorations.
+MenuBar {
+ id: root
+
+ required property ApplicationWindow dragWindow
+ property alias infoText: windowInfo.text
+
+ // Customization of the top level menus inside the MenuBar
+ delegate: MenuBarItem {
+ id: menuBarItem
+
+ contentItem: Text {
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+
+ text: menuBarItem.text
+ font: menuBarItem.font
+ elide: Text.ElideRight
+ color: menuBarItem.highlighted ? Colors.textFile : Colors.text
+ opacity: enabled ? 1.0 : 0.3
+ }
+
+ background: Rectangle {
+ id: background
+
+ color: menuBarItem.highlighted ? Colors.selection : "transparent"
+ Rectangle {
+ id: indicator
+
+ width: 0; height: 3
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+
+ color: Colors.color1
+ states: State {
+ name: "active"
+ when: menuBarItem.highlighted
+ PropertyChanges {
+ indicator.width: background.width - 2
+ }
+ }
+ transitions: Transition {
+ NumberAnimation {
+ properties: "width"
+ duration: 175
+ }
+ }
+ }
+ }
+ }
+ // We use the contentItem property as a place to attach our window decorations. Beneath
+ // the usual menu entries within a MenuBar, it includes a centered information text, along
+ // with the minimize, maximize, and close buttons.
+ contentItem: RowLayout {
+ id: windowBar
+
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ spacing: root.spacing
+ Repeater {
+ id: menuBarItems
+
+ Layout.alignment: Qt.AlignLeft
+ model: root.contentModel
+ }
+
+ Item {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Text {
+ id: windowInfo
+
+ width: parent.width; height: parent.height
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ leftPadding: windowActions.width
+ color: Colors.text
+ clip: true
+ }
+ }
+
+ RowLayout {
+ id: windowActions
+
+ Layout.alignment: Qt.AlignRight
+ Layout.fillHeight: true
+
+ spacing: 0
+
+ component InteractionButton: Rectangle {
+ id: interactionButton
+
+ signal action()
+ property alias hovered: hoverHandler.hovered
+
+ Layout.fillHeight: true
+ Layout.preferredWidth: height
+
+ color: hovered ? Colors.background : "transparent"
+ HoverHandler {
+ id: hoverHandler
+ }
+ TapHandler {
+ id: tapHandler
+ onTapped: interactionButton.action()
+ }
+ }
+
+ InteractionButton {
+ id: minimize
+
+ onAction: root.dragWindow.showMinimized()
+ Rectangle {
+ anchors.centerIn: parent
+ color: parent.hovered ? Colors.iconIndicator : Colors.icon
+ height: 2
+ width: parent.height - 14
+ }
+ }
+
+ InteractionButton {
+ id: maximize
+
+ onAction: root.dragWindow.showMaximized()
+ Rectangle {
+ anchors.fill: parent
+ anchors.margins: 7
+ border.color: parent.hovered ? Colors.iconIndicator : Colors.icon
+ border.width: 2
+ color: "transparent"
+ }
+ }
+
+ InteractionButton {
+ id: close
+
+ color: hovered ? "#ec4143" : "transparent"
+ onAction: root.dragWindow.close()
+ Rectangle {
+ anchors.centerIn: parent
+ width: parent.height - 8; height: 2
+
+ rotation: 45
+ antialiasing: true
+ transformOrigin: Item.Center
+ color: parent.hovered ? Colors.iconIndicator : Colors.icon
+
+ Rectangle {
+ anchors.centerIn: parent
+ width: parent.height
+ height: parent.width
+
+ antialiasing: true
+ color: parent.color
+ }
+ }
+ }
+ }
+ }
+
+ background: Rectangle {
+ color: Colors.surface2
+ // Make the empty space drag the specified root window.
+ WindowDragHandler {
+ dragWindow: root.dragWindow
+ }
+ }
+}
diff --git a/examples/quickcontrols/filesystemexplorer/qml/ResizeButton.qml b/examples/quickcontrols/filesystemexplorer/qml/ResizeButton.qml
new file mode 100644
index 0000000000..0df65bf82f
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/qml/ResizeButton.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick.Controls
+import FileSystemModule
+
+Button {
+ required property ApplicationWindow resizeWindow
+
+ icon.width: 20; icon.height: 20
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ rightPadding: 3
+ bottomPadding: 3
+
+ icon.source: "../icons/resize.svg"
+ icon.color: hovered ? Colors.iconIndicator : Colors.icon
+
+ background: null
+ checkable: false
+ display: AbstractButton.IconOnly
+ onPressed: resizeWindow.startSystemResize(Qt.BottomEdge | Qt.RightEdge)
+}
diff --git a/examples/quickcontrols/filesystemexplorer/qml/Sidebar.qml b/examples/quickcontrols/filesystemexplorer/qml/Sidebar.qml
new file mode 100644
index 0000000000..f739e0f930
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/qml/Sidebar.qml
@@ -0,0 +1,140 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls.Basic
+import FileSystemModule
+
+Rectangle {
+ id: root
+
+ property alias currentTabIndex: topBar.currentIndex
+ required property ApplicationWindow dragWindow
+ readonly property int tabBarSpacing: 10
+
+ color: Colors.surface2
+
+ component SidebarEntry: Button {
+ id: sidebarButton
+
+ Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: true
+
+ icon.color: down || checked ? Colors.iconIndicator : Colors.icon
+ icon.width: 27
+ icon.height: 27
+
+ topPadding: 0
+ rightPadding: 0
+ bottomPadding: 0
+ leftPadding: 0
+ background: null
+
+ Rectangle {
+ id: indicator
+
+ anchors.verticalCenter: parent.verticalCenter
+ x: 2
+ width: 4
+ height: sidebarButton.icon.height * 1.2
+
+ visible: sidebarButton.checked
+ color: Colors.color1
+ }
+ }
+
+ // TabBar is designed to be horizontal, whereas we need a vertical bar.
+ // We can easily achieve that by using a Container.
+ component TabBar: Container {
+ id: tabBarComponent
+
+ Layout.fillWidth: true
+ Layout.fillHeight: false
+
+ // ButtonGroup ensures that only one button can be checked at a time.
+ ButtonGroup {
+ buttons: tabBarComponent.contentChildren
+
+ // We have to manage the currentIndex ourselves, which we do by setting it to the index
+ // of the currently checked button. We use setCurrentIndex instead of setting the
+ // currentIndex property to avoid breaking bindings. See "Managing the Current Index"
+ // in Container's documentation for more information.
+ onCheckedButtonChanged: tabBarComponent.setCurrentIndex(
+ Math.max(0, buttons.indexOf(checkedButton)))
+ }
+
+ contentItem: ColumnLayout {
+ spacing: tabBarComponent.spacing
+ Repeater {
+ model: tabBarComponent.contentModel
+ }
+ }
+ }
+
+ ColumnLayout {
+ anchors.fill: root
+ anchors.topMargin: root.tabBarSpacing
+ anchors.bottomMargin: root.tabBarSpacing
+
+ spacing: root.tabBarSpacing
+ TabBar {
+ id: topBar
+
+ spacing: root.tabBarSpacing
+ // Shows help text when clicked.
+ SidebarEntry {
+ id: infoTab
+ icon.source: "../icons/light_bulb.svg"
+ checkable: true
+ checked: true
+ }
+
+ // Shows the file system when clicked.
+ SidebarEntry {
+ id: filesystemTab
+
+ icon.source: "../icons/read.svg"
+ checkable: true
+ }
+ }
+
+ // This item acts as a spacer to expand between the checkable and non-checkable buttons.
+ Item {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+
+ // Make the empty space drag our main window.
+ WindowDragHandler {
+ dragWindow: root.dragWindow
+ }
+ }
+
+ TabBar {
+ id: bottomBar
+
+ spacing: root.tabBarSpacing
+ // Opens the Qt website in the system's web browser.
+ SidebarEntry {
+ id: qtWebsiteButton
+ icon.source: "../icons/globe.svg"
+ checkable: false
+ onClicked: Qt.openUrlExternally("https://www.qt.io/")
+ }
+
+ // Opens the About Qt Window.
+ SidebarEntry {
+ id: aboutQtButton
+
+ icon.source: "../icons/info_sign.svg"
+ checkable: false
+ onClicked: aboutQtWindow.visible = !aboutQtWindow.visible
+ }
+ }
+ }
+
+ About {
+ id: aboutQtWindow
+ visible: false
+ }
+}
diff --git a/examples/quickcontrols/filesystemexplorer/qml/WindowDragHandler.qml b/examples/quickcontrols/filesystemexplorer/qml/WindowDragHandler.qml
new file mode 100644
index 0000000000..0e140aca37
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/qml/WindowDragHandler.qml
@@ -0,0 +1,16 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+// Allows dragging the window when placed on an unused section of the UI.
+DragHandler {
+
+ required property ApplicationWindow dragWindow
+
+ target: null
+ onActiveChanged: {
+ if (active) dragWindow.startSystemMove()
+ }
+}
diff --git a/examples/quickcontrols/filesystemexplorer/qmldir b/examples/quickcontrols/filesystemexplorer/qmldir
new file mode 100644
index 0000000000..f94e68a8ac
--- /dev/null
+++ b/examples/quickcontrols/filesystemexplorer/qmldir
@@ -0,0 +1,12 @@
+module FileSystemModule
+
+Main 1.0 Main.qml
+About 1.0 qml/About.qml
+MyMenu 1.0 qml/MyMenu.qml
+Editor 1.0 qml/Editor.qml
+Sidebar 1.0 qml/Sidebar.qml
+MyMenuBar 1.0 qml/MyMenuBar.qml
+singleton Colors 1.0 qml/Colors.qml
+ResizeButton 1.0 qml/ResizeButton.qml
+FileSystemView 1.0 qml/FileSystemView.qml
+WindowDragHandler 1.0 qml/WindowDragHandler.qml
diff --git a/examples/quickcontrols/flatstyle/CMakeLists.txt b/examples/quickcontrols/flatstyle/CMakeLists.txt
index c505c03bca..8c78720a58 100644
--- a/examples/quickcontrols/flatstyle/CMakeLists.txt
+++ b/examples/quickcontrols/flatstyle/CMakeLists.txt
@@ -1,17 +1,11 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(flatstyle LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/flatstyle")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2 Widgets)
qt_add_executable(flatstyleexample WIN32 MACOSX_BUNDLE
@@ -35,15 +29,24 @@ qt_add_qml_module(flatstyleexample
)
target_link_libraries(flatstyleexample PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::QuickControls2
- Qt::Widgets
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickControls2
+ Qt6::Widgets
)
install(TARGETS flatstyleexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET flatstyleexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/flatstyle/MainForm.ui.qml b/examples/quickcontrols/flatstyle/MainForm.ui.qml
index 389ee893c3..ff05a2dcef 100644
--- a/examples/quickcontrols/flatstyle/MainForm.ui.qml
+++ b/examples/quickcontrols/flatstyle/MainForm.ui.qml
@@ -94,6 +94,7 @@ Item {
id: button
text: qsTr("Change Color")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+ Layout.fillWidth: false
}
}
}
diff --git a/examples/quickcontrols/flatstyle/doc/src/qtquickcontrols-flatstyle.qdoc b/examples/quickcontrols/flatstyle/doc/src/qtquickcontrols-flatstyle.qdoc
index 3f5a982b7d..eeb63b7084 100644
--- a/examples/quickcontrols/flatstyle/doc/src/qtquickcontrols-flatstyle.qdoc
+++ b/examples/quickcontrols/flatstyle/doc/src/qtquickcontrols-flatstyle.qdoc
@@ -7,6 +7,7 @@
\title Qt Quick Controls - Flat Style
\keyword Qt Quick Controls 2 - Flat Style
\ingroup qtquickcontrols-examples
+ \examplecategory {Graphics}
\brief A QML app using Qt Quick Controls and a QML plugin
with customized controls.
diff --git a/examples/quickcontrols/gallery/CMakeLists.txt b/examples/quickcontrols/gallery/CMakeLists.txt
index baa7d948f1..40f393d6d2 100644
--- a/examples/quickcontrols/gallery/CMakeLists.txt
+++ b/examples/quickcontrols/gallery/CMakeLists.txt
@@ -1,17 +1,11 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(gallery_controls2 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/gallery")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2)
qt_add_executable(galleryexample WIN32 MACOSX_BUNDLE
@@ -83,21 +77,30 @@ qt_add_qml_module(galleryexample
)
target_link_libraries(galleryexample PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::QuickControls2
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickControls2
)
if(UNIX AND NOT APPLE AND CMAKE_CROSSCOMPILING)
find_package(Qt6 REQUIRED COMPONENTS QuickTemplates2)
# Work around QTBUG-86533
- target_link_libraries(galleryexample PRIVATE Qt::QuickTemplates2)
+ target_link_libraries(galleryexample PRIVATE Qt6::QuickTemplates2)
endif()
install(TARGETS galleryexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET galleryexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/gallery/doc/src/qtquickcontrols-gallery.qdoc b/examples/quickcontrols/gallery/doc/src/qtquickcontrols-gallery.qdoc
index 2fc1ed8f46..2b17866f21 100644
--- a/examples/quickcontrols/gallery/doc/src/qtquickcontrols-gallery.qdoc
+++ b/examples/quickcontrols/gallery/doc/src/qtquickcontrols-gallery.qdoc
@@ -7,6 +7,8 @@
\title Qt Quick Controls - Gallery
\keyword Qt Quick Controls 2 - Gallery
\ingroup qtquickcontrols-examples
+ \examplecategory {User Interface Components}
+ \examplecategory {Mobile}
\brief A gallery of controls.
\raw HTML
@@ -35,5 +37,20 @@
graphical appearance of a control, allows you to interact with the control,
and explains in which circumstances it is handy to use this control.
+ When the application is in portrait mode, the drawer is an interactive side
+ panel that can be swiped open from the left edge. It appears on top of the
+ content, blocking user interaction through its modal background. When the
+ application is in landscape mode, the drawer and the content are laid out
+ side-by-side.
+
+ The current orientation of the application is determined by comparing the
+ width and height of the window and orientation mode configuration in the
+ settings:
+
+ \snippet gallery/gallery.qml orientation
+
+ As this example supports all built-in Qt Quick Controls styles, it uses
+ \l {Run-Time Style Selection}{runtime style selection}.
+
\include examples-run.qdocinc
*/
diff --git a/examples/quickcontrols/gallery/gallery.qml b/examples/quickcontrols/gallery/gallery.qml
index 35eaed9f11..5caab6aba6 100644
--- a/examples/quickcontrols/gallery/gallery.qml
+++ b/examples/quickcontrols/gallery/gallery.qml
@@ -1,6 +1,8 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
+
import QtCore
import QtQuick
import QtQuick.Layouts
@@ -13,7 +15,11 @@ ApplicationWindow {
width: 360
height: 520
visible: true
- title: "Qt Quick Controls"
+ title: qsTr("Qt Quick Controls")
+
+ //! [orientation]
+ readonly property bool portraitMode: !orientationCheckBox.checked || window.width < window.height
+ //! [orientation]
function help() {
let displayingControl = listView.currentIndex !== -1
@@ -41,7 +47,7 @@ ApplicationWindow {
Shortcut {
sequence: StandardKey.HelpContents
- onActivated: help()
+ onActivated: window.help()
}
Action {
@@ -72,14 +78,16 @@ ApplicationWindow {
RowLayout {
spacing: 20
anchors.fill: parent
+ anchors.leftMargin: !window.portraitMode ? drawer.width : undefined
ToolButton {
action: navigateBackAction
+ visible: window.portraitMode
}
Label {
id: titleLabel
- text: listView.currentItem ? listView.currentItem.text : "Gallery"
+ text: listView.currentItem ? (listView.currentItem as ItemDelegate).text : qsTr("Gallery")
font.pixelSize: 20
elide: Label.ElideRight
horizontalAlignment: Qt.AlignHCenter
@@ -96,15 +104,15 @@ ApplicationWindow {
transformOrigin: Menu.TopRight
Action {
- text: "Settings"
+ text: qsTr("Settings")
onTriggered: settingsDialog.open()
}
Action {
- text: "Help"
- onTriggered: help()
+ text: qsTr("Help")
+ onTriggered: window.help()
}
Action {
- text: "About"
+ text: qsTr("About")
onTriggered: aboutDialog.open()
}
}
@@ -114,9 +122,13 @@ ApplicationWindow {
Drawer {
id: drawer
+
width: Math.min(window.width, window.height) / 3 * 2
height: window.height
- interactive: stackView.depth === 1
+ modal: window.portraitMode
+ interactive: window.portraitMode ? (stackView.depth === 1) : false
+ position: window.portraitMode ? 0 : 1
+ visible: !window.portraitMode
ListView {
id: listView
@@ -125,53 +137,63 @@ ApplicationWindow {
currentIndex: -1
anchors.fill: parent
+ model: ListModel {
+ ListElement { title: qsTr("BusyIndicator"); source: "qrc:/pages/BusyIndicatorPage.qml" }
+ ListElement { title: qsTr("Button"); source: "qrc:/pages/ButtonPage.qml" }
+ ListElement { title: qsTr("CheckBox"); source: "qrc:/pages/CheckBoxPage.qml" }
+ ListElement { title: qsTr("ComboBox"); source: "qrc:/pages/ComboBoxPage.qml" }
+ ListElement { title: qsTr("DelayButton"); source: "qrc:/pages/DelayButtonPage.qml" }
+ ListElement { title: qsTr("Dial"); source: "qrc:/pages/DialPage.qml" }
+ ListElement { title: qsTr("Dialog"); source: "qrc:/pages/DialogPage.qml" }
+ ListElement { title: qsTr("Delegates"); source: "qrc:/pages/DelegatePage.qml" }
+ ListElement { title: qsTr("Frame"); source: "qrc:/pages/FramePage.qml" }
+ ListElement { title: qsTr("GroupBox"); source: "qrc:/pages/GroupBoxPage.qml" }
+ ListElement { title: qsTr("PageIndicator"); source: "qrc:/pages/PageIndicatorPage.qml" }
+ ListElement { title: qsTr("ProgressBar"); source: "qrc:/pages/ProgressBarPage.qml" }
+ ListElement { title: qsTr("RadioButton"); source: "qrc:/pages/RadioButtonPage.qml" }
+ ListElement { title: qsTr("RangeSlider"); source: "qrc:/pages/RangeSliderPage.qml" }
+ ListElement { title: qsTr("ScrollBar"); source: "qrc:/pages/ScrollBarPage.qml" }
+ ListElement { title: qsTr("ScrollIndicator"); source: "qrc:/pages/ScrollIndicatorPage.qml" }
+ ListElement { title: qsTr("Slider"); source: "qrc:/pages/SliderPage.qml" }
+ ListElement { title: qsTr("SpinBox"); source: "qrc:/pages/SpinBoxPage.qml" }
+ ListElement { title: qsTr("StackView"); source: "qrc:/pages/StackViewPage.qml" }
+ ListElement { title: qsTr("SwipeView"); source: "qrc:/pages/SwipeViewPage.qml" }
+ ListElement { title: qsTr("Switch"); source: "qrc:/pages/SwitchPage.qml" }
+ ListElement { title: qsTr("TabBar"); source: "qrc:/pages/TabBarPage.qml" }
+ ListElement { title: qsTr("TextArea"); source: "qrc:/pages/TextAreaPage.qml" }
+ ListElement { title: qsTr("TextField"); source: "qrc:/pages/TextFieldPage.qml" }
+ ListElement { title: qsTr("ToolTip"); source: "qrc:/pages/ToolTipPage.qml" }
+ ListElement { title: qsTr("Tumbler"); source: "qrc:/pages/TumblerPage.qml" }
+ }
+
delegate: ItemDelegate {
- width: listView.width
- text: model.title
+ id: delegateItem
+ width: ListView.view.width
+ text: title
highlighted: ListView.isCurrentItem
+
+ required property int index
+ required property var model
+ required property string title
+ required property string source
+
onClicked: {
listView.currentIndex = index
- stackView.push(model.source)
- drawer.close()
+ stackView.push(source)
+ if (window.portraitMode)
+ drawer.close()
}
}
- model: ListModel {
- ListElement { title: "BusyIndicator"; source: "qrc:/pages/BusyIndicatorPage.qml" }
- ListElement { title: "Button"; source: "qrc:/pages/ButtonPage.qml" }
- ListElement { title: "CheckBox"; source: "qrc:/pages/CheckBoxPage.qml" }
- ListElement { title: "ComboBox"; source: "qrc:/pages/ComboBoxPage.qml" }
- ListElement { title: "DelayButton"; source: "qrc:/pages/DelayButtonPage.qml" }
- ListElement { title: "Dial"; source: "qrc:/pages/DialPage.qml" }
- ListElement { title: "Dialog"; source: "qrc:/pages/DialogPage.qml" }
- ListElement { title: "Delegates"; source: "qrc:/pages/DelegatePage.qml" }
- ListElement { title: "Frame"; source: "qrc:/pages/FramePage.qml" }
- ListElement { title: "GroupBox"; source: "qrc:/pages/GroupBoxPage.qml" }
- ListElement { title: "PageIndicator"; source: "qrc:/pages/PageIndicatorPage.qml" }
- ListElement { title: "ProgressBar"; source: "qrc:/pages/ProgressBarPage.qml" }
- ListElement { title: "RadioButton"; source: "qrc:/pages/RadioButtonPage.qml" }
- ListElement { title: "RangeSlider"; source: "qrc:/pages/RangeSliderPage.qml" }
- ListElement { title: "ScrollBar"; source: "qrc:/pages/ScrollBarPage.qml" }
- ListElement { title: "ScrollIndicator"; source: "qrc:/pages/ScrollIndicatorPage.qml" }
- ListElement { title: "Slider"; source: "qrc:/pages/SliderPage.qml" }
- ListElement { title: "SpinBox"; source: "qrc:/pages/SpinBoxPage.qml" }
- ListElement { title: "StackView"; source: "qrc:/pages/StackViewPage.qml" }
- ListElement { title: "SwipeView"; source: "qrc:/pages/SwipeViewPage.qml" }
- ListElement { title: "Switch"; source: "qrc:/pages/SwitchPage.qml" }
- ListElement { title: "TabBar"; source: "qrc:/pages/TabBarPage.qml" }
- ListElement { title: "TextArea"; source: "qrc:/pages/TextAreaPage.qml" }
- ListElement { title: "TextField"; source: "qrc:/pages/TextFieldPage.qml" }
- ListElement { title: "ToolTip"; source: "qrc:/pages/ToolTipPage.qml" }
- ListElement { title: "Tumbler"; source: "qrc:/pages/TumblerPage.qml" }
- }
-
ScrollIndicator.vertical: ScrollIndicator { }
}
}
StackView {
id: stackView
+
anchors.fill: parent
+ anchors.leftMargin: !window.portraitMode ? drawer.width : undefined
initialItem: Pane {
id: pane
@@ -187,7 +209,7 @@ ApplicationWindow {
}
Label {
- text: "Qt Quick Controls provides a set of controls that can be used to build complete interfaces in Qt Quick."
+ text: qsTr("Qt Quick Controls provides a set of controls that can be used to build complete interfaces in Qt Quick.")
anchors.margins: 20
anchors.top: logo.bottom
anchors.left: parent.left
@@ -203,6 +225,7 @@ ApplicationWindow {
source: "images/arrow.png"
anchors.left: parent.left
anchors.bottom: parent.bottom
+ visible: window.portraitMode
}
}
}
@@ -214,7 +237,7 @@ ApplicationWindow {
width: Math.round(Math.min(window.width, window.height) / 3 * 2)
modal: true
focus: true
- title: "Settings"
+ title: qsTr("Settings")
standardButtons: Dialog.Ok | Dialog.Cancel
onAccepted: {
@@ -234,7 +257,7 @@ ApplicationWindow {
spacing: 10
Label {
- text: "Style:"
+ text: qsTr("Style:")
}
ComboBox {
@@ -250,8 +273,15 @@ ApplicationWindow {
}
}
+ CheckBox {
+ id: orientationCheckBox
+ text: qsTr("Enable Landscape")
+ checked: false
+ Layout.fillWidth: true
+ }
+
Label {
- text: "Restart required"
+ text: qsTr("Restart required")
color: "#e41e25"
opacity: styleBox.currentIndex !== styleBox.styleIndex ? 1.0 : 0.0
horizontalAlignment: Label.AlignHCenter
@@ -266,7 +296,7 @@ ApplicationWindow {
id: aboutDialog
modal: true
focus: true
- title: "About"
+ title: qsTr("About")
x: (window.width - width) / 2
y: window.height / 6
width: Math.min(window.width, window.height) / 3 * 2
@@ -278,15 +308,15 @@ ApplicationWindow {
Label {
width: aboutDialog.availableWidth
- text: "The Qt Quick Controls module delivers the next generation user interface controls based on Qt Quick."
+ text: qsTr("The Qt Quick Controls module delivers the next generation user interface controls based on Qt Quick.")
wrapMode: Label.Wrap
font.pixelSize: 12
}
Label {
width: aboutDialog.availableWidth
- text: "In comparison to Qt Quick Controls 1, Qt Quick Controls "
- + "are an order of magnitude simpler, lighter, and faster."
+ text: qsTr("In comparison to Qt Quick Controls 1, Qt Quick Controls "
+ + "are an order of magnitude simpler, lighter, and faster.")
wrapMode: Label.Wrap
font.pixelSize: 12
}
diff --git a/examples/quickcontrols/gallery/images/qt-logo.png b/examples/quickcontrols/gallery/images/qt-logo.png
index dff7729515..05684292b8 100644
--- a/examples/quickcontrols/gallery/images/qt-logo.png
+++ b/examples/quickcontrols/gallery/images/qt-logo.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/images/qt-logo@2x.png b/examples/quickcontrols/gallery/images/qt-logo@2x.png
index dbd73aab77..2b7683ca0f 100644
--- a/examples/quickcontrols/gallery/images/qt-logo@2x.png
+++ b/examples/quickcontrols/gallery/images/qt-logo@2x.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/images/qt-logo@3x.png b/examples/quickcontrols/gallery/images/qt-logo@3x.png
index 68e763b597..7cc98348d9 100644
--- a/examples/quickcontrols/gallery/images/qt-logo@3x.png
+++ b/examples/quickcontrols/gallery/images/qt-logo@3x.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/images/qt-logo@4x.png b/examples/quickcontrols/gallery/images/qt-logo@4x.png
index 08fd882572..0e1bc9d93c 100644
--- a/examples/quickcontrols/gallery/images/qt-logo@4x.png
+++ b/examples/quickcontrols/gallery/images/qt-logo@4x.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/pages/BusyIndicatorPage.qml b/examples/quickcontrols/gallery/pages/BusyIndicatorPage.qml
index 616e645688..7cdc4b49f5 100644
--- a/examples/quickcontrols/gallery/pages/BusyIndicatorPage.qml
+++ b/examples/quickcontrols/gallery/pages/BusyIndicatorPage.qml
@@ -1,6 +1,8 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
+
import QtQuick
import QtQuick.Controls
@@ -15,8 +17,8 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "BusyIndicator is used to indicate activity while content is being loaded,"
- + " or when the UI is blocked waiting for a resource to become available."
+ text: qsTr("BusyIndicator is used to indicate activity while content is being loaded,"
+ + " or when the UI is blocked waiting for a resource to become available.")
}
BusyIndicator {
diff --git a/examples/quickcontrols/gallery/pages/ButtonPage.qml b/examples/quickcontrols/gallery/pages/ButtonPage.qml
index 06051767e9..e23bfb8a89 100644
--- a/examples/quickcontrols/gallery/pages/ButtonPage.qml
+++ b/examples/quickcontrols/gallery/pages/ButtonPage.qml
@@ -16,8 +16,8 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "Button presents a push-button that can be pushed or clicked by the user. "
- + "Buttons are normally used to perform an action, or to answer a question."
+ text: qsTr("Button presents a push-button that can be pushed or clicked by the user. "
+ + "Buttons are normally used to perform an action, or to answer a question.")
}
ColumnLayout {
@@ -25,17 +25,17 @@ ScrollablePage {
anchors.horizontalCenter: parent.horizontalCenter
Button {
- text: "First"
+ text: qsTr("First")
Layout.fillWidth: true
}
Button {
id: button
- text: "Second"
+ text: qsTr("Second")
highlighted: true
Layout.fillWidth: true
}
Button {
- text: "Third"
+ text: qsTr("Third")
enabled: false
Layout.fillWidth: true
}
diff --git a/examples/quickcontrols/gallery/pages/CheckBoxPage.qml b/examples/quickcontrols/gallery/pages/CheckBoxPage.qml
index 003e44c82c..474bab37fd 100644
--- a/examples/quickcontrols/gallery/pages/CheckBoxPage.qml
+++ b/examples/quickcontrols/gallery/pages/CheckBoxPage.qml
@@ -15,8 +15,8 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "CheckBox presents an option button that can be toggled on or off. "
- + "Check boxes are typically used to select one or more options from a set of options."
+ text: qsTr("CheckBox presents an option button that can be toggled on or off. "
+ + "Check boxes are typically used to select one or more options from a set of options.")
}
Column {
@@ -24,14 +24,14 @@ ScrollablePage {
anchors.horizontalCenter: parent.horizontalCenter
CheckBox {
- text: "First"
+ text: qsTr("First")
checked: true
}
CheckBox {
- text: "Second"
+ text: qsTr("Second")
}
CheckBox {
- text: "Third"
+ text: qsTr("Third")
checked: true
enabled: false
}
diff --git a/examples/quickcontrols/gallery/pages/ComboBoxPage.qml b/examples/quickcontrols/gallery/pages/ComboBoxPage.qml
index 35c3d60d16..075859717e 100644
--- a/examples/quickcontrols/gallery/pages/ComboBoxPage.qml
+++ b/examples/quickcontrols/gallery/pages/ComboBoxPage.qml
@@ -15,12 +15,12 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "ComboBox is a combined button and popup list. It presents "
- + "a list of options to the user that occupies minimal screen space."
+ text: qsTr("ComboBox is a combined button and popup list. It presents "
+ + "a list of options to the user that occupies minimal screen space.")
}
ComboBox {
- model: ["First", "Second", "Third"]
+ model: [qsTr("First"), qsTr("Second"), qsTr("Third")]
anchors.horizontalCenter: parent.horizontalCenter
}
@@ -28,21 +28,22 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "ComboBox can be made \l editable. An editable combo box auto-"
- + "completes its text based on what is available in the model."
+ text: qsTr("ComboBox can be made editable. An editable combo box auto-"
+ + "completes its text based on what is available in the model.")
}
ComboBox {
+ id: comboBox
+
editable: true
model: ListModel {
- id: model
- ListElement { text: "Banana" }
- ListElement { text: "Apple" }
- ListElement { text: "Coconut" }
+ ListElement { text: qsTr("Banana") }
+ ListElement { text: qsTr("Apple") }
+ ListElement { text: qsTr("Coconut") }
}
onAccepted: {
if (find(editText) === -1)
- model.append({text: editText})
+ comboBox.model.append({text: comboBox.editText})
}
anchors.horizontalCenter: parent.horizontalCenter
}
diff --git a/examples/quickcontrols/gallery/pages/DelayButtonPage.qml b/examples/quickcontrols/gallery/pages/DelayButtonPage.qml
index 4c0e8725b9..7e4470bf34 100644
--- a/examples/quickcontrols/gallery/pages/DelayButtonPage.qml
+++ b/examples/quickcontrols/gallery/pages/DelayButtonPage.qml
@@ -15,12 +15,12 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "DelayButton is a checkable button that incorporates a delay before the "
- + "button is activated. This delay prevents accidental presses."
+ text: qsTr("DelayButton is a checkable button that incorporates a delay before the "
+ + "button is activated. This delay prevents accidental presses.")
}
DelayButton {
- text: "DelayButton"
+ text: qsTr("DelayButton")
anchors.horizontalCenter: parent.horizontalCenter
}
}
diff --git a/examples/quickcontrols/gallery/pages/DelegatePage.qml b/examples/quickcontrols/gallery/pages/DelegatePage.qml
index c57388cc6a..519fffc6d2 100644
--- a/examples/quickcontrols/gallery/pages/DelegatePage.qml
+++ b/examples/quickcontrols/gallery/pages/DelegatePage.qml
@@ -1,94 +1,14 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
+
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
Pane {
- padding: 0
-
- property var delegateComponentMap: {
- "ItemDelegate": itemDelegateComponent,
- "SwipeDelegate": swipeDelegateComponent,
- "CheckDelegate": checkDelegateComponent,
- "RadioDelegate": radioDelegateComponent,
- "SwitchDelegate": switchDelegateComponent
- }
-
- Component {
- id: itemDelegateComponent
-
- ItemDelegate {
- text: labelText
- width: parent.width
- }
- }
-
- Component {
- id: swipeDelegateComponent
-
- SwipeDelegate {
- id: swipeDelegate
- text: labelText
- width: parent.width
-
- Component {
- id: removeComponent
-
- Rectangle {
- color: SwipeDelegate.pressed ? "#333" : "#444"
- width: parent.width
- height: parent.height
- clip: true
-
- SwipeDelegate.onClicked: view.model.remove(ourIndex)
-
- Label {
- font.pixelSize: swipeDelegate.font.pixelSize
- text: "Remove"
- color: "white"
- anchors.centerIn: parent
- }
- }
- }
-
- swipe.left: removeComponent
- swipe.right: removeComponent
- }
- }
-
- Component {
- id: checkDelegateComponent
-
- CheckDelegate {
- text: labelText
- }
- }
-
- ButtonGroup {
- id: radioButtonGroup
- }
-
- Component {
- id: radioDelegateComponent
-
- RadioDelegate {
- text: labelText
- ButtonGroup.group: radioButtonGroup
- }
- }
-
- Component {
- id: switchDelegateComponent
-
- SwitchDelegate {
- text: labelText
- }
- }
-
ColumnLayout {
- id: column
spacing: 40
anchors.fill: parent
anchors.topMargin: 20
@@ -97,76 +17,162 @@ Pane {
Layout.fillWidth: true
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "Delegate controls are used as delegates in views such as ListView."
+ text: qsTr("Delegate controls are used as delegates in views such as ListView.")
+ }
+
+ ButtonGroup {
+ id: radioButtonGroup
}
ListView {
id: listView
- Layout.fillWidth: true
- Layout.fillHeight: true
clip: true
- model: ListModel {
- ListElement { type: "ItemDelegate"; text: "ItemDelegate" }
- ListElement { type: "ItemDelegate"; text: "ItemDelegate" }
- ListElement { type: "ItemDelegate"; text: "ItemDelegate" }
- ListElement { type: "SwipeDelegate"; text: "SwipeDelegate" }
- ListElement { type: "SwipeDelegate"; text: "SwipeDelegate" }
- ListElement { type: "SwipeDelegate"; text: "SwipeDelegate" }
- ListElement { type: "CheckDelegate"; text: "CheckDelegate" }
- ListElement { type: "CheckDelegate"; text: "CheckDelegate" }
- ListElement { type: "CheckDelegate"; text: "CheckDelegate" }
- ListElement { type: "RadioDelegate"; text: "RadioDelegate" }
- ListElement { type: "RadioDelegate"; text: "RadioDelegate" }
- ListElement { type: "RadioDelegate"; text: "RadioDelegate" }
- ListElement { type: "SwitchDelegate"; text: "SwitchDelegate" }
- ListElement { type: "SwitchDelegate"; text: "SwitchDelegate" }
- ListElement { type: "SwitchDelegate"; text: "SwitchDelegate" }
- }
-
section.property: "type"
section.delegate: Pane {
- width: listView.width
+ id: sectionPane
+ required property string section
+ width: ListView.view.width
height: sectionLabel.implicitHeight + 20
-
Label {
id: sectionLabel
- text: section
+ text: sectionPane.section
anchors.centerIn: parent
}
}
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ model: ListModel {
+ ListElement { type: "ItemDelegate"; value: qsTr("ItemDelegate1") }
+ ListElement { type: "ItemDelegate"; value: qsTr("ItemDelegate2") }
+ ListElement { type: "ItemDelegate"; value: qsTr("ItemDelegate3") }
+ ListElement { type: "SwipeDelegate"; value: qsTr("SwipeDelegate1") }
+ ListElement { type: "SwipeDelegate"; value: qsTr("SwipeDelegate2") }
+ ListElement { type: "SwipeDelegate"; value: qsTr("SwipeDelegate3") }
+ ListElement { type: "CheckDelegate"; value: qsTr("CheckDelegate1") }
+ ListElement { type: "CheckDelegate"; value: qsTr("CheckDelegate2") }
+ ListElement { type: "CheckDelegate"; value: qsTr("CheckDelegate3") }
+ ListElement { type: "RadioDelegate"; value: qsTr("RadioDelegate1") }
+ ListElement { type: "RadioDelegate"; value: qsTr("RadioDelegate2") }
+ ListElement { type: "RadioDelegate"; value: qsTr("RadioDelegate3") }
+ ListElement { type: "SwitchDelegate"; value: qsTr("SwitchDelegate1") }
+ ListElement { type: "SwitchDelegate"; value: qsTr("SwitchDelegate2") }
+ ListElement { type: "SwitchDelegate"; value: qsTr("SwitchDelegate3") }
+ }
+
delegate: Loader {
id: delegateLoader
- width: listView.width
- sourceComponent: delegateComponentMap[text]
+ width: ListView.view.width
+ sourceComponent: delegateComponentMap[type]
+
+ required property string value
+ required property string type
+ required property var model
+ required property int index
- property string labelText: text
property ListView view: listView
- property int ourIndex: index
- // Can't find a way to do this in the SwipeDelegate component itself,
- // so do it here instead.
- SequentialAnimation {
- id: removeAnimation
+ readonly property var delegateComponentMap: {
+ "ItemDelegate": itemDelegateComponent,
+ "SwipeDelegate": swipeDelegateComponent,
+ "CheckDelegate": checkDelegateComponent,
+ "RadioDelegate": radioDelegateComponent,
+ "SwitchDelegate": switchDelegateComponent
+ }
+
+ Component {
+ id: itemDelegateComponent
+
+ ItemDelegate {
+ text: delegateLoader.value
+ width: delegateLoader.width
+ }
+ }
+
+ Component {
+ id: swipeDelegateComponent
+
+ SwipeDelegate {
+ id: swipeDelegate
+ text: delegateLoader.value
+ width: delegateLoader.width
+
+ Component {
+ id: removeComponent
+
+ Rectangle {
+ color: SwipeDelegate.pressed ? "#333" : "#444"
+ width: parent.width
+ height: parent.height
+ clip: true
+
+ SwipeDelegate.onClicked: {
+ if (delegateLoader.view !== undefined)
+ delegateLoader.view.model.remove(delegateLoader.index)
+ }
+
+ Label {
+ font.pixelSize: swipeDelegate.font.pixelSize
+ text: qsTr("Remove")
+ color: "white"
+ anchors.centerIn: parent
+ }
+ }
+ }
+
+ SequentialAnimation {
+ id: removeAnimation
+
+ PropertyAction {
+ target: delegateLoader
+ property: "ListView.delayRemove"
+ value: true
+ }
+ NumberAnimation {
+ target: swipeDelegate
+ property: "height"
+ to: 0
+ easing.type: Easing.InOutQuad
+ }
+ PropertyAction {
+ target: delegateLoader
+ property: "ListView.delayRemove"
+ value: false
+ }
+ }
+
+ swipe.left: removeComponent
+ swipe.right: removeComponent
+ ListView.onRemove: removeAnimation.start()
+ }
+ }
- PropertyAction {
- target: delegateLoader
- property: "ListView.delayRemove"
- value: true
+ Component {
+ id: checkDelegateComponent
+
+ CheckDelegate {
+ text: delegateLoader.value
}
- NumberAnimation {
- target: item
- property: "height"
- to: 0
- easing.type: Easing.InOutQuad
+ }
+
+ Component {
+ id: radioDelegateComponent
+
+ RadioDelegate {
+ text: delegateLoader.value
+
+ ButtonGroup.group: radioButtonGroup
}
- PropertyAction {
- target: delegateLoader
- property: "ListView.delayRemove"
- value: false
+ }
+
+ Component {
+ id: switchDelegateComponent
+
+ SwitchDelegate {
+ text: delegateLoader.value
}
}
- ListView.onRemove: removeAnimation.start()
}
}
}
diff --git a/examples/quickcontrols/gallery/pages/DialPage.qml b/examples/quickcontrols/gallery/pages/DialPage.qml
index 17c9e090ba..6de9703689 100644
--- a/examples/quickcontrols/gallery/pages/DialPage.qml
+++ b/examples/quickcontrols/gallery/pages/DialPage.qml
@@ -15,8 +15,8 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "The Dial is similar to a traditional dial knob that is found on devices such as "
- + "stereos or industrial equipment. It allows the user to specify a value within a range."
+ text: qsTr("The Dial is similar to a traditional dial knob that is found on devices such as "
+ + "stereos or industrial equipment. It allows the user to specify a value within a range.")
}
Dial {
diff --git a/examples/quickcontrols/gallery/pages/DialogPage.qml b/examples/quickcontrols/gallery/pages/DialogPage.qml
index 982a7f38d4..d07fa8be54 100644
--- a/examples/quickcontrols/gallery/pages/DialogPage.qml
+++ b/examples/quickcontrols/gallery/pages/DialogPage.qml
@@ -18,14 +18,14 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "Dialog is a popup that is mostly used for short-term tasks "
- + "and brief communications with the user."
+ text: qsTr("Dialog is a popup that is mostly used for short-term tasks "
+ + "and brief communications with the user.")
}
Button {
- text: "Message"
+ text: qsTr("Message")
anchors.horizontalCenter: parent.horizontalCenter
- width: buttonWidth
+ width: page.buttonWidth
onClicked: messageDialog.open()
Dialog {
@@ -34,19 +34,19 @@ ScrollablePage {
x: (parent.width - width) / 2
y: (parent.height - height) / 2
- title: "Message"
+ title: qsTr("Message")
Label {
- text: "Lorem ipsum dolor sit amet..."
+ text: qsTr("Lorem ipsum dolor sit amet...")
}
}
}
Button {
id: button
- text: "Confirmation"
+ text: qsTr("Confirmation")
anchors.horizontalCenter: parent.horizontalCenter
- width: buttonWidth
+ width: page.buttonWidth
onClicked: confirmationDialog.open()
Dialog {
@@ -57,17 +57,17 @@ ScrollablePage {
parent: Overlay.overlay
modal: true
- title: "Confirmation"
+ title: qsTr("Confirmation")
standardButtons: Dialog.Yes | Dialog.No
Column {
spacing: 20
anchors.fill: parent
Label {
- text: "The document has been modified.\nDo you want to save your changes?"
+ text: qsTr("The document has been modified.\nDo you want to save your changes?")
}
CheckBox {
- text: "Do not ask again"
+ text: qsTr("Do not ask again")
anchors.right: parent.right
}
}
@@ -75,9 +75,9 @@ ScrollablePage {
}
Button {
- text: "Content"
+ text: qsTr("Content")
anchors.horizontalCenter: parent.horizontalCenter
- width: buttonWidth
+ width: page.buttonWidth
onClicked: contentDialog.open()
Dialog {
@@ -90,7 +90,7 @@ ScrollablePage {
parent: Overlay.overlay
modal: true
- title: "Content"
+ title: qsTr("Content")
standardButtons: Dialog.Close
Flickable {
@@ -114,13 +114,13 @@ ScrollablePage {
Label {
width: parent.width
- text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc finibus "
+ text: qsTr("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc finibus "
+ "in est quis laoreet. Interdum et malesuada fames ac ante ipsum primis "
+ "in faucibus. Curabitur eget justo sollicitudin enim faucibus bibendum. "
+ "Suspendisse potenti. Vestibulum cursus consequat mauris id sollicitudin. "
+ "Duis facilisis hendrerit consectetur. Curabitur sapien tortor, efficitur "
+ "id auctor nec, efficitur et nisl. Ut venenatis eros in nunc placerat, "
- + "eu aliquam enim suscipit."
+ + "eu aliquam enim suscipit.")
wrapMode: Label.Wrap
}
}
@@ -137,9 +137,9 @@ ScrollablePage {
}
Button {
- text: "Input"
+ text: qsTr("Input")
anchors.horizontalCenter: parent.horizontalCenter
- width: buttonWidth
+ width: page.buttonWidth
onClicked: inputDialog.open()
Dialog {
@@ -151,7 +151,7 @@ ScrollablePage {
focus: true
modal: true
- title: "Input"
+ title: qsTr("Input")
standardButtons: Dialog.Ok | Dialog.Cancel
ColumnLayout {
@@ -159,16 +159,16 @@ ScrollablePage {
anchors.fill: parent
Label {
elide: Label.ElideRight
- text: "Please enter the credentials:"
+ text: qsTr("Please enter the credentials:")
Layout.fillWidth: true
}
TextField {
focus: true
- placeholderText: "Username"
+ placeholderText: qsTr("Username")
Layout.fillWidth: true
}
TextField {
- placeholderText: "Password"
+ placeholderText: qsTr("Password")
echoMode: TextField.PasswordEchoOnEdit
Layout.fillWidth: true
}
diff --git a/examples/quickcontrols/gallery/pages/FramePage.qml b/examples/quickcontrols/gallery/pages/FramePage.qml
index 8526442537..b32d8af00c 100644
--- a/examples/quickcontrols/gallery/pages/FramePage.qml
+++ b/examples/quickcontrols/gallery/pages/FramePage.qml
@@ -17,7 +17,7 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "Frame is used to layout a logical group of controls together, within a visual frame."
+ text: qsTr("Frame is used to layout a logical group of controls together, within a visual frame.")
}
Frame {
@@ -28,17 +28,17 @@ ScrollablePage {
width: page.itemWidth
RadioButton {
- text: "First"
+ text: qsTr("First")
checked: true
width: parent.width
}
RadioButton {
id: button
- text: "Second"
+ text: qsTr("Second")
width: parent.width
}
RadioButton {
- text: "Third"
+ text: qsTr("Third")
width: parent.width
}
}
diff --git a/examples/quickcontrols/gallery/pages/GroupBoxPage.qml b/examples/quickcontrols/gallery/pages/GroupBoxPage.qml
index 9e24d8e6ca..a30adf8a8f 100644
--- a/examples/quickcontrols/gallery/pages/GroupBoxPage.qml
+++ b/examples/quickcontrols/gallery/pages/GroupBoxPage.qml
@@ -17,11 +17,11 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "A GroupBox provides a frame, a title on top of it, and a logical group of controls within that frame."
+ text: qsTr("A GroupBox provides a frame, a title on top of it, and a logical group of controls within that frame.")
}
GroupBox {
- title: "Title"
+ title: qsTr("Title")
anchors.horizontalCenter: parent.horizontalCenter
Column {
@@ -29,17 +29,17 @@ ScrollablePage {
width: page.itemWidth
RadioButton {
- text: "First"
+ text: qsTr("First")
checked: true
width: parent.width
}
RadioButton {
id: button
- text: "Second"
+ text: qsTr("Second")
width: parent.width
}
RadioButton {
- text: "Third"
+ text: qsTr("Third")
width: parent.width
}
}
diff --git a/examples/quickcontrols/gallery/pages/PageIndicatorPage.qml b/examples/quickcontrols/gallery/pages/PageIndicatorPage.qml
index e83c86563e..13620c1217 100644
--- a/examples/quickcontrols/gallery/pages/PageIndicatorPage.qml
+++ b/examples/quickcontrols/gallery/pages/PageIndicatorPage.qml
@@ -15,7 +15,7 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "PageIndicator is used to indicate the currently active page in a container of pages."
+ text: qsTr("PageIndicator is used to indicate the currently active page in a container of pages.")
}
PageIndicator {
diff --git a/examples/quickcontrols/gallery/pages/ProgressBarPage.qml b/examples/quickcontrols/gallery/pages/ProgressBarPage.qml
index d712aae10c..2a3f7158e1 100644
--- a/examples/quickcontrols/gallery/pages/ProgressBarPage.qml
+++ b/examples/quickcontrols/gallery/pages/ProgressBarPage.qml
@@ -15,8 +15,8 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "ProgressBar indicates the progress of an operation. It can be set in an "
- + "indeterminate mode to indicate that the length of the operation is unknown."
+ text: qsTr("ProgressBar indicates the progress of an operation. It can be set in an "
+ + "indeterminate mode to indicate that the length of the operation is unknown.")
}
ProgressBar {
diff --git a/examples/quickcontrols/gallery/pages/RadioButtonPage.qml b/examples/quickcontrols/gallery/pages/RadioButtonPage.qml
index 644543c007..6939d47dba 100644
--- a/examples/quickcontrols/gallery/pages/RadioButtonPage.qml
+++ b/examples/quickcontrols/gallery/pages/RadioButtonPage.qml
@@ -15,8 +15,8 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "RadioButton presents an option button that can be toggled on or off. "
- + "Radio buttons are typically used to select one option from a set of options."
+ text: qsTr("RadioButton presents an option button that can be toggled on or off. "
+ + "Radio buttons are typically used to select one option from a set of options.")
}
Column {
@@ -24,14 +24,14 @@ ScrollablePage {
anchors.horizontalCenter: parent.horizontalCenter
RadioButton {
- text: "First"
+ text: qsTr("First")
}
RadioButton {
- text: "Second"
+ text: qsTr("Second")
checked: true
}
RadioButton {
- text: "Third"
+ text: qsTr("Third")
enabled: false
}
}
diff --git a/examples/quickcontrols/gallery/pages/RangeSliderPage.qml b/examples/quickcontrols/gallery/pages/RangeSliderPage.qml
index 0ca235822f..03b78040a0 100644
--- a/examples/quickcontrols/gallery/pages/RangeSliderPage.qml
+++ b/examples/quickcontrols/gallery/pages/RangeSliderPage.qml
@@ -15,7 +15,7 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "RangeSlider is used to select a range specified by two values, by sliding each handle along a track."
+ text: qsTr("RangeSlider is used to select a range specified by two values, by sliding each handle along a track.")
}
RangeSlider {
diff --git a/examples/quickcontrols/gallery/pages/ScrollBarPage.qml b/examples/quickcontrols/gallery/pages/ScrollBarPage.qml
index 248e74ca7f..cb23c7e580 100644
--- a/examples/quickcontrols/gallery/pages/ScrollBarPage.qml
+++ b/examples/quickcontrols/gallery/pages/ScrollBarPage.qml
@@ -23,9 +23,9 @@ Flickable {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "ScrollBar is an interactive bar that can be used to scroll to a specific position. "
+ text: qsTr("ScrollBar is an interactive bar that can be used to scroll to a specific position. "
+ "A scroll bar can be either vertical or horizontal, and can be attached to any Flickable, "
- + "such as ListView and GridView."
+ + "such as ListView and GridView.")
}
Image {
diff --git a/examples/quickcontrols/gallery/pages/ScrollIndicatorPage.qml b/examples/quickcontrols/gallery/pages/ScrollIndicatorPage.qml
index 04ce97483a..5e9c7f5240 100644
--- a/examples/quickcontrols/gallery/pages/ScrollIndicatorPage.qml
+++ b/examples/quickcontrols/gallery/pages/ScrollIndicatorPage.qml
@@ -23,9 +23,9 @@ Flickable {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "ScrollIndicator is a non-interactive indicator that indicates the current scroll position. "
+ text: qsTr("ScrollIndicator is a non-interactive indicator that indicates the current scroll position. "
+ "A scroll indicator can be either vertical or horizontal, and can be attached to any Flickable, "
- + "such as ListView and GridView."
+ + "such as ListView and GridView.")
}
Image {
diff --git a/examples/quickcontrols/gallery/pages/SliderPage.qml b/examples/quickcontrols/gallery/pages/SliderPage.qml
index fd03680a0e..bdcfed9fad 100644
--- a/examples/quickcontrols/gallery/pages/SliderPage.qml
+++ b/examples/quickcontrols/gallery/pages/SliderPage.qml
@@ -15,7 +15,7 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "Slider is used to select a value by sliding a handle along a track."
+ text: qsTr("Slider is used to select a value by sliding a handle along a track.")
}
Slider {
diff --git a/examples/quickcontrols/gallery/pages/SpinBoxPage.qml b/examples/quickcontrols/gallery/pages/SpinBoxPage.qml
index 18c9b06c1f..538a7ef209 100644
--- a/examples/quickcontrols/gallery/pages/SpinBoxPage.qml
+++ b/examples/quickcontrols/gallery/pages/SpinBoxPage.qml
@@ -15,8 +15,8 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "SpinBox allows the user to choose an integer value by clicking the up or down indicator buttons, "
- + "by pressing up or down on the keyboard, or by entering a text value in the input field."
+ text: qsTr("SpinBox allows the user to choose an integer value by clicking the up or down indicator buttons, "
+ + "by pressing up or down on the keyboard, or by entering a text value in the input field.")
}
SpinBox {
diff --git a/examples/quickcontrols/gallery/pages/StackViewPage.qml b/examples/quickcontrols/gallery/pages/StackViewPage.qml
index 4472150e56..3df1dd114e 100644
--- a/examples/quickcontrols/gallery/pages/StackViewPage.qml
+++ b/examples/quickcontrols/gallery/pages/StackViewPage.qml
@@ -1,6 +1,8 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
+
import QtQuick
import QtQuick.Controls
@@ -23,26 +25,33 @@ StackView {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "StackView provides a stack-based navigation model which can be used with a set of interlinked pages. "
+ text: qsTr("StackView provides a stack-based navigation model which can be used with a set of interlinked pages. "
+ "Items are pushed onto the stack as the user navigates deeper into the material, and popped off again "
- + "when he chooses to go back."
+ + "when he chooses to go back.")
}
Button {
id: button
- text: "Push"
+ text: qsTr("Push")
anchors.horizontalCenter: parent.horizontalCenter
width: Math.max(button.implicitWidth, Math.min(button.implicitWidth * 2, pane.availableWidth / 3))
onClicked: stackView.push(page)
}
Button {
- text: "Pop"
+ text: qsTr("Pop")
enabled: stackView.depth > 1
width: Math.max(button.implicitWidth, Math.min(button.implicitWidth * 2, pane.availableWidth / 3))
anchors.horizontalCenter: parent.horizontalCenter
onClicked: stackView.pop()
}
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("Stack Depth:") + " " + stackView.depth
+ }
}
}
}
diff --git a/examples/quickcontrols/gallery/pages/SwipeViewPage.qml b/examples/quickcontrols/gallery/pages/SwipeViewPage.qml
index f982f4cf26..ebb2031ff3 100644
--- a/examples/quickcontrols/gallery/pages/SwipeViewPage.qml
+++ b/examples/quickcontrols/gallery/pages/SwipeViewPage.qml
@@ -16,8 +16,8 @@ Pane {
model: 3
Pane {
- width: view.width
- height: view.height
+ width: SwipeView.view.width
+ height: SwipeView.view.height
Column {
spacing: 40
@@ -27,8 +27,8 @@ Pane {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "SwipeView provides a navigation model that simplifies horizontal paged scrolling. "
- + "The page indicator on the bottom shows which is the presently active page."
+ text: qsTr("SwipeView provides a navigation model that simplifies horizontal paged scrolling. "
+ + "The page indicator on the bottom shows which is the presently active page.")
}
Image {
diff --git a/examples/quickcontrols/gallery/pages/SwitchPage.qml b/examples/quickcontrols/gallery/pages/SwitchPage.qml
index cca200582e..dbda7da0a2 100644
--- a/examples/quickcontrols/gallery/pages/SwitchPage.qml
+++ b/examples/quickcontrols/gallery/pages/SwitchPage.qml
@@ -15,8 +15,8 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "Switch is an option button that can be dragged or toggled on or off. "
- + "Switches are typically used to select between two states."
+ text: qsTr("Switch is an option button that can be dragged or toggled on or off. "
+ + "Switches are typically used to select between two states.")
}
Column {
@@ -24,14 +24,14 @@ ScrollablePage {
anchors.horizontalCenter: parent.horizontalCenter
Switch {
- text: "First"
+ text: qsTr("First")
}
Switch {
- text: "Second"
+ text: qsTr("Second")
checked: true
}
Switch {
- text: "Third"
+ text: qsTr("Third")
enabled: false
}
}
diff --git a/examples/quickcontrols/gallery/pages/TabBarPage.qml b/examples/quickcontrols/gallery/pages/TabBarPage.qml
index c03e4a014c..b2ce35586f 100644
--- a/examples/quickcontrols/gallery/pages/TabBarPage.qml
+++ b/examples/quickcontrols/gallery/pages/TabBarPage.qml
@@ -16,8 +16,8 @@ Page {
model: 3
Pane {
- width: swipeView.width
- height: swipeView.height
+ width: SwipeView.view.width
+ height: SwipeView.view.height
Column {
spacing: 40
@@ -27,8 +27,8 @@ Page {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "TabBar is a bar with icons or text which allows the user "
- + "to switch between different subtasks, views, or modes."
+ text: qsTr("TabBar is a bar with icons or text which allows the user "
+ + "to switch between different subtasks, views, or modes.")
}
Image {
@@ -45,13 +45,13 @@ Page {
currentIndex: swipeView.currentIndex
TabButton {
- text: "First"
+ text: qsTr("First")
}
TabButton {
- text: "Second"
+ text: qsTr("Second")
}
TabButton {
- text: "Third"
+ text: qsTr("Third")
}
}
}
diff --git a/examples/quickcontrols/gallery/pages/TextAreaPage.qml b/examples/quickcontrols/gallery/pages/TextAreaPage.qml
index 6a09846973..1cc7d7c194 100644
--- a/examples/quickcontrols/gallery/pages/TextAreaPage.qml
+++ b/examples/quickcontrols/gallery/pages/TextAreaPage.qml
@@ -15,15 +15,15 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "TextArea is a multi-line text editor."
+ text: qsTr("TextArea is a multi-line text editor.")
}
TextArea {
- width: pane.availableWidth / 3
+ width: page.availableWidth / 3
anchors.horizontalCenter: parent.horizontalCenter
wrapMode: TextArea.Wrap
- text: "TextArea\n...\n...\n..."
+ text: qsTr("TextArea\n...\n...\n...")
}
}
}
diff --git a/examples/quickcontrols/gallery/pages/TextFieldPage.qml b/examples/quickcontrols/gallery/pages/TextFieldPage.qml
index 2b06894c8f..fd4c6894ac 100644
--- a/examples/quickcontrols/gallery/pages/TextFieldPage.qml
+++ b/examples/quickcontrols/gallery/pages/TextFieldPage.qml
@@ -15,12 +15,12 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "TextField is a single-line text editor."
+ text: qsTr("TextField is a single-line text editor.")
}
TextField {
id: field
- placeholderText: "TextField"
+ placeholderText: qsTr("TextField")
anchors.horizontalCenter: parent.horizontalCenter
}
}
diff --git a/examples/quickcontrols/gallery/pages/ToolTipPage.qml b/examples/quickcontrols/gallery/pages/ToolTipPage.qml
index dd92c89b4f..9a6cfc5729 100644
--- a/examples/quickcontrols/gallery/pages/ToolTipPage.qml
+++ b/examples/quickcontrols/gallery/pages/ToolTipPage.qml
@@ -15,16 +15,16 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "A tool tip is a short piece of text that informs the user of a control's function."
+ text: qsTr("A tool tip is a short piece of text that informs the user of a control's function.")
}
Button {
- text: "Tip"
+ text: qsTr("Tip")
anchors.horizontalCenter: parent.horizontalCenter
ToolTip.timeout: 5000
ToolTip.visible: pressed
- ToolTip.text: "This is a tool tip."
+ ToolTip.text: qsTr("This is a tool tip.")
}
}
}
diff --git a/examples/quickcontrols/gallery/pages/TumblerPage.qml b/examples/quickcontrols/gallery/pages/TumblerPage.qml
index 4d01f02e89..c8119bb76c 100644
--- a/examples/quickcontrols/gallery/pages/TumblerPage.qml
+++ b/examples/quickcontrols/gallery/pages/TumblerPage.qml
@@ -15,7 +15,7 @@ ScrollablePage {
width: parent.width
wrapMode: Label.Wrap
horizontalAlignment: Qt.AlignHCenter
- text: "Tumbler is used to select a value by spinning a wheel."
+ text: qsTr("Tumbler is used to select a value by spinning a wheel.")
}
Tumbler {
diff --git a/examples/quickcontrols/imagine/automotive/CMakeLists.txt b/examples/quickcontrols/imagine/automotive/CMakeLists.txt
index 94e79a10a8..161d4b92b6 100644
--- a/examples/quickcontrols/imagine/automotive/CMakeLists.txt
+++ b/examples/quickcontrols/imagine/automotive/CMakeLists.txt
@@ -1,17 +1,11 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(automotive LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/imagine/automotive")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2)
qt_add_executable(automotiveexample WIN32 MACOSX_BUNDLE
@@ -132,14 +126,23 @@ qt_add_qml_module(automotiveexample
)
target_link_libraries(automotiveexample PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::QuickControls2
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickControls2
)
install(TARGETS automotiveexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET automotiveexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/imagine/automotive/doc/src/qtquickcontrols-automotive.qdoc b/examples/quickcontrols/imagine/automotive/doc/src/qtquickcontrols-automotive.qdoc
index 81503200f3..8ac7c9c5bd 100644
--- a/examples/quickcontrols/imagine/automotive/doc/src/qtquickcontrols-automotive.qdoc
+++ b/examples/quickcontrols/imagine/automotive/doc/src/qtquickcontrols-automotive.qdoc
@@ -7,6 +7,7 @@
\title Qt Quick Controls - Imagine Style Example: Automotive
\keyword Qt Quick Controls 2 - Imagine Style Example: Automotive
\ingroup qtquickcontrols-examples
+ \examplecategory {Graphics}
\brief An automotive user interface using custom Imagine style assets.
This example demonstrates how custom Imagine style assets can be used to
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered.png b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered.png
index 26add20cfc..1f96090fcf 100644
--- a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered.png
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered@2x.png
index 01d8136d51..58b7516310 100644
--- a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered@2x.png
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-pressed.png b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-pressed.png
index 435acd1466..9d08faa0af 100644
--- a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-pressed.png
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-pressed.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-pressed@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-pressed@2x.png
index 9bab57904d..7e2c17236d 100644
--- a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-pressed@2x.png
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-pressed@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background.png b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background.png
index 8aab4d3280..384de617a2 100644
--- a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background.png
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background@2x.png
index a856971185..7874f03888 100644
--- a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background@2x.png
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/qml/automotive.qml b/examples/quickcontrols/imagine/automotive/qml/automotive.qml
index 5f7868e760..9ed2f5996d 100644
--- a/examples/quickcontrols/imagine/automotive/qml/automotive.qml
+++ b/examples/quickcontrols/imagine/automotive/qml/automotive.qml
@@ -113,7 +113,7 @@ ApplicationWindow {
Item {}
ColumnLayout {
- spacing: 16
+ spacing: 12
ButtonGroup {
id: viewButtonGroup
@@ -129,6 +129,7 @@ ApplicationWindow {
Button {
text: qsTr("Compact")
font.pixelSize: fontSizeExtraSmall
+ checkable: true
checked: true
Layout.fillWidth: true
@@ -156,13 +157,8 @@ ApplicationWindow {
stepSize: 1
Layout.alignment: Qt.AlignHCenter
- Layout.minimumWidth: 64
- Layout.minimumHeight: 64
Layout.preferredWidth: 128
Layout.preferredHeight: 128
- Layout.maximumWidth: 128
- Layout.maximumHeight: 128
- Layout.fillHeight: true
Label {
text: volumeDial.value.toFixed(0)
@@ -177,7 +173,7 @@ ApplicationWindow {
}
RowLayout {
- Layout.topMargin: 16
+ Layout.topMargin: 8
LargeLabel {
id: radioOption
@@ -235,18 +231,18 @@ ApplicationWindow {
}
model: ListModel {
- ListElement { name: "V-Radio"; frequency: "105.5 MHz" }
- ListElement { name: "World News"; frequency: "93.4 MHz" }
- ListElement { name: "TekStep FM"; frequency: "95.0 MHz" }
- ListElement { name: "Classic Radio"; frequency: "89.9 MHz" }
- ListElement { name: "Buena Vista FM"; frequency: "100.8 MHz" }
- ListElement { name: "Drive-by Radio"; frequency: "99.1 MHz" }
- ListElement { name: "Unknown #1"; frequency: "104.5 MHz" }
- ListElement { name: "Unknown #2"; frequency: "91.2 MHz" }
- ListElement { name: "Unknown #3"; frequency: "93.8 MHz" }
- ListElement { name: "Unknown #4"; frequency: "80.4 MHz" }
- ListElement { name: "Unknown #5"; frequency: "101.1 MHz" }
- ListElement { name: "Unknown #6"; frequency: "92.2 MHz" }
+ ListElement { name: "V-Radio"; frequency: "105.5" }
+ ListElement { name: "World News"; frequency: "93.4" }
+ ListElement { name: "TekStep FM"; frequency: "95.0" }
+ ListElement { name: "Classic Radio"; frequency: "89.9" }
+ ListElement { name: "Buena Vista FM"; frequency: "100.8" }
+ ListElement { name: "Drive-by Radio"; frequency: "99.1" }
+ ListElement { name: "Unknown #1"; frequency: "104.5" }
+ ListElement { name: "Unknown #2"; frequency: "91.2" }
+ ListElement { name: "Unknown #3"; frequency: "93.8" }
+ ListElement { name: "Unknown #4"; frequency: "80.4" }
+ ListElement { name: "Unknown #5"; frequency: "101.1" }
+ ListElement { name: "Unknown #6"; frequency: "92.2" }
}
delegate: ItemDelegate {
id: stationDelegate
@@ -262,12 +258,16 @@ ApplicationWindow {
text: model.name
font: stationDelegate.font
horizontalAlignment: Text.AlignLeft
+ elide: Text.ElideRight
+
Layout.fillWidth: true
}
Label {
text: model.frequency
font: stationDelegate.font
horizontalAlignment: Text.AlignRight
+ elide: Text.ElideRight
+
Layout.fillWidth: true
}
}
@@ -277,30 +277,32 @@ ApplicationWindow {
Frame {
Layout.fillWidth: true
+ Layout.fillHeight: false
- RowLayout {
+ ColumnLayout {
anchors.fill: parent
Label {
text: qsTr("Sort by")
font.pixelSize: fontSizeExtraSmall
-
- Layout.alignment: Qt.AlignTop
}
ColumnLayout {
RadioButton {
text: qsTr("Name")
font.pixelSize: fontSizeExtraSmall
+ Layout.fillWidth: false
}
RadioButton {
text: qsTr("Frequency")
font.pixelSize: fontSizeExtraSmall
+ Layout.fillWidth: false
}
RadioButton {
text: qsTr("Favourites")
font.pixelSize: fontSizeExtraSmall
checked: true
+ Layout.fillWidth: false
}
}
}
@@ -535,6 +537,7 @@ ApplicationWindow {
currentIndex: 1
Layout.fillHeight: true
+ Layout.fillWidth: false
ButtonGroup {
buttons: rightTabBarContentLayout.children
@@ -559,6 +562,7 @@ ApplicationWindow {
Layout.maximumHeight: navigationFeatureButton.height
Layout.fillHeight: true
+ Layout.fillWidth: false
}
FeatureButton {
text: qsTr("Air Con.")
@@ -567,6 +571,7 @@ ApplicationWindow {
Layout.maximumHeight: navigationFeatureButton.height
Layout.fillHeight: true
+ Layout.fillWidth: false
}
FeatureButton {
text: qsTr("Seats")
@@ -574,6 +579,7 @@ ApplicationWindow {
Layout.maximumHeight: navigationFeatureButton.height
Layout.fillHeight: true
+ Layout.fillWidth: false
}
FeatureButton {
text: qsTr("Statistics")
@@ -581,6 +587,7 @@ ApplicationWindow {
Layout.maximumHeight: navigationFeatureButton.height
Layout.fillHeight: true
+ Layout.fillWidth: false
}
}
}
diff --git a/examples/quickcontrols/imagine/automotive/qtquickcontrols2.conf b/examples/quickcontrols/imagine/automotive/qtquickcontrols2.conf
index c7fc7a6169..94601428d0 100644
--- a/examples/quickcontrols/imagine/automotive/qtquickcontrols2.conf
+++ b/examples/quickcontrols/imagine/automotive/qtquickcontrols2.conf
@@ -3,8 +3,6 @@ Style=Imagine
[Imagine]
Path=:/imagine-assets
-
-[Imagine\Palette]
-Text=#6affcd
-ButtonText=#6affcd
-WindowText=#6affcd
+Palette\Text=#6affcd
+Palette\ButtonText=#6affcd
+Palette\WindowText=#6affcd
diff --git a/examples/quickcontrols/imagine/musicplayer/CMakeLists.txt b/examples/quickcontrols/imagine/musicplayer/CMakeLists.txt
deleted file mode 100644
index cc3d5b27b0..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/CMakeLists.txt
+++ /dev/null
@@ -1,187 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(musicplayer LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/imagine/musicplayer")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2)
-
-qt_add_executable(musicplayerexample WIN32 MACOSX_BUNDLE
- musicplayer.cpp
-)
-
-qt_add_qml_module(musicplayerexample
- URI musicplayer
- NO_RESOURCE_TARGET_PATH
- QML_FILES
- "musicplayer.qml"
- RESOURCES
- "icons/musicplayer/32x32/bluetooth.png"
- "icons/musicplayer/32x32/cart.png"
- "icons/musicplayer/32x32/cloud.png"
- "icons/musicplayer/32x32/favorite.png"
- "icons/musicplayer/32x32/filter.png"
- "icons/musicplayer/32x32/folder.png"
- "icons/musicplayer/32x32/message.png"
- "icons/musicplayer/32x32/music.png"
- "icons/musicplayer/32x32/next.png"
- "icons/musicplayer/32x32/pause.png"
- "icons/musicplayer/32x32/power.png"
- "icons/musicplayer/32x32/previous.png"
- "icons/musicplayer/32x32/repeat.png"
- "icons/musicplayer/32x32/save.png"
- "icons/musicplayer/32x32/settings.png"
- "icons/musicplayer/32x32/shuffle.png"
- "icons/musicplayer/32x32/stop.png"
- "icons/musicplayer/32x32@2/bluetooth.png"
- "icons/musicplayer/32x32@2/cart.png"
- "icons/musicplayer/32x32@2/cloud.png"
- "icons/musicplayer/32x32@2/favorite.png"
- "icons/musicplayer/32x32@2/filter.png"
- "icons/musicplayer/32x32@2/folder.png"
- "icons/musicplayer/32x32@2/grid.png"
- "icons/musicplayer/32x32@2/message.png"
- "icons/musicplayer/32x32@2/music.png"
- "icons/musicplayer/32x32@2/next.png"
- "icons/musicplayer/32x32@2/pause.png"
- "icons/musicplayer/32x32@2/power.png"
- "icons/musicplayer/32x32@2/previous.png"
- "icons/musicplayer/32x32@2/repeat.png"
- "icons/musicplayer/32x32@2/save.png"
- "icons/musicplayer/32x32@2/settings.png"
- "icons/musicplayer/32x32@2/shuffle.png"
- "icons/musicplayer/32x32@2/stop.png"
- "icons/musicplayer/index.theme"
- "images/album-cover.jpg"
- "imagine-assets/applicationwindow-background.png"
- "imagine-assets/button-background-checked-hovered.9.png"
- "imagine-assets/button-background-checked-hovered@2x.9.png"
- "imagine-assets/button-background-checked.9.png"
- "imagine-assets/button-background-checked@2x.9.png"
- "imagine-assets/button-background-disabled.9.png"
- "imagine-assets/button-background-disabled@2x.9.png"
- "imagine-assets/button-background-hovered.9.png"
- "imagine-assets/button-background-hovered@2x.9.png"
- "imagine-assets/button-background-pressed.9.png"
- "imagine-assets/button-background-pressed@2x.9.png"
- "imagine-assets/button-background.9.png"
- "imagine-assets/button-background@2x.9.png"
- "imagine-assets/combobox-background-hovered.9.png"
- "imagine-assets/combobox-background-hovered@2x.9.png"
- "imagine-assets/combobox-background-open.9.png"
- "imagine-assets/combobox-background-open@2x.9.png"
- "imagine-assets/combobox-background-pressed.9.png"
- "imagine-assets/combobox-background-pressed@2x.9.png"
- "imagine-assets/combobox-background.9.png"
- "imagine-assets/combobox-background@2x.9.png"
- "imagine-assets/combobox-indicator-hovered.png"
- "imagine-assets/combobox-indicator-hovered@2x.png"
- "imagine-assets/combobox-indicator-open.png"
- "imagine-assets/combobox-indicator-open@2x.png"
- "imagine-assets/combobox-indicator-pressed.png"
- "imagine-assets/combobox-indicator-pressed@2x.png"
- "imagine-assets/combobox-indicator.png"
- "imagine-assets/combobox-indicator@2x.png"
- "imagine-assets/combobox-popup.9.png"
- "imagine-assets/combobox-popup@2x.9.png"
- "imagine-assets/dial-background-hovered.png"
- "imagine-assets/dial-background-hovered@2x.png"
- "imagine-assets/dial-background-pressed.png"
- "imagine-assets/dial-background-pressed@2x.png"
- "imagine-assets/dial-background.png"
- "imagine-assets/dial-background@2x.png"
- "imagine-assets/dial-handle-pressed.png"
- "imagine-assets/dial-handle-pressed@2x.png"
- "imagine-assets/dial-handle.png"
- "imagine-assets/dial-handle@2x.png"
- "imagine-assets/frame-background.9.png"
- "imagine-assets/frame-background@2x.9.png"
- "imagine-assets/itemdelegate-background-checked.9.png"
- "imagine-assets/itemdelegate-background-checked@2x.9.png"
- "imagine-assets/itemdelegate-background-disabled.9.png"
- "imagine-assets/itemdelegate-background-disabled@2x.9.png"
- "imagine-assets/itemdelegate-background-hovered.9.png"
- "imagine-assets/itemdelegate-background-hovered@2x.9.png"
- "imagine-assets/itemdelegate-background-pressed.9.png"
- "imagine-assets/itemdelegate-background-pressed@2x.9.png"
- "imagine-assets/itemdelegate-background.9.png"
- "imagine-assets/itemdelegate-background@2x.9.png"
- "imagine-assets/roundbutton-background-checked-hovered.png"
- "imagine-assets/roundbutton-background-checked-hovered@2x.png"
- "imagine-assets/roundbutton-background-checked.png"
- "imagine-assets/roundbutton-background-checked@2x.png"
- "imagine-assets/roundbutton-background-disabled.png"
- "imagine-assets/roundbutton-background-disabled@2x.png"
- "imagine-assets/roundbutton-background-hovered.png"
- "imagine-assets/roundbutton-background-hovered@2x.png"
- "imagine-assets/roundbutton-background-pressed.png"
- "imagine-assets/roundbutton-background-pressed@2x.png"
- "imagine-assets/roundbutton-background.png"
- "imagine-assets/roundbutton-background@2x.png"
- "imagine-assets/scrollbar-handle-interactive-hovered.png"
- "imagine-assets/scrollbar-handle-interactive-hovered@2x.png"
- "imagine-assets/scrollbar-handle-interactive-pressed.png"
- "imagine-assets/scrollbar-handle-interactive-pressed@2x.png"
- "imagine-assets/scrollbar-handle-interactive.png"
- "imagine-assets/scrollbar-handle-interactive@2x.png"
- "imagine-assets/slider-background-horizontal-disabled.9.png"
- "imagine-assets/slider-background-horizontal-disabled@2x.9.png"
- "imagine-assets/slider-background-horizontal.9.png"
- "imagine-assets/slider-background-horizontal@2x.9.png"
- "imagine-assets/slider-background-vertical-disabled.9.png"
- "imagine-assets/slider-background-vertical-disabled@2x.9.png"
- "imagine-assets/slider-background-vertical.9.png"
- "imagine-assets/slider-background-vertical@2x.9.png"
- "imagine-assets/slider-handle-disabled.png"
- "imagine-assets/slider-handle-disabled@2x.png"
- "imagine-assets/slider-handle-hovered.png"
- "imagine-assets/slider-handle-hovered@2x.png"
- "imagine-assets/slider-handle.png"
- "imagine-assets/slider-handle@2x.png"
- "imagine-assets/slider-progress-horizontal.9.png"
- "imagine-assets/slider-progress-horizontal@2x.9.png"
- "imagine-assets/slider-progress-vertical-disabled.9.png"
- "imagine-assets/slider-progress-vertical-disabled@2x.9.png"
- "imagine-assets/slider-progress-vertical.9.png"
- "imagine-assets/slider-progress-vertical@2x.9.png"
- "imagine-assets/textfield-background-disabled.9.png"
- "imagine-assets/textfield-background-disabled@2x.9.png"
- "imagine-assets/textfield-background.9.png"
- "imagine-assets/textfield-background@2x.9.png"
- "imagine-assets/toolbar-background.9.png"
- "imagine-assets/toolbar-background@2x.9.png"
- "imagine-assets/toolbutton-background-checked-hovered.9.png"
- "imagine-assets/toolbutton-background-checked-hovered@2x.9.png"
- "imagine-assets/toolbutton-background-checked.9.png"
- "imagine-assets/toolbutton-background-checked@2x.9.png"
- "imagine-assets/toolbutton-background-hovered.9.png"
- "imagine-assets/toolbutton-background-hovered@2x.9.png"
- "imagine-assets/toolbutton-background-pressed.9.png"
- "imagine-assets/toolbutton-background-pressed@2x.9.png"
- "imagine-assets/toolbutton-background.9.png"
- "imagine-assets/toolbutton-background@2x.9.png"
- "imagine-assets/tooltip-background.9.png"
- "imagine-assets/tooltip-background@2x.9.png"
- "qtquickcontrols2.conf"
-)
-
-target_link_libraries(musicplayerexample PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::QuickControls2
-)
-
-install(TARGETS musicplayerexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/quickcontrols/imagine/musicplayer/doc/images/qtquickcontrols-musicplayer.png b/examples/quickcontrols/imagine/musicplayer/doc/images/qtquickcontrols-musicplayer.png
deleted file mode 100644
index 25b6344f3e..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/doc/images/qtquickcontrols-musicplayer.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/doc/src/qtquickcontrols-musicplayer.qdoc b/examples/quickcontrols/imagine/musicplayer/doc/src/qtquickcontrols-musicplayer.qdoc
deleted file mode 100644
index fa36097225..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/doc/src/qtquickcontrols-musicplayer.qdoc
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example imagine/musicplayer
- \keyword Qt Quick Controls - Imagine Style Example: Music Player
- \title Qt Quick Controls - Imagine Style Example: Music Player
- \keyword Qt Quick Controls 2 - Imagine Style Example: Music Player
- \ingroup qtquickcontrols-examples
- \brief An audio player user interface using custom Imagine style assets.
-
- This example demonstrates how custom Imagine style assets
- can be used to style a user interface for an audio player application.
-
- \image qtquickcontrols-musicplayer.png
-
- \omit
- The assets are generated from a Photoshop file: \e musicplayer.psd.
- This file can found in the \e design folder in the example directory.
- All objects related to a particular asset are collected in a layer group.
- For example, the assets for Button's background element are under a layer group with the following name:
-
- \badcode
- 100% button-background.9.png, 200% button-background@2x.9.png, 300% button-background@3x.9.png, 400% button-background@4x.9.png
- \endcode
-
- Using Photoshop's \l {Generate Image Assets}{https://helpx.adobe.com/photoshop/using/generate-assets-layers.html} feature,
- the size and name for each asset are encoded into the name of the layer group.
-
- Where applicable, \l {Smart Objects}{https://helpx.adobe.com/photoshop/using/create-smart-objects.html}
- are used to reduce duplication for common objects such as 9-patch lines.
- \endomit
-
- \include examples-run.qdocinc
-*/
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/icons.qrc b/examples/quickcontrols/imagine/musicplayer/icons/icons.qrc
deleted file mode 100644
index 870b4445e5..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/icons.qrc
+++ /dev/null
@@ -1,40 +0,0 @@
-<RCC>
- <qresource prefix="/icons">
- <file>musicplayer/index.theme</file>
- <file>musicplayer/32x32/bluetooth.png</file>
- <file>musicplayer/32x32/cart.png</file>
- <file>musicplayer/32x32/cloud.png</file>
- <file>musicplayer/32x32/filter.png</file>
- <file>musicplayer/32x32/folder.png</file>
- <file>musicplayer/32x32/message.png</file>
- <file>musicplayer/32x32/music.png</file>
- <file>musicplayer/32x32/next.png</file>
- <file>musicplayer/32x32/pause.png</file>
- <file>musicplayer/32x32/power.png</file>
- <file>musicplayer/32x32/previous.png</file>
- <file>musicplayer/32x32/repeat.png</file>
- <file>musicplayer/32x32/save.png</file>
- <file>musicplayer/32x32/settings.png</file>
- <file>musicplayer/32x32/shuffle.png</file>
- <file>musicplayer/32x32/stop.png</file>
- <file>musicplayer/32x32@2/bluetooth.png</file>
- <file>musicplayer/32x32@2/cart.png</file>
- <file>musicplayer/32x32@2/cloud.png</file>
- <file>musicplayer/32x32@2/filter.png</file>
- <file>musicplayer/32x32@2/folder.png</file>
- <file>musicplayer/32x32@2/grid.png</file>
- <file>musicplayer/32x32@2/message.png</file>
- <file>musicplayer/32x32@2/music.png</file>
- <file>musicplayer/32x32@2/next.png</file>
- <file>musicplayer/32x32@2/pause.png</file>
- <file>musicplayer/32x32@2/power.png</file>
- <file>musicplayer/32x32@2/previous.png</file>
- <file>musicplayer/32x32@2/repeat.png</file>
- <file>musicplayer/32x32@2/save.png</file>
- <file>musicplayer/32x32@2/settings.png</file>
- <file>musicplayer/32x32@2/shuffle.png</file>
- <file>musicplayer/32x32@2/stop.png</file>
- <file>musicplayer/32x32/favorite.png</file>
- <file>musicplayer/32x32@2/favorite.png</file>
- </qresource>
-</RCC>
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/bluetooth.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/bluetooth.png
deleted file mode 100644
index 925f564c9e..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/bluetooth.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/cart.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/cart.png
deleted file mode 100644
index 4d5ad09955..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/cart.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/cloud.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/cloud.png
deleted file mode 100644
index 62ef511833..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/cloud.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/favorite.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/favorite.png
deleted file mode 100644
index 16ea84deb6..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/favorite.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/filter.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/filter.png
deleted file mode 100644
index 4472cead58..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/filter.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/folder.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/folder.png
deleted file mode 100644
index 5dd05778fd..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/folder.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/message.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/message.png
deleted file mode 100644
index 1d93b3c660..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/message.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/music.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/music.png
deleted file mode 100644
index 4448921389..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/music.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/next.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/next.png
deleted file mode 100644
index ab9164e877..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/next.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/pause.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/pause.png
deleted file mode 100644
index 9c9ef8fa60..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/pause.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/power.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/power.png
deleted file mode 100644
index 8f7d0c778c..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/power.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/previous.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/previous.png
deleted file mode 100644
index 3a0880fdbc..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/previous.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/repeat.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/repeat.png
deleted file mode 100644
index 7c8e8c1c2d..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/repeat.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/save.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/save.png
deleted file mode 100644
index c0b2748327..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/save.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/settings.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/settings.png
deleted file mode 100644
index 7992146a6e..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/settings.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/shuffle.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/shuffle.png
deleted file mode 100644
index 885782a219..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/shuffle.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/stop.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/stop.png
deleted file mode 100644
index 3e9c332732..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32/stop.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/bluetooth.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/bluetooth.png
deleted file mode 100644
index 2e70afc396..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/bluetooth.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/cart.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/cart.png
deleted file mode 100644
index 5717dd6582..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/cart.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/cloud.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/cloud.png
deleted file mode 100644
index ce5ab9f991..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/cloud.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/favorite.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/favorite.png
deleted file mode 100644
index ddc9aa45c8..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/favorite.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/filter.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/filter.png
deleted file mode 100644
index 3632c556fe..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/filter.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/folder.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/folder.png
deleted file mode 100644
index 49d41e202e..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/folder.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/grid.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/grid.png
deleted file mode 100644
index 8a1624e70b..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/grid.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/message.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/message.png
deleted file mode 100644
index 6650f26b6a..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/message.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/music.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/music.png
deleted file mode 100644
index 2cb8d49a67..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/music.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/next.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/next.png
deleted file mode 100644
index d7bb4b278e..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/next.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/pause.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/pause.png
deleted file mode 100644
index 8a081d02f3..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/pause.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/power.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/power.png
deleted file mode 100644
index 1201e55b4f..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/power.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/previous.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/previous.png
deleted file mode 100644
index 4236afdbbd..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/previous.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/repeat.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/repeat.png
deleted file mode 100644
index c8cb06d84d..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/repeat.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/save.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/save.png
deleted file mode 100644
index 448b25e4be..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/save.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/settings.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/settings.png
deleted file mode 100644
index 12a0cf6b76..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/settings.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/shuffle.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/shuffle.png
deleted file mode 100644
index 22b901cce9..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/shuffle.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/stop.png b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/stop.png
deleted file mode 100644
index 0521a943d4..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/32x32@2/stop.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/icons.svg b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/icons.svg
deleted file mode 100644
index 4cede992c3..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/icons.svg
+++ /dev/null
@@ -1,648 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<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="svg4485"
- width="1116.5374"
- height="64"
- viewBox="0 0 1116.5374 63.999997"
- sodipodi:docname="icons.svg"
- inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
- <metadata
- id="metadata4491">
- <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 />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs4489" />
- <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="1017"
- id="namedview4487"
- showgrid="true"
- inkscape:zoom="1.9019737"
- inkscape:cx="833.25423"
- inkscape:cy="74.046593"
- inkscape:window-x="-8"
- inkscape:window-y="-8"
- inkscape:window-maximized="1"
- inkscape:current-layer="svg4485"
- inkscape:snap-grids="false"
- inkscape:object-nodes="false"
- fit-margin-top="2.7755576e-017"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0">
- <inkscape:grid
- type="xygrid"
- id="grid4517"
- originx="-8.3788162"
- originy="-6.3974667" />
- </sodipodi:namedview>
- <g
- id="g5472"
- transform="translate(0,3.2401047)"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32@2\grid.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <g
- transform="translate(-8.3787758,-966.40258)"
- id="g5318">
- <rect
- y="998.53882"
- x="27.755102"
- height="9.2473469"
- width="9.2473469"
- id="rect4501"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- <rect
- y="1014.5388"
- x="11.755102"
- height="9.2473469"
- width="9.2473469"
- id="rect4513"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- <rect
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect4515"
- width="9.2473469"
- height="9.2473469"
- x="27.755102"
- y="1014.5388" />
- <rect
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect4519"
- width="9.2473469"
- height="9.2473469"
- x="11.755102"
- y="998.53882" />
- </g>
- <rect
- y="28.759895"
- x="0"
- height="32"
- width="32"
- id="rect5360"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
- <g
- id="g5478"
- transform="translate(0,3.6478805)"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32\settings.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <g
- transform="translate(-8.3787758,-966.40258)"
- id="g5322">
- <path
- style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 84.166529,1022.8327 69.433468,1008.4131"
- id="path4507"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 64.778344,1000.0771 c 0.15838,-2.21589 0.892654,-3.97239 4.064921,-3.9244 l 5.79089,5.4089 -0.06518,5.0971 -6.56108,6.4293 -4.0079,0.3962 -6.391837,-5.0204 c 0.003,-1.8969 0.615654,-4.5976 3.391837,-4.2539 l 3.804082,2.5118 c 1.756369,-0.3456 2.524226,-1.6258 3.156295,-3.1014 z"
- id="path4523"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccc" />
- </g>
- <rect
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect5362"
- width="32"
- height="32"
- x="47.771301"
- y="28.352119" />
- </g>
- <g
- id="g5484"
- transform="translate(0,1.8732223)"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32@2\filter.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <g
- transform="translate(-8.3787758,-966.40258)"
- id="g5326">
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 124.017,1012.8017 9.67769,-13.7927 H 108.6116 l 9.37299,13.931 v 13.1097 h 6.03241 z"
- id="path4509"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccc" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 116.70205,1019.6217 h 7.31466"
- id="path4525"
- inkscape:connector-curvature="0" />
- </g>
- <rect
- y="30.126778"
- x="96.808228"
- height="32"
- width="32"
- id="rect5364"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
- <g
- id="g5490"
- transform="translate(0,3.322319)"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32@2\message.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <g
- transform="translate(-8.3787758,-966.40258)"
- id="g5330">
- <path
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- d="m 155.38109,1005.6573 14.74014,12.3019 14.29684,-12.3019 v 16.8459 h -29.03698 z"
- id="rect4527"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc" />
- <path
- sodipodi:nodetypes="cccccc"
- inkscape:connector-curvature="0"
- id="path4532"
- d="m 155.38109,1002.206 14.74014,12.8565 14.29684,-12.8565 v -2.5487 h -29.03698 z"
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
- <rect
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect5366"
- width="32"
- height="32"
- x="145.52081"
- y="28.677681" />
- </g>
- <g
- id="g5497"
- transform="translate(0,3.5476608)"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32@2\music.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <g
- transform="translate(-8.3787758,-966.40258)"
- id="g5335">
- <circle
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="path4534"
- cx="210.02449"
- cy="1019.4025"
- r="5.7991834" />
- <circle
- r="5.7991834"
- cy="1019.4025"
- cx="227.51147"
- id="circle4536"
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- <path
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.77122235;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- d="m 214.45548,1019.7112 v -19.81316 c 0,-1.11042 0.86314,-2.00436 1.93529,-2.00436 h 13.59886 c 1.07214,0 1.93528,0.89394 1.93528,2.00436 v 19.81316"
- id="rect4538"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cssssc" />
- </g>
- <rect
- y="28.452339"
- x="194.38922"
- height="32"
- width="32"
- id="rect5368"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
- <g
- id="g5501"
- transform="translate(0,3.1662521)"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32@2\cloud.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <path
- sodipodi:nodetypes="cccscc"
- inkscape:connector-curvature="0"
- id="rect4181"
- d="m 251.48461,45.034419 c 0.4638,-10.8715 12.40207,-12.59447 15.43885,-2.5078 2.73388,0.2127 5.14555,2.6373 5.18665,5.068 0,3.4504 -2.90742,6.2281 -6.51889,6.2281 h -16.54418 c -5.83464,-1.7769 -4.57322,-9.6738 2.43757,-8.7883 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.46805668;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <rect
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect5370"
- width="32"
- height="32"
- x="242.73279"
- y="28.833748" />
- </g>
- <g
- id="g5506"
- transform="translate(0,2.188591)"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32\bluetooth.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <g
- transform="translate(-8.3787758,-966.40258)"
- id="g5338">
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 302.67171,1006.3777 22.49812,12.0249 -9.75572,5.6324 v -23.642 l 9.85555,5.6901 -22.32088,12.5411"
- id="path5197"
- inkscape:connector-curvature="0" />
- </g>
- <rect
- y="29.811409"
- x="290.75372"
- height="32"
- width="32"
- id="rect5372"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
- <g
- id="g5514"
- transform="translate(0,3.6180954)"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32@2\cart.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <g
- transform="translate(-8.3787758,-966.40258)"
- id="g5344">
- <rect
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.30289125;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect5199"
- width="19.591835"
- height="14.419591"
- x="355.70938"
- y="1002.3185" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 373.79839,1003.2635 v -5.25054 h 7.75837"
- id="path5201"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccc" />
- <circle
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="path5207"
- cx="357.12"
- cy="1020.8915"
- r="2.6644897" />
- <circle
- r="2.6644897"
- cy="1020.8915"
- cx="374.64978"
- id="circle5209"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
- <rect
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect5374"
- width="32"
- height="32"
- x="342.87732"
- y="28.381905" />
- </g>
- <g
- id="g5520"
- transform="translate(0,3.3700485)"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32\power.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <g
- transform="translate(-8.3787758,-966.40258)"
- id="g5348">
- <path
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- d="m 423.9111,999.19805 c 4.9899,1.81935 7.7689,6.19995 7.7689,11.81915 0,7.1847 -5.8243,13.009 -13.009,13.009 -7.1847,0 -13.009,-5.8243 -13.009,-13.009 0,-5.2414 3.0998,-9.7589 7.5661,-11.81915"
- id="path5211"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cscsc" />
- <rect
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.90877056;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect5214"
- width="3"
- height="14.321534"
- x="417.20502"
- y="996.53888" />
- </g>
- <rect
- y="28.629951"
- x="394.29221"
- height="32"
- width="32"
- id="rect5376"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
- <g
- id="g5528"
- transform="translate(0,1.3681564)"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32@2\save.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <g
- transform="translate(-8.3787758,-966.40258)"
- id="g5354">
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 461.313,1007.55 7.71825,-7.7187 H 486.75 v 26.4062 h -25.437 z"
- id="path5250"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 466.625,1002.4875 v 5.625 h 14.1875 v -7.5625"
- id="path5252"
- inkscape:connector-curvature="0" />
- <rect
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.85498571;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect5254"
- width="3"
- height="3"
- x="469.43436"
- y="1002.7332" />
- <path
- inkscape:connector-curvature="0"
- id="path5256"
- d="m 466.625,1025.1125 v -7.9375 h 14.1875 v 7.875"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- sodipodi:nodetypes="cccc" />
- </g>
- <rect
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect5378"
- width="32"
- height="32"
- x="449.65271"
- y="30.631844" />
- </g>
- <g
- id="g5534"
- transform="translate(0,2.5602951)"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32\folder.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <g
- transform="translate(-8.3787758,-972.40258)"
- id="g5358">
- <path
- id="rect5216"
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- d="m 510.7344,1007.7803 h 6.307 c 1.108,0 2,0.892 2,2 0.058,1.9158 0.4001,5.5746 -2,5.6471 l -6.307,-4e-4 h -2.0004 v -1.9996 l 4e-4,-3.6471 c 1e-4,-1.108 0.892,-2 2,-2 z m 3.3587,3.7123 h 13.2014 c 1.108,0 2.001,0.8774 2.0005,1.9674 v 1.967 h -2.0005 l -13.2014,5e-4 c -1.108,0 -2,-0.8775 -2,-1.9674 0,-1.09 0.892,-1.9674 2,-1.9674 z"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sscccccsscssccsssc" />
- <path
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- d="m 508.8555,1017.2315 v 8.6728 c 0,1.108 0.892,2 2,2 h 16.5957 c 1.108,0 2,-0.892 2,-2 v -8.6728 z"
- id="rect5242"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csssscc" />
- </g>
- <rect
- y="29.439705"
- x="494.71381"
- height="32"
- width="32"
- id="rect5380"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
- <g
- id="g3966"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32@2\favorite.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <path
- sodipodi:nodetypes="ccc"
- inkscape:connector-curvature="0"
- id="path5258"
- d="m 679.76049,43.397888 c -11.16654,-4.90607 -6.54023,-14.887481 0.0528,-8.582499 6.18385,-6.259313 11.86465,3.625989 -0.0528,8.582499 z"
- style="fill:none;stroke:#000000;stroke-width:2.2720654;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- y="22.143074"
- x="663.8728"
- height="32"
- width="32"
- id="rect5399"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
- <g
- id="g3970"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32\stop.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <rect
- ry="2"
- rx="2"
- y="30.209908"
- x="730.55872"
- height="13.875"
- width="13.875"
- id="rect5260"
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- <rect
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect5405"
- width="32"
- height="32"
- x="721.49622"
- y="21.147408" />
- </g>
- <g
- id="g3976"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32\previous.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <g
- transform="matrix(0.92512795,0,0,0.92512795,49.646365,-1594.3495)"
- id="g5275">
- <path
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.84269726;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- inkscape:transform-center-x="1.6220757"
- inkscape:transform-center-y="-9.5697762e-005"
- d="m 809.37017,1768.9096 h -8.55767 -8.55877 v -4.1758 l 8.55877,-10.6475 8.55767,10.6475 z"
- id="path5264"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccc"
- transform="matrix(0,-0.65656157,0.65656157,0,-358.61037,2289.4994)" />
- <path
- sodipodi:nodetypes="ccccccc"
- inkscape:connector-curvature="0"
- id="path5267"
- d="m 810.35019,1758.0981 v 5.6186 5.6193 h -2.74167 l -6.99073,-5.6193 6.99073,-5.6186 z"
- inkscape:transform-center-y="-9.5697762e-005"
- inkscape:transform-center-x="1.6220757"
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20984423;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
- <rect
- y="21.314461"
- x="777.32397"
- height="32"
- width="32"
- id="rect5407"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
- <g
- id="g3988"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32@2\next.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <g
- transform="matrix(-0.92512795,0,0,0.92512795,1729.0016,-1594.3495)"
- id="g5281">
- <path
- transform="matrix(0,-0.65656157,0.65656157,0,-358.61037,2289.4994)"
- sodipodi:nodetypes="ccccccc"
- inkscape:connector-curvature="0"
- id="path5277"
- d="m 809.37017,1768.9096 h -8.55767 -8.55877 v -4.1758 l 8.55877,-10.6475 8.55767,10.6475 z"
- inkscape:transform-center-y="-9.5697762e-005"
- inkscape:transform-center-x="1.6220757"
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.84269726;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- <path
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20984423;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- inkscape:transform-center-x="1.6220757"
- inkscape:transform-center-y="-9.5697762e-005"
- d="m 810.35019,1758.0981 v 5.6186 5.6193 h -2.74167 l -6.99073,-5.6193 6.99073,-5.6186 z"
- id="path5279"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccc" />
- </g>
- <rect
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect5409"
- width="32"
- height="32"
- x="969.32397"
- y="21.314461" />
- </g>
- <g
- id="g3996"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32@2\repeat.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <g
- transform="matrix(0.61777671,0,0,0.61777671,393.26213,-582.60358)"
- id="g5386">
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1057,996.9258 h -11 c -1.7949,2e-4 -3.2498,1.4551 -3.25,3.25 v 3.375"
- id="path5283"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1055.4787,992.6896 3.375,4.25 -3.75,3.875"
- id="path5288"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0"
- id="path5290"
- d="m 1044.6035,1011.3192 h 11 c 1.7949,-2e-4 3.2498,-1.4551 3.25,-3.25 v -3.375"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- inkscape:connector-curvature="0"
- id="path5292"
- d="m 1046.1248,1015.5554 -3.375,-4.25 3.75,-3.875"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- </g>
- <rect
- y="21.719917"
- x="1026.423"
- height="32"
- width="32"
- id="rect5411"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
- <g
- id="g4005"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32@2\shuffle.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <g
- transform="matrix(0.6410961,0,0,0.6410961,389.61554,-606.18813)"
- id="g5393">
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1101,997.8001 c 10.7776,0 1.9407,12.75 14.125,12.75"
- id="path5294"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- inkscape:connector-curvature="0"
- id="path5298"
- d="m 1113.4787,992.6896 3.375,4.25 -3.75,3.875"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1113.4787,1006.4897 3.375,4.25 -3.75,3.875"
- id="path5300"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1101.2501,1010.2375 c 1.479,0.07 2.6346,-0.5915 3.875,-1.6562"
- id="path5302"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0"
- id="path5312"
- d="m 1113.6825,996.9157 c -1.479,-0.07 -2.6346,0.5915 -3.875,1.6562"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- </g>
- <rect
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect5413"
- width="32"
- height="32"
- x="1084.5374"
- y="21.248909" />
- </g>
- <g
- id="g3982"
- inkscape:export-filename="C:\dev\qqc2-technical-style-demo\icons\technical\32x32@2\pause.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <g
- transform="matrix(0.26732473,0,0,0.26732473,607.52158,-229.58324)"
- id="g5397">
- <rect
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.19984221;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
- id="rect5269"
- width="14.495689"
- height="54.800774"
- x="877.34277"
- y="971.0022" />
- <rect
- y="971.0022"
- x="904.9892"
- height="54.800774"
- width="14.495689"
- id="rect5271"
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.19984221;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
- <rect
- y="21.314461"
- x="831.68982"
- height="32"
- width="32"
- id="rect5458"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.49999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
- </g>
-</svg>
diff --git a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/index.theme b/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/index.theme
deleted file mode 100644
index 2523293552..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/icons/musicplayer/index.theme
+++ /dev/null
@@ -1,14 +0,0 @@
-[Icon Theme]
-Name=Music Player
-Comment=Icon theme for the Qt Quick Controls 2 Music Player Imagine Style Example
-
-Directories=32x32,32x32@2
-
-[32x32]
-Size=32
-Type=Fixed
-
-[32x32@2]
-Size=32
-Scale=2
-Type=Fixed
diff --git a/examples/quickcontrols/imagine/musicplayer/images/album-cover.jpg b/examples/quickcontrols/imagine/musicplayer/images/album-cover.jpg
deleted file mode 100644
index 48bd6231ba..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/images/album-cover.jpg
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/applicationwindow-background.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/applicationwindow-background.png
deleted file mode 100644
index 036bf74692..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/applicationwindow-background.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked-hovered.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked-hovered.9.png
deleted file mode 100644
index c275d3242d..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked-hovered.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked-hovered@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked-hovered@2x.9.png
deleted file mode 100644
index eec285f305..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked-hovered@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked.9.png
deleted file mode 100644
index 2d284a5bc8..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked@2x.9.png
deleted file mode 100644
index fec385f539..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-checked@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-disabled.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-disabled.9.png
deleted file mode 100644
index bcad147094..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-disabled.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-disabled@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-disabled@2x.9.png
deleted file mode 100644
index 03aba1535c..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-disabled@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-hovered.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-hovered.9.png
deleted file mode 100644
index 962cf6778e..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-hovered.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-hovered@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-hovered@2x.9.png
deleted file mode 100644
index 841c0064e7..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-hovered@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-pressed.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-pressed.9.png
deleted file mode 100644
index f97f42b809..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-pressed@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-pressed@2x.9.png
deleted file mode 100644
index 970583495c..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background-pressed@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background.9.png
deleted file mode 100644
index 74a8574fd3..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background@2x.9.png
deleted file mode 100644
index 251633853e..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/button-background@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-hovered.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-hovered.9.png
deleted file mode 100644
index f9f90df4f4..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-hovered.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-hovered@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-hovered@2x.9.png
deleted file mode 100644
index a4be50e154..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-hovered@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-open.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-open.9.png
deleted file mode 100644
index 147231ecb7..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-open.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-open@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-open@2x.9.png
deleted file mode 100644
index 0a978572e7..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-open@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-pressed.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-pressed.9.png
deleted file mode 100644
index 7726198ab1..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-pressed@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-pressed@2x.9.png
deleted file mode 100644
index d64d405239..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background-pressed@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background.9.png
deleted file mode 100644
index e919d50aa0..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background@2x.9.png
deleted file mode 100644
index 5effba7e8b..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-background@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-hovered.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-hovered.png
deleted file mode 100644
index 78b0650555..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-hovered.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-hovered@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-hovered@2x.png
deleted file mode 100644
index ec3c8734c8..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-hovered@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-open.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-open.png
deleted file mode 100644
index 7a831632fe..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-open.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-open@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-open@2x.png
deleted file mode 100644
index 47c664a2c8..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-open@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-pressed.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-pressed.png
deleted file mode 100644
index 3340294f05..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-pressed.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-pressed@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-pressed@2x.png
deleted file mode 100644
index aa35b88200..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator-pressed@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator.png
deleted file mode 100644
index 2c7f557819..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator@2x.png
deleted file mode 100644
index 20b9c44c34..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-indicator@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-popup.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-popup.9.png
deleted file mode 100644
index cae75cd78e..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-popup.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-popup@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-popup@2x.9.png
deleted file mode 100644
index 392607bcdf..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/combobox-popup@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-hovered.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-hovered.png
deleted file mode 100644
index ac614678b3..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-hovered.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-hovered@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-hovered@2x.png
deleted file mode 100644
index b13783c23a..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-hovered@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-pressed.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-pressed.png
deleted file mode 100644
index 1bd74acac6..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-pressed.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-pressed@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-pressed@2x.png
deleted file mode 100644
index ffd7d009eb..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background-pressed@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background.png
deleted file mode 100644
index c81fcb700b..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background@2x.png
deleted file mode 100644
index be3e15476b..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-background@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle-pressed.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle-pressed.png
deleted file mode 100644
index d27f9355d5..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle-pressed.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle-pressed@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle-pressed@2x.png
deleted file mode 100644
index a44e141066..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle-pressed@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle.png
deleted file mode 100644
index 9992a83990..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle@2x.png
deleted file mode 100644
index 8816482a08..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/dial-handle@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/frame-background.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/frame-background.9.png
deleted file mode 100644
index 1e436f2b36..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/frame-background.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/frame-background@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/frame-background@2x.9.png
deleted file mode 100644
index abdf3ab8e3..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/frame-background@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/imagine-assets.qrc b/examples/quickcontrols/imagine/musicplayer/imagine-assets/imagine-assets.qrc
deleted file mode 100644
index 7bda4995d4..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/imagine-assets.qrc
+++ /dev/null
@@ -1,113 +0,0 @@
-<RCC>
- <qresource prefix="/imagine-assets">
- <file>applicationwindow-background.png</file>
- <file>button-background-checked-hovered.9.png</file>
- <file>button-background-checked-hovered@2x.9.png</file>
- <file>button-background-checked.9.png</file>
- <file>button-background-checked@2x.9.png</file>
- <file>button-background-disabled.9.png</file>
- <file>button-background-disabled@2x.9.png</file>
- <file>button-background-hovered.9.png</file>
- <file>button-background-hovered@2x.9.png</file>
- <file>button-background-pressed.9.png</file>
- <file>button-background-pressed@2x.9.png</file>
- <file>button-background.9.png</file>
- <file>button-background@2x.9.png</file>
- <file>combobox-background-hovered.9.png</file>
- <file>combobox-background-hovered@2x.9.png</file>
- <file>combobox-background-open.9.png</file>
- <file>combobox-background-open@2x.9.png</file>
- <file>combobox-background-pressed.9.png</file>
- <file>combobox-background-pressed@2x.9.png</file>
- <file>combobox-background.9.png</file>
- <file>combobox-background@2x.9.png</file>
- <file>combobox-indicator-hovered.png</file>
- <file>combobox-indicator-hovered@2x.png</file>
- <file>combobox-indicator-open.png</file>
- <file>combobox-indicator-open@2x.png</file>
- <file>combobox-indicator-pressed.png</file>
- <file>combobox-indicator-pressed@2x.png</file>
- <file>combobox-indicator.png</file>
- <file>combobox-indicator@2x.png</file>
- <file>combobox-popup.9.png</file>
- <file>combobox-popup@2x.9.png</file>
- <file>dial-background-hovered.png</file>
- <file>dial-background-hovered@2x.png</file>
- <file>dial-background-pressed.png</file>
- <file>dial-background-pressed@2x.png</file>
- <file>dial-background.png</file>
- <file>dial-background@2x.png</file>
- <file>dial-handle-pressed.png</file>
- <file>dial-handle-pressed@2x.png</file>
- <file>dial-handle.png</file>
- <file>dial-handle@2x.png</file>
- <file>frame-background.9.png</file>
- <file>frame-background@2x.9.png</file>
- <file>itemdelegate-background-checked.9.png</file>
- <file>itemdelegate-background-checked@2x.9.png</file>
- <file>itemdelegate-background-disabled.9.png</file>
- <file>itemdelegate-background-disabled@2x.9.png</file>
- <file>itemdelegate-background-hovered.9.png</file>
- <file>itemdelegate-background-hovered@2x.9.png</file>
- <file>itemdelegate-background-pressed.9.png</file>
- <file>itemdelegate-background-pressed@2x.9.png</file>
- <file>itemdelegate-background.9.png</file>
- <file>itemdelegate-background@2x.9.png</file>
- <file>roundbutton-background-checked-hovered.png</file>
- <file>roundbutton-background-checked-hovered@2x.png</file>
- <file>roundbutton-background-checked.png</file>
- <file>roundbutton-background-checked@2x.png</file>
- <file>roundbutton-background-disabled.png</file>
- <file>roundbutton-background-disabled@2x.png</file>
- <file>roundbutton-background-hovered.png</file>
- <file>roundbutton-background-hovered@2x.png</file>
- <file>roundbutton-background-pressed.png</file>
- <file>roundbutton-background-pressed@2x.png</file>
- <file>roundbutton-background.png</file>
- <file>roundbutton-background@2x.png</file>
- <file>scrollbar-handle-interactive-hovered.png</file>
- <file>scrollbar-handle-interactive-hovered@2x.png</file>
- <file>scrollbar-handle-interactive-pressed.png</file>
- <file>scrollbar-handle-interactive-pressed@2x.png</file>
- <file>scrollbar-handle-interactive.png</file>
- <file>scrollbar-handle-interactive@2x.png</file>
- <file>slider-background-horizontal-disabled.9.png</file>
- <file>slider-background-horizontal-disabled@2x.9.png</file>
- <file>slider-background-horizontal.9.png</file>
- <file>slider-background-horizontal@2x.9.png</file>
- <file>slider-background-vertical-disabled.9.png</file>
- <file>slider-background-vertical-disabled@2x.9.png</file>
- <file>slider-background-vertical.9.png</file>
- <file>slider-background-vertical@2x.9.png</file>
- <file>slider-handle-disabled.png</file>
- <file>slider-handle-disabled@2x.png</file>
- <file>slider-handle-hovered.png</file>
- <file>slider-handle-hovered@2x.png</file>
- <file>slider-handle.png</file>
- <file>slider-handle@2x.png</file>
- <file>slider-progress-horizontal.9.png</file>
- <file>slider-progress-horizontal@2x.9.png</file>
- <file>slider-progress-vertical-disabled.9.png</file>
- <file>slider-progress-vertical-disabled@2x.9.png</file>
- <file>slider-progress-vertical.9.png</file>
- <file>slider-progress-vertical@2x.9.png</file>
- <file>textfield-background-disabled.9.png</file>
- <file>textfield-background-disabled@2x.9.png</file>
- <file>textfield-background.9.png</file>
- <file>textfield-background@2x.9.png</file>
- <file>toolbar-background.9.png</file>
- <file>toolbar-background@2x.9.png</file>
- <file>toolbutton-background-checked-hovered.9.png</file>
- <file>toolbutton-background-checked-hovered@2x.9.png</file>
- <file>toolbutton-background-checked.9.png</file>
- <file>toolbutton-background-checked@2x.9.png</file>
- <file>toolbutton-background-hovered.9.png</file>
- <file>toolbutton-background-hovered@2x.9.png</file>
- <file>toolbutton-background-pressed.9.png</file>
- <file>toolbutton-background-pressed@2x.9.png</file>
- <file>toolbutton-background.9.png</file>
- <file>toolbutton-background@2x.9.png</file>
- <file>tooltip-background.9.png</file>
- <file>tooltip-background@2x.9.png</file>
- </qresource>
-</RCC>
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-checked.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-checked.9.png
deleted file mode 100644
index 6c7915aab9..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-checked.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-checked@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-checked@2x.9.png
deleted file mode 100644
index 24ddbce09a..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-checked@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-disabled.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-disabled.9.png
deleted file mode 100644
index 65a670ebb5..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-disabled.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-disabled@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-disabled@2x.9.png
deleted file mode 100644
index df81dd0a98..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-disabled@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-hovered.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-hovered.9.png
deleted file mode 100644
index a8eb9e7a13..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-hovered.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-hovered@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-hovered@2x.9.png
deleted file mode 100644
index 23559a28b4..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-hovered@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-pressed.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-pressed.9.png
deleted file mode 100644
index 7d7a2bb960..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-pressed@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-pressed@2x.9.png
deleted file mode 100644
index 911563fc0e..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background-pressed@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background.9.png
deleted file mode 100644
index 65a670ebb5..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background@2x.9.png
deleted file mode 100644
index df81dd0a98..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/itemdelegate-background@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked-hovered.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked-hovered.png
deleted file mode 100644
index fae98b91b7..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked-hovered.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked-hovered@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked-hovered@2x.png
deleted file mode 100644
index 1b575b0354..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked-hovered@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked.png
deleted file mode 100644
index 859232e2e5..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked@2x.png
deleted file mode 100644
index ef147a334a..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-checked@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-disabled.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-disabled.png
deleted file mode 100644
index 862f4a26d8..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-disabled.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-disabled@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-disabled@2x.png
deleted file mode 100644
index f99e11fd08..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-disabled@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-hovered.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-hovered.png
deleted file mode 100644
index 6239eb3214..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-hovered.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-hovered@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-hovered@2x.png
deleted file mode 100644
index aa2e8f46d8..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-hovered@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-pressed.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-pressed.png
deleted file mode 100644
index 81d2cd7442..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-pressed.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-pressed@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-pressed@2x.png
deleted file mode 100644
index fd82c0c38c..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background-pressed@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background.png
deleted file mode 100644
index ab2e9ceea8..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background@2x.png
deleted file mode 100644
index 33e81bf619..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/roundbutton-background@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-hovered.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-hovered.png
deleted file mode 100644
index 2657743a81..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-hovered.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-hovered@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-hovered@2x.png
deleted file mode 100644
index 60ade78071..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-hovered@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-pressed.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-pressed.png
deleted file mode 100644
index 626ab8b6bb..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-pressed.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-pressed@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-pressed@2x.png
deleted file mode 100644
index 92789571d1..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive-pressed@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive.png
deleted file mode 100644
index a7a7347120..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive@2x.png
deleted file mode 100644
index 837e179553..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/scrollbar-handle-interactive@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal-disabled.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal-disabled.9.png
deleted file mode 100644
index f45f588838..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal-disabled.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal-disabled@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal-disabled@2x.9.png
deleted file mode 100644
index 40e6d50567..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal-disabled@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal.9.png
deleted file mode 100644
index a465f300cc..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal@2x.9.png
deleted file mode 100644
index 7a3170f529..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-horizontal@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical-disabled.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical-disabled.9.png
deleted file mode 100644
index 0bee2685a0..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical-disabled.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical-disabled@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical-disabled@2x.9.png
deleted file mode 100644
index 7fed90c816..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical-disabled@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical.9.png
deleted file mode 100644
index a5074864b0..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical@2x.9.png
deleted file mode 100644
index a3974ebe3c..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-background-vertical@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-disabled.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-disabled.png
deleted file mode 100644
index 02a9df388d..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-disabled.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-disabled@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-disabled@2x.png
deleted file mode 100644
index b37cef3272..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-disabled@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-hovered.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-hovered.png
deleted file mode 100644
index 2048aa6b07..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-hovered.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-hovered@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-hovered@2x.png
deleted file mode 100644
index 0515be8e11..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle-hovered@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle.png
deleted file mode 100644
index 2a80f27f27..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle@2x.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle@2x.png
deleted file mode 100644
index 2944704118..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-handle@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-horizontal.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-horizontal.9.png
deleted file mode 100644
index 1224522f9d..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-horizontal.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-horizontal@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-horizontal@2x.9.png
deleted file mode 100644
index c304bfe5ad..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-horizontal@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical-disabled.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical-disabled.9.png
deleted file mode 100644
index 0e7b08bd0e..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical-disabled.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical-disabled@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical-disabled@2x.9.png
deleted file mode 100644
index d9654ceec4..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical-disabled@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical.9.png
deleted file mode 100644
index 928ff864f0..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical@2x.9.png
deleted file mode 100644
index 3d640b277a..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/slider-progress-vertical@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background-disabled.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background-disabled.9.png
deleted file mode 100644
index de557cbc5f..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background-disabled.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background-disabled@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background-disabled@2x.9.png
deleted file mode 100644
index 23984d715d..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background-disabled@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background.9.png
deleted file mode 100644
index 0dc163a4a3..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background@2x.9.png
deleted file mode 100644
index 41aae23d7f..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/textfield-background@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbar-background.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbar-background.9.png
deleted file mode 100644
index ab2f47e243..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbar-background.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbar-background@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbar-background@2x.9.png
deleted file mode 100644
index 7e389fe0f0..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbar-background@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked-hovered.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked-hovered.9.png
deleted file mode 100644
index 3acf92e12a..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked-hovered.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked-hovered@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked-hovered@2x.9.png
deleted file mode 100644
index 0f43f93337..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked-hovered@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked.9.png
deleted file mode 100644
index ff0faa567b..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked@2x.9.png
deleted file mode 100644
index 694f5eab88..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-checked@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-hovered.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-hovered.9.png
deleted file mode 100644
index c60e64d10c..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-hovered.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-hovered@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-hovered@2x.9.png
deleted file mode 100644
index d0103202bd..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-hovered@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-pressed.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-pressed.9.png
deleted file mode 100644
index f2ec9c6e4b..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-pressed@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-pressed@2x.9.png
deleted file mode 100644
index e3a86911ee..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background-pressed@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background.9.png
deleted file mode 100644
index a292ac0959..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background@2x.9.png
deleted file mode 100644
index 6f8880c393..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/toolbutton-background@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/tooltip-background.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/tooltip-background.9.png
deleted file mode 100644
index a74441c92a..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/tooltip-background.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/imagine-assets/tooltip-background@2x.9.png b/examples/quickcontrols/imagine/musicplayer/imagine-assets/tooltip-background@2x.9.png
deleted file mode 100644
index d4b20b74b3..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/imagine-assets/tooltip-background@2x.9.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/imagine/musicplayer/musicplayer.cpp b/examples/quickcontrols/imagine/musicplayer/musicplayer.cpp
deleted file mode 100644
index 54727af696..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/musicplayer.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include <QGuiApplication>
-#include <QQmlApplicationEngine>
-#include <QSettings>
-#include <QIcon>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication::setApplicationName("Music Player");
- QGuiApplication::setOrganizationName("QtProject");
-
- QGuiApplication app(argc, argv);
-
- QIcon::setThemeName("musicplayer");
-
- QQmlApplicationEngine engine;
- engine.load(QUrl("qrc:/musicplayer.qml"));
- if (engine.rootObjects().isEmpty())
- return -1;
-
- return app.exec();
-}
diff --git a/examples/quickcontrols/imagine/musicplayer/musicplayer.pro b/examples/quickcontrols/imagine/musicplayer/musicplayer.pro
deleted file mode 100644
index 67c716406e..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/musicplayer.pro
+++ /dev/null
@@ -1,16 +0,0 @@
-TEMPLATE = app
-TARGET = musicplayer
-QT += quick quickcontrols2
-
-SOURCES += \
- musicplayer.cpp
-
-RESOURCES += \
- icons/icons.qrc \
- images/album-cover.jpg \
- imagine-assets/imagine-assets.qrc \
- qtquickcontrols2.conf \
- musicplayer.qml
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/imagine/musicplayer
-INSTALLS += target
diff --git a/examples/quickcontrols/imagine/musicplayer/musicplayer.qml b/examples/quickcontrols/imagine/musicplayer/musicplayer.qml
deleted file mode 100644
index 7d321534a7..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/musicplayer.qml
+++ /dev/null
@@ -1,420 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Layouts
-import QtQuick.Controls
-import QtQuick.Window
-
-ApplicationWindow {
- id: window
- width: 1280
- height: 720
- visible: true
- title: "Qt Quick Controls - Imagine Style Example: Music Player"
-
- Component.onCompleted: {
- x = Screen.width / 2 - width / 2
- y = Screen.height / 2 - height / 2
- }
-
- Shortcut {
- sequence: "Ctrl+Q"
- onActivated: Qt.quit()
- }
-
- header: ToolBar {
- RowLayout {
- id: headerRowLayout
- anchors.fill: parent
- spacing: 0
-
- ToolButton {
- icon.name: "grid"
- }
- ToolButton {
- icon.name: "settings"
- }
- ToolButton {
- icon.name: "filter"
- }
- ToolButton {
- icon.name: "message"
- }
- ToolButton {
- icon.name: "music"
- }
- ToolButton {
- icon.name: "cloud"
- }
- ToolButton {
- icon.name: "bluetooth"
- }
- ToolButton {
- icon.name: "cart"
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- ToolButton {
- icon.name: "power"
- onClicked: Qt.quit()
- }
- }
- }
-
- Label {
- text: "Qtify"
- font.pixelSize: Qt.application.font.pixelSize * 1.3
- anchors.centerIn: header
- z: header.z + 1
- }
-
- RowLayout {
- spacing: 115
- anchors.fill: parent
- anchors.margins: 70
-
- ColumnLayout {
- spacing: 0
- Layout.preferredWidth: 230
-
- RowLayout {
- Layout.maximumHeight: 170
-
- ColumnLayout {
- Label {
- text: "12 dB"
- Layout.fillHeight: true
- }
- Label {
- text: "6 dB"
- Layout.fillHeight: true
- }
- Label {
- text: "0 dB"
- Layout.fillHeight: true
- }
- Label {
- text: "-6 dB"
- Layout.fillHeight: true
- }
- Label {
- text: "-12 dB"
- Layout.fillHeight: true
- }
- }
-
- Repeater {
- model: 7
-
- Slider {
- value: Math.random()
- orientation: Qt.Vertical
-
- Layout.fillWidth: true
- Layout.fillHeight: true
- }
- }
- }
-
- RowLayout {
- spacing: 10
- Layout.topMargin: 23
-
- ComboBox {
- currentIndex: 1
- model: ["Blues", "Classical", "Jazz", "Metal"]
- Layout.fillWidth: true
- }
-
- Button {
- icon.name: "folder"
- }
-
- Button {
- icon.name: "save"
- enabled: false
- }
- }
-
- Dial {
- Layout.alignment: Qt.AlignHCenter
- Layout.topMargin: 50
- }
-
- Label {
- text: "Volume"
-
- Layout.alignment: Qt.AlignHCenter
- Layout.topMargin: 12
- }
- }
-
- ColumnLayout {
- spacing: 26
- Layout.preferredWidth: 230
-
- Item {
- Layout.fillWidth: true
- Layout.fillHeight: true
-
- Image {
- anchors.fill: parent
- fillMode: Image.PreserveAspectCrop
- source: "images/album-cover.jpg"
- }
- }
-
- Item {
- id: songLabelContainer
- clip: true
-
- Layout.fillWidth: true
- Layout.preferredHeight: songNameLabel.implicitHeight
-
- SequentialAnimation {
- running: true
- loops: Animation.Infinite
-
- PauseAnimation {
- duration: 2000
- }
- ParallelAnimation {
- XAnimator {
- target: songNameLabel
- from: 0
- to: songLabelContainer.width - songNameLabel.implicitWidth
- duration: 5000
- }
- OpacityAnimator {
- target: leftGradient
- from: 0
- to: 1
- }
- }
- OpacityAnimator {
- target: rightGradient
- from: 1
- to: 0
- }
- PauseAnimation {
- duration: 1000
- }
- OpacityAnimator {
- target: rightGradient
- from: 0
- to: 1
- }
- ParallelAnimation {
- XAnimator {
- target: songNameLabel
- from: songLabelContainer.width - songNameLabel.implicitWidth
- to: 0
- duration: 5000
- }
- OpacityAnimator {
- target: leftGradient
- from: 0
- to: 1
- }
- }
- OpacityAnimator {
- target: leftGradient
- from: 1
- to: 0
- }
- }
-
- Rectangle {
- id: leftGradient
- gradient: Gradient {
- GradientStop {
- position: 0
- color: "#dfe4ea"
- }
- GradientStop {
- position: 1
- color: "#00dfe4ea"
- }
- }
-
- width: height
- height: parent.height
- anchors.left: parent.left
- z: 1
- rotation: -90
- opacity: 0
- }
-
- Label {
- id: songNameLabel
- text: "Edvard Grieg - In the Hall of the Mountain King"
- font.pixelSize: Qt.application.font.pixelSize * 1.4
- }
-
- Rectangle {
- id: rightGradient
- gradient: Gradient {
- GradientStop {
- position: 0
- color: "#00dfe4ea"
- }
- GradientStop {
- position: 1
- color: "#dfe4ea"
- }
- }
-
- width: height
- height: parent.height
- anchors.right: parent.right
- rotation: -90
- }
- }
-
- RowLayout {
- spacing: 8
- Layout.alignment: Qt.AlignHCenter
-
- RoundButton {
- icon.name: "favorite"
- icon.width: 32
- icon.height: 32
- }
- RoundButton {
- icon.name: "stop"
- icon.width: 32
- icon.height: 32
- }
- RoundButton {
- icon.name: "previous"
- icon.width: 32
- icon.height: 32
- }
- RoundButton {
- icon.name: "pause"
- icon.width: 32
- icon.height: 32
- }
- RoundButton {
- icon.name: "next"
- icon.width: 32
- icon.height: 32
- }
- RoundButton {
- icon.name: "repeat"
- icon.width: 32
- icon.height: 32
- }
- RoundButton {
- icon.name: "shuffle"
- icon.width: 32
- icon.height: 32
- }
- }
-
- Slider {
- id: seekSlider
- value: 113
- to: 261
-
- Layout.fillWidth: true
-
- ToolTip {
- parent: seekSlider.handle
- visible: seekSlider.pressed
- text: pad(Math.floor(value / 60)) + ":" + pad(Math.floor(value % 60))
- y: parent.height
-
- readonly property int value: seekSlider.valueAt(seekSlider.position)
-
- function pad(number) {
- if (number <= 9)
- return "0" + number;
- return number;
- }
- }
- }
- }
-
- ColumnLayout {
- spacing: 16
- Layout.preferredWidth: 230
-
- ButtonGroup {
- buttons: libraryRowLayout.children
- }
-
- RowLayout {
- id: libraryRowLayout
- Layout.alignment: Qt.AlignHCenter
-
- Button {
- text: "Files"
- checked: true
- }
- Button {
- text: "Playlists"
- checkable: true
- }
- Button {
- text: "Favourites"
- checkable: true
- }
- }
-
- RowLayout {
- TextField {
- Layout.fillWidth: true
- }
- Button {
- icon.name: "folder"
- }
- }
-
- Frame {
- id: filesFrame
- leftPadding: 1
- rightPadding: 1
-
- Layout.fillWidth: true
- Layout.fillHeight: true
-
- ListView {
- id: filesListView
- clip: true
- anchors.fill: parent
- model: ListModel {
- Component.onCompleted: {
- for (var i = 0; i < 100; ++i) {
- append({
- author: "Author",
- album: "Album",
- track: "Track 0" + (i % 9 + 1),
- });
- }
- }
- }
- delegate: ItemDelegate {
- text: model.author + " - " + model.album + " - " + model.track
- width: filesListView.width
- }
-
- ScrollBar.vertical: ScrollBar {
- parent: filesFrame
- policy: ScrollBar.AlwaysOn
- anchors.top: parent.top
- anchors.topMargin: filesFrame.topPadding
- anchors.right: parent.right
- anchors.rightMargin: 1
- anchors.bottom: parent.bottom
- anchors.bottomMargin: filesFrame.bottomPadding
- }
- }
- }
- }
- }
-}
diff --git a/examples/quickcontrols/imagine/musicplayer/qtquickcontrols2.conf b/examples/quickcontrols/imagine/musicplayer/qtquickcontrols2.conf
deleted file mode 100644
index 33eab6a563..0000000000
--- a/examples/quickcontrols/imagine/musicplayer/qtquickcontrols2.conf
+++ /dev/null
@@ -1,10 +0,0 @@
-[Controls]
-Style=Imagine
-
-[Imagine]
-Path=:/imagine-assets
-
-[Imagine\Palette]
-Text=#6b7b89
-ButtonText=#6b7b89
-WindowText=#6b7b89
diff --git a/examples/quickcontrols/ios/todolist/AppSettings.qml b/examples/quickcontrols/ios/todolist/AppSettings.qml
index 764ba8b8fc..37a9fe33e9 100644
--- a/examples/quickcontrols/ios/todolist/AppSettings.qml
+++ b/examples/quickcontrols/ios/todolist/AppSettings.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
pragma Singleton
diff --git a/examples/quickcontrols/ios/todolist/CMakeLists.txt b/examples/quickcontrols/ios/todolist/CMakeLists.txt
index ea96d606c7..64d7624679 100644
--- a/examples/quickcontrols/ios/todolist/CMakeLists.txt
+++ b/examples/quickcontrols/ios/todolist/CMakeLists.txt
@@ -3,12 +3,6 @@ project(todolist LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/todolist")
-
find_package(Qt6 COMPONENTS Gui Qml Quick QuickControls2)
qt_add_executable(todolist
@@ -77,7 +71,16 @@ qt_add_qml_module(todolist
set_property(GLOBAL PROPERTY XCODE_EMIT_EFFECTIVE_PLATFORM_NAME ON)
install(TARGETS todolist
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET todolist
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/ios/todolist/Database.qml b/examples/quickcontrols/ios/todolist/Database.qml
index 31bbd8c1e7..eb85402b26 100644
--- a/examples/quickcontrols/ios/todolist/Database.qml
+++ b/examples/quickcontrols/ios/todolist/Database.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
pragma Singleton
diff --git a/examples/quickcontrols/ios/todolist/FontSizePage.qml b/examples/quickcontrols/ios/todolist/FontSizePage.qml
index 2b0e5b16db..89c8bd4518 100644
--- a/examples/quickcontrols/ios/todolist/FontSizePage.qml
+++ b/examples/quickcontrols/ios/todolist/FontSizePage.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
diff --git a/examples/quickcontrols/ios/todolist/HomePage.qml b/examples/quickcontrols/ios/todolist/HomePage.qml
index 94221146e2..39753e0be7 100644
--- a/examples/quickcontrols/ios/todolist/HomePage.qml
+++ b/examples/quickcontrols/ios/todolist/HomePage.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
@@ -56,7 +56,7 @@ Page {
}
Image {
- source: Qt.styleHints.appearance === Qt.Dark ? "images/close-white.png"
+ source: Qt.styleHints.colorScheme === Qt.Dark ? "images/close-white.png"
: "images/close.png"
width: 20
height: 20
@@ -141,6 +141,7 @@ Page {
enabled: newProjectTextField.length > 0
Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: false
onClicked: {
let results = Database.newProject(newProjectTextField.text)
diff --git a/examples/quickcontrols/ios/todolist/MaxTasksPage.qml b/examples/quickcontrols/ios/todolist/MaxTasksPage.qml
index 509a460357..5b1a854617 100644
--- a/examples/quickcontrols/ios/todolist/MaxTasksPage.qml
+++ b/examples/quickcontrols/ios/todolist/MaxTasksPage.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
@@ -29,6 +29,7 @@ Page {
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: 10
+ Layout.fillWidth: false
onValueModified: AppSettings.maxTasks = maxTasksSpinbox.value
}
diff --git a/examples/quickcontrols/ios/todolist/NavBar.qml b/examples/quickcontrols/ios/todolist/NavBar.qml
index 4f57353dca..717993dfda 100644
--- a/examples/quickcontrols/ios/todolist/NavBar.qml
+++ b/examples/quickcontrols/ios/todolist/NavBar.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
diff --git a/examples/quickcontrols/ios/todolist/ProjectPage.qml b/examples/quickcontrols/ios/todolist/ProjectPage.qml
index a38ad04554..8319206fe9 100644
--- a/examples/quickcontrols/ios/todolist/ProjectPage.qml
+++ b/examples/quickcontrols/ios/todolist/ProjectPage.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
@@ -53,6 +53,7 @@ Page {
value: root.completedTasks
to: root.totalTasks
Layout.leftMargin: 20
+ Layout.fillWidth: false
}
}
@@ -159,7 +160,7 @@ Page {
anchors.leftMargin: 10
anchors.verticalCenter: parent.verticalCenter
icon.source: "images/close.png"
- icon.color: Qt.styleHints.appearance === Qt.Dark ? "white" : "black"
+ icon.color: Qt.styleHints.colorScheme === Qt.Dark ? "white" : "black"
onClicked: {
Database.deleteTask(taskList.taskId)
diff --git a/examples/quickcontrols/ios/todolist/SettingsPage.qml b/examples/quickcontrols/ios/todolist/SettingsPage.qml
index 4d2d7bef9f..0f6f708974 100644
--- a/examples/quickcontrols/ios/todolist/SettingsPage.qml
+++ b/examples/quickcontrols/ios/todolist/SettingsPage.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
@@ -52,7 +52,7 @@ Page {
required property string page
Image {
- source: Qt.styleHints.appearance === Qt.Dark ? "images/back-white.png"
+ source: Qt.styleHints.colorScheme === Qt.Dark ? "images/back-white.png"
: "images/back.png"
width: 20
height: 20
diff --git a/examples/quickcontrols/ios/todolist/ToggleCompletedTasksPage.qml b/examples/quickcontrols/ios/todolist/ToggleCompletedTasksPage.qml
index df2145866a..7e42eaf8f3 100644
--- a/examples/quickcontrols/ios/todolist/ToggleCompletedTasksPage.qml
+++ b/examples/quickcontrols/ios/todolist/ToggleCompletedTasksPage.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
@@ -27,6 +27,7 @@ Page {
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: 10
+ Layout.fillWidth: false
onClicked: AppSettings.showDoneTasks = checked
}
diff --git a/examples/quickcontrols/ios/todolist/main.qml b/examples/quickcontrols/ios/todolist/main.qml
index a0067643f1..d4318dfd69 100644
--- a/examples/quickcontrols/ios/todolist/main.qml
+++ b/examples/quickcontrols/ios/todolist/main.qml
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Window
diff --git a/examples/quickcontrols/ios/todolist/src/main.cpp b/examples/quickcontrols/ios/todolist/src/main.cpp
index 4f158402a2..f0b0e194fb 100644
--- a/examples/quickcontrols/ios/todolist/src/main.cpp
+++ b/examples/quickcontrols/ios/todolist/src/main.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QQmlApplicationEngine>
diff --git a/examples/quickcontrols/quickcontrols.pro b/examples/quickcontrols/quickcontrols.pro
index b7fc57bca6..7baf731218 100644
--- a/examples/quickcontrols/quickcontrols.pro
+++ b/examples/quickcontrols/quickcontrols.pro
@@ -4,11 +4,12 @@ SUBDIRS += \
chattutorial \
texteditor \
contactlist \
- sidepanel \
- swipetoremove \
wearable \
- imagine/automotive \
- imagine/musicplayer
+ imagine/automotive
+
+win32|macos|unix {
+ qtHaveModule(svg): SUBDIRS += filesystemexplorer
+}
qtHaveModule(sql): SUBDIRS += eventcalendar
qtHaveModule(widgets): SUBDIRS += flatstyle
diff --git a/examples/quickcontrols/sidepanel/CMakeLists.txt b/examples/quickcontrols/sidepanel/CMakeLists.txt
deleted file mode 100644
index fa65ea1f11..0000000000
--- a/examples/quickcontrols/sidepanel/CMakeLists.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(sidepanel LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/sidepanel")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick)
-
-qt_add_executable(sidepanelexample WIN32 MACOSX_BUNDLE
- sidepanel.cpp
-)
-
-qt_add_qml_module(sidepanelexample
- URI sidepanel
- NO_RESOURCE_TARGET_PATH
- QML_FILES
- "sidepanel.qml"
- RESOURCES
- "images/qt-logo.png"
- "images/qt-logo@2x.png"
- "images/qt-logo@3x.png"
- "images/qt-logo@4x.png"
- "qtquickcontrols2.conf"
- "doc/images/qtquickcontrols-sidepanel-landscape.png"
- "doc/images/qtquickcontrols-sidepanel-portrait.png"
-)
-
-target_link_libraries(sidepanelexample PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Quick
-)
-
-install(TARGETS sidepanelexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/quickcontrols/sidepanel/doc/images/qtquickcontrols-sidepanel-landscape.png b/examples/quickcontrols/sidepanel/doc/images/qtquickcontrols-sidepanel-landscape.png
deleted file mode 100644
index 86907591b2..0000000000
--- a/examples/quickcontrols/sidepanel/doc/images/qtquickcontrols-sidepanel-landscape.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/sidepanel/doc/images/qtquickcontrols-sidepanel-portrait.png b/examples/quickcontrols/sidepanel/doc/images/qtquickcontrols-sidepanel-portrait.png
deleted file mode 100644
index cf1ed2efd0..0000000000
--- a/examples/quickcontrols/sidepanel/doc/images/qtquickcontrols-sidepanel-portrait.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/sidepanel/doc/src/qtquickcontrols-sidepanel.qdoc b/examples/quickcontrols/sidepanel/doc/src/qtquickcontrols-sidepanel.qdoc
deleted file mode 100644
index 7029099d0f..0000000000
--- a/examples/quickcontrols/sidepanel/doc/src/qtquickcontrols-sidepanel.qdoc
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example sidepanel
- \keyword Qt Quick Controls - Side Panel
- \title Qt Quick Controls - Side Panel
- \keyword Qt Quick Controls 2 - Side Panel
- \ingroup qtquickcontrols-examples
- \brief A persistent side panel with Drawer.
-
- This example demonstrates how \l Drawer can be used as a persistent side
- panel.
-
- \raw HTML
- <div class="table"><table style="background:transparent; border:0px">
- <tr><td style="border:0px">
- \endraw
- \image qtquickcontrols-sidepanel-portrait.png
- \caption An interactive Drawer in portrait mode
- \raw HTML
- </td><td style="border:0px">
- \endraw
- \image qtquickcontrols-sidepanel-landscape.png
- \caption A non-interactive Drawer in landscape mode
- \raw HTML
- </td></tr>
- </table></div>
- \endraw
-
- When the application is in portrait mode, the drawer is an interactive
- side panel that can be swiped open from the left edge. It appears on
- top of the content, blocking user interaction through its modal
- background. When the application is in landscape mode, the drawer and
- the content are laid out side-by-side.
-
- The current orientation of the application is determined by comparing
- the width and height of the window:
-
- \snippet sidepanel/sidepanel.qml orientation
-
- This is used to determine whether the drawer should be \l {Popup::}{modal}
- and \l {Drawer::}{interactive}, and to configure its \l {Drawer::}{position}
- and \l {Popup::visible}{visibility} accordingly.
-
- \quotefromfile sidepanel/sidepanel.qml
- \skipto Drawer
- \printline Drawer
- \dots 8
- \codeline
- \skipto modal
- \printuntil visible
- \dots 8
- \skipuntil ScrollIndicator
- \skipuntil }
- \printline }
-
- \include examples-run.qdocinc
-*/
diff --git a/examples/quickcontrols/sidepanel/images/qt-logo.png b/examples/quickcontrols/sidepanel/images/qt-logo.png
deleted file mode 100644
index dff7729515..0000000000
--- a/examples/quickcontrols/sidepanel/images/qt-logo.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/sidepanel/images/qt-logo@2x.png b/examples/quickcontrols/sidepanel/images/qt-logo@2x.png
deleted file mode 100644
index dbd73aab77..0000000000
--- a/examples/quickcontrols/sidepanel/images/qt-logo@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/sidepanel/images/qt-logo@3x.png b/examples/quickcontrols/sidepanel/images/qt-logo@3x.png
deleted file mode 100644
index 68e763b597..0000000000
--- a/examples/quickcontrols/sidepanel/images/qt-logo@3x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/sidepanel/images/qt-logo@4x.png b/examples/quickcontrols/sidepanel/images/qt-logo@4x.png
deleted file mode 100644
index 08fd882572..0000000000
--- a/examples/quickcontrols/sidepanel/images/qt-logo@4x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/sidepanel/sidepanel.cpp b/examples/quickcontrols/sidepanel/sidepanel.cpp
deleted file mode 100644
index c78329d9de..0000000000
--- a/examples/quickcontrols/sidepanel/sidepanel.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include <QGuiApplication>
-#include <QQmlApplicationEngine>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- QQmlApplicationEngine engine;
- engine.load(QUrl("qrc:/sidepanel.qml"));
- if (engine.rootObjects().isEmpty())
- return -1;
-
- return app.exec();
-}
diff --git a/examples/quickcontrols/sidepanel/sidepanel.pro b/examples/quickcontrols/sidepanel/sidepanel.pro
deleted file mode 100644
index bbf118b361..0000000000
--- a/examples/quickcontrols/sidepanel/sidepanel.pro
+++ /dev/null
@@ -1,19 +0,0 @@
-TEMPLATE = app
-TARGET = sidepanel
-QT += quick
-
-SOURCES += \
- sidepanel.cpp
-
-RESOURCES += \
- doc/images/qtquickcontrols-sidepanel-landscape.png \
- doc/images/qtquickcontrols-sidepanel-portrait.png \
- images/qt-logo@2x.png \
- images/qt-logo@3x.png \
- images/qt-logo@4x.png \
- images/qt-logo.png \
- qtquickcontrols2.conf \
- sidepanel.qml
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/sidepanel
-INSTALLS += target
diff --git a/examples/quickcontrols/sidepanel/sidepanel.qml b/examples/quickcontrols/sidepanel/sidepanel.qml
deleted file mode 100644
index de767a9bb6..0000000000
--- a/examples/quickcontrols/sidepanel/sidepanel.qml
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-
-ApplicationWindow {
- id: window
- width: 360
- height: 520
- visible: true
- title: qsTr("Side Panel")
-
- //! [orientation]
- readonly property bool inPortrait: window.width < window.height
- //! [orientation]
-
- ToolBar {
- id: overlayHeader
-
- z: 1
- width: parent.width
- parent: Overlay.overlay
-
- Label {
- id: label
- anchors.centerIn: parent
- text: "Qt Quick Controls"
- }
- }
-
- Drawer {
- id: drawer
-
- y: overlayHeader.height
- width: window.width / 2
- height: window.height - overlayHeader.height
-
- modal: inPortrait
- interactive: inPortrait
- position: inPortrait ? 0 : 1
- visible: !inPortrait
-
- ListView {
- id: listView
- anchors.fill: parent
-
- headerPositioning: ListView.OverlayHeader
- header: Pane {
- id: header
- z: 2
- width: parent.width
-
- contentHeight: logo.height
-
- Image {
- id: logo
- width: parent.width
- source: "images/qt-logo.png"
- fillMode: implicitWidth > width ? Image.PreserveAspectFit : Image.Pad
- }
-
- MenuSeparator {
- parent: header
- width: parent.width
- anchors.verticalCenter: parent.bottom
- visible: !listView.atYBeginning
- }
- }
-
- footer: ItemDelegate {
- id: footer
- text: qsTr("Footer")
- width: parent.width
-
- MenuSeparator {
- parent: footer
- width: parent.width
- anchors.verticalCenter: parent.top
- }
- }
-
- model: 10
-
- delegate: ItemDelegate {
- text: qsTr("Title %1").arg(index + 1)
- width: listView.width
- }
-
- ScrollIndicator.vertical: ScrollIndicator { }
- }
- }
-
- Flickable {
- id: flickable
-
- anchors.fill: parent
- anchors.topMargin: overlayHeader.height
- anchors.leftMargin: !inPortrait ? drawer.width : undefined
-
- topMargin: 20
- bottomMargin: 20
- contentHeight: column.height
-
- Column {
- id: column
- spacing: 20
- anchors.margins: 20
- anchors.left: parent.left
- anchors.right: parent.right
-
- Label {
- font.pixelSize: 22
- width: parent.width
- elide: Label.ElideRight
- horizontalAlignment: Qt.AlignHCenter
- text: qsTr("Side Panel Example")
- }
-
- Label {
- width: parent.width
- wrapMode: Label.WordWrap
- text: qsTr("This example demonstrates how Drawer can be used as a non-closable persistent side panel.\n\n" +
- "When the application is in portrait mode, the drawer is an interactive side panel that can " +
- "be swiped open from the left edge. When the application is in landscape mode, the drawer " +
- "and the content are laid out side by side.\n\nThe application is currently in %1 mode.").arg(inPortrait ? qsTr("portrait") : qsTr("landscape"))
- }
- }
-
- ScrollIndicator.vertical: ScrollIndicator { }
- }
-}
diff --git a/examples/quickcontrols/spreadsheets/CMakeLists.txt b/examples/quickcontrols/spreadsheets/CMakeLists.txt
new file mode 100644
index 0000000000..de15fee0d1
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/CMakeLists.txt
@@ -0,0 +1,46 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(SpreadsheetsExample VERSION 1.0 LANGUAGES CXX)
+
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+find_package(Qt6 6.8 REQUIRED COMPONENTS Gui Qml)
+
+qt_standard_project_setup(REQUIRES 6.8)
+
+add_subdirectory(Spreadsheets)
+
+qt_add_executable(${PROJECT_NAME} WIN32
+ main.cpp
+)
+
+target_link_libraries(${PROJECT_NAME} PRIVATE
+ Qt6::Gui
+ Qt6::Qml
+ Spreadsheets
+)
+
+qt_add_resources(${PROJECT_NAME} "spareadsheet_icon"
+ PREFIX "/qt/examples/spreadsheet/icons"
+ FILES spreadsheet.svg
+)
+
+# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
+# If you are developing for iOS or macOS you should consider setting an
+# explicit, fixed bundle identifier manually though.
+set_target_properties(${PROJECT_NAME} PROPERTIES
+# MACOSX_BUNDLE_GUI_IDENTIFIER "io.qt.examples.Spreadsheets"
+ MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
+ MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
+ MACOSX_BUNDLE TRUE
+ WIN32_EXECUTABLE TRUE
+)
+
+# include(GNUInstallDirs)
+install(TARGETS ${PROJECT_NAME}
+ BUNDLE DESTINATION .
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+)
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/CMakeLists.txt b/examples/quickcontrols/spreadsheets/Spreadsheets/CMakeLists.txt
new file mode 100644
index 0000000000..9c2f66c0a0
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/CMakeLists.txt
@@ -0,0 +1,47 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(Spreadsheets LANGUAGES CXX)
+
+find_package(Qt6 6.8 REQUIRED COMPONENTS Core Quick Qml)
+qt_standard_project_setup(REQUIRES 6.8)
+
+qt_add_qml_module(${PROJECT_NAME}
+ URI Spreadsheets
+ VERSION 1.0
+ QML_FILES
+ Main.qml
+ TableCell.qml
+ HeaderToolBar.qml
+ HelpDialog.qml
+ SOURCES
+ datamodel.h datamodel.cpp
+ spreadcell.h spreadcell.cpp
+ spreadformula.h spreadformula.cpp
+ spreadkey.h
+ spreadmimedataprovider.h spreadmimedataprovider.cpp
+ spreadmodel.h spreadmodel.cpp
+ spreadrole.h
+ RESOURCES
+ icons/insert_column_left.svg
+ icons/insert_column_right.svg
+ icons/insert_row_above.svg
+ icons/insert_row_below.svg
+ icons/remove_column.svg
+ icons/remove_row.svg
+ icons/pan.svg
+ icons/paste.svg
+ icons/copy.svg
+ icons/cut.svg
+ icons/help.svg
+ icons/hide.svg
+ icons/show.svg
+ icons/reset_reordering.svg
+)
+
+target_link_libraries(${PROJECT_NAME} PRIVATE
+ Qt6::Core
+ Qt6::Quick
+ Qt6::Qml
+)
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/HeaderToolBar.qml b/examples/quickcontrols/spreadsheets/Spreadsheets/HeaderToolBar.qml
new file mode 100644
index 0000000000..d3f6f26c77
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/HeaderToolBar.qml
@@ -0,0 +1,96 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Item {
+ id: root
+ implicitHeight: 40
+ implicitWidth: 40
+
+ property alias panEnabled: panButton.checked
+ readonly property int __icon_size: 20
+
+ signal helpRequested()
+ signal cutRequested()
+ signal copyRequested()
+ signal pasteRequested()
+
+ ToolBar {
+ anchors.fill: parent
+
+ RowLayout {
+ anchors.fill: parent
+
+ ToolButton {
+ id: helpButton
+ icon.source: "icons/help.svg"
+ icon.width: root.__icon_size
+ icon.height: root.__icon_size
+ icon.color: palette.text
+ onClicked: helpRequested()
+ ToolTip {
+ text: qsTr("Help")
+ visible: helpButton.hovered
+ }
+ }
+
+ ToolButton {
+ id: panButton
+ icon.source: "icons/pan.svg"
+ icon.color: palette.text
+ icon.width: root.__icon_size
+ icon.height: root.__icon_size
+ flat: true
+ checkable: true
+ ToolTip {
+ text: qsTr("Pan")
+ visible: panButton.hovered
+ }
+ }
+
+ ToolButton {
+ id: cutButton
+ icon.source: "icons/cut.svg"
+ icon.color: palette.text
+ icon.width: root.__icon_size
+ icon.height: root.__icon_size
+ onClicked: cutRequested()
+ ToolTip {
+ text: qsTr("Cut")
+ visible: cutButton.hovered
+ }
+ }
+
+ ToolButton {
+ id: copyButton
+ icon.source: "icons/copy.svg"
+ icon.color: palette.text
+ icon.width: root.__icon_size
+ icon.height: root.__icon_size
+ onClicked: copyRequested()
+ ToolTip {
+ text: qsTr("Copy")
+ visible: copyButton.hovered
+ }
+ }
+
+ ToolButton {
+ id: pasteButton
+ icon.source: "icons/paste.svg"
+ icon.color: palette.text
+ icon.width: root.__icon_size
+ icon.height: root.__icon_size
+ onClicked: pasteRequested()
+ ToolTip {
+ text: qsTr("Paste")
+ visible: pasteButton.hovered
+ }
+ }
+
+ Item { Layout.fillWidth: true }
+ }
+ }
+}
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/HelpDialog.qml b/examples/quickcontrols/spreadsheets/Spreadsheets/HelpDialog.qml
new file mode 100644
index 0000000000..e98fbd8f2e
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/HelpDialog.qml
@@ -0,0 +1,111 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Dialog {
+ id: root
+ modal: true
+ standardButtons: Dialog.Ok
+
+ component SectionHelpInfo: Item {
+ property alias sectionText: section.text
+ property alias sectionDescription: sectionDesc.text
+
+ RowLayout {
+ anchors.fill: parent
+ anchors.leftMargin: 20
+
+ Item {
+ implicitWidth: 40
+ Layout.fillHeight: true
+
+ Label {
+ id: section
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+
+ Rectangle {
+ implicitWidth: 90
+ color: palette.base
+ border.width: 1
+ border.color: Qt.styleHints.colorScheme === Qt.Light ? palette.dark : palette.light
+ Layout.fillHeight: true
+
+ Label {
+ id: sectionDesc
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+ }
+ }
+
+ contentItem: ColumnLayout {
+ spacing: 10
+
+ Item {
+ Layout.topMargin: 20
+ Layout.leftMargin: 20
+ Layout.rightMargin: 20
+ implicitWidth: infoLabel.width
+ implicitHeight: infoLabel.height
+
+ Label {
+ id: infoLabel
+ text: qsTr("A formula starts with `=` follows with the operator and arguments.\n" +
+ "Formula could be")
+ }
+ }
+
+ SectionHelpInfo {
+ implicitHeight: 30
+ Layout.fillWidth: true
+ Layout.leftMargin: 40
+ sectionText: "Cell assignment"
+ sectionDescription: "=A1"
+ }
+
+ SectionHelpInfo {
+ implicitHeight: 30
+ Layout.fillWidth: true
+ Layout.leftMargin: 40
+ sectionText: "Addition"
+ sectionDescription: "=A1+A2"
+ }
+
+ SectionHelpInfo {
+ implicitHeight: 30
+ Layout.fillWidth: true
+ Layout.leftMargin: 40
+ sectionText: "Subtraction"
+ sectionDescription: "=A1-A2"
+ }
+
+ SectionHelpInfo {
+ implicitHeight: 30
+ Layout.fillWidth: true
+ Layout.leftMargin: 40
+ sectionText: "Division"
+ sectionDescription: "=A1/A2"
+ }
+
+ SectionHelpInfo {
+ implicitHeight: 30
+ Layout.fillWidth: true
+ Layout.leftMargin: 40
+ sectionText: "Multiplication"
+ sectionDescription: "=A1*A2"
+ }
+
+ SectionHelpInfo {
+ implicitHeight: 30
+ Layout.fillWidth: true
+ Layout.leftMargin: 40
+ sectionText: "Summation"
+ sectionDescription: "=SUM A1:A2"
+ }
+ }
+}
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/Main.qml b/examples/quickcontrols/spreadsheets/Spreadsheets/Main.qml
new file mode 100644
index 0000000000..8bd748067e
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/Main.qml
@@ -0,0 +1,846 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Qt.labs.qmlmodels
+
+import Spreadsheets
+
+ApplicationWindow {
+ width: 960
+ height: 720
+ visible: true
+ title: qsTr("Spreadsheets")
+
+ header: HeaderToolBar {
+ id: toolbar
+ panEnabled: false
+ onHelpRequested: helpDialog.open()
+ onPasteRequested: tableView.pasteFromClipboard()
+ onCopyRequested: tableView.copyToClipboard()
+ onCutRequested: tableView.cutToClipboard()
+ }
+
+ background: Rectangle {
+ // to make contrast with the cells of the TableView,
+ // HorizontalHeaderView and VerticalHeaderView
+ color: Qt.styleHints.colorScheme === Qt.Light ? palette.dark : palette.light
+ }
+
+ GridLayout {
+ id: gridlayout
+ anchors.fill: parent
+ anchors.margins: 4
+ columns: 2
+ rows: 2
+ columnSpacing: 3
+ rowSpacing: 3
+
+ HorizontalHeaderView {
+ id: horizontalHeaderView
+ Layout.row: 0
+ Layout.column: 1
+ Layout.fillWidth: true
+ implicitHeight: 36
+ clip: true
+ interactive: toolbar.panEnabled
+ syncView: tableView
+
+ selectionModel: HeaderSelectionModel {
+ id: horizontalHeaderSelectionModel
+ selectionModel: selectionModel
+ orientation: Qt.Horizontal
+ }
+
+ movableColumns: true
+ onColumnMoved: (index, old_column, new_column) => model.mapColumn(index, new_column)
+
+ delegate: Rectangle {
+ id: horizontalHeaderDelegate
+
+ required property var index
+ required property bool selected
+ required property bool containsDrag
+ readonly property real cellPadding: 8
+ readonly property bool containsMenu: columnMenu.column === column
+
+ implicitWidth: horizontalTitle.implicitWidth + (cellPadding * 2)
+ implicitHeight: Math.max(horizontalHeaderView.height,
+ horizontalTitle.implicitHeight + (cellPadding * 2))
+ border {
+ width: containsDrag || containsMenu ? 1 : 0
+ color: palette.highlight
+ }
+ color: selected ? palette.highlight : palette.button
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: Qt.styleHints.colorScheme === Qt.Light ? horizontalHeaderDelegate.color
+ : Qt.lighter(horizontalHeaderDelegate.color, 1.3)
+ }
+ GradientStop {
+ position: 1
+ color: Qt.styleHints.colorScheme === Qt.Light ? Qt.darker(horizontalHeaderDelegate.color, 1.3)
+ : horizontalHeaderDelegate.color
+ }
+ }
+
+ Label {
+ id: horizontalTitle
+ anchors.centerIn: parent
+ text: model.columnName
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ anchors.leftMargin: horizontalHeaderDelegate.cellPadding / 2
+ anchors.rightMargin: horizontalHeaderDelegate.cellPadding / 2
+ acceptedButtons: Qt.LeftButton | Qt.RightButton
+
+ onPressed: function(event) {
+ if (event.modifiers === Qt.AltModifier) {
+ event.accepted = false
+ return
+ }
+ }
+
+ onClicked: function(event) {
+ switch (event.button) {
+ case Qt.LeftButton:
+ if (event.modifiers & Qt.ControlModifier)
+ selectionModel.toggleColumn(index)
+ else
+ selectionModel.selectColumn(index)
+ break
+ case Qt.RightButton:
+ columnMenu.column = index
+ const menu_pos = mapToItem(horizontalHeaderView, -anchors.margins, height + anchors.margins)
+ columnMenu.popup(menu_pos)
+ break
+ }
+ }
+ }
+ }
+ Menu {
+ id: columnMenu
+
+ property int column: -1
+
+ onOpened: {
+ horizontalHeaderSelectionModel.setCurrent(column)
+ }
+
+ onClosed: {
+ horizontalHeaderSelectionModel.setCurrent()
+ column = -1
+ }
+
+ MenuItem {
+ text: qsTr("Insert 1 column left")
+ icon {
+ source: "icons/insert_column_left.svg"
+ color: palette.highlightedText
+ }
+
+ onClicked: {
+ if (columnMenu.column < 0)
+ return
+ SpreadModel.insertColumn(columnMenu.column)
+ }
+ }
+
+ MenuItem {
+ text: qsTr("Insert 1 column right")
+ icon {
+ source: "icons/insert_column_right.svg"
+ color: palette.highlightedText
+ }
+
+ onClicked: {
+ if (columnMenu.column < 0)
+ return
+ SpreadModel.insertColumn(columnMenu.column + 1)
+ }
+ }
+
+ MenuItem {
+ text: selectionModel.hasSelection ? qsTr("Remove selected columns")
+ : qsTr("Remove column")
+ icon {
+ source: "icons/remove_column.svg"
+ color: palette.text
+ }
+
+ onClicked: {
+ if (selectionModel.hasSelection)
+ SpreadModel.removeColumns(selectionModel.selectedColumns())
+ else if (columnMenu.column >= 0)
+ SpreadModel.removeColumn(columnMenu.column)
+ }
+ }
+
+ MenuItem {
+ text: selectionModel.hasSelection ? qsTr("Hide selected columns")
+ : qsTr("Hide column")
+ icon {
+ source: "icons/hide.svg"
+ color: palette.text
+ }
+
+ onClicked: {
+ if (selectionModel.hasSelection) {
+ let columns = selectionModel.selectedColumns()
+ columns.sort(function(lhs, rhs){ return rhs.column - lhs.column })
+ for (let i in columns)
+ tableView.hideColumn(columns[i].column)
+ selectionModel.clearSelection()
+ } else {
+ tableView.hideColumn(columnMenu.column)
+ }
+ }
+ }
+
+ MenuItem {
+ text: qsTr("Show hidden column(s)")
+ icon {
+ source: "icons/show.svg"
+ color: palette.text
+ }
+
+ enabled: tableView.hiddenColumnCount
+
+ onClicked: {
+ tableView.showHiddenColumns()
+ selectionModel.clearSelection()
+ }
+ }
+
+ MenuItem {
+ text: qsTr("Reset column reordering")
+ icon {
+ source: "icons/reset_reordering.svg"
+ color: palette.text
+ }
+
+ onClicked: tableView.resetColumnReordering()
+ }
+ }
+ }
+
+ VerticalHeaderView {
+ id: verticalHeaderView
+
+ Layout.fillHeight: true
+ implicitWidth: 50
+ clip: true
+ syncView: tableView
+ interactive: toolbar.panEnabled
+ movableRows: true
+
+ selectionModel: HeaderSelectionModel {
+ id: verticalHeaderSelectionModel
+ selectionModel: selectionModel
+ orientation: Qt.Vertical
+ }
+
+ onRowMoved: (index, old_row, new_row) => model.mapRow(index, new_row)
+
+ delegate: Rectangle {
+ id: verticalHeaderDelegate
+
+ required property var index
+ required property bool selected
+ required property bool current
+ required property bool containsDrag
+ readonly property real cellPadding: 8
+
+ implicitHeight: verticalTitle.implicitHeight + (cellPadding * 2)
+ implicitWidth: Math.max(verticalHeaderView.width,
+ verticalTitle.implicitWidth + (cellPadding * 2))
+
+ border {
+ width: containsDrag || current ? 1 : 0
+ color: palette.highlight
+ }
+
+ color: selected ? palette.highlight : palette.button
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: Qt.styleHints.colorScheme === Qt.Light ? verticalHeaderDelegate.color
+ : Qt.lighter(verticalHeaderDelegate.color, 1.3)
+ }
+ GradientStop {
+ position: 1
+ color: Qt.styleHints.colorScheme === Qt.Light ? Qt.darker(verticalHeaderDelegate.color, 1.3)
+ : verticalHeaderDelegate.color
+ }
+ }
+
+ Label {
+ id: verticalTitle
+ anchors.centerIn: parent
+ text: model.rowName
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ anchors.topMargin: verticalHeaderDelegate.cellPadding / 2
+ anchors.bottomMargin: verticalHeaderDelegate.cellPadding / 2
+ acceptedButtons: Qt.LeftButton | Qt.RightButton
+
+ onPressed: function(event) {
+ if (event.modifiers === Qt.AltModifier) {
+ event.accepted = false
+ return
+ }
+ }
+
+ onClicked: function(event) {
+ switch (event.button) {
+ case Qt.LeftButton:
+ if (event.modifiers & Qt.ControlModifier)
+ selectionModel.toggleRow(index)
+ else
+ selectionModel.selectRow(index)
+ break
+ case Qt.RightButton:
+ rowMenu.row = index
+ const menu_pos = mapToItem(verticalHeaderView, width + anchors.margins, -anchors.margins)
+ rowMenu.popup(menu_pos)
+ break
+ }
+ }
+ }
+ }
+ Menu {
+ id: rowMenu
+
+ property int row: -1
+
+ onOpened: {
+ verticalHeaderSelectionModel.setCurrent(row)
+ }
+
+ onClosed: {
+ verticalHeaderSelectionModel.setCurrent()
+ row = -1
+ }
+
+ MenuItem {
+ text: qsTr("Insert 1 row above")
+ icon {
+ source: "icons/insert_row_above.svg"
+ color: palette.highlightedText
+ }
+
+ onClicked: {
+ if (rowMenu.row < 0)
+ return
+ SpreadModel.insertRow(rowMenu.row)
+ }
+ }
+
+ MenuItem {
+ text: qsTr("Insert 1 row bellow")
+ icon {
+ source: "icons/insert_row_below.svg"
+ color: palette.text
+ }
+
+ onClicked: {
+ if (rowMenu.row < 0)
+ return
+ SpreadModel.insertRow(rowMenu.row + 1)
+ }
+ }
+
+ MenuItem {
+ text: selectionModel.hasSelection ? qsTr("Remove selected rows")
+ : qsTr("Remove row")
+ icon {
+ source: "icons/remove_row.svg"
+ color: palette.text
+ }
+
+ onClicked: {
+ if (selectionModel.hasSelection)
+ SpreadModel.removeRows(selectionModel.selectedRows())
+ else if (rowMenu.row >= 0)
+ SpreadModel.removeRow(rowMenu.row)
+ }
+ }
+
+ MenuItem {
+ text: selectionModel.hasSelection ? qsTr("Hide selected rows")
+ : qsTr("Hide row")
+ icon {
+ source: "icons/hide.svg"
+ color: palette.text
+ }
+
+ onClicked: {
+ if (selectionModel.hasSelection) {
+ let rows = selectionModel.selectedRows()
+ rows.sort(function(lhs, rhs){ return rhs.row - lhs.row })
+ for (let i in rows)
+ tableView.hideRow(rows[i].row)
+ selectionModel.clearSelection()
+ } else {
+ tableView.hideRow(rowMenu.row)
+ }
+ }
+ }
+
+ MenuItem {
+ text: qsTr("Show hidden row(s)")
+ icon {
+ source: "icons/show.svg"
+ color: palette.text
+ }
+ enabled: tableView.hiddenRowCount
+
+ onClicked: {
+ tableView.showHiddenRows()
+ selectionModel.clearSelection()
+ }
+ }
+
+ MenuItem {
+ text: qsTr("Reset row reordering")
+ icon {
+ source: "icons/reset_reordering.svg"
+ color: palette.text
+ }
+
+ onClicked: tableView.resetRowReordering()
+ }
+ }
+ }
+
+ Item {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ TableView {
+ id: tableView
+
+ property int hiddenColumnCount: 0
+ property int hiddenRowCount: 0
+
+ anchors.fill: parent
+ clip: true
+ columnSpacing: 2
+ rowSpacing: 2
+ boundsBehavior: Flickable.StopAtBounds
+ selectionBehavior: TableView.SelectCells
+ selectionMode: TableView.ExtendedSelection
+ selectionModel: selectionModel
+ interactive: toolbar.panEnabled
+ model: SpreadModel
+
+ function showHiddenColumns()
+ {
+ for (let column = 0; column < columns; ++column) {
+ if (explicitColumnWidth(column) === 0)
+ setColumnWidth(column, -1)
+ }
+ hiddenColumnCount = 0
+ }
+
+ function hideColumn(column)
+ {
+ if (column < 0)
+ return
+ setColumnWidth(column, 0)
+ ++hiddenColumnCount
+ }
+
+ function showHiddenRows()
+ {
+ for (let row = 0; row < rows; ++row) {
+ if (explicitRowHeight(row) === 0)
+ setRowHeight(row, -1)
+ }
+ hiddenRowCount = 0
+ }
+
+ function hideRow(row)
+ {
+ if (row < 0)
+ return
+ setRowHeight(row, 0)
+ ++hiddenRowCount
+ }
+
+ function copyToClipboard()
+ {
+ mimeDataProvider.reset()
+ if (selectionModel.hasSelection) {
+ const source_index = selectionModel.selectedIndexes[0]
+ mimeDataProvider.sourceCell = cellAtIndex(source_index)
+ mimeDataProvider.loadSelectedData()
+ } else {
+ const current_index = selectionModel.currentIndex
+ const current_cell = cellAtIndex(current_index)
+ mimeDataProvider.sourceCell = current_cell
+ mimeDataProvider.loadDataFromModel(current_cell, current_index, model)
+ }
+ }
+
+ function cutToClipboard()
+ {
+ mimeDataProvider.reset()
+ if (selectionModel.hasSelection) {
+ const source_index = selectionModel.selectedIndexes[0]
+ mimeDataProvider.sourceCell = cellAtIndex(source_index)
+ mimeDataProvider.loadSelectedData()
+ } else {
+ const current_index = selectionModel.currentIndex
+ const current_cell = cellAtIndex(current_index)
+ mimeDataProvider.sourceCell = current_cell
+ mimeDataProvider.loadDataFromModel(current_cell, current_index, model)
+ }
+ mimeDataProvider.includeCutData = true
+ }
+
+ function pasteFromClipboard()
+ {
+ visibleCellsConnection.blockConnection(true)
+ const current_index = selectionModel.currentIndex
+ const current_cell = cellAtIndex(current_index)
+
+ let target_cells = new Set()
+ if (mimeDataProvider.size() === 1) {
+ if (selectionModel.hasSelection) {
+ for (let i in selectionModel.selectedIndexes) {
+ const selected_index = selectionModel.selectedIndexes[i]
+ mimeDataProvider.saveDataToModel(0, selected_index, model)
+ target_cells.add(tableView.cellAtIndex(selected_index))
+ }
+ } else {
+ const old_cell = mimeDataProvider.cellAt(0)
+ let new_cell = Qt.point(old_cell.x, old_cell.y)
+ new_cell.x += current_cell.x - mimeDataProvider.sourceCell.x
+ new_cell.y += current_cell.y - mimeDataProvider.sourceCell.y
+ mimeDataProvider.saveDataToModel(0, index(new_cell.y, new_cell.x), model)
+ target_cells.add(new_cell)
+ }
+ } else if (mimeDataProvider.size() > 1) {
+ for (let i = 0; i < mimeDataProvider.size(); ++i) {
+ let cell_i = mimeDataProvider.cellAt(i)
+ cell_i.x += current_cell.x - mimeDataProvider.sourceCell.x
+ cell_i.y += current_cell.y - mimeDataProvider.sourceCell.y
+ mimeDataProvider.saveDataToModel(i, index(cell_i.y, cell_i.x), model)
+ target_cells.add(cell_i)
+ }
+ }
+ if (mimeDataProvider.includeCutData) {
+ for (let i = 0; i < mimeDataProvider.size(); ++i) {
+ const cell_i = mimeDataProvider.cellAt(i)
+ if (!target_cells.has(cell_i))
+ model.clearItemData(index(cell_i.y, cell_i.x))
+ }
+ mimeDataProvider.includeCutData = false
+ }
+ visibleCellsConnection.blockConnection(false)
+ visibleCellsConnection.updateViewArea()
+ }
+
+ function resetColumnReordering()
+ {
+ clearColumnReordering()
+ model.resetColumnMapping()
+ }
+
+ function resetRowReordering()
+ {
+ clearRowReordering()
+ model.resetRowMapping()
+ }
+
+ ScrollBar.horizontal: ScrollBar { }
+ ScrollBar.vertical: ScrollBar { }
+
+ rowHeightProvider: function(row) {
+ const height = explicitRowHeight(row)
+ if (height === 0)
+ return 0
+ else if (height > 0)
+ return Math.max(height, 30)
+ return implicitRowWidth(row)
+ }
+
+ columnWidthProvider: function(column) {
+ const width = explicitColumnWidth(column)
+ if (width === 0)
+ return 0
+ else if (width > 0)
+ return Math.max(width, 30)
+ return implicitColumnWidth(column)
+ }
+
+ delegate: TableCell {
+ required property var model
+
+ implicitWidth: 90
+ implicitHeight: 36
+ text: model.display ?? ""
+ // We don't create data for empty cells to reduce
+ // the memory usage in case of huge model.
+ // If a cell does not have data and it's not highlighted neither
+ // the model.highlight is undefined which is replaced with false value.
+ highlight: model.highlight ?? false
+ edit: model.edit ?? ""
+
+ onCommit: text => model.edit = text
+ }
+
+ Keys.onPressed: function (event) {
+ if (event.matches(StandardKey.Copy)) {
+ copyToClipboard()
+ } else if (event.matches(StandardKey.Cut)) {
+ cutToClipboard()
+ } else if (event.matches(StandardKey.Paste)) {
+ pasteFromClipboard()
+ } else if (event.matches(StandardKey.Delete)) {
+ visibleCellsConnection.blockConnection()
+ if (selectionModel.hasSelection)
+ model.clearItemData(selectionModel.selectedIndexes)
+ else
+ model.clearItemData(selectionModel.currentIndex)
+ visibleCellsConnection.blockConnection(false)
+ visibleCellsConnection.updateViewArea()
+ }
+ }
+
+ Connections {
+ id: visibleCellsConnection
+ target: SpreadModel
+
+ function onDataChanged(tl, br, roles)
+ {
+ updateViewArea()
+ }
+
+ // The model is updated, then the visible area needs to be updated as well.
+ // Maybe some cells need to get the display data again
+ // due to their data, if it's a formula.
+ function updateViewArea()
+ {
+ for (let row = tableView.topRow; row <= tableView.bottomRow; ++row) {
+ for (let column = tableView.leftColumn; column <= tableView.rightColumn; ++column) {
+ SpreadModel.update(row, column)
+ }
+ }
+ }
+
+ // Blocks/unblocks the connection. This function is useful when
+ // some actions may update a large amount of data in the model,
+ // or may update a cell which affects other cells,
+ // for example clipboard actions and drag/drop actions.
+ // Block the connection, update the model, unblock the connection,
+ // and the call the updateViewArea() function to update the view.
+ function blockConnection(block=true)
+ {
+ visibleCellsConnection.enabled = !block
+ }
+ }
+
+ MouseArea {
+ id: dragArea
+
+ property point dragCell: Qt.point(-1, -1)
+ property bool hadSelection: false
+
+ anchors.fill: parent
+ drag.axis: Drag.XandYAxis
+ drag.target: dropArea
+ acceptedButtons: Qt.LeftButton
+ cursorShape: drag.active ? Qt.ClosedHandCursor : Qt.ArrowCursor
+
+ onPressed: function(mouse) {
+ mouse.accepted = false
+ // only when Alt modifier is pressed
+ if (mouse.modifiers !== Qt.AltModifier)
+ return
+ // check cell under press position
+ const position = Qt.point(mouse.x, mouse.y)
+ const cell = tableView.cellAtPosition(position, true)
+ if (cell.x < 0 || cell.y < 0)
+ return
+ // check selected indexes
+ const index = tableView.index(cell.y, cell.x)
+ hadSelection = selectionModel.hasSelection
+ if (!hadSelection)
+ selectionModel.select(index, ItemSelectionModel.Select)
+ if (!selectionModel.isSelected(index))
+ return
+ // store selected data
+ mimeDataProvider.reset()
+ mimeDataProvider.loadSelectedData()
+ // accept dragging
+ if (mimeDataProvider.size() > 0) {
+ mouse.accepted = true
+ dragCell = cell
+ }
+
+ dropArea.startDragging()
+ }
+
+ onReleased: {
+ dropArea.stopDragging()
+ // reset selection, if dragging caused the selection
+ if (!hadSelection)
+ selectionModel.clearSelection()
+ hadSelection = false
+ dragCell = Qt.point(-1, -1)
+ }
+ }
+ }
+
+ DropArea {
+ id: dropArea
+
+ property point dropCell: Qt.point(-1, -1)
+
+ anchors.fill: tableView
+ Drag.active: dragArea.drag.active
+
+ function startDragging()
+ {
+ // block updating visible area
+ visibleCellsConnection.blockConnection()
+ }
+
+ function stopDragging()
+ {
+ Drag.drop()
+ // unblock update visible area
+ visibleCellsConnection.blockConnection(false)
+ visibleCellsConnection.updateViewArea() // now update visible area
+ }
+
+ onDropped: {
+ const position = Qt.point(dragArea.mouseX, dragArea.mouseY)
+ dropCell = tableView.cellAtPosition(position, true)
+ if (dropCell.x < 0 || dropCell.y < 0)
+ return
+ if (dragArea.dragCell === dropCell)
+ return
+
+ tableView.model.clearItemData(selectionModel.selectedIndexes)
+ for (let i = 0; i < mimeDataProvider.size(); ++i) {
+ let cell = mimeDataProvider.cellAt(i)
+ cell.x += dropCell.x - dragArea.dragCell.x
+ cell.y += dropCell.y - dragArea.dragCell.y
+ const index = tableView.index(cell.y, cell.x)
+ mimeDataProvider.saveDataToModel(i, index, tableView.model)
+ }
+ mimeDataProvider.reset()
+ selectionModel.clearSelection()
+
+ const drop_index = tableView.index(dropCell.y, dropCell.x)
+ selectionModel.setCurrentIndex(drop_index, ItemSelectionModel.Current)
+
+ tableView.model.clearHighlight()
+ }
+
+ onPositionChanged: {
+ const position = Qt.point(dragArea.mouseX, dragArea.mouseY)
+ // cell is the cell that currently mouse is over it
+ const cell = tableView.cellAtPosition(position, true)
+ // dropCell is the cell that it was under the mouse's last position
+ // if the last and current cells are the same, then there is no need
+ // to update highlight, as nothing is changed since last time.
+ if (cell === dropCell)
+ return
+ // if something is changed, it means that if the current cell is changed,
+ // then clear highlighted cells and update the dropCell.
+ tableView.model.clearHighlight()
+ dropCell = cell
+ // if the current cell was invalid (mouse is out side of the TableView)
+ // then no need to update highlight
+ if (cell.x < 0 || cell.y < 0)
+ return
+ // if dragged cell is the same as the (possibly) dropCell
+ // then no need to highlight any cells
+ if (dragArea.dragCell === dropCell)
+ return
+ // if the dropCell is not the same as the dragging cell and also
+ // is not the same as the cell at the mouse's last position
+ // then highlights the target cells
+ for (let i in selectionModel.selectedIndexes) {
+ const old_index = selectionModel.selectedIndexes[i]
+ let cell = tableView.cellAtIndex(old_index)
+ cell.x += dropCell.x - dragArea.dragCell.x
+ cell.y += dropCell.y - dragArea.dragCell.y
+ const new_index = tableView.index(cell.y, cell.x)
+ tableView.model.setHighlight(new_index, true)
+ }
+ }
+ }
+ }
+ }
+
+ SelectionRectangle {
+ id: selectionRectangle
+ target: tableView
+ selectionMode: SelectionRectangle.Auto
+
+ topLeftHandle: Rectangle {
+ width: 20
+ height: 20
+ radius: 10
+ color: Qt.styleHints.colorScheme === Qt.Light ? palette.highlight.lighter(1.4)
+ : palette.highlight.darker(1.4)
+ visible: SelectionRectangle.control.active
+ }
+
+ bottomRightHandle: Rectangle {
+ width: 20
+ height: 20
+ radius: 10
+ color: Qt.styleHints.colorScheme === Qt.Light ? palette.highlight.lighter(1.4)
+ : palette.highlight.darker(1.4)
+ visible: SelectionRectangle.control.active
+ }
+ }
+
+ SpreadSelectionModel {
+ id: selectionModel
+ behavior: SpreadSelectionModel.SelectCells
+ }
+
+ SpreadMimeDataProvider {
+ id: mimeDataProvider
+
+ property bool includeCutData: false
+ property point sourceCell: Qt.point(-1, -1)
+
+ function loadSelectedData()
+ {
+ for (let i in selectionModel.selectedIndexes) {
+ const index = selectionModel.selectedIndexes[i]
+ const cell = tableView.cellAtIndex(index)
+ loadDataFromModel(cell, index, tableView.model)
+ }
+ }
+
+ function resetProvider()
+ {
+ sourceCell = Qt.point(-1, -1)
+ includeCutData = false
+ reset()
+ }
+ }
+
+ HelpDialog {
+ id: helpDialog
+ anchors.centerIn: parent
+ }
+}
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/TableCell.qml b/examples/quickcontrols/spreadsheets/Spreadsheets/TableCell.qml
new file mode 100644
index 0000000000..80941ad79a
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/TableCell.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Rectangle {
+ id: root
+ clip: true
+
+ property alias text: textItem.text
+ property bool highlight: false
+ required property bool current
+ required property bool selected
+ required property bool editing
+ required property string edit
+
+ signal commit(text: string)
+
+ readonly property bool __darkMode: Qt.styleHints.colorScheme === Qt.Dark
+ border {
+ width: (!editing && current) ? 1 : 0
+ color: current ? palette.highlight.darker(__darkMode ? 0.7 : 1.9) : palette.base
+ }
+ readonly property color __highlight_color: __darkMode
+ ? palette.highlight.darker(1.9)
+ : palette.highlight.lighter(1.9)
+ color: highlight ? __highlight_color : selected ? palette.highlight : palette.base
+
+ Label {
+ id: textItem
+ anchors { fill: parent; margins: 5 }
+ visible: !root.editing
+ }
+
+ TableView.editDelegate: TextField {
+ anchors.fill: root
+ text: root.edit
+ TableView.onCommit: root.commit(text)
+ }
+}
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/datamodel.cpp b/examples/quickcontrols/spreadsheets/Spreadsheets/datamodel.cpp
new file mode 100644
index 0000000000..c27b693173
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/datamodel.cpp
@@ -0,0 +1,266 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "datamodel.h"
+#include "spreadrole.h"
+
+bool DataModel::empty() const
+{
+ return m_keys.empty();
+}
+
+std::pair<SpreadKey, SpreadKey> DataModel::clearHighlight()
+{
+ SpreadKey top_left{INT_MAX, INT_MAX};
+ SpreadKey bottom_right{-1, -1};
+
+ for (auto it = m_cells.begin(); it != m_cells.end();) {
+ it.value().set(spread::Role::Hightlight, false);
+ if (it.key().first < top_left.first)
+ top_left.first = it.key().first;
+ if (it.key().second < top_left.second)
+ top_left.second = it.key().second;
+ if (bottom_right.first < it.key().first)
+ bottom_right.first = it.key().first;
+ if (bottom_right.second < it.key().second)
+ bottom_right.second = it.key().second;
+ if (it.value().isNull()) {
+ m_keys.remove(it.value().id);
+ auto cit = spread::make_const(m_cells, it);
+ it = m_cells.erase(cit);
+ } else {
+ ++it;
+ }
+ }
+
+ return std::make_pair(top_left, bottom_right);
+}
+
+bool DataModel::setHighlight(const SpreadKey &key, bool highlight)
+{
+ if (auto it = m_cells.find(key); it != m_cells.end()) {
+ it.value().set(spread::Role::Hightlight, highlight);
+ if (it.value().isNull()) {
+ m_keys.remove(it.value().id);
+ auto cit = spread::make_const(m_cells, it);
+ m_cells.erase(cit);
+ }
+ return true;
+ }
+ if (highlight) {
+ SpreadCell cell;
+ cell.set(spread::Role::Hightlight, true);
+ cell.id = ++lastId;
+ m_cells.insert(key, cell);
+ m_keys.insert(cell.id, key);
+ return true;
+ }
+ // we skipped false highlight for non-existing cell
+ // because we don't store cells with only false hightlight data
+ // to save memory
+ return false;
+}
+
+QVariant DataModel::getData(int id, int role) const
+{
+ auto it_key = m_keys.find(id);
+ if (it_key == m_keys.end())
+ return QVariant{};
+ const SpreadKey &key = it_key.value();
+ auto it_cell = m_cells.find(key);
+ if (it_cell == m_cells.end())
+ return QVariant{};
+ return it_cell.value().get(role);
+}
+
+QVariant DataModel::getData(const SpreadKey &key, int role) const
+{
+ auto it = m_cells.find(key);
+ return it == m_cells.end() ? QVariant{} : it.value().get(role);
+}
+
+bool DataModel::setData(const SpreadKey &key, const QVariant &value, int role)
+{
+ // special roles
+ switch (role) {
+ case spread::Role::Hightlight:
+ return setHighlight(key, value.toBool());
+ default: break;
+ }
+
+ // no special handling for the role
+ if (auto it = m_cells.find(key); it != m_cells.end()) {
+ it.value().set(role, value);
+ if (it.value().isNull()) {
+ clearData(key);
+ return true;
+ }
+ } else {
+ SpreadCell cell;
+ cell.set(role, value);
+ cell.id = ++lastId;
+ if (!cell.isNull()) {
+ m_cells.insert(key, cell);
+ m_keys.insert(cell.id, key);
+ }
+ }
+
+ return true;
+}
+
+bool DataModel::clearData(const SpreadKey &key)
+{
+ auto find_key = [&key](const auto &i) { return i == key; };
+ auto it = std::find_if(m_keys.cbegin(), m_keys.cend(), find_key);
+ if (it == m_keys.cend())
+ return 0;
+ m_keys.erase(it);
+ return m_cells.remove(key) > 0;
+}
+
+void DataModel::shiftColumns(int from, int count)
+{
+ if (count > 0) {
+ // the reason for reverse iteration is because of the coverage of
+ // the updated keys (bigger keys) and existing keys (next keys)
+ QMapIterator i(m_cells);
+ i.toBack();
+ while (i.hasPrevious()) {
+ i.previous();
+ if (i.key().second >= from) {
+ SpreadKey key = i.key();
+ SpreadCell cell = i.value();
+ m_cells.remove(key);
+ key.second += count;
+ m_cells.insert(key, cell);
+ }
+ }
+ } else if (count < 0) {
+ // the reason for normal iteration is because of the coverage of
+ // the updated keys (smaller keys) and existing keys (previous keys)
+ for (auto it = m_cells.begin(); it != m_cells.end(); ++it) {
+ if (it.key().second >= from) {
+ SpreadKey key = it.key();
+ SpreadCell cell = it.value();
+ m_cells.remove(key);
+ key.second += count;
+ m_cells.insert(key, cell);
+ }
+ }
+ }
+
+ if (count != 0) {
+ for (auto it = m_keys.begin(); it != m_keys.end(); ++it) {
+ SpreadKey &key = it.value();
+ if (key.second >= from)
+ key.second += count;
+ }
+ }
+}
+
+void DataModel::removeColumnCells(int column)
+{
+ for (auto it = m_cells.begin(); it != m_cells.end(); ) {
+ if (it.key().second == column) {
+ auto cit = spread::make_const(m_cells, it);
+ it = m_cells.erase(cit);
+ } else {
+ ++it;
+ }
+ }
+
+ for (auto it = m_keys.begin(); it != m_keys.end(); ) {
+ if (it.value().second == column) {
+ auto cit = spread::make_const(m_keys, it);
+ it = m_keys.erase(cit);
+ } else {
+ ++it;
+ }
+ }
+}
+
+void DataModel::shiftRows(int from, int count)
+{
+ if (count > 0) {
+ // the reason for reverse iteration is because of the coverage of
+ // the updated keys (bigger keys) and existing keys (next keys)
+ QMapIterator i(m_cells);
+ i.toBack();
+ while (i.hasPrevious()) {
+ if (i.key().first < from)
+ break;
+ SpreadKey key = i.key();
+ SpreadCell cell = i.value();
+ m_cells.remove(key);
+ key.first += count;
+ m_cells.insert(key, cell);
+ }
+ } else if (count < 0) {
+ // the reason for normal iteration is because of the coverage of
+ // the updated keys (smaller keys) and existing keys (previous keys)
+ for (auto it = m_cells.begin(); it != m_cells.end(); ++it) {
+ if (it.key().first >= from) {
+ SpreadKey key = it.key();
+ SpreadCell cell = it.value();
+ m_cells.remove(key);
+ key.first += count;
+ m_cells.insert(key, cell);
+ }
+ }
+ }
+
+ if (count != 0) {
+ for (auto it = m_keys.begin(); it != m_keys.end(); ++it) {
+ SpreadKey &key = it.value();
+ if (key.first >= from)
+ key.first += count;
+ }
+ }
+}
+
+void DataModel::removeRowCells(int row)
+{
+ for (auto it = m_cells.begin(); it != m_cells.end(); ) {
+ if (it.key().first == row) {
+ auto cit = spread::make_const(m_cells, it);
+ it = m_cells.erase(cit);
+ } else {
+ ++it;
+ }
+ }
+
+ for (auto it = m_keys.begin(); it != m_keys.end(); ) {
+ if (it.value().first == row) {
+ auto cit = spread::make_const(m_keys, it);
+ it = m_keys.erase(cit);
+ } else {
+ ++it;
+ }
+ }
+}
+
+int DataModel::createId(const SpreadKey &key)
+{
+ auto find_key = [&key](const auto &elem) { return key == elem; };
+ auto it = std::find_if(m_keys.begin(), m_keys.end(), find_key);
+ if (it != m_keys.end())
+ return it.key();
+ const int id = ++lastId;
+ m_keys.insert(id, key);
+ return id;
+}
+
+int DataModel::getId(const SpreadKey &key) const
+{
+ auto find_key = [&key](const auto &elem) { return key == elem; };
+ auto it = std::find_if(m_keys.begin(), m_keys.end(), find_key);
+ if (it == m_keys.end())
+ return 0;
+ return it.key();
+}
+
+SpreadKey DataModel::getKey(int id) const
+{
+ auto it = m_keys.find(id);
+ return it == m_keys.end() ? SpreadKey{-1, -1} : it.value();
+}
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/datamodel.h b/examples/quickcontrols/spreadsheets/Spreadsheets/datamodel.h
new file mode 100644
index 0000000000..de64f4d0bd
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/datamodel.h
@@ -0,0 +1,63 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef DATAMODEL_H
+#define DATAMODEL_H
+
+#include "spreadcell.h"
+#include "spreadkey.h"
+
+/**********************************************************
+ * The DataModel struct manages the binding of data, keys,
+ * and ids. There are some special functionalities that are
+ * only related to data and keys, like
+ * shifting columns and rows
+ * inserting column and row
+ * removing columns and rows, and
+ * managing only the data.
+ * This struct is extracted from the SpreadModel, and the
+ * intention is to simplify the SpreadModel class and also
+ * encapsulate any data-related concepts.
+ **********************************************************/
+struct DataModel
+{
+ bool empty() const;
+
+ /******************************************************
+ * Unsets highlight of highlighted data.
+ * Returns a pair of top-left and bottom-right keys of updated cells
+ ******************************************************/
+ std::pair<SpreadKey, SpreadKey> clearHighlight();
+ /******************************************************
+ * Sets highlight role of data.
+ * Returns true if any cell updated, otherwise, false.
+ ******************************************************/
+ bool setHighlight(const SpreadKey &key, bool highlight);
+
+ QVariant getData(int id, int role) const;
+ QVariant getData(const SpreadKey &key, int role) const;
+ bool setData(const SpreadKey &key, const QVariant &value, int role);
+ bool clearData(const SpreadKey &key);
+
+ void shiftColumns(int from, int count);
+ void removeColumnCells(int column);
+
+ void shiftRows(int from, int count);
+ void removeRowCells(int row);
+
+ /******************************************************
+ * If the key already exists in the model, returns the
+ * id; otherwise, adds the key, assignes an id, and
+ * returns the id.
+ ******************************************************/
+ int createId(const SpreadKey &key);
+ int getId(const SpreadKey &key) const;
+ SpreadKey getKey(int id) const;
+
+private:
+ uint lastId = 0;
+ QMap<SpreadKey, SpreadCell> m_cells;
+ QMap<int, SpreadKey> m_keys;
+};
+
+#endif // DATAMODEL_H
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/copy.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/copy.svg
new file mode 100644
index 0000000000..9510d9750f
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/copy.svg
@@ -0,0 +1,6 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="File / copy_general_fill">
+<path id="Layer01" fill-rule="evenodd" clip-rule="evenodd" d="M6 20C5.44754 20 5 19.5524 5 19.0003V6C5 5.44772 4.55228 5 4 5C3.44772 5 3 5.44772 3 6V19.0003C3 20.6573 4.34333 22 6 22H16C16.5523 22 17 21.5523 17 21C17 20.4477 16.5523 20 16 20H6Z" fill="#0D0D0D"/>
+<rect id="Layer02" x="6" y="2" width="14" height="17" rx="2" fill="#0D0D0D"/>
+</g>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/cut.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/cut.svg
new file mode 100644
index 0000000000..c87d677894
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/cut.svg
@@ -0,0 +1,6 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="Edit / cut">
+<path id="Layer01" fill-rule="evenodd" clip-rule="evenodd" d="M19.4142 3H21.2929C21.6834 3 22 3.31658 22 3.70711C22 3.89464 21.9255 4.0745 21.7929 4.20711L15 11L13 9L18.7071 3.29289C18.8946 3.10536 19.149 3 19.4142 3ZM10 12L12 14L9.70711 16.2929C9.68701 16.313 9.66627 16.3321 9.64495 16.3501C9.87301 16.8531 10 17.4117 10 18C10 20.2091 8.20914 22 6 22C3.79086 22 2 20.2091 2 18C2 15.7909 3.79086 14 6 14C6.58827 14 7.14688 14.127 7.64991 14.3551C7.66794 14.3337 7.68701 14.313 7.70711 14.2929L10 12ZM8 18C8 19.1046 7.10457 20 6 20C4.89543 20 4 19.1046 4 18C4 16.8954 4.89543 16 6 16C7.10457 16 8 16.8954 8 18Z" fill="#0D0D0D"/>
+<path id="Layer02" fill-rule="evenodd" clip-rule="evenodd" d="M7.64991 9.64495C7.14688 9.87301 6.58827 10 6 10C3.79086 10 2 8.20914 2 6C2 3.79086 3.79086 2 6 2C8.20914 2 10 3.79086 10 6C10 6.58827 9.87301 7.14688 9.64495 7.64992C9.66627 7.66795 9.68701 7.68701 9.70711 7.70711L21.7929 19.7929C21.9255 19.9255 22 20.1054 22 20.2929C22 20.6834 21.6834 21 21.2929 21H19.4142C19.149 21 18.8946 20.8946 18.7071 20.7071L7.70711 9.70711C7.68701 9.68701 7.66794 9.66627 7.64991 9.64495ZM8 6C8 7.10457 7.10457 8 6 8C4.89543 8 4 7.10457 4 6C4 4.89543 4.89543 4 6 4C7.10457 4 8 4.89543 8 6ZM13 12C13 12.5523 12.5523 13 12 13C11.4477 13 11 12.5523 11 12C11 11.4477 11.4477 11 12 11C12.5523 11 13 11.4477 13 12Z" fill="#0D0D0D"/>
+</g>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/help.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/help.svg
new file mode 100644
index 0000000000..a911efaade
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/help.svg
@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="Navigation / help_question_circle_fill">
+<path id="Layer01" fill-rule="evenodd" clip-rule="evenodd" d="M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2ZM11.0859 13.1913C11.0305 13.6404 11.4243 14 11.8735 14C12.3172 14 12.65 13.6271 12.7863 13.2017C12.8088 13.1315 12.834 13.0635 12.8614 12.9937C12.9699 12.7167 13.2775 12.3375 13.7841 11.8562C14.1605 11.4771 14.4572 11.1161 14.6743 10.7734C14.8914 10.4307 15 10.0187 15 9.5375C15 8.72083 14.7033 8.09375 14.1098 7.65625C13.5164 7.21875 12.8143 7 12.0038 7C11.1787 7 10.5093 7.21875 9.99543 7.65625C9.47937 8.13493 9.18688 8.71516 9.03161 9.20479C8.88562 9.66512 9.26613 10.0625 9.74578 10.0625C10.2209 10.0625 10.5687 9.65217 10.7158 9.19697C10.7473 9.09933 10.7885 9.0118 10.8422 8.94687C11.0955 8.64062 11.4827 8.4875 12.0038 8.4875C12.467 8.4875 12.8143 8.6151 13.0459 8.87031C13.2775 9.12552 13.3933 9.40625 13.3933 9.7125C13.3933 10.0042 13.3065 10.2776 13.1328 10.5328C12.9591 10.788 12.742 11.025 12.4814 11.2437C11.8446 11.8125 11.4537 12.2427 11.309 12.5344C11.2968 12.5589 11.2847 12.5825 11.2728 12.6058L11.2726 12.6061C11.1938 12.7598 11.1218 12.9004 11.0859 13.1913ZM13 16C13 15.4477 12.5523 15 12 15C11.4477 15 11 15.4477 11 16C11 16.5523 11.4477 17 12 17C12.5523 17 13 16.5523 13 16Z" fill="#0D0D0D"/>
+</g>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/hide.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/hide.svg
new file mode 100644
index 0000000000..08acd995ce
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/hide.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M19.4968 15.7897C20.2836 14.7793 20.9142 13.7515 21.4279 12.9142L21.4279 12.9142C21.6371 12.5732 21.8269 12.2638 22 12C21.8651 11.743 21.7267 11.4676 21.5817 11.179C20.1143 8.25938 17.9737 4 12 4C10.6125 4 9.41059 4.24746 8.36812 4.66102L11.717 8.00986C11.8105 8.00332 11.9048 8 12 8C14.2091 8 16 9.79086 16 12C16 12.0952 15.9967 12.1895 15.9901 12.283L19.4968 15.7897ZM2 12C2.55147 10.6765 3.50324 8.46339 5.28578 6.69999L8.55382 9.96803C8.20193 10.5635 8 11.2582 8 12C8 14.2091 9.79086 16 12 16C12.7418 16 13.4365 15.7981 14.032 15.4462L16.9327 18.347C15.5944 19.3254 13.9735 20 12 20C6.80109 20 4.08117 15.4622 2.47108 12.776C2.3024 12.4945 2.1459 12.2334 2 12ZM10 12C10 11.8208 10.0236 11.6472 10.0677 11.482L12.518 13.9323C12.3528 13.9764 12.1792 14 12 14C10.8954 14 10 13.1046 10 12Z" fill="#0D0D0D"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M2.29289 2.29289C2.68342 1.90237 3.31658 1.90237 3.70711 2.29289L21.7071 20.2929C22.0976 20.6834 22.0976 21.3166 21.7071 21.7071C21.3166 22.0976 20.6834 22.0976 20.2929 21.7071L2.29289 3.70711C1.90237 3.31658 1.90237 2.68342 2.29289 2.29289Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_column_left.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_column_left.svg
new file mode 100644
index 0000000000..a11ce748aa
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_column_left.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2C2.89543 2 2 2.89543 2 4V20C2 21.1046 2.89543 22 4 22H20C21.1046 22 22 21.1046 22 20V4C22 2.89543 21.1046 2 20 2H4ZM12 16C11.4477 16 11 15.5523 11 15V13H9C8.44772 13 8 12.5523 8 12C8 11.4477 8.44772 11 9 11H11V9C11 8.44772 11.4477 8 12 8C12.5523 8 13 8.44772 13 9V11H15C15.5523 11 16 11.4477 16 12C16 12.5523 15.5523 13 15 13H13V15C13 15.5523 12.5523 16 12 16Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_column_right.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_column_right.svg
new file mode 100644
index 0000000000..a11ce748aa
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_column_right.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2C2.89543 2 2 2.89543 2 4V20C2 21.1046 2.89543 22 4 22H20C21.1046 22 22 21.1046 22 20V4C22 2.89543 21.1046 2 20 2H4ZM12 16C11.4477 16 11 15.5523 11 15V13H9C8.44772 13 8 12.5523 8 12C8 11.4477 8.44772 11 9 11H11V9C11 8.44772 11.4477 8 12 8C12.5523 8 13 8.44772 13 9V11H15C15.5523 11 16 11.4477 16 12C16 12.5523 15.5523 13 15 13H13V15C13 15.5523 12.5523 16 12 16Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_row_above.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_row_above.svg
new file mode 100644
index 0000000000..a11ce748aa
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_row_above.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2C2.89543 2 2 2.89543 2 4V20C2 21.1046 2.89543 22 4 22H20C21.1046 22 22 21.1046 22 20V4C22 2.89543 21.1046 2 20 2H4ZM12 16C11.4477 16 11 15.5523 11 15V13H9C8.44772 13 8 12.5523 8 12C8 11.4477 8.44772 11 9 11H11V9C11 8.44772 11.4477 8 12 8C12.5523 8 13 8.44772 13 9V11H15C15.5523 11 16 11.4477 16 12C16 12.5523 15.5523 13 15 13H13V15C13 15.5523 12.5523 16 12 16Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_row_below.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_row_below.svg
new file mode 100644
index 0000000000..a11ce748aa
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/insert_row_below.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2C2.89543 2 2 2.89543 2 4V20C2 21.1046 2.89543 22 4 22H20C21.1046 22 22 21.1046 22 20V4C22 2.89543 21.1046 2 20 2H4ZM12 16C11.4477 16 11 15.5523 11 15V13H9C8.44772 13 8 12.5523 8 12C8 11.4477 8.44772 11 9 11H11V9C11 8.44772 11.4477 8 12 8C12.5523 8 13 8.44772 13 9V11H15C15.5523 11 16 11.4477 16 12C16 12.5523 15.5523 13 15 13H13V15C13 15.5523 12.5523 16 12 16Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/pan.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/pan.svg
new file mode 100644
index 0000000000..4b31e22134
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/pan.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5.29285 8.29287C5.68337 7.90234 6.31653 7.90234 6.70706 8.29286C7.09759 8.68338 7.0976 9.31654 6.70707 9.70707L5.41417 11H9.00002C9.55231 11 10 11.4477 10 12C10 12.5523 9.55231 13 9.00002 13H5.41418L6.70706 14.2929C7.09759 14.6834 7.0976 15.3165 6.70707 15.7071C6.31655 16.0976 5.68339 16.0976 5.29286 15.7071L2.36357 12.7779C1.93399 12.3483 1.93398 11.6518 2.36356 11.2222L5.29285 8.29287ZM14 12C14 11.4477 14.4477 11 15 11H18.5857L17.2929 9.70714C16.9023 9.31661 16.9023 8.68345 17.2929 8.29292C17.6834 7.9024 18.3165 7.9024 18.7071 8.29292L21.6364 11.2222C22.0659 11.6518 22.0659 12.3483 21.6364 12.7778L18.7071 15.7071C18.3165 16.0977 17.6834 16.0977 17.2929 15.7071C16.9023 15.3166 16.9023 14.6834 17.2929 14.2929L18.5858 13H15C14.4477 13 14 12.5523 14 12Z" fill="#0D0D0D"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M8.29295 5.25147C7.90243 5.642 7.90243 6.27516 8.29295 6.66569C8.68348 7.05621 9.31664 7.05621 9.70717 6.66569L11 5.37285V9.00001C11 9.55229 11.4477 10 12 10C12.5523 10 13 9.55229 13 9.00001V5.37273L14.293 6.66569C14.6835 7.05621 15.3166 7.05621 15.7072 6.66569C16.0977 6.27516 16.0977 5.642 15.7072 5.25147L12.7779 2.32218C12.3483 1.89261 11.6518 1.8926 11.2222 2.32218L8.29295 5.25147ZM13.0003 18.5441L13 14.9999C12.9999 14.4476 12.5522 14 11.9999 14C11.4476 14.0001 10.9999 14.4478 11 15.0001L11.0003 18.5447L9.7071 17.2515C9.31657 16.8609 8.68341 16.861 8.29289 17.2515C7.90237 17.642 7.90237 18.2752 8.2929 18.6657L11.2223 21.595C11.6518 22.0246 12.3483 22.0245 12.7779 21.595L15.7071 18.6657C16.0976 18.2752 16.0976 17.642 15.7071 17.2515C15.3166 16.8609 14.6834 16.861 14.2929 17.2515L13.0003 18.5441Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/paste.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/paste.svg
new file mode 100644
index 0000000000..ceb3e34169
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/paste.svg
@@ -0,0 +1,6 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="File / paste_general_fill">
+<path id="Layer01" d="M6 19.875C6 21.0486 6.96431 22 8.15385 22L17.8462 22C19.0357 22 20 21.0486 20 19.875L20 7.125C20 5.95139 19.0357 5 17.8462 5L8.15385 5C6.96431 5 6 5.95139 6 7.125L6 19.875Z" fill="#0D0D0D"/>
+<path id="Layer02" fill-rule="evenodd" clip-rule="evenodd" d="M5 18C3.89543 18 3 17.1046 3 16V4C3 2.89543 3.89543 2 5 2H14C15.1046 2 16 2.89543 16 4L7 4C5.89543 4 5 4.89543 5 6L5 18Z" fill="#0D0D0D"/>
+</g>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/remove_column.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/remove_column.svg
new file mode 100644
index 0000000000..2940d0a3c7
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/remove_column.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2C2.89543 2 2 2.89543 2 4V20C2 21.1046 2.89543 22 4 22H20C21.1046 22 22 21.1046 22 20V4C22 2.89543 21.1046 2 20 2H4ZM9 11C8.44772 11 8 11.4477 8 12C8 12.5523 8.44772 13 9 13H15C15.5523 13 16 12.5523 16 12C16 11.4477 15.5523 11 15 11H9Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/remove_row.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/remove_row.svg
new file mode 100644
index 0000000000..2940d0a3c7
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/remove_row.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4 2C2.89543 2 2 2.89543 2 4V20C2 21.1046 2.89543 22 4 22H20C21.1046 22 22 21.1046 22 20V4C22 2.89543 21.1046 2 20 2H4ZM9 11C8.44772 11 8 11.4477 8 12C8 12.5523 8.44772 13 9 13H15C15.5523 13 16 12.5523 16 12C16 11.4477 15.5523 11 15 11H9Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/reset_reordering.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/reset_reordering.svg
new file mode 100644
index 0000000000..d2e215251d
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/reset_reordering.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6.21258 8C7.81596 6.15774 9.35083 5 11.8996 5C15.8328 5 19 8.14572 19 12C19 15.8543 15.8328 19 11.8996 19C8.5127 19 5.68925 16.6644 4.97458 13.5539C4.85091 13.0156 4.31431 12.6795 3.77605 12.8032C3.23779 12.9268 2.9017 13.4634 3.02537 14.0017C3.9478 18.0165 7.57647 21 11.8996 21C16.9138 21 21 16.9823 21 12C21 7.01772 16.9138 3 11.8996 3C8.69412 3 6.69438 4.48317 5 6.35199V5C5 4.44772 4.55228 4 4 4C3.44772 4 3 4.44772 3 5V8.9C3 9.50751 3.49249 10 4.1 10H8C8.55228 10 9 9.55228 9 9C9 8.44772 8.55228 8 8 8H6.21258Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/icons/show.svg b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/show.svg
new file mode 100644
index 0000000000..b8e3141966
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/icons/show.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.5817 11.179C20.1143 8.25938 17.9737 4 12 4C5.4359 4 3.02564 9.53846 2 12C2.1459 12.2334 2.3024 12.4945 2.47108 12.776C4.08117 15.4622 6.80109 20 12 20C17.0808 20 19.8241 15.5284 21.4279 12.9142C21.6371 12.5732 21.8269 12.2638 22 12C21.8651 11.743 21.7267 11.4676 21.5817 11.179ZM14 12C14 13.1046 13.1046 14 12 14C10.8954 14 10 13.1046 10 12C10 10.8954 10.8954 10 12 10C13.1046 10 14 10.8954 14 12ZM16 12C16 14.2091 14.2091 16 12 16C9.79086 16 8 14.2091 8 12C8 9.79086 9.79086 8 12 8C14.2091 8 16 9.79086 16 12Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/spreadcell.cpp b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadcell.cpp
new file mode 100644
index 0000000000..b15818a426
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadcell.cpp
@@ -0,0 +1,69 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "spreadcell.h"
+#include "spreadrole.h"
+#include "spreadmodel.h"
+
+bool SpreadCell::isNull() const
+{
+ return !has(spread::Role::Display) && !has(spread::Role::Hightlight);
+}
+
+bool SpreadCell::has(int role) const
+{
+ switch (role) {
+ case spread::Role::Display:
+ case spread::Role::Edit:
+ return !text.isNull() && !text.isEmpty();
+ case spread::Role::Hightlight:
+ return highlight; // false highlight equals to no highlight set
+ default:
+ return false;
+ }
+}
+
+void SpreadCell::set(int role, const QVariant &data)
+{
+ switch (role) {
+ case spread::Role::Edit:
+ text = data.toString();
+ break;
+ case spread::Role::Hightlight:
+ highlight = data.toBool();
+ break;
+ default:
+ break;
+ }
+}
+
+QVariant SpreadCell::get(int role) const
+{
+ switch (role) {
+ case spread::Role::Edit:
+ return text;
+ case spread::Role::Display: {
+ const QString display_text = displayText();
+ return display_text.isNull() ? QVariant{} : display_text;
+ }
+ case spread::Role::Hightlight:
+ return highlight;
+ default:
+ return QVariant{};
+ }
+}
+
+QString SpreadCell::displayText() const
+{
+ SpreadModel *model = SpreadModel::instance();
+ const Formula formula = model->parseFormulaString(text);
+ if (!formula.isValid())
+ return text;
+ if (formula.firstOperandId() <= 0) // at least one arg should be available
+ return "#ERROR!";
+ if ((formula.firstOperandId() == id) || (formula.secondOperandId() == id))
+ return "#ERROR!"; // found loop
+ if (formula.includesLoop(model, model->dataModel()))
+ return "#ERROR!";
+ return model->formulaValueText(formula);
+}
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/spreadcell.h b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadcell.h
new file mode 100644
index 0000000000..0fb980ab9b
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadcell.h
@@ -0,0 +1,26 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SPREADCELL_H
+#define SPREADCELL_H
+
+#include <QVariant>
+
+struct SpreadCell {
+ friend struct DataModel;
+
+ bool isNull() const;
+ bool has(int role) const;
+ void set(int role, const QVariant &data);
+ QVariant get(int role) const;
+
+private:
+ QString displayText() const;
+
+private:
+ uint id = 0;
+ QString text;
+ bool highlight = false;
+};
+
+#endif // SPREADCELL_H
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/spreadformula.cpp b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadformula.cpp
new file mode 100644
index 0000000000..87a961f40c
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadformula.cpp
@@ -0,0 +1,74 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "spreadformula.h"
+#include "datamodel.h"
+#include "spreadkey.h"
+#include "spreadrole.h"
+#include "spreadmodel.h"
+
+bool Formula::includesLoop(SpreadModel *model, const DataModel *dataModel, QSet<int> *history) const
+{
+ if (m_operator == Operator::Invalid)
+ return false;
+
+ if (history == nullptr) {
+ QSet<int> history;
+ return includesLoop(model, dataModel, &history);
+ }
+
+ if (m_operator == Operator::Sum) {
+ SpreadKey top_left = dataModel->getKey(m_cellIds.first);
+ SpreadKey bottom_right = dataModel->getKey(m_cellIds.second);
+ if (bottom_right.first < top_left.first)
+ std::swap(top_left.first, bottom_right.first);
+ if (bottom_right.second < top_left.second)
+ std::swap(top_left.second, bottom_right.second);
+ for (int row = top_left.first; row <= bottom_right.first; ++row) {
+ for (int column = top_left.second; column <= bottom_right.second; ++column) {
+ const int id = dataModel->getId(SpreadKey{row, column});
+ if (history->find(id) != history->end())
+ return true;
+ const QString edit_text = dataModel->getData(id, spread::Role::Edit).toString();
+ const Formula formula = model->parseFormulaString(edit_text);
+ if (!formula.isValid())
+ continue;
+ auto it = history->insert(id);
+ if (formula.includesLoop(model, dataModel, history))
+ return true;
+ auto cit = spread::make_const(*history, it);
+ history->erase(cit);
+ }
+ }
+ } else {
+ const int id_1 = m_cellIds.first;
+ if (history->find(id_1) != history->end())
+ return true;
+ const QString edit_text = dataModel->getData(id_1, spread::Role::Edit).toString();
+ const Formula formula = model->parseFormulaString(edit_text);
+ if (!formula.isValid())
+ return false;
+ auto it = history->insert(id_1);
+ if (formula.includesLoop(model, dataModel, history))
+ return true;
+ auto cit = spread::make_const(*history, it);
+ history->erase(cit);
+
+ if (m_operator != Operator::Assign) {
+ const int id_2 = m_cellIds.second;
+ if (history->find(id_2) != history->end())
+ return true;
+ const QString edit_text = dataModel->getData(id_2, spread::Role::Edit).toString();
+ const Formula formula = model->parseFormulaString(edit_text);
+ if (!formula.isValid())
+ return false;
+ auto it = history->insert(id_2);
+ if (formula.includesLoop(model, dataModel, history))
+ return true;
+ auto cit = spread::make_const(*history, it);
+ history->erase(cit);
+ }
+ }
+
+ return false;
+}
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/spreadformula.h b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadformula.h
new file mode 100644
index 0000000000..6548da10b3
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadformula.h
@@ -0,0 +1,43 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SPREADFORMULA_H
+#define SPREADFORMULA_H
+
+#include <QSet>
+
+class DataModel;
+class SpreadModel;
+
+struct Formula {
+ enum class Operator {
+ Invalid = 0,
+ Assign,
+ Add,
+ Sub,
+ Div,
+ Mul,
+ Sum,
+ };
+
+ static Formula create(Operator op, int arg1, int arg2) {
+ Formula formula;
+ formula.m_operator = op;
+ formula.m_cellIds.first = arg1;
+ formula.m_cellIds.second = arg2;
+ return formula;
+ }
+
+ bool isValid() const { return m_operator != Operator::Invalid; }
+ int firstOperandId() const { return m_cellIds.first; }
+ int secondOperandId() const { return m_cellIds.second; }
+ Operator getOperator() const { return m_operator; }
+
+ bool includesLoop(SpreadModel *model, const DataModel *dataModel, QSet<int> *history = nullptr) const;
+
+private:
+ Operator m_operator = Operator::Invalid;
+ std::pair<int, int> m_cellIds = {0, 0};
+};
+
+#endif // SPREADFORMULA_H
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/spreadkey.h b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadkey.h
new file mode 100644
index 0000000000..741cedb0ee
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadkey.h
@@ -0,0 +1,23 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SPREADKEY_H
+#define SPREADKEY_H
+
+#include <utility>
+
+namespace spread {
+// make a const_iterator from an iterator for the same container
+// to avoid mixing iterators with const_iterators warning
+template <typename Container>
+constexpr typename Container::const_iterator make_const(Container c, typename Container::iterator i)
+{
+ return typename Container::const_iterator(i);
+}
+}
+
+// using std::pair<> as SpreadKey for now
+// for any further updates it could be anything
+using SpreadKey = std::pair<int, int>;
+
+#endif // SPREADKEY_H
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/spreadmimedataprovider.cpp b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadmimedataprovider.cpp
new file mode 100644
index 0000000000..25a8d1b118
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadmimedataprovider.cpp
@@ -0,0 +1,88 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "spreadmimedataprovider.h"
+
+#include <QMimeData>
+#include <QGuiApplication>
+#include <QClipboard>
+
+namespace {
+static inline constexpr auto MIMETYPE_SPREADMODEL = "application/x-qtexamplespreadmodel";
+static inline constexpr auto MIMETYPE_SELECTEDDATA = "model/data";
+static inline constexpr auto MIMETYPE_TEXT = "text/plain";
+}
+
+QMimeData *SpreadMimeDataProvider::saveToMimeData() const
+{
+ if (m_data.empty())
+ return nullptr;
+
+ QByteArray data;
+ QDataStream stream{&data, QDataStream::WriteOnly};
+ for (auto it = m_data.begin(); it != m_data.end(); ++it) {
+ const QPoint &cell = it->first;
+ const QMap<int, QVariant> &item_data = it->second;
+ stream << cell.x() << cell.y() << item_data;
+ }
+
+ QMimeData *mime_data = new QMimeData{};
+ mime_data->setData(MIMETYPE_SPREADMODEL, QByteArray{});
+ mime_data->setData(MIMETYPE_SELECTEDDATA, data);
+ return mime_data;
+}
+
+bool SpreadMimeDataProvider::loadFromMimeData(const QMimeData *mimeData)
+{
+ if (!mimeData)
+ return false;
+
+ if (!mimeData->hasFormat(MIMETYPE_SPREADMODEL))
+ return false;
+
+ QByteArray data = mimeData->data(MIMETYPE_SELECTEDDATA);
+ QDataStream stream{&data, QDataStream::ReadOnly};
+ while (!stream.atEnd()) {
+ QPoint cell;
+ QMap<int, QVariant> item_data;
+ stream >> cell.rx() >> cell.ry() >> item_data;
+ m_data.push_back(std::make_pair(cell, item_data));
+ }
+
+ return true;
+}
+
+bool SpreadMimeDataProvider::saveToClipboard()
+{
+ QMimeData *mime_data = saveToMimeData();
+ if (!mime_data)
+ return false;
+
+ QGuiApplication::clipboard()->setMimeData(mime_data);
+ return true;
+}
+
+bool SpreadMimeDataProvider::loadFromClipboard()
+{
+ const QMimeData *mime_data = QGuiApplication::clipboard()->mimeData();
+ if (!mime_data)
+ return false;
+
+ return loadFromMimeData(mime_data);
+}
+
+bool SpreadMimeDataProvider::saveDataToModel(int index,
+ const QModelIndex &modelIndex,
+ QAbstractItemModel *model) const
+{
+ const QMap<int, QVariant> &item_data = m_data.at(index).second;
+ return model->setItemData(modelIndex, item_data);
+}
+
+void SpreadMimeDataProvider::loadDataFromModel(const QPoint &cell,
+ const QModelIndex &index,
+ const QAbstractItemModel *model)
+{
+ const QMap<int, QVariant> &item_data = model->itemData(index);
+ m_data.push_back(std::make_pair(cell, item_data));
+}
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/spreadmimedataprovider.h b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadmimedataprovider.h
new file mode 100644
index 0000000000..5082890c89
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadmimedataprovider.h
@@ -0,0 +1,39 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SPREADMIMEDATAPROVIDER_H
+#define SPREADMIMEDATAPROVIDER_H
+
+#include <QObject>
+#include <QAbstractItemModel>
+#include <QPoint>
+#include <QQmlEngine>
+
+class QMimeData;
+
+class SpreadMimeDataProvider : public QObject
+{
+ Q_OBJECT
+ QML_ELEMENT
+
+public:
+ QMimeData *saveToMimeData() const;
+ bool loadFromMimeData(const QMimeData *mimeData);
+
+ Q_INVOKABLE bool saveToClipboard();
+ Q_INVOKABLE bool loadFromClipboard();
+ Q_INVOKABLE void reset() { m_data.clear(); }
+ Q_INVOKABLE int size() const { return m_data.size(); }
+ Q_INVOKABLE QPoint cellAt(int index) const { return m_data.at(index).first; }
+ Q_INVOKABLE bool saveDataToModel(int index,
+ const QModelIndex &modelIndex,
+ QAbstractItemModel *model) const;
+ Q_INVOKABLE void loadDataFromModel(const QPoint &cell,
+ const QModelIndex &index,
+ const QAbstractItemModel *model);
+
+private:
+ std::vector<std::pair<QPoint, QMap<int, QVariant>>> m_data;
+};
+
+#endif // SPREADMIMEDATAPROVIDER_H
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/spreadmodel.cpp b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadmodel.cpp
new file mode 100644
index 0000000000..53f8feec33
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadmodel.cpp
@@ -0,0 +1,730 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "spreadmodel.h"
+#include "spreadrole.h"
+
+#include <QPoint>
+#include <QRegularExpression>
+
+int SpreadModel::columnNumberFromName(const QString &text)
+{
+ if (text.size() == 1)
+ return getModelColumn(text[0].toLatin1() - 'A');
+ else if (text.size() == 2)
+ return getModelColumn((text[0].toLatin1() - 'A' + 1) * 26 + (text[1].toLatin1() - 'A'));
+ return 0;
+}
+
+int SpreadModel::rowNumberFromName(const QString &text)
+{
+ return getModelRow(text.toInt() - 1);
+}
+
+SpreadModel *SpreadModel::instance()
+{
+ return s_instance;
+}
+
+SpreadModel *SpreadModel::create(QQmlEngine *, QJSEngine *)
+{
+ if (!s_instance)
+ s_instance = new SpreadModel {nullptr};
+ return s_instance;
+}
+
+void SpreadModel::update(int row, int column)
+{
+ if (!m_updateMutex.tryLock())
+ return;
+ column = getModelColumn(column);
+ row = getModelRow(row);
+ const QModelIndex index = this->index(row, column);
+ emit dataChanged(index, index, {spread::Role::Display,});
+ m_updateMutex.unlock();
+}
+
+void SpreadModel::clearHighlight()
+{
+ if (m_dataModel.empty())
+ return;
+
+ const auto [top_left, bottom_right] = m_dataModel.clearHighlight();
+
+ emit dataChanged(index(top_left.first, top_left.second),
+ index(bottom_right.first, bottom_right.second),
+ {spread::Role::Hightlight,});
+}
+
+void SpreadModel::setHighlight(const QModelIndex &index, bool highlight)
+{
+ if (!index.isValid())
+ return;
+ if (m_dataModel.setHighlight(SpreadKey{index.row(), index.column()}, highlight))
+ emit dataChanged(index, index, {spread::Role::Hightlight,});
+}
+
+int SpreadModel::rowCount(const QModelIndex &parent) const
+{
+ return m_size.first;
+}
+
+int SpreadModel::columnCount(const QModelIndex &parent) const
+{
+ return m_size.second;
+}
+
+QVariant SpreadModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid())
+ return QVariant{};
+
+ const int row = index.row();
+ const int column = index.column();
+
+ return m_dataModel.getData(SpreadKey{row, column}, role);
+}
+
+bool SpreadModel::setData(const QModelIndex &index, const QVariant &value, int role)
+{
+ if (!index.isValid())
+ return false;
+
+ const int row = index.row();
+ const int column = index.column();
+
+ if (m_dataModel.setData(SpreadKey{row, column}, value, role))
+ emit dataChanged(index, index);
+
+ return true;
+}
+
+bool SpreadModel::clearItemData(const QModelIndex &index)
+{
+ if (!index.isValid())
+ return false;
+ if (m_dataModel.clearData(SpreadKey{index.row(), index.column()})) {
+ emit dataChanged(index, index);
+ return true;
+ }
+ return false;
+}
+
+Qt::ItemFlags SpreadModel::flags(const QModelIndex &index) const
+{
+ if (!index.isValid())
+ return Qt::NoItemFlags;
+ return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable;
+}
+
+QHash<int, QByteArray> SpreadModel::roleNames() const
+{
+ return {{spread::Role::Display, "display"},
+ {spread::Role::Edit, "edit"},
+ {spread::Role::ColumnName, "columnName"},
+ {spread::Role::RowName, "rowName"},
+ {spread::Role::Hightlight, "highlight"}};
+
+}
+
+QVariant SpreadModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+ switch (role) {
+ case spread::Role::ColumnName:
+ case spread::Role::RowName:
+ break;
+ default:
+ return QVariant{};
+ }
+
+ switch (orientation) {
+ case Qt::Horizontal: {
+ constexpr char A = 'A';
+ const int view_section = getViewColumn(section);
+ if (view_section < 26) {
+ return QString{static_cast<char>(view_section + A)};
+ } else {
+ const int first = view_section / 26 - 1;
+ const int second = view_section % 26;
+ QString title{static_cast<char>(first + A)};
+ title += static_cast<char>(second + A);
+ return title;
+ }
+ }
+ case Qt::Vertical: {
+ return getViewRow(section) + 1;
+ }
+ }
+
+ return QVariant{};
+}
+
+bool SpreadModel::insertColumns(int column, int count, const QModelIndex &parent)
+{
+ if (count != 1) // TODO: implement inserting more than 1 columns
+ return false;
+
+ beginInsertColumns(QModelIndex{}, column, column + count - 1);
+ m_size.second += count;
+
+ // update model
+ m_dataModel.shiftColumns(column, count);
+
+ QMap<int, int> old_columns;
+ std::swap(old_columns, m_viewColumns);
+ for (auto it = old_columns.begin(); it != old_columns.end(); ++it) {
+ const int new_view_column = (it.value() < column) ? it.value() : it.value() + count;
+ const int new_model_column = (it.key() < column) ? it.key() : it.key() + count;
+ m_viewColumns.insert(new_model_column, new_view_column);
+ }
+
+ endInsertColumns();
+ return true;
+}
+
+bool SpreadModel::insertRows(int row, int count, const QModelIndex &parent)
+{
+ if (count != 1) // TODO: implement inserting more than 1 rows
+ return false;
+
+ beginInsertRows(QModelIndex{}, row, row + count - 1);
+ m_size.first += count;
+
+ // update model
+ m_dataModel.shiftRows(row, count);
+
+ endInsertRows();
+ return true;
+}
+
+bool SpreadModel::removeColumns(int column, int count, const QModelIndex &parent)
+{
+ if (count != 1) // TODO: implement removing more than 1 columns
+ return false;
+
+ beginRemoveColumns(QModelIndex{}, column, column + count - 1);
+ m_size.second -= count;
+
+ // update model
+ m_dataModel.removeColumnCells(column);
+ m_dataModel.shiftColumns(column + 1, -count);
+
+ endRemoveColumns();
+ return true;
+}
+
+bool SpreadModel::removeRows(int row, int count, const QModelIndex &parent)
+{
+ if (count != 1) // TODO: implement removing more than 1 rows
+ return false;
+
+ beginRemoveRows(QModelIndex{}, row, row + count - 1);
+ m_size.first -= count;
+
+ // update model
+ m_dataModel.removeRowCells(row);
+ m_dataModel.shiftRows(row + 1, -count);
+
+ endRemoveRows();
+ return true;
+}
+
+bool SpreadModel::clearItemData(const QModelIndexList &indexes)
+{
+ bool ok = true;
+ for (const QModelIndex &index : indexes)
+ ok &= clearItemData(index);
+ return ok;
+}
+
+bool SpreadModel::removeColumns(QModelIndexList indexes)
+{
+ auto greater = [](const QModelIndex &lhs, const QModelIndex &rhs)
+ {
+ return lhs.column() > rhs.column();
+ };
+ std::sort(indexes.begin(), indexes.end(), greater);
+ for (const QModelIndex &index : indexes)
+ removeColumn(index.column());
+ return true;
+}
+
+bool SpreadModel::removeRows(QModelIndexList indexes)
+{
+ auto greater = [](const QModelIndex &lhs, const QModelIndex &rhs)
+ {
+ return lhs.row() > rhs.row();
+ };
+ std::sort(indexes.begin(), indexes.end(), greater);
+ for (const QModelIndex &index : indexes)
+ removeRow(index.row());
+ return true;
+}
+
+void SpreadModel::mapColumn(int model, int view)
+{
+ if (model == view)
+ m_viewColumns.remove(model);
+ else
+ m_viewColumns[model] = view;
+ emit headerDataChanged(Qt::Horizontal, model, view);
+}
+
+void SpreadModel::mapRow(int model, int view)
+{
+ if (model == view)
+ m_viewRows.remove(model);
+ else
+ m_viewRows[model] = view;
+ emit headerDataChanged(Qt::Vertical, model, view);
+}
+
+Formula SpreadModel::parseFormulaString(const QString &qText)
+{
+ if (qText.isEmpty())
+ return Formula{};
+
+ QRegularExpression pattern_re;
+
+ // is formula
+ pattern_re.setPattern("^\\s*=.*");
+ QRegularExpressionMatch match = pattern_re.match(qText);
+ if (!match.hasMatch())
+ return Formula{};
+
+ // is Assignment: e.g. =A1
+ pattern_re.setPattern("^\\s*=\\s*([a-zA-Z]+)([1-9][0-9]*)\\s*$");
+ match = pattern_re.match(qText);
+ if (match.hasMatch()) {
+ const QString column_label = match.captured(1);
+ const QString row_label = match.captured(2);
+ const int column = columnNumberFromName(column_label);
+ const int row = rowNumberFromName(row_label);
+ const int cell_id = m_dataModel.createId(SpreadKey{row, column});
+ return Formula::create(Formula::Operator::Assign, cell_id, 0);
+ }
+
+ // is Addition: e.g. =A1+A2
+ pattern_re.setPattern("^\\s*=\\s*([a-zA-Z]+)([1-9][0-9]*)\\s*\\+\\s*([a-zA-Z]+)([1-9][0-9]*)\\s*$");
+ match = pattern_re.match(qText);
+ if (match.hasMatch()) {
+ // first argument
+ QString column_label = match.captured(1);
+ QString row_label = match.captured(2);
+ int column = columnNumberFromName(column_label);
+ int row = rowNumberFromName(row_label);
+ const int cell_id_1 = m_dataModel.createId(SpreadKey{row, column});
+ // second argument
+ column_label = match.captured(3);
+ row_label = match.captured(4);
+ column = columnNumberFromName(column_label);
+ row = rowNumberFromName(row_label);
+ const int cell_id_2 = m_dataModel.createId(SpreadKey{row, column});
+ // create formula
+ return Formula::create(Formula::Operator::Add, cell_id_1, cell_id_2);
+ }
+
+ // is Subtraction: e.g. =A1-A2
+ pattern_re.setPattern("^\\s*=\\s*([a-zA-Z]+)([1-9][0-9]*)\\s*\\-\\s*([a-zA-Z]+)([1-9][0-9]*)\\s*$");
+ match = pattern_re.match(qText);
+ if (match.hasMatch()) {
+ // first argument
+ QString column_label = match.captured(1);
+ QString row_label = match.captured(2);
+ int column = columnNumberFromName(column_label);
+ int row = rowNumberFromName(row_label);
+ const int cell_id_1 = m_dataModel.createId(SpreadKey{row, column});
+ // second argument
+ column_label = match.captured(3);
+ row_label = match.captured(4);
+ column = columnNumberFromName(column_label);
+ row = rowNumberFromName(row_label);
+ const int cell_id_2 = m_dataModel.createId(SpreadKey{row, column});
+ // create formula
+ return Formula::create(Formula::Operator::Sub, cell_id_1, cell_id_2);
+ }
+
+ // is Multiply: e.g. =A1*A2
+ pattern_re.setPattern("^\\s*=\\s*([a-zA-Z]+)([1-9][0-9]*)\\s*\\*\\s*([a-zA-Z]+)([1-9][0-9]*)\\s*$");
+ match = pattern_re.match(qText);
+ if (match.hasMatch()) {
+ // first argument
+ QString column_label = match.captured(1);
+ QString row_label = match.captured(2);
+ int column = columnNumberFromName(column_label);
+ int row = rowNumberFromName(row_label);
+ const int cell_id_1 = m_dataModel.createId(SpreadKey{row, column});
+ // second argument
+ column_label = match.captured(3);
+ row_label = match.captured(4);
+ column = columnNumberFromName(column_label);
+ row = rowNumberFromName(row_label);
+ const int cell_id_2 = m_dataModel.createId(SpreadKey{row, column});
+ // create formula
+ return Formula::create(Formula::Operator::Mul, cell_id_1, cell_id_2);
+ }
+
+ // is Division: e.g. =A1/A2
+ pattern_re.setPattern("^\\s*=\\s*([a-zA-Z]+)([1-9][0-9]*)\\s*\\/\\s*([a-zA-Z]+)([1-9][0-9]*)\\s*$");
+ match = pattern_re.match(qText);
+ if (match.hasMatch()) {
+ // first argument
+ QString column_label = match.captured(1);
+ QString row_label = match.captured(2);
+ int column = columnNumberFromName(column_label);
+ int row = rowNumberFromName(row_label);
+ const int cell_id_1 = m_dataModel.createId(SpreadKey{row, column});
+ // second argument
+ column_label = match.captured(3);
+ row_label = match.captured(4);
+ column = columnNumberFromName(column_label);
+ row = rowNumberFromName(row_label);
+ const int cell_id_2 = m_dataModel.createId(SpreadKey{row, column});
+ // create formula
+ return Formula::create(Formula::Operator::Div, cell_id_1, cell_id_2);
+ }
+
+ // is Summation: e.g. =SUM A1:A2
+ pattern_re.setPattern("^\\s*=\\s*[Ss][Uu][Mm]\\s+([a-zA-Z]+)([1-9][0-9]*)\\s*\\:\\s*([a-zA-Z]+)([1-9][0-9]*)\\s*$");
+ match = pattern_re.match(qText);
+ if (match.hasMatch()) {
+ // first argument
+ QString column_label = match.captured(1);
+ QString row_label = match.captured(2);
+ int column = columnNumberFromName(column_label);
+ int row = rowNumberFromName(row_label);
+ const int cell_id_1 = m_dataModel.createId(SpreadKey{row, column});
+ // second argument
+ column_label = match.captured(3);
+ row_label = match.captured(4);
+ column = columnNumberFromName(column_label);
+ row = rowNumberFromName(row_label);
+ const int cell_id_2 = m_dataModel.createId(SpreadKey{row, column});
+ // create formula
+ return Formula::create(Formula::Operator::Sum, cell_id_1, cell_id_2);
+ }
+
+ return Formula{};
+}
+
+QString SpreadModel::formulaValueText(const Formula &formula)
+{
+ switch (formula.getOperator()) {
+ case Formula::Operator::Assign: {
+ const QVariant value = m_dataModel.getData(formula.firstOperandId(), spread::Role::Display);
+ return value.isNull() ? QString{} : value.toString();
+ }
+ case Formula::Operator::Add: {
+ const QVariant value_1 = m_dataModel.getData(formula.firstOperandId(), spread::Role::Display);
+ const QVariant value_2 = m_dataModel.getData(formula.secondOperandId(), spread::Role::Display);
+ if (value_1.isNull() && value_2.isNull())
+ return "0";
+ // check int values
+ bool is_int_1 = true;
+ bool is_int_2 = true;
+ const int int_1 = value_1.isNull() ? 0 : value_1.toInt(&is_int_1);
+ const int int_2 = value_2.isNull() ? 0 : value_2.toInt(&is_int_2);
+ if (is_int_1 && is_int_2)
+ return QString::number(int_1 + int_2);
+ // check double values
+ bool is_double_1 = true;
+ bool is_double_2 = true;
+ const double double_1 = value_1.isNull() ? 0 : value_1.toDouble(&is_double_1);
+ const double double_2 = value_2.isNull() ? 0 : value_2.toDouble(&is_double_2);
+ if (is_double_1 && is_double_2)
+ return QString::number(double_1 + double_2);
+ return "#ERROR!";
+ }
+ case Formula::Operator::Sub: {
+ const QVariant value_1 = m_dataModel.getData(formula.firstOperandId(), spread::Role::Display);
+ const QVariant value_2 = m_dataModel.getData(formula.secondOperandId(), spread::Role::Display);
+ if (value_1.isNull() && value_2.isNull())
+ return "0";
+ // check int values
+ bool is_int_1 = true;
+ bool is_int_2 = true;
+ const int int_1 = value_1.isNull() ? 0 : value_1.toInt(&is_int_1);
+ const int int_2 = value_2.isNull() ? 0 : value_2.toInt(&is_int_2);
+ if (is_int_1 && is_int_2)
+ return QString::number(int_1 - int_2);
+ // check double values
+ bool is_double_1 = true;
+ bool is_double_2 = true;
+ const double double_1 = value_1.isNull() ? 0 : value_1.toDouble(&is_double_1);
+ const double double_2 = value_2.isNull() ? 0 : value_2.toDouble(&is_double_2);
+ if (is_double_1 && is_double_2)
+ return QString::number(double_1 - double_2);
+ return "#ERROR!";
+ }
+ case Formula::Operator::Mul: {
+ const QVariant value_1 = m_dataModel.getData(formula.firstOperandId(), spread::Role::Display);
+ const QVariant value_2 = m_dataModel.getData(formula.secondOperandId(), spread::Role::Display);
+ if (value_1.isNull() || value_2.isNull())
+ return "0";
+ // check int values
+ bool is_int_1 = true;
+ bool is_int_2 = true;
+ const int int_1 = value_1.toInt(&is_int_1);
+ const int int_2 = value_2.toInt(&is_int_2);
+ if (is_int_1 && is_int_2)
+ return QString::number(int_1 * int_2);
+ // check double values
+ bool is_double_1 = true;
+ bool is_double_2 = true;
+ const double double_1 = value_1.toDouble(&is_double_1);
+ const double double_2 = value_2.toDouble(&is_double_2);
+ if (is_double_1 && is_double_2)
+ return QString::number(double_1 * double_2);
+ return "#ERROR!";
+ }
+ case Formula::Operator::Div: {
+ const QVariant value_1 = m_dataModel.getData(formula.firstOperandId(), spread::Role::Display);
+ const QVariant value_2 = m_dataModel.getData(formula.secondOperandId(), spread::Role::Display);
+ if (value_1.isNull() && value_2.isNull())
+ return "#ERROR!";
+ // check int values
+ bool is_int_1 = true;
+ bool is_int_2 = true;
+ const int int_1 = value_1.isNull() ? 0 : value_1.toInt(&is_int_1);
+ const int int_2 = value_2.isNull() ? 0 : value_2.toInt(&is_int_2);
+ if (is_int_1 && is_int_2) {
+ if (int_2 == 0)
+ return "#ERROR!";
+ return QString::number(int_1 / int_2);
+ }
+ // check double values
+ bool is_double_1 = true;
+ bool is_double_2 = true;
+ const double double_1 = value_1.isNull() ? 0 : value_1.toDouble(&is_double_1);
+ const double double_2 = value_2.isNull() ? 0 : value_2.toDouble(&is_double_2);
+ if (is_double_1 && is_double_2) {
+ if (double_2 == 0)
+ return "#ERROR!";
+ return QString::number(double_1 / double_2);
+ }
+ return "#ERROR!";
+ }
+ case Formula::Operator::Sum: {
+ SpreadKey top_left = m_dataModel.getKey(formula.firstOperandId());
+ SpreadKey bottom_right = m_dataModel.getKey(formula.secondOperandId());
+ top_left.first = getViewRow(top_left.first);
+ top_left.second = getViewColumn(top_left.second);
+ bottom_right.first = getViewRow(bottom_right.first);
+ bottom_right.second = getViewColumn(bottom_right.second);
+ if (bottom_right.first < top_left.first)
+ std::swap(top_left.first, bottom_right.first);
+ if (bottom_right.second < top_left.second)
+ std::swap(top_left.second, bottom_right.second);
+ double sum = 0;
+ for (int row = top_left.first; row <= bottom_right.first; ++row) {
+ for (int column = top_left.second; column <= bottom_right.second; ++column) {
+ const int model_row = getModelRow(row);
+ const int model_column = getModelColumn(column);
+ const SpreadKey key {model_row, model_column};
+ const QVariant value = m_dataModel.getData(key, spread::Role::Display);
+ if (value.isNull())
+ continue;
+ bool is_double = false;
+ const double d = value.toDouble(&is_double);
+ if (is_double)
+ sum += d;
+ else
+ return "#ERROR!";
+ }
+ }
+ return QString::number(sum);
+ }
+ default:
+ break;
+ }
+ return QString{};
+}
+
+int SpreadModel::getViewColumn(int modelColumn) const
+{
+ auto it = m_viewColumns.find(modelColumn);
+ return (it != m_viewColumns.end()) ? it.value() : modelColumn;
+}
+
+int SpreadModel::getModelColumn(int viewColumn) const
+{
+ auto find_view_column = [viewColumn](const auto &item) {
+ return item == viewColumn;
+ };
+ auto it = std::find_if(m_viewColumns.begin(), m_viewColumns.end(), find_view_column);
+ return it != m_viewColumns.end() ? it.key() : viewColumn;
+}
+
+int SpreadModel::getViewRow(int modelRow) const
+{
+ auto it = m_viewRows.find(modelRow);
+ return (it != m_viewRows.end()) ? it.value() : modelRow;
+}
+
+int SpreadModel::getModelRow(int viewRow) const
+{
+ auto find_view_row = [viewRow](const auto &item){
+ return item == viewRow;
+ };
+ auto it = std::find_if(m_viewRows.begin(), m_viewRows.end(), find_view_row);
+ return (it != m_viewRows.end()) ? it.key() : viewRow;
+}
+
+void SpreadSelectionModel::toggleColumn(int column)
+{
+ isColumnSelected(column) ? deselectColumn(column) : selectColumn(column, false);
+}
+
+void SpreadSelectionModel::deselectColumn(int column)
+{
+ const QAbstractItemModel *model = this->model();
+ const QModelIndex first = model->index(0, column);
+ const QModelIndex last = model->index(model->rowCount() - 1, column);
+ QModelIndexList selectedRows = this->selectedRows(column);
+ if (selectedRows.empty()) {
+ select(QItemSelection{first, last}, SelectionFlag::Deselect);
+ return;
+ }
+
+ auto topToBottom = [](const QModelIndex &lhs, const QModelIndex &rhs) -> bool
+ {
+ return lhs.row() < rhs.row();
+ };
+ std::sort(selectedRows.begin(), selectedRows.end(), topToBottom);
+
+ QModelIndex index = first;
+ for (const QModelIndex &selectedRow : selectedRows) {
+ if (index.row() < selectedRow.row())
+ select(QItemSelection{index, model->index(selectedRow.row() - 1, column)},
+ SelectionFlag::Deselect);
+ index = model->index(selectedRow.row() + 1, column);
+ }
+ if (index.row() <= last.row())
+ select(QItemSelection{index, last}, SelectionFlag::Deselect);
+}
+
+void SpreadSelectionModel::selectColumn(int column, bool clear)
+{
+ if (clear)
+ this->clear();
+ const QAbstractItemModel *model = this->model();
+ const QModelIndex first = model->index(0, column);
+ const QModelIndex last = model->index(model->rowCount() - 1, column);
+ select(QItemSelection{first, last}, SelectionFlag::Select);
+}
+
+void SpreadSelectionModel::toggleRow(int row)
+{
+ isRowSelected(row) ? deselectRow(row) : selectRow(row, false);
+}
+
+void SpreadSelectionModel::deselectRow(int row)
+{
+ const QAbstractItemModel *model = this->model();
+ const QModelIndex first = model->index(row, 0);
+ const QModelIndex last = model->index(row, model->columnCount() - 1);
+ QModelIndexList selectedColumns = this->selectedColumns(row);
+ if (selectedColumns.empty()) {
+ select(QItemSelection{first, last}, SelectionFlag::Deselect);
+ return;
+ }
+
+ auto leftToRight = [](const QModelIndex &lhs, const QModelIndex &rhs) -> bool
+ {
+ return lhs.column() < rhs.column();
+ };
+ std::sort(selectedColumns.begin(), selectedColumns.end(), leftToRight);
+
+ QModelIndex index = first;
+ for (const QModelIndex &selectedColumn : selectedColumns) {
+ if (index.column() < selectedColumn.column())
+ select(QItemSelection{index, model->index(row, selectedColumn.column() - 1)},
+ SelectionFlag::Deselect);
+ index = model->index(row, selectedColumn.column() + 1);
+ }
+ if (index.column() <= last.column())
+ select(QItemSelection{index, last}, SelectionFlag::Deselect);
+}
+
+void SpreadSelectionModel::selectRow(int row, bool clear)
+{
+ if (clear)
+ this->clear();
+ const QAbstractItemModel *model = this->model();
+ const QModelIndex first = model->index(row, 0);
+ const QModelIndex last = model->index(row, model->columnCount() - 1);
+ select(QItemSelection{first, last}, SelectionFlag::Select);
+}
+
+void SpreadSelectionModel::setBehavior(Behavior behavior)
+{
+ if (behavior == m_behavior)
+ return;
+ m_behavior = behavior;
+ emit behaviorChanged();
+}
+
+void HeaderSelectionModel::setCurrent(int current)
+{
+ switch (m_orientation) {
+ case Qt::Horizontal:
+ QItemSelectionModel::setCurrentIndex(model()->index(0, current), SelectionFlag::Current);
+ break;
+ case Qt::Vertical:
+ QItemSelectionModel::setCurrentIndex(model()->index(current, 0), SelectionFlag::Current);
+ break;
+ default:
+ break;
+ }
+}
+
+void HeaderSelectionModel::setSelectionModel(SpreadSelectionModel *selectionModel)
+{
+ if (selectionModel == m_selectionModel)
+ return;
+ if (m_selectionModel)
+ disconnect(m_selectionModel);
+ m_selectionModel = selectionModel;
+ if (m_selectionModel)
+ connect(m_selectionModel, &SpreadSelectionModel::selectionChanged, this,
+ &HeaderSelectionModel::onSelectionChanged);
+ emit selectionModelChanged();
+}
+
+void HeaderSelectionModel::setOrientation(Qt::Orientation orientation)
+{
+ if (orientation == m_orientation)
+ return;
+ m_orientation = orientation;
+ emit orientationChanged();
+}
+
+void HeaderSelectionModel::onSelectionChanged(const QItemSelection &selected,
+ const QItemSelection &deselected)
+{
+ const QAbstractItemModel *model = this->model();
+ for (const QModelIndex &index : selected.indexes()) {
+ switch (m_orientation) {
+ case Qt::Horizontal:
+ if (m_selectionModel->isColumnSelected(index.column()))
+ select(model->index(0, index.column()), SelectionFlag::Select);
+ break;
+ case Qt::Vertical:
+ if (m_selectionModel->isRowSelected(index.row()))
+ select(model->index(index.row(), 0), SelectionFlag::Select);
+ break;
+ }
+ }
+ for (const QModelIndex &index : deselected.indexes()) {
+ switch (m_orientation) {
+ case Qt::Horizontal:
+ if (!m_selectionModel->isColumnSelected(index.column()))
+ select(model->index(0, index.column()), SelectionFlag::Deselect);
+ break;
+ case Qt::Vertical:
+ if (!m_selectionModel->isRowSelected(index.row()))
+ select(model->index(index.row(), 0), SelectionFlag::Deselect);
+ break;
+ }
+ }
+}
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/spreadmodel.h b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadmodel.h
new file mode 100644
index 0000000000..4ef4cd176c
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadmodel.h
@@ -0,0 +1,154 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SPREADMODEL_H
+#define SPREADMODEL_H
+
+#include "datamodel.h"
+#include "spreadformula.h"
+
+#include <QQmlEngine>
+#include <QAbstractTableModel>
+#include <QItemSelectionModel>
+#include <QMutex>
+
+
+class DataModel;
+class SpreadModel;
+
+class SpreadModel final : public QAbstractTableModel
+{
+ Q_OBJECT
+ QML_ELEMENT
+ QML_SINGLETON
+ Q_DISABLE_COPY_MOVE(SpreadModel)
+
+ friend class SpreadSelectionModel;
+ friend class SpreadCell;
+ friend struct Formula;
+
+protected:
+ explicit SpreadModel(QObject *parent = nullptr) : QAbstractTableModel(parent) { }
+
+public:
+ int rowCount() const { return rowCount(QModelIndex{}); }
+ int columnCount() const { return columnCount(QModelIndex{}); }
+
+ const DataModel *dataModel() { return &m_dataModel; }
+
+ int columnNumberFromName(const QString &text);
+ int rowNumberFromName(const QString &text);
+ // returns nullptr if it's not been created yet.
+ static SpreadModel *instance();
+ static SpreadModel *create(QQmlEngine *, QJSEngine *);
+
+protected:
+ Q_INVOKABLE void update(int row, int column);
+ Q_INVOKABLE void clearHighlight();
+ Q_INVOKABLE void setHighlight(const QModelIndex &index, bool highlight);
+ Q_INVOKABLE bool clearItemData(const QModelIndexList &indexes);
+ Q_INVOKABLE bool removeColumns(QModelIndexList indexes);
+ Q_INVOKABLE bool removeRows(QModelIndexList indexes);
+ Q_INVOKABLE void mapColumn(int model, int view);
+ Q_INVOKABLE void mapRow(int model, int view);
+ Q_INVOKABLE void resetColumnMapping() { m_viewColumns.clear(); }
+ Q_INVOKABLE void resetRowMapping() { m_viewRows.clear(); }
+
+ // QAbstractItemModel interface
+ int rowCount(const QModelIndex &parent) const override;
+ int columnCount(const QModelIndex &parent) const override;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
+ Q_INVOKABLE bool clearItemData(const QModelIndex &index) override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
+ QHash<int, QByteArray> roleNames() const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
+ bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex{}) override;
+ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex{}) override;
+ bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex{}) override;
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex{}) override;
+
+private:
+ Formula parseFormulaString(const QString &text);
+ QString formulaValueText(const Formula &formula);
+ int getViewColumn(int modelColumn) const;
+ int getModelColumn(int viewColumn) const;
+ int getViewRow(int modelRow) const;
+ int getModelRow(int viewRow) const;
+
+private:
+ std::pair<int, int> m_size {1000, 26}; // rows:1-1000, columns:A-Z
+ DataModel m_dataModel;
+ QMap<int, int> m_viewColumns;
+ QMap<int, int> m_viewRows;
+ QMutex m_updateMutex;
+ static inline SpreadModel *s_instance {nullptr};
+};
+
+class SpreadSelectionModel : public QItemSelectionModel
+{
+ Q_OBJECT
+ QML_ELEMENT
+
+ Q_PROPERTY(Behavior behavior READ getBehavior WRITE setBehavior NOTIFY behaviorChanged FINAL)
+
+public:
+ enum Behavior {
+ DisabledBehavior,
+ SelectCells,
+ SelectColumns,
+ SelectRows,
+ };
+ Q_ENUM(Behavior)
+
+public:
+ Q_INVOKABLE void toggleColumn(int column);
+ Q_INVOKABLE void deselectColumn(int column);
+ Q_INVOKABLE void selectColumn(int column, bool clear = true);
+ Q_INVOKABLE void toggleRow(int row);
+ Q_INVOKABLE void deselectRow(int row);
+ Q_INVOKABLE void selectRow(int row, bool clear = true);
+
+protected:
+ Behavior getBehavior() const { return m_behavior; }
+
+protected slots:
+ void setBehavior(Behavior);
+
+signals:
+ void behaviorChanged();
+
+private:
+ Behavior m_behavior = Behavior::DisabledBehavior;
+};
+
+class HeaderSelectionModel : public QItemSelectionModel
+{
+ Q_OBJECT
+ QML_ELEMENT
+
+ Q_PROPERTY(SpreadSelectionModel* selectionModel READ getSelectionModel WRITE setSelectionModel NOTIFY selectionModelChanged FINAL)
+ Q_PROPERTY(Qt::Orientation orientation READ getOrientation WRITE setOrientation NOTIFY orientationChanged FINAL)
+
+protected:
+ Q_INVOKABLE void setCurrent(int current = -1);
+ SpreadSelectionModel *getSelectionModel() { return m_selectionModel; }
+ Qt::Orientation getOrientation() const { return m_orientation; }
+
+protected slots:
+ void setSelectionModel(SpreadSelectionModel *selectionModel);
+ void setOrientation(Qt::Orientation orientation);
+
+private slots:
+ void onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+
+signals:
+ void selectionModelChanged();
+ void orientationChanged();
+
+private:
+ SpreadSelectionModel *m_selectionModel = nullptr;
+ Qt::Orientation m_orientation = Qt::Horizontal;
+};
+
+#endif // SPREADMODEL_H
diff --git a/examples/quickcontrols/spreadsheets/Spreadsheets/spreadrole.h b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadrole.h
new file mode 100644
index 0000000000..aa1c69138a
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/Spreadsheets/spreadrole.h
@@ -0,0 +1,23 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SPREADROLE_H
+#define SPREADROLE_H
+
+#include <Qt>
+
+namespace spread {
+enum Role {
+ // data roles
+ BeginRole = Qt::DisplayRole, // begin of data roles
+ Display = Qt::DisplayRole,
+ Edit = Qt::EditRole,
+ Hightlight = Qt::UserRole + 1,
+ EndRole, // end of data roles
+ // non-data roles
+ ColumnName,
+ RowName,
+};
+}
+
+#endif // SPREADROLE_H
diff --git a/examples/quickcontrols/spreadsheets/main.cpp b/examples/quickcontrols/spreadsheets/main.cpp
new file mode 100644
index 0000000000..5c8b46e326
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/main.cpp
@@ -0,0 +1,24 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+#include <QIcon>
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ QQmlApplicationEngine engine;
+ QObject::connect(
+ &engine,
+ &QQmlApplicationEngine::objectCreationFailed,
+ &app,
+ []() { QCoreApplication::exit(-1); },
+ Qt::QueuedConnection);
+ engine.loadFromModule("Spreadsheets", "Main");
+
+ app.setWindowIcon(QIcon{":/qt/examples/spreadsheet/icons/spreadsheet.svg"});
+
+ return app.exec();
+}
diff --git a/examples/quickcontrols/spreadsheets/spreadsheet.svg b/examples/quickcontrols/spreadsheets/spreadsheet.svg
new file mode 100644
index 0000000000..cc13cbb907
--- /dev/null
+++ b/examples/quickcontrols/spreadsheets/spreadsheet.svg
@@ -0,0 +1,32 @@
+<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect y="8" width="64" height="44" fill="#989898"/>
+<path d="M2 11.1111C2 10.4975 2.49746 10 3.11111 10H5.88889C6.50254 10 7 10.4975 7 11.1111V13.8889C7 14.5025 6.50254 15 5.88889 15H3.11111C2.49746 15 2 14.5025 2 13.8889V11.1111Z" fill="#0F0F0F"/>
+<path d="M9 11.1111C9 10.4975 9 10 10.0234 10H61.0185C62 10 62 10.4975 62 11.1111V13.8889C62 14.5025 62 15 61.0185 15H9.98148C9 15 9 14.5025 9 13.8889V11.1111Z" fill="#0D0D0D"/>
+<path d="M9 11.1111C9 10.4975 9 10 10.0234 10H61.0185C62 10 62 10.4975 62 11.1111V13.8889C62 14.5025 62 15 61.0185 15H9.98148C9 15 9 14.5025 9 13.8889V11.1111Z" fill="#0D0D0D"/>
+<path d="M3.11111 50C2.49746 50 2 50 2 49.3628L2 17.6111C2 17 2.49746 17 3.11111 17H5.88889C6.50254 17 7 17 7 17.6111L7 49.3889C7 50 6.50254 50 5.88889 50H3.11111Z" fill="#0D0D0D"/>
+<path d="M9.75 17.5H17.25C17.3864 17.5 17.4384 17.5232 17.4484 17.5285C17.4486 17.5287 17.4488 17.5288 17.449 17.5289C17.4499 17.5304 17.4513 17.533 17.4531 17.5367C17.4646 17.5615 17.4808 17.6153 17.4902 17.7225C17.4996 17.8293 17.5 17.9523 17.5 18.1111V20.8889C17.5 21.0477 17.4996 21.1707 17.4902 21.2775C17.4808 21.3847 17.4646 21.4385 17.4531 21.4633C17.4513 21.467 17.4499 21.4696 17.449 21.4711C17.4488 21.4712 17.4486 21.4713 17.4484 21.4715C17.4384 21.4768 17.3864 21.5 17.25 21.5H9.75C9.61364 21.5 9.56161 21.4768 9.55162 21.4715C9.5514 21.4713 9.5512 21.4712 9.55101 21.4711C9.55007 21.4696 9.54867 21.467 9.54691 21.4633C9.53536 21.4385 9.51924 21.3847 9.50979 21.2775C9.50037 21.1707 9.5 21.0477 9.5 20.8889V17.8333C9.5 17.6813 9.50057 17.5858 9.50723 17.5137C9.55683 17.5062 9.63379 17.5 9.75 17.5Z" stroke="black"/>
+<path d="M31.75 17.5H39.25C39.3864 17.5 39.4384 17.5232 39.4484 17.5285C39.4486 17.5287 39.4488 17.5288 39.449 17.5289C39.4499 17.5304 39.4513 17.533 39.4531 17.5367C39.4646 17.5615 39.4808 17.6153 39.4902 17.7225C39.4996 17.8293 39.5 17.9523 39.5 18.1111V20.8889C39.5 21.0477 39.4996 21.1707 39.4902 21.2775C39.4808 21.3847 39.4646 21.4385 39.4531 21.4633C39.4513 21.467 39.4499 21.4696 39.449 21.4711C39.4488 21.4712 39.4486 21.4713 39.4484 21.4715C39.4384 21.4768 39.3864 21.5 39.25 21.5H31.75C31.6136 21.5 31.5616 21.4768 31.5516 21.4715C31.5514 21.4713 31.5512 21.4712 31.551 21.4711C31.5501 21.4696 31.5487 21.467 31.5469 21.4633C31.5354 21.4385 31.5192 21.3847 31.5098 21.2775C31.5004 21.1707 31.5 21.0477 31.5 20.8889V17.8333C31.5 17.6813 31.5006 17.5858 31.5072 17.5137C31.5568 17.5062 31.6338 17.5 31.75 17.5Z" stroke="black"/>
+<path d="M42.75 17.5H50.25C50.3864 17.5 50.4384 17.5232 50.4484 17.5285C50.4486 17.5287 50.4488 17.5288 50.449 17.5289C50.4499 17.5304 50.4513 17.533 50.4531 17.5367C50.4646 17.5615 50.4808 17.6153 50.4902 17.7225C50.4996 17.8293 50.5 17.9523 50.5 18.1111V20.8889C50.5 21.0477 50.4996 21.1707 50.4902 21.2775C50.4808 21.3847 50.4646 21.4385 50.4531 21.4633C50.4513 21.467 50.4499 21.4696 50.449 21.4711C50.4488 21.4712 50.4486 21.4713 50.4484 21.4715C50.4384 21.4768 50.3864 21.5 50.25 21.5H42.75C42.6136 21.5 42.5616 21.4768 42.5516 21.4715C42.5514 21.4713 42.5512 21.4712 42.551 21.4711C42.5501 21.4696 42.5487 21.467 42.5469 21.4633C42.5354 21.4385 42.5192 21.3847 42.5098 21.2775C42.5004 21.1707 42.5 21.0477 42.5 20.8889V17.8333C42.5 17.6813 42.5006 17.5858 42.5072 17.5137C42.5568 17.5062 42.6338 17.5 42.75 17.5Z" stroke="black"/>
+<path d="M53.75 17.5H61.25C61.3864 17.5 61.4384 17.5232 61.4484 17.5285C61.4486 17.5287 61.4488 17.5288 61.449 17.5289C61.4499 17.5304 61.4513 17.533 61.4531 17.5367C61.4646 17.5615 61.4808 17.6153 61.4902 17.7225C61.4996 17.8293 61.5 17.9523 61.5 18.1111V20.8889C61.5 21.0477 61.4996 21.1707 61.4902 21.2775C61.4808 21.3847 61.4646 21.4385 61.4531 21.4633C61.4513 21.467 61.4499 21.4696 61.449 21.4711C61.4488 21.4712 61.4486 21.4713 61.4484 21.4715C61.4384 21.4768 61.3864 21.5 61.25 21.5H53.75C53.6136 21.5 53.5616 21.4768 53.5516 21.4715C53.5514 21.4713 53.5512 21.4712 53.551 21.4711C53.5501 21.4696 53.5487 21.467 53.5469 21.4633C53.5354 21.4385 53.5192 21.3847 53.5098 21.2775C53.5004 21.1707 53.5 21.0477 53.5 20.8889V17.8333C53.5 17.6813 53.5006 17.5858 53.5072 17.5137C53.5568 17.5062 53.6338 17.5 53.75 17.5Z" stroke="black"/>
+<path d="M9.75 38.5H17.25C17.3864 38.5 17.4384 38.5232 17.4484 38.5285C17.4486 38.5287 17.4488 38.5288 17.449 38.5289C17.4499 38.5304 17.4513 38.533 17.4531 38.5367C17.4646 38.5615 17.4808 38.6153 17.4902 38.7225C17.4996 38.8293 17.5 38.9523 17.5 39.1111V41.8889C17.5 42.0477 17.4996 42.1707 17.4902 42.2775C17.4808 42.3847 17.4646 42.4385 17.4531 42.4633C17.4513 42.467 17.4499 42.4696 17.449 42.4711C17.4488 42.4712 17.4486 42.4713 17.4484 42.4715C17.4384 42.4768 17.3864 42.5 17.25 42.5H9.75C9.61364 42.5 9.56161 42.4768 9.55162 42.4715C9.5514 42.4713 9.5512 42.4712 9.55101 42.4711C9.55007 42.4696 9.54867 42.467 9.54691 42.4633C9.53536 42.4385 9.51924 42.3847 9.50979 42.2775C9.50037 42.1707 9.5 42.0477 9.5 41.8889V38.8333C9.5 38.6813 9.50057 38.5858 9.50723 38.5137C9.55683 38.5062 9.63379 38.5 9.75 38.5Z" stroke="black"/>
+<path d="M31.75 38.5H39.25C39.3864 38.5 39.4384 38.5232 39.4484 38.5285C39.4486 38.5287 39.4488 38.5288 39.449 38.5289C39.4499 38.5304 39.4513 38.533 39.4531 38.5367C39.4646 38.5615 39.4808 38.6153 39.4902 38.7225C39.4996 38.8293 39.5 38.9523 39.5 39.1111V41.8889C39.5 42.0477 39.4996 42.1707 39.4902 42.2775C39.4808 42.3847 39.4646 42.4385 39.4531 42.4633C39.4513 42.467 39.4499 42.4696 39.449 42.4711C39.4488 42.4712 39.4486 42.4713 39.4484 42.4715C39.4384 42.4768 39.3864 42.5 39.25 42.5H31.75C31.6136 42.5 31.5616 42.4768 31.5516 42.4715C31.5514 42.4713 31.5512 42.4712 31.551 42.4711C31.5501 42.4696 31.5487 42.467 31.5469 42.4633C31.5354 42.4385 31.5192 42.3847 31.5098 42.2775C31.5004 42.1707 31.5 42.0477 31.5 41.8889V38.8333C31.5 38.6813 31.5006 38.5858 31.5072 38.5137C31.5568 38.5062 31.6338 38.5 31.75 38.5Z" stroke="black"/>
+<path d="M42.75 38.5H50.25C50.3864 38.5 50.4384 38.5232 50.4484 38.5285C50.4486 38.5287 50.4488 38.5288 50.449 38.5289C50.4499 38.5304 50.4513 38.533 50.4531 38.5367C50.4646 38.5615 50.4808 38.6153 50.4902 38.7225C50.4996 38.8293 50.5 38.9523 50.5 39.1111V41.8889C50.5 42.0477 50.4996 42.1707 50.4902 42.2775C50.4808 42.3847 50.4646 42.4385 50.4531 42.4633C50.4513 42.467 50.4499 42.4696 50.449 42.4711C50.4488 42.4712 50.4486 42.4713 50.4484 42.4715C50.4384 42.4768 50.3864 42.5 50.25 42.5H42.75C42.6136 42.5 42.5616 42.4768 42.5516 42.4715C42.5514 42.4713 42.5512 42.4712 42.551 42.4711C42.5501 42.4696 42.5487 42.467 42.5469 42.4633C42.5354 42.4385 42.5192 42.3847 42.5098 42.2775C42.5004 42.1707 42.5 42.0477 42.5 41.8889V38.8333C42.5 38.6813 42.5006 38.5858 42.5072 38.5137C42.5568 38.5062 42.6338 38.5 42.75 38.5Z" stroke="black"/>
+<path d="M53.75 38.5H61.25C61.3864 38.5 61.4384 38.5232 61.4484 38.5285C61.4486 38.5287 61.4488 38.5288 61.449 38.5289C61.4499 38.5304 61.4513 38.533 61.4531 38.5367C61.4646 38.5615 61.4808 38.6153 61.4902 38.7225C61.4996 38.8293 61.5 38.9523 61.5 39.1111V41.8889C61.5 42.0477 61.4996 42.1707 61.4902 42.2775C61.4808 42.3847 61.4646 42.4385 61.4531 42.4633C61.4513 42.467 61.4499 42.4696 61.449 42.4711C61.4488 42.4712 61.4486 42.4713 61.4484 42.4715C61.4384 42.4768 61.3864 42.5 61.25 42.5H53.75C53.6136 42.5 53.5616 42.4768 53.5516 42.4715C53.5514 42.4713 53.5512 42.4712 53.551 42.4711C53.5501 42.4696 53.5487 42.467 53.5469 42.4633C53.5354 42.4385 53.5192 42.3847 53.5098 42.2775C53.5004 42.1707 53.5 42.0477 53.5 41.8889V38.8333C53.5 38.6813 53.5006 38.5858 53.5072 38.5137C53.5568 38.5062 53.6338 38.5 53.75 38.5Z" stroke="black"/>
+<path d="M9.75 24.5H17.25C17.3864 24.5 17.4384 24.5232 17.4484 24.5285C17.4486 24.5287 17.4488 24.5288 17.449 24.5289C17.4499 24.5304 17.4513 24.533 17.4531 24.5367C17.4646 24.5615 17.4808 24.6153 17.4902 24.7225C17.4996 24.8293 17.5 24.9523 17.5 25.1111V27.8889C17.5 28.0477 17.4996 28.1707 17.4902 28.2775C17.4808 28.3847 17.4646 28.4385 17.4531 28.4633C17.4513 28.467 17.4499 28.4696 17.449 28.4711C17.4488 28.4712 17.4486 28.4713 17.4484 28.4715C17.4384 28.4768 17.3864 28.5 17.25 28.5H9.75C9.61364 28.5 9.56161 28.4768 9.55162 28.4715C9.5514 28.4713 9.5512 28.4712 9.55101 28.4711C9.55007 28.4696 9.54867 28.467 9.54691 28.4633C9.53536 28.4385 9.51924 28.3847 9.50979 28.2775C9.50037 28.1707 9.5 28.0477 9.5 27.8889V24.8333C9.5 24.6813 9.50057 24.5858 9.50723 24.5137C9.55683 24.5062 9.63379 24.5 9.75 24.5Z" stroke="black"/>
+<path d="M31.75 24.5H39.25C39.3864 24.5 39.4384 24.5232 39.4484 24.5285C39.4486 24.5287 39.4488 24.5288 39.449 24.5289C39.4499 24.5304 39.4513 24.533 39.4531 24.5367C39.4646 24.5615 39.4808 24.6153 39.4902 24.7225C39.4996 24.8293 39.5 24.9523 39.5 25.1111V27.8889C39.5 28.0477 39.4996 28.1707 39.4902 28.2775C39.4808 28.3847 39.4646 28.4385 39.4531 28.4633C39.4513 28.467 39.4499 28.4696 39.449 28.4711C39.4488 28.4712 39.4486 28.4713 39.4484 28.4715C39.4384 28.4768 39.3864 28.5 39.25 28.5H31.75C31.6136 28.5 31.5616 28.4768 31.5516 28.4715C31.5514 28.4713 31.5512 28.4712 31.551 28.4711C31.5501 28.4696 31.5487 28.467 31.5469 28.4633C31.5354 28.4385 31.5192 28.3847 31.5098 28.2775C31.5004 28.1707 31.5 28.0477 31.5 27.8889V24.8333C31.5 24.6813 31.5006 24.5858 31.5072 24.5137C31.5568 24.5062 31.6338 24.5 31.75 24.5Z" stroke="black"/>
+<path d="M42.75 24.5H50.25C50.3864 24.5 50.4384 24.5232 50.4484 24.5285C50.4486 24.5287 50.4488 24.5288 50.449 24.5289C50.4499 24.5304 50.4513 24.533 50.4531 24.5367C50.4646 24.5615 50.4808 24.6153 50.4902 24.7225C50.4996 24.8293 50.5 24.9523 50.5 25.1111V27.8889C50.5 28.0477 50.4996 28.1707 50.4902 28.2775C50.4808 28.3847 50.4646 28.4385 50.4531 28.4633C50.4513 28.467 50.4499 28.4696 50.449 28.4711C50.4488 28.4712 50.4486 28.4713 50.4484 28.4715C50.4384 28.4768 50.3864 28.5 50.25 28.5H42.75C42.6136 28.5 42.5616 28.4768 42.5516 28.4715C42.5514 28.4713 42.5512 28.4712 42.551 28.4711C42.5501 28.4696 42.5487 28.467 42.5469 28.4633C42.5354 28.4385 42.5192 28.3847 42.5098 28.2775C42.5004 28.1707 42.5 28.0477 42.5 27.8889V24.8333C42.5 24.6813 42.5006 24.5858 42.5072 24.5137C42.5568 24.5062 42.6338 24.5 42.75 24.5Z" stroke="black"/>
+<path d="M53.75 24.5H61.25C61.3864 24.5 61.4384 24.5232 61.4484 24.5285C61.4486 24.5287 61.4488 24.5288 61.449 24.5289C61.4499 24.5304 61.4513 24.533 61.4531 24.5367C61.4646 24.5615 61.4808 24.6153 61.4902 24.7225C61.4996 24.8293 61.5 24.9523 61.5 25.1111V27.8889C61.5 28.0477 61.4996 28.1707 61.4902 28.2775C61.4808 28.3847 61.4646 28.4385 61.4531 28.4633C61.4513 28.467 61.4499 28.4696 61.449 28.4711C61.4488 28.4712 61.4486 28.4713 61.4484 28.4715C61.4384 28.4768 61.3864 28.5 61.25 28.5H53.75C53.6136 28.5 53.5616 28.4768 53.5516 28.4715C53.5514 28.4713 53.5512 28.4712 53.551 28.4711C53.5501 28.4696 53.5487 28.467 53.5469 28.4633C53.5354 28.4385 53.5192 28.3847 53.5098 28.2775C53.5004 28.1707 53.5 28.0477 53.5 27.8889V24.8333C53.5 24.6813 53.5006 24.5858 53.5072 24.5137C53.5568 24.5062 53.6338 24.5 53.75 24.5Z" stroke="black"/>
+<path d="M9.75 45.5H17.25C17.3864 45.5 17.4384 45.5232 17.4484 45.5285C17.4486 45.5287 17.4488 45.5288 17.449 45.5289C17.4499 45.5304 17.4513 45.533 17.4531 45.5367C17.4646 45.5615 17.4808 45.6153 17.4902 45.7225C17.4996 45.8293 17.5 45.9523 17.5 46.1111V48.8889C17.5 49.0477 17.4996 49.1707 17.4902 49.2775C17.4808 49.3847 17.4646 49.4385 17.4531 49.4633C17.4513 49.467 17.4499 49.4696 17.449 49.4711C17.4488 49.4712 17.4486 49.4713 17.4484 49.4715C17.4384 49.4768 17.3864 49.5 17.25 49.5H9.75C9.61364 49.5 9.56161 49.4768 9.55162 49.4715C9.5514 49.4713 9.5512 49.4712 9.55101 49.4711C9.55007 49.4696 9.54867 49.467 9.54691 49.4633C9.53536 49.4385 9.51924 49.3847 9.50979 49.2775C9.50037 49.1707 9.5 49.0477 9.5 48.8889V45.8333C9.5 45.6813 9.50057 45.5858 9.50723 45.5137C9.55683 45.5062 9.63379 45.5 9.75 45.5Z" stroke="black"/>
+<path d="M31.75 45.5H39.25C39.3864 45.5 39.4384 45.5232 39.4484 45.5285C39.4486 45.5287 39.4488 45.5288 39.449 45.5289C39.4499 45.5304 39.4513 45.533 39.4531 45.5367C39.4646 45.5615 39.4808 45.6153 39.4902 45.7225C39.4996 45.8293 39.5 45.9523 39.5 46.1111V48.8889C39.5 49.0477 39.4996 49.1707 39.4902 49.2775C39.4808 49.3847 39.4646 49.4385 39.4531 49.4633C39.4513 49.467 39.4499 49.4696 39.449 49.4711C39.4488 49.4712 39.4486 49.4713 39.4484 49.4715C39.4384 49.4768 39.3864 49.5 39.25 49.5H31.75C31.6136 49.5 31.5616 49.4768 31.5516 49.4715C31.5514 49.4713 31.5512 49.4712 31.551 49.4711C31.5501 49.4696 31.5487 49.467 31.5469 49.4633C31.5354 49.4385 31.5192 49.3847 31.5098 49.2775C31.5004 49.1707 31.5 49.0477 31.5 48.8889V45.8333C31.5 45.6813 31.5006 45.5858 31.5072 45.5137C31.5568 45.5062 31.6338 45.5 31.75 45.5Z" stroke="black"/>
+<path d="M42.75 45.5H50.25C50.3864 45.5 50.4384 45.5232 50.4484 45.5285C50.4486 45.5287 50.4488 45.5288 50.449 45.5289C50.4499 45.5304 50.4513 45.533 50.4531 45.5367C50.4646 45.5615 50.4808 45.6153 50.4902 45.7225C50.4996 45.8293 50.5 45.9523 50.5 46.1111V48.8889C50.5 49.0477 50.4996 49.1707 50.4902 49.2775C50.4808 49.3847 50.4646 49.4385 50.4531 49.4633C50.4513 49.467 50.4499 49.4696 50.449 49.4711C50.4488 49.4712 50.4486 49.4713 50.4484 49.4715C50.4384 49.4768 50.3864 49.5 50.25 49.5H42.75C42.6136 49.5 42.5616 49.4768 42.5516 49.4715C42.5514 49.4713 42.5512 49.4712 42.551 49.4711C42.5501 49.4696 42.5487 49.467 42.5469 49.4633C42.5354 49.4385 42.5192 49.3847 42.5098 49.2775C42.5004 49.1707 42.5 49.0477 42.5 48.8889V45.8333C42.5 45.6813 42.5006 45.5858 42.5072 45.5137C42.5568 45.5062 42.6338 45.5 42.75 45.5Z" stroke="black"/>
+<path d="M53.75 45.5H61.25C61.3864 45.5 61.4384 45.5232 61.4484 45.5285C61.4486 45.5287 61.4488 45.5288 61.449 45.5289C61.4499 45.5304 61.4513 45.533 61.4531 45.5367C61.4646 45.5615 61.4808 45.6153 61.4902 45.7225C61.4996 45.8293 61.5 45.9523 61.5 46.1111V48.8889C61.5 49.0477 61.4996 49.1707 61.4902 49.2775C61.4808 49.3847 61.4646 49.4385 61.4531 49.4633C61.4513 49.467 61.4499 49.4696 61.449 49.4711C61.4488 49.4712 61.4486 49.4713 61.4484 49.4715C61.4384 49.4768 61.3864 49.5 61.25 49.5H53.75C53.6136 49.5 53.5616 49.4768 53.5516 49.4715C53.5514 49.4713 53.5512 49.4712 53.551 49.4711C53.5501 49.4696 53.5487 49.467 53.5469 49.4633C53.5354 49.4385 53.5192 49.3847 53.5098 49.2775C53.5004 49.1707 53.5 49.0477 53.5 48.8889V45.8333C53.5 45.6813 53.5006 45.5858 53.5072 45.5137C53.5568 45.5062 53.6338 45.5 53.75 45.5Z" stroke="black"/>
+<path d="M20 18.1111C20 17.4975 20 17 20.75 17H28.25C29 17 29 17.4975 29 18.1111V20.8889C29 21.5025 29 22 28.25 22H20.75C20 22 20 21.5025 20 20.8889V18.1111Z" fill="#0D0D0D"/>
+<path d="M20 39.1111C20 38.4975 20 38 20.75 38H28.25C29 38 29 38.4975 29 39.1111V41.8889C29 42.5025 29 43 28.25 43H20.75C20 43 20 42.5025 20 41.8889V39.1111Z" fill="#0D0D0D"/>
+<path d="M20 25.1111C20 24.4975 20 24 20.75 24H28.25C29 24 29 24.4975 29 25.1111V27.8889C29 28.5025 29 29 28.25 29H20.75C20 29 20 28.5025 20 27.8889V25.1111Z" fill="#0D0D0D"/>
+<path d="M9 32.1111C9 31.4975 9 31 9.75 31H17.25C18 31 18 31.4975 18 32.1111V34.8889C18 35.5025 18 36 17.25 36H9.75C8.99999 36 9 35.5025 9 34.8889V32.1111Z" fill="#0D0D0D"/>
+<path d="M31 32.1111C31 31.4975 31 31 31.75 31H39.25C40 31 40 31.4975 40 32.1111V34.8889C40 35.5025 40 36 39.25 36H31.75C31 36 31 35.5025 31 34.8889V32.1111Z" fill="#0D0D0D"/>
+<path d="M20 32.1111C20 31.4975 20 31 20.75 31H28.25C29 31 29 31.4975 29 32.1111V34.8889C29 35.5025 29 36 28.25 36H20.75C20 36 20 35.5025 20 34.8889V32.1111Z" fill="#0D0D0D"/>
+<path d="M20 46.1111C20 45.4975 20 45 20.75 45H28.25C29 45 29 45.4975 29 46.1111V48.8889C29 49.5025 29 50 28.25 50H20.75C20 50 20 49.5025 20 48.8889V46.1111Z" fill="#0D0D0D"/>
+<path d="M42 32.1111C42 31.4975 42 31 42.75 31H50.25C51 31 51 31.4975 51 32.1111V34.8889C51 35.5025 51 36 50.25 36H42.75C42 36 42 35.5025 42 34.8889V32.1111Z" fill="#0D0D0D"/>
+<path d="M53 32.1111C53 31.4975 53 31 53.75 31H61.25C62 31 62 31.4975 62 32.1111V34.8889C62 35.5025 62 36 61.25 36H53.75C53 36 53 35.5025 53 34.8889V32.1111Z" fill="#0D0D0D"/>
+</svg>
diff --git a/examples/quickcontrols/swipetoremove/CMakeLists.txt b/examples/quickcontrols/swipetoremove/CMakeLists.txt
deleted file mode 100644
index 4500695355..0000000000
--- a/examples/quickcontrols/swipetoremove/CMakeLists.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(swipetoremove LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/swipetoremove")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml)
-
-qt_add_executable(swipetoremoveexample WIN32 MACOSX_BUNDLE
- swipetoremove.cpp
-)
-target_link_libraries(swipetoremoveexample PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
-)
-
-# Resources:
-qt_add_qml_module(swipetoremoveexample
- URI swipetoremove
- NO_RESOURCE_TARGET_PATH
- QML_FILES
- "swipetoremove.qml"
- RESOURCES
- "fonts/fontello.ttf"
-)
-
-install(TARGETS swipetoremoveexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/quickcontrols/swipetoremove/doc/images/qtquickcontrols-swipetoremove.gif b/examples/quickcontrols/swipetoremove/doc/images/qtquickcontrols-swipetoremove.gif
deleted file mode 100644
index 6142831356..0000000000
--- a/examples/quickcontrols/swipetoremove/doc/images/qtquickcontrols-swipetoremove.gif
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/swipetoremove/doc/images/qtquickcontrols-swipetoremove.png b/examples/quickcontrols/swipetoremove/doc/images/qtquickcontrols-swipetoremove.png
deleted file mode 100644
index 07a200fe92..0000000000
--- a/examples/quickcontrols/swipetoremove/doc/images/qtquickcontrols-swipetoremove.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/swipetoremove/doc/src/qtquickcontrols-swipetoremove.qdoc b/examples/quickcontrols/swipetoremove/doc/src/qtquickcontrols-swipetoremove.qdoc
deleted file mode 100644
index 29f4e652b1..0000000000
--- a/examples/quickcontrols/swipetoremove/doc/src/qtquickcontrols-swipetoremove.qdoc
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
-
-/*!
- \example swipetoremove
- \keyword Qt Quick Controls - Swipe to Remove
- \title Qt Quick Controls - Swipe to Remove
- \ingroup qtquickcontrols-examples
- \brief Demonstrates removal of list items by swipe gesture.
-
- This example demonstrates how \l SwipeDelegate can be used to implement
- removal of list items by swiping. This UI pattern is often used in touch
- user interfaces.
-
- \image qtquickcontrols-swipetoremove.png "Screen shot of the app"
-
- Each list item can be swiped to the left, which reveals a label on the
- \l {SwipeDelegate::swipe}{right} side indicating that the item will be
- removed if the swipe is completed.
-
- \image qtquickcontrols-swipetoremove.gif "Animation of the app working"
-
- The following snippet contains the implementation of the side item.
-
- \snippet swipetoremove/swipetoremove.qml delegate
-
- The following snippet presents how the logic of removing items is
- implemented. When the swipe is \l {SwipeDelegate::swipe}{completed}, it
- starts a timer that waits a few seconds to let the user undo the remove
- action. Once the undo timer triggers, the item is removed from the list:
-
- \snippet swipetoremove/swipetoremove.qml removal
-
- Finally, the removal of an item triggers the following transitions. The
- \l {ListView::} {remove} transition applies to the item that is removed,
- and the \l {ListView::}{displaced} transition applies to the other items
- that got displaced due to the removal:
-
- \snippet swipetoremove/swipetoremove.qml transitions
-
- \include examples-run.qdocinc
-*/
diff --git a/examples/quickcontrols/swipetoremove/fonts/LICENSE.txt b/examples/quickcontrols/swipetoremove/fonts/LICENSE.txt
deleted file mode 100644
index 7394a58ddf..0000000000
--- a/examples/quickcontrols/swipetoremove/fonts/LICENSE.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-Font license info
-
-
-## Elusive
-
- Copyright (C) 2013 by Aristeides Stathopoulos
-
- Author: Aristeides Stathopoulos
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://aristeides.com/
-
-
diff --git a/examples/quickcontrols/swipetoremove/fonts/fontello.ttf b/examples/quickcontrols/swipetoremove/fonts/fontello.ttf
deleted file mode 100644
index 553fd2efca..0000000000
--- a/examples/quickcontrols/swipetoremove/fonts/fontello.ttf
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/swipetoremove/swipetoremove.cpp b/examples/quickcontrols/swipetoremove/swipetoremove.cpp
deleted file mode 100644
index 0bd8e24521..0000000000
--- a/examples/quickcontrols/swipetoremove/swipetoremove.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include <QGuiApplication>
-#include <QQmlApplicationEngine>
-#include <QFontDatabase>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- QFontDatabase::addApplicationFont(":/fonts/fontello.ttf");
-
- QQmlApplicationEngine engine;
- engine.load(QUrl("qrc:/swipetoremove.qml"));
- if (engine.rootObjects().isEmpty())
- return -1;
-
- return app.exec();
-}
diff --git a/examples/quickcontrols/swipetoremove/swipetoremove.pro b/examples/quickcontrols/swipetoremove/swipetoremove.pro
deleted file mode 100644
index e16ff8145f..0000000000
--- a/examples/quickcontrols/swipetoremove/swipetoremove.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-TEMPLATE = app
-TARGET = swipetoremove
-QT += qml
-
-SOURCES += swipetoremove.cpp
-
-RESOURCES += swipetoremove.qml
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/swipetoremove
-INSTALLS += target
diff --git a/examples/quickcontrols/swipetoremove/swipetoremove.qml b/examples/quickcontrols/swipetoremove/swipetoremove.qml
deleted file mode 100644
index a7820eb024..0000000000
--- a/examples/quickcontrols/swipetoremove/swipetoremove.qml
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Controls.Material
-
-ApplicationWindow {
- id: window
- width: 300
- height: 400
- visible: true
- title: qsTr("Swipe to Remove")
-
- ListView {
- id: listView
- anchors.fill: parent
-
- delegate: SwipeDelegate {
- id: delegate
-
- text: modelData
- width: listView.width
-
- //! [delegate]
- swipe.right: Rectangle {
- width: parent.width
- height: parent.height
-
- clip: true
- color: SwipeDelegate.pressed ? "#555" : "#666"
-
- Label {
- font.family: "Fontello"
- text: delegate.swipe.complete ? "\ue805" // icon-cw-circled
- : "\ue801" // icon-cancel-circled-1
-
- padding: 20
- anchors.fill: parent
- horizontalAlignment: Qt.AlignRight
- verticalAlignment: Qt.AlignVCenter
-
- opacity: 2 * -delegate.swipe.position
-
- color: Material.color(delegate.swipe.complete ? Material.Green : Material.Red, Material.Shade200)
- Behavior on color { ColorAnimation { } }
- }
-
- Label {
- text: qsTr("Removed")
- color: "white"
-
- padding: 20
- anchors.fill: parent
- horizontalAlignment: Qt.AlignLeft
- verticalAlignment: Qt.AlignVCenter
-
- opacity: delegate.swipe.complete ? 1 : 0
- Behavior on opacity { NumberAnimation { } }
- }
-
- SwipeDelegate.onClicked: delegate.swipe.close()
- SwipeDelegate.onPressedChanged: undoTimer.stop()
- }
- //! [delegate]
-
- //! [removal]
- Timer {
- id: undoTimer
- interval: 3600
- onTriggered: listModel.remove(index)
- }
-
- swipe.onCompleted: undoTimer.start()
- //! [removal]
- }
-
- model: ListModel {
- id: listModel
- ListElement { text: "Lorem ipsum dolor sit amet" }
- ListElement { text: "Curabitur sit amet risus" }
- ListElement { text: "Suspendisse vehicula nisi" }
- ListElement { text: "Mauris imperdiet libero" }
- ListElement { text: "Sed vitae dui aliquet augue" }
- ListElement { text: "Praesent in elit eu nulla" }
- ListElement { text: "Etiam vitae magna" }
- ListElement { text: "Pellentesque eget elit euismod" }
- ListElement { text: "Nulla at enim porta" }
- ListElement { text: "Fusce tincidunt odio" }
- ListElement { text: "Ut non ex a ligula molestie" }
- ListElement { text: "Nam vitae justo scelerisque" }
- ListElement { text: "Vestibulum pulvinar tellus" }
- ListElement { text: "Quisque dignissim leo sed gravida" }
- }
-
- //! [transitions]
- remove: Transition {
- SequentialAnimation {
- PauseAnimation { duration: 125 }
- NumberAnimation { property: "height"; to: 0; easing.type: Easing.InOutQuad }
- }
- }
-
- displaced: Transition {
- SequentialAnimation {
- PauseAnimation { duration: 125 }
- NumberAnimation { property: "y"; easing.type: Easing.InOutQuad }
- }
- }
- //! [transitions]
-
- ScrollIndicator.vertical: ScrollIndicator { }
- }
-
- Label {
- id: placeholder
- text: qsTr("Swipe no more")
-
- anchors.margins: 60
- anchors.fill: parent
-
- opacity: 0.5
- visible: listView.count === 0
-
- horizontalAlignment: Qt.AlignHCenter
- verticalAlignment: Qt.AlignVCenter
- wrapMode: Label.WordWrap
- font.pixelSize: 18
- }
-}
diff --git a/examples/quickcontrols/texteditor/CMakeLists.txt b/examples/quickcontrols/texteditor/CMakeLists.txt
index 37c86142da..6fa24b41c6 100644
--- a/examples/quickcontrols/texteditor/CMakeLists.txt
+++ b/examples/quickcontrols/texteditor/CMakeLists.txt
@@ -1,21 +1,14 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(texteditor LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/texteditor")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2 OPTIONAL_COMPONENTS Widgets)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2)
qt_add_executable(texteditorexample WIN32 MACOSX_BUNDLE
- documenthandler.cpp
texteditor.cpp
)
@@ -33,18 +26,12 @@ qt_add_qml_module(texteditorexample
)
target_link_libraries(texteditorexample PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::QuickControls2
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickControls2
)
-if(TARGET Qt::Widgets)
- target_link_libraries(texteditorexample PUBLIC
- Qt::Widgets
- )
-endif()
-
if(CMAKE_CROSSCOMPILING)
target_compile_definitions(texteditorexample PUBLIC
QT_EXTRA_FILE_SELECTOR="touch"
@@ -52,7 +39,16 @@ if(CMAKE_CROSSCOMPILING)
endif()
install(TARGETS texteditorexample
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET texteditorexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quickcontrols/texteditor/doc/src/qtquickcontrols-texteditor.qdoc b/examples/quickcontrols/texteditor/doc/src/qtquickcontrols-texteditor.qdoc
index b1d7e842cf..40ab1915e6 100644
--- a/examples/quickcontrols/texteditor/doc/src/qtquickcontrols-texteditor.qdoc
+++ b/examples/quickcontrols/texteditor/doc/src/qtquickcontrols-texteditor.qdoc
@@ -6,95 +6,158 @@
\title Qt Quick Controls - Text Editor
\keyword Qt Quick Controls 2 - Text Editor
\ingroup qtquickcontrols-examples
- \brief A QML app using Qt Quick Controls and a C++ class to
- provide a fully-functional rich-text editor application.
+ \examplecategory {Graphics}
+ \brief A rich-text editor app using Qt Quick Controls.
- The \e {Text Editor Example} presents a sample HTML file using the TextArea
- control, preserving the HTML formatting. The application comes with two user
- interfaces; one for traditional desktop platforms with a mouse pointer, and
- another simpler, touch-oriented version.
+ The \e {Text Editor Example} allows WYSIWYG editing of an HTML, Markdown or
+ plain text file. The application comes with two user interfaces: one for
+ larger screens, and a simplified UI for small touch-based devices. Both are
+ "pure" QML. \c texteditor.cpp contains the \c main() function, which calls
+ QFontDatabase::addApplicationFont() to add an icon font. (\l FontLoader
+ would be an alternative way to achieve the same result.)
\section1 Desktop User Interface
\image qtquickcontrols-texteditor-desktop.jpg
The desktop version is a complete text editor with capabilities for formatting
- text, and opening and saving HTML and plain text files. It demonstrates the
- native-looking dialogs and menus using the \l{Qt Labs Platform} module. These
- types are mostly suitable for desktop platforms with support for multiple
- top-level windows, a mouse pointer, and moderate screen size.
+ text, and opening and saving HTML, Markdown and plain text files.
- The desktop UI uses FileDialog for opening and saving files:
+ In the \l {https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller}{model-view-control (MVC)}
+ design pattern, the \e control layer includes the set of operations that
+ can be performed. In Qt Quick Controls, the \l Action type is used to
+ encapsulate a single operation or command. Accordingly, we begin with a
+ set of Action objects:
\quotefromfile texteditor/qml/texteditor.qml
- \skipto FileDialog
- \printuntil /\bsaveAs\b/
- \printline }
+ \skipto Action
+ \printuntil openAction
+ \printto Action
- It uses FontDialog and ColorDialog for choosing fonts and colors:
+ The \l Action for opening a file must first prompt the user if the existing
+ document has been changed, to avoid losing the user's changes. Otherwise
+ it simply opens the FileDialog which is declared further below.
- \skipto FontDialog
- \printuntil /.*colorDialog$/
- \printuntil /^\s{4}\}$/
+ The \l Action for saving the file is enabled only if there are changes to save:
- It also uses \l[QML QtLabsPlatform]{Menu} and
- \l[QML QtLabsPlatform]{MenuItem} that provide a context menu to format text
- within:
+ \printuntil saveAction
+ \printto Action
- \skipto /\bMenu\b/
- \printuntil /^\s{4}\}$/
+ \skipto quitAction
+ \skipuntil }
- \note There is also a standard menubar with more options than the
- context menu.
+ The \l Action for copying selected text is enabled only if some text is selected:
- \section1 Touch User Interface
+ \printuntil copyAction
+ \printuntil }
- \image qtquickcontrols-texteditor-touch.jpg
+ \skipto pasteAction
+ \skipuntil }
- The touch user interface is a simplified version of the text editor. It is
- suitable for touch devices with limited screen size. The example uses
- \l{Using File Selectors with Qt Quick Controls}{file selectors} to load
- the appropriate user interface automatically.
+ Each Action to change text formatting (such as bold, italic and alignment)
+ is \l {Action::}{checkable}, and its boolean \c checked state
+ is in sync with the relevant property in the
+ \l {TextEdit::selectedText}{selected text}.
+ Since declarative bidirectional synchronization is difficult, we use
+ an \c onTriggered script to change the property when the Action is
+ activated. The \l {TextEdit::}{cursorSelection} property
+ is new in Qt 6.7 and makes this much easier than it was.
+
+ \printuntil boldAction
+ \printto Action
+
+ \skipto alignLeftAction
+ \skipuntil }
+
+ \printuntil alignCenterAction
+ \printto Action
+
+ We have a \l MenuBar containing the hierarchy of \l {Menu}{Menus} and
+ MenuItems. Each \l MenuItem merely needs to bind the relevant
+ \l {AbstractButton::}{action}, which encapsulates the
+ UI representation and the implementation.
+
+ \skipto MenuBar
+ \printuntil copyAction
+ \printuntil }
+ \dots 8
+
+ The same \l Action objects are reused in the \l ToolBar; but here we
+ override each Action's \l {AbstractButton::}{text} property to
+ choose a textual icon from our icon font:
+
+ \skipto ToolBar
+ \printuntil copyButton
+ \printuntil }
+ \dots 12
- Unlike the desktop version, which uses top-level dialogs, the touch version
- uses the QML \l Dialog type, which is not a top-level window. This type of
- dialog is fully supported on mobile and embedded platforms that do not support
- multiple top-level windows.
+ The main part of the text editor is a \l TextArea inside a \l Flickable:
- \quotefromfile texteditor/qml/+touch/texteditor.qml
- \skipto /\bDialog\b/
- \printuntil /^\s{4}\}$/
+ \skipto Flickable
+ \printuntil persistentSelection
+ \dots 12
- \section1 C++ Backend
+ A \l ScrollBar is attached to the vertical axis. Since word-wrapping is
+ enabled via \l {TextEdit::}{wrapMode}, we don't need a horizontal
+ ScrollBar.
- Both user interfaces use the same C++ backend, which supports opening, formatting,
- and editing a document. The C++ class, \c DocumentHandler, extends QObject and is
- registered as a QML type under the namespace \c {io.qt.examples.texteditor 1.0}.
+ The \l {TextArea::flickable}{TextArea.flickable} attached property is used
+ so that when the text cursor is moved out of the viewport (for example via
+ arrow keys, or by typing a lot of text), \l TextArea scrolls the
+ \l Flickable to keep the cursor visible.
- The following snippets show how the type is registered under a namespace and later
- imported and instantiated by \e main.qml. For more information about registering C++
- classes as QML types, see \l {Defining QML Types from C++}.
+ There is a context menu; we use a TapHandler to detect a right-click and
+ open it:
- QML type registration:
+ \skipto TapHandler
+ \printuntil }
- \code
- #include <QtQml/qqml.h>
- ...
- qmlRegisterType<DocumentHandler>("io.qt.examples.texteditor", 1, 0, "DocumentHandler");
- ...
- \endcode
+ The context \l Menu contains \l {MenuItem}{MenuItems} that reuse the same
+ \l Action objects as the main \l MenuBar and \l ToolBar are using.
+ As before, it's enough to bind \l {AbstractButton::}{action} to the
+ reusable Action that represents the operation to be performed. However,
+ we override each menu item's \l {MenuItem::}{text} to omit the
+ underlined mnemonics on the context menu.
- QML namespace import:
+ \skipto Menu
+ \printuntil MenuItem
+ \printuntil }
+ \dots 8
- \code
- import io.qt.examples.texteditor 1.0
- \endcode
+ We consistently use the \l qsTr function to enable translation of UI text,
+ so that the application will make sense regardless of the end user's native
+ language.
- QML instance:
+ We use several kinds of \l {Qt Quick Dialogs QML Types}{dialogs}:
\quotefromfile texteditor/qml/texteditor.qml
- \skipto DocumentHandler
- \printuntil /^\s{4}\}$/
+ \skipto FileDialog
+ \printuntil discardDialog
+ \printuntil }
+ \printuntil }
+
+ It's generally easier to declare separate instances for each purpose.
+ We have two instances of \l {QtQuick.Dialogs::}{FileDialog}, for opening
+ and saving files respectively. This became easier in Qt 6.7, with new
+ features in \l TextDocument.
+
+ A \l {QtQuick.Dialogs::}{FontDialog} and a \l {QtQuick.Dialogs::ColorDialog}{ColorDialog}
+ allow changing text formatting. (In Markdown format, there's no syntax to
+ represent specific font and color choices; but font characteristics such as
+ bold, italic and monospace are saved. In HTML format, all formatting is
+ saved.)
+
+ We have a \l {QtQuick.Dialogs::}{MessageDialog} to show error messages, and
+ two more for prompting the user what to do when a file has been modified.
+
+ \section1 Touch User Interface
+
+ \image qtquickcontrols-texteditor-touch.jpg
+
+ The touch user interface is a simplified version of the text editor. It is
+ suitable for touch devices with limited screen size. The example uses
+ \l{Using File Selectors with Qt Quick Controls}{file selectors} to load
+ the appropriate user interface automatically.
\include examples-run.qdocinc
*/
diff --git a/examples/quickcontrols/texteditor/documenthandler.cpp b/examples/quickcontrols/texteditor/documenthandler.cpp
deleted file mode 100644
index f6ed6aef84..0000000000
--- a/examples/quickcontrols/texteditor/documenthandler.cpp
+++ /dev/null
@@ -1,348 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#include "documenthandler.h"
-
-#include <QFile>
-#include <QFileInfo>
-#include <QFileSelector>
-#include <QMimeDatabase>
-#include <QQmlFile>
-#include <QQmlFileSelector>
-#include <QQuickTextDocument>
-#include <QTextCharFormat>
-#include <QStringDecoder>
-#include <QTextDocument>
-#include <QDebug>
-
-DocumentHandler::DocumentHandler(QObject *parent)
- : QObject(parent)
- , m_document(nullptr)
- , m_cursorPosition(-1)
- , m_selectionStart(0)
- , m_selectionEnd(0)
-{
-}
-
-QQuickTextDocument *DocumentHandler::document() const
-{
- return m_document;
-}
-
-void DocumentHandler::setDocument(QQuickTextDocument *document)
-{
- if (document == m_document)
- return;
-
- if (m_document)
- disconnect(m_document->textDocument(), &QTextDocument::modificationChanged, this, &DocumentHandler::modifiedChanged);
- m_document = document;
- if (m_document)
- connect(m_document->textDocument(), &QTextDocument::modificationChanged, this, &DocumentHandler::modifiedChanged);
- emit documentChanged();
-}
-
-int DocumentHandler::cursorPosition() const
-{
- return m_cursorPosition;
-}
-
-void DocumentHandler::setCursorPosition(int position)
-{
- if (position == m_cursorPosition)
- return;
-
- m_cursorPosition = position;
- reset();
- emit cursorPositionChanged();
-}
-
-int DocumentHandler::selectionStart() const
-{
- return m_selectionStart;
-}
-
-void DocumentHandler::setSelectionStart(int position)
-{
- if (position == m_selectionStart)
- return;
-
- m_selectionStart = position;
- emit selectionStartChanged();
-}
-
-int DocumentHandler::selectionEnd() const
-{
- return m_selectionEnd;
-}
-
-void DocumentHandler::setSelectionEnd(int position)
-{
- if (position == m_selectionEnd)
- return;
-
- m_selectionEnd = position;
- emit selectionEndChanged();
-}
-
-QColor DocumentHandler::textColor() const
-{
- QTextCursor cursor = textCursor();
- if (cursor.isNull())
- return QColor(Qt::black);
- QTextCharFormat format = cursor.charFormat();
- return format.foreground().color();
-}
-
-void DocumentHandler::setTextColor(const QColor &color)
-{
- QTextCharFormat format;
- format.setForeground(QBrush(color));
- mergeFormatOnWordOrSelection(format);
- emit textColorChanged();
-}
-
-Qt::Alignment DocumentHandler::alignment() const
-{
- QTextCursor cursor = textCursor();
- if (cursor.isNull())
- return Qt::AlignLeft;
- return textCursor().blockFormat().alignment();
-}
-
-void DocumentHandler::setAlignment(Qt::Alignment alignment)
-{
- QTextBlockFormat format;
- format.setAlignment(alignment);
- QTextCursor cursor = textCursor();
- cursor.mergeBlockFormat(format);
- emit alignmentChanged();
-}
-
-QString DocumentHandler::fileName() const
-{
- const QString filePath = QQmlFile::urlToLocalFileOrQrc(m_fileUrl);
- const QString fileName = QFileInfo(filePath).fileName();
- if (fileName.isEmpty())
- return QStringLiteral("untitled.txt");
- return fileName;
-}
-
-QString DocumentHandler::fileType() const
-{
- return QFileInfo(fileName()).suffix();
-}
-
-QUrl DocumentHandler::fileUrl() const
-{
- return m_fileUrl;
-}
-
-void DocumentHandler::load(const QUrl &fileUrl)
-{
- if (fileUrl == m_fileUrl)
- return;
-
- QQmlEngine *engine = qmlEngine(this);
- if (!engine) {
- qWarning() << "load() called before DocumentHandler has QQmlEngine";
- return;
- }
-
- const QUrl path = engine->interceptUrl(fileUrl, QQmlAbstractUrlInterceptor::UrlString);
- const QString fileName = QQmlFile::urlToLocalFileOrQrc(path);
- if (QFile::exists(fileName)) {
- QMimeType mime = QMimeDatabase().mimeTypeForFile(fileName);
- QFile file(fileName);
- if (file.open(QFile::ReadOnly)) {
- QByteArray data = file.readAll();
- if (QTextDocument *doc = textDocument()) {
- doc->setBaseUrl(path.adjusted(QUrl::RemoveFilename));
- doc->setModified(false);
- if (mime.inherits("text/markdown")) {
- emit loaded(QString::fromUtf8(data), Qt::MarkdownText);
- } else {
- auto encoding = QStringConverter::encodingForHtml(data);
- if (encoding) {
- QStringDecoder decoder(*encoding);
- emit loaded(decoder(data), Qt::AutoText);
- } else {
- // fall back to utf8
- emit loaded(QString::fromUtf8(data), Qt::AutoText);
- }
- }
- }
-
- reset();
- }
- }
-
- m_fileUrl = fileUrl;
- emit fileUrlChanged();
-}
-
-void DocumentHandler::saveAs(const QUrl &fileUrl)
-{
- QTextDocument *doc = textDocument();
- if (!doc)
- return;
-
- const QString filePath = fileUrl.toLocalFile();
- const bool isHtml = QFileInfo(filePath).suffix().contains(QLatin1String("htm"));
- QFile file(filePath);
- if (!file.open(QFile::WriteOnly | QFile::Truncate | (isHtml ? QFile::NotOpen : QFile::Text))) {
- emit error(tr("Cannot save: ") + file.errorString());
- return;
- }
- file.write((isHtml ? doc->toHtml() : doc->toPlainText()).toUtf8());
- file.close();
-
- if (fileUrl == m_fileUrl)
- return;
-
- m_fileUrl = fileUrl;
- emit fileUrlChanged();
-}
-
-void DocumentHandler::reset()
-{
- emit alignmentChanged();
- emit textColorChanged();
- emit fontChanged();
-}
-
-QTextCursor DocumentHandler::textCursor() const
-{
- QTextDocument *doc = textDocument();
- if (!doc)
- return QTextCursor();
-
- QTextCursor cursor = QTextCursor(doc);
- if (m_selectionStart != m_selectionEnd) {
- cursor.setPosition(m_selectionStart);
- cursor.setPosition(m_selectionEnd, QTextCursor::KeepAnchor);
- } else {
- cursor.setPosition(m_cursorPosition);
- }
- return cursor;
-}
-
-QTextDocument *DocumentHandler::textDocument() const
-{
- if (!m_document)
- return nullptr;
-
- return m_document->textDocument();
-}
-
-void DocumentHandler::mergeFormatOnWordOrSelection(const QTextCharFormat &format)
-{
- QTextCursor cursor = textCursor();
- if (!cursor.hasSelection())
- cursor.select(QTextCursor::WordUnderCursor);
- cursor.mergeCharFormat(format);
-}
-
-bool DocumentHandler::modified() const
-{
- return m_document && m_document->textDocument()->isModified();
-}
-
-void DocumentHandler::setModified(bool m)
-{
- if (m_document)
- m_document->textDocument()->setModified(m);
-}
-
-QFont DocumentHandler::font() const
-{
- QTextCursor cursor = textCursor();
- if (cursor.isNull())
- return m_document->textDocument()->defaultFont();
- QTextCharFormat format = cursor.charFormat();
- return format.font();
-}
-
-void DocumentHandler::setFont(const QFont & font){
-
- QTextCursor cursor = textCursor();
- if (!cursor.isNull() && cursor.charFormat().font() == font)
- return;
-
- QTextCharFormat format;
- format.setFont(font);
- mergeFormatOnWordOrSelection(format);
-
- emit fontChanged();
-}
-
-bool DocumentHandler::bold() const
-{
- const QTextCursor cursor = textCursor();
- if (cursor.isNull())
- return m_document->textDocument()->defaultFont().bold();
- return cursor.charFormat().font().bold();
-}
-
-void DocumentHandler::setBold(bool bold)
-{
- const QTextCursor cursor = textCursor();
- if (!cursor.isNull() && cursor.charFormat().font().bold() == bold)
- return;
-
- QFont font = cursor.charFormat().font();
- font.setBold(bold);
- QTextCharFormat format;
- format.setFont(font);
- mergeFormatOnWordOrSelection(format);
-
- emit boldChanged();
-}
-
-bool DocumentHandler::underline() const
-{
- const QTextCursor cursor = textCursor();
- if (cursor.isNull())
- return m_document->textDocument()->defaultFont().underline();
- return cursor.charFormat().font().underline();
-}
-
-void DocumentHandler::setUnderline(bool underline)
-{
- const QTextCursor cursor = textCursor();
- if (!cursor.isNull() && cursor.charFormat().font().underline() == underline)
- return;
-
- QFont font = cursor.charFormat().font();
- font.setUnderline(underline);
- QTextCharFormat format;
- format.setFont(font);
- mergeFormatOnWordOrSelection(format);
-
- emit underlineChanged();
-}
-
-bool DocumentHandler::italic() const
-{
- const QTextCursor cursor = textCursor();
- if (cursor.isNull())
- return m_document->textDocument()->defaultFont().italic();
- return cursor.charFormat().font().italic();
-}
-
-void DocumentHandler::setItalic(bool italic)
-{
- const QTextCursor cursor = textCursor();
- if (!cursor.isNull() && cursor.charFormat().font().italic() == italic)
- return;
-
- QFont font = cursor.charFormat().font();
- font.setItalic(italic);
- QTextCharFormat format;
- format.setFont(font);
- mergeFormatOnWordOrSelection(format);
-
- emit italicChanged();
-}
-
-#include "moc_documenthandler.cpp"
diff --git a/examples/quickcontrols/texteditor/documenthandler.h b/examples/quickcontrols/texteditor/documenthandler.h
deleted file mode 100644
index b750997885..0000000000
--- a/examples/quickcontrols/texteditor/documenthandler.h
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef DOCUMENTHANDLER_H
-#define DOCUMENTHANDLER_H
-
-#include <QFont>
-#include <QObject>
-#include <QTextCursor>
-#include <QUrl>
-
-QT_BEGIN_NAMESPACE
-class QTextDocument;
-class QQuickTextDocument;
-QT_END_NAMESPACE
-
-class DocumentHandler : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QQuickTextDocument *document READ document WRITE setDocument NOTIFY documentChanged)
- Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition NOTIFY cursorPositionChanged)
- Q_PROPERTY(int selectionStart READ selectionStart WRITE setSelectionStart NOTIFY selectionStartChanged)
- Q_PROPERTY(int selectionEnd READ selectionEnd WRITE setSelectionEnd NOTIFY selectionEndChanged)
-
- Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor NOTIFY textColorChanged)
- Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment NOTIFY alignmentChanged)
-
- Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
-
- Q_PROPERTY(bool bold READ bold WRITE setBold NOTIFY boldChanged)
- Q_PROPERTY(bool underline READ underline WRITE setUnderline NOTIFY underlineChanged)
- Q_PROPERTY(bool italic READ italic WRITE setItalic NOTIFY italicChanged)
-
- Q_PROPERTY(QString fileName READ fileName NOTIFY fileUrlChanged)
- Q_PROPERTY(QString fileType READ fileType NOTIFY fileUrlChanged)
- Q_PROPERTY(QUrl fileUrl READ fileUrl NOTIFY fileUrlChanged)
-
- Q_PROPERTY(bool modified READ modified WRITE setModified NOTIFY modifiedChanged)
-
-public:
- explicit DocumentHandler(QObject *parent = nullptr);
-
- QQuickTextDocument *document() const;
- void setDocument(QQuickTextDocument *document);
-
- int cursorPosition() const;
- void setCursorPosition(int position);
-
- int selectionStart() const;
- void setSelectionStart(int position);
-
- int selectionEnd() const;
- void setSelectionEnd(int position);
-
- QColor textColor() const;
- void setTextColor(const QColor &color);
-
- Qt::Alignment alignment() const;
- void setAlignment(Qt::Alignment alignment);
-
- QFont font() const;
- void setFont(const QFont & font);
-
- bool bold() const;
- void setBold(bool bold);
-
- bool underline() const;
- void setUnderline(bool underline);
-
- bool italic() const;
- void setItalic(bool italic);
-
- QString fileName() const;
- QString fileType() const;
- QUrl fileUrl() const;
-
- bool modified() const;
- void setModified(bool m);
-
-public Q_SLOTS:
- void load(const QUrl &fileUrl);
- void saveAs(const QUrl &fileUrl);
-
-Q_SIGNALS:
- void documentChanged();
- void cursorPositionChanged();
- void selectionStartChanged();
- void selectionEndChanged();
-
- void fontChanged();
- void boldChanged();
- void underlineChanged();
- void italicChanged();
- void textColorChanged();
- void alignmentChanged();
-
- void textChanged();
- void fileUrlChanged();
-
- void loaded(const QString &text, int format);
- void error(const QString &message);
-
- void modifiedChanged();
-
-private:
- void reset();
- QTextCursor textCursor() const;
- QTextDocument *textDocument() const;
- void mergeFormatOnWordOrSelection(const QTextCharFormat &format);
-
- QQuickTextDocument *m_document;
-
- int m_cursorPosition;
- int m_selectionStart;
- int m_selectionEnd;
-
- QUrl m_fileUrl;
-};
-
-#endif // DOCUMENTHANDLER_H
diff --git a/examples/quickcontrols/texteditor/example.md b/examples/quickcontrols/texteditor/example.md
index e385227e3b..f54edab5ae 100644
--- a/examples/quickcontrols/texteditor/example.md
+++ b/examples/quickcontrols/texteditor/example.md
@@ -1,10 +1,10 @@
# Markdown in Qt Quick
The Text, TextEdit and TextArea items support rich text formatted in HTML.
-Since Qt 5.14, they now support two dialects of Markdown as well:
-[The CommonMark Specification](https://spec.commonmark.org/0.29/) is the
+Since Qt 5.14, they support two dialects of Markdown as well:
+[The CommonMark Specification](https://spec.commonmark.org/0.31.2/) is the
conservative formal specification, while
-[GitHub Flavored Markdown](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown)
+[GitHub Flavored Markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax)
adds extra features such as task lists and tables.
If you are viewing this document in the Qt Quick Controls Text Editor example,
@@ -36,7 +36,7 @@ Block {
Block quotes can be nested, and block quotes can include indented code blocks.
-In [The CommonMark Specification](https://spec.commonmark.org/0.29/)
+In [The CommonMark Specification](https://spec.commonmark.org/0.31.2/)
John MacFarlane writes:
> What distinguishes Markdown from many other lightweight markup syntaxes,
@@ -158,7 +158,7 @@ Some Qt Widgets also support Markdown.
[QTextEdit](https://doc.qt.io/qt-6/qtextedit.html) has similar WYSIWYG
editing features as TextEdit and TextArea: you can edit the rendered text
directly. You can use
-[QTextDocument::toMarkdown](https://doc-snapshots.qt.io/qt5-dev/qtextdocument.html#toMarkdown)
+[QTextDocument::toMarkdown](https://doc.qt.io/qt-6/qtextdocument.html#toMarkdown)
to rewrite the Markdown format, and save it back to a file.
If you have the [KDE Kate Editor](https://kate-editor.org/) installed on your
diff --git a/examples/quickcontrols/texteditor/fonts/fontello.ttf b/examples/quickcontrols/texteditor/fonts/fontello.ttf
index f02b44ec12..2db6e2bc4b 100644
--- a/examples/quickcontrols/texteditor/fonts/fontello.ttf
+++ b/examples/quickcontrols/texteditor/fonts/fontello.ttf
Binary files differ
diff --git a/examples/quickcontrols/texteditor/images/qt-logo.png b/examples/quickcontrols/texteditor/images/qt-logo.png
index 2ebc01aafa..63d0f222d8 100644
--- a/examples/quickcontrols/texteditor/images/qt-logo.png
+++ b/examples/quickcontrols/texteditor/images/qt-logo.png
Binary files differ
diff --git a/examples/quickcontrols/texteditor/qml/+touch/texteditor.qml b/examples/quickcontrols/texteditor/qml/+touch/texteditor.qml
index 2a0d9f117f..376a8341eb 100644
--- a/examples/quickcontrols/texteditor/qml/+touch/texteditor.qml
+++ b/examples/quickcontrols/texteditor/qml/+touch/texteditor.qml
@@ -4,17 +4,73 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
-import QtQuick.Window
-
-import io.qt.examples.texteditor
// TODO:
// - make designer-friendly
ApplicationWindow {
id: window
+ width: 480
+ height: 640
visible: true
- title: document.fileName + " - Text Editor Example"
+ title: textArea.textDocument.source +
+ " - Text Editor Example" + (textArea.textDocument.modified ? " *" : "")
+
+ Action {
+ id: boldAction
+ shortcut: StandardKey.Bold
+ checkable: true
+ checked: textArea.cursorSelection.font.bold
+ onTriggered: textArea.cursorSelection.font = Qt.font({ bold: checked })
+ }
+
+ Action {
+ id: italicAction
+ shortcut: StandardKey.Italic
+ checkable: true
+ checked: textArea.cursorSelection.font.italic
+ onTriggered: textArea.cursorSelection.font = Qt.font({ italic: checked })
+ }
+
+ Action {
+ id: underlineAction
+ shortcut: StandardKey.Underline
+ checkable: true
+ checked: textArea.cursorSelection.font.underline
+ onTriggered: textArea.cursorSelection.font = Qt.font({ underline: checked })
+ }
+
+ Action {
+ id: alignLeftAction
+ shortcut: "Ctrl+{"
+ checkable: true
+ checked: textArea.cursorSelection.alignment === Qt.AlignLeft
+ onTriggered: textArea.cursorSelection.alignment = Qt.AlignLeft
+ }
+
+ Action {
+ id: alignCenterAction
+ shortcut: "Ctrl+|"
+ checkable: true
+ checked: textArea.cursorSelection.alignment === Qt.AlignCenter
+ onTriggered: textArea.cursorSelection.alignment = Qt.AlignCenter
+ }
+
+ Action {
+ id: alignRightAction
+ shortcut: "Ctrl+}"
+ checkable: true
+ checked: textArea.cursorSelection.alignment === Qt.AlignRight
+ onTriggered: textArea.cursorSelection.alignment = Qt.AlignRight
+ }
+
+ Action {
+ id: alignJustifyAction
+ shortcut: "Ctrl+Alt+}"
+ checkable: true
+ checked: textArea.cursorSelection.alignment === Qt.AlignJustify
+ onTriggered: textArea.cursorSelection.alignment = Qt.AlignJustify
+ }
header: ToolBar {
leftPadding: 5
@@ -26,9 +82,10 @@ ApplicationWindow {
ToolButton {
id: doneEditingButton
font.family: "fontello"
- text: "\uE80A" // icon-ok
+ text: "\uE809" // icon-ok
opacity: !textArea.readOnly ? 1 : 0
onClicked: textArea.readOnly = true
+ Layout.fillWidth: false
}
Label {
@@ -43,6 +100,7 @@ ApplicationWindow {
font.family: "fontello"
text: "\uF142" // icon-ellipsis-vert
onClicked: menu.open()
+ Layout.fillWidth: false
Menu {
id: menu
@@ -56,23 +114,6 @@ ApplicationWindow {
}
}
- DocumentHandler {
- id: document
- document: textArea.textDocument
- cursorPosition: textArea.cursorPosition
- selectionStart: textArea.selectionStart
- selectionEnd: textArea.selectionEnd
- // textColor: TODO
- Component.onCompleted: document.load("qrc:/texteditor.html")
- onLoaded: {
- textArea.text = text
- }
- onError: {
- errorDialog.text = message
- errorDialog.visible = true
- }
- }
-
Flickable {
id: flickable
flickableDirection: Flickable.VerticalFlick
@@ -94,6 +135,23 @@ ApplicationWindow {
background: null
onLinkActivated: Qt.openUrlExternally(link)
+
+ Component.onCompleted: textDocument.source = "qrc:/texteditor.html"
+
+ textDocument.onStatusChanged: {
+ // a message lookup table using computed properties:
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer
+ const statusMessages = {
+ [ TextDocument.ReadError ]: qsTr("Failed to load “%1”"),
+ [ TextDocument.WriteError ]: qsTr("Failed to save “%1”"),
+ [ TextDocument.NonLocalFileError ]: qsTr("Not a local file: “%1”"),
+ }
+ const err = statusMessages[textDocument.status]
+ if (err) {
+ errorDialog.text = err.arg(textDocument.source)
+ errorDialog.open()
+ }
+ }
}
ScrollBar.vertical: ScrollBar {}
@@ -117,27 +175,21 @@ ApplicationWindow {
font.family: "fontello"
// Don't want to close the virtual keyboard when this is clicked.
focusPolicy: Qt.NoFocus
- checkable: true
- checked: document.bold
- onClicked: document.bold = !document.bold
+ action: boldAction
}
ToolButton {
id: italicButton
text: "\uE801" // icon-italic
font.family: "fontello"
focusPolicy: Qt.NoFocus
- checkable: true
- checked: document.italic
- onClicked: document.italic = !document.italic
+ action: italicAction
}
ToolButton {
id: underlineButton
text: "\uF0CD" // icon-underline
font.family: "fontello"
focusPolicy: Qt.NoFocus
- checkable: true
- checked: document.underline
- onClicked: document.underline = !document.underline
+ action: underlineAction
}
ToolSeparator {}
@@ -147,36 +199,28 @@ ApplicationWindow {
text: "\uE803" // icon-align-left
font.family: "fontello"
focusPolicy: Qt.NoFocus
- checkable: true
- checked: document.alignment == Qt.AlignLeft
- onClicked: document.alignment = Qt.AlignLeft
+ action: alignLeftAction
}
ToolButton {
id: alignCenterButton
text: "\uE804" // icon-align-center
font.family: "fontello"
focusPolicy: Qt.NoFocus
- checkable: true
- checked: document.alignment == Qt.AlignHCenter
- onClicked: document.alignment = Qt.AlignHCenter
+ action: alignCenterAction
}
ToolButton {
id: alignRightButton
text: "\uE805" // icon-align-right
font.family: "fontello"
focusPolicy: Qt.NoFocus
- checkable: true
- checked: document.alignment == Qt.AlignRight
- onClicked: document.alignment = Qt.AlignRight
+ action: alignRightAction
}
ToolButton {
id: alignJustifyButton
text: "\uE806" // icon-align-justify
font.family: "fontello"
focusPolicy: Qt.NoFocus
- checkable: true
- checked: document.alignment == Qt.AlignJustify
- onClicked: document.alignment = Qt.AlignJustify
+ action: alignJustifyAction
}
}
}
diff --git a/examples/quickcontrols/texteditor/qml/texteditor.qml b/examples/quickcontrols/texteditor/qml/texteditor.qml
index decf0801e4..154a531752 100644
--- a/examples/quickcontrols/texteditor/qml/texteditor.qml
+++ b/examples/quickcontrols/texteditor/qml/texteditor.qml
@@ -6,9 +6,6 @@ import QtCore
import QtQuick.Controls
import QtQuick.Window
import QtQuick.Dialogs
-import Qt.labs.platform as Platform
-
-import io.qt.examples.texteditor
// TODO:
// - make designer-friendly
@@ -18,7 +15,8 @@ ApplicationWindow {
width: 1024
height: 600
visible: true
- title: document.fileName + " - Text Editor Example"
+ title: textArea.textDocument.source +
+ " - Text Editor Example" + (textArea.textDocument.modified ? " *" : "")
Component.onCompleted: {
x = Screen.width / 2 - width / 2
@@ -27,122 +25,194 @@ ApplicationWindow {
Action {
id: openAction
+ text: qsTr("&Open")
shortcut: StandardKey.Open
- onTriggered: openDialog.open()
+ onTriggered: {
+ if (textArea.textDocument.modified)
+ discardDialog.open()
+ else
+ openDialog.open()
+ }
+ }
+
+ Action {
+ id: saveAction
+ text: qsTr("&Save…")
+ shortcut: StandardKey.Save
+ enabled: textArea.textDocument.modified
+ onTriggered: textArea.textDocument.save()
}
Action {
id: saveAsAction
+ text: qsTr("Save &As…")
shortcut: StandardKey.SaveAs
onTriggered: saveDialog.open()
}
Action {
id: quitAction
+ text: qsTr("&Quit")
shortcut: StandardKey.Quit
onTriggered: close()
}
Action {
id: copyAction
+ text: qsTr("&Copy")
shortcut: StandardKey.Copy
+ enabled: textArea.selectedText
onTriggered: textArea.copy()
}
Action {
id: cutAction
+ text: qsTr("Cu&t")
shortcut: StandardKey.Cut
+ enabled: textArea.selectedText
onTriggered: textArea.cut()
}
Action {
id: pasteAction
+ text: qsTr("&Paste")
shortcut: StandardKey.Paste
+ enabled: textArea.canPaste
onTriggered: textArea.paste()
}
Action {
id: boldAction
+ text: qsTr("&Bold")
shortcut: StandardKey.Bold
- onTriggered: document.bold = !document.bold
+ checkable: true
+ checked: textArea.cursorSelection.font.bold
+ onTriggered: textArea.cursorSelection.font = Qt.font({ bold: checked })
}
Action {
id: italicAction
+ text: qsTr("&Italic")
shortcut: StandardKey.Italic
- onTriggered: document.italic = !document.italic
+ checkable: true
+ checked: textArea.cursorSelection.font.italic
+ onTriggered: textArea.cursorSelection.font = Qt.font({ italic: checked })
}
Action {
id: underlineAction
+ text: qsTr("&Underline")
shortcut: StandardKey.Underline
- onTriggered: document.underline = !document.underline
+ checkable: true
+ checked: textArea.cursorSelection.font.underline
+ onTriggered: textArea.cursorSelection.font = Qt.font({ underline: checked })
+ }
+
+ Action {
+ id: strikeoutAction
+ text: qsTr("&Strikeout")
+ checkable: true
+ checked: textArea.cursorSelection.font.strikeout
+ onTriggered: textArea.cursorSelection.font = Qt.font({ strikeout: checked })
+ }
+
+ Action {
+ id: alignLeftAction
+ text: qsTr("Align &Left")
+ shortcut: "Ctrl+{"
+ checkable: true
+ checked: textArea.cursorSelection.alignment === Qt.AlignLeft
+ onTriggered: textArea.cursorSelection.alignment = Qt.AlignLeft
+ }
+
+ Action {
+ id: alignCenterAction
+ text: qsTr("&Center")
+ shortcut: "Ctrl+|"
+ checkable: true
+ checked: textArea.cursorSelection.alignment === Qt.AlignCenter
+ onTriggered: textArea.cursorSelection.alignment = Qt.AlignCenter
+ }
+
+ Action {
+ id: alignRightAction
+ text: qsTr("Align &Right")
+ shortcut: "Ctrl+}"
+ checkable: true
+ checked: textArea.cursorSelection.alignment === Qt.AlignRight
+ onTriggered: textArea.cursorSelection.alignment = Qt.AlignRight
+ }
+
+ Action {
+ id: alignJustifyAction
+ text: qsTr("&Justify")
+ shortcut: "Ctrl+Alt+}"
+ checkable: true
+ checked: textArea.cursorSelection.alignment === Qt.AlignJustify
+ onTriggered: textArea.cursorSelection.alignment = Qt.AlignJustify
}
- Platform.MenuBar {
- Platform.Menu {
+ menuBar: MenuBar {
+ Menu {
title: qsTr("&File")
- Platform.MenuItem {
- text: qsTr("&Open")
- onTriggered: openDialog.open()
+ MenuItem {
+ action: openAction
}
- Platform.MenuItem {
- text: qsTr("&Save As...")
- onTriggered: saveDialog.open()
+ MenuItem {
+ action: saveAction
}
- Platform.MenuItem {
- text: qsTr("&Quit")
- onTriggered: close()
+ MenuItem {
+ action: saveAsAction
+ }
+ MenuItem {
+ action: quitAction
}
}
- Platform.Menu {
+ Menu {
title: qsTr("&Edit")
- Platform.MenuItem {
- text: qsTr("&Copy")
- enabled: textArea.selectedText
- onTriggered: textArea.copy()
+ MenuItem {
+ action: copyAction
}
- Platform.MenuItem {
- text: qsTr("Cu&t")
- enabled: textArea.selectedText
- onTriggered: textArea.cut()
+ MenuItem {
+ action: cutAction
}
- Platform.MenuItem {
- text: qsTr("&Paste")
- enabled: textArea.canPaste
- onTriggered: textArea.paste()
+ MenuItem {
+ action: pasteAction
}
}
- Platform.Menu {
+ Menu {
title: qsTr("F&ormat")
- Platform.MenuItem {
- text: qsTr("&Bold")
- checkable: true
- checked: document.bold
- onTriggered: document.bold = !document.bold
+ MenuItem {
+ action: boldAction
+ }
+ MenuItem {
+ action: italicAction
+ }
+ MenuItem {
+ action: underlineAction
+ }
+ MenuItem {
+ action: strikeoutAction
+ }
+
+ MenuSeparator {}
+
+ MenuItem {
+ action: alignLeftAction
}
- Platform.MenuItem {
- text: qsTr("&Italic")
- checkable: true
- checked: document.italic
- onTriggered: document.italic = !document.italic
+ MenuItem {
+ action: alignCenterAction
}
- Platform.MenuItem {
- text: qsTr("&Underline")
- checkable: true
- checked: document.underline
- onTriggered: document.underline = !document.underline
+ MenuItem {
+ action: alignJustifyAction
}
- Platform.MenuItem {
- text: qsTr("&Strikeout")
- checkable: true
- checked: document.strikeout
- onTriggered: document.strikeout = !document.strikeout
+ MenuItem {
+ action: alignRightAction
}
}
}
@@ -153,28 +223,29 @@ ApplicationWindow {
selectedNameFilter.index: 1
nameFilters: ["Text files (*.txt)", "HTML files (*.html *.htm)", "Markdown files (*.md *.markdown)"]
currentFolder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
- onAccepted: document.load(selectedFile)
+ onAccepted: {
+ textArea.textDocument.modified = false // we asked earlier, if necessary
+ textArea.textDocument.source = selectedFile
+ }
}
FileDialog {
id: saveDialog
fileMode: FileDialog.SaveFile
- defaultSuffix: document.fileType
nameFilters: openDialog.nameFilters
- selectedNameFilter.index: document.fileType === "txt" ? 0 : 1
currentFolder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
- onAccepted: document.saveAs(selectedFile)
+ onAccepted: textArea.textDocument.saveAs(selectedFile)
}
FontDialog {
id: fontDialog
- onAccepted: document.font = selectedFont
+ onAccepted: textArea.cursorSelection.font = selectedFont
}
ColorDialog {
id: colorDialog
selectedColor: "black"
- onAccepted: document.textColor = selectedColor
+ onAccepted: textArea.cursorSelection.color = selectedColor
}
MessageDialog {
@@ -187,7 +258,23 @@ ApplicationWindow {
title: qsTr("Quit?")
text: qsTr("The file has been modified. Quit anyway?")
buttons: MessageDialog.Yes | MessageDialog.No
- onButtonClicked: function (button, role) { if (role === MessageDialog.YesRole) Qt.quit() }
+ onButtonClicked: function (button, role) {
+ if (role === MessageDialog.YesRole) {
+ textArea.textDocument.modified = false
+ Qt.quit()
+ }
+ }
+ }
+
+ MessageDialog {
+ id : discardDialog
+ title: qsTr("Discard changes?")
+ text: qsTr("The file has been modified. Open a new file anyway?")
+ buttons: MessageDialog.Yes | MessageDialog.No
+ onButtonClicked: function (button, role) {
+ if (role === MessageDialog.YesRole)
+ openDialog.open()
+ }
}
header: ToolBar {
@@ -206,6 +293,13 @@ ApplicationWindow {
action: openAction
focusPolicy: Qt.TabFocus
}
+ ToolButton {
+ id: saveButton
+ text: "\uE80A" // icon-floppy-disk
+ font.family: "fontello"
+ action: saveAction
+ focusPolicy: Qt.TabFocus
+ }
ToolSeparator {
contentItem.visible: fileRow.y === editRow.y
}
@@ -218,7 +312,6 @@ ApplicationWindow {
text: "\uF0C5" // icon-docs
font.family: "fontello"
focusPolicy: Qt.TabFocus
- enabled: textArea.selectedText
action: copyAction
}
ToolButton {
@@ -226,7 +319,6 @@ ApplicationWindow {
text: "\uE802" // icon-scissors
font.family: "fontello"
focusPolicy: Qt.TabFocus
- enabled: textArea.selectedText
action: cutAction
}
ToolButton {
@@ -234,7 +326,6 @@ ApplicationWindow {
text: "\uF0EA" // icon-paste
font.family: "fontello"
focusPolicy: Qt.TabFocus
- enabled: textArea.canPaste
action: pasteAction
}
ToolSeparator {
@@ -249,8 +340,6 @@ ApplicationWindow {
text: "\uE800" // icon-bold
font.family: "fontello"
focusPolicy: Qt.TabFocus
- checkable: true
- checked: document.bold
action: boldAction
}
ToolButton {
@@ -258,8 +347,6 @@ ApplicationWindow {
text: "\uE801" // icon-italic
font.family: "fontello"
focusPolicy: Qt.TabFocus
- checkable: true
- checked: document.italic
action: italicAction
}
ToolButton {
@@ -267,8 +354,6 @@ ApplicationWindow {
text: "\uF0CD" // icon-underline
font.family: "fontello"
focusPolicy: Qt.TabFocus
- checkable: true
- checked: document.underline
action: underlineAction
}
ToolButton {
@@ -276,21 +361,19 @@ ApplicationWindow {
text: "\uF0CC"
font.family: "fontello"
focusPolicy: Qt.TabFocus
- checkable: true
- checked: document.strikeout
- onClicked: document.strikeout = !document.strikeout
+ action: strikeoutAction
}
ToolButton {
id: fontFamilyToolButton
text: qsTr("\uE808") // icon-font
font.family: "fontello"
- font.bold: document.bold
- font.italic: document.italic
- font.underline: document.underline
- font.strikeout: document.strikeout
+ font.bold: textArea.cursorSelection.font.bold
+ font.italic: textArea.cursorSelection.font.italic
+ font.underline: textArea.cursorSelection.font.underline
+ font.strikeout: textArea.cursorSelection.font.strikeout
focusPolicy: Qt.TabFocus
onClicked: function () {
- fontDialog.selectedFont = document.font
+ fontDialog.selectedFont = textArea.cursorSelection.font
fontDialog.open()
}
}
@@ -300,14 +383,14 @@ ApplicationWindow {
font.family: "fontello"
focusPolicy: Qt.TabFocus
onClicked: function () {
- colorDialog.selectedColor = document.textColor
+ colorDialog.selectedColor = textArea.cursorSelection.color
colorDialog.open()
}
Rectangle {
width: aFontMetrics.width + 3
height: 2
- color: document.textColor
+ color: textArea.cursorSelection.color
parent: textColorButton.contentItem
anchors.horizontalCenter: parent.horizontalCenter
anchors.baseline: parent.baseline
@@ -332,79 +415,43 @@ ApplicationWindow {
text: "\uE803" // icon-align-left
font.family: "fontello"
focusPolicy: Qt.TabFocus
- checkable: true
- checked: document.alignment == Qt.AlignLeft
- onClicked: document.alignment = Qt.AlignLeft
+ action: alignLeftAction
}
ToolButton {
id: alignCenterButton
text: "\uE804" // icon-align-center
font.family: "fontello"
focusPolicy: Qt.TabFocus
- checkable: true
- checked: document.alignment == Qt.AlignHCenter
- onClicked: document.alignment = Qt.AlignHCenter
+ action: alignCenterAction
}
ToolButton {
id: alignRightButton
text: "\uE805" // icon-align-right
font.family: "fontello"
focusPolicy: Qt.TabFocus
- checkable: true
- checked: document.alignment == Qt.AlignRight
- onClicked: document.alignment = Qt.AlignRight
+ action: alignRightAction
}
ToolButton {
id: alignJustifyButton
text: "\uE806" // icon-align-justify
font.family: "fontello"
focusPolicy: Qt.TabFocus
- checkable: true
- checked: document.alignment == Qt.AlignJustify
- onClicked: document.alignment = Qt.AlignJustify
+ action: alignJustifyAction
}
}
}
}
- DocumentHandler {
- id: document
- document: textArea.textDocument
- cursorPosition: textArea.cursorPosition
- selectionStart: textArea.selectionStart
- selectionEnd: textArea.selectionEnd
-
- property alias family: document.font.family
- property alias bold: document.font.bold
- property alias italic: document.font.italic
- property alias underline: document.font.underline
- property alias strikeout: document.font.strikeout
- property alias size: document.font.pointSize
-
- Component.onCompleted: {
- if (Qt.application.arguments.length === 2)
- document.load("file:" + Qt.application.arguments[1]);
- else
- document.load("qrc:/texteditor.html")
- }
- onLoaded: function (text, format) {
- textArea.textFormat = format
- textArea.text = text
- }
- onError: function (message) {
- errorDialog.text = message
- errorDialog.open()
- }
- }
-
Flickable {
id: flickable
flickableDirection: Flickable.VerticalFlick
anchors.fill: parent
+ ScrollBar.vertical: ScrollBar {}
+
TextArea.flickable: TextArea {
id: textArea
- textFormat: Qt.RichText
+ textFormat: Qt.AutoText
wrapMode: TextArea.Wrap
focus: true
selectByMouse: true
@@ -418,60 +465,76 @@ ApplicationWindow {
bottomPadding: 0
background: null
- MouseArea {
+ TapHandler {
acceptedButtons: Qt.RightButton
- anchors.fill: parent
- onClicked: contextMenu.open()
+ onTapped: contextMenu.popup()
}
onLinkActivated: function (link) {
Qt.openUrlExternally(link)
}
- }
- ScrollBar.vertical: ScrollBar {}
+ Component.onCompleted: {
+ if (Qt.application.arguments.length === 2)
+ textDocument.source = "file:" + Qt.application.arguments[1]
+ else
+ textDocument.source = "qrc:/texteditor.html"
+ }
+
+ textDocument.onStatusChanged: {
+ // a message lookup table using computed properties:
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer
+ const statusMessages = {
+ [ TextDocument.ReadError ]: qsTr("Failed to load “%1”"),
+ [ TextDocument.WriteError ]: qsTr("Failed to save “%1”"),
+ [ TextDocument.NonLocalFileError ]: qsTr("Not a local file: “%1”"),
+ }
+ const err = statusMessages[textDocument.status]
+ if (err) {
+ errorDialog.text = err.arg(textDocument.source)
+ errorDialog.open()
+ }
+ }
+ }
}
- Platform.Menu {
+ Menu {
id: contextMenu
- Platform.MenuItem {
+ MenuItem {
text: qsTr("Copy")
- enabled: textArea.selectedText
- onTriggered: textArea.copy()
+ action: copyAction
}
- Platform.MenuItem {
+ MenuItem {
text: qsTr("Cut")
- enabled: textArea.selectedText
- onTriggered: textArea.cut()
+ action: cutAction
}
- Platform.MenuItem {
+ MenuItem {
text: qsTr("Paste")
- enabled: textArea.canPaste
- onTriggered: textArea.paste()
+ action: pasteAction
}
- Platform.MenuSeparator {}
+ MenuSeparator {}
- Platform.MenuItem {
+ MenuItem {
text: qsTr("Font...")
onTriggered: function () {
- fontDialog.selectedFont = document.font
+ fontDialog.selectedFont = textArea.cursorSelection.font
fontDialog.open()
}
}
- Platform.MenuItem {
+ MenuItem {
text: qsTr("Color...")
onTriggered: function () {
- colorDialog.selectedColor = document.textColor
+ colorDialog.selectedColor = textArea.cursorSelection.color
colorDialog.open()
}
}
}
onClosing: function (close) {
- if (document.modified) {
+ if (textArea.textDocument.modified) {
quitDialog.open()
close.accepted = false
}
diff --git a/examples/quickcontrols/texteditor/texteditor.cpp b/examples/quickcontrols/texteditor/texteditor.cpp
index 79cd6d8071..36f27bc5c2 100644
--- a/examples/quickcontrols/texteditor/texteditor.cpp
+++ b/examples/quickcontrols/texteditor/texteditor.cpp
@@ -1,35 +1,23 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#ifdef QT_WIDGETS_LIB
-#include <QApplication>
-#else
#include <QGuiApplication>
-#endif
#include <QFontDatabase>
#include <QDebug>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QQuickStyle>
-#include "documenthandler.h"
-
int main(int argc, char *argv[])
{
QGuiApplication::setApplicationName("Text Editor");
QGuiApplication::setOrganizationName("QtProject");
-#ifdef QT_WIDGETS_LIB
- QApplication app(argc, argv);
-#else
QGuiApplication app(argc, argv);
-#endif
if (QFontDatabase::addApplicationFont(":/fonts/fontello.ttf") == -1)
qWarning() << "Failed to load fontello.ttf";
- qmlRegisterType<DocumentHandler>("io.qt.examples.texteditor", 1, 0, "DocumentHandler");
-
QStringList selectors;
#ifdef QT_EXTRA_FILE_SELECTOR
selectors += QT_EXTRA_FILE_SELECTOR;
diff --git a/examples/quickcontrols/texteditor/texteditor.html b/examples/quickcontrols/texteditor/texteditor.html
index 3c59a053c5..0cd406ea1c 100644
--- a/examples/quickcontrols/texteditor/texteditor.html
+++ b/examples/quickcontrols/texteditor/texteditor.html
@@ -20,24 +20,15 @@
Qt Quick Controls 2
</h2>
<p align="center">
- This example demonstrates a modern rich text editor. The UI uses Qt Labs Platforms to provide native menus and dialogs.
+ This example demonstrates a modern rich text editor.
+ In recent Qt versions, components in
+ <a href="https://doc.qt.io/qt-6/qtquick-controls-qmlmodule.html">Qt Quick Controls</a> and
+ <a href="https://doc.qt.io/qt-6/qtquick-dialogs-qmlmodule.html">Qt Quick Dialogs</a>
+ are implemented via their native-platform counterparts as much as possible.
+ <a href="https://doc.qt.io/qt-6/qml-qtquick-controls-textarea.html">TextArea</a>,
+ <a href="https://doc.qt.io/qt-6/qml-qtquick-textedit.html#cursorSelection-prop">TextSelection</a> and
+ <a href="https://doc.qt.io/qt-6/qml-qtquick-textedit.html#textDocument-prop">TextDocument</a>
+ provide text-editing API.
</p>
- <br />
- <br />
- <br />
-
- <p>
- Below you'll find a list of the native controls used in this application.
- </p>
-
- <ul>
- <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-menu.html">Menu</a> - provides a QML API for native platform menu popups.</li>
- <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-menubar.html">MenuBar</a> - provides a QML API for native platform menubars.</li>
- <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-menuitem.html">MenuItem</a> - provides a QML API for native platform menu items.</li>
- <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-filedialog.html">FileDialog</a> - provides a QML API for native platform file dialogs.</li>
- <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-fontdialog.html">FontDialog</a> - provides a QML API for native platform font dialogs.</li>
- <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-colordialog.html">ColorDialog</a> - provides a QML API for native platform color dialogs.</li>
- <li><a href="https://doc.qt.io/qt-6/qml-qt-labs-platform-messagedialog.html">MessageDialog</a> - provides a QML API for native platform message dialogs.</li>
- </ul>
</body>
</html>
diff --git a/examples/quickcontrols/texteditor/texteditor.pro b/examples/quickcontrols/texteditor/texteditor.pro
index 5f021865d3..c224fe6c41 100644
--- a/examples/quickcontrols/texteditor/texteditor.pro
+++ b/examples/quickcontrols/texteditor/texteditor.pro
@@ -1,16 +1,11 @@
TEMPLATE = app
TARGET = texteditor
QT += quick quickcontrols2
-qtHaveModule(widgets): QT += widgets
cross_compile: DEFINES += QT_EXTRA_FILE_SELECTOR=\\\"touch\\\"
-HEADERS += \
- documenthandler.h
-
SOURCES += \
- texteditor.cpp \
- documenthandler.cpp
+ texteditor.cpp
OTHER_FILES += \
qml/*.qml
diff --git a/examples/quickcontrols/wearable/CMakeLists.txt b/examples/quickcontrols/wearable/CMakeLists.txt
index 2963040b79..eb3c17c3e9 100644
--- a/examples/quickcontrols/wearable/CMakeLists.txt
+++ b/examples/quickcontrols/wearable/CMakeLists.txt
@@ -1,206 +1,68 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
-project(wearable LANGUAGES CXX)
+project(wearableexample VERSION 1 LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2 OPTIONAL_COMPONENTS Positioning Location)
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quickcontrols/wearable")
+qt_standard_project_setup()
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2)
+add_subdirectory(Wearable)
+add_subdirectory(WearableSettings)
+add_subdirectory(WearableStyle)
-qt_add_executable(wearable
+qt_add_executable(wearableexample WIN32 MACOSX_BUNDLE
wearable.cpp
)
-set_target_properties(wearable PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
+target_link_libraries(wearableexample PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickControls2
)
-target_link_libraries(wearable PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::QuickControls2
+if(TARGET Qt6::Positioning)
+ target_link_libraries(wearableexample PUBLIC
+ Qt6::Positioning
+ )
+endif()
+
+if(TARGET Qt6::Location)
+target_link_libraries(wearableexample PUBLIC
+ Qt6::Location
)
+endif()
if(UNIX AND NOT APPLE AND CMAKE_CROSSCOMPILING)
find_package(Qt6 REQUIRED COMPONENTS QuickTemplates2)
# Work around QTBUG-86533
- target_link_libraries(wearable PRIVATE Qt::QuickTemplates2)
+ target_link_libraries(wearableexample PRIVATE Qt6::QuickTemplates2)
endif()
-# Resources:
-set(wearable_resource_files
- "icons/wearable/36x36/alarms.png"
- "icons/wearable/36x36/fitness.png"
- "icons/wearable/36x36/navigation.png"
- "icons/wearable/36x36/notifications.png"
- "icons/wearable/36x36/settings.png"
- "icons/wearable/36x36/weather.png"
- "icons/wearable/36x36/worldclock.png"
- "icons/wearable/36x36@2/alarms.png"
- "icons/wearable/36x36@2/fitness.png"
- "icons/wearable/36x36@2/navigation.png"
- "icons/wearable/36x36@2/notifications.png"
- "icons/wearable/36x36@2/settings.png"
- "icons/wearable/36x36@2/weather.png"
- "icons/wearable/36x36@2/worldclock.png"
- "icons/wearable/index.theme"
- "images/back.png"
- "images/back@2x.png"
- "images/background-dark.png"
- "images/background-light.png"
- "images/home.png"
- "images/home@2x.png"
- "qml/Alarms/AlarmsPage.qml"
- "qml/DemoMode.qml"
- "qml/DemoModeIndicator.qml"
- "qml/Fitness/FitnessPage.qml"
- "qml/Fitness/fitness.js"
- "qml/Fitness/images/man-running-dark.png"
- "qml/Fitness/images/man-running-dark@2x.png"
- "qml/Fitness/images/man-running-light.png"
- "qml/Fitness/images/man-running-light@2x.png"
- "qml/Fitness/images/man-walking-dark.png"
- "qml/Fitness/images/man-walking-dark@2x.png"
- "qml/Fitness/images/man-walking-light.png"
- "qml/Fitness/images/man-walking-light@2x.png"
- "qml/LauncherPage.qml"
- "qml/NaviButton.qml"
- "qml/Navigation/NavigationPage.qml"
- "qml/Navigation/RouteElement.qml"
- "qml/Navigation/images/end.png"
- "qml/Navigation/images/end@2x.png"
- "qml/Navigation/images/leftturn-dark.png"
- "qml/Navigation/images/leftturn-dark@2x.png"
- "qml/Navigation/images/leftturn-light.png"
- "qml/Navigation/images/leftturn-light@2x.png"
- "qml/Navigation/images/navigation-dark.png"
- "qml/Navigation/images/navigation-dark@2x.png"
- "qml/Navigation/images/navigation-light.png"
- "qml/Navigation/images/navigation-light@2x.png"
- "qml/Navigation/images/rightturn-dark.png"
- "qml/Navigation/images/rightturn-dark@2x.png"
- "qml/Navigation/images/rightturn-light.png"
- "qml/Navigation/images/rightturn-light@2x.png"
- "qml/Navigation/images/start.png"
- "qml/Navigation/images/start@2x.png"
- "qml/Navigation/images/straight-dark.png"
- "qml/Navigation/images/straight-dark@2x.png"
- "qml/Navigation/images/straight-light.png"
- "qml/Navigation/images/straight-light@2x.png"
- "qml/Navigation/images/uturn.png"
- "qml/Navigation/images/uturn@2x.png"
- "qml/Navigation/navigation.js"
- "qml/Navigation/walk_route.json"
- "qml/Notifications/NotificationsPage.qml"
- "qml/Notifications/images/avatarf-dark.png"
- "qml/Notifications/images/avatarf-dark@2x.png"
- "qml/Notifications/images/avatarf-light.png"
- "qml/Notifications/images/avatarf-light@2x.png"
- "qml/Notifications/images/avatarm-dark.png"
- "qml/Notifications/images/avatarm-dark@2x.png"
- "qml/Notifications/images/avatarm-light.png"
- "qml/Notifications/images/avatarm-light@2x.png"
- "qml/Notifications/images/missedcall-dark.png"
- "qml/Notifications/images/missedcall-dark@2x.png"
- "qml/Notifications/images/missedcall-light.png"
- "qml/Notifications/images/missedcall-light@2x.png"
- "qml/Notifications/notifications.js"
- "qml/Settings/SettingsPage.qml"
- "qml/Settings/images/bluetooth-dark.png"
- "qml/Settings/images/bluetooth-dark@2x.png"
- "qml/Settings/images/bluetooth-light.png"
- "qml/Settings/images/bluetooth-light@2x.png"
- "qml/Settings/images/brightness-dark.png"
- "qml/Settings/images/brightness-dark@2x.png"
- "qml/Settings/images/brightness-light.png"
- "qml/Settings/images/brightness-light@2x.png"
- "qml/Settings/images/demo-mode-dark.png"
- "qml/Settings/images/demo-mode-dark@2x.png"
- "qml/Settings/images/demo-mode-light.png"
- "qml/Settings/images/demo-mode-light@2x.png"
- "qml/Settings/images/demo-mode-white.png"
- "qml/Settings/images/demo-mode-white@2x.png"
- "qml/Settings/images/theme-dark.png"
- "qml/Settings/images/theme-dark@2x.png"
- "qml/Settings/images/theme-light.png"
- "qml/Settings/images/theme-light@2x.png"
- "qml/Settings/images/wifi-dark.png"
- "qml/Settings/images/wifi-dark@2x.png"
- "qml/Settings/images/wifi-light.png"
- "qml/Settings/images/wifi-light@2x.png"
- "qml/Style/PageIndicator.qml"
- "qml/Style/Slider.qml"
- "qml/Style/Switch.qml"
- "qml/Style/UIStyle.qml"
- "qml/Style/qmldir"
- "qml/SwipeViewPage.qml"
- "qml/Weather/WeatherPage.qml"
- "qml/Weather/images/humidity-dark.png"
- "qml/Weather/images/humidity-dark@2x.png"
- "qml/Weather/images/humidity-light.png"
- "qml/Weather/images/humidity-light@2x.png"
- "qml/Weather/images/pressure-dark.png"
- "qml/Weather/images/pressure-dark@2x.png"
- "qml/Weather/images/pressure-light.png"
- "qml/Weather/images/pressure-light@2x.png"
- "qml/Weather/images/sunrise-dark.png"
- "qml/Weather/images/sunrise-dark@2x.png"
- "qml/Weather/images/sunrise-light.png"
- "qml/Weather/images/sunrise-light@2x.png"
- "qml/Weather/images/sunset-dark.png"
- "qml/Weather/images/sunset-dark@2x.png"
- "qml/Weather/images/sunset-light.png"
- "qml/Weather/images/sunset-light@2x.png"
- "qml/Weather/images/temperature-dark.png"
- "qml/Weather/images/temperature-dark@2x.png"
- "qml/Weather/images/temperature-light.png"
- "qml/Weather/images/temperature-light@2x.png"
- "qml/Weather/images/wind-dark.png"
- "qml/Weather/images/wind-dark@2x.png"
- "qml/Weather/images/wind-light.png"
- "qml/Weather/images/wind-light@2x.png"
- "qml/Weather/weather.js"
- "qml/Weather/weather.json"
- "qml/WorldClock/Clock.qml"
- "qml/WorldClock/WorldClockPage.qml"
- "qml/WorldClock/images/center.png"
- "qml/WorldClock/images/center@2x.png"
- "qml/WorldClock/images/second.png"
- "qml/WorldClock/images/second@2x.png"
- "qml/WorldClock/images/swissdaydial.png"
- "qml/WorldClock/images/swissdaydial@2x.png"
- "qml/WorldClock/images/swissdayhour.png"
- "qml/WorldClock/images/swissdayhour@2x.png"
- "qml/WorldClock/images/swissdayminute.png"
- "qml/WorldClock/images/swissdayminute@2x.png"
- "qml/WorldClock/images/swissnightdial.png"
- "qml/WorldClock/images/swissnightdial@2x.png"
- "qml/WorldClock/images/swissnighthour.png"
- "qml/WorldClock/images/swissnighthour@2x.png"
- "qml/WorldClock/images/swissnightminute.png"
- "qml/WorldClock/images/swissnightminute@2x.png"
- "wearable.qml"
+set_target_properties(wearableexample PROPERTIES
+ MACOSX_BUNDLE TRUE
+ MACOSX_BUNDLE_GUI_IDENTIFIER "io.qt.examples.wearable"
+ MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
+ MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
)
-qt6_add_resources(wearable "wearable"
- PREFIX
- "/"
- FILES
- ${wearable_resource_files}
+install(TARGETS wearableexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS wearable
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+qt_generate_deploy_qml_app_script(
+ TARGET wearableexample
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
+
diff --git a/examples/quickcontrols/wearable/Wearable/AlarmsPage.qml b/examples/quickcontrols/wearable/Wearable/AlarmsPage.qml
new file mode 100644
index 0000000000..79377a6c25
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/AlarmsPage.qml
@@ -0,0 +1,172 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls as QQC2
+import WearableStyle
+
+Item {
+ function addAlarm() {
+ alarms.append(
+ {
+ "title": qsTr("New alarm"),
+ "hour": 0,
+ "minute": 0,
+ "nextRing": qsTr("Thursday 20. Nov."),
+ "armed": false
+ })
+ }
+
+ QQC2.AbstractButton {
+ id: plusButton
+ anchors.top: parent.top
+ anchors.right: parent.right
+ anchors.topMargin: 5
+ anchors.leftMargin: 5
+
+ width: height
+ height: 40
+ onClicked: parent.addAlarm()
+
+ Image {
+ anchors.centerIn: parent
+ width: 32
+ height: 32
+ source: UIStyle.iconPath("plus")
+ }
+ }
+
+ ListModel {
+ id: alarms
+ ListElement {
+ title: qsTr("Workday morning")
+ hour: 6
+ minute: 30
+ nextRing: qsTr("Thursday 20. Nov.")
+ armed: false
+ }
+ ListElement {
+ title: qsTr("Weekend morning")
+ hour: 8
+ minute: 40
+ nextRing: qsTr("Saturday 22. Nov.")
+ armed: false
+ }
+ }
+
+ property alias alarmList: listview
+
+ ListView {
+ id: listview
+
+ anchors.fill: parent
+ anchors.margins: 15
+ anchors.topMargin: 40 + 15
+ spacing: 10
+
+ model: alarms
+
+ delegate: ListHeaderItem {
+ id: alarmItem
+
+ property alias onSwitch: onSwitch
+ property alias minuteTumbler: minuteTumbler
+ property alias hourTumbler: hourTumbler
+
+ required property string title
+ required property string nextRing
+ required property bool armed
+
+ width: parent.width
+ height: 94
+
+ Item {
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ height: 28
+
+ Text {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.margins: 10
+ text: alarmItem.title
+ color: UIStyle.titletextColor
+ font: UIStyle.h3
+ }
+ Text {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ anchors.margins: 10
+ text: alarmItem.nextRing
+ color: UIStyle.titletextColor
+ font: UIStyle.p1
+ }
+ }
+
+ Item {
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+ height: 66
+
+ Switch {
+ id: onSwitch
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.margins: 15
+ checked: alarmItem.armed
+ }
+
+ QQC2.Tumbler {
+ id: minuteTumbler
+ height: parent.height
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ anchors.rightMargin: 0
+ visibleItemCount: 1
+ model: 60
+
+ delegate: Text {
+ required property int modelData
+ text: (modelData < 10 ? "0" : "") + modelData
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ leftPadding: 5
+ font: UIStyle.tumblerFont
+ color: UIStyle.textColor
+ }
+ }
+
+ Text {
+ id: timespacer
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: minuteTumbler.left
+ verticalAlignment: Text.AlignVCenter
+ font: UIStyle.tumblerFont
+ color: UIStyle.textColor
+ text: ":"
+ }
+
+ QQC2.Tumbler {
+ id: hourTumbler
+ height: parent.height
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: timespacer.left
+ visibleItemCount: 1
+ model: 12
+
+ delegate: Text {
+ required property int modelData
+ text: (modelData < 10 ? "0" : "") + modelData
+ horizontalAlignment: Text.AlignRight
+ verticalAlignment: Text.AlignVCenter
+ rightPadding: 5
+ font: UIStyle.tumblerFont
+ color: UIStyle.textColor
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/wearable/Wearable/AppSettings.qml b/examples/quickcontrols/wearable/Wearable/AppSettings.qml
new file mode 100644
index 0000000000..3af505867c
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/AppSettings.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+pragma Singleton
+
+import QtCore
+
+Settings {
+ property bool wireless
+ property bool bluetooth
+ property int brightness
+ property bool darkTheme
+ property bool demoMode
+}
diff --git a/examples/quickcontrols/wearable/Wearable/CMakeLists.txt b/examples/quickcontrols/wearable/Wearable/CMakeLists.txt
new file mode 100644
index 0000000000..05cc1115a8
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/CMakeLists.txt
@@ -0,0 +1,152 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(wearable LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2)
+
+qt_policy(SET QTP0001 NEW)
+qt_add_qml_module(wearable
+ URI Wearable
+ PLUGIN_TARGET wearable
+ QML_FILES
+ AlarmsPage.qml
+ Clock.qml
+ DemoMode.qml
+ DemoModeIndicator.qml
+ FitnessPage.qml
+ LauncherPage.qml
+ ListHeaderItem.qml
+ ListItem.qml
+ Main.qml
+ MenuHeader.qml
+ NavigationPage.qml
+ NavigationFallbackPage.qml
+ NotificationsPage.qml
+ RouteElement.qml
+ SettingsPage.qml
+ SwipeViewPage.qml
+ WeatherPage.qml
+ WorldClockPage.qml
+ fitness.js
+ navigation.js
+ notifications.js
+ weather.js
+ RESOURCES
+ icons/wind-light.svg
+ icons/wind-dark.svg
+ icons/wifi-light.svg
+ icons/wifi-dark.svg
+ icons/weather-light.svg
+ icons/weather-dark.svg
+ icons/uturnright-light.svg
+ icons/uturnright-dark.svg
+ icons/uturnleft-light.svg
+ icons/uturnleft-dark.svg
+ icons/thermometer-light.svg
+ icons/thermometer-dark.svg
+ icons/sunset-light.svg
+ icons/sunset-dark.svg
+ icons/sunrise-light.svg
+ icons/sunrise-dark.svg
+ icons/sun-light.svg
+ icons/sun-dark.svg
+ icons/settings-light.svg
+ icons/settings-dark.svg
+ icons/right-light.svg
+ icons/right-dark.svg
+ icons/pressure-light.svg
+ icons/pressure-dark.svg
+ icons/plus-light.svg
+ icons/plus-dark.svg
+ icons/notification-light.svg
+ icons/notification-dark.svg
+ icons/maps-light.svg
+ icons/maps-dark.svg
+ icons/lightright-light.svg
+ icons/lightright-dark.svg
+ icons/lightleft-light.svg
+ icons/lightleft-dark.svg
+ icons/left-light.svg
+ icons/left-dark.svg
+ icons/hearth-light.svg
+ icons/hearth-dark.svg
+ icons/forward-light.svg
+ icons/forward-dark.svg
+ icons/drop-light.svg
+ icons/drop-dark.svg
+ icons/demomode-light.svg
+ icons/demomode-dark.svg
+ icons/darkmode-light.svg
+ icons/darkmode-dark.svg
+ icons/clock-light.svg
+ icons/clock-dark.svg
+ icons/bluetooth-light.svg
+ icons/bluetooth-dark.svg
+ icons/bell-light.svg
+ icons/bell-dark.svg
+ icons/bearright-light.svg
+ icons/bearright-dark.svg
+ icons/bearleft-light.svg
+ icons/bearleft-dark.svg
+ icons/back-light.svg
+ icons/back-dark.svg
+ icons/weather-thundershower-light.svg
+ icons/weather-thundershower-dark.svg
+ icons/weather-sunny-very-few-clouds-light.svg
+ icons/weather-sunny-very-few-clouds-dark.svg
+ icons/weather-sunny-light.svg
+ icons/weather-sunny-dark.svg
+ icons/weather-storm-light.svg
+ icons/weather-storm-dark.svg
+ icons/weather-snow-light.svg
+ icons/weather-snow-dark.svg
+ icons/weather-sleet-light.svg
+ icons/weather-sleet-dark.svg
+ icons/weather-showers-scattered-light.svg
+ icons/weather-showers-scattered-dark.svg
+ icons/weather-showers-light.svg
+ icons/weather-showers-dark.svg
+ icons/weather-overcast-light.svg
+ icons/weather-overcast-dark.svg
+ icons/weather-icy-light.svg
+ icons/weather-icy-dark.svg
+ icons/weather-haze-light.svg
+ icons/weather-haze-dark.svg
+ icons/weather-fog-light.svg
+ icons/weather-fog-dark.svg
+ icons/weather-few-clouds-light.svg
+ icons/weather-few-clouds-dark.svg
+ images/fitness-man-walking-light.svg
+ images/fitness-man-running-light.svg
+ images/fitness-man-walking-dark.svg
+ images/fitness-man-running-dark.svg
+ images/fallbackmap.png
+ fallbackroute.json
+ weather.json
+)
+
+target_link_libraries(wearable PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickControls2
+)
+
+if(UNIX AND NOT APPLE AND CMAKE_CROSSCOMPILING)
+ find_package(Qt6 REQUIRED COMPONENTS QuickTemplates2)
+
+ # Work around QTBUG-86533
+ target_link_libraries(wearable PRIVATE Qt6::QuickTemplates2)
+endif()
+
+install(TARGETS wearable
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/Wearable"
+ LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR}/Wearable"
+)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qmldir
+ DESTINATION "${CMAKE_INSTALL_BINDIR}/Wearable"
+)
diff --git a/examples/quickcontrols/wearable/Wearable/Clock.qml b/examples/quickcontrols/wearable/Wearable/Clock.qml
new file mode 100644
index 0000000000..638a336a9e
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/Clock.qml
@@ -0,0 +1,248 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
+
+import QtQuick
+import QtQuick.Shapes
+import Wearable
+import WearableStyle
+
+SwipeViewPage {
+ id: clock
+
+ required property real shift
+ required property string cityName
+
+ property int hours
+ property int minutes
+ property int seconds
+ property bool night: false
+ property bool internationalTime: true //Unset for local time
+
+ function timeChanged() {
+ const date = new Date
+ hours = internationalTime ? date.getUTCHours() + Math.floor(clock.shift) : date.getHours()
+ night = (hours < 7 || hours > 19)
+ minutes = internationalTime ? date.getUTCMinutes() + ((clock.shift % 1) * 60) : date.getMinutes()
+ seconds = date.getUTCSeconds()
+ }
+
+ Timer {
+ interval: 100
+ running: true
+ repeat: true
+ onTriggered: clock.timeChanged()
+ }
+
+ Rectangle {
+
+ anchors.centerIn: parent
+
+ id: background
+ color: clock.night ? "#000000" : "#FFFFFF"
+ radius: width / 2
+ width: 200
+ height: 200
+
+ Repeater {
+ model: 12
+ Rectangle {
+ id: minuteMarker
+ x: parent.width / 2 + 73 ; y: parent.height / 2 - 3
+ width: 14
+ height: 6
+ color: clock.night ? "#FFFFFF" : "#000000"
+ antialiasing: true
+ required property int index
+ transform: Rotation {
+ angle: minuteMarker.index / 12 * 360
+ origin.x: -73
+ origin.y: 3
+ }
+ }
+ }
+
+ Repeater {
+ model: 60
+ Rectangle {
+ id: secondMarker
+ x: parent.width / 2 + 90 ; y: parent.height / 2 - 1
+ width: 8
+ height: 2
+ color: clock.night ? "#FFFFFF" : "#000000"
+ antialiasing: true
+ required property int index
+ transform: Rotation {
+ angle: secondMarker.index / 60 * 360
+ origin.x: -90
+ origin.y: 1
+ }
+ }
+ }
+
+ Shape {
+ id: hourHand
+ x: parent.width / 2
+ y: parent.width / 2
+ preferredRendererType: Shape.CurveRenderer
+
+ ShapePath {
+ fillColor: clock.night ? "#FFFFFF" : "#000000"
+ strokeWidth:0
+
+ startX: 5
+ startY: 14
+ PathLine {
+ x: -5
+ y: 14
+ }
+ PathLine {
+ x: -4
+ y: -71
+ }
+ PathLine {
+ x: 4
+ y: -71
+ }
+ }
+
+ transform: Rotation {
+ id: hourRotation
+ angle: clock.hours * 6 + clock.minutes * 6 / 12
+ Behavior on angle {
+ SpringAnimation {
+ spring: 2
+ damping: 0.2
+ modulus: 360
+ }
+ }
+ }
+ }
+
+ Shape {
+ id: minuteHand
+ x: parent.width / 2
+ y: parent.width / 2
+ preferredRendererType: Shape.CurveRenderer
+
+ ShapePath {
+ fillColor: clock.night ? "#FFFFFF" : "#000000"
+ strokeWidth:0
+
+ startX: 5
+ startY: 14
+ PathLine {
+ x: -5
+ y: 14
+ }
+ PathLine {
+ x: -4
+ y: -89
+ }
+ PathLine {
+ x: 4
+ y: -89
+ }
+ }
+
+ transform: Rotation {
+ id: minuteRotation
+ angle: clock.minutes * 6
+ Behavior on angle {
+ SpringAnimation {
+ spring: 2
+ damping: 0.2
+ modulus: 360
+ }
+ }
+ }
+ }
+
+ Shape {
+ id: secondHand
+ x: parent.width / 2
+ y: parent.width / 2
+ preferredRendererType: Shape.CurveRenderer
+
+ ShapePath {
+ fillColor: UIStyle.highlightColor
+ strokeWidth: 0
+
+ startX: 1
+ startY: 14
+ PathLine {
+ x: -1
+ y: 14
+ }
+ PathLine {
+ x: -1
+ y: -89
+ }
+ PathLine {
+ x: 1
+ y: -89
+ }
+ }
+
+ ShapePath {
+ fillColor: UIStyle.highlightColor
+ strokeWidth: 0
+
+ startX: 0
+ startY: 3
+ PathArc {
+ x: 0
+ y: -3
+ radiusX: 3
+ radiusY: 3
+ }
+ PathArc {
+ x: 0
+ y: 3
+ radiusX: 3
+ radiusY: 3
+ }
+ PathMove {
+ x: 0
+ y: -75
+ }
+ PathArc {
+ x: 0
+ y: -65
+ radiusX: 5
+ radiusY: 5
+ }
+ PathArc {
+ x: 0
+ y: -75
+ radiusX: 5
+ radiusY: 5
+ }
+ }
+
+ transform: Rotation {
+ id: secondsRotation
+ angle: clock.seconds * 6
+ Behavior on angle {
+ SpringAnimation {
+ spring: 2
+ damping: 0.2
+ modulus: 360
+ }
+ }
+ }
+ }
+ }
+
+ Text {
+ id: cityLabel
+ anchors.top: background.bottom
+ anchors.margins: 10
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ text: parent.cityName
+ color: UIStyle.textColor
+ font: UIStyle.h2
+ }
+
+}
diff --git a/examples/quickcontrols/wearable/Wearable/DemoMode.qml b/examples/quickcontrols/wearable/Wearable/DemoMode.qml
new file mode 100644
index 0000000000..3a040edeaf
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/DemoMode.qml
@@ -0,0 +1,174 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+import WearableSettings
+
+Item {
+ id: demoItem
+ required property StackView stackView
+
+ SequentialAnimation {
+ id: demoModeAnimation
+ loops: 2 //darkMode and lightMode
+ running: WearableSettings.demoMode
+
+ // Go back to the launcher page.
+ PauseAnimation { duration: 1000 }
+ ScriptAction { script: demoItem.stackView.pop(null) }
+ PauseAnimation { duration: 2000 }
+
+
+ // Open the world clock page.
+ ScriptAction { script: demoItem.stackView.currentItem.currentIndex = 0 }
+ PauseAnimation { duration: 1000 }
+ ScriptAction { script: demoItem.stackView.currentItem.launched(qsTr("World Clock"), "WorldClockPage.qml", "") }
+ PauseAnimation { duration: 2000 }
+
+ // Swipe across a few times.
+ SequentialAnimation {
+ loops: 6
+
+ ScriptAction { script: demoItem.stackView.currentItem.children[0].incrementCurrentIndex() }
+ PauseAnimation { duration: 2500 }
+ }
+
+ // Go back to the launcher page.
+ ScriptAction { script: demoItem.stackView.pop(null) }
+ PauseAnimation { duration: 2000 }
+
+
+
+ // Open the navigation page.
+ ScriptAction { script: demoItem.stackView.currentItem.incrementCurrentIndex() }
+ PauseAnimation { duration: 1000 }
+ ScriptAction { script: demoItem.stackView.currentItem.launched(qsTr("Navigation"), "NavigationPage.qml", "NavigationFallbackPage.qml") }
+ PauseAnimation { duration: 2000 }
+
+ // Scroll through the route.
+ SequentialAnimation {
+ loops: 23
+
+ ScriptAction { script: demoItem.stackView.currentItem.incrementPoint() }
+ PauseAnimation { duration: 2000 }
+ }
+
+ // Go back to the launcher page.
+ ScriptAction { script: demoItem.stackView.pop(null) }
+ PauseAnimation { duration: 2000 }
+
+
+
+ // Open the weather page.
+ ScriptAction { script: demoItem.stackView.currentItem.incrementCurrentIndex() }
+ PauseAnimation { duration: 1000 }
+ ScriptAction { script: demoItem.stackView.currentItem.launched(qsTr("Weather"), "WeatherPage.qml", "") }
+ PauseAnimation { duration: 2000 }
+
+ // Flick down..
+ SequentialAnimation {
+ loops: 3
+ ScriptAction { script: demoItem.stackView.currentItem.children[0].flick(0, - 800) }
+ PauseAnimation { duration: 2000 }
+ }
+
+ // Go back to the launcher page.
+ ScriptAction { script: demoItem.stackView.pop(null) }
+ PauseAnimation { duration: 2000 }
+
+
+
+ // Open the fitness page.
+ ScriptAction { script: demoItem.stackView.currentItem.incrementCurrentIndex() }
+ PauseAnimation { duration: 1000 }
+ ScriptAction { script: demoItem.stackView.currentItem.launched(qsTr("Fitness"), "FitnessPage.qml", "") }
+ PauseAnimation { duration: 2000 }
+
+ // Swipe across once.
+ SequentialAnimation {
+ loops: 1
+
+ ScriptAction { script: demoItem.stackView.currentItem.children[0].incrementCurrentIndex() }
+ PauseAnimation { duration: 2000 }
+ }
+
+ // Go back to the launcher page.
+ ScriptAction { script: demoItem.stackView.pop(null) }
+ PauseAnimation { duration: 2000 }
+
+ // Open the notifications page.
+ ScriptAction { script: demoItem.stackView.currentItem.incrementCurrentIndex() }
+ PauseAnimation { duration: 1000 }
+ ScriptAction { script: demoItem.stackView.currentItem.launched(qsTr("Notifications"), "NotificationsPage.qml", "") }
+ PauseAnimation { duration: 2000 }
+
+ // Go back to the launcher page.
+ ScriptAction { script: demoItem.stackView.pop(null) }
+ PauseAnimation { duration: 2000 }
+
+
+
+ // Open the alarms page.
+ ScriptAction { script: demoItem.stackView.currentItem.incrementCurrentIndex() }
+ PauseAnimation { duration: 1000 }
+ ScriptAction { script: demoItem.stackView.currentItem.launched(qsTr("Alarm"), "AlarmsPage.qml", "") }
+ PauseAnimation { duration: 2000 }
+
+ // Toggle the switch.
+ ScriptAction { script: demoItem.stackView.currentItem.alarmList.itemAtIndex(0).onSwitch.toggle() }
+ PauseAnimation { duration: 500 }
+ ScriptAction { script: demoItem.stackView.currentItem.alarmList.itemAtIndex(1).onSwitch.toggle() }
+ PauseAnimation { duration: 2000 }
+ ScriptAction { script: demoItem.stackView.currentItem.alarmList.itemAtIndex(0).hourTumbler.currentIndex = 8 }
+ PauseAnimation { duration: 200 }
+ ScriptAction { script: demoItem.stackView.currentItem.alarmList.itemAtIndex(0).minuteTumbler.currentIndex = 15 }
+ PauseAnimation { duration: 300 }
+ ScriptAction { script: demoItem.stackView.currentItem.alarmList.itemAtIndex(1).hourTumbler.currentIndex = 9 }
+ PauseAnimation { duration: 200 }
+ ScriptAction { script: demoItem.stackView.currentItem.alarmList.itemAtIndex(1).minuteTumbler.currentIndex = 45 }
+ PauseAnimation { duration: 2000 }
+ ScriptAction { script: demoItem.stackView.currentItem.addAlarm() }
+ PauseAnimation { duration: 2000 }
+ ScriptAction { script: demoItem.stackView.currentItem.alarmList.itemAtIndex(2).onSwitch.toggle() }
+ PauseAnimation { duration: 100 }
+ ScriptAction { script: demoItem.stackView.currentItem.alarmList.itemAtIndex(0).onSwitch.toggle() }
+ PauseAnimation { duration: 100 }
+ ScriptAction { script: demoItem.stackView.currentItem.alarmList.itemAtIndex(1).onSwitch.toggle() }
+ PauseAnimation { duration: 2000 }
+ ScriptAction { script: demoItem.stackView.currentItem.alarmList.itemAtIndex(2).hourTumbler.currentIndex = 10 }
+ PauseAnimation { duration: 200 }
+ ScriptAction { script: demoItem.stackView.currentItem.alarmList.itemAtIndex(2).minuteTumbler.currentIndex = 30 }
+ PauseAnimation { duration: 2000 }
+
+ // Go back to the launcher page.
+ ScriptAction { script: demoItem.stackView.pop(null) }
+ PauseAnimation { duration: 2000 }
+
+
+ // Open the settings page.
+ ScriptAction { script: demoItem.stackView.currentItem.incrementCurrentIndex() }
+ PauseAnimation { duration: 1000 }
+ ScriptAction { script: demoItem.stackView.currentItem.launched(qsTr("Settings"), "SettingsPage.qml", "") }
+ PauseAnimation { duration: 3000 }
+
+ // Toggle the switches.
+ ScriptAction { script: demoItem.stackView.currentItem.listView.brightnessItem.value = 80 }
+ PauseAnimation { duration: 1000 }
+ ScriptAction { script: demoItem.stackView.currentItem.listView.bluetoothItem.toggle() }
+ PauseAnimation { duration: 1000 }
+ ScriptAction { script: demoItem.stackView.currentItem.listView.wifiItem.toggle() }
+ PauseAnimation { duration: 1000 }
+ SequentialAnimation {
+ loops: 2
+ ScriptAction { script: demoItem.stackView.currentItem.children[0].flick(0, - 800) }
+ PauseAnimation { duration: 500 }
+ }
+ ScriptAction { script: demoItem.stackView.currentItem.listView.darkmodeItem.toggle() }
+ PauseAnimation { duration: 3000 }
+
+ // Go back to the launcher page.
+ ScriptAction { script: demoItem.stackView.pop(null) }
+ }
+}
diff --git a/examples/quickcontrols/wearable/Wearable/DemoModeIndicator.qml b/examples/quickcontrols/wearable/Wearable/DemoModeIndicator.qml
new file mode 100644
index 0000000000..3e3f090803
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/DemoModeIndicator.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls as QQC2
+import WearableStyle
+import QtQuick.Effects
+
+Item {
+ id: indicator
+ width: row.implicitWidth + margins * 2
+ height: row.implicitHeight + margins * 2
+
+ opacity: 0.8
+
+ readonly property int margins: 12
+
+ Behavior on y {
+ NumberAnimation {}
+ }
+
+ Rectangle {
+ id: demoModeIndicatorBg
+ anchors.fill: parent
+ radius: 20
+ color: UIStyle.colorRed
+ }
+
+ MultiEffect {
+ source: demoModeIndicatorBg
+ anchors.fill: parent
+ shadowEnabled: true
+ shadowBlur: 0.3
+ shadowHorizontalOffset: 2
+ shadowVerticalOffset: 2
+ opacity: 0.5
+ }
+ Row {
+ id: row
+ spacing: 8
+ anchors.fill: parent
+ anchors.leftMargin: parent.margins
+ anchors.rightMargin: parent.margins
+
+ Image {
+ source: UIStyle.iconPath("demomode")
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ QQC2.Label {
+ id: instructionLabel
+ text: qsTr("Tap screen to use")
+ font: UIStyle.h3
+ color: UIStyle.textColor
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+}
diff --git a/examples/quickcontrols/wearable/Wearable/FitnessPage.qml b/examples/quickcontrols/wearable/Wearable/FitnessPage.qml
new file mode 100644
index 0000000000..245d501842
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/FitnessPage.qml
@@ -0,0 +1,283 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls as QQC2
+import QtQuick.Shapes
+import Wearable
+import WearableStyle
+
+import "fitness.js" as FitnessData
+
+Item {
+
+ component AngularProgressBar : Shape {
+ id: apb
+ preferredRendererType: Shape.CurveRenderer
+
+ property real value: 0.5
+ property int rad: 75
+
+ ShapePath {
+ id: bgR
+ strokeColor: UIStyle.buttonBackground
+ strokeWidth: 8
+ capStyle: ShapePath.RoundCap
+ fillColor: "#00000000"
+ property real sA: (90 + 45) / 180 * Math.PI
+ property real eA: (360 + 45) / 180 * Math.PI
+ property real mA: (sA + eA) / 2
+ startX: apb.rad * Math.cos(bgR.sA)
+ startY: apb.rad * Math.sin(bgR.sA)
+ PathArc {
+ x: apb.rad * Math.cos(bgR.mA)
+ y: apb.rad * Math.sin(bgR.mA)
+ radiusX: apb.rad
+ radiusY: apb.rad
+ }
+ PathArc {
+ x: apb.rad * Math.cos(bgR.eA)
+ y: apb.rad * Math.sin(bgR.eA)
+ radiusX: apb.rad
+ radiusY: apb.rad
+ }
+ }
+
+ ShapePath {
+ id: fgR
+ strokeColor: UIStyle.buttonProgress
+ strokeWidth: 8
+ capStyle: ShapePath.RoundCap
+ fillColor: "#00000000"
+ property real sA: bgR.sA
+ property real eA: sA + (bgR.eA - sA) * apb.value
+ property real mA: (sA + eA) / 2
+ startX: apb.rad * Math.cos(fgR.sA)
+ startY: apb.rad * Math.sin(fgR.sA)
+ PathArc {
+ x: apb.rad * Math.cos(fgR.mA)
+ y: apb.rad * Math.sin(fgR.mA)
+ radiusX: apb.rad
+ radiusY: apb.rad
+ }
+ PathArc {
+ x: apb.rad * Math.cos(fgR.eA)
+ y: apb.rad * Math.sin(fgR.eA)
+ radiusX: apb.rad
+ radiusY: apb.rad
+ }
+ }
+ }
+
+ QQC2.SwipeView {
+ id: svFitnessContainer
+
+ anchors.fill: parent
+
+ SwipeViewPage {
+ id: fitnessPage1
+
+ Image {
+ id: walkingDude
+ anchors.centerIn: parent
+ source: UIStyle.themeImagePath("fitness-man-walking")
+ }
+
+ AngularProgressBar {
+ anchors.horizontalCenter: walkingDude.horizontalCenter
+ anchors.bottom: walkingDude.bottom
+ anchors.horizontalCenterOffset: 40
+ value: FitnessData.getWalkingSteps() / FitnessData.getWalkingGoal()
+ }
+
+ Column {
+ anchors.top: walkingDude.bottom
+ anchors.topMargin: 15
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ spacing: -7
+ Item {
+ width: childrenRect.width
+ height: childrenRect.height
+
+ Text {
+ id: steps
+ text: FitnessData.getWalkingSteps()
+ font: UIStyle.h2
+ color: UIStyle.textColor
+ }
+
+ Text {
+ anchors.bottom: steps.bottom
+ anchors.left: steps.right
+ anchors.leftMargin: 5
+ text: qsTr("steps")
+ font: UIStyle.p2
+ color: UIStyle.textColor
+ }
+ }
+
+ Item {
+ width: childrenRect.width
+ height: childrenRect.height
+
+ Text {
+ id: time
+ text: FitnessData.getWalkingTime()
+ font: UIStyle.h2
+ color: UIStyle.textColor
+ }
+
+ Text {
+ anchors.bottom: time.bottom
+ anchors.left: time.right
+ anchors.leftMargin: 5
+ text: qsTr("min")
+ font: UIStyle.p2
+ color: UIStyle.textColor
+ }
+ }
+
+ Item {
+ width: childrenRect.width
+ height: childrenRect.height
+
+ Text {
+ id: cal
+ text: FitnessData.getWalkingCalories()
+ font: UIStyle.h2
+ color: UIStyle.textColor
+ }
+
+ Text {
+ anchors.bottom: cal.bottom
+ anchors.left: cal.right
+ anchors.leftMargin: 5
+ text: qsTr("cal")
+ font: UIStyle.p2
+ color: UIStyle.textColor
+ }
+ }
+ }
+ }
+
+ SwipeViewPage {
+ id: fitnessPage2
+
+ Image {
+ id: runningDude
+ anchors.centerIn: parent
+ source: UIStyle.themeImagePath("fitness-man-running")
+ }
+
+ AngularProgressBar {
+ anchors.horizontalCenter: runningDude.horizontalCenter
+ anchors.bottom: runningDude.bottom
+ anchors.horizontalCenterOffset: 40
+ value: FitnessData.getRunningDistance() / FitnessData.getRunningGoal()
+ }
+
+ Row {
+ anchors.top: runningDude.bottom
+ anchors.horizontalCenter: runningDude.horizontalCenter
+ anchors.topMargin: 15
+
+ spacing: 10
+
+ Item {
+ width: childrenRect.width
+ height: childrenRect.height
+
+ Text {
+ id: goal
+ text: qsTr("Goal")
+ font: UIStyle.p2
+ color: UIStyle.textColor
+ }
+ Text {
+ anchors.bottom: goal.bottom
+ anchors.left: goal.right
+ anchors.leftMargin: 5
+ text: FitnessData.getRunningGoal() + " km"
+ font: UIStyle.h2
+ color: UIStyle.textColor
+ }
+ }
+
+ Rectangle {
+ width: 1
+ height: 75
+ color: UIStyle.textColor
+ }
+
+ Column {
+ spacing: -7
+ Item {
+ width: childrenRect.width
+ height: childrenRect.height
+ Text {
+ id: distance
+ text: qsTr("Distance")
+ font: UIStyle.p2
+ color: UIStyle.textColor
+ }
+ Text {
+ anchors.bottom: distance.bottom
+ anchors.left: distance.right
+ anchors.leftMargin: 5
+ text: FitnessData.getRunningDistance() + " km"
+ font: UIStyle.h2
+ color: UIStyle.textColor
+ }
+ }
+
+ Item {
+ width: childrenRect.width
+ height: childrenRect.height
+ Text {
+ id: runningtime
+ text: FitnessData.getRunningTime()
+ font: UIStyle.h2
+ color: UIStyle.textColor
+ }
+ Text {
+ anchors.bottom: runningtime.bottom
+ anchors.left: runningtime.right
+ anchors.leftMargin: 5
+ text: "min"
+ font: UIStyle.p2
+ color: UIStyle.textColor
+ }
+ }
+
+ Item {
+ width: childrenRect.width
+ height: childrenRect.height
+ Text {
+ id: runningcal
+ text: FitnessData.getRunningCalories()
+ font: UIStyle.h2
+ color: UIStyle.textColor
+ }
+ Text {
+ anchors.bottom: runningcal.bottom
+ anchors.left: runningcal.right
+ anchors.leftMargin: 5
+ text: qsTr("calories")
+ font: UIStyle.p2
+ color: UIStyle.textColor
+ }
+ }
+ }
+ }
+ }
+ }
+
+ QQC2.PageIndicator {
+ count: svFitnessContainer.count
+ currentIndex: svFitnessContainer.currentIndex
+
+ anchors.bottom: svFitnessContainer.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+}
diff --git a/examples/quickcontrols/wearable/Wearable/LauncherPage.qml b/examples/quickcontrols/wearable/Wearable/LauncherPage.qml
new file mode 100644
index 0000000000..4c3e423e90
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/LauncherPage.qml
@@ -0,0 +1,185 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+pragma ComponentBehavior: Bound
+
+import QtQuick
+import QtQuick.Controls as QQC2
+import WearableStyle
+
+//! [LauncherPage start]
+PathView {
+ id: circularView
+
+ signal launched(string title, string page, string fallbackpage)
+//! [LauncherPage start]
+
+ readonly property int cX: width / 2
+ readonly property int cY: height / 2
+ readonly property int size: Math.min(width - 80, height)
+ readonly property int itemSize: size / 5
+ readonly property int radius: size / 2 - itemSize / 4
+
+ snapMode: PathView.SnapToItem
+
+//! [Model start]
+ model: ListModel {
+//! [Model start]
+ ListElement {
+ title: qsTr("World Clock")
+ pageIcon: "clock"
+ page: "WorldClockPage.qml"
+ fallback: ""
+ }
+//! [Model mid]
+ ListElement {
+ title: qsTr("Navigation")
+ pageIcon: "maps"
+ page: "NavigationPage.qml"
+ fallback: "NavigationFallbackPage.qml"
+ }
+//! [Model mid]
+ ListElement {
+ title: qsTr("Weather")
+ pageIcon: "weather"
+ page: "WeatherPage.qml"
+ fallback: "WeatherPage.qml"
+ }
+ ListElement {
+ title: qsTr("Fitness")
+ pageIcon: "hearth"
+ page: "FitnessPage.qml"
+ fallback: ""
+ }
+ ListElement {
+ title: qsTr("Notifications")
+ pageIcon: "notification"
+ page: "NotificationsPage.qml"
+ fallback: ""
+ }
+ ListElement {
+ title: qsTr("Alarm")
+ pageIcon: "bell"
+ page: "AlarmsPage.qml"
+ fallback: ""
+ }
+//! [Model end]
+ ListElement {
+ title: qsTr("Settings")
+ pageIcon: "settings"
+ page: "SettingsPage.qml"
+ fallback: ""
+ }
+ }
+//! [Model end]
+
+//! [Delegate start]
+ delegate: QQC2.RoundButton {
+//! [Delegate start]
+ width: circularView.itemSize
+ height: circularView.itemSize
+
+ required property string title
+ required property string pageIcon
+ required property string page
+ required property string fallback
+ required property int index
+
+//! [Delegate mid]
+ icon.width: 36
+ icon.height: 36
+ icon.source: UIStyle.iconPath(pageIcon)
+ icon.color: UIStyle.textColor
+//! [Delegate mid]
+ padding: 12
+
+ background: Rectangle {
+ radius: width / 2
+ color: parent.PathView.isCurrentItem ? UIStyle.highlightColor : UIStyle.buttonBackground
+ border.width: 1
+ border.color: UIStyle.buttonGrayOutLine
+
+ Rectangle {
+ radius: parent.radius
+ anchors.fill: parent
+ gradient: Gradient {
+ GradientStop {
+ position: 0.0
+ color: UIStyle.gradientOverlay1
+ }
+ GradientStop {
+ position: 1.0
+ color: UIStyle.gradientOverlay2
+ }
+ }
+ }
+ }
+
+//! [Delegate end]
+ onClicked: {
+ if (PathView.isCurrentItem)
+ circularView.launched(title, Qt.resolvedUrl(page), Qt.resolvedUrl(fallback))
+ else
+ circularView.currentIndex = index
+ }
+ }
+//! [Delegate end]
+
+ path: Path {
+ startX: circularView.cX
+ startY: circularView.cY
+ PathAttribute {
+ name: "itemOpacity"
+ value: 1.0
+ }
+ PathLine {
+ x: circularView.cX + circularView.radius
+ y: circularView.cY
+ }
+ PathAttribute {
+ name: "itemOpacity"
+ value: 0.7
+ }
+ PathArc {
+ x: circularView.cX - circularView.radius
+ y: circularView.cY
+ radiusX: circularView.radius
+ radiusY: circularView.radius
+ useLargeArc: true
+ direction: PathArc.Clockwise
+ }
+ PathAttribute {
+ name: "itemOpacity"
+ value: 0.5
+ }
+ PathArc {
+ x: circularView.cX + circularView.radius
+ y: circularView.cY
+ radiusX: circularView.radius
+ radiusY: circularView.radius
+ useLargeArc: true
+ direction: PathArc.Clockwise
+ }
+ PathAttribute {
+ name: "itemOpacity"
+ value: 0.3
+ }
+ }
+
+ Text {
+ id: appTitle
+
+ property Item currentItem: circularView.currentItem
+
+ visible: currentItem ? currentItem.PathView.itemOpacity === 1.0 : 0
+
+ text: currentItem ? currentItem.title : ""
+ anchors.centerIn: parent
+ anchors.verticalCenterOffset: circularView.itemSize / 2 + height / 2
+
+ font: UIStyle.h1
+ color: UIStyle.textColor
+ }
+//! [LauncherPage end]
+}
+//! [LauncherPage end]
diff --git a/examples/quickcontrols/wearable/Wearable/ListHeaderItem.qml b/examples/quickcontrols/wearable/Wearable/ListHeaderItem.qml
new file mode 100644
index 0000000000..3cf82ff211
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/ListHeaderItem.qml
@@ -0,0 +1,83 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+import QtQuick.Effects
+import WearableStyle
+
+Item {
+ Rectangle {
+ id: listitem
+ width: parent.width
+ height: parent.height
+
+ radius: 8
+ color: UIStyle.listItemBackground
+
+ Shape {
+ id: header
+ property int ra: parent.radius
+ property int h: 28
+ property int w: parent.width
+
+ preferredRendererType: Shape.CurveRenderer
+
+ ShapePath { //Shape because Rectangle does not support diagonal gradient
+ strokeWidth: 0
+
+ startX: 0
+ startY: header.ra
+
+ PathArc {
+ x: header.ra
+ y: 0
+ radiusX: header.ra
+ radiusY: header.ra
+ }
+ PathLine {
+ x: header.w - header.ra
+ y: 0
+ }
+ PathArc {
+ x: header.w
+ y: header.ra
+ radiusX: header.ra
+ radiusY: header.ra
+ }
+ PathLine {
+ x: header.w
+ y: header.h
+ }
+ PathLine {
+ x: 0
+ y: header.h
+ }
+ fillGradient: LinearGradient {
+ x1: 0
+ y1: 0
+ x2: 2
+ y2: 1.3 * header.h
+ GradientStop {
+ position: 0.0
+ color: UIStyle.listHeader1
+ }
+ GradientStop {
+ position: 1.0
+ color: UIStyle.listHeader2
+ }
+ }
+ }
+ }
+ }
+
+ MultiEffect {
+ source: listitem
+ anchors.fill: parent
+ shadowEnabled: true
+ shadowBlur: 0.3
+ shadowHorizontalOffset: 2
+ shadowVerticalOffset: 2
+ opacity: 0.5
+ }
+}
diff --git a/examples/quickcontrols/wearable/Wearable/ListItem.qml b/examples/quickcontrols/wearable/Wearable/ListItem.qml
new file mode 100644
index 0000000000..b935a4c728
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/ListItem.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Effects
+import WearableStyle
+
+Item {
+ Rectangle {
+ id: listitem
+ width: parent.width
+ height: parent.height
+ radius: 8
+ color: UIStyle.listItemBackground
+ }
+
+ MultiEffect {
+ source: listitem
+ anchors.fill: parent
+ shadowEnabled: true
+ shadowBlur: 0.3
+ shadowHorizontalOffset: 2
+ shadowVerticalOffset: 2
+ opacity: 0.5
+ }
+}
diff --git a/examples/quickcontrols/wearable/Wearable/Main.qml b/examples/quickcontrols/wearable/Wearable/Main.qml
new file mode 100644
index 0000000000..4bd2d268ac
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/Main.qml
@@ -0,0 +1,125 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls as QQC2
+import QtQuick.Shapes
+
+import WearableSettings
+import WearableStyle
+
+//! [window start]
+QQC2.ApplicationWindow {
+ id: window
+//! [window start]
+ visible: true
+ width: 380
+ height: 380
+ title: qsTr("Wearable")
+
+ background: Shape {//Shape because Rectangle does not support diagonal gradient
+ preferredRendererType: Shape.CurveRenderer
+
+ ShapePath {
+ strokeWidth: 0
+ startX: 0; startY: 0
+
+ PathLine {
+ x: window.width
+ y: 0
+ }
+ PathLine {
+ x: window.width
+ y: window.height
+ }
+ PathLine {
+ x: 0
+ y: window.height
+ }
+ fillGradient: LinearGradient {
+ x1: window.width / 3
+ y1: 0
+ x2: window.width
+ y2: 1.3 * window.height
+ GradientStop {
+ position: 0.0
+ color: UIStyle.background1
+ }
+ GradientStop {
+ position: 0.5
+ color: UIStyle.background2
+ }
+ GradientStop {
+ position: 1.0
+ color: UIStyle.background3
+ }
+ }
+ }
+ }
+
+//! [stackview start]
+ QQC2.StackView {
+ id: stackView
+//! [stackview start]
+
+ anchors.fill: parent
+
+ focus: true
+
+//! [onLaunched connection]
+ initialItem: LauncherPage {
+ onLaunched: (title, page, fallback) => {
+ var createdPage = Qt.createComponent(page)
+ if (createdPage.status !== Component.Ready)
+ createdPage = Qt.createComponent(fallback)
+ stackView.push(createdPage)
+ header.title = title
+ }
+ }
+//! [onLaunched connection]
+//! [stackview end]
+ }
+
+//! [stackview end]
+ MenuHeader {
+ id: header
+
+ anchors.top: parent.top
+ width: parent.width
+
+ title: ""
+
+ enabled: stackView.depth > 1
+
+ onBackClicked: stackView.pop()
+ }
+
+//! [DemoMode]
+ DemoMode {
+ stackView: stackView
+ }
+
+//! [DemoMode]
+//! [DemoModeIndicator]
+ DemoModeIndicator {
+ id: demoModeIndicator
+ y: WearableSettings.demoMode ? header.height + 3 : -height - 5
+ anchors.horizontalCenter: parent.horizontalCenter
+ z: header.z + 1
+ }
+
+//! [DemoModeIndicator]
+//! [MouseArea]
+ MouseArea {
+ enabled: WearableSettings.demoMode
+ anchors.fill: parent
+ onClicked: {
+ // Stop demo mode and return to the launcher page.
+ WearableSettings.demoMode = false
+ stackView.pop(null)
+ }
+ }
+//! [MouseArea]
+//! [window end]
+}
+//! [window end]
diff --git a/examples/quickcontrols/wearable/Wearable/MenuHeader.qml b/examples/quickcontrols/wearable/Wearable/MenuHeader.qml
new file mode 100644
index 0000000000..ade7cabe12
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/MenuHeader.qml
@@ -0,0 +1,92 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls as QQC2
+import WearableStyle
+import QtQuick.Shapes
+
+Item {
+ id: header
+ property alias title: labelText.text
+ signal backClicked()
+
+ height: 50
+
+ Shape {//Shape because Rectangle does not support diagonal gradient
+ id: background
+ preferredRendererType: Shape.CurveRenderer
+
+ ShapePath {
+ strokeWidth: 0
+
+ startX: 0
+ startY: 0
+ PathLine {
+ x: header.width
+ y: 0
+ }
+ PathLine {
+ x: header.width
+ y: header.height
+ }
+ PathLine {
+ x: 0
+ y: header.height
+ }
+ fillGradient: LinearGradient {
+ x1: header.width / 3
+ y1: 0
+ x2: header.width
+ y2: 1.3 * header.parent.height
+ GradientStop {
+ position: 0.0
+ color: UIStyle.background1
+ }
+ GradientStop {
+ position: 0.5
+ color: UIStyle.background2
+ }
+ GradientStop {
+ position: 1.0
+ color: UIStyle.background3
+ }
+ }
+ }
+ }
+
+ QQC2.AbstractButton {
+ id: backButton
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.topMargin: 0
+ anchors.leftMargin: 0
+
+ width: height
+ height: 40
+
+ onClicked: header.backClicked()
+
+ Image {
+ width: 40
+ height: 40
+ anchors.centerIn: parent
+ source: UIStyle.iconPath("back")
+ }
+ }
+
+ QQC2.Label {
+ id: labelText
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: UIStyle.textColor
+ font: UIStyle.h2
+ }
+
+ transform: Translate {
+ Behavior on y { NumberAnimation { } }
+ y: header.enabled ? 0 : -52
+ }
+
+
+}
diff --git a/examples/quickcontrols/wearable/Wearable/NavigationFallbackPage.qml b/examples/quickcontrols/wearable/Wearable/NavigationFallbackPage.qml
new file mode 100644
index 0000000000..d72f22655f
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/NavigationFallbackPage.qml
@@ -0,0 +1,100 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+pragma ComponentBehavior: Bound
+
+import QtQuick
+import WearableStyle
+import QtQuick.Effects
+
+import "navigation.js" as NavigationData
+
+Item {
+ id: navigationPage
+
+ Image {
+ id: view
+ anchors.fill: parent
+ source: "qrc:/qt/qml/Wearable/images/fallbackmap.png"
+
+ Item {
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.margins: 10
+ anchors.topMargin: 60
+
+ height: dummyWarning.implicitHeight + 20
+
+ opacity: 0.8
+
+ Rectangle {
+ id: dummyWarningBg
+ anchors.fill: parent
+ radius: 20
+ color: UIStyle.colorRed
+ }
+
+ MultiEffect {
+ source: dummyWarningBg
+ anchors.fill: parent
+ shadowEnabled: true
+ shadowBlur: 0.3
+ shadowHorizontalOffset: 2
+ shadowVerticalOffset: 2
+ opacity: 0.5
+ }
+
+ Text {
+ id: dummyWarning
+ text: qsTr("Fallback mode. Install QtLocation for the real mapping experience.")
+ font: UIStyle.h3
+ color: UIStyle.textColor
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.margins: 10
+ wrapMode: Text.WordWrap
+ horizontalAlignment: Text.AlignHCenter
+ }
+ }
+
+ }
+
+ ListModel {
+ id: routeInfoModel
+ }
+
+ ListView {
+ id: routeView
+
+ height: 90
+ anchors.bottom: navigationPage.bottom
+ anchors.left: navigationPage.left
+ anchors.right: navigationPage.right
+ anchors.rightMargin: 10
+ anchors.leftMargin: 15
+ anchors.bottomMargin: 20
+
+ spacing: 12
+
+ clip: true
+ focus: true
+
+ boundsBehavior: Flickable.StopAtBounds
+ snapMode: ListView.SnapToItem
+
+ property int centeredIndex: 0
+
+ model: routeInfoModel
+
+ delegate: RouteElement {
+ width: routeView.width - 10
+ height: routeView.height - 10
+ }
+ }
+
+ Component.onCompleted: {
+ NavigationData.requestNavigationRoute(routeInfoModel)
+ }
+}
diff --git a/examples/quickcontrols/wearable/Wearable/NavigationPage.qml b/examples/quickcontrols/wearable/Wearable/NavigationPage.qml
new file mode 100644
index 0000000000..a83d7c137b
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/NavigationPage.qml
@@ -0,0 +1,228 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+pragma ComponentBehavior: Bound
+
+import QtQuick
+import QtLocation
+import QtPositioning
+import WearableStyle
+
+Item {
+ id: navigationPage
+
+ MapView {
+ id: view
+ anchors.fill: parent
+
+ map.plugin: Plugin {
+ name: "osm"
+ }
+ map.zoomLevel: 16
+
+ RouteModel {
+ id: routeModel
+ plugin : view.map.plugin
+ query: RouteQuery {
+ id: routeQuery
+ }
+ onStatusChanged: {
+ if (status == RouteModel.Ready) {
+ routeInfoModel.populate()
+ }
+ }
+ }
+
+ property real lat: 59.9485
+ property real lon: 10.7686
+
+ map.center: QtPositioning.coordinate(lat, lon)
+
+ Behavior on lon { PropertyAnimation { duration: 500; easing.type: Easing.InOutQuad } }
+ Behavior on lat { PropertyAnimation { duration: 500; easing.type: Easing.InOutQuad } }
+
+
+ MapItemView {
+ parent: view.map
+ model: routeModel
+ delegate: MapRoute {
+ id: route
+
+ required property var routeData
+ route: routeData
+ line.color: UIStyle.highlightColor
+ line.width: 5
+ smooth: true
+ opacity: 1
+ }
+ autoFitViewport: true
+ }
+
+ Component.onCompleted: {
+ var startCoordinate = QtPositioning.coordinate(59.9485, 10.7686);
+ var endCoordinate = QtPositioning.coordinate(59.9645, 10.671);
+
+ routeQuery.clearWaypoints();
+ routeQuery.addWaypoint(startCoordinate)
+ routeQuery.addWaypoint(endCoordinate)
+ routeQuery.travelModes = RouteQuery.CarTravel
+ routeQuery.routeOptimizations = RouteQuery.FastestRoute
+
+ routeModel.update();
+ }
+ }
+
+ ListModel {
+ id: routeInfoModel
+
+ function formatIconInstruction(direction)
+ {
+ switch (direction){
+ case RouteManeuver.NoDirection:
+ return "";
+ case RouteManeuver.DirectionForward:
+ return "forward";
+ case RouteManeuver.DirectionBearRight:
+ return "bearright";
+ case RouteManeuver.DirectionRight:
+ case RouteManeuver.DirectionHardRight:
+ return "right";
+ case RouteManeuver.DirectionLightRight:
+ return "lightright";
+ case RouteManeuver.DirectionUTurnRight:
+ return "uturnright";
+ case RouteManeuver.DirectionUTurnLeft:
+ return "uturleft";
+ case RouteManeuver.DirectionHardLeft:
+ case RouteManeuver.DirectionLeft:
+ return "left";
+ case RouteManeuver.DirectionLightLeft:
+ return "lightleft";
+ case RouteManeuver.DirectionBearLeft:
+ return "bearleft";
+ }
+ }
+
+ function formatShortInstruction(direction)
+ {
+ switch (direction){
+ case RouteManeuver.NoDirection:
+ return "";
+ case RouteManeuver.DirectionForward:
+ return "Move forward";
+ case RouteManeuver.DirectionBearRight:
+ return "Bear right";
+ case RouteManeuver.DirectionRight:
+ return "Turn right";
+ case RouteManeuver.DirectionHardRight:
+ return "Turn hard right";
+ case RouteManeuver.DirectionLightRight:
+ return "Turn slightly right";
+ case RouteManeuver.DirectionUTurnRight:
+ return "Uturn right";
+ case RouteManeuver.DirectionUTurnLeft:
+ return "Uturn left";
+ case RouteManeuver.DirectionHardLeft:
+ return "Turn hard left";
+ case RouteManeuver.DirectionLeft:
+ return "Turn left";
+ case RouteManeuver.DirectionLightLeft:
+ return "Turn slightly left";
+ case RouteManeuver.DirectionBearLeft:
+ return "Bear left";
+ }
+ }
+
+ function formatTime(sec)
+ {
+ var value = sec
+ var seconds = value % 60
+ value /= 60
+ value = (value > 1) ? Math.round(value) : 0
+ var minutes = value % 60
+ value /= 60
+ value = (value > 1) ? Math.round(value) : 0
+ var hours = value
+ if (hours > 0) value = hours + "h:"+ minutes + "m"
+ else value = minutes + "min"
+ return value
+ }
+
+ function formatDistance(meters)
+ {
+ var dist = Math.round(meters)
+ if (dist > 1000 ){
+ if (dist > 100000){
+ dist = Math.round(dist / 1000)
+ }
+ else{
+ dist = Math.round(dist / 100)
+ dist = dist / 10
+ }
+ dist = dist + " km"
+ }
+ else{
+ dist = dist + " m"
+ }
+ return dist
+ }
+
+ function populate()
+ {
+ routeInfoModel.clear()
+ if (routeModel.count > 0) {
+ for (var i = 0; i < routeModel.get(0).segments.length; i++) {
+ routeInfoModel.append({
+ "icon": formatIconInstruction(routeModel.get(0).segments[i].maneuver.direction),
+ "shortInfo": formatShortInstruction(routeModel.get(0).segments[i].maneuver.direction),
+ "instruction": routeModel.get(0).segments[i].maneuver.instructionText,
+ "distance": qsTr("in") + " " + formatDistance(routeModel.get(0).segments[i].maneuver.distanceToNextInstruction)
+ });
+ }
+ }
+ }
+ }
+
+ ListView {
+ id: routeView
+
+ height: 90
+ anchors.bottom: navigationPage.bottom
+ anchors.left: navigationPage.left
+ anchors.right: navigationPage.right
+ anchors.rightMargin: 10
+ anchors.leftMargin: 15
+ anchors.bottomMargin: 20
+
+ spacing: 12
+
+ clip: true
+ focus: true
+
+ boundsBehavior: Flickable.StopAtBounds
+ snapMode: ListView.SnapToItem
+
+ property int centeredIndex: 0
+
+ model: routeInfoModel
+ delegate: RouteElement {
+ width: routeView.width - 10
+ height: routeView.height - 10
+ }
+
+ onContentYChanged: {
+ centeredIndex = indexAt(10, contentY)
+ if (centeredIndex > -1) {
+ view.lat = routeModel.get(0).segments[centeredIndex].maneuver.position.latitude
+ view.lon = routeModel.get(0).segments[centeredIndex].maneuver.position.longitude
+ }
+ }
+ }
+
+ function incrementPoint() {
+ routeView.centeredIndex++
+ if (routeView.centeredIndex >= routeInfoModel.count)
+ routeView.centeredIndex = 0
+ routeView.positionViewAtIndex(routeView.centeredIndex, ListView.Center)
+ }
+}
diff --git a/examples/quickcontrols/wearable/Wearable/NotificationsPage.qml b/examples/quickcontrols/wearable/Wearable/NotificationsPage.qml
new file mode 100644
index 0000000000..30c70f4a99
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/NotificationsPage.qml
@@ -0,0 +1,77 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import WearableStyle
+import "notifications.js" as NotificationData
+
+
+Item {
+ id: notificationpage
+
+ ListView {
+ id: listview
+
+ anchors.fill: parent
+ anchors.margins: 15
+ anchors.topMargin: 40 + 15
+ spacing: 10
+ clip: false
+
+ model: ListModel {
+ id: missedCallsList
+ }
+
+ delegate: ListHeaderItem {
+ id: notificationItem
+
+ required property string name
+ required property string date
+ required property string time
+ required property string text
+
+ width: parent.width
+ height: 80
+
+ Item {
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ height: 25
+ Text {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.margins: 10
+ text: notificationItem.name
+ color: UIStyle.titletextColor
+ font: UIStyle.h3
+ }
+ Text {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ anchors.margins: 10
+ text: notificationItem.date + " " + notificationItem.time
+ color: UIStyle.titletextColor
+ font: UIStyle.p1
+ }
+ }
+
+
+ Text {
+ anchors.fill: parent
+ anchors.margins: 10
+ anchors.topMargin: 30
+ text: notificationItem.text
+ wrapMode: Text.WordWrap
+ color: UIStyle.textColor
+ font: UIStyle.p1
+ lineHeight: UIStyle.p1lineHeight
+ lineHeightMode: Text.FixedHeight
+ }
+ }
+
+ Component.onCompleted: {
+ NotificationData.populateData(missedCallsList)
+ }
+ }
+}
diff --git a/examples/quickcontrols/wearable/Wearable/RouteElement.qml b/examples/quickcontrols/wearable/Wearable/RouteElement.qml
new file mode 100644
index 0000000000..fe21b6af27
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/RouteElement.qml
@@ -0,0 +1,70 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import WearableStyle
+
+ListHeaderItem {
+ id: routeListItem
+ required property string icon
+ required property string shortInfo
+ required property string instruction
+ required property string distance
+
+ Item {
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ height: 28
+
+ Image {
+ id: naviIcon
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.margins: 5
+ height: 20
+ width: height
+ source: UIStyle.iconPath(routeListItem.icon)
+ fillMode: Image.PreserveAspectFit
+ }
+
+ Text {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: naviIcon.right
+ anchors.margins: 5
+ wrapMode: Text.WordWrap
+ text: routeListItem.shortInfo
+ font: UIStyle.h3
+ verticalAlignment: Text.AlignVCenter
+ padding: 1
+ color: UIStyle.textColor
+ }
+
+ Text {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ anchors.margins: 10
+ wrapMode: Text.WordWrap
+ text: routeListItem.distance
+ font: UIStyle.h3
+ verticalAlignment: Text.AlignVCenter
+ padding: 1
+ color: UIStyle.textColor
+ }
+ }
+
+ Text {
+ id: instructionText
+ anchors.fill: parent
+ anchors.margins: 5
+ anchors.topMargin: 25
+ wrapMode: Text.WordWrap
+ text: routeListItem.instruction
+ font: UIStyle.p1
+ lineHeight: UIStyle.p1lineHeight
+ lineHeightMode: Text.FixedHeight
+ verticalAlignment: Text.AlignVCenter
+ padding: 1
+ color: UIStyle.textColor
+ }
+}
diff --git a/examples/quickcontrols/wearable/Wearable/SettingsPage.qml b/examples/quickcontrols/wearable/Wearable/SettingsPage.qml
new file mode 100644
index 0000000000..082893cef3
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/SettingsPage.qml
@@ -0,0 +1,136 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import WearableStyle
+import WearableSettings
+
+Item {
+ id: settingspage
+
+ property alias listView: listViewItem
+
+ component SettingsItem: ListItem {
+ id: settingsItem
+
+ property string title
+ property string icon
+
+ Image {
+ id: itemIcon
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.margins: 15
+ source: UIStyle.iconPath(settingsItem.icon)
+ height: 40
+ width: 40
+ }
+ Text {
+ anchors.left: itemIcon.right
+ anchors.verticalCenter: itemIcon.verticalCenter
+ anchors.margins: 15
+ text: settingsItem.title
+ color: UIStyle.textColor
+ font: UIStyle.h3
+ }
+ }
+
+ component SettingsBoolItem: SettingsItem {
+ height: 70
+
+ property alias checked: onSwitchItem.checked
+
+ Switch {
+ id: onSwitchItem
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.margins: 15
+ onCheckedChanged: parent.onCheckedChanged()
+ }
+ function toggle() { onSwitchItem.toggle() }
+ signal onCheckedChanged()
+
+ }
+
+ component SettingsIntItem: SettingsItem {
+ height: 110
+
+ property alias value: valueSliderItem.value
+
+ Slider {
+ id: valueSliderItem
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ anchors.margins: 15
+ from: 0
+ to: 100
+ onValueChanged: parent.onValueChanged()
+ }
+
+ signal onValueChanged()
+ }
+
+ Flickable {
+ id: listViewItem
+
+ anchors.fill: parent
+ anchors.margins: 15
+ anchors.topMargin: 40 + 15
+ contentHeight: content.height
+
+ // aliases for the demo mode
+ property alias brightnessItem: brightnessItem
+ property alias bluetoothItem: bluetoothItem
+ property alias wifiItem: wifiItem
+ property alias darkmodeItem: darkmodeItem
+ property alias demomodeItem: demomodeItem
+
+ Column {
+ id: content
+ spacing: 10
+ width: parent.width
+
+ SettingsIntItem {
+ id: brightnessItem
+ width: parent.width
+ title: qsTr("Brightness")
+ icon: "sun"
+ value: WearableSettings.brightness
+ onValueChanged: WearableSettings.brightness = value
+ }
+ SettingsBoolItem {
+ id: bluetoothItem
+ width: parent.width
+ title: qsTr("Bluetooth")
+ icon: "bluetooth"
+ checked: WearableSettings.bluetooth
+ onCheckedChanged: WearableSettings.bluetooth = checked
+ }
+ SettingsBoolItem {
+ id: wifiItem
+ width: parent.width
+ title: qsTr("Wi-Fi")
+ icon: "wifi"
+ checked: WearableSettings.wireless
+ onCheckedChanged: WearableSettings.wireless = checked
+ }
+ SettingsBoolItem {
+ id: darkmodeItem
+ width: parent.width
+ title: qsTr("Change theme")
+ icon: "darkmode"
+ checked: WearableSettings.darkTheme
+ onCheckedChanged: WearableSettings.darkTheme = checked
+ }
+ SettingsBoolItem {
+ id: demomodeItem
+ width: parent.width
+ title: qsTr("Demo mode")
+ icon: "demomode"
+ checked: WearableSettings.demoMode
+ onCheckedChanged: WearableSettings.demoMode = checked
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/wearable/qml/SwipeViewPage.qml b/examples/quickcontrols/wearable/Wearable/SwipeViewPage.qml
index 1f005363dc..1f005363dc 100644
--- a/examples/quickcontrols/wearable/qml/SwipeViewPage.qml
+++ b/examples/quickcontrols/wearable/Wearable/SwipeViewPage.qml
diff --git a/examples/quickcontrols/wearable/Wearable/WeatherPage.qml b/examples/quickcontrols/wearable/Wearable/WeatherPage.qml
new file mode 100644
index 0000000000..df0b6753e6
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/WeatherPage.qml
@@ -0,0 +1,330 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import WearableStyle
+import "weather.js" as WeatherData
+
+Item {
+ Flickable {
+ id: flick
+ anchors.fill:parent
+ anchors.margins: 15
+ anchors.topMargin: 40 + 15
+ contentWidth: width
+ contentHeight: column.height
+
+ Column {
+ id: column
+ spacing: 10
+
+ Item {
+ width: flick.contentWidth
+ height: 100
+
+ Row {
+ id: townName
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top
+ width: childrenRect.width
+ height: childrenRect.height
+
+ spacing: 10
+ Image {
+ id: sunIcon
+ source: (wDataCntr.weatherData
+ && wDataCntr.weatherData.weather
+ && wDataCntr.weatherData.weather[0]
+ && wDataCntr.weatherData.weather[0].icon) ?
+ UIStyle.iconPath("weather-" + WeatherData.iconSelect(wDataCntr.weatherData.weather[0].icon)) : ""
+ width: 64
+ height: width
+ sourceSize.width: width
+ sourceSize.height: height
+ }
+ Text {
+ text: (wDataCntr.weatherData
+ && wDataCntr.weatherData.name) ?
+ wDataCntr.weatherData.name : ""
+ anchors.verticalCenter: sunIcon.verticalCenter
+ color: UIStyle.textColor
+ font: UIStyle.h1
+ }
+ }
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: townName.bottom
+ text: (wDataCntr.weatherData
+ && wDataCntr.weatherData.weather
+ && wDataCntr.weatherData.weather[0]
+ && wDataCntr.weatherData.weather[0].main) ?
+ wDataCntr.weatherData.weather[0].main : ""
+ color: UIStyle.textColor
+ font: UIStyle.h3
+ }
+ }
+
+ ListItem {
+ width: flick.contentWidth
+ height: 92
+
+ Image {
+ id: thermoimage
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.leftMargin: 20
+ anchors.topMargin: 17
+ source: UIStyle.iconPath("thermometer")
+ }
+
+ Text {
+ anchors.left: thermoimage.right
+ anchors.verticalCenter: thermoimage.verticalCenter
+ anchors.leftMargin: 5
+ text: qsTr("Temperature")
+ font: UIStyle.h4
+ color: UIStyle.textColor
+ }
+
+ Text {
+ anchors.right: parent.right
+ anchors.verticalCenter: thermoimage.verticalCenter
+ anchors.rightMargin: 20
+ text: (wDataCntr.weatherData
+ && wDataCntr.weatherData.main
+ && wDataCntr.weatherData.main.temp) ?
+ WeatherData.formatTemp(wDataCntr.weatherData.main.temp) : ""
+ font: UIStyle.h3
+ color: UIStyle.textColor
+ }
+
+ Text {
+ id: maxtxt
+ anchors.left: parent.left
+ anchors.bottom: parent.bottom
+ anchors.leftMargin: 20
+ anchors.bottomMargin: 17
+ text: qsTr("Max")
+ font: UIStyle.h4
+ color: UIStyle.textColor
+ }
+
+ Text {
+ anchors.left: maxtxt.right
+ anchors.verticalCenter: maxtxt.verticalCenter
+ anchors.leftMargin: 10
+ text: (wDataCntr.weatherData
+ && wDataCntr.weatherData.main
+ && wDataCntr.weatherData.main.temp_max) ?
+ WeatherData.formatTemp(wDataCntr.weatherData.main.temp_max) : ""
+ font: UIStyle.h3
+ color: UIStyle.textColor
+ }
+
+ Text {
+ id: mintxt
+ anchors.horizontalCenter: maxtxt.horizontalCenter
+ anchors.verticalCenter: maxtxt.verticalCenter
+ anchors.horizontalCenterOffset: parent.width / 2
+ text: qsTr("Min")
+ font: UIStyle.h4
+ color: UIStyle.textColor
+ }
+
+ Text {
+ anchors.left: mintxt.right
+ anchors.verticalCenter: mintxt.verticalCenter
+ anchors.leftMargin: 10
+ text: (wDataCntr.weatherData
+ && wDataCntr.weatherData.main
+ && wDataCntr.weatherData.main.temp_min) ?
+ WeatherData.formatTemp(wDataCntr.weatherData.main.temp_min) : ""
+ font: UIStyle.h3
+ color: UIStyle.textColor
+ }
+ }
+
+ ListItem {
+ width: flick.contentWidth
+ height: 50
+
+ Image {
+ id: sunriseIcon
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.leftMargin: 20
+ anchors.topMargin: 17
+ source: UIStyle.iconPath("sunrise")
+ }
+
+ Text {
+ id: sunriseText
+ anchors.left: sunriseIcon.right
+ anchors.verticalCenter: sunriseIcon.verticalCenter
+ anchors.leftMargin: 5
+ text: qsTr("Sunrise")
+ font: UIStyle.h4
+ color: UIStyle.textColor
+ }
+ Text {
+ anchors.left: sunriseText.right
+ anchors.verticalCenter: sunriseText.verticalCenter
+ anchors.leftMargin: 15
+ text: (wDataCntr.weatherData
+ && wDataCntr.weatherData.sys
+ && wDataCntr.weatherData.sys.sunrise) ?
+ WeatherData.getTimeHMS(wDataCntr.weatherData.sys.sunrise) : ""
+ font: UIStyle.h3
+ color: UIStyle.textColor
+ }
+
+ Image {
+ id: sunsetIcon
+ anchors.right: sunsetText.left
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.rightMargin: 5
+ source: UIStyle.iconPath("sunset")
+ }
+
+ Text {
+ id: sunsetText
+ anchors.right: sunsetValue.left
+ anchors.verticalCenter: sunsetIcon.verticalCenter
+ anchors.rightMargin: 15
+ text: qsTr("Sunset")
+ font: UIStyle.h4
+ color: UIStyle.textColor
+ }
+
+ Text {
+ id: sunsetValue
+ anchors.right: parent.right
+ anchors.verticalCenter: sunsetText.verticalCenter
+ anchors.rightMargin: 20
+ text: (wDataCntr.weatherData
+ && wDataCntr.weatherData.sys
+ && wDataCntr.weatherData.sys.sunset) ?
+ WeatherData.getTimeHMS(wDataCntr.weatherData.sys.sunset) : ""
+ font: UIStyle.h3
+ color: UIStyle.textColor
+ }
+ }
+
+ ListItem {
+ width: flick.contentWidth
+ height: 50
+
+ Image {
+ id: windIcon
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.leftMargin: 20
+ anchors.topMargin: 17
+ source: UIStyle.iconPath("wind")
+ }
+
+ Text {
+ id: windText
+ anchors.left: windIcon.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.leftMargin: 5
+ text: qsTr("Wind")
+ font: UIStyle.h4
+ color: UIStyle.textColor
+ }
+
+ Text {
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.rightMargin: 20
+ text: (wDataCntr.weatherData
+ && wDataCntr.weatherData.wind
+ && wDataCntr.weatherData.wind.speed) ?
+ Math.round(wDataCntr.weatherData.wind.speed * 1.61) + " km/h" : ""
+ font: UIStyle.h3
+ color: UIStyle.textColor
+ }
+ }
+
+ ListItem {
+ width: flick.contentWidth
+ height: 50
+
+ Image {
+ id: humidityIcon
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.leftMargin: 20
+ anchors.topMargin: 17
+ source: UIStyle.iconPath("drop")
+ }
+
+ Text {
+ id: humidityText
+ anchors.left: humidityIcon.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.leftMargin: 5
+ text: qsTr("Humidity")
+ font: UIStyle.h4
+ color: UIStyle.textColor
+ }
+
+ Text {
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.rightMargin: 20
+ text: (wDataCntr.weatherData
+ && wDataCntr.weatherData.main
+ && wDataCntr.weatherData.main.humidity) ?
+ wDataCntr.weatherData.main.humidity + " %" : ""
+ font: UIStyle.h3
+ color: UIStyle.textColor
+ }
+ }
+
+ ListItem {
+ width: flick.contentWidth
+ height: 50
+
+ Image {
+ id: pressureIcon
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.leftMargin: 20
+ anchors.topMargin: 17
+ source: UIStyle.iconPath("pressure")
+ }
+
+ Text {
+ id: pressureText
+ anchors.left: pressureIcon.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.leftMargin: 5
+ text: qsTr("HPA")
+ font: UIStyle.h4
+ color: UIStyle.textColor
+ }
+
+ Text {
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.rightMargin: 20
+ text: (wDataCntr.weatherData
+ && wDataCntr.weatherData.main
+ && wDataCntr.weatherData.main.pressure) ?
+ Math.round(wDataCntr.weatherData.main.pressure) + " hpa" : ""
+ font: UIStyle.h3
+ color: UIStyle.textColor
+ }
+ }
+ }
+ }
+
+ QtObject {
+ id: wDataCntr
+ property var weatherData
+ }
+ Component.onCompleted: {
+ WeatherData.requestWeatherData(wDataCntr)
+ }
+}
diff --git a/examples/quickcontrols/wearable/Wearable/WorldClockPage.qml b/examples/quickcontrols/wearable/Wearable/WorldClockPage.qml
new file mode 100644
index 0000000000..c90442eeac
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/WorldClockPage.qml
@@ -0,0 +1,59 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls as QQC2
+
+Item {
+ QQC2.SwipeView {
+ id: svWatchContainer
+
+ anchors.fill: parent
+
+ ListModel {
+ id: placesList
+ ListElement {
+ cityName: "New York"
+ shift: -4
+ }
+ ListElement {
+ cityName: "London"
+ shift: 0
+ }
+ ListElement {
+ cityName: "Oslo"
+ shift: 1
+ }
+ ListElement {
+ cityName: "Mumbai"
+ shift: 5.5
+ }
+ ListElement {
+ cityName: "Tokyo"
+ shift: 9
+ }
+ ListElement {
+ cityName: "Brisbane"
+ shift: 10
+ }
+ ListElement {
+ cityName: "Los Angeles"
+ shift: -8
+ }
+ }
+
+ Repeater {
+ model: placesList
+ delegate: Clock {
+ }
+ }
+ }
+
+ QQC2.PageIndicator {
+ count: svWatchContainer.count
+ currentIndex: svWatchContainer.currentIndex
+
+ anchors.bottom: svWatchContainer.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+}
diff --git a/examples/quickcontrols/wearable/Wearable/fallbackroute.json b/examples/quickcontrols/wearable/Wearable/fallbackroute.json
new file mode 100644
index 0000000000..b7aa5f4a9e
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/fallbackroute.json
@@ -0,0 +1,78 @@
+{
+ "route": {
+ "steps": [
+ {"direction": 4,
+ "instructionText": "Head South onto Sandakerveien",
+ "distanceToNextInstruction": 176.5 },
+ {"direction": 3,
+ "instructionText": "Enter the roundabout and take the first exit onto Kristoffer Aamots gate",
+ "distanceToNextInstruction": 3.5 },
+ {"direction": 4,
+ "instructionText": "exit roundabout to/onto Kristoffer Aamots gate",
+ "distanceToNextInstruction": 434.2 },
+ {"direction": 3,
+ "instructionText": "Enter the roundabout and take the second exit onto Kristoffer Aamots gate",
+ "distanceToNextInstruction": 26.5 },
+ {"direction": 3,
+ "instructionText": "exit roundabout to/onto Kristoffer Aamots gate",
+ "distanceToNextInstruction": 183.4 },
+ {"direction": 3,
+ "instructionText": "Enter the roundabout and take the first exit onto Maridalsveien",
+ "distanceToNextInstruction": 3.4 },
+ {"direction": 4,
+ "instructionText": "exit roundabout to/onto Maridalsveien",
+ "distanceToNextInstruction": 796.2 },
+ {"direction": 3,
+ "instructionText": "Enter the roundabout and take the second exit",
+ "distanceToNextInstruction": 38 },
+ {"direction": 1,
+ "instructionText": "exit roundabout to/onto ",
+ "distanceToNextInstruction": 220.9 },
+ {"direction": 10,
+ "instructionText": "Merge slightly left on Tåsentunnelen",
+ "distanceToNextInstruction": 1041.4 },
+ {"direction": 1,
+ "instructionText": "Continue straight onto Torgny Segerstedts vei",
+ "distanceToNextInstruction": 1435.2 },
+ {"direction": 3,
+ "instructionText": "Take the ramp on the right",
+ "distanceToNextInstruction": 340.8 },
+ {"direction": 3,
+ "instructionText": "Turn slightly right onto Slemdalsveien",
+ "distanceToNextInstruction": 1073.2 },
+ {"direction": 4,
+ "instructionText": "Continue right onto Risalléen",
+ "distanceToNextInstruction": 303.7 },
+ {"direction": 1,
+ "instructionText": "Continue straight onto Frognerseterveien",
+ "distanceToNextInstruction": 943.6 },
+ {"direction": 1,
+ "instructionText": "Continue straight onto Ankerveien",
+ "distanceToNextInstruction": 731.3 },
+ {"direction": 4,
+ "instructionText": "Turn right onto Holmenkollveien",
+ "distanceToNextInstruction": 125 },
+ {"direction": 4,
+ "instructionText": "Continue right onto Holmenkollveien",
+ "distanceToNextInstruction": 116.7 },
+ {"direction": 9,
+ "instructionText": "Continue left onto Holmenkollveien",
+ "distanceToNextInstruction": 593.6 },
+ {"direction": 4,
+ "instructionText": "At the end of the road, turn right onto Holmenkollveien",
+ "distanceToNextInstruction": 455.1 },
+ {"direction": 9,
+ "instructionText": "Turn left",
+ "distanceToNextInstruction": 299.1 },
+ {"direction": 4,
+ "instructionText": "Turn right",
+ "distanceToNextInstruction": 110.5 },
+ {"direction": 4,
+ "instructionText": "Turn right",
+ "distanceToNextInstruction": 142.9 },
+ {"direction": 9,
+ "instructionText": "You have arrived at your destination, on the left",
+ "distanceToNextInstruction": 0 }
+ ]
+ }
+}
diff --git a/examples/quickcontrols/wearable/Wearable/fitness.js b/examples/quickcontrols/wearable/Wearable/fitness.js
new file mode 100644
index 0000000000..220d1d24b9
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/fitness.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+function getWalkingSteps() {
+ return 4000.;
+}
+
+function getWalkingGoal() {
+ return 8000.;
+}
+
+function getWalkingTime() {
+ return 40.;
+}
+
+function getWalkingCalories() {
+ return 100.;
+}
+
+function getRunningGoal() {
+ return 8.;
+}
+
+function getRunningDistance() {
+ return 4.;
+}
+
+function getRunningTime() {
+ return 16.;
+}
+
+function getRunningCalories() {
+ return 200.;
+}
diff --git a/examples/quickcontrols/wearable/Wearable/icons/back-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/back-dark.svg
new file mode 100644
index 0000000000..a2bf8c30ff
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/back-dark.svg
@@ -0,0 +1,4 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M11 20C11 19.4477 11.4477 19 12 19H27C27.5523 19 28 19.4477 28 20C28 20.5523 27.5523 21 27 21H12C11.4477 21 11 20.5523 11 20Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M19.7058 12.2929C20.0981 12.6834 20.0981 13.3166 19.7058 13.7071L13.3838 20L19.7058 26.2929C20.0981 26.6834 20.0981 27.3166 19.7058 27.7071C19.3134 28.0976 18.6773 28.0976 18.285 27.7071L11.3237 20.7778C10.8921 20.3482 10.8921 19.6518 11.3237 19.2222L18.285 12.2929C18.6773 11.9024 19.3134 11.9024 19.7058 12.2929Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/back-light.svg b/examples/quickcontrols/wearable/Wearable/icons/back-light.svg
new file mode 100644
index 0000000000..53c97ddc73
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/back-light.svg
@@ -0,0 +1,4 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M11 20C11 19.4477 11.4477 19 12 19H27C27.5523 19 28 19.4477 28 20C28 20.5523 27.5523 21 27 21H12C11.4477 21 11 20.5523 11 20Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M19.7058 12.2929C20.0981 12.6834 20.0981 13.3166 19.7058 13.7071L13.3838 20L19.7058 26.2929C20.0981 26.6834 20.0981 27.3166 19.7058 27.7071C19.3134 28.0976 18.6773 28.0976 18.285 27.7071L11.3237 20.7778C10.8921 20.3482 10.8921 19.6518 11.3237 19.2222L18.285 12.2929C18.6773 11.9024 19.3134 11.9024 19.7058 12.2929Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/bearleft-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/bearleft-dark.svg
new file mode 100644
index 0000000000..cce617b716
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/bearleft-dark.svg
@@ -0,0 +1,7 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12 16L17 11V5" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2 1"/>
+<path d="M12 16L7 11V5" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M12 16V20" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M10 7L7 4L4 7" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M20 7L17 4L14 7" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2 1"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/bearleft-light.svg b/examples/quickcontrols/wearable/Wearable/icons/bearleft-light.svg
new file mode 100644
index 0000000000..e03ae2cdc6
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/bearleft-light.svg
@@ -0,0 +1,7 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12 16L17 11V5" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2 1"/>
+<path d="M12 16L7 11V5" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M12 16V20" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M10 7L7 4L4 7" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M20 7L17 4L14 7" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2 1"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/bearright-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/bearright-dark.svg
new file mode 100644
index 0000000000..c7c3e71006
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/bearright-dark.svg
@@ -0,0 +1,7 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12 16L7 11V5" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2 1"/>
+<path d="M12 16L17 11V5" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M12 16V20" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M14 7L17 4L20 7" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M4 7L7 4L10 7" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2 1"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/bearright-light.svg b/examples/quickcontrols/wearable/Wearable/icons/bearright-light.svg
new file mode 100644
index 0000000000..5e6b77ec1b
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/bearright-light.svg
@@ -0,0 +1,7 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12 16L7 11V5" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2 1"/>
+<path d="M12 16L17 11V5" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M12 16V20" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M14 7L17 4L20 7" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M4 7L7 4L10 7" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2 1"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/bell-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/bell-dark.svg
new file mode 100644
index 0000000000..9b010af6b5
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/bell-dark.svg
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M17.3334 2.66671C17.3334 1.93033 16.7365 1.33337 16.0001 1.33337C15.2637 1.33337 14.6667 1.93033 14.6667 2.66671V4.11031C12.9044 4.40383 11.2703 5.27349 10.0063 6.60077C8.43031 8.25552 7.55565 10.4866 7.55565 12.8C7.55565 16.9696 6.70611 19.5542 5.928 21.0521C5.53753 21.8037 5.15882 22.2939 4.89904 22.5819C4.7688 22.7262 4.66748 22.8208 4.6082 22.8726C4.57854 22.8986 4.55933 22.9139 4.55223 22.9195L4.5513 22.9202C4.08705 23.2564 3.88898 23.8527 4.06178 24.4009C4.23674 24.9559 4.75147 25.3334 5.33343 25.3334H26.6668C27.2487 25.3334 27.7635 24.9559 27.9384 24.4009C28.1112 23.8527 27.9131 23.2564 27.4489 22.9202L27.448 22.9195C27.4409 22.9139 27.4217 22.8986 27.392 22.8726C27.3327 22.8208 27.2314 22.7262 27.1012 22.5819C26.8414 22.2939 26.4627 21.8037 26.0722 21.0521C25.2941 19.5542 24.4445 16.9696 24.4445 12.8C24.4445 10.4866 23.5699 8.25552 21.9939 6.60077C20.7298 5.27348 19.0958 4.40382 17.3334 4.11031V2.66671ZM23.9148 22.6667C23.8451 22.5437 23.7753 22.4153 23.7058 22.2814C22.7061 20.357 21.7779 17.3416 21.7779 12.8C21.7779 11.153 21.1541 9.58564 20.0629 8.43985C18.9738 7.29627 17.5109 6.66671 16.0001 6.66671C14.4893 6.66671 13.0264 7.29627 11.9373 8.43985C10.8461 9.58564 10.2223 11.153 10.2223 12.8C10.2223 17.3416 9.29408 20.357 8.29442 22.2814C8.22485 22.4153 8.15506 22.5437 8.08535 22.6667H23.9148ZM12.5926 26.9581C13.2049 26.549 14.0329 26.7136 14.442 27.3259C14.575 27.525 14.7812 27.7121 15.0577 27.8503C15.3345 27.9887 15.6601 28.0667 16.0001 28.0667C16.3401 28.0667 16.6657 27.9887 16.9425 27.8503C17.219 27.7121 17.4252 27.525 17.5582 27.3259C17.9673 26.7136 18.7953 26.549 19.4076 26.9581C20.0198 27.3673 20.1845 28.1953 19.7754 28.8075C19.3664 29.4195 18.7946 29.9057 18.1351 30.2354C17.4759 30.565 16.7403 30.7334 16.0001 30.7334C15.2599 30.7334 14.5243 30.565 13.8651 30.2354C13.2056 29.9057 12.6338 29.4195 12.2248 28.8075C11.8157 28.1953 11.9804 27.3673 12.5926 26.9581Z" fill="#E6E6E6"/>
+<path d="M3.99984 13.4C3.26346 13.4 2.65914 12.8016 2.72771 12.0684C2.88779 10.357 3.36183 8.76192 4.14984 7.28329C4.92622 5.82649 5.91149 4.56487 7.10564 3.49845C7.65054 3.01184 8.48356 3.14375 8.91597 3.73257V3.73257C9.3488 4.32196 9.21456 5.1448 8.68174 5.64562C7.81466 6.46063 7.09292 7.41208 6.5165 8.49996C5.92856 9.6096 5.55971 10.7995 5.40995 12.0696C5.32372 12.8009 4.73622 13.4 3.99984 13.4V13.4ZM27.9998 13.4C27.2635 13.4 26.676 12.8009 26.5897 12.0696C26.44 10.7995 26.0711 9.6096 25.4832 8.49996C24.9068 7.41208 24.185 6.46063 23.3179 5.64562C22.7851 5.1448 22.6509 4.32196 23.0837 3.73257V3.73257C23.5161 3.14375 24.3491 3.01184 24.894 3.49845C26.0882 4.56487 27.0735 5.82649 27.8498 7.28329C28.6378 8.76192 29.1119 10.357 29.272 12.0684C29.3405 12.8016 28.7362 13.4 27.9998 13.4V13.4Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/bell-light.svg b/examples/quickcontrols/wearable/Wearable/icons/bell-light.svg
new file mode 100644
index 0000000000..b090fd6649
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/bell-light.svg
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M17.3333 2.66732C17.3333 1.93094 16.7364 1.33398 16 1.33398C15.2636 1.33398 14.6667 1.93094 14.6667 2.66732V4.11092C12.9043 4.40444 11.2703 5.2741 10.0062 6.60138C8.43022 8.25613 7.55556 10.4872 7.55556 12.8007C7.55556 16.9702 6.70602 19.5548 5.92791 21.0527C5.53744 21.8043 5.15873 22.2945 4.89895 22.5825C4.76871 22.7268 4.66739 22.8214 4.60811 22.8733C4.57845 22.8992 4.55924 22.9145 4.55214 22.9201L4.55121 22.9208C4.08696 23.257 3.88888 23.8533 4.06169 24.4015C4.23665 24.9565 4.75138 25.334 5.33334 25.334H26.6667C27.2486 25.334 27.7634 24.9565 27.9383 24.4015C28.1111 23.8533 27.9131 23.257 27.4488 22.9208L27.4479 22.9201C27.4408 22.9145 27.4216 22.8992 27.3919 22.8733C27.3326 22.8214 27.2313 22.7268 27.1011 22.5825C26.8413 22.2945 26.4626 21.8043 26.0721 21.0527C25.294 19.5548 24.4445 16.9702 24.4445 12.8007C24.4445 10.4872 23.5698 8.25613 21.9938 6.60138C20.7298 5.27409 19.0957 4.40443 17.3333 4.11092V2.66732ZM23.9148 22.6673C23.845 22.5443 23.7753 22.4159 23.7057 22.282C22.706 20.3576 21.7778 17.3422 21.7778 12.8007C21.7778 11.1536 21.154 9.58625 20.0628 8.44046C18.9737 7.29688 17.5108 6.66732 16 6.66732C14.4892 6.66732 13.0263 7.29688 11.9372 8.44046C10.846 9.58625 10.2222 11.1536 10.2222 12.8007C10.2222 17.3422 9.29399 20.3576 8.29432 22.282C8.22476 22.4159 8.15497 22.5443 8.08526 22.6673H23.9148ZM12.5925 26.9587C13.2048 26.5496 14.0328 26.7143 14.4419 27.3265C14.575 27.5256 14.7811 27.7127 15.0576 27.8509C15.3344 27.9893 15.66 28.0673 16 28.0673C16.34 28.0673 16.6656 27.9893 16.9424 27.8509C17.2189 27.7127 17.4251 27.5256 17.5581 27.3265C17.9672 26.7143 18.7952 26.5496 19.4075 26.9587C20.0197 27.3679 20.1844 28.1959 19.7753 28.8081C19.3663 29.4202 18.7945 29.9063 18.135 30.2361C17.4758 30.5657 16.7402 30.734 16 30.734C15.2598 30.734 14.5242 30.5657 13.865 30.2361C13.2055 29.9063 12.6337 29.4202 12.2247 28.8081C11.8156 28.1959 11.9803 27.3679 12.5925 26.9587Z" fill="#191919"/>
+<path d="M3.99999 13.3994C3.26361 13.3994 2.65929 12.801 2.72787 12.0678C2.88794 10.3563 3.36198 8.7613 4.14999 7.28268C4.92637 5.82588 5.91164 4.56426 7.1058 3.49784C7.65069 3.01123 8.48371 3.14314 8.91613 3.73196C9.34896 4.32135 9.21471 5.14419 8.68189 5.64501C7.81482 6.46002 7.09307 7.41147 6.51666 8.49935C5.92872 9.60899 5.55986 10.7989 5.4101 12.0689C5.32387 12.8003 4.73637 13.3994 3.99999 13.3994ZM28 13.3994C27.2636 13.3994 26.6761 12.8003 26.5899 12.0689C26.4401 10.7989 26.0713 9.60899 25.4833 8.49935C24.9069 7.41147 24.1852 6.46002 23.3181 5.64501C22.7853 5.14419 22.651 4.32135 23.0839 3.73196C23.5163 3.14314 24.3493 3.01123 24.8942 3.49784C26.0883 4.56426 27.0736 5.82588 27.85 7.28268C28.638 8.7613 29.112 10.3563 29.2721 12.0678C29.3407 12.801 28.7364 13.3994 28 13.3994Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/bluetooth-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/bluetooth-dark.svg
new file mode 100644
index 0000000000..b6227d7072
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/bluetooth-dark.svg
@@ -0,0 +1,3 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M18.6445 3.74032C19.1541 3.52925 19.7406 3.64592 20.1306 4.03591L27.6306 11.5359C28.1631 12.0684 28.1631 12.9319 27.6306 13.4644L21.0948 20.0002L27.6306 26.5359C28.1631 27.0685 28.1631 27.9319 27.6306 28.4644L20.1306 35.9644C19.7406 36.3544 19.1541 36.4711 18.6445 36.26C18.135 36.0489 17.8027 35.5517 17.8027 35.0002V23.2923L12.6306 28.4644C12.0981 28.9969 11.2347 28.9969 10.7021 28.4644C10.1696 27.9319 10.1696 27.0685 10.7021 26.5359L17.2379 20.0002L10.7021 13.4644C10.1696 12.9319 10.1696 12.0684 10.7021 11.5359C11.2347 11.0034 12.0981 11.0034 12.6306 11.5359L17.8027 16.708V5.00015C17.8027 4.44861 18.135 3.95138 18.6445 3.74032ZM20.53 23.2923L24.7379 27.5002L20.53 31.708V23.2923ZM20.53 16.708V8.29226L24.7379 12.5002L20.53 16.708Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/bluetooth-light.svg b/examples/quickcontrols/wearable/Wearable/icons/bluetooth-light.svg
new file mode 100644
index 0000000000..3e07b06b50
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/bluetooth-light.svg
@@ -0,0 +1,3 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M18.6449 3.74056C19.1545 3.52949 19.741 3.64616 20.131 4.03616L27.631 11.5362C28.1635 12.0687 28.1635 12.9321 27.631 13.4646L21.0952 20.0004L27.631 26.5362C28.1635 27.0687 28.1635 27.9321 27.631 28.4646L20.131 35.9646C19.741 36.3546 19.1545 36.4713 18.6449 36.2602C18.1353 36.0492 17.8031 35.5519 17.8031 35.0004V23.2925L12.631 28.4646C12.0984 28.9972 11.235 28.9972 10.7025 28.4646C10.17 27.9321 10.17 27.0687 10.7025 26.5362L17.2383 20.0004L10.7025 13.4646C10.17 12.9321 10.17 12.0687 10.7025 11.5362C11.235 11.0036 12.0984 11.0036 12.631 11.5362L17.8031 16.7083V5.0004C17.8031 4.44886 18.1353 3.95162 18.6449 3.74056ZM20.5304 23.2925L24.7383 27.5004L20.5304 31.7083V23.2925ZM20.5304 16.7083V8.29251L24.7383 12.5004L20.5304 16.7083Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/clock-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/clock-dark.svg
new file mode 100644
index 0000000000..6b9e71fe0f
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/clock-dark.svg
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6.66667 17.3334C6.66667 12.1787 10.8453 8.00004 16 8.00004C21.1547 8.00004 25.3333 12.1787 25.3333 17.3334C25.3333 22.488 21.1547 26.6667 16 26.6667C10.8453 26.6667 6.66667 22.488 6.66667 17.3334ZM16 5.33337C9.37258 5.33337 4 10.706 4 17.3334C4 23.9608 9.37258 29.3334 16 29.3334C22.6274 29.3334 28 23.9608 28 17.3334C28 10.706 22.6274 5.33337 16 5.33337ZM17.3333 12C17.3333 11.2637 16.7364 10.6667 16 10.6667C15.2636 10.6667 14.6667 11.2637 14.6667 12V18C14.6667 18.5051 14.952 18.9668 15.4037 19.1926L19.4037 21.1926C20.0624 21.5219 20.8633 21.255 21.1926 20.5963C21.5219 19.9377 21.2549 19.1368 20.5963 18.8075L17.3333 17.176V12Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M1.72353 8.39048C1.20283 8.91118 1.20283 9.7554 1.72353 10.2761C2.24423 10.7968 3.08845 10.7968 3.60915 10.2761L8.94248 4.94277C9.46318 4.42207 9.46318 3.57785 8.94248 3.05715C8.42178 2.53645 7.57756 2.53645 7.05686 3.05715L1.72353 8.39048ZM24.9425 3.05715C24.4218 2.53645 23.5776 2.53645 23.0569 3.05715C22.5362 3.57785 22.5362 4.42207 23.0569 4.94277L28.3902 10.2761C28.9109 10.7968 29.7551 10.7968 30.2758 10.2761C30.7965 9.7554 30.7965 8.91118 30.2758 8.39048L24.9425 3.05715Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/clock-light.svg b/examples/quickcontrols/wearable/Wearable/icons/clock-light.svg
new file mode 100644
index 0000000000..b0f195142c
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/clock-light.svg
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6.66667 17.334C6.66667 12.1793 10.8453 8.00065 16 8.00065C21.1547 8.00065 25.3333 12.1793 25.3333 17.334C25.3333 22.4886 21.1547 26.6673 16 26.6673C10.8453 26.6673 6.66667 22.4886 6.66667 17.334ZM16 5.33398C9.37258 5.33398 4 10.7066 4 17.334C4 23.9614 9.37258 29.334 16 29.334C22.6274 29.334 28 23.9614 28 17.334C28 10.7066 22.6274 5.33398 16 5.33398ZM17.3333 12.0007C17.3333 11.2643 16.7364 10.6673 16 10.6673C15.2636 10.6673 14.6667 11.2643 14.6667 12.0007V18.0007C14.6667 18.5057 14.952 18.9674 15.4037 19.1932L19.4037 21.1932C20.0624 21.5225 20.8633 21.2556 21.1926 20.5969C21.5219 19.9383 21.2549 19.1374 20.5963 18.8081L17.3333 17.1766V12.0007Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M1.72384 8.38987C1.20314 8.91057 1.20314 9.75479 1.72384 10.2755C2.24454 10.7962 3.08876 10.7962 3.60946 10.2755L8.94279 4.94216C9.46349 4.42146 9.46349 3.57724 8.94279 3.05654C8.42209 2.53584 7.57787 2.53584 7.05717 3.05654L1.72384 8.38987ZM24.9428 3.05654C24.4221 2.53584 23.5779 2.53584 23.0572 3.05654C22.5365 3.57724 22.5365 4.42146 23.0572 4.94216L28.3905 10.2755C28.9112 10.7962 29.7554 10.7962 30.2761 10.2755C30.7968 9.75479 30.7968 8.91057 30.2761 8.38987L24.9428 3.05654Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/darkmode-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/darkmode-dark.svg
new file mode 100644
index 0000000000..b3e8da56ba
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/darkmode-dark.svg
@@ -0,0 +1,4 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M19.9997 33.3334C27.3635 33.3334 33.333 27.3638 33.333 20C33.333 12.6362 27.3635 6.66671 19.9997 6.66671C12.6359 6.66671 6.66634 12.6362 6.66634 20C6.66634 27.3638 12.6359 33.3334 19.9997 33.3334ZM19.9997 36.6667C29.2044 36.6667 36.6663 29.2048 36.6663 20C36.6663 10.7953 29.2044 3.33337 19.9997 3.33337C10.7949 3.33337 3.33301 10.7953 3.33301 20C3.33301 29.2048 10.7949 36.6667 19.9997 36.6667Z" fill="#E6E6E6"/>
+<path d="M19.9997 3.33337C10.7949 3.33337 3.33301 10.7953 3.33301 20C3.33301 29.2048 10.7949 36.6667 19.9997 36.6667V3.33337Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/darkmode-light.svg b/examples/quickcontrols/wearable/Wearable/icons/darkmode-light.svg
new file mode 100644
index 0000000000..ca3ef4f4e6
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/darkmode-light.svg
@@ -0,0 +1,4 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M19.9997 33.3333C27.3635 33.3333 33.333 27.3638 33.333 20C33.333 12.6362 27.3635 6.66665 19.9997 6.66665C12.6359 6.66665 6.66634 12.6362 6.66634 20C6.66634 27.3638 12.6359 33.3333 19.9997 33.3333ZM19.9997 36.6666C29.2044 36.6666 36.6663 29.2047 36.6663 20C36.6663 10.7952 29.2044 3.33331 19.9997 3.33331C10.7949 3.33331 3.33301 10.7952 3.33301 20C3.33301 29.2047 10.7949 36.6666 19.9997 36.6666Z" fill="#191919"/>
+<path d="M19.9997 3.33331C10.7949 3.33331 3.33301 10.7952 3.33301 20C3.33301 29.2047 10.7949 36.6666 19.9997 36.6666V3.33331Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/demomode-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/demomode-dark.svg
new file mode 100644
index 0000000000..9c95aa1f16
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/demomode-dark.svg
@@ -0,0 +1,4 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.2804 23.9331C20.9637 23.5531 20.4947 23.3334 20 23.3334C19.5054 23.3334 19.0363 23.5531 18.7197 23.9331L10.3863 33.9331C9.97231 34.4299 9.88307 35.1213 10.1574 35.707C10.4317 36.2926 11.02 36.6667 11.6667 36.6667H28.3334C28.9801 36.6667 29.5684 36.2926 29.8427 35.707C30.117 35.1213 30.0277 34.4299 29.6137 33.9331L21.2804 23.9331Z" fill="#E6E6E6"/>
+<path d="M6.66634 8.33333H33.333V25H28.333V28.3333H33.333C35.174 28.3333 36.6663 26.841 36.6663 25V8.33333C36.6663 6.49238 35.174 5 33.333 5H6.66634C4.82539 5 3.33301 6.49238 3.33301 8.33333V25C3.33301 26.841 4.82539 28.3333 6.66634 28.3333H11.6663V25H6.66634V8.33333Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/demomode-light.svg b/examples/quickcontrols/wearable/Wearable/icons/demomode-light.svg
new file mode 100644
index 0000000000..eae661be65
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/demomode-light.svg
@@ -0,0 +1,4 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.2804 23.933C20.9637 23.553 20.4947 23.3333 20 23.3333C19.5054 23.3333 19.0363 23.553 18.7197 23.933L10.3863 33.933C9.97231 34.4298 9.88307 35.1213 10.1574 35.7069C10.4317 36.2925 11.02 36.6666 11.6667 36.6666H28.3334C28.9801 36.6666 29.5684 36.2925 29.8427 35.7069C30.117 35.1213 30.0277 34.4298 29.6137 33.933L21.2804 23.933Z" fill="#191919"/>
+<path d="M6.66634 8.33333H33.333V25H28.333V28.3333H33.333C35.174 28.3333 36.6663 26.841 36.6663 25V8.33333C36.6663 6.49238 35.174 5 33.333 5H6.66634C4.82539 5 3.33301 6.49238 3.33301 8.33333V25C3.33301 26.841 4.82539 28.3333 6.66634 28.3333H11.6663V25H6.66634V8.33333Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/drop-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/drop-dark.svg
new file mode 100644
index 0000000000..0672ea10d4
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/drop-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12 22C9.78333 22 7.89583 21.2125 6.3375 19.6375C4.77917 18.0626 4 16.1598 4 13.9293C4 12.8056 4.20833 11.767 4.625 10.8135C5.04167 9.85997 5.61667 9.00863 6.35 8.25946L11.2992 3.2928C11.6883 2.9024 12.3117 2.9024 12.7008 3.2928L17.65 8.25946C18.3833 9.00863 18.9583 9.85997 19.375 10.8135C19.7917 11.767 20 12.8056 20 13.9293C20 16.1598 19.2208 18.0626 17.6625 19.6375C16.1042 21.2125 14.2167 22 12 22ZM12 20C13.6667 20 15.2086 19.5829 16.5 18.1818C17.7097 16.8692 17.9963 15.63 18 13.8272C18.0018 12.9638 17.9569 12.4528 17.6625 11.6435C17.3638 10.8225 16.5 9.74078 16.5 9.74078L12 5.45005L7.75 9.74078C7.16667 10.3027 6.72917 10.9369 6.4375 11.6435C6.14583 12.3501 6 13.1121 6 13.9293C6 15.5809 6.58333 16.9984 7.75 18.1818C8.91667 19.3651 10.3333 20 12 20Z" fill="#E6E6E6"/>
+<path d="M12.7846 18.7537C12.641 18.8951 12.4678 18.9741 12.265 18.9907C11.1837 19.0573 10.1109 18.7661 9.04646 18.1173C7.98205 17.4685 7.30623 16.3872 7.01901 14.8734C6.96832 14.6405 7.01901 14.4367 7.17107 14.262C7.32313 14.0873 7.51742 14 7.75396 14C7.93981 14 8.10454 14.0582 8.24815 14.1747C8.39176 14.2911 8.48046 14.4408 8.51426 14.6238C8.717 15.7384 9.20697 16.5078 9.98416 16.932C10.7614 17.3563 11.4963 17.5434 12.189 17.4935C12.4256 17.4769 12.6199 17.5392 12.7719 17.6807C12.924 17.8221 13 18.0092 13 18.2421C13 18.4417 12.9282 18.6123 12.7846 18.7537Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/drop-light.svg b/examples/quickcontrols/wearable/Wearable/icons/drop-light.svg
new file mode 100644
index 0000000000..c045ddfed8
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/drop-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12 22C9.78333 22 7.89583 21.2125 6.3375 19.6375C4.77917 18.0626 4 16.1598 4 13.9293C4 12.8056 4.20833 11.767 4.625 10.8135C5.04167 9.85997 5.61667 9.00863 6.35 8.25946L11.2992 3.2928C11.6883 2.9024 12.3117 2.9024 12.7008 3.2928L17.65 8.25946C18.3833 9.00863 18.9583 9.85997 19.375 10.8135C19.7917 11.767 20 12.8056 20 13.9293C20 16.1598 19.2208 18.0626 17.6625 19.6375C16.1042 21.2125 14.2167 22 12 22ZM12 20C13.6667 20 15.2086 19.5829 16.5 18.1818C17.7097 16.8692 17.9963 15.63 18 13.8272C18.0018 12.9638 17.9569 12.4528 17.6625 11.6435C17.3638 10.8225 16.5 9.74078 16.5 9.74078L12 5.45005L7.75 9.74078C7.16667 10.3027 6.72917 10.9369 6.4375 11.6435C6.14583 12.3501 6 13.1121 6 13.9293C6 15.5809 6.58333 16.9984 7.75 18.1818C8.91667 19.3651 10.3333 20 12 20Z" fill="#191919"/>
+<path d="M12.7846 18.7537C12.641 18.8951 12.4678 18.9741 12.265 18.9907C11.1837 19.0573 10.1109 18.7661 9.04646 18.1173C7.98205 17.4685 7.30623 16.3872 7.01901 14.8734C6.96832 14.6405 7.01901 14.4367 7.17107 14.262C7.32313 14.0873 7.51742 14 7.75396 14C7.93981 14 8.10454 14.0582 8.24815 14.1747C8.39176 14.2911 8.48046 14.4408 8.51426 14.6238C8.717 15.7384 9.20697 16.5078 9.98416 16.932C10.7614 17.3563 11.4963 17.5434 12.189 17.4935C12.4256 17.4769 12.6199 17.5392 12.7719 17.6807C12.924 17.8221 13 18.0092 13 18.2421C13 18.4417 12.9282 18.6123 12.7846 18.7537Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/forward-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/forward-dark.svg
new file mode 100644
index 0000000000..f53165f667
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/forward-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 5C11.4477 5 11 5.55964 11 6.25V18.75C11 19.4404 11.4477 20 12 20C12.5523 20 13 19.4404 13 18.75L12.9999 6.25C13 5.625 12.5527 5 12 5Z" fill="#2CDE85"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5.82428 10.7372C6.2314 11.1103 6.86397 11.0828 7.23716 10.6757L12 5.47989L16.7629 10.6757C17.136 11.0828 17.7686 11.1103 18.1757 10.7372C18.5828 10.364 18.6104 9.7314 18.2372 9.32428L12.7372 3.32428C12.5477 3.11765 12.2803 3 12 3C11.7197 3 11.4523 3.11765 11.2629 3.32428L5.76285 9.32428C5.38966 9.73139 5.41716 10.364 5.82428 10.7372Z" fill="#2CDE85"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/forward-light.svg b/examples/quickcontrols/wearable/Wearable/icons/forward-light.svg
new file mode 100644
index 0000000000..3c872b6320
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/forward-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 5C11.4477 5 11 5.55964 11 6.25V18.75C11 19.4404 11.4477 20 12 20C12.5523 20 13 19.4404 13 18.75L12.9999 6.25C13 5.625 12.5527 5 12 5Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5.82428 10.7372C6.2314 11.1103 6.86397 11.0828 7.23716 10.6757L12 5.47989L16.7629 10.6757C17.136 11.0828 17.7686 11.1103 18.1757 10.7372C18.5828 10.364 18.6104 9.7314 18.2372 9.32428L12.7372 3.32428C12.5477 3.11765 12.2803 3 12 3C11.7197 3 11.4523 3.11765 11.2629 3.32428L5.76285 9.32428C5.38966 9.73139 5.41716 10.364 5.82428 10.7372Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/hearth-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/hearth-dark.svg
new file mode 100644
index 0000000000..1a2ff53afc
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/hearth-dark.svg
@@ -0,0 +1,3 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16.6602 27.4192C16.2826 27.7513 15.7171 27.7513 15.3394 27.4192L14.0665 26.2997C11.8221 24.3161 9.9665 22.6049 8.49984 21.1662C7.03317 19.7275 5.8665 18.436 4.99984 17.2916C4.13317 16.1471 3.52762 15.0954 3.18317 14.1362C2.83873 13.1771 2.6665 12.1962 2.6665 11.1935C2.6665 9.14441 3.3665 7.43324 4.7665 6.05995C6.1665 4.68665 7.91095 4 9.99984 4C11.1554 4 12.2554 4.23978 13.2998 4.71935C14.3443 5.19891 15.2443 5.87466 15.9998 6.74659C16.7554 5.87466 17.6554 5.19891 18.6998 4.71935C19.7443 4.23978 20.8443 4 21.9998 4C24.0887 4 25.8332 4.68665 27.2332 6.05995C28.6332 7.43324 29.3332 9.14441 29.3332 11.1935C29.3332 12.1962 29.161 13.1771 28.8165 14.1362C28.4721 15.0954 27.8665 16.1471 26.9998 17.2916C26.1332 18.436 24.9665 19.7275 23.4998 21.1662C22.0332 22.6049 20.1776 24.3161 17.9332 26.2997L16.6602 27.4192ZM15.9998 24.4687C18.1332 22.594 19.8887 20.9864 21.2665 19.6458C22.6443 18.3052 23.7332 17.139 24.5332 16.1471C25.3332 15.1553 25.8887 14.2725 26.1998 13.4986C26.5109 12.7248 26.6665 11.9564 26.6665 11.1935C26.6665 9.88556 26.2221 8.79564 25.3332 7.92371C24.4443 7.05177 23.3332 6.6158 21.9998 6.6158C20.9554 6.6158 19.9887 6.90463 19.0998 7.48229C18.608 7.80193 18.2012 8.16996 17.8794 8.58638C17.4137 9.18908 16.7615 9.68937 15.9998 9.68937V9.68937C15.2382 9.68937 14.5859 9.18908 14.1203 8.58638C13.7985 8.16996 13.3917 7.80193 12.8998 7.48229C12.0109 6.90463 11.0443 6.6158 9.99984 6.6158C8.6665 6.6158 7.55539 7.05177 6.6665 7.92371C5.77762 8.79564 5.33317 9.88556 5.33317 11.1935C5.33317 11.9564 5.48873 12.7248 5.79984 13.4986C6.11095 14.2725 6.6665 15.1553 7.4665 16.1471C8.2665 17.139 9.35539 18.3052 10.7332 19.6458C12.1109 20.9864 13.8665 22.594 15.9998 24.4687Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/hearth-light.svg b/examples/quickcontrols/wearable/Wearable/icons/hearth-light.svg
new file mode 100644
index 0000000000..155329518f
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/hearth-light.svg
@@ -0,0 +1,3 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16.6604 27.4192C16.2828 27.7513 15.7172 27.7513 15.3396 27.4192L14.0667 26.2997C11.8222 24.3161 9.96666 22.6049 8.49999 21.1662C7.03332 19.7275 5.86666 18.436 4.99999 17.2916C4.13332 16.1471 3.52777 15.0954 3.18332 14.1362C2.83888 13.1771 2.66666 12.1962 2.66666 11.1935C2.66666 9.14441 3.36666 7.43324 4.76666 6.05995C6.16666 4.68665 7.9111 4 9.99999 4C11.1555 4 12.2555 4.23978 13.3 4.71935C14.3444 5.19891 15.2444 5.87466 16 6.74659C16.7555 5.87466 17.6555 5.19891 18.7 4.71935C19.7444 4.23978 20.8444 4 22 4C24.0889 4 25.8333 4.68665 27.2333 6.05995C28.6333 7.43324 29.3333 9.14441 29.3333 11.1935C29.3333 12.1962 29.1611 13.1771 28.8167 14.1362C28.4722 15.0954 27.8667 16.1471 27 17.2916C26.1333 18.436 24.9667 19.7275 23.5 21.1662C22.0333 22.6049 20.1778 24.3161 17.9333 26.2997L16.6604 27.4192ZM16 24.4687C18.1333 22.594 19.8889 20.9864 21.2667 19.6458C22.6444 18.3052 23.7333 17.139 24.5333 16.1471C25.3333 15.1553 25.8889 14.2725 26.2 13.4986C26.5111 12.7248 26.6667 11.9564 26.6667 11.1935C26.6667 9.88556 26.2222 8.79564 25.3333 7.92371C24.4444 7.05177 23.3333 6.6158 22 6.6158C20.9555 6.6158 19.9889 6.90463 19.1 7.48229C18.6081 7.80193 18.2013 8.16996 17.8796 8.58638C17.4139 9.18908 16.7616 9.68937 16 9.68937C15.2383 9.68937 14.5861 9.18908 14.1204 8.58638C13.7987 8.16996 13.3918 7.80193 12.9 7.48229C12.0111 6.90463 11.0444 6.6158 9.99999 6.6158C8.66666 6.6158 7.55555 7.05177 6.66666 7.92371C5.77777 8.79564 5.33332 9.88556 5.33332 11.1935C5.33332 11.9564 5.48888 12.7248 5.79999 13.4986C6.1111 14.2725 6.66666 15.1553 7.46666 16.1471C8.26666 17.139 9.35555 18.3052 10.7333 19.6458C12.1111 20.9864 13.8667 22.594 16 24.4687Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/left-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/left-dark.svg
new file mode 100644
index 0000000000..78abe43ad0
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/left-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6 9.5C6 8.94772 6.44772 8.5 7 8.5H19C19.5523 8.5 20 8.94772 20 9.5V19.5C20 20.0523 19.5523 20.5 19 20.5C18.4477 20.5 18 20.0523 18 19.5V10.5003L7 10.5C6.44772 10.5 6 10.0523 6 9.5Z" fill="#2CDE85"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12.7372 3.32428C13.1103 3.7314 13.0828 4.36397 12.6757 4.73716L7.47989 9.50001L12.6757 14.2629C13.0828 14.636 13.1103 15.2686 12.7372 15.6757C12.364 16.0828 11.7314 16.1104 11.3243 15.7372L5.32428 10.2372C5.11765 10.0477 5 9.78031 5 9.50001C5 9.2197 5.11765 8.95226 5.32428 8.76285L11.3243 3.26285C11.7314 2.88966 12.364 2.91716 12.7372 3.32428Z" fill="#2CDE85"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/left-light.svg b/examples/quickcontrols/wearable/Wearable/icons/left-light.svg
new file mode 100644
index 0000000000..636a1ee0a5
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/left-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6 9.5C6 8.94772 6.44772 8.5 7 8.5H19C19.5523 8.5 20 8.94772 20 9.5V19.5C20 20.0523 19.5523 20.5 19 20.5C18.4477 20.5 18 20.0523 18 19.5V10.5003L7 10.5C6.44772 10.5 6 10.0523 6 9.5Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12.7372 3.32428C13.1103 3.7314 13.0828 4.36397 12.6757 4.73716L7.47989 9.50001L12.6757 14.2629C13.0828 14.636 13.1103 15.2686 12.7372 15.6757C12.364 16.0828 11.7314 16.1104 11.3243 15.7372L5.32428 10.2372C5.11765 10.0477 5 9.78031 5 9.50001C5 9.2197 5.11765 8.95226 5.32428 8.76285L11.3243 3.26285C11.7314 2.88966 12.364 2.91716 12.7372 3.32428Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/lightleft-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/lightleft-dark.svg
new file mode 100644
index 0000000000..2fe8216d9f
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/lightleft-dark.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12.0005 19.9999C12.0005 20.5522 12.4482 20.9999 13.0005 20.9999C13.5528 20.9999 14.0005 20.5522 14.0005 19.9999H12.0005ZM7.17889 3.01613C6.63551 2.91733 6.11493 3.27774 6.01613 3.82111L4.40616 12.6759C4.30737 13.2193 4.66777 13.7399 5.21115 13.8387C5.75452 13.9375 6.27511 13.5771 6.3739 13.0337L7.80498 5.16276L15.6759 6.59384C16.2193 6.69263 16.7399 6.33223 16.8387 5.78885C16.9375 5.24548 16.5771 4.72489 16.0337 4.6261L7.17889 3.01613ZM14.0005 19.9999C14.0005 15.9397 13.6211 13.4098 12.6069 11.0435C11.6181 8.73658 10.0317 6.62227 7.82219 3.43079L6.17781 4.56921C8.46832 7.87773 9.88218 9.76337 10.7686 11.8314C11.6296 13.8401 12.0005 16.0601 12.0005 19.9999H14.0005Z" fill="#2CDE85"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/lightleft-light.svg b/examples/quickcontrols/wearable/Wearable/icons/lightleft-light.svg
new file mode 100644
index 0000000000..aea6ac6cad
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/lightleft-light.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12.0005 19.9999C12.0005 20.5522 12.4482 20.9999 13.0005 20.9999C13.5528 20.9999 14.0005 20.5522 14.0005 19.9999H12.0005ZM7.17889 3.01613C6.63551 2.91733 6.11493 3.27774 6.01613 3.82111L4.40616 12.6759C4.30737 13.2193 4.66777 13.7399 5.21115 13.8387C5.75452 13.9375 6.27511 13.5771 6.3739 13.0337L7.80498 5.16276L15.6759 6.59384C16.2193 6.69263 16.7399 6.33223 16.8387 5.78885C16.9375 5.24548 16.5771 4.72489 16.0337 4.6261L7.17889 3.01613ZM14.0005 19.9999C14.0005 15.9397 13.6211 13.4098 12.6069 11.0435C11.6181 8.73658 10.0317 6.62227 7.82219 3.43079L6.17781 4.56921C8.46832 7.87773 9.88218 9.76337 10.7686 11.8314C11.6296 13.8401 12.0005 16.0601 12.0005 19.9999H14.0005Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/lightright-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/lightright-dark.svg
new file mode 100644
index 0000000000..89b5db0394
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/lightright-dark.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M11.9995 19.9999C11.9995 20.5522 11.5518 20.9999 10.9995 20.9999C10.4472 20.9999 9.99953 20.5522 9.99953 19.9999H11.9995ZM16.8211 3.01613C17.3645 2.91733 17.8851 3.27774 17.9839 3.82111L19.5938 12.6759C19.6926 13.2193 19.3322 13.7399 18.7889 13.8387C18.2455 13.9375 17.7249 13.5771 17.6261 13.0337L16.195 5.16276L8.32406 6.59384C7.78068 6.69263 7.2601 6.33223 7.1613 5.78885C7.0625 5.24548 7.42291 4.72489 7.96629 4.6261L16.8211 3.01613ZM9.99953 19.9999C9.99953 15.9397 10.3789 13.4098 11.3931 11.0435C12.3819 8.73658 13.9683 6.62227 16.1778 3.43079L17.8222 4.56921C15.5317 7.87773 14.1178 9.76337 13.2314 11.8314C12.3704 13.8401 11.9995 16.0601 11.9995 19.9999H9.99953Z" fill="#2CDE85"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/lightright-light.svg b/examples/quickcontrols/wearable/Wearable/icons/lightright-light.svg
new file mode 100644
index 0000000000..58f24020da
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/lightright-light.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M11.9995 19.9999C11.9995 20.5522 11.5518 20.9999 10.9995 20.9999C10.4472 20.9999 9.99953 20.5522 9.99953 19.9999H11.9995ZM16.8211 3.01613C17.3645 2.91733 17.8851 3.27774 17.9839 3.82111L19.5938 12.6759C19.6926 13.2193 19.3322 13.7399 18.7889 13.8387C18.2455 13.9375 17.7249 13.5771 17.6261 13.0337L16.195 5.16276L8.32406 6.59384C7.78068 6.69263 7.2601 6.33223 7.1613 5.78885C7.0625 5.24548 7.42291 4.72489 7.96629 4.6261L16.8211 3.01613ZM9.99953 19.9999C9.99953 15.9397 10.3789 13.4098 11.3931 11.0435C12.3819 8.73658 13.9683 6.62227 16.1778 3.43079L17.8222 4.56921C15.5317 7.87773 14.1178 9.76337 13.2314 11.8314C12.3704 13.8401 11.9995 16.0601 11.9995 19.9999H9.99953Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/maps-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/maps-dark.svg
new file mode 100644
index 0000000000..7c8339606c
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/maps-dark.svg
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M19.3772 22.8242C21.9333 20.0647 24.0002 16.7686 24.0002 13.5757C24.0002 11.3706 23.1431 9.26753 21.6359 7.72614C20.1308 6.18679 18.1023 5.33329 16.0002 5.33329C13.898 5.33329 11.8695 6.18679 10.3644 7.72614C8.85724 9.26753 8.00016 11.3706 8.00016 13.5757C8.00016 16.7686 10.067 20.0647 12.6231 22.8242C13.8427 24.1407 15.0707 25.2246 16.0002 25.9826C16.9296 25.2246 18.1577 24.1407 19.3772 22.8242ZM16.0002 29.3333C16.0002 29.3333 26.6668 22.0606 26.6668 13.5757C26.6668 10.6824 25.543 7.90768 23.5426 5.86182C21.5422 3.81597 18.8291 2.66663 16.0002 2.66663C13.1712 2.66663 10.4581 3.81597 8.45769 5.86182C6.4573 7.90768 5.3335 10.6824 5.3335 13.5757C5.3335 22.0606 16.0002 29.3333 16.0002 29.3333Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M16 12C15.2636 12 14.6667 12.597 14.6667 13.3334C14.6667 14.0698 15.2636 14.6667 16 14.6667C16.7364 14.6667 17.3333 14.0698 17.3333 13.3334C17.3333 12.597 16.7364 12 16 12ZM12 13.3334C12 11.1242 13.7909 9.33337 16 9.33337C18.2091 9.33337 20 11.1242 20 13.3334C20 15.5425 18.2091 17.3334 16 17.3334C13.7909 17.3334 12 15.5425 12 13.3334Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/maps-light.svg b/examples/quickcontrols/wearable/Wearable/icons/maps-light.svg
new file mode 100644
index 0000000000..07fb6e7b87
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/maps-light.svg
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M19.377 22.8235C21.9332 20.0641 24 16.768 24 13.5751C24 11.37 23.1429 9.26692 21.6358 7.72553C20.1307 6.18618 18.1022 5.33268 16 5.33268C13.8979 5.33268 11.8694 6.18618 10.3642 7.72553C8.85709 9.26692 8.00001 11.37 8.00001 13.5751C8.00001 16.768 10.0669 20.0641 12.623 22.8235C13.8425 24.1401 15.0705 25.224 16 25.9819C16.9295 25.224 18.1575 24.1401 19.377 22.8235ZM16 29.3327C16 29.3327 26.6667 22.06 26.6667 13.5751C26.6667 10.6818 25.5429 7.90707 23.5425 5.86121C21.5421 3.81536 18.829 2.66602 16 2.66602C13.171 2.66602 10.4579 3.81536 8.45754 5.86121C6.45715 7.90707 5.33334 10.6818 5.33334 13.5751C5.33334 22.06 16 29.3327 16 29.3327Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M16 12.0007C15.2636 12.0007 14.6667 12.5976 14.6667 13.334C14.6667 14.0704 15.2636 14.6673 16 14.6673C16.7364 14.6673 17.3333 14.0704 17.3333 13.334C17.3333 12.5976 16.7364 12.0007 16 12.0007ZM12 13.334C12 11.1248 13.7909 9.33398 16 9.33398C18.2091 9.33398 20 11.1248 20 13.334C20 15.5431 18.2091 17.334 16 17.334C13.7909 17.334 12 15.5431 12 13.334Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/notification-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/notification-dark.svg
new file mode 100644
index 0000000000..07aa882140
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/notification-dark.svg
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0003 5.33337C21.8914 5.33337 26.667 10.109 26.667 16C26.667 21.8911 21.8914 26.6667 16.0003 26.6667C10.1093 26.6667 5.33366 21.8911 5.33366 16C5.33366 10.109 10.1093 5.33337 16.0003 5.33337ZM16.0003 2.66671C23.3641 2.66671 29.3337 8.63624 29.3337 16C29.3337 23.3638 23.3641 29.3334 16.0003 29.3334C8.63653 29.3334 2.66699 23.3638 2.66699 16C2.66699 8.63624 8.63653 2.66671 16.0003 2.66671Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0003 17.3334C15.2639 17.3334 14.667 16.7364 14.667 16V10.6667C14.667 9.93033 15.2639 9.33337 16.0003 9.33337C16.7367 9.33337 17.3337 9.93033 17.3337 10.6667V16C17.3337 16.7364 16.7367 17.3334 16.0003 17.3334ZM16.0003 20C16.7367 20 17.3337 20.597 17.3337 21.3334C17.3337 22.0698 16.7367 22.6667 16.0003 22.6667C15.2639 22.6667 14.667 22.0698 14.667 21.3334C14.667 20.597 15.2639 20 16.0003 20Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/notification-light.svg b/examples/quickcontrols/wearable/Wearable/icons/notification-light.svg
new file mode 100644
index 0000000000..b4ac2bdb4e
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/notification-light.svg
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0003 5.33331C21.8914 5.33331 26.667 10.1089 26.667 16C26.667 21.891 21.8914 26.6666 16.0003 26.6666C10.1093 26.6666 5.33366 21.891 5.33366 16C5.33366 10.1089 10.1093 5.33331 16.0003 5.33331ZM16.0003 2.66665C23.3641 2.66665 29.3337 8.63618 29.3337 16C29.3337 23.3638 23.3641 29.3333 16.0003 29.3333C8.63653 29.3333 2.66699 23.3638 2.66699 16C2.66699 8.63618 8.63653 2.66665 16.0003 2.66665Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0003 17.3333C15.2639 17.3333 14.667 16.7364 14.667 16V10.6666C14.667 9.93027 15.2639 9.33331 16.0003 9.33331C16.7367 9.33331 17.3337 9.93027 17.3337 10.6666V16C17.3337 16.7364 16.7367 17.3333 16.0003 17.3333ZM16.0003 20C16.7367 20 17.3337 20.5969 17.3337 21.3333C17.3337 22.0697 16.7367 22.6666 16.0003 22.6666C15.2639 22.6666 14.667 22.0697 14.667 21.3333C14.667 20.5969 15.2639 20 16.0003 20Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/plus-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/plus-dark.svg
new file mode 100644
index 0000000000..e4ef49ca4f
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/plus-dark.svg
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M10.667 16C10.667 15.2636 11.2639 14.6666 12.0003 14.6666H20.0003C20.7367 14.6666 21.3337 15.2636 21.3337 16C21.3337 16.7363 20.7367 17.3333 20.0003 17.3333H12.0003C11.2639 17.3333 10.667 16.7363 10.667 16Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0003 21.3334C15.2639 21.3334 14.667 20.7364 14.667 20L14.667 12C14.667 11.2637 15.2639 10.6667 16.0003 10.6667C16.7367 10.6667 17.3337 11.2637 17.3337 12L17.3337 20C17.3337 20.7364 16.7367 21.3334 16.0003 21.3334Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/plus-light.svg b/examples/quickcontrols/wearable/Wearable/icons/plus-light.svg
new file mode 100644
index 0000000000..f1adca5444
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/plus-light.svg
@@ -0,0 +1,5 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M10.667 16C10.667 15.2636 11.2639 14.6667 12.0003 14.6667H20.0003C20.7367 14.6667 21.3337 15.2636 21.3337 16C21.3337 16.7364 20.7367 17.3333 20.0003 17.3333H12.0003C11.2639 17.3333 10.667 16.7364 10.667 16Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0003 21.3333C15.2639 21.3333 14.667 20.7364 14.667 20L14.667 12C14.667 11.2636 15.2639 10.6667 16.0003 10.6667C16.7367 10.6667 17.3337 11.2636 17.3337 12L17.3337 20C17.3337 20.7364 16.7367 21.3333 16.0003 21.3333Z" fill="#191919"/>
+</svg>
+
diff --git a/examples/quickcontrols/wearable/Wearable/icons/pressure-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/pressure-dark.svg
new file mode 100644
index 0000000000..270a8411a8
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/pressure-dark.svg
@@ -0,0 +1,9 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3ZM1 12C1 5.92487 5.92487 1 12 1C18.0751 1 23 5.92487 23 12C23 18.0751 18.0751 23 12 23C5.92487 23 1 18.0751 1 12Z" fill="#E6E6E6"/>
+<path d="M12 3V4.5" stroke="#E6E6E6" stroke-width="2" stroke-linecap="round"/>
+<path d="M4.5 13C5.05228 13 5.5 12.5523 5.5 12C5.5 11.4477 5.05228 11 4.5 11V13ZM3 13H4.5V11H3V13Z" fill="#E6E6E6"/>
+<path d="M13 19.5C13 18.9477 12.5523 18.5 12 18.5C11.4477 18.5 11 18.9477 11 19.5H13ZM13 21V19.5H11V21H13Z" fill="#E6E6E6"/>
+<path d="M19.5 11C18.9477 11 18.5 11.4477 18.5 12C18.5 12.5523 18.9477 13 19.5 13V11ZM21 11H19.5V13H21V11Z" fill="#E6E6E6"/>
+<circle cx="12" cy="12" r="2" fill="#E6E6E6"/>
+<path d="M16 12.75C16.4142 12.75 16.75 12.4142 16.75 12C16.75 11.5858 16.4142 11.25 16 11.25V12.75ZM12 12.75L16 12.75V11.25L12 11.25V12.75Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/pressure-light.svg b/examples/quickcontrols/wearable/Wearable/icons/pressure-light.svg
new file mode 100644
index 0000000000..b9a5773724
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/pressure-light.svg
@@ -0,0 +1,9 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3ZM1 12C1 5.92487 5.92487 1 12 1C18.0751 1 23 5.92487 23 12C23 18.0751 18.0751 23 12 23C5.92487 23 1 18.0751 1 12Z" fill="#0D0D0D"/>
+<path d="M12 3V4.5" stroke="#191919" stroke-width="2" stroke-linecap="round"/>
+<path d="M4.5 13C5.05228 13 5.5 12.5523 5.5 12C5.5 11.4477 5.05228 11 4.5 11V13ZM3 13H4.5V11H3V13Z" fill="#191919"/>
+<path d="M13 19.5C13 18.9477 12.5523 18.5 12 18.5C11.4477 18.5 11 18.9477 11 19.5H13ZM13 21V19.5H11V21H13Z" fill="#191919"/>
+<path d="M19.5 11C18.9477 11 18.5 11.4477 18.5 12C18.5 12.5523 18.9477 13 19.5 13V11ZM21 11H19.5V13H21V11Z" fill="#191919"/>
+<circle cx="12" cy="12" r="2" fill="#191919"/>
+<path d="M16 12.75C16.4142 12.75 16.75 12.4142 16.75 12C16.75 11.5858 16.4142 11.25 16 11.25V12.75ZM12 12.75L16 12.75V11.25L12 11.25V12.75Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/right-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/right-dark.svg
new file mode 100644
index 0000000000..842b3ea034
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/right-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M18 9.5C18 8.94772 17.5523 8.5 17 8.5H5C4.44771 8.5 4 8.94772 4 9.5V19.5C4 20.0523 4.44771 20.5 5 20.5C5.55229 20.5 6 20.0523 6 19.5V10.5003L17 10.5C17.5523 10.5 18 10.0523 18 9.5Z" fill="#2CDE85"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M11.2628 3.32428C10.8897 3.7314 10.9172 4.36397 11.3243 4.73716L16.5201 9.50001L11.3243 14.2629C10.9172 14.636 10.8897 15.2686 11.2628 15.6757C11.636 16.0828 12.2686 16.1104 12.6757 15.7372L18.6757 10.2372C18.8824 10.0477 19 9.78031 19 9.50001C19 9.2197 18.8824 8.95226 18.6757 8.76285L12.6757 3.26285C12.2686 2.88966 11.636 2.91716 11.2628 3.32428Z" fill="#2CDE85"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/right-light.svg b/examples/quickcontrols/wearable/Wearable/icons/right-light.svg
new file mode 100644
index 0000000000..bbde2d6031
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/right-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M18 9.5C18 8.94772 17.5523 8.5 17 8.5H5C4.44771 8.5 4 8.94772 4 9.5V19.5C4 20.0523 4.44771 20.5 5 20.5C5.55229 20.5 6 20.0523 6 19.5V10.5003L17 10.5C17.5523 10.5 18 10.0523 18 9.5Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M11.2628 3.32428C10.8897 3.7314 10.9172 4.36397 11.3243 4.73716L16.5201 9.50001L11.3243 14.2629C10.9172 14.636 10.8897 15.2686 11.2628 15.6757C11.636 16.0828 12.2686 16.1104 12.6757 15.7372L18.6757 10.2372C18.8824 10.0477 19 9.78031 19 9.50001C19 9.2197 18.8824 8.95226 18.6757 8.76285L12.6757 3.26285C12.2686 2.88966 11.636 2.91716 11.2628 3.32428Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/settings-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/settings-dark.svg
new file mode 100644
index 0000000000..ee707b771e
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/settings-dark.svg
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M11.7996 5.33329C11.7996 3.86053 12.9936 2.66663 14.4663 2.66663H17.496C18.9687 2.66663 20.1626 3.86053 20.1626 5.33329V6.12674C20.1635 6.12972 20.1663 6.13636 20.1739 6.14704C20.1909 6.17113 20.2251 6.20318 20.2767 6.22576C21.1357 6.60213 21.9351 7.08808 22.6572 7.66557C22.7011 7.70069 22.7455 7.71596 22.775 7.71972C22.788 7.72138 22.7951 7.72069 22.7982 7.72007L23.9147 7.11651C25.1584 6.44423 26.7106 6.85936 27.4526 8.06271L28.8989 10.408C29.7032 11.7124 29.2452 13.4248 27.8971 14.1535L26.6497 14.8278C26.6475 14.8301 26.6429 14.8358 26.6371 14.8477C26.624 14.8746 26.6124 14.9206 26.6178 14.9769C26.6499 15.3139 26.6663 15.6552 26.6663 16C26.6663 16.3447 26.6499 16.686 26.6178 17.0231C26.6124 17.0794 26.624 17.1253 26.6371 17.1522C26.6429 17.1642 26.6475 17.1699 26.6497 17.1721L27.897 17.8464C29.2452 18.5751 29.7031 20.2875 28.8988 21.5919L27.4526 23.9372C26.7105 25.1406 25.1583 25.5557 23.9147 24.8834L22.7982 24.2799C22.7951 24.2793 22.7879 24.2786 22.7749 24.2802C22.7455 24.284 22.7011 24.2993 22.6571 24.3344C21.935 24.9119 21.1357 25.3978 20.2767 25.7742C20.2251 25.7967 20.1909 25.8288 20.1739 25.8529C20.1663 25.8636 20.1635 25.8702 20.1626 25.8732V26.6666C20.1626 28.1394 18.9687 29.3333 17.496 29.3333H14.4663C12.9935 29.3333 11.7996 28.1394 11.7996 26.6666V25.8571C11.7988 25.8541 11.796 25.8475 11.7885 25.8369C11.7716 25.8129 11.7377 25.7809 11.6864 25.7583C10.8353 25.3816 10.0433 24.8972 9.32749 24.3227C9.28356 24.2874 9.23902 24.2721 9.2095 24.2683C9.19646 24.2666 9.18928 24.2673 9.18621 24.2679L8.04757 24.8834C6.80391 25.5557 5.25172 25.1405 4.50968 23.9372L3.06347 21.5919C2.2591 20.2875 2.71708 18.5751 4.0652 17.8464L5.34766 17.1531C5.34987 17.1509 5.35443 17.1452 5.36024 17.1333C5.37331 17.1065 5.38497 17.0607 5.37971 17.0045C5.34875 16.6735 5.33294 16.3384 5.33294 16C5.33294 15.6616 5.34874 15.3265 5.37971 14.9955C5.38497 14.9392 5.37331 14.8935 5.36023 14.8666C5.35443 14.8547 5.34987 14.8491 5.34765 14.8468L4.06513 14.1536C2.71701 13.4248 2.25903 11.7124 3.06339 10.408L4.50961 8.06272C5.25165 6.85937 6.80383 6.44425 8.0475 7.11652L9.18618 7.73205C9.18925 7.73267 9.19644 7.73336 9.20947 7.73168C9.23899 7.72788 9.28354 7.71251 9.32746 7.67726C10.0433 7.10275 10.8353 6.61834 11.6864 6.24167C11.7377 6.21899 11.7716 6.18701 11.7885 6.16304C11.796 6.15241 11.7988 6.1458 11.7996 6.14284V5.33329ZM11.8 6.14101C11.8001 6.141 11.8 6.14154 11.7997 6.14267ZM9.18436 7.73148C9.18439 7.73142 9.18499 7.73154 9.18603 7.73202ZM5.34619 14.8456C5.34622 14.8456 5.34669 14.8459 5.34755 14.8467ZM5.34619 17.1543C5.34618 17.1542 5.34661 17.1538 5.34755 17.1532ZM9.18439 24.2685C9.18436 24.2684 9.18487 24.2682 9.18606 24.2679ZM26.6511 17.1733C26.651 17.1733 26.6505 17.1729 26.6498 17.1722ZM26.6512 14.8266C26.6512 14.8267 26.6508 14.8271 26.6498 14.8277ZM22.8 7.71949C22.8001 7.71954 22.7996 7.71978 22.7984 7.72003ZM20.1623 6.1249C20.1623 6.12491 20.1625 6.12547 20.1626 6.12658ZM17.496 5.33329L14.4663 5.33329V6.14406C14.4663 7.32746 13.7029 8.2654 12.7657 8.68019C12.1284 8.96223 11.5343 9.3254 10.9966 9.75695C10.1842 10.409 8.97649 10.65 7.91912 10.0785L6.77942 9.46239L5.33321 11.8077L6.61674 12.5015C7.67141 13.0716 8.13151 14.2099 8.03478 15.2438C8.01153 15.4924 7.99961 15.7446 7.99961 16C7.99961 16.2553 8.01153 16.5075 8.03479 16.7561C8.13152 17.7901 7.67142 18.9283 6.61675 19.4984L5.33328 20.1922L6.77949 22.5375L7.91915 21.9215C8.97651 21.3499 10.1842 21.591 10.9966 22.243C11.5343 22.6745 12.1284 23.0377 12.7657 23.3197C13.7029 23.7345 14.4663 24.6725 14.4663 25.8559V26.6666H17.496V25.872C17.496 24.6843 18.2646 23.7443 19.2065 23.3316C19.8497 23.0498 20.4492 22.6855 20.9917 22.2518C21.8039 21.6022 23.0096 21.3628 24.0652 21.9335L25.1828 22.5375L26.629 20.1922L25.3806 19.5174C24.3242 18.9464 23.8644 17.8055 23.9631 16.7701C23.9872 16.517 23.9996 16.2601 23.9996 16C23.9996 15.7398 23.9872 15.483 23.9631 15.2299C23.8644 14.1945 24.3242 13.0536 25.3806 12.4825L26.629 11.8077L25.1828 9.46237L24.0653 10.0665C23.0097 10.6371 21.804 10.3978 20.9917 9.74817C20.4493 9.31439 19.8497 8.95008 19.2065 8.66828C18.2646 8.2556 17.496 7.31563 17.496 6.12796L17.496 5.33329Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0003 18.6666C17.4731 18.6666 18.667 17.4727 18.667 16C18.667 14.5272 17.4731 13.3333 16.0003 13.3333C14.5276 13.3333 13.3337 14.5272 13.3337 16C13.3337 17.4727 14.5276 18.6666 16.0003 18.6666ZM16.0003 21.3333C18.9458 21.3333 21.3337 18.9455 21.3337 16C21.3337 13.0544 18.9458 10.6666 16.0003 10.6666C13.0548 10.6666 10.667 13.0544 10.667 16C10.667 18.9455 13.0548 21.3333 16.0003 21.3333Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/settings-light.svg b/examples/quickcontrols/wearable/Wearable/icons/settings-light.svg
new file mode 100644
index 0000000000..bf17c3661a
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/settings-light.svg
@@ -0,0 +1,4 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M11.8 5.33268C11.8 3.85992 12.9939 2.66602 14.4667 2.66602H17.4963C18.9691 2.66602 20.163 3.85992 20.163 5.33268V6.12613C20.1639 6.12911 20.1667 6.13575 20.1742 6.14643C20.1913 6.17052 20.2255 6.20257 20.277 6.22515C21.1361 6.60152 21.9354 7.08747 22.6575 7.66496C22.7014 7.70007 22.7459 7.71535 22.7753 7.71911C22.7883 7.72077 22.7955 7.72008 22.7986 7.71945L23.9151 7.1159C25.1588 6.44362 26.711 6.85875 27.453 8.0621L28.8992 10.4074C29.7036 11.7118 29.2456 13.4242 27.8975 14.1529L26.6501 14.8272C26.6478 14.8295 26.6433 14.8351 26.6375 14.8471C26.6244 14.874 26.6128 14.9199 26.6181 14.9763C26.6502 15.3133 26.6666 15.6546 26.6666 15.9993C26.6666 16.3441 26.6502 16.6854 26.6181 17.0225C26.6127 17.0788 26.6244 17.1247 26.6375 17.1516C26.6433 17.1636 26.6478 17.1693 26.6501 17.1715L27.8974 17.8458C29.2455 18.5745 29.7035 20.2869 28.8991 21.5913L27.4529 23.9366C26.7109 25.1399 25.1587 25.5551 23.915 24.8828L22.7985 24.2793C22.7955 24.2786 22.7883 24.278 22.7753 24.2796C22.7459 24.2834 22.7014 24.2986 22.6575 24.3338C21.9354 24.9112 21.1361 25.3972 20.277 25.7735C20.2255 25.7961 20.1913 25.8282 20.1742 25.8523C20.1667 25.8629 20.1639 25.8696 20.163 25.8726V26.666C20.163 28.1388 18.9691 29.3327 17.4963 29.3327H14.4667C12.9939 29.3327 11.8 28.1388 11.8 26.666V25.8565C11.7991 25.8535 11.7964 25.8469 11.7889 25.8363C11.772 25.8123 11.738 25.7803 11.6868 25.7576C10.8357 25.381 10.0437 24.8966 9.32786 24.3221C9.28393 24.2868 9.23939 24.2715 9.20987 24.2677C9.19683 24.266 9.18964 24.2667 9.18658 24.2673L8.04794 24.8828C6.80427 25.5551 5.25209 25.1399 4.51005 23.9366L3.06383 21.5913C2.25947 20.2869 2.71744 18.5745 4.06556 17.8458L5.34802 17.1525C5.35024 17.1503 5.3548 17.1446 5.3606 17.1327C5.37368 17.1059 5.38534 17.0601 5.38008 17.0039C5.34911 16.6729 5.33331 16.3378 5.33331 15.9993C5.33331 15.6609 5.34911 15.3259 5.38008 14.9948C5.38534 14.9386 5.37367 14.8929 5.3606 14.866C5.35479 14.8541 5.35024 14.8485 5.34802 14.8462L4.06549 14.1529C2.71737 13.4242 2.2594 11.7118 3.06376 10.4074L4.50998 8.06211C5.25202 6.85876 6.8042 6.44364 8.04787 7.11591L9.18655 7.73144C9.18962 7.73206 9.1968 7.73275 9.20984 7.73107C9.23936 7.72727 9.2839 7.7119 9.32783 7.67665C10.0436 7.10214 10.8357 6.61773 11.6868 6.24106C11.738 6.21838 11.772 6.1864 11.7889 6.16243C11.7964 6.1518 11.7991 6.14519 11.8 6.14222V5.33268ZM11.8004 6.14039C11.8004 6.14039 11.8004 6.14093 11.8001 6.14206L11.8004 6.14039ZM9.18473 7.73087C9.18475 7.73081 9.18535 7.73093 9.1864 7.73141L9.18473 7.73087ZM5.34655 14.845C5.34658 14.845 5.34706 14.8453 5.34791 14.8461L5.34655 14.845ZM5.34655 17.1537C5.34655 17.1536 5.34698 17.1532 5.34791 17.1526L5.34655 17.1537ZM9.18476 24.2679C9.18472 24.2678 9.18524 24.2676 9.18643 24.2673L9.18476 24.2679ZM26.6515 17.1727C26.6514 17.1727 26.6509 17.1723 26.6501 17.1716L26.6515 17.1727ZM26.6515 14.826C26.6516 14.8261 26.6512 14.8265 26.6502 14.8271L26.6515 14.826ZM22.8004 7.71888C22.8005 7.71893 22.7999 7.71917 22.7987 7.71942L22.8004 7.71888ZM20.1626 6.12429C20.1627 6.12429 20.1629 6.12486 20.163 6.12597L20.1626 6.12429ZM17.4963 5.33268L14.4667 5.33268V6.14345C14.4667 7.32685 13.7033 8.26479 12.766 8.67958C12.1288 8.96162 11.5347 9.32479 10.997 9.75634C10.1846 10.4084 8.97685 10.6494 7.91949 10.0779L6.77979 9.46178L5.33357 11.8071L6.61711 12.5009C7.67178 13.071 8.13188 14.2092 8.03515 15.2432C8.0119 15.4918 7.99998 15.744 7.99998 15.9993C7.99998 16.2547 8.0119 16.5069 8.03515 16.7555C8.13189 17.7895 7.67179 18.9277 6.61711 19.4978L5.33364 20.1916L6.77986 22.5369L7.91951 21.9209C8.97688 21.3493 10.1846 21.5904 10.997 22.2424C11.5347 22.6739 12.1288 23.0371 12.766 23.3191C13.7033 23.7339 14.4667 24.6719 14.4667 25.8552V26.666H17.4963V25.8714C17.4963 24.6837 18.265 23.7437 19.2069 23.331C19.8501 23.0492 20.4496 22.6849 20.992 22.2512C21.8043 21.6016 23.01 21.3622 24.0656 21.9328L25.1831 22.5369L26.6293 20.1916L25.381 19.5168C24.3245 18.9457 23.8648 17.8049 23.9635 16.7695C23.9876 16.5164 24 16.2595 24 15.9993C24 15.7392 23.9876 15.4824 23.9635 15.2293C23.8648 14.1939 24.3245 13.053 25.381 12.4819L26.6294 11.8071L25.1832 9.46176L24.0656 10.0659C23.01 10.6365 21.8043 10.3972 20.992 9.74756C20.4496 9.31378 19.8501 8.94947 19.2069 8.66767C18.265 8.25499 17.4963 7.31501 17.4963 6.12735L17.4963 5.33268Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M16 18.666C17.4727 18.666 18.6666 17.4721 18.6666 15.9993C18.6666 14.5266 17.4727 13.3327 16 13.3327C14.5272 13.3327 13.3333 14.5266 13.3333 15.9993C13.3333 17.4721 14.5272 18.666 16 18.666ZM16 21.3327C18.9455 21.3327 21.3333 18.9449 21.3333 15.9993C21.3333 13.0538 18.9455 10.666 16 10.666C13.0544 10.666 10.6666 13.0538 10.6666 15.9993C10.6666 18.9449 13.0544 21.3327 16 21.3327Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/sun-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/sun-dark.svg
new file mode 100644
index 0000000000..adbfaa5067
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/sun-dark.svg
@@ -0,0 +1,4 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M20 26.6667C23.6819 26.6667 26.6667 23.6819 26.6667 20C26.6667 16.3181 23.6819 13.3333 20 13.3333C16.3181 13.3333 13.3333 16.3181 13.3333 20C13.3333 23.6819 16.3181 26.6667 20 26.6667ZM20 30C25.5228 30 30 25.5228 30 20C30 14.4772 25.5228 10 20 10C14.4772 10 10 14.4772 10 20C10 25.5228 14.4772 30 20 30Z" fill="#E6E6E6"/>
+<path d="M20.0003 8.33329C19.0798 8.33329 18.3337 7.5871 18.3337 6.66663V3.33329C18.3337 2.41282 19.0798 1.66663 20.0003 1.66663C20.9208 1.66663 21.667 2.41282 21.667 3.33329V6.66663C21.667 7.5871 20.9208 8.33329 20.0003 8.33329ZM30.5704 11.7632C29.9334 12.4002 28.9006 12.4002 28.2636 11.7632C27.6325 11.1322 27.6258 10.1111 28.2484 9.47175L30.6126 7.04431C31.2597 6.37985 32.3267 6.37752 32.9767 7.03915C33.6127 7.68651 33.6081 8.72551 32.9664 9.36723L30.5704 11.7632ZM33.3337 21.6666C32.4132 21.6666 31.667 20.9204 31.667 20C31.667 19.0795 32.4132 18.3333 33.3337 18.3333H36.667C37.5875 18.3333 38.3337 19.0795 38.3337 20C38.3337 20.9204 37.5875 21.6666 36.667 21.6666H33.3337ZM20.0003 38.3333C19.0798 38.3333 18.3337 37.5871 18.3337 36.6666V33.3333C18.3337 32.4128 19.0798 31.6666 20.0003 31.6666C20.9208 31.6666 21.667 32.4128 21.667 33.3333V36.6666C21.667 37.5871 20.9208 38.3333 20.0003 38.3333ZM11.7213 11.7362C11.0873 12.3476 10.0824 12.3452 9.45131 11.7307L7.04488 9.38764C6.38033 8.74058 6.37794 7.67356 7.03958 7.02352C7.68691 6.38755 8.72585 6.39215 9.36752 7.03382L11.7425 9.4088C12.3877 10.054 12.3781 11.1029 11.7213 11.7362ZM32.9582 32.9164C32.298 33.5997 31.2029 33.5994 30.543 32.9158L28.2303 30.5198C27.6169 29.8843 27.6258 28.8744 28.2504 28.2499C28.8749 27.6254 29.8846 27.6164 30.5201 28.2296L32.9165 30.5419C33.584 31.186 33.6027 32.2493 32.9582 32.9164ZM3.33366 21.6666C2.41318 21.6666 1.66699 20.9204 1.66699 20C1.66699 19.0795 2.41318 18.3333 3.33366 18.3333H6.66699C7.58747 18.3333 8.33366 19.0795 8.33366 20C8.33366 20.9204 7.58747 21.6666 6.66699 21.6666H3.33366ZM9.3962 32.9791C8.74205 33.6332 7.68001 33.6285 7.03167 32.9686C6.39139 32.3169 6.39602 31.2709 7.04204 30.6249L9.37458 28.2924C10.026 27.641 11.0761 27.6222 11.7503 28.25C12.4142 28.891 12.4235 29.9518 11.771 30.6043L9.3962 32.9791Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/sun-light.svg b/examples/quickcontrols/wearable/Wearable/icons/sun-light.svg
new file mode 100644
index 0000000000..2b1cc0636f
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/sun-light.svg
@@ -0,0 +1,4 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M20 26.6667C23.6819 26.6667 26.6667 23.6819 26.6667 20C26.6667 16.3181 23.6819 13.3333 20 13.3333C16.3181 13.3333 13.3333 16.3181 13.3333 20C13.3333 23.6819 16.3181 26.6667 20 26.6667ZM20 30C25.5228 30 30 25.5228 30 20C30 14.4772 25.5228 10 20 10C14.4772 10 10 14.4772 10 20C10 25.5228 14.4772 30 20 30Z" fill="#191919"/>
+<path d="M20 8.33268C19.0795 8.33268 18.3334 7.58649 18.3334 6.66601V3.33268C18.3334 2.41221 19.0795 1.66602 20 1.66602C20.9205 1.66602 21.6667 2.41221 21.6667 3.33268V6.66602C21.6667 7.58649 20.9205 8.33268 20 8.33268ZM30.5701 11.7626C29.9331 12.3996 28.9003 12.3996 28.2633 11.7626C27.6322 11.1315 27.6255 10.1105 28.2481 9.47114L30.6123 7.0437C31.2594 6.37924 32.3264 6.37691 32.9764 7.03854C33.6124 7.6859 33.6078 8.7249 32.9661 9.36662L30.5701 11.7626ZM33.3333 21.666C32.4129 21.666 31.6667 20.9198 31.6667 19.9993C31.6667 19.0789 32.4129 18.3327 33.3334 18.3327H36.6667C37.5872 18.3327 38.3334 19.0789 38.3334 19.9993C38.3334 20.9198 37.5872 21.666 36.6667 21.666H33.3333ZM20 38.3327C19.0795 38.3327 18.3334 37.5865 18.3334 36.666V33.3327C18.3334 32.4122 19.0795 31.666 20 31.666C20.9205 31.666 21.6667 32.4122 21.6667 33.3327V36.666C21.6667 37.5865 20.9205 38.3327 20 38.3327ZM11.721 11.7356C11.087 12.347 10.0821 12.3446 9.451 11.7301L7.04458 9.38703C6.38003 8.73997 6.37764 7.67295 7.03928 7.02291C7.68661 6.38694 8.72554 6.39154 9.36722 7.03321L11.7422 9.40819C12.3874 10.0534 12.3778 11.1023 11.721 11.7356ZM32.9579 32.9158C32.2977 33.5991 31.2026 33.5988 30.5427 32.9152L28.23 30.5192C27.6166 29.8836 27.6255 28.8738 28.2501 28.2493C28.8746 27.6248 29.8843 27.6157 30.5198 28.229L32.9162 30.5413C33.5837 31.1854 33.6024 32.2487 32.9579 32.9158ZM3.33335 21.666C2.41288 21.666 1.66669 20.9198 1.66669 19.9993C1.66669 19.0789 2.41288 18.3327 3.33335 18.3327H6.66669C7.58716 18.3327 8.33335 19.0789 8.33335 19.9993C8.33335 20.9198 7.58716 21.666 6.66669 21.666H3.33335ZM9.3959 32.9785C8.74174 33.6326 7.6797 33.6279 7.03136 32.968C6.39108 32.3163 6.39571 31.2703 7.04173 30.6243L9.37428 28.2918C10.0257 27.6404 11.0758 27.6216 11.75 28.2493C12.4139 28.8903 12.4232 29.9512 11.7707 30.6037L9.3959 32.9785Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/sunrise-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/sunrise-dark.svg
new file mode 100644
index 0000000000..2e3c4530d1
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/sunrise-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M21 19H3C2.44772 19 2 19.4477 2 20C2 20.5523 2.44772 21 3 21H21C21.5523 21 22 20.5523 22 20C22 19.4477 21.5523 19 21 19Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12.707 2.29289C12.3165 1.90237 11.6833 1.90237 11.2928 2.29289L8.29277 5.29289C7.90225 5.68342 7.90225 6.31658 8.29277 6.70711C8.6833 7.09763 9.31646 7.09763 9.70698 6.70711L11.0039 5.41024C11.0012 5.43981 10.9999 5.46975 10.9999 5.5V8C10.9999 8.55228 11.4476 9 11.9999 9C12.5522 9 12.9999 8.55228 12.9999 8V5.5C12.9999 5.46975 12.9985 5.43981 12.9959 5.41024L14.2928 6.70711C14.6833 7.09763 15.3165 7.09763 15.707 6.70711C16.0975 6.31658 16.0975 5.68342 15.707 5.29289L12.707 2.29289ZM12.0896 4.50397L11.9999 4.41421L11.9101 4.50397C11.9397 4.50134 11.9696 4.5 11.9999 4.5C12.0301 4.5 12.0601 4.50134 12.0896 4.50397ZM4.95391 10.3375L4.23752 9.60402C3.85644 9.21387 3.86011 8.58976 4.24576 8.20412C4.63463 7.81524 5.26512 7.81524 5.65399 8.20412L6.37895 8.92908C6.77504 9.32517 6.7694 9.96908 6.36642 10.3582C5.97001 10.7409 5.33893 10.7317 4.95391 10.3375ZM17.6624 8.95403L18.3959 8.23765C18.786 7.85657 19.4101 7.86024 19.7958 8.24588C20.1846 8.63476 20.1846 9.26524 19.7958 9.65412L19.0708 10.3791C18.6747 10.7752 18.0308 10.7695 17.6417 10.3665C17.259 9.97014 17.2682 9.33905 17.6624 8.95403ZM14.7749 12.825C15.5915 13.375 16.1915 14.1 16.5749 15H7.42487C7.8082 14.1 8.4082 13.375 9.22487 12.825C10.0415 12.275 10.9665 12 11.9999 12C13.0332 12 13.9582 12.275 14.7749 12.825ZM5.25998 15.0231C4.96299 16.087 5.8953 17 6.99987 17H16.9999C18.1044 17 19.0367 16.087 18.7398 15.0231C18.4278 13.9057 17.8354 12.9105 16.9624 12.0375C15.604 10.6792 13.9499 10 11.9999 10C10.0499 10 8.3957 10.6792 7.03737 12.0375C6.16436 12.9105 5.5719 13.9057 5.25998 15.0231Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/sunrise-light.svg b/examples/quickcontrols/wearable/Wearable/icons/sunrise-light.svg
new file mode 100644
index 0000000000..1c1967a6bc
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/sunrise-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M21 19H3C2.44772 19 2 19.4477 2 20C2 20.5523 2.44772 21 3 21H21C21.5523 21 22 20.5523 22 20C22 19.4477 21.5523 19 21 19Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12.707 2.29289C12.3165 1.90237 11.6833 1.90237 11.2928 2.29289L8.29277 5.29289C7.90225 5.68342 7.90225 6.31658 8.29277 6.70711C8.6833 7.09763 9.31646 7.09763 9.70698 6.70711L11.0039 5.41024C11.0012 5.43981 10.9999 5.46975 10.9999 5.5V8C10.9999 8.55228 11.4476 9 11.9999 9C12.5522 9 12.9999 8.55228 12.9999 8V5.5C12.9999 5.46975 12.9985 5.43981 12.9959 5.41024L14.2928 6.70711C14.6833 7.09763 15.3165 7.09763 15.707 6.70711C16.0975 6.31658 16.0975 5.68342 15.707 5.29289L12.707 2.29289ZM12.0896 4.50397L11.9999 4.41421L11.9101 4.50397C11.9397 4.50134 11.9696 4.5 11.9999 4.5C12.0301 4.5 12.0601 4.50134 12.0896 4.50397ZM4.95391 10.3375L4.23752 9.60402C3.85644 9.21387 3.86011 8.58976 4.24576 8.20412C4.63463 7.81524 5.26512 7.81524 5.65399 8.20412L6.37895 8.92908C6.77504 9.32517 6.7694 9.96908 6.36642 10.3582C5.97001 10.7409 5.33893 10.7317 4.95391 10.3375ZM17.6624 8.95403L18.3959 8.23765C18.786 7.85657 19.4101 7.86024 19.7958 8.24588C20.1846 8.63476 20.1846 9.26524 19.7958 9.65412L19.0708 10.3791C18.6747 10.7752 18.0308 10.7695 17.6417 10.3665C17.259 9.97014 17.2682 9.33905 17.6624 8.95403ZM14.7749 12.825C15.5915 13.375 16.1915 14.1 16.5749 15H7.42487C7.8082 14.1 8.4082 13.375 9.22487 12.825C10.0415 12.275 10.9665 12 11.9999 12C13.0332 12 13.9582 12.275 14.7749 12.825ZM5.25998 15.0231C4.96299 16.087 5.8953 17 6.99987 17H16.9999C18.1044 17 19.0367 16.087 18.7398 15.0231C18.4278 13.9057 17.8354 12.9105 16.9624 12.0375C15.604 10.6792 13.9499 10 11.9999 10C10.0499 10 8.3957 10.6792 7.03737 12.0375C6.16436 12.9105 5.5719 13.9057 5.25998 15.0231Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/sunset-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/sunset-dark.svg
new file mode 100644
index 0000000000..89524e397a
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/sunset-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M21 19H3C2.44772 19 2 19.4477 2 20C2 20.5523 2.44772 21 3 21H21C21.5523 21 22 20.5523 22 20C22 19.4477 21.5523 19 21 19Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M11.0039 5.58976C11.0012 5.56019 10.9999 5.53025 10.9999 5.5V3C10.9999 2.44772 11.4476 2 11.9999 2C12.5522 2 12.9999 2.44772 12.9999 3V5.5C12.9999 5.53025 12.9985 5.56019 12.9959 5.58976L14.2928 4.29289C14.6833 3.90237 15.3165 3.90237 15.707 4.29289C16.0975 4.68342 16.0975 5.31658 15.707 5.70711L12.707 8.70711C12.3165 9.09763 11.6833 9.09763 11.2928 8.70711L8.29277 5.70711C7.90225 5.31658 7.90225 4.68342 8.29277 4.29289C8.68329 3.90237 9.31646 3.90237 9.70698 4.29289L11.0039 5.58976ZM11.9101 6.49603L11.9999 6.58579L12.0896 6.49603C12.0601 6.49866 12.0301 6.5 11.9999 6.5C11.9696 6.5 11.9397 6.49866 11.9101 6.49603ZM4.95391 10.3375L4.23752 9.60403C3.85644 9.21388 3.86011 8.58977 4.24576 8.20413C4.63463 7.81525 5.26512 7.81525 5.65399 8.20413L6.37895 8.92909C6.77504 9.32518 6.7694 9.96909 6.36642 10.3582C5.97001 10.7409 5.33893 10.7317 4.95391 10.3375ZM17.6624 8.95404L18.3959 8.23766C18.786 7.85658 19.4101 7.86025 19.7958 8.24589C20.1846 8.63477 20.1846 9.26525 19.7958 9.65413L19.0708 10.3791C18.6747 10.7752 18.0308 10.7695 17.6417 10.3666C17.259 9.97015 17.2682 9.33906 17.6624 8.95404ZM14.7749 12.825C15.5915 13.375 16.1915 14.1 16.5749 15H7.42487C7.8082 14.1 8.4082 13.375 9.22487 12.825C10.0415 12.275 10.9665 12 11.9999 12C13.0332 12 13.9582 12.275 14.7749 12.825ZM5.25998 15.0231C4.96299 16.087 5.8953 17 6.99987 17H16.9999C18.1044 17 19.0367 16.087 18.7398 15.0231C18.4278 13.9057 17.8354 12.9105 16.9624 12.0375C15.604 10.6792 13.9499 10 11.9999 10C10.0499 10 8.3957 10.6792 7.03737 12.0375C6.16436 12.9105 5.5719 13.9057 5.25998 15.0231Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/sunset-light.svg b/examples/quickcontrols/wearable/Wearable/icons/sunset-light.svg
new file mode 100644
index 0000000000..e260fd1d5f
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/sunset-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M21 19H3C2.44772 19 2 19.4477 2 20C2 20.5523 2.44772 21 3 21H21C21.5523 21 22 20.5523 22 20C22 19.4477 21.5523 19 21 19Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M11.0039 5.58976C11.0012 5.56019 10.9999 5.53025 10.9999 5.5V3C10.9999 2.44772 11.4476 2 11.9999 2C12.5522 2 12.9999 2.44772 12.9999 3V5.5C12.9999 5.53025 12.9985 5.56019 12.9959 5.58976L14.2928 4.29289C14.6833 3.90237 15.3165 3.90237 15.707 4.29289C16.0975 4.68342 16.0975 5.31658 15.707 5.70711L12.707 8.70711C12.3165 9.09763 11.6833 9.09763 11.2928 8.70711L8.29277 5.70711C7.90225 5.31658 7.90225 4.68342 8.29277 4.29289C8.68329 3.90237 9.31646 3.90237 9.70698 4.29289L11.0039 5.58976ZM11.9101 6.49603L11.9999 6.58579L12.0896 6.49603C12.0601 6.49866 12.0301 6.5 11.9999 6.5C11.9696 6.5 11.9397 6.49866 11.9101 6.49603ZM4.95391 10.3375L4.23752 9.60403C3.85644 9.21388 3.86011 8.58977 4.24576 8.20413C4.63463 7.81525 5.26512 7.81525 5.65399 8.20413L6.37895 8.92909C6.77504 9.32518 6.7694 9.96909 6.36642 10.3582C5.97001 10.7409 5.33893 10.7317 4.95391 10.3375ZM17.6624 8.95404L18.3959 8.23766C18.786 7.85658 19.4101 7.86025 19.7958 8.24589C20.1846 8.63477 20.1846 9.26525 19.7958 9.65413L19.0708 10.3791C18.6747 10.7752 18.0308 10.7695 17.6417 10.3666C17.259 9.97015 17.2682 9.33906 17.6624 8.95404ZM14.7749 12.825C15.5915 13.375 16.1915 14.1 16.5749 15H7.42487C7.8082 14.1 8.4082 13.375 9.22487 12.825C10.0415 12.275 10.9665 12 11.9999 12C13.0332 12 13.9582 12.275 14.7749 12.825ZM5.25998 15.0231C4.96299 16.087 5.8953 17 6.99987 17H16.9999C18.1044 17 19.0367 16.087 18.7398 15.0231C18.4278 13.9057 17.8354 12.9105 16.9624 12.0375C15.604 10.6792 13.9499 10 11.9999 10C10.0499 10 8.3957 10.6792 7.03737 12.0375C6.16436 12.9105 5.5719 13.9057 5.25998 15.0231Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/thermometer-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/thermometer-dark.svg
new file mode 100644
index 0000000000..4a4888318d
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/thermometer-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M10 13V11H14V13C14.6667 13.6667 16 15.6 16 18C16 20.4 13.3333 21 12 21C10.6667 21 8 20.4 8 18C8 15.6 9.33333 13.6667 10 13Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 2C10.3431 2 9 3.34315 9 5V12.9997C7.78742 13.9103 7 15.3632 7 17C7 19.7614 9.23858 22 12 22C14.7614 22 17 19.7614 17 17C17 15.3632 16.2126 13.9103 15 12.9997V9V6V5C15 3.34315 13.6569 2 12 2ZM13 5C12.4477 5 12 5.44772 12 6C12 6.55228 12.4477 7 13 7V8C12.4477 8 12 8.44772 12 9C12 9.55228 12.4477 10 13 10V13C13 13.6288 13.2902 14.1899 13.744 14.5565L13.743 14.5579L13.7761 14.5819C13.7918 14.5941 13.8076 14.606 13.8237 14.6177C14.5407 15.1675 15 16.0301 15 17C15 18.6568 13.6569 20 12 20C10.3431 20 9 18.6568 9 17C9 16.0301 9.45933 15.1675 10.1763 14.6177C10.1924 14.606 10.2082 14.594 10.2239 14.5819L10.257 14.5579L10.256 14.5565C10.7098 14.1899 11 13.6288 11 13V5C11 4.44772 11.4477 4 12 4C12.5523 4 13 4.44772 13 5Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/thermometer-light.svg b/examples/quickcontrols/wearable/Wearable/icons/thermometer-light.svg
new file mode 100644
index 0000000000..6019435c79
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/thermometer-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M10 13V11H14V13C14.6667 13.6667 16 15.6 16 18C16 20.4 13.3333 21 12 21C10.6667 21 8 20.4 8 18C8 15.6 9.33333 13.6667 10 13Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 2C10.3431 2 9 3.34315 9 5V12.9997C7.78742 13.9103 7 15.3632 7 17C7 19.7614 9.23858 22 12 22C14.7614 22 17 19.7614 17 17C17 15.3632 16.2126 13.9103 15 12.9997V9V6V5C15 3.34315 13.6569 2 12 2ZM13 5C12.4477 5 12 5.44772 12 6C12 6.55228 12.4477 7 13 7V8C12.4477 8 12 8.44772 12 9C12 9.55228 12.4477 10 13 10V13C13 13.6288 13.2902 14.1899 13.744 14.5565L13.743 14.5579L13.7761 14.5819C13.7918 14.5941 13.8076 14.606 13.8237 14.6177C14.5407 15.1675 15 16.0301 15 17C15 18.6568 13.6569 20 12 20C10.3431 20 9 18.6568 9 17C9 16.0301 9.45933 15.1675 10.1763 14.6177C10.1924 14.606 10.2082 14.594 10.2239 14.5819L10.257 14.5579L10.256 14.5565C10.7098 14.1899 11 13.6288 11 13V5C11 4.44772 11.4477 4 12 4C12.5523 4 13 4.44772 13 5Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/uturnleft-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/uturnleft-dark.svg
new file mode 100644
index 0000000000..299dd053d1
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/uturnleft-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M19 20C19 15.5943 19 12.4999 19 9.99996C19 2.00003 6.99889 2.00001 7 9.99997C7.00035 12.5 7 15.5826 7 20" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M10 17L7 20L4 17" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/uturnleft-light.svg b/examples/quickcontrols/wearable/Wearable/icons/uturnleft-light.svg
new file mode 100644
index 0000000000..f7d3786a3c
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/uturnleft-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M19 20C19 15.5943 19 12.4999 19 9.99996C19 2.00003 6.99889 2.00001 7 9.99997C7.00035 12.5 7 15.5826 7 20" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M10 17L7 20L4 17" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/uturnright-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/uturnright-dark.svg
new file mode 100644
index 0000000000..35b44d1e7a
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/uturnright-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M5 20C5 15.5943 5 12.4999 5 9.99996C5 2.00003 17.0011 2.00001 17 9.99997C16.9997 12.5 17 15.5826 17 20" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M20 17L17 20L14 17" stroke="#2CDE85" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/uturnright-light.svg b/examples/quickcontrols/wearable/Wearable/icons/uturnright-light.svg
new file mode 100644
index 0000000000..5eda60955f
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/uturnright-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M5 20C5 15.5943 5 12.4999 5 9.99996C5 2.00003 17.0011 2.00001 17 9.99997C16.9997 12.5 17 15.5826 17 20" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M20 17L17 20L14 17" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-dark.svg
new file mode 100644
index 0000000000..a3ee0f2b08
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-dark.svg
@@ -0,0 +1,10 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M21.771 19.0705C21.207 15.8248 18.231 13.3334 14.667 13.3334C12.051 13.3334 9.66299 14.6819 8.40299 16.8305C5.17499 17.2305 2.66699 19.8934 2.66699 23.0477C2.66699 26.5105 5.63099 29.3334 9.26699 29.3334H21.267C24.243 29.3334 26.667 27.0248 26.667 24.1905C26.667 21.5162 24.519 19.3105 21.771 19.0705ZM21.267 27.0477H9.26699C6.95099 27.0477 5.06699 25.2534 5.06699 23.0477C5.06699 21.0591 6.63899 19.3562 8.71499 19.0934L9.90299 18.9448L10.491 17.9505C11.343 16.5105 12.939 15.6191 14.667 15.6191C16.995 15.6191 19.023 17.2648 19.407 19.4477L19.707 21.1848L21.555 21.3448C23.079 21.4819 24.267 22.7277 24.267 24.1905C24.267 25.7677 22.923 27.0477 21.267 27.0477Z" fill="#E6E6E6"/>
+<path d="M20 5.81111C19.3975 5.81111 18.9091 5.30992 18.9091 4.69168V2.45281C18.9091 1.83456 19.3975 1.33337 20 1.33337C20.6025 1.33337 21.0909 1.83456 21.0909 2.45281V4.69168C21.0909 5.30992 20.6025 5.81111 20 5.81111Z" fill="#E6E6E6"/>
+<path d="M26.9186 8.11486C26.5016 8.54271 25.8256 8.54271 25.4087 8.11486C24.9956 7.691 24.9912 7.0052 25.3988 6.57577L26.9462 4.94535C27.3698 4.49906 28.0682 4.4975 28.4936 4.94189C28.9099 5.3767 28.9069 6.07455 28.4869 6.50557L26.9186 8.11486Z" fill="#E6E6E6"/>
+<path d="M28.7273 14.7666C28.1248 14.7666 27.6364 14.2654 27.6364 13.6472C27.6364 13.0289 28.1248 12.5277 28.7273 12.5277H30.9091C31.5116 12.5277 32 13.0289 32 13.6472C32 14.2654 31.5116 14.7666 30.9091 14.7666H28.7273Z" fill="#E6E6E6"/>
+<path d="M14.581 8.09674C14.166 8.50739 13.5083 8.50575 13.0952 8.09304L11.5201 6.51928C11.0851 6.08467 11.0835 5.368 11.5166 4.93139C11.9403 4.50423 12.6203 4.50732 13.0403 4.93831L14.5949 6.53349C15.0172 6.96682 15.0109 7.67135 14.581 8.09674Z" fill="#E6E6E6"/>
+<path d="M28.4815 22.3226C28.0494 22.7816 27.3326 22.7814 26.9007 22.3222L25.3869 20.7129C24.9854 20.2861 24.9913 19.6078 25.4001 19.1883C25.8088 18.7688 26.4697 18.7628 26.8857 19.1747L28.4542 20.7278C28.8911 21.1604 28.9034 21.8745 28.4815 22.3226Z" fill="#E6E6E6"/>
+<path d="M9.09091 14.7666C8.48842 14.7666 8 14.2654 8 13.6472C8 13.0289 8.48842 12.5277 9.09091 12.5277H11.2727C11.8752 12.5277 12.3636 13.0289 12.3636 13.6472C12.3636 13.7854 12.3392 13.9179 12.2945 14.0401C11.7584 14.2234 11.2481 14.4677 10.7739 14.7666H9.09091Z" fill="#E6E6E6"/>
+<path d="M13.4553 13.7472C13.4548 13.7139 13.4545 13.6806 13.4545 13.6472C13.4545 9.93767 16.385 6.93055 20 6.93055C23.615 6.93055 26.5455 9.93767 26.5455 13.6472C26.5455 16.3322 25.0101 18.6492 22.7911 19.7242C22.4629 19.6302 22.1217 19.5658 21.7707 19.5343C21.6757 18.9735 21.5123 18.4346 21.2893 17.9262C23.0699 17.3619 24.3636 15.6596 24.3636 13.6472C24.3636 11.1742 22.41 9.16942 20 9.16942C17.59 9.16942 15.6364 11.1742 15.6364 13.6472C15.6364 13.6685 15.6365 13.6898 15.6368 13.7111C15.3194 13.6689 14.9955 13.6472 14.6667 13.6472C14.2561 13.6472 13.8511 13.6812 13.4553 13.7472Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-few-clouds-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-few-clouds-dark.svg
new file mode 100644
index 0000000000..2d1f8e680e
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-few-clouds-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M13.9086 8C12.541 8 11.3358 8.63698 10.5823 9.61164L9 8.38836C10.1243 6.93413 11.9088 6 13.9086 6C16.5884 6 18.8958 7.68436 19.7262 10.0561C21.6158 10.3753 23.0551 12.0196 23.0551 14C23.0551 15.0953 22.6135 16.0895 21.901 16.8108L20.4781 15.4054C20.8359 15.0431 21.0551 14.5481 21.0551 14C21.0551 12.8954 20.1596 12 19.0551 12H18.0551C18.0551 9.81787 16.2261 8 13.9086 8ZM11 10C13.673 10 15.905 11.8686 16.328 14.3029C18.389 14.4829 20 16.1371 20 18.1429C20 20.2686 18.182 22 15.95 22H6.95C4.223 22 2 19.8829 2 17.2857C2 14.92 3.881 12.9229 6.302 12.6229C7.247 11.0114 9.038 10 11 10ZM6.95 20.2857H15.95C17.192 20.2857 18.2 19.3257 18.2 18.1429C18.2 17.0457 17.309 16.1114 16.166 16.0086L14.78 15.8886L14.555 14.5857C14.267 12.9486 12.746 11.7143 11 11.7143C9.704 11.7143 8.507 12.3829 7.868 13.4629L7.427 14.2086L6.536 14.32C4.979 14.5171 3.8 15.7943 3.8 17.2857C3.8 18.94 5.213 20.2857 6.95 20.2857Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M9 3.3583C9.45187 3.3583 9.81818 2.98241 9.81818 2.51873V0.839576C9.81818 0.375891 9.45187 0 9 0C8.54813 0 8.18182 0.375891 8.18182 0.839576V2.51873C8.18182 2.98241 8.54813 3.3583 9 3.3583ZM3.81106 5.08612C4.12377 5.407 4.63078 5.407 4.94349 5.08611C5.25328 4.76822 5.2566 4.25387 4.95092 3.9318L3.79035 2.70898C3.47267 2.37426 2.94888 2.37309 2.62978 2.70638C2.31756 3.03249 2.31982 3.55588 2.63484 3.87914L3.81106 5.08612ZM3.27273 9.23534C3.27273 9.69902 2.90641 10.0749 2.45455 10.0749H0.818182C0.366312 10.0749 0 9.69902 0 9.23534C0 8.77165 0.366312 8.39576 0.818182 8.39576H2.45455C2.90641 8.39576 3.27273 8.77165 3.27273 9.23534ZM13.0642 5.07252C13.3755 5.38051 13.8688 5.37929 14.1786 5.06975L15.3599 3.88943C15.6862 3.56347 15.6874 3.02597 15.3625 2.69851C15.0448 2.37815 14.5347 2.38046 14.2197 2.7037L13.0538 3.90008C12.7371 4.22509 12.7418 4.75348 13.0642 5.07252ZM13.4005 7C12.5979 5.3394 10.9289 4.19788 9 4.19788C6.28878 4.19788 4.09091 6.45323 4.09091 9.23534C4.09091 11.2491 5.24243 12.9869 6.90665 13.7931C7.15281 13.7226 7.50001 13.5 7.50001 13.5C7.50001 13.5 7.86575 12.8259 8.03302 12.4446C6.69758 12.0214 5.72727 10.7447 5.72727 9.23534C5.72727 7.3806 7.19252 5.87703 9 5.87703C9.97093 5.87703 10.8431 6.3109 11.4425 7H13.4005Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-few-clouds-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-few-clouds-light.svg
new file mode 100644
index 0000000000..7eae3666c0
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-few-clouds-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M13.9086 8C12.541 8 11.3358 8.63698 10.5823 9.61164L9 8.38836C10.1243 6.93413 11.9088 6 13.9086 6C16.5884 6 18.8958 7.68436 19.7262 10.0561C21.6158 10.3753 23.0551 12.0196 23.0551 14C23.0551 15.0953 22.6135 16.0895 21.901 16.8108L20.4781 15.4054C20.8359 15.0431 21.0551 14.5481 21.0551 14C21.0551 12.8954 20.1596 12 19.0551 12H18.0551C18.0551 9.81787 16.2261 8 13.9086 8ZM11 10C13.673 10 15.905 11.8686 16.328 14.3029C18.389 14.4829 20 16.1371 20 18.1429C20 20.2686 18.182 22 15.95 22H6.95C4.223 22 2 19.8829 2 17.2857C2 14.92 3.881 12.9229 6.302 12.6229C7.247 11.0114 9.038 10 11 10ZM6.95 20.2857H15.95C17.192 20.2857 18.2 19.3257 18.2 18.1429C18.2 17.0457 17.309 16.1114 16.166 16.0086L14.78 15.8886L14.555 14.5857C14.267 12.9486 12.746 11.7143 11 11.7143C9.704 11.7143 8.507 12.3829 7.868 13.4629L7.427 14.2086L6.536 14.32C4.979 14.5171 3.8 15.7943 3.8 17.2857C3.8 18.94 5.213 20.2857 6.95 20.2857Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M9 3.3583C9.45187 3.3583 9.81818 2.98241 9.81818 2.51873V0.839576C9.81818 0.375891 9.45187 0 9 0C8.54813 0 8.18182 0.375891 8.18182 0.839576V2.51873C8.18182 2.98241 8.54813 3.3583 9 3.3583ZM3.81106 5.08612C4.12377 5.407 4.63078 5.407 4.94349 5.08611C5.25328 4.76822 5.2566 4.25387 4.95092 3.9318L3.79035 2.70898C3.47267 2.37426 2.94888 2.37309 2.62978 2.70638C2.31756 3.03249 2.31982 3.55588 2.63484 3.87914L3.81106 5.08612ZM3.27273 9.23534C3.27273 9.69902 2.90641 10.0749 2.45455 10.0749H0.818182C0.366312 10.0749 0 9.69902 0 9.23534C0 8.77165 0.366312 8.39576 0.818182 8.39576H2.45455C2.90641 8.39576 3.27273 8.77165 3.27273 9.23534ZM13.0642 5.07252C13.3755 5.38051 13.8688 5.37929 14.1786 5.06975L15.3599 3.88943C15.6862 3.56347 15.6874 3.02597 15.3625 2.69851C15.0448 2.37815 14.5347 2.38046 14.2197 2.7037L13.0538 3.90008C12.7371 4.22509 12.7418 4.75348 13.0642 5.07252ZM13.4005 7C12.5979 5.3394 10.9289 4.19788 9 4.19788C6.28878 4.19788 4.09091 6.45323 4.09091 9.23534C4.09091 11.2491 5.24243 12.9869 6.90665 13.7931C7.15281 13.7226 7.50001 13.5 7.50001 13.5C7.50001 13.5 7.86575 12.8259 8.03302 12.4446C6.69758 12.0214 5.72727 10.7447 5.72727 9.23534C5.72727 7.3806 7.19252 5.87703 9 5.87703C9.97093 5.87703 10.8431 6.3109 11.4425 7H13.4005Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-fog-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-fog-dark.svg
new file mode 100644
index 0000000000..9c8648157a
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-fog-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M3 13C2.44772 13 2 13.4477 2 14C2 14.5523 2.44772 15 3 15H21C21.5523 15 22 14.5523 22 14C22 13.4477 21.5523 13 21 13H3ZM15 16C14.4477 16 14 16.4477 14 17C14 17.5523 14.4477 18 15 18H21C21.5523 18 22 17.5523 22 17C22 16.4477 21.5523 16 21 16H15ZM9 17C9 16.4477 9.44772 16 10 16H12C12.5523 16 13 16.4477 13 17C13 17.5523 12.5523 18 12 18H10C9.44772 18 9 17.5523 9 17ZM19 19C18.4477 19 18 19.4477 18 20C18 20.5523 18.4477 21 19 21H21C21.5523 21 22 20.5523 22 20C22 19.4477 21.5523 19 21 19H19ZM2 17C2 16.4477 2.44772 16 3 16H7C7.55228 16 8 16.4477 8 17C8 17.5523 7.55228 18 7 18H3C2.44772 18 2 17.5523 2 17ZM3 19C2.44772 19 2 19.4477 2 20C2 20.5523 2.44772 21 3 21H16C16.5523 21 17 20.5523 17 20C17 19.4477 16.5523 19 16 19H3Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 3C14.673 3 16.905 4.86857 17.328 7.30286C19.389 7.48286 21 9.13714 21 11.1429C21 11.4373 20.9651 11.7242 20.8991 12H19.0126C19.1331 11.7375 19.2 11.4476 19.2 11.1429C19.2 10.0457 18.309 9.11143 17.166 9.00857L15.78 8.88857L15.555 7.58571C15.267 5.94857 13.746 4.71429 12 4.71429C10.704 4.71429 9.507 5.38286 8.868 6.46286L8.427 7.20857L7.536 7.32C5.979 7.51714 4.8 8.79429 4.8 10.2857C4.8 10.9226 5.00944 11.5138 5.36617 12H3.33939C3.12035 11.4683 3 10.89 3 10.2857C3 7.92 4.881 5.92286 7.302 5.62286C8.247 4.01143 10.038 3 12 3Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-fog-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-fog-light.svg
new file mode 100644
index 0000000000..cb3c3ff562
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-fog-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M3 13C2.44772 13 2 13.4477 2 14C2 14.5523 2.44772 15 3 15H21C21.5523 15 22 14.5523 22 14C22 13.4477 21.5523 13 21 13H3ZM15 16C14.4477 16 14 16.4477 14 17C14 17.5523 14.4477 18 15 18H21C21.5523 18 22 17.5523 22 17C22 16.4477 21.5523 16 21 16H15ZM9 17C9 16.4477 9.44772 16 10 16H12C12.5523 16 13 16.4477 13 17C13 17.5523 12.5523 18 12 18H10C9.44772 18 9 17.5523 9 17ZM19 19C18.4477 19 18 19.4477 18 20C18 20.5523 18.4477 21 19 21H21C21.5523 21 22 20.5523 22 20C22 19.4477 21.5523 19 21 19H19ZM2 17C2 16.4477 2.44772 16 3 16H7C7.55228 16 8 16.4477 8 17C8 17.5523 7.55228 18 7 18H3C2.44772 18 2 17.5523 2 17ZM3 19C2.44772 19 2 19.4477 2 20C2 20.5523 2.44772 21 3 21H16C16.5523 21 17 20.5523 17 20C17 19.4477 16.5523 19 16 19H3Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 3C14.673 3 16.905 4.86857 17.328 7.30286C19.389 7.48286 21 9.13714 21 11.1429C21 11.4373 20.9651 11.7242 20.8991 12H19.0126C19.1331 11.7375 19.2 11.4476 19.2 11.1429C19.2 10.0457 18.309 9.11143 17.166 9.00857L15.78 8.88857L15.555 7.58571C15.267 5.94857 13.746 4.71429 12 4.71429C10.704 4.71429 9.507 5.38286 8.868 6.46286L8.427 7.20857L7.536 7.32C5.979 7.51714 4.8 8.79429 4.8 10.2857C4.8 10.9226 5.00944 11.5138 5.36617 12H3.33939C3.12035 11.4683 3 10.89 3 10.2857C3 7.92 4.881 5.92286 7.302 5.62286C8.247 4.01143 10.038 3 12 3Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-haze-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-haze-dark.svg
new file mode 100644
index 0000000000..f2b8dff07c
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-haze-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M18 14C17.4477 14 17 14.4477 17 15C17 15.5523 17.4477 16 18 16H20C20.5523 16 21 15.5523 21 15C21 14.4477 20.5523 14 20 14H18ZM2 19C2 18.4477 2.44772 18 3 18H13C13.5523 18 14 18.4477 14 19C14 19.5523 13.5523 20 13 20H3C2.44772 20 2 19.5523 2 19ZM16 19C16 18.4477 16.4477 18 17 18H20C20.5523 18 21 18.4477 21 19C21 19.5523 20.5523 20 20 20H17C16.4477 20 16 19.5523 16 19ZM12 15C12 14.4477 12.4477 14 13 14H14C14.5523 14 15 14.4477 15 15C15 15.5523 14.5523 16 14 16H13C12.4477 16 12 15.5523 12 15ZM5 14C4.44772 14 4 14.4477 4 15C4 15.5523 4.44772 16 5 16H9C9.55228 16 10 15.5523 10 15C10 14.4477 9.55228 14 9 14H5Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M10 5C10 4.44772 10.4477 4 11 4H21C21.5523 4 22 4.44772 22 5C22 5.55228 21.5523 6 21 6H11C10.4477 6 10 5.55228 10 5ZM4 9C3.44772 9 3 9.44772 3 10C3 10.5523 3.44772 11 4 11H7C7.55228 11 8 10.5523 8 10C8 9.44772 7.55228 9 7 9H4ZM9 10C9 9.44772 9.44772 9 10 9H12C12.5523 9 13 9.44772 13 10C13 10.5523 12.5523 11 12 11H10C9.44772 11 9 10.5523 9 10ZM14 10C14 9.44772 14.4477 9 15 9H19C19.5523 9 20 9.44772 20 10C20 10.5523 19.5523 11 19 11H15C14.4477 11 14 10.5523 14 10ZM5 4C4.44772 4 4 4.44772 4 5C4 5.55228 4.44772 6 5 6H8C8.55228 6 9 5.55228 9 5C9 4.44772 8.55228 4 8 4H5Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-haze-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-haze-light.svg
new file mode 100644
index 0000000000..790d55db30
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-haze-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M18 14C17.4477 14 17 14.4477 17 15C17 15.5523 17.4477 16 18 16H20C20.5523 16 21 15.5523 21 15C21 14.4477 20.5523 14 20 14H18ZM2 19C2 18.4477 2.44772 18 3 18H13C13.5523 18 14 18.4477 14 19C14 19.5523 13.5523 20 13 20H3C2.44772 20 2 19.5523 2 19ZM16 19C16 18.4477 16.4477 18 17 18H20C20.5523 18 21 18.4477 21 19C21 19.5523 20.5523 20 20 20H17C16.4477 20 16 19.5523 16 19ZM12 15C12 14.4477 12.4477 14 13 14H14C14.5523 14 15 14.4477 15 15C15 15.5523 14.5523 16 14 16H13C12.4477 16 12 15.5523 12 15ZM5 14C4.44772 14 4 14.4477 4 15C4 15.5523 4.44772 16 5 16H9C9.55228 16 10 15.5523 10 15C10 14.4477 9.55228 14 9 14H5Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M10 5C10 4.44772 10.4477 4 11 4H21C21.5523 4 22 4.44772 22 5C22 5.55228 21.5523 6 21 6H11C10.4477 6 10 5.55228 10 5ZM4 9C3.44772 9 3 9.44772 3 10C3 10.5523 3.44772 11 4 11H7C7.55228 11 8 10.5523 8 10C8 9.44772 7.55228 9 7 9H4ZM9 10C9 9.44772 9.44772 9 10 9H12C12.5523 9 13 9.44772 13 10C13 10.5523 12.5523 11 12 11H10C9.44772 11 9 10.5523 9 10ZM14 10C14 9.44772 14.4477 9 15 9H19C19.5523 9 20 9.44772 20 10C20 10.5523 19.5523 11 19 11H15C14.4477 11 14 10.5523 14 10ZM5 4C4.44772 4 4 4.44772 4 5C4 5.55228 4.44772 6 5 6H8C8.55228 6 9 5.55228 9 5C9 4.44772 8.55228 4 8 4H5Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-icy-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-icy-dark.svg
new file mode 100644
index 0000000000..8dcc521d0b
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-icy-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5.5 14C5.5 13.7239 5.27614 13.5 5 13.5C4.72386 13.5 4.5 13.7239 4.5 14V14.5H4C3.72386 14.5 3.5 14.7239 3.5 15C3.5 15.2761 3.72386 15.5 4 15.5H4.5V16C4.5 16.2761 4.72386 16.5 5 16.5C5.27614 16.5 5.5 16.2761 5.5 16V15.5H6C6.27614 15.5 6.5 15.2761 6.5 15C6.5 14.7239 6.27614 14.5 6 14.5H5.5V14ZM19 17.5C19.2761 17.5 19.5 17.7239 19.5 18V18.5H20C20.2761 18.5 20.5 18.7239 20.5 19C20.5 19.2761 20.2761 19.5 20 19.5H19.5V20C19.5 20.2761 19.2761 20.5 19 20.5C18.7239 20.5 18.5 20.2761 18.5 20V19.5H18C17.7239 19.5 17.5 19.2761 17.5 19C17.5 18.7239 17.7239 18.5 18 18.5H18.5V18C18.5 17.7239 18.7239 17.5 19 17.5Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3C3.34315 3 2 4.34315 2 6V8.13641C2 10.57 4.74498 11.9909 6.73199 10.5859L8.07869 9.63373C8.20627 10.3839 8.55665 12.4117 8.93864 14.3371C9.14782 15.3914 9.37318 16.4495 9.58162 17.2576C9.68325 17.6517 9.79594 18.0463 9.9166 18.3664C9.9722 18.5139 10.0636 18.739 10.1992 18.9595C10.2643 19.0654 10.3939 19.2608 10.6025 19.452C10.791 19.6247 11.2706 20 12 20C12.7294 20 13.209 19.6247 13.3975 19.452C13.6061 19.2608 13.7357 19.0654 13.8008 18.9595C13.9364 18.739 14.0278 18.5139 14.0834 18.3664C14.2041 18.0463 14.3168 17.6517 14.4184 17.2576C14.6268 16.4495 14.8522 15.3914 15.0614 14.3371C15.0882 14.2016 15.115 14.0656 15.1415 13.9295C15.2309 14.0726 15.3664 14.259 15.5612 14.4364C15.8149 14.6675 16.3045 15 17.0001 15C17.6961 15 18.1857 14.6672 18.4393 14.4362C18.6879 14.2097 18.84 13.9684 18.9227 13.8216C19.091 13.5233 19.1969 13.2076 19.2632 12.9845C19.4049 12.5086 19.5136 11.9392 19.5941 11.4492C19.6775 10.9417 19.7428 10.4419 19.7869 10.0739C19.8091 9.88865 19.8263 9.73377 19.8381 9.62424C19.8439 9.56941 19.8485 9.52579 19.8516 9.49523L19.8552 9.45935L19.8562 9.44916L19.8565 9.44607L19.8566 9.44504L19.8567 9.44466C19.8567 9.44451 19.8567 9.44437 18.148 9.27752L19.8567 9.44436L19.993 8.0486L20.6548 7.70544C21.4812 7.27691 22 6.42355 22 5.49261C22 4.11598 20.884 3 19.5074 3H5ZM13.882 9H13.3052H12.0284H12.0161H11.9839H11.9716H10.6948H10.118C10.0563 9 10.0089 9.053 10.0191 9.11393C10.0387 9.2298 10.0726 9.4297 10.118 9.69352C10.1765 10.0329 10.2542 10.478 10.345 10.986L10.3475 11C10.5233 11.9833 10.7482 13.1998 10.9793 14.3415C11.1065 14.97 11.2356 15.5757 11.3594 16.1074C11.6172 17.2144 11.8522 18 12 18C12.1478 18 12.3828 17.2144 12.6406 16.1074C12.7644 15.5757 12.8935 14.97 13.0207 14.3415C13.2518 13.1998 13.4767 11.9833 13.6525 11L13.655 10.986C13.7458 10.478 13.8235 10.0329 13.882 9.69352C13.9274 9.4297 13.9613 9.2298 13.9809 9.11393C13.9911 9.053 13.9437 9 13.882 9ZM13.882 7H17.4266C17.5868 7 17.7447 6.9615 17.8869 6.88775L19.7341 5.92993C19.8975 5.84524 20 5.67659 20 5.49261C20 5.22055 19.7794 5 19.5074 5H5C4.44772 5 4 5.44772 4 6V8.13641C4 8.94759 4.91499 9.42124 5.57733 8.95292L7.5608 7.55047C8.06733 7.19232 8.67243 7 9.29279 7H10.118H13.882ZM10.3283 16.986C10.3283 16.9859 10.3294 16.9831 10.3318 16.9779C10.3295 16.9835 10.3283 16.9861 10.3283 16.986ZM13.6712 16.9848C13.671 16.9845 13.6709 16.9842 13.6707 16.9838L13.6682 16.9779C13.6706 16.9831 13.6717 16.9859 13.6717 16.986C13.6717 16.986 13.6715 16.9857 13.6712 16.9848ZM16.4005 11.25C16.5529 12.144 16.7612 13 17.0001 13C17.2389 13 17.4472 12.144 17.5997 11.25C17.6079 11.2017 17.616 11.1534 17.6239 11.105C17.7759 10.1742 17.8661 9.25 17.8661 9.25H16.1341C16.1341 9.25 16.2243 10.1743 16.3763 11.1051C16.3842 11.1534 16.3923 11.2018 16.4005 11.25Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-icy-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-icy-light.svg
new file mode 100644
index 0000000000..374f02d62b
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-icy-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5.5 14C5.5 13.7239 5.27614 13.5 5 13.5C4.72386 13.5 4.5 13.7239 4.5 14V14.5H4C3.72386 14.5 3.5 14.7239 3.5 15C3.5 15.2761 3.72386 15.5 4 15.5H4.5V16C4.5 16.2761 4.72386 16.5 5 16.5C5.27614 16.5 5.5 16.2761 5.5 16V15.5H6C6.27614 15.5 6.5 15.2761 6.5 15C6.5 14.7239 6.27614 14.5 6 14.5H5.5V14ZM19 17.5C19.2761 17.5 19.5 17.7239 19.5 18V18.5H20C20.2761 18.5 20.5 18.7239 20.5 19C20.5 19.2761 20.2761 19.5 20 19.5H19.5V20C19.5 20.2761 19.2761 20.5 19 20.5C18.7239 20.5 18.5 20.2761 18.5 20V19.5H18C17.7239 19.5 17.5 19.2761 17.5 19C17.5 18.7239 17.7239 18.5 18 18.5H18.5V18C18.5 17.7239 18.7239 17.5 19 17.5Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3C3.34315 3 2 4.34315 2 6V8.13641C2 10.57 4.74498 11.9909 6.73199 10.5859L8.07869 9.63373C8.20627 10.3839 8.55665 12.4117 8.93864 14.3371C9.14782 15.3914 9.37318 16.4495 9.58162 17.2576C9.68325 17.6517 9.79594 18.0463 9.9166 18.3664C9.9722 18.5139 10.0636 18.739 10.1992 18.9595C10.2643 19.0654 10.3939 19.2608 10.6025 19.452C10.791 19.6247 11.2706 20 12 20C12.7294 20 13.209 19.6247 13.3975 19.452C13.6061 19.2608 13.7357 19.0654 13.8008 18.9595C13.9364 18.739 14.0278 18.5139 14.0834 18.3664C14.2041 18.0463 14.3168 17.6517 14.4184 17.2576C14.6268 16.4495 14.8522 15.3914 15.0614 14.3371C15.0882 14.2016 15.115 14.0656 15.1415 13.9295C15.2309 14.0726 15.3664 14.259 15.5612 14.4364C15.8149 14.6675 16.3045 15 17.0001 15C17.6961 15 18.1857 14.6672 18.4393 14.4362C18.6879 14.2097 18.84 13.9684 18.9227 13.8216C19.091 13.5233 19.1969 13.2076 19.2632 12.9845C19.4049 12.5086 19.5136 11.9392 19.5941 11.4492C19.6775 10.9417 19.7428 10.4419 19.7869 10.0739C19.8091 9.88865 19.8263 9.73377 19.8381 9.62424C19.8439 9.56941 19.8485 9.52579 19.8516 9.49523L19.8552 9.45935L19.8562 9.44916L19.8565 9.44607L19.8566 9.44504L19.8567 9.44466C19.8567 9.44451 19.8567 9.44437 18.148 9.27752L19.8567 9.44436L19.993 8.0486L20.6548 7.70544C21.4812 7.27691 22 6.42355 22 5.49261C22 4.11598 20.884 3 19.5074 3H5ZM13.882 9H13.3052H12.0284H12.0161H11.9839H11.9716H10.6948H10.118C10.0563 9 10.0089 9.053 10.0191 9.11393C10.0387 9.2298 10.0726 9.4297 10.118 9.69352C10.1765 10.0329 10.2542 10.478 10.345 10.986L10.3475 11C10.5233 11.9833 10.7482 13.1998 10.9793 14.3415C11.1065 14.97 11.2356 15.5757 11.3594 16.1074C11.6172 17.2144 11.8522 18 12 18C12.1478 18 12.3828 17.2144 12.6406 16.1074C12.7644 15.5757 12.8935 14.97 13.0207 14.3415C13.2518 13.1998 13.4767 11.9833 13.6525 11L13.655 10.986C13.7458 10.478 13.8235 10.0329 13.882 9.69352C13.9274 9.4297 13.9613 9.2298 13.9809 9.11393C13.9911 9.053 13.9437 9 13.882 9ZM13.882 7H17.4266C17.5868 7 17.7447 6.9615 17.8869 6.88775L19.7341 5.92993C19.8975 5.84524 20 5.67659 20 5.49261C20 5.22055 19.7794 5 19.5074 5H5C4.44772 5 4 5.44772 4 6V8.13641C4 8.94759 4.91499 9.42124 5.57733 8.95292L7.5608 7.55047C8.06733 7.19232 8.67243 7 9.29279 7H10.118H13.882ZM10.3283 16.986C10.3283 16.9859 10.3294 16.9831 10.3318 16.9779C10.3295 16.9835 10.3283 16.9861 10.3283 16.986ZM13.6712 16.9848C13.671 16.9845 13.6709 16.9842 13.6707 16.9838L13.6682 16.9779C13.6706 16.9831 13.6717 16.9859 13.6717 16.986C13.6717 16.986 13.6715 16.9857 13.6712 16.9848ZM16.4005 11.25C16.5529 12.144 16.7612 13 17.0001 13C17.2389 13 17.4472 12.144 17.5997 11.25C17.6079 11.2017 17.616 11.1534 17.6239 11.105C17.7759 10.1742 17.8661 9.25 17.8661 9.25H16.1341C16.1341 9.25 16.2243 10.1743 16.3763 11.1051C16.3842 11.1534 16.3923 11.2018 16.4005 11.25Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-light.svg
new file mode 100644
index 0000000000..98a58847d9
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-light.svg
@@ -0,0 +1,10 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M21.7707 19.0711C21.2067 15.8254 18.2307 13.334 14.6667 13.334C12.0507 13.334 9.66269 14.6826 8.40269 16.8311C5.17469 17.2311 2.66669 19.894 2.66669 23.0483C2.66669 26.5111 5.63069 29.334 9.26669 29.334H21.2667C24.2427 29.334 26.6667 27.0254 26.6667 24.1911C26.6667 21.5168 24.5187 19.3111 21.7707 19.0711ZM21.2667 27.0483H9.26669C6.95069 27.0483 5.06669 25.254 5.06669 23.0483C5.06669 21.0597 6.63869 19.3568 8.71469 19.094L9.90269 18.9454L10.4907 17.9511C11.3427 16.5111 12.9387 15.6197 14.6667 15.6197C16.9947 15.6197 19.0227 17.2654 19.4067 19.4483L19.7067 21.1854L21.5547 21.3454C23.0787 21.4826 24.2667 22.7283 24.2667 24.1911C24.2667 25.7683 22.9227 27.0483 21.2667 27.0483Z" fill="#191919"/>
+<path d="M20 5.81172C19.3975 5.81172 18.9091 5.31053 18.9091 4.69229V2.45342C18.9091 1.83517 19.3975 1.33398 20 1.33398C20.6025 1.33398 21.0909 1.83517 21.0909 2.45342V4.69229C21.0909 5.31053 20.6025 5.81172 20 5.81172Z" fill="#191919"/>
+<path d="M26.9186 8.11547C26.5016 8.54332 25.8256 8.54332 25.4087 8.11547C24.9956 7.69161 24.9912 7.00581 25.3988 6.57638L26.9462 4.94596C27.3698 4.49967 28.0682 4.49811 28.4936 4.9425C28.9099 5.37731 28.9069 6.07516 28.4869 6.50618L26.9186 8.11547Z" fill="#191919"/>
+<path d="M28.7273 14.7672C28.1248 14.7672 27.6364 14.266 27.6364 13.6478C27.6364 13.0295 28.1248 12.5283 28.7273 12.5283H30.9091C31.5116 12.5283 32 13.0295 32 13.6478C32 14.266 31.5116 14.7672 30.9091 14.7672H28.7273Z" fill="#191919"/>
+<path d="M14.581 8.09735C14.166 8.508 13.5083 8.50637 13.0952 8.09365L11.5201 6.51989C11.0851 6.08528 11.0835 5.36861 11.5166 4.932C11.9403 4.50484 12.6203 4.50793 13.0403 4.93892L14.5949 6.5341C15.0172 6.96743 15.0109 7.67196 14.581 8.09735Z" fill="#191919"/>
+<path d="M28.4815 22.3232C28.0494 22.7822 27.3326 22.782 26.9007 22.3228L25.3869 20.7135C24.9854 20.2867 24.9913 19.6084 25.4001 19.1889C25.8088 18.7695 26.4697 18.7634 26.8857 19.1753L28.4542 20.7284C28.8911 21.161 28.9034 21.8752 28.4815 22.3232Z" fill="#191919"/>
+<path d="M9.09091 14.7672C8.48842 14.7672 8 14.266 8 13.6478C8 13.0295 8.48842 12.5283 9.09091 12.5283H11.2727C11.8752 12.5283 12.3636 13.0295 12.3636 13.6478C12.3636 13.786 12.3392 13.9185 12.2945 14.0407C11.7584 14.224 11.2481 14.4683 10.7739 14.7672H9.09091Z" fill="#191919"/>
+<path d="M13.4553 13.7479C13.4548 13.7146 13.4545 13.6812 13.4545 13.6478C13.4545 9.93828 16.385 6.93116 20 6.93116C23.615 6.93116 26.5455 9.93828 26.5455 13.6478C26.5455 16.3328 25.0101 18.6498 22.7911 19.7248C22.4629 19.6308 22.1217 19.5664 21.7707 19.5349C21.6757 18.9741 21.5123 18.4352 21.2893 17.9268C23.0699 17.3626 24.3636 15.6602 24.3636 13.6478C24.3636 11.1748 22.41 9.17003 20 9.17003C17.59 9.17003 15.6364 11.1748 15.6364 13.6478C15.6364 13.6691 15.6365 13.6904 15.6368 13.7117C15.3194 13.6695 14.9955 13.6478 14.6667 13.6478C14.2561 13.6478 13.8511 13.6819 13.4553 13.7479Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-overcast-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-overcast-dark.svg
new file mode 100644
index 0000000000..0f372b1e97
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-overcast-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M17.92 13.02C17.45 10.18 14.97 8 12 8C9.82 8 7.83 9.18 6.78 11.06C4.09 11.41 2 13.74 2 16.5C2 19.53 4.47 22 7.5 22H17.5C19.98 22 22 19.98 22 17.5C22 15.16 20.21 13.23 17.92 13.02ZM17.5 20H7.5C5.57 20 4 18.43 4 16.5C4 14.76 5.31 13.27 7.04 13.04L8.03 12.91L8.52 12.04C9.23 10.78 10.56 10 12 10C13.94 10 15.63 11.44 15.95 13.35L16.2 14.87L17.74 15.01C19.01 15.13 20 16.22 20 17.5C20 18.88 18.88 20 17.5 20Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5823 6.61164C11.3358 5.63698 12.541 5 13.9086 5C16.2261 5 18.0551 6.81787 18.0551 9H19.0551C20.1596 9 21.0551 9.89543 21.0551 11C21.0551 11.5481 20.8359 12.0431 20.4781 12.4054L21.901 13.8108C22.6135 13.0895 23.0551 12.0953 23.0551 11C23.0551 9.01958 21.6158 7.37531 19.7262 7.05607C18.8958 4.68436 16.5884 3 13.9086 3C11.9088 3 10.1243 3.93413 9 5.38836L10.5823 6.61164Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-overcast-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-overcast-light.svg
new file mode 100644
index 0000000000..d5d696e7cf
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-overcast-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M17.92 13.02C17.45 10.18 14.97 8 12 8C9.82 8 7.83 9.18 6.78 11.06C4.09 11.41 2 13.74 2 16.5C2 19.53 4.47 22 7.5 22H17.5C19.98 22 22 19.98 22 17.5C22 15.16 20.21 13.23 17.92 13.02ZM17.5 20H7.5C5.57 20 4 18.43 4 16.5C4 14.76 5.31 13.27 7.04 13.04L8.03 12.91L8.52 12.04C9.23 10.78 10.56 10 12 10C13.94 10 15.63 11.44 15.95 13.35L16.2 14.87L17.74 15.01C19.01 15.13 20 16.22 20 17.5C20 18.88 18.88 20 17.5 20Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5823 6.61164C11.3358 5.63698 12.541 5 13.9086 5C16.2261 5 18.0551 6.81787 18.0551 9H19.0551C20.1596 9 21.0551 9.89543 21.0551 11C21.0551 11.5481 20.8359 12.0431 20.4781 12.4054L21.901 13.8108C22.6135 13.0895 23.0551 12.0953 23.0551 11C23.0551 9.01958 21.6158 7.37531 19.7262 7.05607C18.8958 4.68436 16.5884 3 13.9086 3C11.9088 3 10.1243 3.93413 9 5.38836L10.5823 6.61164Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-showers-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-showers-dark.svg
new file mode 100644
index 0000000000..3f7935f4d6
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-showers-dark.svg
@@ -0,0 +1,6 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g opacity="0.95">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M7.50004 16.134C7.97834 15.8578 8.58993 16.0217 8.86607 16.5L10.3661 19.0981C10.6422 19.5764 10.4783 20.188 10 20.4641C9.52175 20.7403 8.91016 20.5764 8.63402 20.0981L7.13402 17.5C6.85788 17.0217 7.02175 16.4101 7.50004 16.134ZM11.5 16.134C11.9783 15.8578 12.5899 16.0217 12.8661 16.5L15.3661 20.8301C15.6422 21.3084 15.4783 21.92 15 22.1962C14.5218 22.4723 13.9102 22.3084 13.634 21.8301L11.134 17.5C10.8579 17.0217 11.0218 16.4101 11.5 16.134ZM16.8661 16.5C16.5899 16.0217 15.9783 15.8578 15.5 16.134C15.0218 16.4101 14.8579 17.0217 15.134 17.5L16.634 20.0981C16.9102 20.5764 17.5218 20.7403 18 20.4641C18.4783 20.188 18.6422 19.5764 18.3661 19.0981L16.8661 16.5Z" fill="#E6E6E6"/>
+<path d="M17.328 7.30286C16.905 4.86857 14.673 3 12 3C10.038 3 8.247 4.01143 7.302 5.62286C4.881 5.92286 3 7.92 3 10.2857C3 12.8829 5.223 15 7.95 15H16.95C19.182 15 21 13.2686 21 11.1429C21 9.13714 19.389 7.48286 17.328 7.30286ZM16.95 13.2857H7.95C6.213 13.2857 4.8 11.94 4.8 10.2857C4.8 8.79429 5.979 7.51714 7.536 7.32L8.427 7.20857L8.868 6.46286C9.507 5.38286 10.704 4.71429 12 4.71429C13.746 4.71429 15.267 5.94857 15.555 7.58571L15.78 8.88857L17.166 9.00857C18.309 9.11143 19.2 10.0457 19.2 11.1429C19.2 12.3257 18.192 13.2857 16.95 13.2857Z" fill="#E6E6E6"/>
+</g>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-showers-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-showers-light.svg
new file mode 100644
index 0000000000..5e7a5b3393
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-showers-light.svg
@@ -0,0 +1,6 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g opacity="0.95">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M7.50004 16.134C7.97834 15.8578 8.58993 16.0217 8.86607 16.5L10.3661 19.0981C10.6422 19.5764 10.4783 20.188 10 20.4641C9.52175 20.7403 8.91016 20.5764 8.63402 20.0981L7.13402 17.5C6.85788 17.0217 7.02175 16.4101 7.50004 16.134ZM11.5 16.134C11.9783 15.8578 12.5899 16.0217 12.8661 16.5L15.3661 20.8301C15.6422 21.3084 15.4783 21.92 15 22.1962C14.5218 22.4723 13.9102 22.3084 13.634 21.8301L11.134 17.5C10.8579 17.0217 11.0218 16.4101 11.5 16.134ZM16.8661 16.5C16.5899 16.0217 15.9783 15.8578 15.5 16.134C15.0218 16.4101 14.8579 17.0217 15.134 17.5L16.634 20.0981C16.9102 20.5764 17.5218 20.7403 18 20.4641C18.4783 20.188 18.6422 19.5764 18.3661 19.0981L16.8661 16.5Z" fill="#191919"/>
+<path d="M17.328 7.30286C16.905 4.86857 14.673 3 12 3C10.038 3 8.247 4.01143 7.302 5.62286C4.881 5.92286 3 7.92 3 10.2857C3 12.8829 5.223 15 7.95 15H16.95C19.182 15 21 13.2686 21 11.1429C21 9.13714 19.389 7.48286 17.328 7.30286ZM16.95 13.2857H7.95C6.213 13.2857 4.8 11.94 4.8 10.2857C4.8 8.79429 5.979 7.51714 7.536 7.32L8.427 7.20857L8.868 6.46286C9.507 5.38286 10.704 4.71429 12 4.71429C13.746 4.71429 15.267 5.94857 15.555 7.58571L15.78 8.88857L17.166 9.00857C18.309 9.11143 19.2 10.0457 19.2 11.1429C19.2 12.3257 18.192 13.2857 16.95 13.2857Z" fill="#191919"/>
+</g>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-showers-scattered-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-showers-scattered-dark.svg
new file mode 100644
index 0000000000..35e947d9d6
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-showers-scattered-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M7.5 19.5C7.08333 19.5 6.72917 19.3583 6.4375 19.075C6.14583 18.7917 6 18.4417 6 18.025C6 17.825 6.0375 17.6333 6.1125 17.45C6.1875 17.2667 6.3 17.1083 6.45 16.975L7.5 16L8.55 16.975C8.7 17.1083 8.8125 17.2667 8.8875 17.45C8.9625 17.6333 9 17.825 9 18.025C9 18.4417 8.85417 18.7917 8.5625 19.075C8.27083 19.3583 7.91667 19.5 7.5 19.5ZM16.4375 19.075C16.7292 19.3583 17.0833 19.5 17.5 19.5C17.9167 19.5 18.2708 19.3583 18.5625 19.075C18.8542 18.7917 19 18.4417 19 18.025C19 17.825 18.9625 17.6333 18.8875 17.45C18.8125 17.2667 18.7 17.1083 18.55 16.975L17.5 16L16.45 16.975C16.3 17.1083 16.1875 17.2667 16.1125 17.45C16.0375 17.6333 16 17.825 16 18.025C16 18.4417 16.1458 18.7917 16.4375 19.075ZM11.4375 20.075C11.7292 20.3583 12.0833 20.5 12.5 20.5C12.9167 20.5 13.2708 20.3583 13.5625 20.075C13.8542 19.7917 14 19.4417 14 19.025C14 18.825 13.9625 18.6333 13.8875 18.45C13.8125 18.2667 13.7 18.1083 13.55 17.975L12.5 17L11.45 17.975C11.3 18.1083 11.1875 18.2667 11.1125 18.45C11.0375 18.6333 11 18.825 11 19.025C11 19.4417 11.1458 19.7917 11.4375 20.075Z" fill="#E6E6E6"/>
+<path d="M17.328 7.30286C16.905 4.86857 14.673 3 12 3C10.038 3 8.247 4.01143 7.302 5.62286C4.881 5.92286 3 7.92 3 10.2857C3 12.8829 5.223 15 7.95 15H16.95C19.182 15 21 13.2686 21 11.1429C21 9.13714 19.389 7.48286 17.328 7.30286ZM16.95 13.2857H7.95C6.213 13.2857 4.8 11.94 4.8 10.2857C4.8 8.79429 5.979 7.51714 7.536 7.32L8.427 7.20857L8.868 6.46286C9.507 5.38286 10.704 4.71429 12 4.71429C13.746 4.71429 15.267 5.94857 15.555 7.58571L15.78 8.88857L17.166 9.00857C18.309 9.11143 19.2 10.0457 19.2 11.1429C19.2 12.3257 18.192 13.2857 16.95 13.2857Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-showers-scattered-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-showers-scattered-light.svg
new file mode 100644
index 0000000000..2d7e68ce9a
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-showers-scattered-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M7.5 19.5C7.08333 19.5 6.72917 19.3583 6.4375 19.075C6.14583 18.7917 6 18.4417 6 18.025C6 17.825 6.0375 17.6333 6.1125 17.45C6.1875 17.2667 6.3 17.1083 6.45 16.975L7.5 16L8.55 16.975C8.7 17.1083 8.8125 17.2667 8.8875 17.45C8.9625 17.6333 9 17.825 9 18.025C9 18.4417 8.85417 18.7917 8.5625 19.075C8.27083 19.3583 7.91667 19.5 7.5 19.5ZM16.4375 19.075C16.7292 19.3583 17.0833 19.5 17.5 19.5C17.9167 19.5 18.2708 19.3583 18.5625 19.075C18.8542 18.7917 19 18.4417 19 18.025C19 17.825 18.9625 17.6333 18.8875 17.45C18.8125 17.2667 18.7 17.1083 18.55 16.975L17.5 16L16.45 16.975C16.3 17.1083 16.1875 17.2667 16.1125 17.45C16.0375 17.6333 16 17.825 16 18.025C16 18.4417 16.1458 18.7917 16.4375 19.075ZM11.4375 20.075C11.7292 20.3583 12.0833 20.5 12.5 20.5C12.9167 20.5 13.2708 20.3583 13.5625 20.075C13.8542 19.7917 14 19.4417 14 19.025C14 18.825 13.9625 18.6333 13.8875 18.45C13.8125 18.2667 13.7 18.1083 13.55 17.975L12.5 17L11.45 17.975C11.3 18.1083 11.1875 18.2667 11.1125 18.45C11.0375 18.6333 11 18.825 11 19.025C11 19.4417 11.1458 19.7917 11.4375 20.075Z" fill="#191919"/>
+<path d="M17.328 7.30286C16.905 4.86857 14.673 3 12 3C10.038 3 8.247 4.01143 7.302 5.62286C4.881 5.92286 3 7.92 3 10.2857C3 12.8829 5.223 15 7.95 15H16.95C19.182 15 21 13.2686 21 11.1429C21 9.13714 19.389 7.48286 17.328 7.30286ZM16.95 13.2857H7.95C6.213 13.2857 4.8 11.94 4.8 10.2857C4.8 8.79429 5.979 7.51714 7.536 7.32L8.427 7.20857L8.868 6.46286C9.507 5.38286 10.704 4.71429 12 4.71429C13.746 4.71429 15.267 5.94857 15.555 7.58571L15.78 8.88857L17.166 9.00857C18.309 9.11143 19.2 10.0457 19.2 11.1429C19.2 12.3257 18.192 13.2857 16.95 13.2857Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-sleet-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-sleet-dark.svg
new file mode 100644
index 0000000000..b5de2d1189
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-sleet-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6.41421 16L5 17.4142L6.41421 18.8284L7.82843 17.4142L6.41421 16ZM11.866 16.5002C11.5899 16.0219 10.9783 15.858 10.5 16.1341C10.0217 16.4103 9.85785 17.0219 10.134 17.5002L12.634 21.8303C12.9101 22.3086 13.5217 22.4725 14 22.1963C14.4783 21.9202 14.6422 21.3086 14.366 20.8303L11.866 16.5002ZM7 20.4142L8.41421 19L9.82843 20.4142L8.41421 21.8284L7 20.4142ZM16.5 19.5C16.0833 19.5 15.7292 19.3583 15.4375 19.075C15.1458 18.7917 15 18.4417 15 18.025C15 17.825 15.0375 17.6333 15.1125 17.45C15.1875 17.2667 15.3 17.1083 15.45 16.975L16.5 16L17.55 16.975C17.7 17.1083 17.8125 17.2667 17.8875 17.45C17.9625 17.6333 18 17.825 18 18.025C18 18.4417 17.8542 18.7917 17.5625 19.075C17.2708 19.3583 16.9167 19.5 16.5 19.5Z" fill="#E6E6E6"/>
+<path d="M17.328 7.30286C16.905 4.86857 14.673 3 12 3C10.038 3 8.247 4.01143 7.302 5.62286C4.881 5.92286 3 7.92 3 10.2857C3 12.8829 5.223 15 7.95 15H16.95C19.182 15 21 13.2686 21 11.1429C21 9.13714 19.389 7.48286 17.328 7.30286ZM16.95 13.2857H7.95C6.213 13.2857 4.8 11.94 4.8 10.2857C4.8 8.79429 5.979 7.51714 7.536 7.32L8.427 7.20857L8.868 6.46286C9.507 5.38286 10.704 4.71429 12 4.71429C13.746 4.71429 15.267 5.94857 15.555 7.58571L15.78 8.88857L17.166 9.00857C18.309 9.11143 19.2 10.0457 19.2 11.1429C19.2 12.3257 18.192 13.2857 16.95 13.2857Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-sleet-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-sleet-light.svg
new file mode 100644
index 0000000000..a22fcf10af
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-sleet-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6.41421 16L5 17.4142L6.41421 18.8284L7.82843 17.4142L6.41421 16ZM11.866 16.5002C11.5899 16.0219 10.9783 15.858 10.5 16.1341C10.0217 16.4103 9.85785 17.0219 10.134 17.5002L12.634 21.8303C12.9101 22.3086 13.5217 22.4725 14 22.1963C14.4783 21.9202 14.6422 21.3086 14.366 20.8303L11.866 16.5002ZM7 20.4142L8.41421 19L9.82843 20.4142L8.41421 21.8284L7 20.4142ZM16.5 19.5C16.0833 19.5 15.7292 19.3583 15.4375 19.075C15.1458 18.7917 15 18.4417 15 18.025C15 17.825 15.0375 17.6333 15.1125 17.45C15.1875 17.2667 15.3 17.1083 15.45 16.975L16.5 16L17.55 16.975C17.7 17.1083 17.8125 17.2667 17.8875 17.45C17.9625 17.6333 18 17.825 18 18.025C18 18.4417 17.8542 18.7917 17.5625 19.075C17.2708 19.3583 16.9167 19.5 16.5 19.5Z" fill="#191919"/>
+<path d="M17.328 7.30286C16.905 4.86857 14.673 3 12 3C10.038 3 8.247 4.01143 7.302 5.62286C4.881 5.92286 3 7.92 3 10.2857C3 12.8829 5.223 15 7.95 15H16.95C19.182 15 21 13.2686 21 11.1429C21 9.13714 19.389 7.48286 17.328 7.30286ZM16.95 13.2857H7.95C6.213 13.2857 4.8 11.94 4.8 10.2857C4.8 8.79429 5.979 7.51714 7.536 7.32L8.427 7.20857L8.868 6.46286C9.507 5.38286 10.704 4.71429 12 4.71429C13.746 4.71429 15.267 5.94857 15.555 7.58571L15.78 8.88857L17.166 9.00857C18.309 9.11143 19.2 10.0457 19.2 11.1429C19.2 12.3257 18.192 13.2857 16.95 13.2857Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-snow-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-snow-dark.svg
new file mode 100644
index 0000000000..10eff6522b
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-snow-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5 17.4142L6.41421 16L7.82843 17.4142L6.41421 18.8284L5 17.4142ZM7 20.4142L8.41421 19L9.82843 20.4142L8.41421 21.8284L7 20.4142ZM15.4142 16L14 17.4142L15.4142 18.8284L16.8284 17.4142L15.4142 16ZM11 16.5C11.2761 16.5 11.5 16.7239 11.5 17V17.5H12C12.2761 17.5 12.5 17.7239 12.5 18C12.5 18.2761 12.2761 18.5 12 18.5H11.5V19C11.5 19.2761 11.2761 19.5 11 19.5C10.7239 19.5 10.5 19.2761 10.5 19V18.5H10C9.72386 18.5 9.5 18.2761 9.5 18C9.5 17.7239 9.72386 17.5 10 17.5H10.5V17C10.5 16.7239 10.7239 16.5 11 16.5ZM18 18.5C18.2761 18.5 18.5 18.7239 18.5 19V19.5H19C19.2761 19.5 19.5 19.7239 19.5 20C19.5 20.2761 19.2761 20.5 19 20.5H18.5V21C18.5 21.2761 18.2761 21.5 18 21.5C17.7239 21.5 17.5 21.2761 17.5 21V20.5H17C16.7239 20.5 16.5 20.2761 16.5 20C16.5 19.7239 16.7239 19.5 17 19.5H17.5V19C17.5 18.7239 17.7239 18.5 18 18.5Z" fill="#E6E6E6"/>
+<path d="M17.328 7.30286C16.905 4.86857 14.673 3 12 3C10.038 3 8.247 4.01143 7.302 5.62286C4.881 5.92286 3 7.92 3 10.2857C3 12.8829 5.223 15 7.95 15H16.95C19.182 15 21 13.2686 21 11.1429C21 9.13714 19.389 7.48286 17.328 7.30286ZM16.95 13.2857H7.95C6.213 13.2857 4.8 11.94 4.8 10.2857C4.8 8.79429 5.979 7.51714 7.536 7.32L8.427 7.20857L8.868 6.46286C9.507 5.38286 10.704 4.71429 12 4.71429C13.746 4.71429 15.267 5.94857 15.555 7.58571L15.78 8.88857L17.166 9.00857C18.309 9.11143 19.2 10.0457 19.2 11.1429C19.2 12.3257 18.192 13.2857 16.95 13.2857Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-snow-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-snow-light.svg
new file mode 100644
index 0000000000..2737265160
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-snow-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5 17.4142L6.41421 16L7.82843 17.4142L6.41421 18.8284L5 17.4142ZM7 20.4142L8.41421 19L9.82843 20.4142L8.41421 21.8284L7 20.4142ZM15.4142 16L14 17.4142L15.4142 18.8284L16.8284 17.4142L15.4142 16ZM11 16.5C11.2761 16.5 11.5 16.7239 11.5 17V17.5H12C12.2761 17.5 12.5 17.7239 12.5 18C12.5 18.2761 12.2761 18.5 12 18.5H11.5V19C11.5 19.2761 11.2761 19.5 11 19.5C10.7239 19.5 10.5 19.2761 10.5 19V18.5H10C9.72386 18.5 9.5 18.2761 9.5 18C9.5 17.7239 9.72386 17.5 10 17.5H10.5V17C10.5 16.7239 10.7239 16.5 11 16.5ZM18 18.5C18.2761 18.5 18.5 18.7239 18.5 19V19.5H19C19.2761 19.5 19.5 19.7239 19.5 20C19.5 20.2761 19.2761 20.5 19 20.5H18.5V21C18.5 21.2761 18.2761 21.5 18 21.5C17.7239 21.5 17.5 21.2761 17.5 21V20.5H17C16.7239 20.5 16.5 20.2761 16.5 20C16.5 19.7239 16.7239 19.5 17 19.5H17.5V19C17.5 18.7239 17.7239 18.5 18 18.5Z" fill="#191919"/>
+<path d="M17.328 7.30286C16.905 4.86857 14.673 3 12 3C10.038 3 8.247 4.01143 7.302 5.62286C4.881 5.92286 3 7.92 3 10.2857C3 12.8829 5.223 15 7.95 15H16.95C19.182 15 21 13.2686 21 11.1429C21 9.13714 19.389 7.48286 17.328 7.30286ZM16.95 13.2857H7.95C6.213 13.2857 4.8 11.94 4.8 10.2857C4.8 8.79429 5.979 7.51714 7.536 7.32L8.427 7.20857L8.868 6.46286C9.507 5.38286 10.704 4.71429 12 4.71429C13.746 4.71429 15.267 5.94857 15.555 7.58571L15.78 8.88857L17.166 9.00857C18.309 9.11143 19.2 10.0457 19.2 11.1429C19.2 12.3257 18.192 13.2857 16.95 13.2857Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-storm-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-storm-dark.svg
new file mode 100644
index 0000000000..52a5c3fc2a
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-storm-dark.svg
@@ -0,0 +1,6 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g opacity="0.95">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M13.1821 16.0299C13.2177 16.0548 13.2453 16.0934 13.2603 16.1395C13.2753 16.1855 13.2768 16.2364 13.2647 16.2837L12.6098 18.8438H13.8181C13.8536 18.8438 13.8884 18.8563 13.918 18.8797C13.9477 18.9032 13.971 18.9366 13.9851 18.9758C13.9992 19.015 14.0034 19.0584 13.9972 19.1004C13.9911 19.1425 13.9748 19.1815 13.9505 19.2126L11.0415 22.9311C11.0133 22.9671 10.9759 22.9906 10.9352 22.9977C10.8946 23.0048 10.8531 22.9952 10.8176 22.9703C10.7821 22.9455 10.7546 22.9069 10.7397 22.8608C10.7247 22.8148 10.7232 22.764 10.7353 22.7167L11.3902 20.1562H10.1819C10.1464 20.1562 10.1116 20.1437 10.082 20.1203C10.0523 20.0968 10.029 20.0634 10.0149 20.0242C10.0008 19.985 9.9966 19.9416 10.0028 19.8996C10.0089 19.8575 10.0252 19.8185 10.0495 19.7874L12.9585 16.0689C12.9866 16.0329 13.024 16.0095 13.0646 16.0023C13.1052 15.9952 13.1466 16.0047 13.1821 16.0295V16.0299ZM15.4375 19.075C15.7292 19.3583 16.0833 19.5 16.5 19.5C16.9167 19.5 17.2708 19.3583 17.5625 19.075C17.8542 18.7917 18 18.4417 18 18.025C18 17.825 17.9625 17.6333 17.8875 17.45C17.8125 17.2667 17.7 17.1083 17.55 16.975L16.5 16L15.45 16.975C15.3 17.1083 15.1875 17.2667 15.1125 17.45C15.0375 17.6333 15 17.825 15 18.025C15 18.4417 15.1458 18.7917 15.4375 19.075ZM7.5 19.5C7.08333 19.5 6.72917 19.3583 6.4375 19.075C6.14583 18.7917 6 18.4417 6 18.025C6 17.825 6.0375 17.6333 6.1125 17.45C6.1875 17.2667 6.3 17.1083 6.45 16.975L7.5 16L8.55 16.975C8.7 17.1083 8.8125 17.2667 8.8875 17.45C8.9625 17.6333 9 17.825 9 18.025C9 18.4417 8.85417 18.7917 8.5625 19.075C8.27083 19.3583 7.91667 19.5 7.5 19.5Z" fill="#E6E6E6"/>
+<path d="M17.92 6.02C17.45 3.18 14.97 1 12 1C9.82 1 7.83 2.18 6.78 4.06C4.09 4.41 2 6.74 2 9.5C2 12.53 4.47 15 7.5 15H17.5C19.98 15 22 12.98 22 10.5C22 8.16 20.21 6.23 17.92 6.02ZM17.5 13H7.5C5.57 13 4 11.43 4 9.5C4 7.76 5.31 6.27 7.04 6.04L8.03 5.91L8.52 5.04C9.23 3.78 10.56 3 12 3C13.94 3 15.63 4.44 15.95 6.35L16.2 7.87L17.74 8.01C19.01 8.13 20 9.22 20 10.5C20 11.88 18.88 13 17.5 13Z" fill="#E6E6E6"/>
+</g>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-storm-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-storm-light.svg
new file mode 100644
index 0000000000..a0d4bde293
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-storm-light.svg
@@ -0,0 +1,6 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g opacity="0.95">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M13.1821 16.0299C13.2177 16.0548 13.2453 16.0934 13.2603 16.1395C13.2753 16.1855 13.2768 16.2364 13.2647 16.2837L12.6098 18.8438H13.8181C13.8536 18.8438 13.8884 18.8563 13.918 18.8797C13.9477 18.9032 13.971 18.9366 13.9851 18.9758C13.9992 19.015 14.0034 19.0584 13.9972 19.1004C13.9911 19.1425 13.9748 19.1815 13.9505 19.2126L11.0415 22.9311C11.0133 22.9671 10.9759 22.9906 10.9352 22.9977C10.8946 23.0048 10.8531 22.9952 10.8176 22.9703C10.7821 22.9455 10.7546 22.9069 10.7397 22.8608C10.7247 22.8148 10.7232 22.764 10.7353 22.7167L11.3902 20.1562H10.1819C10.1464 20.1562 10.1116 20.1437 10.082 20.1203C10.0523 20.0968 10.029 20.0634 10.0149 20.0242C10.0008 19.985 9.9966 19.9416 10.0028 19.8996C10.0089 19.8575 10.0252 19.8185 10.0495 19.7874L12.9585 16.0689C12.9866 16.0329 13.024 16.0095 13.0646 16.0023C13.1052 15.9952 13.1466 16.0047 13.1821 16.0295V16.0299ZM15.4375 19.075C15.7292 19.3583 16.0833 19.5 16.5 19.5C16.9167 19.5 17.2708 19.3583 17.5625 19.075C17.8542 18.7917 18 18.4417 18 18.025C18 17.825 17.9625 17.6333 17.8875 17.45C17.8125 17.2667 17.7 17.1083 17.55 16.975L16.5 16L15.45 16.975C15.3 17.1083 15.1875 17.2667 15.1125 17.45C15.0375 17.6333 15 17.825 15 18.025C15 18.4417 15.1458 18.7917 15.4375 19.075ZM7.5 19.5C7.08333 19.5 6.72917 19.3583 6.4375 19.075C6.14583 18.7917 6 18.4417 6 18.025C6 17.825 6.0375 17.6333 6.1125 17.45C6.1875 17.2667 6.3 17.1083 6.45 16.975L7.5 16L8.55 16.975C8.7 17.1083 8.8125 17.2667 8.8875 17.45C8.9625 17.6333 9 17.825 9 18.025C9 18.4417 8.85417 18.7917 8.5625 19.075C8.27083 19.3583 7.91667 19.5 7.5 19.5Z" fill="#191919"/>
+<path d="M17.92 6.02C17.45 3.18 14.97 1 12 1C9.82 1 7.83 2.18 6.78 4.06C4.09 4.41 2 6.74 2 9.5C2 12.53 4.47 15 7.5 15H17.5C19.98 15 22 12.98 22 10.5C22 8.16 20.21 6.23 17.92 6.02ZM17.5 13H7.5C5.57 13 4 11.43 4 9.5C4 7.76 5.31 6.27 7.04 6.04L8.03 5.91L8.52 5.04C9.23 3.78 10.56 3 12 3C13.94 3 15.63 4.44 15.95 6.35L16.2 7.87L17.74 8.01C19.01 8.13 20 9.22 20 10.5C20 11.88 18.88 13 17.5 13Z" fill="#191919"/>
+</g>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-sunny-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-sunny-dark.svg
new file mode 100644
index 0000000000..18b469918e
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-sunny-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 16C14.2091 16 16 14.2091 16 12C16 9.79086 14.2091 8 12 8C9.79086 8 8 9.79086 8 12C8 14.2091 9.79086 16 12 16ZM12 18C15.3137 18 18 15.3137 18 12C18 8.68629 15.3137 6 12 6C8.68629 6 6 8.68629 6 12C6 15.3137 8.68629 18 12 18Z" fill="#E6E6E6"/>
+<path d="M12 5C11.4477 5 11 4.55228 11 4V2C11 1.44772 11.4477 1 12 1C12.5523 1 13 1.44772 13 2V4C13 4.55228 12.5523 5 12 5ZM18.342 7.05796C17.9598 7.44016 17.3402 7.44016 16.958 7.05796C16.5793 6.67932 16.5753 6.06669 16.9489 5.68308L18.3673 4.22661C18.7556 3.82793 19.3958 3.82654 19.7858 4.22351C20.1674 4.61193 20.1647 5.23533 19.7796 5.62036L18.342 7.05796ZM20 13C19.4477 13 19 12.5523 19 12C19 11.4477 19.4477 11 20 11H22C22.5523 11 23 11.4477 23 12C23 12.5523 22.5523 13 22 13H20ZM12 23C11.4477 23 11 22.5523 11 22V20C11 19.4477 11.4477 19 12 19C12.5523 19 13 19.4477 13 20V22C13 22.5523 12.5523 23 12 23ZM7.03261 7.04177C6.65218 7.40861 6.04923 7.40715 5.67059 7.03847L4.22673 5.63261C3.828 5.24437 3.82657 4.60416 4.22355 4.21414C4.61195 3.83256 5.23531 3.83531 5.62032 4.22032L7.0453 5.6453C7.43241 6.03241 7.42669 6.66177 7.03261 7.04177ZM19.7747 19.7498C19.3786 20.1598 18.7215 20.1597 18.3256 19.7495L16.938 18.3119C16.57 17.9306 16.5753 17.3247 16.9501 16.9499C17.3247 16.5753 17.9306 16.5698 18.3119 16.9378L19.7497 18.3252C20.1502 18.7116 20.1614 19.3496 19.7747 19.7498ZM2 13C1.44772 13 1 12.5523 1 12C1 11.4477 1.44772 11 2 11H4C4.55228 11 5 11.4477 5 12C5 12.5523 4.55228 13 4 13H2ZM5.63753 19.7875C5.24503 20.18 4.60781 20.1771 4.21881 19.7812C3.83464 19.3902 3.83742 18.7626 4.22503 18.375L5.62456 16.9754C6.01538 16.5846 6.64547 16.5734 7.05 16.95C7.44833 17.3346 7.45392 17.9711 7.06239 18.3626L5.63753 19.7875Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-sunny-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-sunny-light.svg
new file mode 100644
index 0000000000..227c104e31
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-sunny-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 16C14.2091 16 16 14.2091 16 12C16 9.79086 14.2091 8 12 8C9.79086 8 8 9.79086 8 12C8 14.2091 9.79086 16 12 16ZM12 18C15.3137 18 18 15.3137 18 12C18 8.68629 15.3137 6 12 6C8.68629 6 6 8.68629 6 12C6 15.3137 8.68629 18 12 18Z" fill="#191919"/>
+<path d="M12 5C11.4477 5 11 4.55228 11 4V2C11 1.44772 11.4477 1 12 1C12.5523 1 13 1.44772 13 2V4C13 4.55228 12.5523 5 12 5ZM18.342 7.05796C17.9598 7.44016 17.3402 7.44016 16.958 7.05796C16.5793 6.67932 16.5753 6.06669 16.9489 5.68308L18.3673 4.22661C18.7556 3.82793 19.3958 3.82654 19.7858 4.22351C20.1674 4.61193 20.1647 5.23533 19.7796 5.62036L18.342 7.05796ZM20 13C19.4477 13 19 12.5523 19 12C19 11.4477 19.4477 11 20 11H22C22.5523 11 23 11.4477 23 12C23 12.5523 22.5523 13 22 13H20ZM12 23C11.4477 23 11 22.5523 11 22V20C11 19.4477 11.4477 19 12 19C12.5523 19 13 19.4477 13 20V22C13 22.5523 12.5523 23 12 23ZM7.03261 7.04177C6.65218 7.40861 6.04923 7.40715 5.67059 7.03847L4.22673 5.63261C3.828 5.24437 3.82657 4.60416 4.22355 4.21414C4.61195 3.83256 5.23531 3.83531 5.62032 4.22032L7.0453 5.6453C7.43241 6.03241 7.42669 6.66177 7.03261 7.04177ZM19.7747 19.7498C19.3786 20.1598 18.7215 20.1597 18.3256 19.7495L16.938 18.3119C16.57 17.9306 16.5753 17.3247 16.9501 16.9499C17.3247 16.5753 17.9306 16.5698 18.3119 16.9378L19.7497 18.3252C20.1502 18.7116 20.1614 19.3496 19.7747 19.7498ZM2 13C1.44772 13 1 12.5523 1 12C1 11.4477 1.44772 11 2 11H4C4.55228 11 5 11.4477 5 12C5 12.5523 4.55228 13 4 13H2ZM5.63753 19.7875C5.24503 20.18 4.60781 20.1771 4.21881 19.7812C3.83464 19.3902 3.83742 18.7626 4.22503 18.375L5.62456 16.9754C6.01538 16.5846 6.64547 16.5734 7.05 16.95C7.44833 17.3346 7.45392 17.9711 7.06239 18.3626L5.63753 19.7875Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-sunny-very-few-clouds-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-sunny-very-few-clouds-dark.svg
new file mode 100644
index 0000000000..94a428d68b
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-sunny-very-few-clouds-dark.svg
@@ -0,0 +1,10 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16.328 14.3029C15.905 11.8686 13.673 10 11 10C9.038 10 7.247 11.0114 6.302 12.6229C3.881 12.9229 2 14.92 2 17.2857C2 19.8829 4.223 22 6.95 22H15.95C18.182 22 20 20.2686 20 18.1429C20 16.1371 18.389 14.4829 16.328 14.3029ZM15.95 20.2857H6.95C5.213 20.2857 3.8 18.94 3.8 17.2857C3.8 15.7943 4.979 14.5171 6.536 14.32L7.427 14.2086L7.868 13.4629C8.507 12.3829 9.704 11.7143 11 11.7143C12.746 11.7143 14.267 12.9486 14.555 14.5857L14.78 15.8886L16.166 16.0086C17.309 16.1114 18.2 17.0457 18.2 18.1429C18.2 19.3257 17.192 20.2857 15.95 20.2857Z" fill="#E6E6E6"/>
+<path d="M15 4.3583C14.5481 4.3583 14.1818 3.98241 14.1818 3.51873V1.83958C14.1818 1.37589 14.5481 1 15 1C15.4519 1 15.8182 1.37589 15.8182 1.83958V3.51873C15.8182 3.98241 15.4519 4.3583 15 4.3583Z" fill="#E6E6E6"/>
+<path d="M20.1889 6.08612C19.8762 6.40701 19.3692 6.40701 19.0565 6.08611C18.7467 5.76822 18.7434 5.25387 19.0491 4.9318L20.2096 3.70898C20.5273 3.37426 21.0511 3.37309 21.3702 3.70638C21.6824 4.03249 21.6802 4.55588 21.3652 4.87914L20.1889 6.08612Z" fill="#E6E6E6"/>
+<path d="M21.5455 11.0749C21.0936 11.0749 20.7273 10.699 20.7273 10.2353C20.7273 9.77165 21.0936 9.39576 21.5455 9.39576H23.1818C23.6337 9.39576 24 9.77165 24 10.2353C24 10.699 23.6337 11.0749 23.1818 11.0749H21.5455Z" fill="#E6E6E6"/>
+<path d="M10.9358 6.07252C10.6245 6.38051 10.1312 6.37929 9.82139 6.06975L8.64006 4.88943C8.31382 4.56347 8.31265 4.02597 8.63745 3.69851C8.95523 3.37815 9.46526 3.38046 9.78026 3.7037L10.9462 4.90008C11.2629 5.22509 11.2582 5.75348 10.9358 6.07252Z" fill="#E6E6E6"/>
+<path d="M21.3611 16.7419C21.0371 17.0861 20.4994 17.086 20.1755 16.7416L19.0402 15.5346C18.7391 15.2145 18.7434 14.7058 19.05 14.3912C19.3566 14.0766 19.8523 14.0721 20.1643 14.381L21.3407 15.5458C21.6684 15.8702 21.6775 16.4059 21.3611 16.7419Z" fill="#E6E6E6"/>
+<path d="M6.81818 11.0749C6.36631 11.0749 6 10.699 6 10.2353C6 9.77165 6.36631 9.39576 6.81818 9.39576H8.45455C8.90641 9.39576 9.27273 9.77165 9.27273 10.2353C9.27273 10.339 9.2544 10.4384 9.22089 10.5301C8.81878 10.6675 8.43606 10.8507 8.08042 11.0749H6.81818Z" fill="#E6E6E6"/>
+<path d="M10.0914 10.3104C10.0911 10.2854 10.0909 10.2604 10.0909 10.2353C10.0909 7.45323 12.2888 5.19788 15 5.19788C17.7112 5.19788 19.9091 7.45323 19.9091 10.2353C19.9091 12.2491 18.7576 13.9869 17.0934 14.7931C16.8472 14.7226 16.5913 14.6743 16.328 14.6507C16.2568 14.2301 16.1343 13.8259 15.967 13.4446C17.3024 13.0214 18.2727 11.7447 18.2727 10.2353C18.2727 8.3806 16.8075 6.87703 15 6.87703C13.1925 6.87703 11.7273 8.3806 11.7273 10.2353C11.7273 10.2513 11.7274 10.2673 11.7276 10.2833C11.4895 10.2517 11.2466 10.2353 11 10.2353C10.6921 10.2353 10.3883 10.2609 10.0914 10.3104Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-sunny-very-few-clouds-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-sunny-very-few-clouds-light.svg
new file mode 100644
index 0000000000..e91d2cf75e
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-sunny-very-few-clouds-light.svg
@@ -0,0 +1,10 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16.328 14.3029C15.905 11.8686 13.673 10 11 10C9.038 10 7.247 11.0114 6.302 12.6229C3.881 12.9229 2 14.92 2 17.2857C2 19.8829 4.223 22 6.95 22H15.95C18.182 22 20 20.2686 20 18.1429C20 16.1371 18.389 14.4829 16.328 14.3029ZM15.95 20.2857H6.95C5.213 20.2857 3.8 18.94 3.8 17.2857C3.8 15.7943 4.979 14.5171 6.536 14.32L7.427 14.2086L7.868 13.4629C8.507 12.3829 9.704 11.7143 11 11.7143C12.746 11.7143 14.267 12.9486 14.555 14.5857L14.78 15.8886L16.166 16.0086C17.309 16.1114 18.2 17.0457 18.2 18.1429C18.2 19.3257 17.192 20.2857 15.95 20.2857Z" fill="#191919"/>
+<path d="M15 4.3583C14.5481 4.3583 14.1818 3.98241 14.1818 3.51873V1.83958C14.1818 1.37589 14.5481 1 15 1C15.4519 1 15.8182 1.37589 15.8182 1.83958V3.51873C15.8182 3.98241 15.4519 4.3583 15 4.3583Z" fill="#191919"/>
+<path d="M20.1889 6.08612C19.8762 6.40701 19.3692 6.40701 19.0565 6.08611C18.7467 5.76822 18.7434 5.25387 19.0491 4.9318L20.2096 3.70898C20.5273 3.37426 21.0511 3.37309 21.3702 3.70638C21.6824 4.03249 21.6802 4.55588 21.3652 4.87914L20.1889 6.08612Z" fill="#191919"/>
+<path d="M21.5455 11.0749C21.0936 11.0749 20.7273 10.699 20.7273 10.2353C20.7273 9.77165 21.0936 9.39576 21.5455 9.39576H23.1818C23.6337 9.39576 24 9.77165 24 10.2353C24 10.699 23.6337 11.0749 23.1818 11.0749H21.5455Z" fill="#191919"/>
+<path d="M10.9358 6.07252C10.6245 6.38051 10.1312 6.37929 9.82139 6.06975L8.64006 4.88943C8.31382 4.56347 8.31265 4.02597 8.63745 3.69851C8.95523 3.37815 9.46526 3.38046 9.78026 3.7037L10.9462 4.90008C11.2629 5.22509 11.2582 5.75348 10.9358 6.07252Z" fill="#191919"/>
+<path d="M21.3611 16.7419C21.0371 17.0861 20.4994 17.086 20.1755 16.7416L19.0402 15.5346C18.7391 15.2145 18.7434 14.7058 19.05 14.3912C19.3566 14.0766 19.8523 14.0721 20.1643 14.381L21.3407 15.5458C21.6684 15.8702 21.6775 16.4059 21.3611 16.7419Z" fill="#191919"/>
+<path d="M6.81818 11.0749C6.36631 11.0749 6 10.699 6 10.2353C6 9.77165 6.36631 9.39576 6.81818 9.39576H8.45455C8.90641 9.39576 9.27273 9.77165 9.27273 10.2353C9.27273 10.339 9.2544 10.4384 9.22089 10.5301C8.81878 10.6675 8.43606 10.8507 8.08042 11.0749H6.81818Z" fill="#191919"/>
+<path d="M10.0914 10.3104C10.0911 10.2854 10.0909 10.2604 10.0909 10.2353C10.0909 7.45323 12.2888 5.19788 15 5.19788C17.7112 5.19788 19.9091 7.45323 19.9091 10.2353C19.9091 12.2491 18.7576 13.9869 17.0934 14.7931C16.8472 14.7226 16.5913 14.6743 16.328 14.6507C16.2568 14.2301 16.1343 13.8259 15.967 13.4446C17.3024 13.0214 18.2727 11.7447 18.2727 10.2353C18.2727 8.3806 16.8075 6.87703 15 6.87703C13.1925 6.87703 11.7273 8.3806 11.7273 10.2353C11.7273 10.2513 11.7274 10.2673 11.7276 10.2833C11.4895 10.2517 11.2466 10.2353 11 10.2353C10.6921 10.2353 10.3883 10.2609 10.0914 10.3104Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-thundershower-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-thundershower-dark.svg
new file mode 100644
index 0000000000..1e1134d562
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-thundershower-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M9.26026 16.1394C9.24527 16.0933 9.21773 16.0547 9.18214 16.0299C9.14664 16.0051 9.10522 15.9951 9.06462 16.0023C9.02402 16.0094 8.98662 16.0329 8.95851 16.0688L6.04953 19.7874C6.02517 19.8185 6.00891 19.8575 6.00275 19.8995C5.9966 19.9416 6.00082 19.9849 6.0149 20.0242C6.02897 20.0634 6.05229 20.0968 6.08196 20.1202C6.11164 20.1437 6.14637 20.1562 6.18188 20.1562H7.3902L6.73532 22.7167C6.7232 22.764 6.72474 22.8148 6.73968 22.8608C6.75462 22.9069 6.78208 22.9455 6.8176 22.9703C6.85311 22.9952 6.89457 23.0048 6.93523 22.9977C6.97589 22.9906 7.01334 22.9671 7.04149 22.9311L9.95047 19.2125C9.97483 19.1815 9.99109 19.1425 9.99725 19.1004C10.0034 19.0583 9.99918 19.015 9.9851 18.9758C9.97103 18.9366 9.94771 18.9032 9.91804 18.8797C9.88836 18.8562 9.85363 18.8437 9.81812 18.8438H8.6098L9.26468 16.2836C9.27681 16.2363 9.27525 16.1855 9.26026 16.1394ZM15.2603 16.1395C15.2453 16.0934 15.2177 16.0548 15.1821 16.0299V16.0295C15.1466 16.0047 15.1052 15.9952 15.0646 16.0023C15.024 16.0095 14.9866 16.0329 14.9585 16.0689L12.0495 19.7874C12.0252 19.8185 12.0089 19.8575 12.0028 19.8996C11.9966 19.9416 12.0008 19.985 12.0149 20.0242C12.029 20.0634 12.0523 20.0968 12.082 20.1203C12.1116 20.1437 12.1464 20.1562 12.1819 20.1562H13.3902L12.7353 22.7167C12.7232 22.764 12.7247 22.8148 12.7397 22.8608C12.7546 22.9069 12.7821 22.9455 12.8176 22.9703C12.8531 22.9952 12.8946 23.0048 12.9352 22.9977C12.9759 22.9906 13.0133 22.9671 13.0415 22.9311L15.9505 19.2126C15.9748 19.1815 15.9911 19.1425 15.9972 19.1004C16.0034 19.0584 15.9992 19.015 15.9851 18.9758C15.971 18.9366 15.9477 18.9032 15.918 18.8797C15.8884 18.8563 15.8536 18.8438 15.8181 18.8438H14.6098L15.2647 16.2837C15.2768 16.2364 15.2753 16.1855 15.2603 16.1395Z" fill="#E6E6E6"/>
+<path d="M17.92 6.02C17.45 3.18 14.97 1 12 1C9.82 1 7.83 2.18 6.78 4.06C4.09 4.41 2 6.74 2 9.5C2 12.53 4.47 15 7.5 15H17.5C19.98 15 22 12.98 22 10.5C22 8.16 20.21 6.23 17.92 6.02ZM17.5 13H7.5C5.57 13 4 11.43 4 9.5C4 7.76 5.31 6.27 7.04 6.04L8.03 5.91L8.52 5.04C9.23 3.78 10.56 3 12 3C13.94 3 15.63 4.44 15.95 6.35L16.2 7.87L17.74 8.01C19.01 8.13 20 9.22 20 10.5C20 11.88 18.88 13 17.5 13Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/weather-thundershower-light.svg b/examples/quickcontrols/wearable/Wearable/icons/weather-thundershower-light.svg
new file mode 100644
index 0000000000..8f5af95c62
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/weather-thundershower-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M9.26026 16.1394C9.24527 16.0933 9.21773 16.0547 9.18214 16.0299C9.14664 16.0051 9.10522 15.9951 9.06462 16.0023C9.02402 16.0094 8.98662 16.0329 8.95851 16.0688L6.04953 19.7874C6.02517 19.8185 6.00891 19.8575 6.00275 19.8995C5.9966 19.9416 6.00082 19.9849 6.0149 20.0242C6.02897 20.0634 6.05229 20.0968 6.08196 20.1202C6.11164 20.1437 6.14637 20.1562 6.18188 20.1562H7.3902L6.73532 22.7167C6.7232 22.764 6.72474 22.8148 6.73968 22.8608C6.75462 22.9069 6.78208 22.9455 6.8176 22.9703C6.85311 22.9952 6.89457 23.0048 6.93523 22.9977C6.97589 22.9906 7.01334 22.9671 7.04149 22.9311L9.95047 19.2125C9.97483 19.1815 9.99109 19.1425 9.99725 19.1004C10.0034 19.0583 9.99918 19.015 9.9851 18.9758C9.97103 18.9366 9.94771 18.9032 9.91804 18.8797C9.88836 18.8562 9.85363 18.8437 9.81812 18.8438H8.6098L9.26468 16.2836C9.27681 16.2363 9.27525 16.1855 9.26026 16.1394ZM15.2603 16.1395C15.2453 16.0934 15.2177 16.0548 15.1821 16.0299V16.0295C15.1466 16.0047 15.1052 15.9952 15.0646 16.0023C15.024 16.0095 14.9866 16.0329 14.9585 16.0689L12.0495 19.7874C12.0252 19.8185 12.0089 19.8575 12.0028 19.8996C11.9966 19.9416 12.0008 19.985 12.0149 20.0242C12.029 20.0634 12.0523 20.0968 12.082 20.1203C12.1116 20.1437 12.1464 20.1562 12.1819 20.1562H13.3902L12.7353 22.7167C12.7232 22.764 12.7247 22.8148 12.7397 22.8608C12.7546 22.9069 12.7821 22.9455 12.8176 22.9703C12.8531 22.9952 12.8946 23.0048 12.9352 22.9977C12.9759 22.9906 13.0133 22.9671 13.0415 22.9311L15.9505 19.2126C15.9748 19.1815 15.9911 19.1425 15.9972 19.1004C16.0034 19.0584 15.9992 19.015 15.9851 18.9758C15.971 18.9366 15.9477 18.9032 15.918 18.8797C15.8884 18.8563 15.8536 18.8438 15.8181 18.8438H14.6098L15.2647 16.2837C15.2768 16.2364 15.2753 16.1855 15.2603 16.1395Z" fill="#191919"/>
+<path d="M17.92 6.02C17.45 3.18 14.97 1 12 1C9.82 1 7.83 2.18 6.78 4.06C4.09 4.41 2 6.74 2 9.5C2 12.53 4.47 15 7.5 15H17.5C19.98 15 22 12.98 22 10.5C22 8.16 20.21 6.23 17.92 6.02ZM17.5 13H7.5C5.57 13 4 11.43 4 9.5C4 7.76 5.31 6.27 7.04 6.04L8.03 5.91L8.52 5.04C9.23 3.78 10.56 3 12 3C13.94 3 15.63 4.44 15.95 6.35L16.2 7.87L17.74 8.01C19.01 8.13 20 9.22 20 10.5C20 11.88 18.88 13 17.5 13Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/wifi-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/wifi-dark.svg
new file mode 100644
index 0000000000..b6227d7072
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/wifi-dark.svg
@@ -0,0 +1,3 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M18.6445 3.74032C19.1541 3.52925 19.7406 3.64592 20.1306 4.03591L27.6306 11.5359C28.1631 12.0684 28.1631 12.9319 27.6306 13.4644L21.0948 20.0002L27.6306 26.5359C28.1631 27.0685 28.1631 27.9319 27.6306 28.4644L20.1306 35.9644C19.7406 36.3544 19.1541 36.4711 18.6445 36.26C18.135 36.0489 17.8027 35.5517 17.8027 35.0002V23.2923L12.6306 28.4644C12.0981 28.9969 11.2347 28.9969 10.7021 28.4644C10.1696 27.9319 10.1696 27.0685 10.7021 26.5359L17.2379 20.0002L10.7021 13.4644C10.1696 12.9319 10.1696 12.0684 10.7021 11.5359C11.2347 11.0034 12.0981 11.0034 12.6306 11.5359L17.8027 16.708V5.00015C17.8027 4.44861 18.135 3.95138 18.6445 3.74032ZM20.53 23.2923L24.7379 27.5002L20.53 31.708V23.2923ZM20.53 16.708V8.29226L24.7379 12.5002L20.53 16.708Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/wifi-light.svg b/examples/quickcontrols/wearable/Wearable/icons/wifi-light.svg
new file mode 100644
index 0000000000..1d90443cf4
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/wifi-light.svg
@@ -0,0 +1,4 @@
+<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M23.3328 33.3294C23.3328 35.1704 21.8404 36.6628 19.9995 36.6628C18.1585 36.6628 16.6661 35.1704 16.6661 33.3294C16.6661 31.4885 18.1585 29.9961 19.9995 29.9961C21.8404 29.9961 23.3328 31.4885 23.3328 33.3294Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4.47026 16.2138C8.77419 12.2 14.2971 9.99935 20.0002 9.99935C25.7033 9.99935 31.2262 12.2 35.5302 16.2138C36.2033 16.8416 37.258 16.8048 37.8858 16.1317C38.5135 15.4585 38.4768 14.4039 37.8036 13.7761C32.9001 9.20312 26.5709 6.66602 20.0002 6.66602C13.4295 6.66602 7.10028 9.20312 2.19683 13.7761C1.52366 14.4039 1.48688 15.4585 2.11467 16.1317C2.74246 16.8048 3.7971 16.8416 4.47026 16.2138ZM20.0015 18.3314C16.2134 18.3314 12.4961 19.9013 9.50517 22.8513C8.84983 23.4977 7.79458 23.4905 7.1482 22.8351C6.50182 22.1798 6.50908 21.1245 7.16442 20.4782C10.7246 16.9666 15.2636 14.9981 20.0015 14.9981C24.7393 14.9981 29.2783 16.9666 32.8385 20.4782C33.4938 21.1245 33.5011 22.1798 32.8547 22.8351C32.2083 23.4905 31.1531 23.4977 30.4978 22.8513C27.5068 19.9013 23.7895 18.3314 20.0015 18.3314ZM20.0006 26.6635C18.5723 26.6635 17.172 27.1273 15.9939 28.0018C15.2548 28.5504 14.2108 28.3959 13.6622 27.6568C13.1136 26.9177 13.2681 25.8738 14.0072 25.3252C15.7505 24.0313 17.8451 23.3301 20.0006 23.3301C22.156 23.3301 24.2506 24.0313 25.9939 25.3252C26.733 25.8738 26.8875 26.9177 26.3389 27.6568C25.7903 28.3959 24.7464 28.5504 24.0072 28.0018C22.8291 27.1273 21.4288 26.6635 20.0006 26.6635Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/wind-dark.svg b/examples/quickcontrols/wearable/Wearable/icons/wind-dark.svg
new file mode 100644
index 0000000000..95464c4ec0
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/wind-dark.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M3 14C2.44772 14 2 14.4477 2 15C2 15.5523 2.44772 16 3 16H12C13.1046 16 14 16.8954 14 18C14 19.1046 13.1046 20 12 20C10.8954 20 10 19.1046 10 18C10 17.4477 9.55228 17 9 17C8.44772 17 8 17.4477 8 18C8 20.2091 9.79086 22 12 22C14.2091 22 16 20.2091 16 18C16 15.7909 14.2091 14 12 14H3Z" fill="#E6E6E6"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 6C12 6.55229 12.4477 7 13 7C13.5523 7 14 6.55228 14 6C14 4.89543 14.8954 4 16 4C17.1046 4 18 4.89543 18 6C18 7.10457 17.1046 8 16 8H3C2.44772 8 2 8.44772 2 9C2 9.55228 2.44772 10 3 10H16C18.2091 10 20 8.20914 20 6C20 3.79086 18.2091 2 16 2C13.7909 2 12 3.79086 12 6ZM3 11C2.44772 11 2 11.4477 2 12C2 12.5523 2.44772 13 3 13H18C19.1046 13 20 13.8954 20 15C20 16.1046 19.1046 17 18 17C17.4477 17 17 17.4477 17 18C17 18.5523 17.4477 19 18 19C20.2091 19 22 17.2091 22 15C22 12.7909 20.2091 11 18 11H3Z" fill="#E6E6E6"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/wind-light.svg b/examples/quickcontrols/wearable/Wearable/icons/wind-light.svg
new file mode 100644
index 0000000000..7146903e27
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/wind-light.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M3 14C2.44772 14 2 14.4477 2 15C2 15.5523 2.44772 16 3 16H12C13.1046 16 14 16.8954 14 18C14 19.1046 13.1046 20 12 20C10.8954 20 10 19.1046 10 18C10 17.4477 9.55228 17 9 17C8.44772 17 8 17.4477 8 18C8 20.2091 9.79086 22 12 22C14.2091 22 16 20.2091 16 18C16 15.7909 14.2091 14 12 14H3Z" fill="#191919"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12 6C12 6.55229 12.4477 7 13 7C13.5523 7 14 6.55228 14 6C14 4.89543 14.8954 4 16 4C17.1046 4 18 4.89543 18 6C18 7.10457 17.1046 8 16 8H3C2.44772 8 2 8.44772 2 9C2 9.55228 2.44772 10 3 10H16C18.2091 10 20 8.20914 20 6C20 3.79086 18.2091 2 16 2C13.7909 2 12 3.79086 12 6ZM3 11C2.44772 11 2 11.4477 2 12C2 12.5523 2.44772 13 3 13H18C19.1046 13 20 13.8954 20 15C20 16.1046 19.1046 17 18 17C17.4477 17 17 17.4477 17 18C17 18.5523 17.4477 19 18 19C20.2091 19 22 17.2091 22 15C22 12.7909 20.2091 11 18 11H3Z" fill="#191919"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/icons/yellowsun.svg b/examples/quickcontrols/wearable/Wearable/icons/yellowsun.svg
new file mode 100644
index 0000000000..bf57285374
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/icons/yellowsun.svg
@@ -0,0 +1,4 @@
+<svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M28 38C33.5228 38 38 33.5228 38 28C38 22.4772 33.5228 18 28 18C22.4772 18 18 22.4772 18 28C18 33.5228 22.4772 38 28 38ZM28 43C36.2843 43 43 36.2843 43 28C43 19.7157 36.2843 13 28 13C19.7157 13 13 19.7157 13 28C13 36.2843 19.7157 43 28 43Z" fill="#FFD600"/>
+<path d="M27.5 10.5C26.3954 10.5 25.5 9.60457 25.5 8.5V2.5C25.5 1.39543 26.3954 0.5 27.5 0.5H28.5C29.6046 0.5 30.5 1.39543 30.5 2.5V8.5C30.5 9.60457 29.6046 10.5 28.5 10.5H27.5ZM43.5392 15.9608C42.7582 16.7418 41.4918 16.7418 40.7108 15.9608L40.0831 15.3331C39.3094 14.5594 39.3011 13.3074 40.0646 12.5235L44.261 8.21475C45.0437 7.41107 46.3342 7.40825 47.1204 8.2085L47.7982 8.8984C48.5675 9.6814 48.5619 10.9381 47.7857 11.7143L43.5392 15.9608ZM47.5 30.5C46.3954 30.5 45.5 29.6046 45.5 28.5V27.5C45.5 26.3954 46.3954 25.5 47.5 25.5H53.5C54.6046 25.5 55.5 26.3954 55.5 27.5V28.5C55.5 29.6046 54.6046 30.5 53.5 30.5H47.5ZM27.5 55.5C26.3954 55.5 25.5 54.6046 25.5 53.5V47.5C25.5 46.3954 26.3954 45.5 27.5 45.5H28.5C29.6046 45.5 30.5 46.3954 30.5 47.5V53.5C30.5 54.6046 29.6046 55.5 28.5 55.5H27.5ZM15.27 15.9048C14.4926 16.6545 13.2603 16.6515 12.4865 15.8981L8.21508 11.739C7.41125 10.9563 7.40836 9.66569 8.20868 8.87942L8.8984 8.20179C9.6814 7.43253 10.9381 7.43809 11.7143 8.21425L15.9348 12.4348C16.7259 13.2259 16.7143 14.5121 15.9089 15.2887L15.27 15.9048ZM47.064 47.7605C46.2775 48.5746 44.9728 48.5743 44.1866 47.7598L40.0521 43.4763C39.2946 42.6915 39.3056 41.4444 40.0769 40.6731L40.6733 40.0767C41.4445 39.3055 42.6914 39.2943 43.4763 40.0517L47.7474 44.1729C48.5426 44.9402 48.5648 46.207 47.797 47.0018L47.064 47.7605ZM2.5 30.5C1.39543 30.5 0.5 29.6046 0.5 28.5V27.5C0.5 26.3954 1.39543 25.5 2.5 25.5H8.5C9.60457 25.5 10.5 26.3954 10.5 27.5V28.5C10.5 29.6046 9.60457 30.5 8.5 30.5H2.5ZM11.7393 47.8232C10.9533 48.6092 9.67735 48.6035 8.8984 47.8106L8.20179 47.1016C7.43253 46.3186 7.43809 45.0619 8.21425 44.2857L12.4479 40.0521C13.2093 39.2907 14.4368 39.2688 15.2249 40.0025L15.625 40.375L15.9732 40.7112C16.7777 41.488 16.789 42.7735 15.9983 43.5642L11.7393 47.8232Z" fill="#FFD600"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/images/fallbackmap.png b/examples/quickcontrols/wearable/Wearable/images/fallbackmap.png
new file mode 100644
index 0000000000..bf1ae037f7
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/images/fallbackmap.png
Binary files differ
diff --git a/examples/quickcontrols/wearable/Wearable/images/fitness-man-running-dark.svg b/examples/quickcontrols/wearable/Wearable/images/fitness-man-running-dark.svg
new file mode 100644
index 0000000000..ea313bbc71
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/images/fitness-man-running-dark.svg
@@ -0,0 +1,3 @@
+<svg width="62" height="78" viewBox="0 0 62 78" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M35.3752 11.8396C36.7712 13.239 38.4184 13.9388 40.3169 13.9388C42.1596 13.9388 43.7649 13.225 45.1329 11.7976C46.501 10.3701 47.185 8.73273 47.185 6.88541C47.185 5.0381 46.5149 3.42872 45.1748 2.05723C43.8347 0.685736 42.2154 0 40.3169 0C38.4184 0 36.7712 0.671741 35.3752 2.01524C33.9793 3.35875 33.2813 4.98212 33.2813 6.88541C33.2813 8.78871 33.9793 10.4401 35.3752 11.8396ZM3.29629 57.7703C8.78005 58.8751 21.8066 61.4606 21.8066 61.4606C25.5181 61.6227 26.6937 60.5763 27.7178 56.9635L31.1036 47.2742L38.4743 54.1597V75.1518C38.4743 78.9494 45.5099 78.9494 45.5099 75.1518C45.5099 74.1322 45.5321 71.8127 45.5596 68.9539C45.6036 64.3631 45.661 58.3818 45.661 54.1597C45.661 49.4683 43.1689 47.2742 43.1689 47.2742L38.1392 41.9842L40.3169 31.4882C42.6063 34.1752 45.3982 36.3024 48.6926 37.8698C52.0429 39.4372 55.7202 40.2209 59.4135 40.2209C63.1069 40.2209 62.6084 33.1675 59.4135 33.1675C56.2186 33.1675 53.1318 32.3838 50.4515 30.8164C47.8271 29.305 45.7891 27.2898 44.3373 24.7707L40.9032 19.2288C39.3397 16.9336 37.3854 15.7861 35.0402 15.7861C34.7052 15.7861 34.2445 15.8421 33.6582 15.954C33.0719 16.066 32.6113 16.1219 32.2762 16.1219L17.7456 22.4856C14.6914 24.0251 14.5358 25.4411 14.2604 27.9476L14.2566 27.9821C14.2566 27.9821 14.101 35.9703 14.101 40.2209C14.101 44.4715 20.969 44.4715 20.969 40.2209V28.2134L27.3346 25.7783L20.7399 53.4658C20.7399 53.4658 9.46632 51.6708 4.6364 50.717C-0.193514 49.7631 -2.18747 56.6655 3.29629 57.7703Z" fill="#2CDE85"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/images/fitness-man-running-light.svg b/examples/quickcontrols/wearable/Wearable/images/fitness-man-running-light.svg
new file mode 100644
index 0000000000..296d0b4309
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/images/fitness-man-running-light.svg
@@ -0,0 +1,3 @@
+<svg width="62" height="78" viewBox="0 0 62 78" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M35.3752 11.8396C36.7712 13.239 38.4184 13.9388 40.3169 13.9388C42.1596 13.9388 43.7649 13.225 45.1329 11.7976C46.501 10.3701 47.185 8.73273 47.185 6.88541C47.185 5.0381 46.5149 3.42872 45.1748 2.05723C43.8347 0.685736 42.2154 0 40.3169 0C38.4184 0 36.7712 0.671741 35.3752 2.01524C33.9793 3.35875 33.2813 4.98212 33.2813 6.88541C33.2813 8.78871 33.9793 10.4401 35.3752 11.8396ZM3.29629 57.7703C8.78005 58.8751 21.8066 61.4606 21.8066 61.4606C25.5181 61.6227 26.6937 60.5763 27.7178 56.9635L31.1036 47.2742L38.4743 54.1597V75.1518C38.4743 78.9494 45.5099 78.9494 45.5099 75.1518C45.5099 74.1322 45.5321 71.8127 45.5596 68.9539C45.6036 64.3631 45.661 58.3818 45.661 54.1597C45.661 49.4683 43.1689 47.2742 43.1689 47.2742L38.1392 41.9842L40.3169 31.4882C42.6063 34.1752 45.3982 36.3024 48.6926 37.8698C52.0429 39.4372 55.7202 40.2209 59.4135 40.2209C63.1069 40.2209 62.6084 33.1675 59.4135 33.1675C56.2186 33.1675 53.1318 32.3838 50.4515 30.8164C47.8271 29.305 45.7891 27.2898 44.3373 24.7707L40.9032 19.2288C39.3397 16.9336 37.3854 15.7861 35.0402 15.7861C34.7052 15.7861 34.2445 15.8421 33.6582 15.954C33.0719 16.066 32.6113 16.1219 32.2762 16.1219L17.7456 22.4856C14.6914 24.0251 14.5358 25.4411 14.2604 27.9476L14.2566 27.9821C14.2566 27.9821 14.101 35.9703 14.101 40.2209C14.101 44.4715 20.969 44.4715 20.969 40.2209V28.2134L27.3346 25.7783L20.7399 53.4658C20.7399 53.4658 9.46632 51.6708 4.6364 50.717C-0.193514 49.7631 -2.18747 56.6655 3.29629 57.7703Z" fill="#19545C"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/images/fitness-man-walking-dark.svg b/examples/quickcontrols/wearable/Wearable/images/fitness-man-walking-dark.svg
new file mode 100644
index 0000000000..10a1d2421f
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/images/fitness-man-walking-dark.svg
@@ -0,0 +1,3 @@
+<svg width="44" height="78" viewBox="0 0 44 78" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M15.4523 11.7338C16.8354 13.1207 18.4676 13.8142 20.3487 13.8142C22.1745 13.8142 23.7651 13.1069 25.1206 11.6922C26.4761 10.2774 27.1539 8.6547 27.1539 6.82389C27.1539 4.99308 26.4899 3.39808 25.1621 2.03885C23.8342 0.679608 22.2298 0 20.3487 0C18.4676 0 16.8354 0.665739 15.4523 1.99724C14.0691 3.32873 13.3775 4.9376 13.3775 6.82389C13.3775 8.71018 14.0691 10.3468 15.4523 11.7338ZM6.46298 74.2821C8.09671 71.3108 15.6242 57.4448 15.6242 57.4448L19.3587 47.5488L26.6618 54.3727V75.1772C26.6618 78.9409 33.633 78.9409 33.633 75.1772C33.633 74.1667 33.655 71.868 33.6822 69.0347C33.7258 64.485 33.7827 58.5571 33.7827 54.3727C33.7827 49.7233 31.3134 47.5488 31.3134 47.5488L26.3298 42.3061L26.6618 29.7128C26.6618 29.7128 37.8363 39.6174 41.0335 39.6174C44.2307 39.6174 45.4782 34.17 41.5273 32.6843C37.5765 31.1987 32.4711 25.2463 32.4711 25.2463L29.0685 19.7539C27.5194 17.4793 26.6618 17.3324 26.6618 17.3324C26.0683 16.2311 13.2224 16.1882 12.8837 17.3324L5.96968 22.2847C3.15235 23.7051 2.95593 25.618 2.72317 27.8848C2.70477 28.064 2.68614 28.2455 2.66596 28.429C2.66596 28.429 2.51175 36.3458 2.51175 40.5585C2.51175 44.7711 9.31693 44.7711 9.31693 40.5585V28.6583L12.8837 26.7415V42.3061L9.0899 53.685C9.0899 53.685 3.00484 65.4635 0.536321 70.3204C-1.93219 75.1772 4.82925 77.2534 6.46298 74.2821Z" fill="#2CDE85"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/images/fitness-man-walking-light.svg b/examples/quickcontrols/wearable/Wearable/images/fitness-man-walking-light.svg
new file mode 100644
index 0000000000..268d4ac880
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/images/fitness-man-walking-light.svg
@@ -0,0 +1,3 @@
+<svg width="44" height="78" viewBox="0 0 44 78" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M15.4523 11.7338C16.8354 13.1207 18.4676 13.8142 20.3487 13.8142C22.1745 13.8142 23.7651 13.1069 25.1206 11.6922C26.4761 10.2774 27.1539 8.6547 27.1539 6.82389C27.1539 4.99308 26.4899 3.39808 25.1621 2.03885C23.8342 0.679608 22.2298 0 20.3487 0C18.4676 0 16.8354 0.665739 15.4523 1.99724C14.0691 3.32873 13.3775 4.9376 13.3775 6.82389C13.3775 8.71018 14.0691 10.3468 15.4523 11.7338ZM6.46298 74.2821C8.09671 71.3108 15.6242 57.4448 15.6242 57.4448L19.3587 47.5488L26.6618 54.3727V75.1772C26.6618 78.9409 33.633 78.9409 33.633 75.1772C33.633 74.1667 33.655 71.868 33.6822 69.0347C33.7258 64.485 33.7827 58.5571 33.7827 54.3727C33.7827 49.7233 31.3134 47.5488 31.3134 47.5488L26.3298 42.3061L26.6618 29.7128C26.6618 29.7128 37.8363 39.6174 41.0335 39.6174C44.2307 39.6174 45.4782 34.17 41.5273 32.6843C37.5765 31.1987 32.4711 25.2463 32.4711 25.2463L29.0685 19.7539C27.5194 17.4793 26.6618 17.3324 26.6618 17.3324C26.0683 16.2311 13.2224 16.1882 12.8837 17.3324L5.96968 22.2847C3.15235 23.7051 2.95593 25.618 2.72317 27.8848C2.70477 28.064 2.68614 28.2455 2.66596 28.429C2.66596 28.429 2.51175 36.3458 2.51175 40.5585C2.51175 44.7711 9.31693 44.7711 9.31693 40.5585V28.6583L12.8837 26.7415V42.3061L9.0899 53.685C9.0899 53.685 3.00484 65.4635 0.536321 70.3204C-1.93219 75.1772 4.82925 77.2534 6.46298 74.2821Z" fill="#19545C"/>
+</svg>
diff --git a/examples/quickcontrols/wearable/Wearable/navigation.js b/examples/quickcontrols/wearable/Wearable/navigation.js
new file mode 100644
index 0000000000..0f3e7fa9be
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/navigation.js
@@ -0,0 +1,119 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+function requestNavigationRoute(rModel) {
+ var xhr = new XMLHttpRequest;
+ xhr.open("GET", "fallbackroute.json");
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState === XMLHttpRequest.DONE) {
+ var a = JSON.parse(xhr.responseText);
+ var steps = a.route.steps;
+
+ for (var step in steps) {
+ var direction = steps[step].direction;
+ var instructionText = steps[step].instructionText;
+ var distanceToNextInstruction = steps[step].distanceToNextInstruction;
+
+ rModel.append({
+ icon: formatIconInstruction(direction),
+ shortInfo: formatShortInstruction(direction),
+ instruction: instructionText,
+ distance: qsTr("in") + " " + formatDistance(distanceToNextInstruction)
+ });
+ }
+ }
+ }
+ xhr.send();
+}
+
+function formatIconInstruction(direction)
+{
+ switch (direction){
+ case 0:
+ return "";
+ case 1:
+ return "forward";
+ case 2:
+ return "bearright";
+ case 3:
+ case 4:
+ return "right";
+ case 5:
+ return "lightright";
+ case 6:
+ return "uturnright";
+ case 7:
+ return "uturleft";
+ case 8:
+ case 9:
+ return "left";
+ case 10:
+ return "lightleft";
+ case 11:
+ return "bearleft";
+ }
+}
+
+function formatShortInstruction(direction)
+{
+ switch (direction){
+ case 0:
+ return "";
+ case 1:
+ return "Move forward";
+ case 2:
+ return "Bear right";
+ case 3:
+ return "Turn right";
+ case 4:
+ return "Turn hard right";
+ case 5:
+ return "Turn slightly right";
+ case 6:
+ return "Uturn right";
+ case 7:
+ return "Uturn left";
+ case 8:
+ return "Turn hard left";
+ case 9:
+ return "Turn left";
+ case 10:
+ return "Turn slightly left";
+ case 11:
+ return "Bear left";
+ }
+}
+
+function formatTime(sec)
+{
+ var value = sec
+ var seconds = value % 60
+ value /= 60
+ value = (value > 1) ? Math.round(value) : 0
+ var minutes = value % 60
+ value /= 60
+ value = (value > 1) ? Math.round(value) : 0
+ var hours = value
+ if (hours > 0) value = hours + "h:"+ minutes + "m"
+ else value = minutes + "min"
+ return value
+}
+
+function formatDistance(meters)
+{
+ var dist = Math.round(meters)
+ if (dist > 1000 ){
+ if (dist > 100000){
+ dist = Math.round(dist / 1000)
+ }
+ else{
+ dist = Math.round(dist / 100)
+ dist = dist / 10
+ }
+ dist = dist + " km"
+ }
+ else{
+ dist = dist + " m"
+ }
+ return dist
+}
diff --git a/examples/quickcontrols/wearable/Wearable/notifications.js b/examples/quickcontrols/wearable/Wearable/notifications.js
new file mode 100644
index 0000000000..d278cfb87b
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/notifications.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+function populateData(listData) {
+ listData.append({
+ name: "John Doe",
+ gender: "m",
+ date: "02/15/2017",
+ time: "09:20 am",
+ text: "I found the bug that has been bothering us for years! It was in your code segment :P"
+ });
+
+ listData.append({
+ name: "Jane Worldege",
+ gender: "f",
+ date: "02/06/2017",
+ time: "10:15 am",
+ text: "John told me about your bug. One more such thing and you're fired!"
+ });
+
+ listData.append({
+ name: "Jennifer Wang",
+ gender: "f",
+ date: "02/03/2017",
+ time: "05:16 pm",
+ text: "Hey! Have you seen the new Qt version? It can do 3D stuff now!"
+ });
+}
diff --git a/examples/quickcontrols/wearable/Wearable/qmldir b/examples/quickcontrols/wearable/Wearable/qmldir
new file mode 100644
index 0000000000..550b8bb1c1
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/qmldir
@@ -0,0 +1,19 @@
+# This file only exists for qmake.
+
+module Wearable
+prefer :/qt/qml/Wearable/
+AlarmsPage 254.0 AlarmsPage.qml
+Clock 254.0 Clock.qml
+DemoMode 254.0 DemoMode.qml
+DemoModeIndicator 254.0 DemoModeIndicator.qml
+FitnessPage 254.0 FitnessPage.qml
+LauncherPage 254.0 LauncherPage.qml
+Main 254.0 Main.qml
+NavigationPage 254.0 NavigationPage.qml
+NavigationFallbackPage 254.0 NavigationFallbackPage.qml
+NotificationsPage 254.0 NotificationsPage.qml
+RouteElement 254.0 RouteElement.qml
+SettingsPage 254.0 SettingsPage.qml
+SwipeViewPage 254.0 SwipeViewPage.qml
+WeatherPage 254.0 WeatherPage.qml
+WorldClockPage 254.0 WorldClockPage.qml
diff --git a/examples/quickcontrols/wearable/Wearable/weather.js b/examples/quickcontrols/wearable/Wearable/weather.js
new file mode 100644
index 0000000000..a9804b686d
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/weather.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+
+function formatTemp(farenheit) {
+ let celsius = Math.round((farenheit -32) * 5/9)
+ return celsius + "°C"
+}
+
+function requestWeatherData(cntr) {
+ var xhr = new XMLHttpRequest;
+ xhr.open("GET", "weather.json");
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState === XMLHttpRequest.DONE) {
+ cntr.weatherData = JSON.parse(xhr.responseText)
+ }
+ }
+ xhr.send();
+}
+
+function getTimeHMS(utcTime) {
+ var date = new Date(utcTime * 1000);
+ // Hours part from the timestamp
+ var hours = "0" + date.getHours();
+ // Minutes part from the timestamp
+ var minutes = "0" + date.getMinutes();
+
+ // Will display time in 10:30:23 format
+ return hours.substr(-2) + ':' + minutes.substr(-2);
+}
+
+function iconSelect(code) {
+ if (code === "01d" || code === "01n")
+ return "sunny";
+ else if (code === "02d" || code === "02n")
+ return "sunny-very-few-clouds";
+ else if (code === "03d" || code === "03n")
+ return "few-clouds";
+ else if (code === "04d" || code === "04n")
+ return "overcast";
+ else if (code === "09d" || code === "09n" || code === "10d" || code === "10n")
+ return "showers";
+ else if (code === "11d" || code === "11n")
+ return "thundershower";
+ else if (code === "13d" || code === "13n")
+ return "snow";
+ else if (code === "50d" || code === "50n")
+ return "fog";
+
+ return "sunny"; // default choice
+}
diff --git a/examples/quickcontrols/wearable/qml/Weather/weather.json b/examples/quickcontrols/wearable/Wearable/weather.json
index 2cce95c60b..2cce95c60b 100644
--- a/examples/quickcontrols/wearable/qml/Weather/weather.json
+++ b/examples/quickcontrols/wearable/Wearable/weather.json
diff --git a/examples/quickcontrols/wearable/WearableSettings/CMakeLists.txt b/examples/quickcontrols/wearable/WearableSettings/CMakeLists.txt
new file mode 100644
index 0000000000..9a839346bd
--- /dev/null
+++ b/examples/quickcontrols/wearable/WearableSettings/CMakeLists.txt
@@ -0,0 +1,45 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(wearablesettings LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2)
+
+set_source_files_properties(
+ WearableSettings.qml
+ PROPERTIES
+ QT_QML_SINGLETON_TYPE TRUE
+)
+
+qt_policy(SET QTP0001 NEW)
+qt_add_qml_module(wearablesettings
+ URI WearableSettings
+ PLUGIN_TARGET wearablesettings
+ QML_FILES
+ WearableSettings.qml
+)
+
+target_link_libraries(wearablesettings PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickControls2
+)
+
+if(UNIX AND NOT APPLE AND CMAKE_CROSSCOMPILING)
+ find_package(Qt6 REQUIRED COMPONENTS QuickTemplates2)
+
+ # Work around QTBUG-86533
+ target_link_libraries(wearablesettings PRIVATE Qt6::QuickTemplates2)
+endif()
+
+install(TARGETS wearablesettings
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/WearableSettings"
+ LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR}/WearableSettings"
+)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qmldir
+ DESTINATION "${CMAKE_INSTALL_BINDIR}/WearableSettings"
+)
diff --git a/examples/quickcontrols/wearable/WearableSettings/WearableSettings.qml b/examples/quickcontrols/wearable/WearableSettings/WearableSettings.qml
new file mode 100644
index 0000000000..3af505867c
--- /dev/null
+++ b/examples/quickcontrols/wearable/WearableSettings/WearableSettings.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+pragma Singleton
+
+import QtCore
+
+Settings {
+ property bool wireless
+ property bool bluetooth
+ property int brightness
+ property bool darkTheme
+ property bool demoMode
+}
diff --git a/examples/quickcontrols/wearable/WearableSettings/qmldir b/examples/quickcontrols/wearable/WearableSettings/qmldir
new file mode 100644
index 0000000000..b11b06ab0b
--- /dev/null
+++ b/examples/quickcontrols/wearable/WearableSettings/qmldir
@@ -0,0 +1,5 @@
+# This file only exists for qmake.
+
+module WearableSettings
+prefer :/qt/qml/WearableSettings/
+singleton WearableSettings 254.0 WearableSettings.qml
diff --git a/examples/quickcontrols/wearable/WearableStyle/CMakeLists.txt b/examples/quickcontrols/wearable/WearableStyle/CMakeLists.txt
new file mode 100644
index 0000000000..3ccd90ff2b
--- /dev/null
+++ b/examples/quickcontrols/wearable/WearableStyle/CMakeLists.txt
@@ -0,0 +1,51 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(wearablestyle LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2)
+
+set_source_files_properties(UIStyle.qml
+ PROPERTIES
+ QT_QML_SINGLETON_TYPE TRUE
+)
+
+qt_policy(SET QTP0001 NEW)
+qt_add_qml_module(wearablestyle
+ URI WearableStyle
+ PLUGIN_TARGET wearablestyle
+ QML_FILES
+ PageIndicator.qml
+ Slider.qml
+ Switch.qml
+ UIStyle.qml
+ RESOURCES
+ fonts/TitilliumWeb-Bold.ttf
+ fonts/TitilliumWeb-SemiBold.ttf
+ fonts/TitilliumWeb-Regular.ttf
+)
+
+target_link_libraries(wearablestyle PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickControls2
+)
+
+if(UNIX AND NOT APPLE AND CMAKE_CROSSCOMPILING)
+ find_package(Qt6 REQUIRED COMPONENTS QuickTemplates2)
+
+ # Work around QTBUG-86533
+ target_link_libraries(wearablestyle PRIVATE Qt6::QuickTemplates2)
+endif()
+
+install(TARGETS wearablestyle
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/WearableStyle"
+ LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR}/WearableStyle"
+)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qmldir
+ DESTINATION "${CMAKE_INSTALL_BINDIR}/WearableStyle"
+)
diff --git a/examples/quickcontrols/wearable/WearableStyle/PageIndicator.qml b/examples/quickcontrols/wearable/WearableStyle/PageIndicator.qml
new file mode 100644
index 0000000000..bfc25c78d1
--- /dev/null
+++ b/examples/quickcontrols/wearable/WearableStyle/PageIndicator.qml
@@ -0,0 +1,42 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.PageIndicator {
+ id: control
+
+ implicitWidth: contentItem.implicitWidth + leftPadding + rightPadding
+ implicitHeight: contentItem.implicitHeight + topPadding + bottomPadding
+
+ spacing: 6
+ padding: 6
+ bottomPadding: 7
+
+ delegate: Rectangle {
+ required property int index
+
+ implicitWidth: 16
+ implicitHeight: 16
+
+ radius: width / 2
+ color: index === control.currentIndex ? UIStyle.buttonProgress : UIStyle.pageIndicatorColor
+ border.color: UIStyle.indicatorOutlineColor
+
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: 100
+ }
+ }
+ }
+
+ contentItem: Row {
+ spacing: control.spacing
+
+ Repeater {
+ model: control.count
+ delegate: control.delegate
+ }
+ }
+}
diff --git a/examples/quickcontrols/wearable/WearableStyle/Slider.qml b/examples/quickcontrols/wearable/WearableStyle/Slider.qml
new file mode 100644
index 0000000000..894e3a37df
--- /dev/null
+++ b/examples/quickcontrols/wearable/WearableStyle/Slider.qml
@@ -0,0 +1,59 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Slider {
+ id: control
+
+ implicitWidth: 200
+ implicitHeight: 32
+
+ handle: Rectangle {
+ x: control.visualPosition * (control.width - width)
+ y: (control.height - height) / 2
+ width: 32
+ height: width
+ radius: width/2
+
+ color: control.pressed ? UIStyle.buttonGrayPressed : UIStyle.buttonGray
+ border.color: UIStyle.buttonGrayOutLine
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ radius: parent.radius
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: UIStyle.gradientOverlay1 }
+ GradientStop { position: 1.0; color: UIStyle.gradientOverlay2 }
+ }
+ }
+
+ }
+
+ background: Rectangle {
+ y: (control.height - height) / 2
+ height: 6
+ radius: height / 2
+ color: UIStyle.buttonBackground
+
+ Rectangle {
+ width: control.visualPosition * parent.width
+ height: parent.height
+ color: UIStyle.buttonProgress
+ radius: height / 2
+ }
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ radius: parent.radius
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: UIStyle.gradientOverlay1 }
+ GradientStop { position: 1.0; color: UIStyle.gradientOverlay2 }
+ }
+ }
+ }
+}
+
diff --git a/examples/quickcontrols/wearable/WearableStyle/Switch.qml b/examples/quickcontrols/wearable/WearableStyle/Switch.qml
new file mode 100644
index 0000000000..1ab153c528
--- /dev/null
+++ b/examples/quickcontrols/wearable/WearableStyle/Switch.qml
@@ -0,0 +1,54 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Switch {
+ id: control
+
+ implicitWidth: 64
+ implicitHeight: 34
+
+ indicator: Rectangle {
+ x: 2 + control.visualPosition * (control.width - width - 4)
+ y: (control.height - height) / 2
+ width: height
+ height: parent.height - 4
+ radius: height / 2
+
+ color: control.down ? UIStyle.buttonGrayPressed : UIStyle.buttonGray
+ border.color: UIStyle.buttonGrayOutLine
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ radius: parent.radius
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: UIStyle.gradientOverlay1 }
+ GradientStop { position: 1.0; color: UIStyle.gradientOverlay2 }
+ }
+ }
+
+ Behavior on x {
+ enabled: !control.pressed
+ SmoothedAnimation { velocity: 200 }
+ }
+ }
+
+ background: Rectangle {
+ radius: 17
+ color: control.checked ? UIStyle.buttonProgress : UIStyle.buttonBackground
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ radius: parent.radius
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: UIStyle.gradientOverlay1 }
+ GradientStop { position: 1.0; color: UIStyle.gradientOverlay2 }
+ }
+ }
+ }
+}
+
diff --git a/examples/quickcontrols/wearable/WearableStyle/UIStyle.qml b/examples/quickcontrols/wearable/WearableStyle/UIStyle.qml
new file mode 100644
index 0000000000..bd2f47f8c0
--- /dev/null
+++ b/examples/quickcontrols/wearable/WearableStyle/UIStyle.qml
@@ -0,0 +1,114 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+pragma Singleton
+
+import QtQuick
+import WearableSettings
+
+Item {
+ id: uiStyle
+
+ property font h1: Qt.font({
+ family: fontLoaderSemibold.font.family,
+ weight: fontLoaderSemibold.font.weight,
+ pixelSize: 24
+ })
+ property int h1lineHeight: 28
+
+ property font h2: Qt.font({
+ family: fontLoaderSemibold.font.family,
+ weight: fontLoaderSemibold.font.weight,
+ pixelSize: 20
+ })
+ property int h2lineHeight: 24
+
+ property font h3: Qt.font({
+ family: fontLoaderRegular.font.family,
+ weight: fontLoaderRegular.font.weight,
+ pixelSize: 16
+ })
+ property int h3lineHeight: 20
+
+ property font h4: Qt.font({
+ family: fontLoaderBold.font.family,
+ weight: fontLoaderBold.font.weight,
+ pixelSize: 16
+ })
+ property int h4lineHeight: 20
+
+ property font p1: Qt.font({
+ family: fontLoaderRegular.font.family,
+ weight: fontLoaderRegular.font.weight,
+ pixelSize: 14
+ })
+ property int p1lineHeight: 16
+
+ property font p2: Qt.font({
+ family: fontLoaderRegular.font.family,
+ weight: fontLoaderRegular.font.weight,
+ pixelSize: 20
+ })
+ property int p2lineHeight: 24
+
+ property font tumblerFont: Qt.font({
+ family: fontLoaderRegular.font.family,
+ weight: fontLoaderRegular.font.weight,
+ pixelSize: 32
+ })
+
+ FontLoader {
+ id: fontLoaderBold
+ source: "qrc:/qt/qml/WearableStyle/fonts/TitilliumWeb-Bold.ttf"
+ }
+
+ FontLoader {
+ id: fontLoaderSemibold
+ source: "qrc:/qt/qml/WearableStyle/fonts/TitilliumWeb-SemiBold.ttf"
+ }
+
+ FontLoader {
+ id: fontLoaderRegular
+ source: "qrc:/qt/qml/WearableStyle/fonts/TitilliumWeb-Regular.ttf"
+ }
+
+ readonly property color colorRed: "#E91E63"
+
+ readonly property color buttonGray: WearableSettings.darkTheme ? "#808080" : "#f3f3f4"
+ readonly property color buttonGrayPressed: WearableSettings.darkTheme ? "#707070" : "#cecfd5"
+ readonly property color buttonGrayOutLine: WearableSettings.darkTheme ? "#0D0D0D" : "#999999"
+
+ readonly property color buttonBackground: WearableSettings.darkTheme ? "#262626" : "#CCCCCC"
+ readonly property color buttonProgress: WearableSettings.darkTheme ? "#28C878" : "#19545C"
+
+ readonly property color gradientOverlay1: "#00000000"
+ readonly property color gradientOverlay2: "#1E000000"
+
+ readonly property color background1: WearableSettings.darkTheme ? "#00414A" : "#ABF2CE"
+ readonly property color background2: WearableSettings.darkTheme ? "#07243E" : "#E6E6E6"
+ readonly property color background3: WearableSettings.darkTheme ? "#262626" : "#E6E6E6"
+
+ readonly property color textColor: WearableSettings.darkTheme ? "#E6E6E6" : "#191919"
+ readonly property color titletextColor: WearableSettings.darkTheme ? "#2CDE85" : "#191919"
+
+ readonly property color highlightColor: WearableSettings.darkTheme ? "#33676E" : "#28C878"
+
+ readonly property color pageIndicatorColor: WearableSettings.darkTheme ? "#00000000" : "#E6E6E6"
+ readonly property color indicatorOutlineColor: WearableSettings.darkTheme ? "#707070" : "#999999"
+
+ readonly property color listHeader1: WearableSettings.darkTheme ? "#9E00414A" : "#9E2CDE85"
+ readonly property color listHeader2: WearableSettings.darkTheme ? "#9E0C1C1F" : "#9E00414A"
+
+ readonly property color listItemBackground: WearableSettings.darkTheme ? "#00414A" : "#EAFCF3"
+
+ function imagePath(baseImagePath) {
+ return `qrc:/qt/qml/Wearable/images/${baseImagePath}.png`
+ }
+
+ function themeImagePath(baseImagePath) {
+ return `qrc:/qt/qml/Wearable/images/${baseImagePath}${(WearableSettings.darkTheme ? "-dark" : "-light")}.svg`
+ }
+ function iconPath(baseImagePath) {
+ return `qrc:/qt/qml/Wearable/icons/${baseImagePath}${(WearableSettings.darkTheme ? "-dark" : "-light")}.svg`
+ }
+}
diff --git a/examples/quickcontrols/wearable/WearableStyle/fonts/OFL.txt b/examples/quickcontrols/wearable/WearableStyle/fonts/OFL.txt
new file mode 100644
index 0000000000..330d7a2af7
--- /dev/null
+++ b/examples/quickcontrols/wearable/WearableStyle/fonts/OFL.txt
@@ -0,0 +1,93 @@
+Copyright (c) 2009-2011 by Accademia di Belle Arti di Urbino and students of MA course of Visual design. Some rights reserved.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/examples/quickcontrols/wearable/WearableStyle/fonts/TitilliumWeb-Bold.ttf b/examples/quickcontrols/wearable/WearableStyle/fonts/TitilliumWeb-Bold.ttf
new file mode 100644
index 0000000000..b3d8c34f79
--- /dev/null
+++ b/examples/quickcontrols/wearable/WearableStyle/fonts/TitilliumWeb-Bold.ttf
Binary files differ
diff --git a/examples/quickcontrols/wearable/WearableStyle/fonts/TitilliumWeb-Regular.ttf b/examples/quickcontrols/wearable/WearableStyle/fonts/TitilliumWeb-Regular.ttf
new file mode 100644
index 0000000000..e0e2dc888c
--- /dev/null
+++ b/examples/quickcontrols/wearable/WearableStyle/fonts/TitilliumWeb-Regular.ttf
Binary files differ
diff --git a/examples/quickcontrols/wearable/WearableStyle/fonts/TitilliumWeb-SemiBold.ttf b/examples/quickcontrols/wearable/WearableStyle/fonts/TitilliumWeb-SemiBold.ttf
new file mode 100644
index 0000000000..2a1a0bca99
--- /dev/null
+++ b/examples/quickcontrols/wearable/WearableStyle/fonts/TitilliumWeb-SemiBold.ttf
Binary files differ
diff --git a/examples/quickcontrols/wearable/WearableStyle/qmldir b/examples/quickcontrols/wearable/WearableStyle/qmldir
new file mode 100644
index 0000000000..d29b115ba0
--- /dev/null
+++ b/examples/quickcontrols/wearable/WearableStyle/qmldir
@@ -0,0 +1,8 @@
+# This file only exists for qmake.
+
+module WearableStyle
+prefer :/qt/qml/WearableStyle/
+PageIndicator 254.0 PageIndicator.qml
+Slider 254.0 Slider.qml
+Switch 254.0 Switch.qml
+singleton UIStyle 254.0 UIStyle.qml
diff --git a/examples/quickcontrols/wearable/doc/images/qtquickcontrols-wearable.png b/examples/quickcontrols/wearable/doc/images/qtquickcontrols-wearable.png
index c61055340c..fced79cc52 100644
--- a/examples/quickcontrols/wearable/doc/images/qtquickcontrols-wearable.png
+++ b/examples/quickcontrols/wearable/doc/images/qtquickcontrols-wearable.png
Binary files differ
diff --git a/examples/quickcontrols/wearable/doc/src/qtquickcontrols-wearable.qdoc b/examples/quickcontrols/wearable/doc/src/qtquickcontrols-wearable.qdoc
index b6665003fd..4088a1f56e 100644
--- a/examples/quickcontrols/wearable/doc/src/qtquickcontrols-wearable.qdoc
+++ b/examples/quickcontrols/wearable/doc/src/qtquickcontrols-wearable.qdoc
@@ -7,6 +7,8 @@
\title Qt Quick Controls - Wearable Demo
\keyword Qt Quick Controls 2 - Wearable Demo
\ingroup qtquickcontrols-examples
+ \examplecategory {Embedded}
+ \examplecategory {Mobile}
\brief Demonstrates an application launcher designed for wearable devices.
\image qtquickcontrols-wearable.png
@@ -19,22 +21,17 @@
The main .qml file, \c wearable.qml, consists of an ApplicationWindow, a StackView
for a stack-based navigation model, and buttons for interactive navigation.
- \quotefromfile wearable/wearable.qml
- \skipuntil import "qml/Style"
- \printuntil id: window
- \dots
- \skipto header
- \printuntil id: homeButton
+ \snippet wearable/Wearable/Main.qml window start
+ \dots 4
+ \snippet wearable/Wearable/Main.qml stackview start
\dots 8
- \skipto onClicked
- \printuntil }
- \printuntil id: backButton
+ \snippet wearable/Wearable/Main.qml onLaunched connection
\dots 8
- \skipto onClicked
- \printuntil id: stackView
- \dots 8
- \skipuntil initialItem
- \printuntil /^\}/
+ \snippet wearable/Wearable/Main.qml stackview end
+ \snippet wearable/Wearable/Main.qml DemoMode
+ \snippet wearable/Wearable/Main.qml DemoModeIndicator
+ \snippet wearable/Wearable/Main.qml MouseArea
+ \snippet wearable/Wearable/Main.qml window end
\section1 Styling
@@ -44,79 +41,41 @@
singleton type for various styling attributes, such as fonts and colors.
\list
- \li \c qml/Style/PageIndicator.qml
- \li \c qml/Style/Slider.qml
- \li \c qml/Style/Switch.qml
- \li \c qml/Style/UIStyle.qml
+ \li \c WearableStyle/PageIndicator.qml
+ \li \c WearableStyle/Slider.qml
+ \li \c WearableStyle/Switch.qml
+ \li \c WearableStyle/UIStyle.qml
\endlist
The style is applied in \c main() in \c wearable.cpp:
\snippet wearable/wearable.cpp style
- The main benefit of using the built-in styling system is that the style selection
- is fully transparent to the application code. There is no need to import a specific
- folder that contains the styled controls. This way, the application can be run with
- other styles too.
-
- \section1 Custom Type
-
- The demo application contains a custom button type implemented in
- \c qml/NaviButton.qml. The navigation button is used as a home and back
- button in \c wearable.qml. \c NaviButton extends the AbstractButton type
- with properties that control the slide in and slide out transitions and
- the button image.
-
- \quotefromfile wearable/qml/NaviButton.qml
- \skipuntil import "Style"
- \printuntil id: image
- \dots 8
- \skipuntil }
- \printuntil background:
- \dots 8
- \skipto }
- \printuntil /^\}/
-
- \section1 Icons
-
- The demo ships a custom icon theme. The icons are bundled into the \c :/icons
- folder in the application's resources. The \c index.theme file lists the contents
- of the icon theme:
-
- \quotefile wearable/icons/wearable/index.theme
-
- Finally, the icon theme is selected in \c main():
-
- \snippet wearable/wearable.cpp icons
-
- The icons are used on the Launcher Page, which is presented below. See
- \l {Icons in Qt Quick Controls} for more details about icons and themes.
+ The main benefit of using the built-in styling system is that the style
+ selection is fully transparent to the application code. There is no need
+ to import a specific folder that contains the styled controls. This way,
+ the application can be run with other styles too.
\section1 Launcher Page
The application launcher is implemented using a circular PathView in
\c LauncherPage.qml. Each application is in a separate .qml file,
- which is added to the ListModel on the launcher page.
-
- \quotefromfile wearable/qml/LauncherPage.qml
- \skipto PathView
- \printuntil signal launched
- \dots
- \skipto ListModel
- \printuntil }
+ which are added to the ListModel on the launcher page. For some applications
+ a fallback option is provided to handle optional dependencies like QtLocation.
+
+ \snippet wearable/Wearable/LauncherPage.qml LauncherPage start
+ \dots 4
+ \snippet wearable/Wearable/LauncherPage.qml Model start
+ \snippet wearable/Wearable/LauncherPage.qml Model mid
\dots 8
- \printline ListElement
- \skipto "Settings"
- \printuntil delegate:
+ \snippet wearable/Wearable/LauncherPage.qml Model end
+ \snippet wearable/Wearable/LauncherPage.qml Delegate start
\dots 8
- \skipto icon.width
- \printuntil icon.name
+ \snippet wearable/Wearable/LauncherPage.qml Delegate mid
\dots 8
- \skipto onClicked:
- \printto path:
- \dots
- \skipto /^\}/
- \printline }
+ \snippet wearable/Wearable/LauncherPage.qml Delegate end
+ \dots 4
+ \snippet wearable/Wearable/LauncherPage.qml LauncherPage end
\section1 Applications
@@ -124,24 +83,25 @@
or communication means are typically offered by wearable devices.
Most applications have their own JavaScript files that act as dummy
- application backends. They illustrate fetching external data and help
- manipulating or converting the data. In the \c Navigation and \c Weather
- applications, data acquisition is implemented using \l XMLHttpRequest to
- read from local files. These files were generated by storing responses from
- remote servers in JSON format. This code can be easily modified to acquire
- data from remote servers.
+ application backends. They demonstrate how to fetch and manipulate or
+ convert external data. For example, the \c Weather application reads data
+ from local files using \l XMLHttpRequest. These files were generated by
+ storing responses from remote servers in JSON format. This code can be
+ easily modified to acquire data from remote servers.
\section2 Navigation
- This application displays a walking route from source to destination. This
- route information is obtained using the REST API provided by
- \l {https://www.openstreetmap.org/}. The API response is in JSON format, which
- is parsed using JavaScript by the application. Currently, it is not possible
- to specify the source and destination from within the application, but it can
- be added based on the device's capabilities. For example, user input
- could be implemented as screens with input fields, or can be communicated
- over Bluetooth/Wifi from a paired application running on another device
- such as a smart phone or PC.
+ This application uses the QtLocation module to display a route within Oslo.
+ If QtLocation is not installed, it shows a static image as the map and route
+ information based on a JSON file. Currently, it is not possible to specify
+ the source and destination from within the application, but it can be added
+ based on the device's capabilities. For example, you can collect necessary
+ info. using one of the following methods:
+ \list
+ \li Implement additional screens to collect input from user
+ \li Communicate with another device (smart phone or PC)
+ over Bluetooth or WiFi channels.
+ \endlist
\section2 Weather
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36/alarms.png b/examples/quickcontrols/wearable/icons/wearable/36x36/alarms.png
deleted file mode 100644
index 252dcf938f..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36/alarms.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36/fitness.png b/examples/quickcontrols/wearable/icons/wearable/36x36/fitness.png
deleted file mode 100644
index 4b0679e271..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36/fitness.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36/navigation.png b/examples/quickcontrols/wearable/icons/wearable/36x36/navigation.png
deleted file mode 100644
index 08e73005fd..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36/navigation.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36/notifications.png b/examples/quickcontrols/wearable/icons/wearable/36x36/notifications.png
deleted file mode 100644
index 6309312122..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36/notifications.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36/settings.png b/examples/quickcontrols/wearable/icons/wearable/36x36/settings.png
deleted file mode 100644
index c1552fb360..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36/settings.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36/weather.png b/examples/quickcontrols/wearable/icons/wearable/36x36/weather.png
deleted file mode 100644
index 61be79a24f..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36/weather.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36/worldclock.png b/examples/quickcontrols/wearable/icons/wearable/36x36/worldclock.png
deleted file mode 100644
index d23e32e512..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36/worldclock.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36@2/alarms.png b/examples/quickcontrols/wearable/icons/wearable/36x36@2/alarms.png
deleted file mode 100644
index 6047e231fc..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36@2/alarms.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36@2/fitness.png b/examples/quickcontrols/wearable/icons/wearable/36x36@2/fitness.png
deleted file mode 100644
index 1d2caa3385..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36@2/fitness.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36@2/navigation.png b/examples/quickcontrols/wearable/icons/wearable/36x36@2/navigation.png
deleted file mode 100644
index 7d4a62b9e1..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36@2/navigation.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36@2/notifications.png b/examples/quickcontrols/wearable/icons/wearable/36x36@2/notifications.png
deleted file mode 100644
index 8d3b333350..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36@2/notifications.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36@2/settings.png b/examples/quickcontrols/wearable/icons/wearable/36x36@2/settings.png
deleted file mode 100644
index e89188743d..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36@2/settings.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36@2/weather.png b/examples/quickcontrols/wearable/icons/wearable/36x36@2/weather.png
deleted file mode 100644
index 0a2ae7d54e..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36@2/weather.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/36x36@2/worldclock.png b/examples/quickcontrols/wearable/icons/wearable/36x36@2/worldclock.png
deleted file mode 100644
index ca6eb879e1..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/36x36@2/worldclock.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/icons/wearable/index.theme b/examples/quickcontrols/wearable/icons/wearable/index.theme
deleted file mode 100644
index da702d4a92..0000000000
--- a/examples/quickcontrols/wearable/icons/wearable/index.theme
+++ /dev/null
@@ -1,14 +0,0 @@
-[Icon Theme]
-Name=Wearable
-Comment=Qt Quick Controls 2 Wearable Demo Icon Theme
-
-Directories=36x36,36x36@2
-
-[36x36]
-Size=36
-Type=Fixed
-
-[36x36@2]
-Size=36
-Scale=2
-Type=Fixed
diff --git a/examples/quickcontrols/wearable/images/back.png b/examples/quickcontrols/wearable/images/back.png
deleted file mode 100644
index cf80aa65f5..0000000000
--- a/examples/quickcontrols/wearable/images/back.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/images/back@2x.png b/examples/quickcontrols/wearable/images/back@2x.png
deleted file mode 100644
index 02f27981e0..0000000000
--- a/examples/quickcontrols/wearable/images/back@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/images/back@3x.png b/examples/quickcontrols/wearable/images/back@3x.png
deleted file mode 100644
index 6d2d6cf120..0000000000
--- a/examples/quickcontrols/wearable/images/back@3x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/images/back@4x.png b/examples/quickcontrols/wearable/images/back@4x.png
deleted file mode 100644
index 03193681b1..0000000000
--- a/examples/quickcontrols/wearable/images/back@4x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/images/background-dark.png b/examples/quickcontrols/wearable/images/background-dark.png
deleted file mode 100644
index 6a8c0761aa..0000000000
--- a/examples/quickcontrols/wearable/images/background-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/images/background-light.png b/examples/quickcontrols/wearable/images/background-light.png
deleted file mode 100644
index 913befab82..0000000000
--- a/examples/quickcontrols/wearable/images/background-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/images/home.png b/examples/quickcontrols/wearable/images/home.png
deleted file mode 100644
index b6ee1459f7..0000000000
--- a/examples/quickcontrols/wearable/images/home.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/images/home@2x.png b/examples/quickcontrols/wearable/images/home@2x.png
deleted file mode 100644
index d5595b2378..0000000000
--- a/examples/quickcontrols/wearable/images/home@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/images/home@3x.png b/examples/quickcontrols/wearable/images/home@3x.png
deleted file mode 100644
index 9a5188d22b..0000000000
--- a/examples/quickcontrols/wearable/images/home@3x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/images/home@4x.png b/examples/quickcontrols/wearable/images/home@4x.png
deleted file mode 100644
index c4d2eb515a..0000000000
--- a/examples/quickcontrols/wearable/images/home@4x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Alarms/AlarmsPage.qml b/examples/quickcontrols/wearable/qml/Alarms/AlarmsPage.qml
deleted file mode 100644
index 65b34b83cb..0000000000
--- a/examples/quickcontrols/wearable/qml/Alarms/AlarmsPage.qml
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls as QQC2
-import ".."
-import "../Style"
-
-Item {
- QQC2.SwipeView {
- id: svAlarmsContainer
-
- anchors.fill: parent
-
- Repeater {
- model: ListModel {
- ListElement { name: qsTr("Week Days"); state: true; time: "06:00 AM" }
- ListElement { name: qsTr("Week Ends"); state: false; time: "07:30 AM" }
- }
-
- SwipeViewPage {
- property alias stateSwitch: stateSwitch
-
- Column {
- spacing: 30
- anchors.centerIn: parent
-
- QQC2.Switch {
- id: stateSwitch
- checked: model.state
- anchors.left: nameLabel.right
- }
-
- Text {
- text: model.time
- anchors.horizontalCenter: parent.horizontalCenter
- verticalAlignment: Text.AlignVCenter
- height: UIStyle.fontSizeXL
- font.bold: stateSwitch.checked
- font.pixelSize: stateSwitch.checked ? UIStyle.fontSizeXL : UIStyle.fontSizeL
- font.letterSpacing: 4
- color: UIStyle.themeColorQtGray1
- }
-
- Text {
- id: nameLabel
- text: model.name
- anchors.horizontalCenter: parent.horizontalCenter
- font.pixelSize: UIStyle.fontSizeS
- font.italic: true
- font.bold: true
- font.letterSpacing: 1
- color: UIStyle.themeColorQtGray2
- }
- }
- }
- }
- }
-
- QQC2.PageIndicator {
- count: svAlarmsContainer.count
- currentIndex: svAlarmsContainer.currentIndex
-
- anchors.bottom: svAlarmsContainer.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/DemoMode.qml b/examples/quickcontrols/wearable/qml/DemoMode.qml
deleted file mode 100644
index d7d4b6e61f..0000000000
--- a/examples/quickcontrols/wearable/qml/DemoMode.qml
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright (C) 2018 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls
-
-import "Style"
-
-Item {
- property StackView stackView
-
- SequentialAnimation {
- id: demoModeAnimation
- running: settings.demoMode
-
- // Set brightness back to normal.
- ScriptAction { script: settings.brightness = 0 }
-
- // Go back to the launcher page.
- PauseAnimation { duration: 1000 }
- ScriptAction { script: stackView.pop(null) }
- PauseAnimation { duration: 2000 }
-
- // Open the world clock page.
- ScriptAction { script: stackView.currentItem.launched(Qt.resolvedUrl("WorldClock/WorldClockPage.qml")) }
- PauseAnimation { duration: 2000 }
-
- // Swipe across a few times.
- SequentialAnimation {
- loops: 6
-
- ScriptAction { script: stackView.currentItem.children[0].incrementCurrentIndex() }
- PauseAnimation { duration: 2500 }
- }
-
-
- // Go back to the launcher page.
- ScriptAction { script: stackView.pop(null) }
- PauseAnimation { duration: 2000 }
-
- // Open the navigation page.
- ScriptAction { script: stackView.currentItem.incrementCurrentIndex() }
- PauseAnimation { duration: 1000 }
- ScriptAction { script: stackView.currentItem.launched(Qt.resolvedUrl("Navigation/NavigationPage.qml")) }
- PauseAnimation { duration: 2000 }
-
- // Flick down a few times.
- SequentialAnimation {
- loops: 6
-
- ScriptAction { script: stackView.currentItem.routeListView.incrementCurrentIndex() }
- PauseAnimation { duration: 2000 }
- }
-
-
- // Go back to the launcher page.
- ScriptAction { script: stackView.pop(null) }
- PauseAnimation { duration: 2000 }
-
- // Open the weather page.
- ScriptAction { script: stackView.currentItem.incrementCurrentIndex() }
- PauseAnimation { duration: 1000 }
- ScriptAction { script: stackView.currentItem.launched(Qt.resolvedUrl("Weather/WeatherPage.qml")) }
- PauseAnimation { duration: 2000 }
-
- // Swipe across a few times.
- SequentialAnimation {
- loops: 4
-
- ScriptAction { script: stackView.currentItem.children[0].incrementCurrentIndex() }
- PauseAnimation { duration: 2000 }
- }
-
-
- // Go back to the launcher page.
- ScriptAction { script: stackView.pop(null) }
- PauseAnimation { duration: 2000 }
-
- // Open the fitness page.
- ScriptAction { script: stackView.currentItem.incrementCurrentIndex() }
- PauseAnimation { duration: 1000 }
- ScriptAction { script: stackView.currentItem.launched(Qt.resolvedUrl("Fitness/FitnessPage.qml")) }
- PauseAnimation { duration: 2000 }
-
- // Swipe across a few times.
- SequentialAnimation {
- loops: 2
-
- ScriptAction { script: stackView.currentItem.children[0].incrementCurrentIndex() }
- PauseAnimation { duration: 2000 }
- }
-
-
- // Go back to the launcher page.
- ScriptAction { script: stackView.pop(null) }
- PauseAnimation { duration: 2000 }
-
- // Open the notifications page.
- ScriptAction { script: stackView.currentItem.incrementCurrentIndex() }
- PauseAnimation { duration: 1000 }
- ScriptAction { script: stackView.currentItem.launched(Qt.resolvedUrl("Notifications/NotificationsPage.qml")) }
-
- // Flick down a few times.
- SequentialAnimation {
- loops: 3
-
- PauseAnimation { duration: 2000 }
- ScriptAction { script: stackView.currentItem.incrementCurrentIndex() }
- }
-
-
- // Go back to the launcher page.
- ScriptAction { script: stackView.pop(null) }
- PauseAnimation { duration: 2000 }
-
- // Open the alarms page.
- ScriptAction { script: stackView.currentItem.incrementCurrentIndex() }
- PauseAnimation { duration: 1000 }
- ScriptAction { script: stackView.currentItem.launched(Qt.resolvedUrl("Alarms/AlarmsPage.qml")) }
- PauseAnimation { duration: 2000 }
-
- // Toggle the switch.
- ScriptAction { script: stackView.currentItem.children[0].currentItem.stateSwitch.toggle() }
- PauseAnimation { duration: 2000 }
-
- // Go to the next alarm.
- ScriptAction { script: stackView.currentItem.children[0].incrementCurrentIndex() }
- PauseAnimation { duration: 2000 }
-
- // Toggle the switch there too.
- ScriptAction { script: stackView.currentItem.children[0].currentItem.stateSwitch.toggle() }
- PauseAnimation { duration: 2000 }
-
-
- // Go back to the launcher page.
- ScriptAction { script: stackView.pop(null) }
- PauseAnimation { duration: 2000 }
-
- // Open the settings page.
- ScriptAction { script: stackView.currentItem.incrementCurrentIndex() }
- PauseAnimation { duration: 1000 }
- ScriptAction { script: stackView.currentItem.launched(Qt.resolvedUrl("Settings/SettingsPage.qml")) }
- PauseAnimation { duration: 3000 }
-
- // Toggle the switches.
- ScriptAction { script: stackView.currentItem.children[0].currentItem.bluetoothSwitch.toggle() }
- PauseAnimation { duration: 1000 }
- ScriptAction { script: stackView.currentItem.children[0].currentItem.wirelessSwitch.toggle() }
- PauseAnimation { duration: 3000 }
-
- // Go to the next page.
- ScriptAction { script: stackView.currentItem.children[0].incrementCurrentIndex() }
-
- // Play with the brightness slider.
- // First, set it to full brightness so we start in the correct state.
- ScriptAction {
- script: {
- var brightnessSlider = stackView.currentItem.children[0].currentItem.brightnessSlider
- brightnessSlider.value = 0
- // increase()/decrease() are not a result of user interaction and
- // hence moved() will not be emitted, so we do it ourselves.
- brightnessSlider.moved()
- }
- }
-
- // Decrease the brightness.
- SequentialAnimation {
- loops: 3
-
- PauseAnimation { duration: 1000 }
- ScriptAction {
- script: {
- var brightnessSlider = stackView.currentItem.children[0].currentItem.brightnessSlider
- brightnessSlider.decrease()
- brightnessSlider.moved()
- }
- }
- }
-
- // Increase the brightness back to full.
- PauseAnimation { duration: 3000 }
- SequentialAnimation {
- loops: 3
-
- PauseAnimation { duration: 1000 }
- ScriptAction {
- script: {
- var brightnessSlider = stackView.currentItem.children[0].currentItem.brightnessSlider
- brightnessSlider.increase()
- brightnessSlider.moved()
- }
- }
- }
-
- // Toggle the dark theme switch.
- PauseAnimation { duration: 2000 }
- ScriptAction {
- script: {
- var darkThemeSwitch = stackView.currentItem.children[0].currentItem.darkThemeSwitch
- darkThemeSwitch.toggle()
- // As above, only proper user interaction results in toggled() being emitted,
- // so we do it ourselves.
- darkThemeSwitch.toggled()
- }
- }
- PauseAnimation { duration: 4000 }
-
- // Go back to the launcher page.
- ScriptAction { script: stackView.pop(null) }
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/DemoModeIndicator.qml b/examples/quickcontrols/wearable/qml/DemoModeIndicator.qml
deleted file mode 100644
index 977c600653..0000000000
--- a/examples/quickcontrols/wearable/qml/DemoModeIndicator.qml
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2018 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls as QQC2
-import "Style"
-
-Item {
- id: root
- width: row.implicitWidth + margins * 2
-
- readonly property int topMargin: 24
- readonly property int margins: 12
-
- Behavior on y {
- NumberAnimation {}
- }
-
- Rectangle {
- id: demoModeIndicatorBg
- anchors.fill: parent
- anchors.topMargin: -topMargin
- radius: 20
- color: UIStyle.colorRed
- }
-
- Row {
- id: row
- spacing: 8
- anchors.fill: parent
- anchors.leftMargin: margins
- anchors.rightMargin: margins
-
- Image {
- source: "Settings/images/demo-mode-white.png"
- width: height
- height: instructionLabel.height * 2
- anchors.verticalCenter: parent.verticalCenter
- }
- QQC2.Label {
- id: instructionLabel
- text: "Tap screen to use"
- color: UIStyle.colorQtGray10
- anchors.verticalCenter: parent.verticalCenter
- }
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/Fitness/FitnessPage.qml b/examples/quickcontrols/wearable/qml/Fitness/FitnessPage.qml
deleted file mode 100644
index c1047de9aa..0000000000
--- a/examples/quickcontrols/wearable/qml/Fitness/FitnessPage.qml
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls as QQC2
-import ".."
-import "../Style"
-import "fitness.js" as FitnessData
-
-Item {
- QQC2.SwipeView {
- id: svFitnessContainer
-
- anchors.fill: parent
-
- SwipeViewPage {
- id: fitnessPage1
-
- Column {
- anchors.centerIn: parent
- spacing: 15
-
- Text {
- anchors.horizontalCenter: parent.horizontalCenter
- text: qsTr("Steps: ") + FitnessData.getSteps()
- font.italic: true
- font.pixelSize: UIStyle.fontSizeM
- color: UIStyle.themeColorQtGray1
- }
- Image {
- anchors.horizontalCenter: parent.horizontalCenter
- source: UIStyle.themeImagePath("images/man-walking")
- }
- Text {
- anchors.horizontalCenter: parent.horizontalCenter
- text: qsTr("Calories: ") + FitnessData.getCalories()
- font.pixelSize: UIStyle.fontSizeS
- font.italic: true
- color: UIStyle.themeColorQtGray3
- }
- }
- }
-
- SwipeViewPage {
- id: fitnessPage2
-
- Column {
- anchors.centerIn: parent
- spacing: 15
-
- Text {
- anchors.horizontalCenter: parent.horizontalCenter
- text: qsTr("Distance: ")
- + FitnessData.getDistance()
- + qsTr(" miles")
- font.italic: true
- font.pixelSize: UIStyle.fontSizeM
- color: UIStyle.themeColorQtGray1
- }
- Image {
- anchors.horizontalCenter: parent.horizontalCenter
- source: UIStyle.themeImagePath("images/man-running")
- }
- Text {
- anchors.horizontalCenter: parent.horizontalCenter
- text: qsTr("Time: ")
- + FitnessData.getTime()
- + qsTr(" mins")
- font.pixelSize: UIStyle.fontSizeS
- font.italic: true
- color: UIStyle.themeColorQtGray3
- }
- }
- }
- }
-
- QQC2.PageIndicator {
- count: svFitnessContainer.count
- currentIndex: svFitnessContainer.currentIndex
-
- anchors.bottom: svFitnessContainer.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/Fitness/fitness.js b/examples/quickcontrols/wearable/qml/Fitness/fitness.js
deleted file mode 100644
index 95ce06cdc1..0000000000
--- a/examples/quickcontrols/wearable/qml/Fitness/fitness.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-function getSteps() {
- return 105;
-}
-
-function getCalories() {
- return 150;
-}
-
-function getDistance() {
- return 10;
-}
-
-function getTime() {
- return "00:30";
-}
diff --git a/examples/quickcontrols/wearable/qml/Fitness/images/man-running-dark.png b/examples/quickcontrols/wearable/qml/Fitness/images/man-running-dark.png
deleted file mode 100644
index 6c791d6170..0000000000
--- a/examples/quickcontrols/wearable/qml/Fitness/images/man-running-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Fitness/images/man-running-dark@2x.png b/examples/quickcontrols/wearable/qml/Fitness/images/man-running-dark@2x.png
deleted file mode 100644
index e9abae9de4..0000000000
--- a/examples/quickcontrols/wearable/qml/Fitness/images/man-running-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Fitness/images/man-running-light.png b/examples/quickcontrols/wearable/qml/Fitness/images/man-running-light.png
deleted file mode 100644
index e7eef12cb3..0000000000
--- a/examples/quickcontrols/wearable/qml/Fitness/images/man-running-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Fitness/images/man-running-light@2x.png b/examples/quickcontrols/wearable/qml/Fitness/images/man-running-light@2x.png
deleted file mode 100644
index 79861f5718..0000000000
--- a/examples/quickcontrols/wearable/qml/Fitness/images/man-running-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Fitness/images/man-walking-dark.png b/examples/quickcontrols/wearable/qml/Fitness/images/man-walking-dark.png
deleted file mode 100644
index 6d455b4925..0000000000
--- a/examples/quickcontrols/wearable/qml/Fitness/images/man-walking-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Fitness/images/man-walking-dark@2x.png b/examples/quickcontrols/wearable/qml/Fitness/images/man-walking-dark@2x.png
deleted file mode 100644
index a3ac08baf3..0000000000
--- a/examples/quickcontrols/wearable/qml/Fitness/images/man-walking-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Fitness/images/man-walking-light.png b/examples/quickcontrols/wearable/qml/Fitness/images/man-walking-light.png
deleted file mode 100644
index f963f8897b..0000000000
--- a/examples/quickcontrols/wearable/qml/Fitness/images/man-walking-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Fitness/images/man-walking-light@2x.png b/examples/quickcontrols/wearable/qml/Fitness/images/man-walking-light@2x.png
deleted file mode 100644
index 1b4d7592d6..0000000000
--- a/examples/quickcontrols/wearable/qml/Fitness/images/man-walking-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/LauncherPage.qml b/examples/quickcontrols/wearable/qml/LauncherPage.qml
deleted file mode 100644
index 4017a81c57..0000000000
--- a/examples/quickcontrols/wearable/qml/LauncherPage.qml
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls as QQC2
-import "Style"
-
-PathView {
- id: circularView
-
- signal launched(string page)
-
- readonly property int cX: width / 2
- readonly property int cY: height / 2
- readonly property int itemSize: size / 4
- readonly property int size: Math.min(width - 80, height)
- readonly property int radius: size / 2 - itemSize / 3
-
- snapMode: PathView.SnapToItem
-
- model: ListModel {
- ListElement {
- title: qsTr("World Clock")
- icon: "worldclock"
- page: "WorldClock/WorldClockPage.qml"
- }
- ListElement {
- title: qsTr("Navigation")
- icon: "navigation"
- page: "Navigation/NavigationPage.qml"
- }
- ListElement {
- title: qsTr("Weather")
- icon: "weather"
- page: "Weather/WeatherPage.qml"
- }
- ListElement {
- title: qsTr("Fitness")
- icon: "fitness"
- page: "Fitness/FitnessPage.qml"
- }
- ListElement {
- title: qsTr("Notifications")
- icon: "notifications"
- page: "Notifications/NotificationsPage.qml"
- }
- ListElement {
- title: qsTr("Alarm")
- icon: "alarms"
- page: "Alarms/AlarmsPage.qml"
- }
- ListElement {
- title: qsTr("Settings")
- icon: "settings"
- page: "Settings/SettingsPage.qml"
- }
- }
-
- delegate: QQC2.RoundButton {
- width: circularView.itemSize
- height: circularView.itemSize
-
- property string title: model.title
-
- icon.width: 36
- icon.height: 36
- icon.name: model.icon
- opacity: PathView.itemOpacity
- padding: 12
-
- background: Rectangle {
- radius: width / 2
- border.width: 3
- border.color: parent.PathView.isCurrentItem ? UIStyle.colorQtPrimGreen : UIStyle.themeColorQtGray4
- }
-
- onClicked: {
- if (PathView.isCurrentItem)
- circularView.launched(Qt.resolvedUrl(page))
- else
- circularView.currentIndex = index
- }
- }
-
- path: Path {
- startX: circularView.cX
- startY: circularView.cY
- PathAttribute {
- name: "itemOpacity"
- value: 1.0
- }
- PathLine {
- x: circularView.cX + circularView.radius
- y: circularView.cY
- }
- PathAttribute {
- name: "itemOpacity"
- value: 0.7
- }
- PathArc {
- x: circularView.cX - circularView.radius
- y: circularView.cY
- radiusX: circularView.radius
- radiusY: circularView.radius
- useLargeArc: true
- direction: PathArc.Clockwise
- }
- PathAttribute {
- name: "itemOpacity"
- value: 0.5
- }
- PathArc {
- x: circularView.cX + circularView.radius
- y: circularView.cY
- radiusX: circularView.radius
- radiusY: circularView.radius
- useLargeArc: true
- direction: PathArc.Clockwise
- }
- PathAttribute {
- name: "itemOpacity"
- value: 0.3
- }
- }
-
- Text {
- id: appTitle
-
- property Item currentItem: circularView.currentItem
-
- visible: currentItem ? currentItem.PathView.itemOpacity === 1.0 : 0
-
- text: currentItem ? currentItem.title : ""
- anchors.centerIn: parent
- anchors.verticalCenterOffset: (circularView.itemSize + height) / 2
-
- font.bold: true
- font.pixelSize: circularView.itemSize / 3
- font.letterSpacing: 1
- color: UIStyle.themeColorQtGray1
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/NaviButton.qml b/examples/quickcontrols/wearable/qml/NaviButton.qml
deleted file mode 100644
index 3c1c30fb7f..0000000000
--- a/examples/quickcontrols/wearable/qml/NaviButton.qml
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls as QQC2
-import "Style"
-
-QQC2.AbstractButton {
- id: button
-
- property int edge: Qt.TopEdge
- property alias imageSource: image.source
-
- contentItem: Image {
- id: image
- fillMode: Image.Pad
- sourceSize { width: 40; height: 40 } // ### TODO: resize the image
- }
-
- background: Rectangle {
- height: button.height * 4
- width: height
- radius: width / 2
-
- anchors.horizontalCenter: button.horizontalCenter
- anchors.top: edge === Qt.BottomEdge ? button.top : undefined
- anchors.bottom: edge === Qt.TopEdge ? button.bottom : undefined
-
- color: UIStyle.colorQtGray2
- }
-
- transform: Translate {
- Behavior on y { NumberAnimation { } }
- y: enabled ? 0 : edge === Qt.TopEdge ? -button.height : button.height
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/Navigation/NavigationPage.qml b/examples/quickcontrols/wearable/qml/Navigation/NavigationPage.qml
deleted file mode 100644
index f9fdd61b47..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/NavigationPage.qml
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import "../Style"
-import "navigation.js" as NavigationData
-
-Item {
- property alias routeListView: routeView
-
- Column {
- anchors.fill: parent
- anchors.margins: 2
- spacing: 2
-
- Rectangle {
- anchors.horizontalCenter: parent.horizontalCenter
- width: parent.width
- height: titleRow.height
-
- color: UIStyle.themeColorQtGray9
-
- Row {
- id: titleRow
- spacing: 10
- anchors.centerIn: parent
-
- Image {
- anchors.verticalCenter: parent.verticalCenter
- source: UIStyle.themeImagePath("images/navigation")
- fillMode: Image.PreserveAspectCrop
- }
- Text {
- anchors.verticalCenter: parent.verticalCenter
- text: qsTr("Walking")
- font.pixelSize: UIStyle.fontSizeM
- font.letterSpacing: 2
- color: UIStyle.themeColorQtGray2
- }
- }
- }
-
- ListModel {
- id: routeModel
- }
-
- ListView {
- id: routeView
-
- width: parent.width
- height: parent.height - titleRow.height - parent.spacing
- property var imageList: [UIStyle.themeImagePath("images/straight"),
- UIStyle.themeImagePath("images/leftturn"),
- UIStyle.themeImagePath("images/rightturn"),
- "images/uturn.png",
- "images/start.png",
- "images/end.png"]
-
- clip: true
- focus: true
- boundsBehavior: Flickable.StopAtBounds
- snapMode: ListView.SnapToItem
- model: routeModel
- delegate: RouteElement {
- width: routeView.width
- height: routeView.height
- }
- }
- }
- Component.onCompleted: {
- NavigationData.requestNavigationRoute(routeModel)
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/Navigation/RouteElement.qml b/examples/quickcontrols/wearable/qml/Navigation/RouteElement.qml
deleted file mode 100644
index dd4aebbb2f..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/RouteElement.qml
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import "../Style"
-
-Rectangle {
- color: UIStyle.themeColorQtGray8
-
- Row {
- spacing: 5
- width: parent.width - 80
- anchors.centerIn: parent
-
- Image {
- id: img
- anchors.verticalCenter: parent.verticalCenter
- source: navImage
- fillMode: Image.PreserveAspectFit
- }
-
- Column {
- spacing: 5
- width: parent.width - img.width
- anchors.verticalCenter: parent.verticalCenter
-
- Text {
- width: parent.width
- wrapMode: Text.WordWrap
- text: navInstruction
- font.pixelSize: UIStyle.fontSizeS
- verticalAlignment: Text.AlignVCenter
- padding: 1
- color: UIStyle.themeColorQtGray1
- }
-
- Text {
- width: parent.width
- wrapMode: Text.WordWrap
- text: navAuxInfo
- font.pixelSize: UIStyle.fontSizeXS
- verticalAlignment: Text.AlignVCenter
- padding: 1
- color: UIStyle.themeColorQtGray2
- }
- }
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/end.png b/examples/quickcontrols/wearable/qml/Navigation/images/end.png
deleted file mode 100644
index 4805ad8207..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/end.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/end@2x.png b/examples/quickcontrols/wearable/qml/Navigation/images/end@2x.png
deleted file mode 100644
index e91d537465..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/end@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/leftturn-dark.png b/examples/quickcontrols/wearable/qml/Navigation/images/leftturn-dark.png
deleted file mode 100644
index 66d258f5ac..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/leftturn-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/leftturn-dark@2x.png b/examples/quickcontrols/wearable/qml/Navigation/images/leftturn-dark@2x.png
deleted file mode 100644
index 639deb81cf..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/leftturn-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/leftturn-light.png b/examples/quickcontrols/wearable/qml/Navigation/images/leftturn-light.png
deleted file mode 100644
index 1346e8eaff..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/leftturn-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/leftturn-light@2x.png b/examples/quickcontrols/wearable/qml/Navigation/images/leftturn-light@2x.png
deleted file mode 100644
index 268a6283f9..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/leftturn-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/marker.png b/examples/quickcontrols/wearable/qml/Navigation/images/marker.png
deleted file mode 100644
index 4805ad8207..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/marker.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/navigation-dark.png b/examples/quickcontrols/wearable/qml/Navigation/images/navigation-dark.png
deleted file mode 100644
index b80b7b610f..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/navigation-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/navigation-dark@2x.png b/examples/quickcontrols/wearable/qml/Navigation/images/navigation-dark@2x.png
deleted file mode 100644
index b198aa3d9a..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/navigation-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/navigation-light.png b/examples/quickcontrols/wearable/qml/Navigation/images/navigation-light.png
deleted file mode 100644
index 08e73005fd..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/navigation-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/navigation-light@2x.png b/examples/quickcontrols/wearable/qml/Navigation/images/navigation-light@2x.png
deleted file mode 100644
index 7d4a62b9e1..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/navigation-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/rightturn-dark.png b/examples/quickcontrols/wearable/qml/Navigation/images/rightturn-dark.png
deleted file mode 100644
index 6a779dadc4..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/rightturn-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/rightturn-dark@2x.png b/examples/quickcontrols/wearable/qml/Navigation/images/rightturn-dark@2x.png
deleted file mode 100644
index 13143c2e2c..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/rightturn-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/rightturn-light.png b/examples/quickcontrols/wearable/qml/Navigation/images/rightturn-light.png
deleted file mode 100644
index a6be08c1a1..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/rightturn-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/rightturn-light@2x.png b/examples/quickcontrols/wearable/qml/Navigation/images/rightturn-light@2x.png
deleted file mode 100644
index 58f04b5052..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/rightturn-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/start.png b/examples/quickcontrols/wearable/qml/Navigation/images/start.png
deleted file mode 100644
index 41de60e60c..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/start.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/start@2x.png b/examples/quickcontrols/wearable/qml/Navigation/images/start@2x.png
deleted file mode 100644
index 6fe3ba9dbd..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/start@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/straight-dark.png b/examples/quickcontrols/wearable/qml/Navigation/images/straight-dark.png
deleted file mode 100644
index 3f4ab66430..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/straight-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/straight-dark@2x.png b/examples/quickcontrols/wearable/qml/Navigation/images/straight-dark@2x.png
deleted file mode 100644
index f5baa6da42..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/straight-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/straight-light.png b/examples/quickcontrols/wearable/qml/Navigation/images/straight-light.png
deleted file mode 100644
index 1321b97aa5..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/straight-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/straight-light@2x.png b/examples/quickcontrols/wearable/qml/Navigation/images/straight-light@2x.png
deleted file mode 100644
index a2d3c4c2ab..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/straight-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/uturn.png b/examples/quickcontrols/wearable/qml/Navigation/images/uturn.png
deleted file mode 100644
index 596046ca9a..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/uturn.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/images/uturn@2x.png b/examples/quickcontrols/wearable/qml/Navigation/images/uturn@2x.png
deleted file mode 100644
index 659f103573..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/images/uturn@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Navigation/navigation.js b/examples/quickcontrols/wearable/qml/Navigation/navigation.js
deleted file mode 100644
index e82cccbea5..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/navigation.js
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-function requestNavigationRoute(rModel) {
- var xhr = new XMLHttpRequest;
- xhr.open("GET", "walk_route.json");
- xhr.onreadystatechange = function () {
- if (xhr.readyState === XMLHttpRequest.DONE) {
- var a = JSON.parse(xhr.responseText);
- var steps = a.routes[0].legs[0].steps;
-
- for (var step in steps) {
- var maneuver = steps[step].maneuver;
- var duration = steps[step].duration;
- var distance = steps[step].distance;
-
- rModel.append({
- navInstruction: maneuver.instruction,
- navImage: getNavigationImage(
- maneuver.type,
- maneuver.modifier,
- routeView.imageList),
- navAuxInfo: getAuxInfo(distance,
- duration)
- });
- }
- }
- }
- xhr.send();
-}
-
-function getNavigationImage(maneuverType, maneuverModifier, imageList) {
- var imageToReturn;
- if (maneuverType === "depart") {
- imageToReturn = imageList[4];
- } else if (maneuverType === "arrive") {
- imageToReturn = imageList[5];
- } else if (maneuverType === "turn") {
- if (maneuverModifier.search("left") >= 0)
- imageToReturn = imageList[1];
- else if (maneuverModifier.search("right") >= 0)
- imageToReturn = imageList[2];
- else
- imageToReturn = imageList[0];
- } else {
- if (maneuverModifier === "uturn") {
- imageToReturn = imageList[3];
- } else {
- imageToReturn = imageList[0];
- }
- }
-
- return imageToReturn;
-}
-
-function getAuxInfo(distInMeters, timeInSecs) {
- var distance = convertDistance(distInMeters);
- if (distance.length > 0)
- return "Distance: " + distance + "\nTime: " + formatSeconds(
- timeInSecs);
- else
- return "";
-}
-
-function convertDistance(meter) {
- var dist = "";
- var feet = (meter * 0.3048).toPrecision(6);
- var miles = (meter * 0.000621371).toPrecision(6);
-
- if (Math.floor(miles) > 1) {
- dist += Math.floor(miles) + " mi";
- feet = ((miles - Math.floor(miles)) * 0.3048).toPrecision(6);
- }
- if (Math.floor(feet) > 1)
- dist += Math.floor(feet) + " ft";
-
- return dist
-}
-
-function formatSeconds(seconds) {
- var date = new Date(1970, 0, 1);
- date.setSeconds(seconds);
- return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
-}
diff --git a/examples/quickcontrols/wearable/qml/Navigation/walk_route.json b/examples/quickcontrols/wearable/qml/Navigation/walk_route.json
deleted file mode 100644
index e69b5cc187..0000000000
--- a/examples/quickcontrols/wearable/qml/Navigation/walk_route.json
+++ /dev/null
@@ -1 +0,0 @@
-{"routes":[{"legs":[{"steps":[{"intersections":[{"out":0,"entry":[true],"bearings":[144],"location":[-122.394553,37.795984]},{"out":1,"location":[-122.393896,37.795268],"bearings":[60,150,225,330],"entry":[true,true,true,false],"in":3},{"out":1,"location":[-122.393179,37.79453],"bearings":[60,135,180,225,315],"entry":[true,true,true,true,false],"in":4},{"out":1,"location":[-122.393072,37.79443],"bearings":[45,135,225,315],"entry":[true,true,true,false],"in":3},{"out":1,"location":[-122.392787,37.79415],"bearings":[60,135,315],"entry":[true,true,false],"in":2},{"out":1,"location":[-122.392537,37.793915],"bearings":[45,135,225,315],"entry":[true,true,true,false],"in":3},{"out":0,"location":[-122.392448,37.793831],"bearings":[135,225,315],"entry":[true,true,false],"in":2}],"geometry":"{_ueF|d`jVRQdB}ARQh@g@XUVWVW^a@RUv@w@l@q@PQNQ","maneuver":{"bearing_after":144,"location":[-122.394553,37.795984],"bearing_before":0,"type":"depart","instruction":"Head southeast on The Embarcadero"},"duration":230.8,"distance":314.8,"name":"The Embarcadero","mode":"walking"},{"intersections":[{"out":2,"location":[-122.392361,37.793748],"bearings":[45,135,225,315],"entry":[true,true,true,false],"in":3}],"geometry":"}qteFfw_jVHJBDHJ","maneuver":{"bearing_after":225,"type":"turn","modifier":"right","bearing_before":140,"location":[-122.392361,37.793748],"instruction":"Turn right"},"duration":13.2,"distance":18.5,"name":"","mode":"walking"},{"intersections":[{"out":1,"location":[-122.39251,37.793631],"bearings":[45,135,225,315],"entry":[false,true,true,true],"in":0},{"out":1,"location":[-122.391284,37.792459],"bearings":[45,150,225,330],"entry":[true,true,true,false],"in":3},{"out":1,"location":[-122.391217,37.792342],"bearings":[45,165,225,330],"entry":[true,true,true,false],"in":3},{"out":1,"location":[-122.391165,37.792231],"bearings":[45,165,225,345],"entry":[true,true,true,false],"in":3},{"out":0,"location":[-122.390884,37.791536],"bearings":[150,285,345],"entry":[true,true,false],"in":2},{"out":1,"location":[-122.390254,37.790827],"bearings":[45,135,210,315],"entry":[true,true,true,false],"in":3},{"out":1,"location":[-122.390144,37.790745],"bearings":[45,135,225,315],"entry":[true,true,true,false],"in":3},{"out":1,"location":[-122.390038,37.790665],"bearings":[45,135,240,315],"entry":[true,true,true,false],"in":3},{"out":0,"location":[-122.389245,37.790036],"bearings":[135,225,315],"entry":[true,true,false],"in":2},{"out":1,"location":[-122.38871,37.789596],"bearings":[45,150,210,315],"entry":[true,true,true,false],"in":3},{"out":1,"location":[-122.388618,37.789494],"bearings":[45,150,225,330],"entry":[true,true,true,false],"in":3},{"out":1,"location":[-122.388527,37.789394],"bearings":[45,150,225,330],"entry":[true,true,true,false],"in":3},{"out":1,"location":[-122.388005,37.787907],"bearings":[0,180,270],"entry":[false,true,true],"in":0},{"out":1,"location":[-122.387985,37.787622],"bearings":[0,180,240],"entry":[false,true,true],"in":0},{"out":2,"location":[-122.388005,37.787197],"bearings":[0,90,180,270],"entry":[false,true,true,true],"in":0},{"out":2,"location":[-122.388015,37.787093],"bearings":[0,90,180,270],"entry":[false,true,true,true],"in":0},{"out":2,"location":[-122.388022,37.786994],"bearings":[0,90,180,285],"entry":[false,true,true,true],"in":0},{"out":1,"location":[-122.388163,37.785186],"bearings":[0,180,315],"entry":[false,true,true],"in":0},{"out":1,"location":[-122.388184,37.784944],"bearings":[0,180,315],"entry":[false,true,true],"in":0},{"out":2,"location":[-122.388191,37.784855],"bearings":[0,90,180,270],"entry":[false,true,true,true],"in":0},{"out":2,"location":[-122.388198,37.784748],"bearings":[0,90,180,270],"entry":[false,true,true,true],"in":0},{"out":2,"location":[-122.388207,37.784633],"bearings":[0,90,180,270],"entry":[false,true,true,true],"in":0},{"out":2,"location":[-122.388309,37.783373],"bearings":[0,60,180,270],"entry":[false,true,true,true],"in":0},{"out":1,"location":[-122.388376,37.782545],"bearings":[0,180,315],"entry":[false,true,true],"in":0},{"out":1,"location":[-122.388394,37.782316],"bearings":[0,180,315],"entry":[false,true,true],"in":0}],"geometry":"eqteFdx_jVf@k@\\a@|@iAV[FGJMPOTOPKDAPITItAa@r@WXOXQXSTUTWRYNUNS|B}CdAwAPSTQRQ\\W^Q\\KZIrB]^EPCH?\\CZ?Z?\\?XBT@R?~IZF?H@f@@N@T@V@zFRbDLl@@pADV@","maneuver":{"bearing_after":139,"type":"turn","modifier":"left","bearing_before":226,"location":[-122.39251,37.793631],"instruction":"Turn left onto The Embarcadero"},"duration":1055.9,"distance":1450.3,"name":"The Embarcadero","mode":"walking"},{"intersections":[{"out":2,"location":[-122.388431,37.781791],"bearings":[0,90,180,285],"entry":[false,true,true,true],"in":0},{"out":2,"location":[-122.389672,37.779922],"bearings":[45,135,225,315],"entry":[false,true,true,true],"in":0},{"out":1,"location":[-122.390803,37.77905],"bearings":[45,225,315],"entry":[false,true,true],"in":0},{"out":2,"location":[-122.391916,37.778155],"bearings":[45,135,225,315],"entry":[false,true,true,true],"in":0},{"out":2,"location":[-122.393073,37.777251],"bearings":[45,75,225,315],"entry":[false,true,true,true],"in":0}],"geometry":"egreFt~~iVR@bABXDVDXHVNXNXVVZp@|@z@hAnCvDLRNTHLFJbArAzApBdB`CTZZb@\\b@@@pCvD","maneuver":{"bearing_after":183,"type":"new name","modifier":"straight","bearing_before":183,"location":[-122.388431,37.781791],"instruction":"Continue straight onto King Street"},"duration":567.4,"distance":782.5,"name":"King Street","mode":"walking"},{"intersections":[{"out":3,"location":[-122.394003,37.776513],"bearings":[45,135,225,300],"entry":[false,true,true,true],"in":0},{"out":2,"location":[-122.394218,37.776486],"bearings":[45,135,225,315],"entry":[false,true,true,true],"in":0}],"geometry":"efqeFna`jVGJ?NJNNR","maneuver":{"bearing_after":313,"type":"turn","modifier":"straight","bearing_before":225,"location":[-122.394003,37.776513],"instruction":"Go straight"},"duration":26.1,"distance":36.2,"name":"","mode":"walking"},{"intersections":[{"out":2,"location":[-122.394321,37.776405],"bearings":[45,180,315],"entry":[false,true,true],"in":0},{"out":1,"location":[-122.394729,37.776487],"bearings":[45,180],"entry":[false,true],"in":0}],"geometry":"qeqeFnc`jVe@p@A@V\\DF","maneuver":{"bearing_after":315,"type":"turn","modifier":"right","bearing_before":225,"location":[-122.394321,37.776405],"instruction":"Turn right"},"duration":39.9,"distance":55.6,"name":"","mode":"walking"},{"intersections":[{"in":0,"entry":[true],"bearings":[45],"location":[-122.394768,37.776455]}],"geometry":"{eqeFhf`jV","maneuver":{"bearing_after":0,"type":"arrive","modifier":"straight","bearing_before":225,"location":[-122.394729,37.776487],"instruction":"You have arrived at your destination, straight ahead"},"duration":0,"distance":0,"name":"","mode":"walking"}],"summary":"The Embarcadero, King Street","duration":1933.3,"distance":2657.8}],"geometry":"{_ueF|d`jV|LuLV\\`EyElHaD~I_LvB_AdGk@he@|AbBd@bZl`@R~@g@r@\\d@","duration":1933.3,"distance":2657.8}],"waypoints":[{"name":"The Embarcadero","location":[-122.394553,37.795984]},{"name":"","location":[-122.394768,37.776455]}],"code":"Ok"}
diff --git a/examples/quickcontrols/wearable/qml/Notifications/NotificationsPage.qml b/examples/quickcontrols/wearable/qml/Notifications/NotificationsPage.qml
deleted file mode 100644
index 6cbf2d92cf..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/NotificationsPage.qml
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls as QQC2
-import "../Style"
-import "notifications.js" as NotificationData
-
-ListView {
- id: missedCallsView
-
- clip: true
- focus: true
- boundsBehavior: Flickable.StopAtBounds
- snapMode: ListView.SnapToItem
-
- model: ListModel {
- id: missedCallsList
- }
-
- Image {
- id: missedCallIcon
- width: parent.width / 2
- anchors.right: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
- source: UIStyle.themeImagePath("images/missedcall")
- fillMode: Image.Pad
- }
-
- delegate: Item {
- height: missedCallsView.height
- width: missedCallsView.width / 2
- anchors.left: missedCallsView.contentItem.horizontalCenter
-
- Column {
- spacing: 15
- anchors.verticalCenter: parent.verticalCenter
-
- Image {
- anchors.horizontalCenter: parent.horizontalCenter
- source: qsTr("images/avatar%1-%2.png").arg(model.gender).arg(UIStyle.darkTheme ? "dark" : "light")
- }
-
- Text {
- text: model.name
- anchors.horizontalCenter: parent.horizontalCenter
- font.bold: true
- font.pixelSize: UIStyle.fontSizeS
- color: UIStyle.themeColorQtGray1
- }
-
- Text {
- anchors.horizontalCenter: parent.horizontalCenter
- text: date + " " + time
- font.pixelSize: UIStyle.fontSizeXS
- font.italic: true
- color: UIStyle.themeColorQtGray2
- }
- }
- }
-
- Component.onCompleted: {
- NotificationData.populateData(missedCallsList)
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/Notifications/images/avatarf-dark.png b/examples/quickcontrols/wearable/qml/Notifications/images/avatarf-dark.png
deleted file mode 100644
index 37bc1f291b..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/images/avatarf-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Notifications/images/avatarf-dark@2x.png b/examples/quickcontrols/wearable/qml/Notifications/images/avatarf-dark@2x.png
deleted file mode 100644
index efcd7cba74..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/images/avatarf-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Notifications/images/avatarf-light.png b/examples/quickcontrols/wearable/qml/Notifications/images/avatarf-light.png
deleted file mode 100644
index e38b260724..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/images/avatarf-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Notifications/images/avatarf-light@2x.png b/examples/quickcontrols/wearable/qml/Notifications/images/avatarf-light@2x.png
deleted file mode 100644
index 1f28beac6c..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/images/avatarf-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Notifications/images/avatarm-dark.png b/examples/quickcontrols/wearable/qml/Notifications/images/avatarm-dark.png
deleted file mode 100644
index 5a2a394d8c..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/images/avatarm-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Notifications/images/avatarm-dark@2x.png b/examples/quickcontrols/wearable/qml/Notifications/images/avatarm-dark@2x.png
deleted file mode 100644
index 1a19b0fc8e..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/images/avatarm-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Notifications/images/avatarm-light.png b/examples/quickcontrols/wearable/qml/Notifications/images/avatarm-light.png
deleted file mode 100644
index f0fc7a9606..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/images/avatarm-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Notifications/images/avatarm-light@2x.png b/examples/quickcontrols/wearable/qml/Notifications/images/avatarm-light@2x.png
deleted file mode 100644
index 64a0f1f9ac..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/images/avatarm-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Notifications/images/missedcall-dark.png b/examples/quickcontrols/wearable/qml/Notifications/images/missedcall-dark.png
deleted file mode 100644
index 26bcf98ad3..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/images/missedcall-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Notifications/images/missedcall-dark@2x.png b/examples/quickcontrols/wearable/qml/Notifications/images/missedcall-dark@2x.png
deleted file mode 100644
index 5eb54ce809..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/images/missedcall-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Notifications/images/missedcall-light.png b/examples/quickcontrols/wearable/qml/Notifications/images/missedcall-light.png
deleted file mode 100644
index 641e1f0c43..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/images/missedcall-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Notifications/images/missedcall-light@2x.png b/examples/quickcontrols/wearable/qml/Notifications/images/missedcall-light@2x.png
deleted file mode 100644
index e8d2d81c9a..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/images/missedcall-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Notifications/notifications.js b/examples/quickcontrols/wearable/qml/Notifications/notifications.js
deleted file mode 100644
index 62f46e0a0b..0000000000
--- a/examples/quickcontrols/wearable/qml/Notifications/notifications.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-function populateData(listData) {
- listData.append({
- name: "John Doe",
- gender: "m",
- date: "02/15/2017",
- time: "09:20 am"
- });
-
- listData.append({
- name: "Jane Worldege",
- gender: "f",
- date: "02/06/2017",
- time: "10:15 am"
- });
-
- listData.append({
- name: "Jennifer Wang",
- gender: "f",
- date: "02/03/2017",
- time: "05:16 pm"
- });
-}
diff --git a/examples/quickcontrols/wearable/qml/Settings/SettingsPage.qml b/examples/quickcontrols/wearable/qml/Settings/SettingsPage.qml
deleted file mode 100644
index 68fb17990d..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/SettingsPage.qml
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls as QQC2
-import ".."
-import "../Style"
-
-Item {
-
- QQC2.SwipeView {
- id: svSettingsContainer
-
- anchors.fill: parent
-
- SwipeViewPage {
- id: settingsPage1
-
- property alias bluetoothSwitch: bluetoothSwitch
- property alias wirelessSwitch: wirelessSwitch
-
- Column {
- anchors.centerIn: parent
- spacing: 25
-
- Row {
- spacing: 50
- Image {
- anchors.verticalCenter: parent.verticalCenter
- source: UIStyle.themeImagePath("images/bluetooth")
- }
- QQC2.Switch {
- id: bluetoothSwitch
- anchors.verticalCenter: parent.verticalCenter
- checked: settings.bluetooth
- onToggled: settings.bluetooth = checked
- }
- }
- Row {
- spacing: 50
- Image {
- anchors.verticalCenter: parent.verticalCenter
- source: UIStyle.themeImagePath("images/wifi")
- }
- QQC2.Switch {
- id: wirelessSwitch
- anchors.verticalCenter: parent.verticalCenter
- checked: settings.wireless
- onToggled: settings.wireless = checked
- }
- }
- }
- }
-
- SwipeViewPage {
- id: settingsPage2
-
- property alias brightnessSlider: brightnessSlider
- property alias darkThemeSwitch: darkThemeSwitch
-
- Column {
- anchors.centerIn: parent
- spacing: 2
-
- Column {
- Image {
- anchors.horizontalCenter: parent.horizontalCenter
- source: UIStyle.themeImagePath("images/brightness")
- }
- QQC2.Slider {
- id: brightnessSlider
- anchors.horizontalCenter: parent.horizontalCenter
- from: 0
- to: 5
- stepSize: 1
- value: settings.brightness
- onMoved: settings.brightness = value
- }
- }
- Column {
- anchors.horizontalCenter: parent.horizontalCenter
-
- Image {
- anchors.horizontalCenter: parent.horizontalCenter
- source: UIStyle.themeImagePath("images/theme")
- }
- QQC2.Switch {
- id: darkThemeSwitch
- anchors.horizontalCenter: parent.horizontalCenter
- checked: settings.darkTheme
- onToggled: settings.darkTheme = checked
- }
- }
- }
- }
-
- SwipeViewPage {
- id: settingsPage3
-
- Column {
- anchors.centerIn: parent
-
- Column {
- anchors.horizontalCenter: parent.horizontalCenter
- spacing: 6
-
- Image {
- anchors.horizontalCenter: parent.horizontalCenter
- source: UIStyle.themeImagePath("images/demo-mode")
- }
- QQC2.Switch {
- id: demoModeSwitch
- anchors.horizontalCenter: parent.horizontalCenter
- checked: settings.demoMode
- onToggled: settings.demoMode = checked
- }
- }
- }
- }
- }
-
- QQC2.PageIndicator {
- count: svSettingsContainer.count
- currentIndex: svSettingsContainer.currentIndex
-
- anchors.bottom: svSettingsContainer.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/bluetooth-dark.png b/examples/quickcontrols/wearable/qml/Settings/images/bluetooth-dark.png
deleted file mode 100644
index 0f1f4d0a54..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/bluetooth-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/bluetooth-dark@2x.png b/examples/quickcontrols/wearable/qml/Settings/images/bluetooth-dark@2x.png
deleted file mode 100644
index 7496fc5685..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/bluetooth-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/bluetooth-light.png b/examples/quickcontrols/wearable/qml/Settings/images/bluetooth-light.png
deleted file mode 100644
index 6e297cfab3..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/bluetooth-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/bluetooth-light@2x.png b/examples/quickcontrols/wearable/qml/Settings/images/bluetooth-light@2x.png
deleted file mode 100644
index 62d084032f..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/bluetooth-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/brightness-dark.png b/examples/quickcontrols/wearable/qml/Settings/images/brightness-dark.png
deleted file mode 100644
index f9eb07b583..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/brightness-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/brightness-dark@2x.png b/examples/quickcontrols/wearable/qml/Settings/images/brightness-dark@2x.png
deleted file mode 100644
index 3efc5a6c4b..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/brightness-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/brightness-light.png b/examples/quickcontrols/wearable/qml/Settings/images/brightness-light.png
deleted file mode 100644
index ce3023b565..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/brightness-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/brightness-light@2x.png b/examples/quickcontrols/wearable/qml/Settings/images/brightness-light@2x.png
deleted file mode 100644
index dc01aae1fd..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/brightness-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-dark.png b/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-dark.png
deleted file mode 100644
index e93c417d79..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-dark@2x.png b/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-dark@2x.png
deleted file mode 100644
index faa1bf6d11..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-light.png b/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-light.png
deleted file mode 100644
index c38d146d37..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-light@2x.png b/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-light@2x.png
deleted file mode 100644
index b9d6409cbc..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-white.png b/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-white.png
deleted file mode 100644
index aac8ef3f6c..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-white.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-white@2x.png b/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-white@2x.png
deleted file mode 100644
index b4d8954f5d..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode-white@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode.svg b/examples/quickcontrols/wearable/qml/Settings/images/demo-mode.svg
deleted file mode 100644
index ad1ce44873..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/demo-mode.svg
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<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"
- width="64"
- height="64"
- viewBox="0 0 16.933333 16.933333"
- version="1.1"
- id="svg8"
- inkscape:version="0.92.3 (d244b95, 2018-08-02)"
- sodipodi:docname="demo-mode.svg"
- inkscape:export-filename="/home/mitch/dev/qt5.12/qtquickcontrols2/examples/quickcontrols2/wearable/qml/Settings/images/demo-mode-light@2x.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <defs
- id="defs2" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="15.839192"
- inkscape:cx="26.498574"
- inkscape:cy="25.685519"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="true"
- units="px"
- fit-margin-top="1"
- fit-margin-left="1"
- fit-margin-right="1"
- fit-margin-bottom="1"
- inkscape:window-width="3706"
- inkscape:window-height="2031"
- inkscape:window-x="134"
- inkscape:window-y="55"
- inkscape:window-maximized="1"
- inkscape:snap-global="false">
- <inkscape:grid
- type="xygrid"
- id="grid3713"
- originx="-0.0070880335"
- originy="-280.58354" />
- </sodipodi:namedview>
- <metadata
- id="metadata5">
- <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 />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-0.00708803,0.51688025)">
- <path
- style="fill:#141f3a;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 1.6489221,4.3034973 h 0.7205171 v 7.0102767 c 0.01422,0.27678 0.1921164,0.348966 0.392741,0.392741 H 14.169383 c 0.276028,-0.04241 0.382882,-0.208883 0.423747,-0.423747 V 4.3094031 h 0.692464 v 7.0279949 c -0.111554,0.831949 -0.589986,1.000696 -1.104399,1.104399 H 9.3324693 l 2.2589977,2.258998 c -0.0189,0.375139 -0.204956,0.516261 -0.501999,0.502 L 8.8304698,12.943797 v 1.972563 c -0.051861,0.342631 -0.6681357,0.36382 -0.7323291,0 V 12.949702 L 5.8391425,15.208701 C 5.5142667,15.206145 5.3522558,15.056484 5.3725781,14.742136 L 7.7172116,12.397503 H 2.7415096 C 2.1429244,12.357576 1.6879444,12.049089 1.6444927,11.300486 Z"
- id="path826"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccccccccccccc" />
- <rect
- style="fill:#141f3a;fill-opacity:1;stroke:none;stroke-width:0.2619375;stroke-miterlimit:4;stroke-dasharray:0.523875, 0.2619375;stroke-dashoffset:0"
- id="rect828"
- width="16.044523"
- height="1.9126476"
- x="0.441401"
- y="2.0340116"
- rx="1.0583333"
- ry="1.0583333" />
- <path
- style="fill:#141f3a;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 7.8323763,1.681278 V 1.1615701 c 0.1987987,-0.67546179 1.0821701,-0.66495897 1.2992931,0 V 1.681278 Z"
- id="path830"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- </g>
-</svg>
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/theme-dark.png b/examples/quickcontrols/wearable/qml/Settings/images/theme-dark.png
deleted file mode 100644
index d4c4a8c094..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/theme-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/theme-dark@2x.png b/examples/quickcontrols/wearable/qml/Settings/images/theme-dark@2x.png
deleted file mode 100644
index 30d8c6de28..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/theme-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/theme-light.png b/examples/quickcontrols/wearable/qml/Settings/images/theme-light.png
deleted file mode 100644
index e7a0771b94..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/theme-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/theme-light@2x.png b/examples/quickcontrols/wearable/qml/Settings/images/theme-light@2x.png
deleted file mode 100644
index 83bc878b03..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/theme-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/theme.svg b/examples/quickcontrols/wearable/qml/Settings/images/theme.svg
deleted file mode 100644
index bf3f1e57d7..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/theme.svg
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<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"
- width="64"
- height="64"
- viewBox="0 0 16.933333 16.933333"
- version="1.1"
- id="svg8"
- inkscape:version="0.92.3 (2405546, 2018-03-11)"
- sodipodi:docname="theme.svg"
- inkscape:export-filename="C:\dev\qt5.11\qtquickcontrols2\examples\quickcontrols2\wearable\qml\Settings\images\theme@2x.png"
- inkscape:export-xdpi="192"
- inkscape:export-ydpi="192">
- <defs
- id="defs2" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="7.9195959"
- inkscape:cx="-11.371874"
- inkscape:cy="28.405259"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="true"
- units="px"
- fit-margin-top="1"
- fit-margin-left="1"
- fit-margin-right="1"
- fit-margin-bottom="1"
- inkscape:window-width="3840"
- inkscape:window-height="2066"
- inkscape:window-x="-11"
- inkscape:window-y="-11"
- inkscape:window-maximized="1"
- inkscape:snap-global="false">
- <inkscape:grid
- type="xygrid"
- id="grid3713"
- originx="-0.0070880335"
- originy="-280.58354" />
- </sodipodi:namedview>
- <metadata
- id="metadata5">
- <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 />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-0.00708803,0.51688025)">
- <path
- style="fill:#141f3a;fill-opacity:1;stroke:none;stroke-width:0.25668776px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 2.7296861,14.56437 H 12.831038 C 13.464556,14.411157 15.01089,14.101758 15.231756,11.825604 15.232242,10.48538 13.96701,8.4813248 11.69084,9.0467292 10.687852,7.3630573 9.1232541,7.2558172 8.2817051,7.654427 6.9050791,4.9744381 2.9222535,5.8560797 2.9703307,8.9435956 1.7108806,9.1004362 0.37826375,9.7182846 0.27167137,11.745388 0.31660717,13.546059 1.5831259,14.350467 2.7296861,14.56437 Z"
- id="path4535"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc" />
- <path
- style="fill:#141f3a;fill-opacity:1;stroke:none;stroke-width:0.25668776px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 11.392726,0.92763044 C 8.8246143,2.2754379 7.9809615,4.3443829 8.9780532,7.1830936 10.167295,7.1426991 11.108291,7.6664967 11.822182,8.7064442 12.799984,8.6194307 13.765772,8.6795708 14.658208,9.6382815 15.605885,9.3257847 16.200803,8.852941 16.675838,8.325607 13.735088,9.4033595 8.6151974,5.957728 11.392726,0.92763044 Z"
- id="path4537"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc" />
- </g>
-</svg>
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/wifi-dark.png b/examples/quickcontrols/wearable/qml/Settings/images/wifi-dark.png
deleted file mode 100644
index 14bfe8f5c8..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/wifi-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/wifi-dark@2x.png b/examples/quickcontrols/wearable/qml/Settings/images/wifi-dark@2x.png
deleted file mode 100644
index b70d04290b..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/wifi-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/wifi-light.png b/examples/quickcontrols/wearable/qml/Settings/images/wifi-light.png
deleted file mode 100644
index 2de34118a7..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/wifi-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Settings/images/wifi-light@2x.png b/examples/quickcontrols/wearable/qml/Settings/images/wifi-light@2x.png
deleted file mode 100644
index 64b5f1725c..0000000000
--- a/examples/quickcontrols/wearable/qml/Settings/images/wifi-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Style/PageIndicator.qml b/examples/quickcontrols/wearable/qml/Style/PageIndicator.qml
deleted file mode 100644
index 593b50afb5..0000000000
--- a/examples/quickcontrols/wearable/qml/Style/PageIndicator.qml
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Templates as T
-import "."
-
-T.PageIndicator {
- id: control
-
- implicitWidth: contentItem.implicitWidth + leftPadding + rightPadding
- implicitHeight: contentItem.implicitHeight + topPadding + bottomPadding
-
- spacing: 6
- padding: 6
- bottomPadding: 7
-
- delegate: Rectangle {
- implicitWidth: 8
- implicitHeight: 8
-
- radius: width / 2
- color: UIStyle.themeColorQtGray3
-
- opacity: index === control.currentIndex ? 1.0 : 0.35
-
- Behavior on opacity {
- OpacityAnimator {
- duration: 100
- }
- }
- }
-
- contentItem: Row {
- spacing: control.spacing
-
- Repeater {
- model: control.count
- delegate: control.delegate
- }
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/Style/Slider.qml b/examples/quickcontrols/wearable/qml/Style/Slider.qml
deleted file mode 100644
index 79c664280f..0000000000
--- a/examples/quickcontrols/wearable/qml/Style/Slider.qml
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Templates as T
-import "."
-
-T.Slider {
- id: control
-
- implicitWidth: 200
- implicitHeight: 26
-
- handle: Rectangle {
- x: control.visualPosition * (control.width - width)
- y: (control.height - height) / 2
- width: 20
- height: 15
-
- radius: 5
- color: control.pressed ? "#f0f0f0" : "#f6f6f6"
- border.color: UIStyle.themeColorQtGray7
- }
-
- background: Rectangle {
- y: (control.height - height) / 2
- height: 4
- radius: 2
- color: UIStyle.themeColorQtGray3
-
- Rectangle {
- width: control.visualPosition * parent.width
- height: parent.height
- color: UIStyle.colorQtAuxGreen2
- radius: 2
- }
- }
-}
-
diff --git a/examples/quickcontrols/wearable/qml/Style/Switch.qml b/examples/quickcontrols/wearable/qml/Style/Switch.qml
deleted file mode 100644
index 6219bf231e..0000000000
--- a/examples/quickcontrols/wearable/qml/Style/Switch.qml
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Templates as T
-import "."
-
-T.Switch {
- id: control
-
- implicitWidth: 48
- implicitHeight: 26
-
- indicator: Rectangle {
- x: control.visualPosition * (control.width - width)
- y: (control.height - height) / 2
- width: 26
- height: 26
-
- radius: 13
- color: control.down ? UIStyle.themeColorQtGray6 : UIStyle.themeColorQtGray10
- border.color: !control.checked ? "#999999"
- : (control.down ? UIStyle.colorQtAuxGreen2
- : UIStyle.colorQtAuxGreen1)
-
- Behavior on x {
- enabled: !control.pressed
- SmoothedAnimation { velocity: 200 }
- }
- }
-
- background: Rectangle {
- radius: 13
- color: control.checked ? UIStyle.colorQtAuxGreen2 : UIStyle.colorRed
- border.color: control.checked ? UIStyle.colorQtAuxGreen2
- : UIStyle.themeColorQtGray6
- }
-}
-
diff --git a/examples/quickcontrols/wearable/qml/Style/UIStyle.qml b/examples/quickcontrols/wearable/qml/Style/UIStyle.qml
deleted file mode 100644
index 524b8394f5..0000000000
--- a/examples/quickcontrols/wearable/qml/Style/UIStyle.qml
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-
-pragma Singleton
-
-QtObject {
- id: uiStyle
-
- // Font Sizes
- readonly property int fontSizeXXS: 10
- readonly property int fontSizeXS: 15
- readonly property int fontSizeS: 20
- readonly property int fontSizeM: 25
- readonly property int fontSizeL: 30
- readonly property int fontSizeXL: 35
- readonly property int fontSizeXXL: 40
-
- // Color Scheme
- // Green
- readonly property color colorQtPrimGreen: "#41cd52"
- readonly property color colorQtAuxGreen1: "#21be2b"
- readonly property color colorQtAuxGreen2: "#17a81a"
-
- // Red
- readonly property color colorRed: "#e6173d"
-
- // Gray
- readonly property color colorQtGray1: "#09102b"
- readonly property color colorQtGray2: "#222840"
- readonly property color colorQtGray3: "#3a4055"
- readonly property color colorQtGray4: "#53586b"
- readonly property color colorQtGray5: "#53586b"
- readonly property color colorQtGray6: "#848895"
- readonly property color colorQtGray7: "#9d9faa"
- readonly property color colorQtGray8: "#b5b7bf"
- readonly property color colorQtGray9: "#cecfd5"
- readonly property color colorQtGray10: "#f3f3f4"
-
- // Light/dark versions of the colors above.
- // Some UI elements always use a specific color regardless of theme,
- // which is why we have both sets: so that those elements don't need to hard-code the hex string.
- readonly property color themeColorQtGray1: darkTheme ? colorQtGray10 : colorQtGray1
- readonly property color themeColorQtGray2: darkTheme ? colorQtGray9 : colorQtGray2
- readonly property color themeColorQtGray3: darkTheme ? colorQtGray8 : colorQtGray3
- readonly property color themeColorQtGray4: darkTheme ? colorQtGray7 : colorQtGray4
- readonly property color themeColorQtGray5: darkTheme ? colorQtGray6 : colorQtGray5
- readonly property color themeColorQtGray6: darkTheme ? colorQtGray5 : colorQtGray6
- readonly property color themeColorQtGray7: darkTheme ? colorQtGray4 : colorQtGray7
- readonly property color themeColorQtGray8: darkTheme ? colorQtGray3 : colorQtGray8
- readonly property color themeColorQtGray9: darkTheme ? colorQtGray2 : colorQtGray9
- readonly property color themeColorQtGray10: darkTheme ? colorQtGray1 : colorQtGray10
-
- property bool darkTheme: false
-
- function themeImagePath(baseImagePath) {
- return baseImagePath + (darkTheme ? "-dark" : "-light") + ".png"
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/Style/qmldir b/examples/quickcontrols/wearable/qml/Style/qmldir
deleted file mode 100644
index a04072bed6..0000000000
--- a/examples/quickcontrols/wearable/qml/Style/qmldir
+++ /dev/null
@@ -1 +0,0 @@
-singleton UIStyle 1.0 UIStyle.qml
diff --git a/examples/quickcontrols/wearable/qml/Weather/WeatherPage.qml b/examples/quickcontrols/wearable/qml/Weather/WeatherPage.qml
deleted file mode 100644
index d110fabdf9..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/WeatherPage.qml
+++ /dev/null
@@ -1,250 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls as QQC2
-import ".."
-import "../Style"
-import "weather.js" as WeatherData
-
-Item {
- QQC2.SwipeView {
- id: svWeatherContainer
-
- anchors.fill: parent
-
- SwipeViewPage {
- id: weatherPage1
-
- Row {
- anchors.centerIn: parent
- spacing: 2
-
- Image {
- anchors.verticalCenter: parent.verticalCenter
- source: UIStyle.themeImagePath("images/temperature")
- }
-
- Column {
- anchors.verticalCenter: parent.verticalCenter
- spacing: 40
-
- Text {
- text: (wDataCntr.weatherData
- && wDataCntr.weatherData.main
- && wDataCntr.weatherData.main.temp) ?
- qsTr("Avg: ")
- + String(wDataCntr.weatherData.main.temp)
- + " °F" : "N/A"
- font.pixelSize: UIStyle.fontSizeM
- font.letterSpacing: 1
- color: UIStyle.themeColorQtGray1
- }
-
- Text {
- text: (wDataCntr.weatherData
- && wDataCntr.weatherData.main
- && wDataCntr.weatherData.main.temp_min) ?
- qsTr("Min: ")
- + String(wDataCntr.weatherData.main.temp_min)
- + " °F" : "N/A"
- font.pixelSize: UIStyle.fontSizeM
- font.letterSpacing: 1
- color: UIStyle.themeColorQtGray1
- }
-
- Text {
- text: (wDataCntr.weatherData
- && wDataCntr.weatherData.main
- && wDataCntr.weatherData.main.temp_max) ?
- qsTr("Max: ")
- + String(wDataCntr.weatherData.main.temp_max)
- + " °F " : "N/A"
- font.pixelSize: UIStyle.fontSizeM
- font.letterSpacing: 1
- color: UIStyle.themeColorQtGray1
- }
- }
- }
- }
-
- SwipeViewPage {
- id: weatherPage2
-
- Column {
- spacing: 40
- anchors.centerIn: parent
-
- Row {
- spacing: 20
- anchors.horizontalCenter: parent.horizontalCenter
-
- Image {
- id: wImg
- anchors.verticalCenter: parent.verticalCenter
- source: UIStyle.themeImagePath("images/wind")
- }
-
- Text {
- anchors.verticalCenter: parent.verticalCenter
- text: (wDataCntr.weatherData
- && wDataCntr.weatherData.wind
- && wDataCntr.weatherData.wind.speed) ?
- String(wDataCntr.weatherData.wind.speed)
- + " mph" : "N/A"
- font.pixelSize: UIStyle.fontSizeM
- font.letterSpacing: 1
- color: UIStyle.themeColorQtGray1
- }
- }
-
- Row {
- spacing: 20
- anchors.horizontalCenter: parent.horizontalCenter
-
- Image {
- id: hImg
- anchors.verticalCenter: parent.verticalCenter
- source: UIStyle.themeImagePath("images/humidity")
- }
-
- Text {
- anchors.verticalCenter: parent.verticalCenter
- text: (wDataCntr.weatherData
- && wDataCntr.weatherData.main
- && wDataCntr.weatherData.main.humidity) ?
- String(wDataCntr.weatherData.main.humidity)
- + " %" : "N/A"
- font.pixelSize: UIStyle.fontSizeM
- font.letterSpacing: 1
- color: UIStyle.themeColorQtGray1
- }
- }
- }
- }
-
- SwipeViewPage {
- id: weatherPage3
-
- Row {
- anchors.centerIn: parent
- spacing: 10
-
- Image {
- anchors.verticalCenter: parent.verticalCenter
- source: UIStyle.themeImagePath("images/pressure")
- }
-
- Column {
- anchors.verticalCenter: parent.verticalCenter
- spacing: 40
-
- Text {
- anchors.horizontalCenter: parent.horizontalCenter
- text: (wDataCntr.weatherData
- && wDataCntr.weatherData.main
- && wDataCntr.weatherData.main.pressure) ?
- String(wDataCntr.weatherData.main.pressure)
- + " hPa" : "N/A"
- font.pixelSize: UIStyle.fontSizeM
- font.letterSpacing: 1
- color: UIStyle.themeColorQtGray1
- }
-
- Text {
- anchors.horizontalCenter: parent.horizontalCenter
- text: (wDataCntr.weatherData
- && wDataCntr.weatherData.main
- && wDataCntr.weatherData.main.sea_level) ?
- String(wDataCntr.weatherData.main.sea_level)
- + " hPa" : "N/A"
- font.pixelSize: UIStyle.fontSizeM
- font.letterSpacing: 1
- color: UIStyle.themeColorQtGray1
- }
-
- Text {
- anchors.horizontalCenter: parent.horizontalCenter
- text: (wDataCntr.weatherData
- && wDataCntr.weatherData.main
- && wDataCntr.weatherData.main.grnd_level) ?
- String(wDataCntr.weatherData.main.grnd_level)
- + " hPa" : "N/A"
- font.pixelSize: UIStyle.fontSizeM
- font.letterSpacing: 1
- color: UIStyle.themeColorQtGray1
- }
- }
- }
- }
-
- SwipeViewPage {
- id: weatherPage4
-
- Column {
- spacing: 40
- anchors.centerIn: parent
-
- Row {
- spacing: 30
- anchors.horizontalCenter: parent.horizontalCenter
-
- Image {
- anchors.verticalCenter: parent.verticalCenter
- source: UIStyle.themeImagePath("images/sunrise")
- }
-
- Text {
- anchors.verticalCenter: parent.verticalCenter
- text: (wDataCntr.weatherData
- && wDataCntr.weatherData.sys
- && wDataCntr.weatherData.sys.sunrise) ?
- WeatherData.getTimeHMS(wDataCntr.weatherData.sys.sunrise)
- : "N/A"
- font.pixelSize: UIStyle.fontSizeM
- font.letterSpacing: 1
- color: UIStyle.themeColorQtGray1
- }
- }
-
- Row {
- spacing: 30
- anchors.horizontalCenter: parent.horizontalCenter
-
- Image {
- anchors.verticalCenter: parent.verticalCenter
- source: UIStyle.themeImagePath("images/sunset")
- }
-
- Text {
- anchors.verticalCenter: parent.verticalCenter
- text: (wDataCntr.weatherData
- && wDataCntr.weatherData.sys
- && wDataCntr.weatherData.sys.sunset) ?
- WeatherData.getTimeHMS(wDataCntr.weatherData.sys.sunset)
- : "N/A"
- font.pixelSize: UIStyle.fontSizeM
- font.letterSpacing: 1
- color: UIStyle.themeColorQtGray1
- }
- }
- }
- }
- }
-
- QtObject {
- id: wDataCntr
- property var weatherData
- }
-
- QQC2.PageIndicator {
- count: svWeatherContainer.count
- currentIndex: svWeatherContainer.currentIndex
-
- anchors.bottom: svWeatherContainer.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- }
- Component.onCompleted: {
- WeatherData.requestWeatherData(wDataCntr)
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/humidity-dark.png b/examples/quickcontrols/wearable/qml/Weather/images/humidity-dark.png
deleted file mode 100644
index 5d82238cdb..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/humidity-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/humidity-dark@2x.png b/examples/quickcontrols/wearable/qml/Weather/images/humidity-dark@2x.png
deleted file mode 100644
index d83bb4f00c..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/humidity-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/humidity-light.png b/examples/quickcontrols/wearable/qml/Weather/images/humidity-light.png
deleted file mode 100644
index 5f3bf714e6..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/humidity-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/humidity-light@2x.png b/examples/quickcontrols/wearable/qml/Weather/images/humidity-light@2x.png
deleted file mode 100644
index a23364c52c..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/humidity-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/pressure-dark.png b/examples/quickcontrols/wearable/qml/Weather/images/pressure-dark.png
deleted file mode 100644
index b2870a55a6..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/pressure-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/pressure-dark@2x.png b/examples/quickcontrols/wearable/qml/Weather/images/pressure-dark@2x.png
deleted file mode 100644
index 061f9b8266..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/pressure-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/pressure-light.png b/examples/quickcontrols/wearable/qml/Weather/images/pressure-light.png
deleted file mode 100644
index 7b1b158734..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/pressure-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/pressure-light@2x.png b/examples/quickcontrols/wearable/qml/Weather/images/pressure-light@2x.png
deleted file mode 100644
index 1a40c6422a..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/pressure-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/sunrise-dark.png b/examples/quickcontrols/wearable/qml/Weather/images/sunrise-dark.png
deleted file mode 100644
index 9cac22e1e1..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/sunrise-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/sunrise-dark@2x.png b/examples/quickcontrols/wearable/qml/Weather/images/sunrise-dark@2x.png
deleted file mode 100644
index fe32682386b..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/sunrise-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/sunrise-light.png b/examples/quickcontrols/wearable/qml/Weather/images/sunrise-light.png
deleted file mode 100644
index f67a5dff34..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/sunrise-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/sunrise-light@2x.png b/examples/quickcontrols/wearable/qml/Weather/images/sunrise-light@2x.png
deleted file mode 100644
index 86f5483761..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/sunrise-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/sunset-dark.png b/examples/quickcontrols/wearable/qml/Weather/images/sunset-dark.png
deleted file mode 100644
index 0068d30539..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/sunset-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/sunset-dark@2x.png b/examples/quickcontrols/wearable/qml/Weather/images/sunset-dark@2x.png
deleted file mode 100644
index e515bcc37c..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/sunset-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/sunset-light.png b/examples/quickcontrols/wearable/qml/Weather/images/sunset-light.png
deleted file mode 100644
index 495f78a786..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/sunset-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/sunset-light@2x.png b/examples/quickcontrols/wearable/qml/Weather/images/sunset-light@2x.png
deleted file mode 100644
index d220e829d1..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/sunset-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/temperature-dark.png b/examples/quickcontrols/wearable/qml/Weather/images/temperature-dark.png
deleted file mode 100644
index a207d9440d..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/temperature-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/temperature-dark@2x.png b/examples/quickcontrols/wearable/qml/Weather/images/temperature-dark@2x.png
deleted file mode 100644
index c0e4ef39bf..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/temperature-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/temperature-light.png b/examples/quickcontrols/wearable/qml/Weather/images/temperature-light.png
deleted file mode 100644
index c4f7b61c2e..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/temperature-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/temperature-light@2x.png b/examples/quickcontrols/wearable/qml/Weather/images/temperature-light@2x.png
deleted file mode 100644
index 50d4f4c43c..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/temperature-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/wind-dark.png b/examples/quickcontrols/wearable/qml/Weather/images/wind-dark.png
deleted file mode 100644
index 6a530491af..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/wind-dark.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/wind-dark@2x.png b/examples/quickcontrols/wearable/qml/Weather/images/wind-dark@2x.png
deleted file mode 100644
index 487e3e78a3..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/wind-dark@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/wind-light.png b/examples/quickcontrols/wearable/qml/Weather/images/wind-light.png
deleted file mode 100644
index 97824bee8f..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/wind-light.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/images/wind-light@2x.png b/examples/quickcontrols/wearable/qml/Weather/images/wind-light@2x.png
deleted file mode 100644
index 7f94bd8542..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/images/wind-light@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/Weather/weather.js b/examples/quickcontrols/wearable/qml/Weather/weather.js
deleted file mode 100644
index c08fd96e9e..0000000000
--- a/examples/quickcontrols/wearable/qml/Weather/weather.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-function requestWeatherData(cntr) {
- var xhr = new XMLHttpRequest;
- xhr.open("GET", "weather.json");
- xhr.onreadystatechange = function () {
- if (xhr.readyState === XMLHttpRequest.DONE) {
- cntr.weatherData = JSON.parse(xhr.responseText)
- }
- }
- xhr.send();
-}
-
-function getTimeHMS(utcTime) {
- var date = new Date(utcTime * 1000);
- // Hours part from the timestamp
- var hours = date.getHours();
- var ampm = Math.floor((hours / 12)) ? " PM" : " AM";
- hours = (hours % 12);
-
- // Minutes part from the timestamp
- var minutes = "0" + date.getMinutes();
- // Seconds part from the timestamp
- var seconds = "0" + date.getSeconds();
-
- // Will display time in 10:30:23 format
- return hours % 12 + ':' + minutes.substr(-2) + ':' + seconds.substr(-2)
- + ampm;
-}
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/Clock.qml b/examples/quickcontrols/wearable/qml/WorldClock/Clock.qml
deleted file mode 100644
index e89489b045..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/Clock.qml
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls as QQC2
-import ".."
-import "../Style"
-
-SwipeViewPage {
- id: clock
-
- property int hours
- property int minutes
- property int seconds
- property real shift: timeShift
- property bool night: false
- property bool internationalTime: true //Unset for local time
-
- function getWatchFaceImage(imageName) {
- return "images/" + imageName
- }
-
- function timeChanged() {
- var date = new Date
- hours = internationalTime ? date.getUTCHours() + Math.floor(
- clock.shift) : date.getHours()
- night = (hours < 7 || hours > 19)
- minutes = internationalTime ?
- date.getUTCMinutes() + ((clock.shift % 1) * 60) : date.getMinutes()
- seconds = date.getUTCSeconds()
- }
-
- Timer {
- interval: 100
- running: true
- repeat: true
- onTriggered: clock.timeChanged()
- }
-
- Item {
- anchors.centerIn: parent
-
- width: 200
- height: 220
-
- Rectangle {
- color: clock.night ? UIStyle.colorQtGray1 : UIStyle.colorQtGray10
- radius: width / 2
- width: parent.width
- height: parent.width
- }
-
- Image {
- id: background
- source: getWatchFaceImage("swissdaydial.png")
- visible: clock.night == false
- }
- Image {
- source: getWatchFaceImage("swissnightdial.png")
- visible: clock.night == true
- }
-
- Image {
- x: 92.5
- y: 27
- source: getWatchFaceImage(clock.night ?
- "swissnighthour.png"
- : "swissdayhour.png")
- transform: Rotation {
- id: hourRotation
- origin.x: 7.5
- origin.y: 73
- angle: (clock.hours * 30) + (clock.minutes * 0.5)
- Behavior on angle {
- SpringAnimation {
- spring: 2
- damping: 0.2
- modulus: 360
- }
- }
- }
- }
-
- Image {
- x: 93.5
- y: 17
- source: getWatchFaceImage(clock.night ?
- "swissnightminute.png"
- : "swissdayminute.png")
- transform: Rotation {
- id: minuteRotation
- origin.x: 6.5
- origin.y: 83
- angle: clock.minutes * 6
- Behavior on angle {
- SpringAnimation {
- spring: 2
- damping: 0.2
- modulus: 360
- }
- }
- }
- }
-
- Image {
- x: 97.5
- y: 20
- source: getWatchFaceImage("second.png")
- transform: Rotation {
- id: secondRotation
- origin.x: 2.5
- origin.y: 80
- angle: clock.seconds * 6
- Behavior on angle {
- SpringAnimation {
- spring: 2
- damping: 0.2
- modulus: 360
- }
- }
- }
- }
-
- Image {
- anchors.centerIn: background
- source: getWatchFaceImage("center.png")
- }
-
- Text {
- id: cityLabel
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 2
- anchors.horizontalCenter: parent.horizontalCenter
-
- text: cityName
- color: UIStyle.themeColorQtGray1
- font.pixelSize: UIStyle.fontSizeXS
- font.letterSpacing: 2
- }
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/WorldClockPage.qml b/examples/quickcontrols/wearable/qml/WorldClock/WorldClockPage.qml
deleted file mode 100644
index 34a51da5cf..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/WorldClockPage.qml
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (C) 2017 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtQuick
-import QtQuick.Controls as QQC2
-import "../Style"
-
-Item {
- QQC2.SwipeView {
- id: svWatchContainer
-
- anchors.fill: parent
-
- ListModel {
- id: placesList
- ListElement {
- cityName: "New York"
- timeShift: -4
- }
- ListElement {
- cityName: "London"
- timeShift: 0
- }
- ListElement {
- cityName: "Oslo"
- timeShift: 1
- }
- ListElement {
- cityName: "Mumbai"
- timeShift: 5.5
- }
- ListElement {
- cityName: "Tokyo"
- timeShift: 9
- }
- ListElement {
- cityName: "Brisbane"
- timeShift: 10
- }
- ListElement {
- cityName: "Los Angeles"
- timeShift: -8
- }
- }
-
- Repeater {
- model: placesList
- delegate: Clock {
- }
- }
- }
-
- QQC2.PageIndicator {
- count: svWatchContainer.count
- currentIndex: svWatchContainer.currentIndex
-
- anchors.bottom: svWatchContainer.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- }
-}
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/center.png b/examples/quickcontrols/wearable/qml/WorldClock/images/center.png
deleted file mode 100644
index 0dec43a0aa..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/center.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/center@2x.png b/examples/quickcontrols/wearable/qml/WorldClock/images/center@2x.png
deleted file mode 100644
index dffc5d60e4..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/center@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/clock-night.png b/examples/quickcontrols/wearable/qml/WorldClock/images/clock-night.png
deleted file mode 100644
index 2de330243a..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/clock-night.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/clock-night@2x.png b/examples/quickcontrols/wearable/qml/WorldClock/images/clock-night@2x.png
deleted file mode 100644
index f675acea69..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/clock-night@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/clock.png b/examples/quickcontrols/wearable/qml/WorldClock/images/clock.png
deleted file mode 100644
index 686fb8c2f7..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/clock.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/second.png b/examples/quickcontrols/wearable/qml/WorldClock/images/second.png
deleted file mode 100644
index 1e64f357df..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/second.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/second@2x.png b/examples/quickcontrols/wearable/qml/WorldClock/images/second@2x.png
deleted file mode 100644
index cebc1deb06..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/second@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/swissdaydial.png b/examples/quickcontrols/wearable/qml/WorldClock/images/swissdaydial.png
deleted file mode 100644
index 0e6321537a..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/swissdaydial.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/swissdaydial@2x.png b/examples/quickcontrols/wearable/qml/WorldClock/images/swissdaydial@2x.png
deleted file mode 100644
index ed5de8c646..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/swissdaydial@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/swissdayhour.png b/examples/quickcontrols/wearable/qml/WorldClock/images/swissdayhour.png
deleted file mode 100644
index 4a835ac3f0..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/swissdayhour.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/swissdayhour@2x.png b/examples/quickcontrols/wearable/qml/WorldClock/images/swissdayhour@2x.png
deleted file mode 100644
index 70f3fa0eee..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/swissdayhour@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/swissdayminute.png b/examples/quickcontrols/wearable/qml/WorldClock/images/swissdayminute.png
deleted file mode 100644
index 048acc7b3f..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/swissdayminute.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/swissdayminute@2x.png b/examples/quickcontrols/wearable/qml/WorldClock/images/swissdayminute@2x.png
deleted file mode 100644
index 4cc6ce64b4..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/swissdayminute@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/swissnightdial.png b/examples/quickcontrols/wearable/qml/WorldClock/images/swissnightdial.png
deleted file mode 100644
index ee5a15bb9b..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/swissnightdial.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/swissnightdial@2x.png b/examples/quickcontrols/wearable/qml/WorldClock/images/swissnightdial@2x.png
deleted file mode 100644
index ec7e5c77dc..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/swissnightdial@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/swissnighthour.png b/examples/quickcontrols/wearable/qml/WorldClock/images/swissnighthour.png
deleted file mode 100644
index c5b41cb043..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/swissnighthour.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/swissnighthour@2x.png b/examples/quickcontrols/wearable/qml/WorldClock/images/swissnighthour@2x.png
deleted file mode 100644
index bbbc36f1d7..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/swissnighthour@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/swissnightminute.png b/examples/quickcontrols/wearable/qml/WorldClock/images/swissnightminute.png
deleted file mode 100644
index 026c742446..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/swissnightminute.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/swissnightminute@2x.png b/examples/quickcontrols/wearable/qml/WorldClock/images/swissnightminute@2x.png
deleted file mode 100644
index 8ad69047a4..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/swissnightminute@2x.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/qml/WorldClock/images/swissseconds.png b/examples/quickcontrols/wearable/qml/WorldClock/images/swissseconds.png
deleted file mode 100644
index 06446ac0fe..0000000000
--- a/examples/quickcontrols/wearable/qml/WorldClock/images/swissseconds.png
+++ /dev/null
Binary files differ
diff --git a/examples/quickcontrols/wearable/wearable.cpp b/examples/quickcontrols/wearable/wearable.cpp
index 861d4b7610..b211ef7ab5 100644
--- a/examples/quickcontrols/wearable/wearable.cpp
+++ b/examples/quickcontrols/wearable/wearable.cpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2017 The Qt Company Ltd.
+// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
@@ -8,21 +8,23 @@
int main(int argc, char *argv[])
{
+ // Allow navigation.js to "GET" walk_route.json with XMLHttpRequest.
+ qputenv("QML_XHR_ALLOW_FILE_READ", "1");
+
QCoreApplication::setApplicationName("Wearable");
QCoreApplication::setOrganizationName("QtProject");
QGuiApplication app(argc, argv);
//! [style]
- QQuickStyle::setStyle(QStringLiteral("qrc:/qml/Style"));
+ QQuickStyle::setStyle(QStringLiteral("WearableStyle"));
//! [style]
- //! [icons]
- QIcon::setThemeName(QStringLiteral("wearable"));
- //! [icons]
-
QQmlApplicationEngine engine;
- engine.load(QUrl(QStringLiteral("qrc:/wearable.qml")));
+#ifdef Q_OS_MACOS
+ engine.addImportPath(app.applicationDirPath() + "/../PlugIns");
+#endif
+ engine.loadFromModule("Wearable", "Main");
return app.exec();
}
diff --git a/examples/quickcontrols/wearable/wearable.pro b/examples/quickcontrols/wearable/wearable.pro
index 9ca5e53dfe..861c5eb214 100644
--- a/examples/quickcontrols/wearable/wearable.pro
+++ b/examples/quickcontrols/wearable/wearable.pro
@@ -1,6 +1,13 @@
TEMPLATE = app
TARGET = wearable
QT += quick quickcontrols2
+qtHaveModule(positioning): QT += positioning
+qtHaveModule(location): QT += location
+
+QML_IMPORT_PATH += \
+ Wearable \
+ WearableSettings \
+ WearableStyle
SOURCES += \
wearable.cpp
diff --git a/examples/quickcontrols/wearable/wearable.qml b/examples/quickcontrols/wearable/wearable.qml
deleted file mode 100644
index 27887354dc..0000000000
--- a/examples/quickcontrols/wearable/wearable.qml
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-import QtCore
-import QtQuick
-import QtQuick.Controls as QQC2
-import "qml"
-import "qml/Style"
-
-QQC2.ApplicationWindow {
- id: window
- visible: true
- width: 320
- height: 320
- title: qsTr("Wearable")
-
- Settings {
- id: settings
- property bool wireless
- property bool bluetooth
- property int brightness
- property bool darkTheme
- property bool demoMode
- }
-
- Binding {
- target: UIStyle
- property: "darkTheme"
- value: settings.darkTheme
- }
-
- // We need the settings object both here and in SettingsPage,
- // so for convenience, we declare it as a property of the root object so that
- // it will be available to all of the QML files that we load.
- property alias settings: settings
-
- background: Image {
- source: "images/background-" + (settings.darkTheme ? "dark" : "light") + ".png"
- }
-
- header: NaviButton {
- id: homeButton
-
- edge: Qt.TopEdge
- enabled: stackView.depth > 1
- imageSource: "images/home.png"
-
- onClicked: stackView.pop(null)
- }
-
- footer: NaviButton {
- id: backButton
-
- edge: Qt.BottomEdge
- enabled: stackView.depth > 1
- imageSource: "images/back.png"
-
- onClicked: stackView.pop()
- }
-
- QQC2.StackView {
- id: stackView
-
- focus: true
- anchors.fill: parent
-
- initialItem: LauncherPage {
- onLaunched: stackView.push(page)
- }
- }
-
- DemoMode {
- stackView: stackView
- }
-
- DemoModeIndicator {
- id: demoModeIndicator
- y: settings.demoMode ? -height : -height * 2
- anchors.horizontalCenter: parent.horizontalCenter
- height: header.height
- z: window.header.z + 1
- }
-
- MouseArea {
- enabled: settings.demoMode
- anchors.fill: parent
- onClicked: {
- // Stop demo mode and return to the launcher page.
- settings.demoMode = false
- stackView.pop(null)
- }
- }
-}
diff --git a/examples/quickcontrols/wearable/wearable.qrc b/examples/quickcontrols/wearable/wearable.qrc
index db59d038f6..b8fc839be9 100644
--- a/examples/quickcontrols/wearable/wearable.qrc
+++ b/examples/quickcontrols/wearable/wearable.qrc
@@ -1,155 +1,135 @@
+<!-- This file only exists for qmake. -->
<RCC>
- <qresource prefix="/">
- <file>wearable.qml</file>
- <file>qml/LauncherPage.qml</file>
- <file>qml/NaviButton.qml</file>
- <file>icons/wearable/index.theme</file>
- <file>icons/wearable/36x36/alarms.png</file>
- <file>icons/wearable/36x36/fitness.png</file>
- <file>icons/wearable/36x36/navigation.png</file>
- <file>icons/wearable/36x36/notifications.png</file>
- <file>icons/wearable/36x36/settings.png</file>
- <file>icons/wearable/36x36/weather.png</file>
- <file>icons/wearable/36x36/worldclock.png</file>
- <file>icons/wearable/36x36@2/alarms.png</file>
- <file>icons/wearable/36x36@2/fitness.png</file>
- <file>icons/wearable/36x36@2/navigation.png</file>
- <file>icons/wearable/36x36@2/notifications.png</file>
- <file>icons/wearable/36x36@2/settings.png</file>
- <file>icons/wearable/36x36@2/weather.png</file>
- <file>icons/wearable/36x36@2/worldclock.png</file>
- <file>images/background-light.png</file>
- <file>images/background-dark.png</file>
- <file>images/back.png</file>
- <file>images/back@2x.png</file>
- <file>images/home.png</file>
- <file>images/home@2x.png</file>
- <file>qml/Alarms/AlarmsPage.qml</file>
- <file>qml/Fitness/fitness.js</file>
- <file>qml/Fitness/FitnessPage.qml</file>
- <file>qml/Fitness/images/man-running-light.png</file>
- <file>qml/Fitness/images/man-running-light@2x.png</file>
- <file>qml/Fitness/images/man-walking-light.png</file>
- <file>qml/Fitness/images/man-walking-light@2x.png</file>
- <file>qml/Fitness/images/man-running-dark.png</file>
- <file>qml/Fitness/images/man-running-dark@2x.png</file>
- <file>qml/Fitness/images/man-walking-dark.png</file>
- <file>qml/Fitness/images/man-walking-dark@2x.png</file>
- <file>qml/Navigation/navigation.js</file>
- <file>qml/Navigation/NavigationPage.qml</file>
- <file>qml/Navigation/RouteElement.qml</file>
- <file>qml/Navigation/walk_route.json</file>
- <file>qml/Navigation/images/end.png</file>
- <file>qml/Navigation/images/end@2x.png</file>
- <file>qml/Navigation/images/leftturn-light.png</file>
- <file>qml/Navigation/images/leftturn-light@2x.png</file>
- <file>qml/Navigation/images/leftturn-dark.png</file>
- <file>qml/Navigation/images/leftturn-dark@2x.png</file>
- <file>qml/Navigation/images/navigation-light.png</file>
- <file>qml/Navigation/images/navigation-light@2x.png</file>
- <file>qml/Navigation/images/navigation-dark.png</file>
- <file>qml/Navigation/images/navigation-dark@2x.png</file>
- <file>qml/Navigation/images/rightturn-light.png</file>
- <file>qml/Navigation/images/rightturn-light@2x.png</file>
- <file>qml/Navigation/images/rightturn-dark.png</file>
- <file>qml/Navigation/images/rightturn-dark@2x.png</file>
- <file>qml/Navigation/images/start.png</file>
- <file>qml/Navigation/images/start@2x.png</file>
- <file>qml/Navigation/images/straight-light.png</file>
- <file>qml/Navigation/images/straight-light@2x.png</file>
- <file>qml/Navigation/images/straight-dark.png</file>
- <file>qml/Navigation/images/straight-dark@2x.png</file>
- <file>qml/Navigation/images/uturn.png</file>
- <file>qml/Navigation/images/uturn@2x.png</file>
- <file>qml/Notifications/notifications.js</file>
- <file>qml/Notifications/NotificationsPage.qml</file>
- <file>qml/Notifications/images/avatarf-light.png</file>
- <file>qml/Notifications/images/avatarf-light@2x.png</file>
- <file>qml/Notifications/images/avatarm-light.png</file>
- <file>qml/Notifications/images/avatarm-light@2x.png</file>
- <file>qml/Notifications/images/missedcall-light.png</file>
- <file>qml/Notifications/images/missedcall-light@2x.png</file>
- <file>qml/Notifications/images/avatarf-dark.png</file>
- <file>qml/Notifications/images/avatarf-dark@2x.png</file>
- <file>qml/Notifications/images/avatarm-dark.png</file>
- <file>qml/Notifications/images/avatarm-dark@2x.png</file>
- <file>qml/Notifications/images/missedcall-dark.png</file>
- <file>qml/Notifications/images/missedcall-dark@2x.png</file>
- <file>qml/Settings/SettingsPage.qml</file>
- <file>qml/Settings/images/bluetooth-light.png</file>
- <file>qml/Settings/images/bluetooth-light@2x.png</file>
- <file>qml/Settings/images/brightness-light.png</file>
- <file>qml/Settings/images/brightness-light@2x.png</file>
- <file>qml/Settings/images/demo-mode-light.png</file>
- <file>qml/Settings/images/demo-mode-light@2x.png</file>
- <file>qml/Settings/images/demo-mode-dark.png</file>
- <file>qml/Settings/images/demo-mode-dark@2x.png</file>
- <file>qml/Settings/images/demo-mode-white.png</file>
- <file>qml/Settings/images/demo-mode-white@2x.png</file>
- <file>qml/Settings/images/theme-light.png</file>
- <file>qml/Settings/images/theme-light@2x.png</file>
- <file>qml/Settings/images/wifi-light.png</file>
- <file>qml/Settings/images/wifi-light@2x.png</file>
- <file>qml/Settings/images/bluetooth-dark.png</file>
- <file>qml/Settings/images/bluetooth-dark@2x.png</file>
- <file>qml/Settings/images/brightness-dark.png</file>
- <file>qml/Settings/images/brightness-dark@2x.png</file>
- <file>qml/Settings/images/theme-dark.png</file>
- <file>qml/Settings/images/theme-dark@2x.png</file>
- <file>qml/Settings/images/wifi-dark.png</file>
- <file>qml/Settings/images/wifi-dark@2x.png</file>
- <file>qml/Style/qmldir</file>
- <file>qml/Style/PageIndicator.qml</file>
- <file>qml/Style/Slider.qml</file>
- <file>qml/Style/Switch.qml</file>
- <file>qml/Style/UIStyle.qml</file>
- <file>qml/Weather/weather.js</file>
- <file>qml/Weather/weather.json</file>
- <file>qml/Weather/WeatherPage.qml</file>
- <file>qml/Weather/images/humidity-light.png</file>
- <file>qml/Weather/images/humidity-light@2x.png</file>
- <file>qml/Weather/images/pressure-light.png</file>
- <file>qml/Weather/images/pressure-light@2x.png</file>
- <file>qml/Weather/images/sunrise-light.png</file>
- <file>qml/Weather/images/sunrise-light@2x.png</file>
- <file>qml/Weather/images/sunset-light.png</file>
- <file>qml/Weather/images/sunset-light@2x.png</file>
- <file>qml/Weather/images/temperature-light.png</file>
- <file>qml/Weather/images/temperature-light@2x.png</file>
- <file>qml/Weather/images/wind-light.png</file>
- <file>qml/Weather/images/wind-light@2x.png</file>
- <file>qml/Weather/images/humidity-dark.png</file>
- <file>qml/Weather/images/humidity-dark@2x.png</file>
- <file>qml/Weather/images/pressure-dark.png</file>
- <file>qml/Weather/images/pressure-dark@2x.png</file>
- <file>qml/Weather/images/sunrise-dark.png</file>
- <file>qml/Weather/images/sunrise-dark@2x.png</file>
- <file>qml/Weather/images/sunset-dark.png</file>
- <file>qml/Weather/images/sunset-dark@2x.png</file>
- <file>qml/Weather/images/temperature-dark.png</file>
- <file>qml/Weather/images/temperature-dark@2x.png</file>
- <file>qml/Weather/images/wind-dark.png</file>
- <file>qml/Weather/images/wind-dark@2x.png</file>
- <file>qml/WorldClock/Clock.qml</file>
- <file>qml/WorldClock/WorldClockPage.qml</file>
- <file>qml/WorldClock/images/center.png</file>
- <file>qml/WorldClock/images/center@2x.png</file>
- <file>qml/WorldClock/images/second.png</file>
- <file>qml/WorldClock/images/second@2x.png</file>
- <file>qml/WorldClock/images/swissdaydial.png</file>
- <file>qml/WorldClock/images/swissdaydial@2x.png</file>
- <file>qml/WorldClock/images/swissdayhour.png</file>
- <file>qml/WorldClock/images/swissdayhour@2x.png</file>
- <file>qml/WorldClock/images/swissdayminute.png</file>
- <file>qml/WorldClock/images/swissdayminute@2x.png</file>
- <file>qml/WorldClock/images/swissnightdial.png</file>
- <file>qml/WorldClock/images/swissnightdial@2x.png</file>
- <file>qml/WorldClock/images/swissnighthour.png</file>
- <file>qml/WorldClock/images/swissnighthour@2x.png</file>
- <file>qml/WorldClock/images/swissnightminute.png</file>
- <file>qml/WorldClock/images/swissnightminute@2x.png</file>
- <file>qml/SwipeViewPage.qml</file>
- <file>qml/DemoMode.qml</file>
- <file>qml/DemoModeIndicator.qml</file>
+ <qresource prefix="/qt/qml/">
+ <file>Wearable/qmldir</file>
+ <file>Wearable/AlarmsPage.qml</file>
+ <file>Wearable/Clock.qml</file>
+ <file>Wearable/DemoMode.qml</file>
+ <file>Wearable/DemoModeIndicator.qml</file>
+ <file>Wearable/FitnessPage.qml</file>
+ <file>Wearable/LauncherPage.qml</file>
+ <file>Wearable/Main.qml</file>
+ <file>Wearable/MenuHeader.qml</file>
+ <file>Wearable/NavigationPage.qml</file>
+ <file>Wearable/NavigationFallbackPage.qml</file>
+ <file>Wearable/NotificationsPage.qml</file>
+ <file>Wearable/RouteElement.qml</file>
+ <file>Wearable/SettingsPage.qml</file>
+ <file>Wearable/SwipeViewPage.qml</file>
+ <file>Wearable/WeatherPage.qml</file>
+ <file>Wearable/WorldClockPage.qml</file>
+ <file>Wearable/ListHeaderItem.qml</file>
+ <file>Wearable/ListItem.qml</file>
+
+ <file>Wearable/fitness.js</file>
+ <file>Wearable/navigation.js</file>
+ <file>Wearable/notifications.js</file>
+ <file>Wearable/weather.js</file>
+
+ <file>Wearable/fallbackroute.json</file>
+ <file>Wearable/weather.json</file>
+
+ <file>Wearable/icons/wind-light.svg</file>
+ <file>Wearable/icons/wind-dark.svg</file>
+ <file>Wearable/icons/wifi-light.svg</file>
+ <file>Wearable/icons/wifi-dark.svg</file>
+ <file>Wearable/icons/weather-light.svg</file>
+ <file>Wearable/icons/weather-dark.svg</file>
+ <file>Wearable/icons/uturnright-light.svg</file>
+ <file>Wearable/icons/uturnright-dark.svg</file>
+ <file>Wearable/icons/uturnleft-light.svg</file>
+ <file>Wearable/icons/uturnleft-dark.svg</file>
+ <file>Wearable/icons/thermometer-light.svg</file>
+ <file>Wearable/icons/thermometer-dark.svg</file>
+ <file>Wearable/icons/sunset-light.svg</file>
+ <file>Wearable/icons/sunset-dark.svg</file>
+ <file>Wearable/icons/sunrise-light.svg</file>
+ <file>Wearable/icons/sunrise-dark.svg</file>
+ <file>Wearable/icons/sun-light.svg</file>
+ <file>Wearable/icons/sun-dark.svg</file>
+ <file>Wearable/icons/settings-light.svg</file>
+ <file>Wearable/icons/settings-dark.svg</file>
+ <file>Wearable/icons/right-light.svg</file>
+ <file>Wearable/icons/right-dark.svg</file>
+ <file>Wearable/icons/pressure-light.svg</file>
+ <file>Wearable/icons/pressure-dark.svg</file>
+ <file>Wearable/icons/plus-light.svg</file>
+ <file>Wearable/icons/plus-dark.svg</file>
+ <file>Wearable/icons/notification-light.svg</file>
+ <file>Wearable/icons/notification-dark.svg</file>
+ <file>Wearable/icons/maps-light.svg</file>
+ <file>Wearable/icons/maps-dark.svg</file>
+ <file>Wearable/icons/lightright-light.svg</file>
+ <file>Wearable/icons/lightright-dark.svg</file>
+ <file>Wearable/icons/lightleft-light.svg</file>
+ <file>Wearable/icons/lightleft-dark.svg</file>
+ <file>Wearable/icons/left-light.svg</file>
+ <file>Wearable/icons/left-dark.svg</file>
+ <file>Wearable/icons/hearth-light.svg</file>
+ <file>Wearable/icons/hearth-dark.svg</file>
+ <file>Wearable/icons/forward-light.svg</file>
+ <file>Wearable/icons/forward-dark.svg</file>
+ <file>Wearable/icons/drop-light.svg</file>
+ <file>Wearable/icons/drop-dark.svg</file>
+ <file>Wearable/icons/demomode-light.svg</file>
+ <file>Wearable/icons/demomode-dark.svg</file>
+ <file>Wearable/icons/darkmode-light.svg</file>
+ <file>Wearable/icons/darkmode-dark.svg</file>
+ <file>Wearable/icons/clock-light.svg</file>
+ <file>Wearable/icons/clock-dark.svg</file>
+ <file>Wearable/icons/bluetooth-light.svg</file>
+ <file>Wearable/icons/bluetooth-dark.svg</file>
+ <file>Wearable/icons/bell-light.svg</file>
+ <file>Wearable/icons/bell-dark.svg</file>
+ <file>Wearable/icons/bearright-light.svg</file>
+ <file>Wearable/icons/bearright-dark.svg</file>
+ <file>Wearable/icons/bearleft-light.svg</file>
+ <file>Wearable/icons/bearleft-dark.svg</file>
+ <file>Wearable/icons/back-light.svg</file>
+ <file>Wearable/icons/back-dark.svg</file>
+ <file>Wearable/icons/weather-thundershower-light.svg</file>
+ <file>Wearable/icons/weather-thundershower-dark.svg</file>
+ <file>Wearable/icons/weather-sunny-very-few-clouds-light.svg</file>
+ <file>Wearable/icons/weather-sunny-very-few-clouds-dark.svg</file>
+ <file>Wearable/icons/weather-sunny-light.svg</file>
+ <file>Wearable/icons/weather-sunny-dark.svg</file>
+ <file>Wearable/icons/weather-storm-light.svg</file>
+ <file>Wearable/icons/weather-storm-dark.svg</file>
+ <file>Wearable/icons/weather-snow-light.svg</file>
+ <file>Wearable/icons/weather-snow-dark.svg</file>
+ <file>Wearable/icons/weather-sleet-light.svg</file>
+ <file>Wearable/icons/weather-sleet-dark.svg</file>
+ <file>Wearable/icons/weather-showers-scattered-light.svg</file>
+ <file>Wearable/icons/weather-showers-scattered-dark.svg</file>
+ <file>Wearable/icons/weather-showers-light.svg</file>
+ <file>Wearable/icons/weather-showers-dark.svg</file>
+ <file>Wearable/icons/weather-overcast-light.svg</file>
+ <file>Wearable/icons/weather-overcast-dark.svg</file>
+ <file>Wearable/icons/weather-icy-light.svg</file>
+ <file>Wearable/icons/weather-icy-dark.svg</file>
+ <file>Wearable/icons/weather-haze-light.svg</file>
+ <file>Wearable/icons/weather-haze-dark.svg</file>
+ <file>Wearable/icons/weather-fog-light.svg</file>
+ <file>Wearable/icons/weather-fog-dark.svg</file>
+ <file>Wearable/icons/weather-few-clouds-light.svg</file>
+ <file>Wearable/icons/weather-few-clouds-dark.svg</file>
+
+ <file>Wearable/images/fitness-man-walking-light.svg</file>
+ <file>Wearable/images/fitness-man-running-light.svg</file>
+ <file>Wearable/images/fitness-man-walking-dark.svg</file>
+ <file>Wearable/images/fitness-man-running-dark.svg</file>
+ <file>Wearable/images/fallbackmap.png</file>
+
+ <file>WearableSettings/qmldir</file>
+ <file>WearableSettings/WearableSettings.qml</file>
+
+ <file>WearableStyle/qmldir</file>
+ <file>WearableStyle/PageIndicator.qml</file>
+ <file>WearableStyle/Slider.qml</file>
+ <file>WearableStyle/Switch.qml</file>
+ <file>WearableStyle/UIStyle.qml</file>
+ <file>WearableStyle/fonts/TitilliumWeb-Bold.ttf</file>
+ <file>WearableStyle/fonts/TitilliumWeb-SemiBold.ttf</file>
+ <file>WearableStyle/fonts/TitilliumWeb-Regular.ttf</file>
</qresource>
</RCC>