aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/.prev_CMakeLists.txt13
-rw-r--r--examples/CMakeLists.txt18
-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.pro4
-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_java_based_android_project.qdoc116
-rw-r--r--examples/platforms/android/qml_in_android_view/CMakeLists.txt32
-rw-r--r--examples/platforms/android/qml_in_android_view/main.cpp11
-rw-r--r--examples/platforms/android/qml_in_android_view/main.qml87
-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.java178
-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.kt138
-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/.prev_CMakeLists.txt12
-rw-r--r--examples/qml/CMakeLists.txt16
-rw-r--r--examples/qml/doc/src/qml-extending.qdoc364
-rw-r--r--examples/qml/dynamicscene/content/Button.qml87
-rw-r--r--examples/qml/dynamicscene/content/GenericSceneItem.qml59
-rw-r--r--examples/qml/dynamicscene/content/PaletteItem.qml69
-rw-r--r--examples/qml/dynamicscene/content/PerspectiveItem.qml74
-rw-r--r--examples/qml/dynamicscene/content/Sun.qml83
-rw-r--r--examples/qml/dynamicscene/content/images/NOTE1
-rw-r--r--examples/qml/dynamicscene/content/images/face-smile.pngbin15408 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/content/images/moon.pngbin1757 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/content/images/rabbit_brown.pngbin1245 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/content/images/rabbit_bw.pngbin1759 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/content/images/star.pngbin259 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/content/images/sun.pngbin8110 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/content/images/tree_s.pngbin3406 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/content/itemCreation.js62
-rw-r--r--examples/qml/dynamicscene/doc/images/qml-dynamicscene-example.pngbin32286 -> 0 bytes
-rw-r--r--examples/qml/dynamicscene/doc/src/dynamicscene.qdoc34
-rw-r--r--examples/qml/dynamicscene/dynamicscene.pro9
-rw-r--r--examples/qml/dynamicscene/dynamicscene.qml282
-rw-r--r--examples/qml/dynamicscene/dynamicscene.qmlproject16
-rw-r--r--examples/qml/dynamicscene/dynamicscene.qrc19
-rw-r--r--examples/qml/dynamicscene/main.cpp51
-rw-r--r--examples/qml/locale/locale.qml142
-rw-r--r--examples/qml/networkaccessmanagerfactory/CMakeLists.txt56
-rw-r--r--examples/qml/networkaccessmanagerfactory/doc/src/networkaccessmanagerfactory.qdoc39
-rw-r--r--examples/qml/networkaccessmanagerfactory/main.cpp144
-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.qml57
-rw-r--r--examples/qml/qml-i18n/CMakeLists.txt45
-rw-r--r--examples/qml/qml-i18n/Main.qml25
-rw-r--r--examples/qml/qml-i18n/doc/src/i18n.qdoc93
-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.cpp63
-rw-r--r--examples/qml/qml-i18n/qml-i18n.pro1
-rw-r--r--examples/qml/qml-i18n/qml-i18n.qml72
-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/qmlextensionplugins/CMakeLists.txt55
-rw-r--r--examples/qml/qmlextensionplugins/doc/images/qml-plugins-example.pngbin15773 -> 0 bytes
-rw-r--r--examples/qml/qmlextensionplugins/doc/src/qmlpluginex.qdoc42
-rw-r--r--examples/qml/qmlextensionplugins/imports/TimeExample/Clock.qml98
-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.cpp62
-rw-r--r--examples/qml/qmlextensionplugins/plugins.qml63
-rw-r--r--examples/qml/qmlextensionplugins/plugins.qmlproject18
-rw-r--r--examples/qml/qmlextensionplugins/qmlextensionplugins.pro46
-rw-r--r--examples/qml/qmlextensionplugins/timemodel.cpp98
-rw-r--r--examples/qml/qmlextensionplugins/timemodel.h111
-rw-r--r--examples/qml/referenceexamples/CMakeLists.txt17
-rw-r--r--examples/qml/referenceexamples/adding/CMakeLists.txt58
-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.qml58
-rw-r--r--examples/qml/referenceexamples/adding/main.cpp71
-rw-r--r--examples/qml/referenceexamples/adding/person.cpp78
-rw-r--r--examples/qml/referenceexamples/adding/person.h78
-rw-r--r--examples/qml/referenceexamples/attached/CMakeLists.txt61
-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.cpp101
-rw-r--r--examples/qml/referenceexamples/attached/birthdayparty.h103
-rw-r--r--examples/qml/referenceexamples/attached/example.qml79
-rw-r--r--examples/qml/referenceexamples/attached/main.cpp94
-rw-r--r--examples/qml/referenceexamples/attached/person.cpp128
-rw-r--r--examples/qml/referenceexamples/attached/person.h120
-rw-r--r--examples/qml/referenceexamples/binding/CMakeLists.txt62
-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.cpp123
-rw-r--r--examples/qml/referenceexamples/binding/birthdayparty.h113
-rw-r--r--examples/qml/referenceexamples/binding/example.qml88
-rw-r--r--examples/qml/referenceexamples/binding/happybirthdaysong.cpp95
-rw-r--r--examples/qml/referenceexamples/binding/happybirthdaysong.h87
-rw-r--r--examples/qml/referenceexamples/binding/main.cpp95
-rw-r--r--examples/qml/referenceexamples/binding/person.cpp148
-rw-r--r--examples/qml/referenceexamples/binding/person.h128
-rw-r--r--examples/qml/referenceexamples/coercion/CMakeLists.txt59
-rw-r--r--examples/qml/referenceexamples/coercion/birthdayparty.cpp81
-rw-r--r--examples/qml/referenceexamples/coercion/birthdayparty.h80
-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.qml65
-rw-r--r--examples/qml/referenceexamples/coercion/main.cpp81
-rw-r--r--examples/qml/referenceexamples/coercion/person.cpp89
-rw-r--r--examples/qml/referenceexamples/coercion/person.h100
-rw-r--r--examples/qml/referenceexamples/default/CMakeLists.txt59
-rw-r--r--examples/qml/referenceexamples/default/birthdayparty.cpp81
-rw-r--r--examples/qml/referenceexamples/default/birthdayparty.h81
-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.qml64
-rw-r--r--examples/qml/referenceexamples/default/main.cpp81
-rw-r--r--examples/qml/referenceexamples/default/person.cpp88
-rw-r--r--examples/qml/referenceexamples/default/person.h91
-rw-r--r--examples/qml/referenceexamples/extended/CMakeLists.txt62
-rw-r--r--examples/qml/referenceexamples/extended/example.qml57
-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.cpp106
-rw-r--r--examples/qml/referenceexamples/extended/lineedit.h94
-rw-r--r--examples/qml/referenceexamples/extended/main.cpp74
-rw-r--r--examples/qml/referenceexamples/grouped/CMakeLists.txt61
-rw-r--r--examples/qml/referenceexamples/grouped/birthdayparty.cpp81
-rw-r--r--examples/qml/referenceexamples/grouped/birthdayparty.h80
-rw-r--r--examples/qml/referenceexamples/grouped/example.qml88
-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.cpp89
-rw-r--r--examples/qml/referenceexamples/grouped/person.cpp128
-rw-r--r--examples/qml/referenceexamples/grouped/person.h122
-rw-r--r--examples/qml/referenceexamples/methods/CMakeLists.txt59
-rw-r--r--examples/qml/referenceexamples/methods/birthdayparty.cpp90
-rw-r--r--examples/qml/referenceexamples/methods/birthdayparty.h82
-rw-r--r--examples/qml/referenceexamples/methods/example.qml68
-rw-r--r--examples/qml/referenceexamples/methods/main.cpp75
-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.cpp76
-rw-r--r--examples/qml/referenceexamples/methods/person.h75
-rw-r--r--examples/qml/referenceexamples/properties/CMakeLists.txt59
-rw-r--r--examples/qml/referenceexamples/properties/birthdayparty.cpp134
-rw-r--r--examples/qml/referenceexamples/properties/birthdayparty.h98
-rw-r--r--examples/qml/referenceexamples/properties/example.qml65
-rw-r--r--examples/qml/referenceexamples/properties/main.cpp75
-rw-r--r--examples/qml/referenceexamples/properties/person.cpp76
-rw-r--r--examples/qml/referenceexamples/properties/person.h75
-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.txt61
-rw-r--r--examples/qml/referenceexamples/signal/birthdayparty.cpp108
-rw-r--r--examples/qml/referenceexamples/signal/birthdayparty.h104
-rw-r--r--examples/qml/referenceexamples/signal/example.qml83
-rw-r--r--examples/qml/referenceexamples/signal/main.cpp94
-rw-r--r--examples/qml/referenceexamples/signal/person.cpp128
-rw-r--r--examples/qml/referenceexamples/signal/person.h120
-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.txt62
-rw-r--r--examples/qml/referenceexamples/valuesource/birthdayparty.cpp118
-rw-r--r--examples/qml/referenceexamples/valuesource/birthdayparty.h109
-rw-r--r--examples/qml/referenceexamples/valuesource/example.qml87
-rw-r--r--examples/qml/referenceexamples/valuesource/happybirthdaysong.cpp90
-rw-r--r--examples/qml/referenceexamples/valuesource/happybirthdaysong.h90
-rw-r--r--examples/qml/referenceexamples/valuesource/main.cpp95
-rw-r--r--examples/qml/referenceexamples/valuesource/person.cpp128
-rw-r--r--examples/qml/referenceexamples/valuesource/person.h120
-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.txt49
-rw-r--r--examples/qml/shell/main.cpp163
-rw-r--r--examples/qml/shell/shell.pro9
-rw-r--r--examples/qml/tutorials/CMakeLists.txt5
-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/.prev_CMakeLists.txt8
-rw-r--r--examples/qml/tutorials/extending-qml/CMakeLists.txt15
-rw-r--r--examples/qml/tutorials/extending-qml/chapter1-basics/App.qml23
-rw-r--r--examples/qml/tutorials/extending-qml/chapter1-basics/CMakeLists.txt69
-rw-r--r--examples/qml/tutorials/extending-qml/chapter1-basics/app.qml70
-rw-r--r--examples/qml/tutorials/extending-qml/chapter1-basics/chapter1-basics.qrc5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter1-basics/main.cpp55
-rw-r--r--examples/qml/tutorials/extending-qml/chapter1-basics/piechart.cpp51
-rw-r--r--examples/qml/tutorials/extending-qml/chapter1-basics/piechart.h59
-rw-r--r--examples/qml/tutorials/extending-qml/chapter1-basics/qmldir6
-rw-r--r--examples/qml/tutorials/extending-qml/chapter2-methods/App.qml29
-rw-r--r--examples/qml/tutorials/extending-qml/chapter2-methods/CMakeLists.txt65
-rw-r--r--examples/qml/tutorials/extending-qml/chapter2-methods/app.qml76
-rw-r--r--examples/qml/tutorials/extending-qml/chapter2-methods/chapter2-methods.qrc5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter2-methods/main.cpp55
-rw-r--r--examples/qml/tutorials/extending-qml/chapter2-methods/piechart.cpp51
-rw-r--r--examples/qml/tutorials/extending-qml/chapter2-methods/piechart.h59
-rw-r--r--examples/qml/tutorials/extending-qml/chapter2-methods/qmldir6
-rw-r--r--examples/qml/tutorials/extending-qml/chapter3-bindings/App.qml37
-rw-r--r--examples/qml/tutorials/extending-qml/chapter3-bindings/CMakeLists.txt65
-rw-r--r--examples/qml/tutorials/extending-qml/chapter3-bindings/app.qml84
-rw-r--r--examples/qml/tutorials/extending-qml/chapter3-bindings/chapter3-bindings.qrc5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter3-bindings/main.cpp55
-rw-r--r--examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.cpp51
-rw-r--r--examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.h59
-rw-r--r--examples/qml/tutorials/extending-qml/chapter3-bindings/qmldir6
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/App.qml23
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/CMakeLists.txt70
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/app.qml70
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/chapter4-customPropertyTypes.qrc5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/main.cpp55
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.cpp51
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.h57
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.cpp51
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.h57
-rw-r--r--examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/qmldir6
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/App.qml33
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/CMakeLists.txt65
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/app.qml80
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/chapter5-listproperties.qrc5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/main.cpp55
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.cpp51
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.h57
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.cpp51
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.h61
-rw-r--r--examples/qml/tutorials/extending-qml/chapter5-listproperties/qmldir6
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/.prev_CMakeLists.txt51
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/App.qml32
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt58
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/CMakeLists.txt29
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/Charts.pro31
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/chartsplugin.h17
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/piechart.cpp34
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/piechart.h33
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/pieslice.cpp49
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/pieslice.h38
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/qmldir5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/app.pro4
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/app.qml79
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/app.qrc5
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/chapter6-plugins.pro2
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/import/CMakeLists.txt57
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/import/chartsplugin.h64
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/import/import.pro36
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/import/piechart.cpp81
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/import/piechart.h80
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/import/pieslice.cpp96
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/import/pieslice.h85
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/import/qmldir2
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/main.cpp55
-rw-r--r--examples/qml/tutorials/extending-qml/chapter6-plugins/qmldir3
-rw-r--r--examples/qml/xmlhttprequest/CMakeLists.txt113
-rw-r--r--examples/qml/xmlhttprequest/Get.qml64
-rw-r--r--examples/qml/xmlhttprequest/GetForm.ui.qml83
-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.qdoc44
-rw-r--r--examples/qml/xmlhttprequest/main.cpp51
-rw-r--r--examples/qml/xmlhttprequest/methods.js81
-rw-r--r--examples/qml/xmlhttprequest/xmlhttprequest.pro18
-rw-r--r--examples/qml/xmlhttprequest/xmlhttprequest.qml64
-rw-r--r--examples/qml/xmlhttprequest/xmlhttprequest.qmlproject16
-rw-r--r--examples/qml/xmlhttprequest/xmlhttprequest.qrc9
-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.txt3
-rw-r--r--examples/qmltest/qmltest.pro2
-rw-r--r--examples/qmltest/qmltest/.prev_CMakeLists.txt50
-rw-r--r--examples/qmltest/qmltest/CMakeLists.txt59
-rw-r--r--examples/qmltest/qmltest/qmltest.pro26
-rw-r--r--examples/qmltest/qmltest/tst_basic.qml88
-rw-r--r--examples/qmltest/qmltest/tst_item.qml67
-rw-r--r--examples/qmltest/qmltest/tst_qmltest.cpp52
-rw-r--r--examples/quick/.prev_CMakeLists.txt40
-rw-r--r--examples/quick/CMakeLists.txt81
-rw-r--r--examples/quick/animation/CMakeLists.txt181
-rw-r--r--examples/quick/animation/animation.qml55
-rw-r--r--examples/quick/animation/animation.qmlproject1
-rw-r--r--examples/quick/animation/animation.qrc2
-rw-r--r--examples/quick/animation/basics/animators.qml53
-rw-r--r--examples/quick/animation/basics/color-animation.qml55
-rw-r--r--examples/quick/animation/basics/property-animation.qml55
-rw-r--r--examples/quick/animation/behaviors/FocusRect.qml53
-rw-r--r--examples/quick/animation/behaviors/SideRect.qml53
-rw-r--r--examples/quick/animation/behaviors/behavior-example.qml53
-rw-r--r--examples/quick/animation/behaviors/tvtennis.qml130
-rw-r--r--examples/quick/animation/behaviors/wigglytext.qml71
-rw-r--r--examples/quick/animation/doc/src/animation.qdoc30
-rw-r--r--examples/quick/animation/easing/easing.qml70
-rw-r--r--examples/quick/animation/main.cpp51
-rw-r--r--examples/quick/animation/pathanimation/pathanimation.qml59
-rw-r--r--examples/quick/animation/pathinterpolator/pathinterpolator.qml59
-rw-r--r--examples/quick/animation/states/states.qml68
-rw-r--r--examples/quick/animation/states/transitions.qml69
-rw-r--r--examples/quick/canvas/CMakeLists.txt174
-rw-r--r--examples/quick/canvas/LabeledSlider.qml37
-rw-r--r--examples/quick/canvas/bezierCurve/bezierCurve.qml211
-rw-r--r--examples/quick/canvas/canvas.qml80
-rw-r--r--examples/quick/canvas/canvas.qrc3
-rw-r--r--examples/quick/canvas/clip/clip.qml238
-rw-r--r--examples/quick/canvas/doc/src/canvas.qdoc29
-rw-r--r--examples/quick/canvas/main.cpp51
-rw-r--r--examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml213
-rw-r--r--examples/quick/canvas/roundedrect/roundedrect.qml191
-rw-r--r--examples/quick/canvas/smile/smile.qml203
-rw-r--r--examples/quick/canvas/squircle/squircle.qml229
-rw-r--r--examples/quick/canvas/tiger/tiger.qml191
-rw-r--r--examples/quick/customitems/.prev_CMakeLists.txt4
-rw-r--r--examples/quick/customitems/CMakeLists.txt8
-rw-r--r--examples/quick/customitems/customitems.pro11
-rw-r--r--examples/quick/customitems/dialcontrol/CMakeLists.txt82
-rw-r--r--examples/quick/customitems/dialcontrol/Dial.qml49
-rw-r--r--examples/quick/customitems/dialcontrol/QuitButton.qml15
-rw-r--r--examples/quick/customitems/dialcontrol/background.png (renamed from examples/quick/customitems/dialcontrol/content/background.png)bin35876 -> 35876 bytes
-rw-r--r--examples/quick/customitems/dialcontrol/content/Dial.qml96
-rw-r--r--examples/quick/customitems/dialcontrol/content/QuitButton.qml61
-rw-r--r--examples/quick/customitems/dialcontrol/dialcontrol.qml58
-rw-r--r--examples/quick/customitems/dialcontrol/dialcontrol.qrc16
-rw-r--r--examples/quick/customitems/dialcontrol/doc/src/dialcontrol.qdoc29
-rw-r--r--examples/quick/customitems/dialcontrol/main.cpp53
-rw-r--r--examples/quick/customitems/dialcontrol/needle.png (renamed from examples/quick/customitems/dialcontrol/content/needle.png)bin342 -> 342 bytes
-rw-r--r--examples/quick/customitems/dialcontrol/needle_shadow.png (renamed from examples/quick/customitems/dialcontrol/content/needle_shadow.png)bin632 -> 632 bytes
-rw-r--r--examples/quick/customitems/dialcontrol/overlay.png (renamed from examples/quick/customitems/dialcontrol/content/overlay.png)bin3564 -> 3564 bytes
-rw-r--r--examples/quick/customitems/dialcontrol/quit.png (renamed from examples/quick/customitems/dialcontrol/content/quit.png)bin583 -> 583 bytes
-rw-r--r--examples/quick/customitems/flipable/5_heart.png (renamed from examples/quick/customitems/flipable/content/5_heart.png)bin3872 -> 3872 bytes
-rw-r--r--examples/quick/customitems/flipable/9_club.png (renamed from examples/quick/customitems/flipable/content/9_club.png)bin6135 -> 6135 bytes
-rw-r--r--examples/quick/customitems/flipable/CMakeLists.txt51
-rw-r--r--examples/quick/customitems/flipable/Card.qml43
-rw-r--r--examples/quick/customitems/flipable/back.png (renamed from examples/quick/customitems/flipable/content/back.png)bin1418 -> 1418 bytes
-rw-r--r--examples/quick/customitems/flipable/content/Card.qml90
-rw-r--r--examples/quick/customitems/flipable/doc/src/flipable.qdoc29
-rw-r--r--examples/quick/customitems/flipable/flipable.qml58
-rw-r--r--examples/quick/customitems/flipable/flipable.qrc10
-rw-r--r--examples/quick/customitems/flipable/main.cpp53
-rw-r--r--examples/quick/customitems/maskedmousearea/CMakeLists.txt65
-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.cpp64
-rw-r--r--examples/quick/customitems/maskedmousearea/maskedmousearea.cpp151
-rw-r--r--examples/quick/customitems/maskedmousearea/maskedmousearea.h109
-rw-r--r--examples/quick/customitems/maskedmousearea/maskedmousearea.pro17
-rw-r--r--examples/quick/customitems/maskedmousearea/maskedmousearea.qml142
-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.txt82
-rw-r--r--examples/quick/customitems/painteditem/TextBalloon/CMakeLists.txt28
-rw-r--r--examples/quick/customitems/painteditem/TextBalloon/plugin.h12
-rw-r--r--examples/quick/customitems/painteditem/TextBalloon/qmldir2
-rw-r--r--examples/quick/customitems/painteditem/TextBalloon/textballoon.cpp56
-rw-r--r--examples/quick/customitems/painteditem/TextBalloon/textballoon.h31
-rw-r--r--examples/quick/customitems/painteditem/TextBalloon/textballoon.pro28
-rw-r--r--examples/quick/customitems/painteditem/TextBalloon/textballoon.qrc5
-rw-r--r--examples/quick/customitems/painteditem/TextBalloonPlugin/plugin.h59
-rw-r--r--examples/quick/customitems/painteditem/TextBalloonPlugin/qmldir1
-rw-r--r--examples/quick/customitems/painteditem/doc/src/textballoons.qdoc51
-rw-r--r--examples/quick/customitems/painteditem/main.cpp4
-rw-r--r--examples/quick/customitems/painteditem/painteditem.pro31
-rw-r--r--examples/quick/customitems/painteditem/painteditem.qrc3
-rw-r--r--examples/quick/customitems/painteditem/textballoon.cpp103
-rw-r--r--examples/quick/customitems/painteditem/textballoon.h78
-rw-r--r--examples/quick/customitems/painteditem/textballoons.qml63
-rw-r--r--examples/quick/customitems/painteditem/textballoonuser.pro10
-rw-r--r--examples/quick/customitems/progressbar/content/ProgressBar.qml93
-rw-r--r--examples/quick/customitems/progressbar/content/background.pngbin299 -> 0 bytes
-rw-r--r--examples/quick/customitems/progressbar/main.qml83
-rw-r--r--examples/quick/customitems/scrollbar/ScrollBar.qml84
-rw-r--r--examples/quick/customitems/scrollbar/doc/images/qml-scrollbar-example.pngbin157358 -> 0 bytes
-rw-r--r--examples/quick/customitems/scrollbar/doc/src/scrollbar.qdoc38
-rw-r--r--examples/quick/customitems/scrollbar/main.cpp51
-rw-r--r--examples/quick/customitems/scrollbar/main.qml103
-rw-r--r--examples/quick/customitems/scrollbar/pics/niagara_falls.jpgbin142510 -> 0 bytes
-rw-r--r--examples/quick/customitems/scrollbar/scrollbar.pro9
-rw-r--r--examples/quick/customitems/scrollbar/scrollbar.qmlproject16
-rw-r--r--examples/quick/customitems/scrollbar/scrollbar.qrc7
-rw-r--r--examples/quick/customitems/searchbox/SearchBox.qml119
-rw-r--r--examples/quick/customitems/searchbox/images/clear.pngbin320 -> 0 bytes
-rw-r--r--examples/quick/customitems/searchbox/images/lineedit-bg-focus.pngbin297 -> 0 bytes
-rw-r--r--examples/quick/customitems/searchbox/images/lineedit-bg.pngbin299 -> 0 bytes
-rw-r--r--examples/quick/customitems/searchbox/main.cpp51
-rw-r--r--examples/quick/customitems/searchbox/main.qml70
-rw-r--r--examples/quick/customitems/searchbox/searchbox.pro9
-rw-r--r--examples/quick/customitems/searchbox/searchbox.qmlproject16
-rw-r--r--examples/quick/customitems/searchbox/searchbox.qrc9
-rw-r--r--examples/quick/customitems/slideswitch/content/Switch.qml127
-rw-r--r--examples/quick/customitems/slideswitch/content/background.pngbin3091 -> 0 bytes
-rw-r--r--examples/quick/customitems/slideswitch/content/background.svg23
-rw-r--r--examples/quick/customitems/slideswitch/content/knob.pngbin3101 -> 0 bytes
-rw-r--r--examples/quick/customitems/slideswitch/content/knob.svg867
-rw-r--r--examples/quick/customitems/slideswitch/doc/src/example-slideswitch.qdoc132
-rw-r--r--examples/quick/customitems/slideswitch/slideswitch.qml61
-rw-r--r--examples/quick/customitems/spinner/content/Spinner.qml80
-rw-r--r--examples/quick/customitems/spinner/content/spinner-bg.pngbin274 -> 0 bytes
-rw-r--r--examples/quick/customitems/spinner/content/spinner-select.pngbin320 -> 0 bytes
-rw-r--r--examples/quick/customitems/spinner/main.cpp51
-rw-r--r--examples/quick/customitems/spinner/main.qml71
-rw-r--r--examples/quick/customitems/spinner/spinner.pro9
-rw-r--r--examples/quick/customitems/spinner/spinner.qmlproject16
-rw-r--r--examples/quick/customitems/spinner/spinner.qrc8
-rw-r--r--examples/quick/customitems/tabwidget/TabWidget.qml112
-rw-r--r--examples/quick/customitems/tabwidget/doc/images/qml-tabwidget-example.pngbin4798 -> 0 bytes
-rw-r--r--examples/quick/customitems/tabwidget/doc/images/tab.pngbin309 -> 0 bytes
-rw-r--r--examples/quick/customitems/tabwidget/doc/src/tabwidget.qdoc42
-rw-r--r--examples/quick/customitems/tabwidget/main.cpp51
-rw-r--r--examples/quick/customitems/tabwidget/main.qml109
-rw-r--r--examples/quick/customitems/tabwidget/tabwidget.pro9
-rw-r--r--examples/quick/customitems/tabwidget/tabwidget.qmlproject16
-rw-r--r--examples/quick/customitems/tabwidget/tabwidget.qrc8
-rw-r--r--examples/quick/delegatechooser/CMakeLists.txt125
-rw-r--r--examples/quick/delegatechooser/delegatechooser.pro8
-rw-r--r--examples/quick/delegatechooser/delegatechooser.qml145
-rw-r--r--examples/quick/delegatechooser/main.cpp51
-rw-r--r--examples/quick/delegatechooser/qml.qrc5
-rw-r--r--examples/quick/draganddrop/CMakeLists.txt151
-rw-r--r--examples/quick/draganddrop/doc/src/draganddrop.qdoc29
-rw-r--r--examples/quick/draganddrop/draganddrop.qml60
-rw-r--r--examples/quick/draganddrop/draganddrop.qrc3
-rw-r--r--examples/quick/draganddrop/external/externaldraganddrop.qml84
-rw-r--r--examples/quick/draganddrop/main.cpp51
-rw-r--r--examples/quick/draganddrop/tiles/DragTile.qml80
-rw-r--r--examples/quick/draganddrop/tiles/DropTile.qml69
-rw-r--r--examples/quick/draganddrop/tiles/tiles.qml87
-rw-r--r--examples/quick/draganddrop/views/Icon.qml59
-rw-r--r--examples/quick/draganddrop/views/gridview.qml74
-rw-r--r--examples/quick/embeddedinwidgets/CMakeLists.txt69
-rw-r--r--examples/quick/embeddedinwidgets/Main.qml53
-rw-r--r--examples/quick/embeddedinwidgets/TextBox.qml85
-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.cpp55
-rw-r--r--examples/quick/embeddedinwidgets/main.qml122
-rw-r--r--examples/quick/embeddedinwidgets/qmldir4
-rw-r--r--examples/quick/embeddedinwidgets/reflect.frag25
-rw-r--r--examples/quick/embeddedinwidgets/reflect.frag.qsbbin0 -> 1976 bytes
-rw-r--r--examples/quick/externaldraganddrop/CMakeLists.txt126
-rw-r--r--examples/quick/externaldraganddrop/DragAndDropTextItem.qml113
-rw-r--r--examples/quick/externaldraganddrop/doc/images/qml-dnd2-example.pngbin48666 -> 0 bytes
-rw-r--r--examples/quick/externaldraganddrop/doc/src/externaldraganddrop.qdoc44
-rw-r--r--examples/quick/externaldraganddrop/externaldraganddrop.pro12
-rw-r--r--examples/quick/externaldraganddrop/externaldraganddrop.qml89
-rw-r--r--examples/quick/externaldraganddrop/externaldraganddrop.qmlproject16
-rw-r--r--examples/quick/externaldraganddrop/externaldraganddrop.qrc6
-rw-r--r--examples/quick/externaldraganddrop/main.cpp51
-rw-r--r--examples/quick/imageelements/BorderImageSelector.qml64
-rw-r--r--examples/quick/imageelements/CMakeLists.txt189
-rw-r--r--examples/quick/imageelements/ImageCell.qml25
-rw-r--r--examples/quick/imageelements/MyBorderImage.qml65
-rw-r--r--examples/quick/imageelements/ShadowRectangle.qml33
-rw-r--r--examples/quick/imageelements/animatedimage.qml110
-rw-r--r--examples/quick/imageelements/animatedsprite.qml73
-rw-r--r--examples/quick/imageelements/borderimage.qml142
-rw-r--r--examples/quick/imageelements/content/BorderImageSelector.qml109
-rw-r--r--examples/quick/imageelements/content/ImageCell.qml67
-rw-r--r--examples/quick/imageelements/content/MyBorderImage.qml101
-rw-r--r--examples/quick/imageelements/content/ShadowRectangle.qml66
-rw-r--r--examples/quick/imageelements/doc/src/imageelements.qdoc31
-rw-r--r--examples/quick/imageelements/framestepping.qml64
-rw-r--r--examples/quick/imageelements/image.qml61
-rw-r--r--examples/quick/imageelements/imageelements.qml74
-rw-r--r--examples/quick/imageelements/imageelements.qrc36
-rw-r--r--examples/quick/imageelements/main.cpp51
-rw-r--r--examples/quick/imageelements/multiframeborderimage.qml70
-rw-r--r--examples/quick/imageelements/pics/BearSheet.png (renamed from examples/quick/imageelements/content/BearSheet.png)bin406337 -> 406337 bytes
-rw-r--r--examples/quick/imageelements/pics/Uniflow_steam_engine.gif (renamed from examples/quick/imageelements/content/Uniflow_steam_engine.gif)bin45328 -> 45328 bytes
-rw-r--r--examples/quick/imageelements/pics/arrow.png (renamed from examples/quick/imageelements/content/arrow.png)bin247 -> 247 bytes
-rw-r--r--examples/quick/imageelements/pics/bw.png (renamed from examples/quick/imageelements/content/bw.png)bin1357 -> 1357 bytes
-rw-r--r--examples/quick/imageelements/pics/colors-round.sci (renamed from examples/quick/imageelements/content/colors-round.sci)0
-rw-r--r--examples/quick/imageelements/pics/colors-stretch.sci (renamed from examples/quick/imageelements/content/colors-stretch.sci)0
-rw-r--r--examples/quick/imageelements/pics/colors.png (renamed from examples/quick/imageelements/content/colors.png)bin974 -> 974 bytes
-rw-r--r--examples/quick/imageelements/pics/multi.ico (renamed from examples/quick/imageelements/content/multi.ico)bin27110 -> 27110 bytes
-rw-r--r--examples/quick/imageelements/pics/qt-logo.png (renamed from examples/quick/imageelements/content/qt-logo.png)bin5149 -> 5149 bytes
-rw-r--r--examples/quick/imageelements/pics/shadow.png (renamed from examples/quick/imageelements/content/shadow.png)bin371 -> 371 bytes
-rw-r--r--examples/quick/imageelements/pics/speaker.png (renamed from examples/quick/imageelements/content/speaker.png)bin784525 -> 784525 bytes
-rw-r--r--examples/quick/imageelements/shadows.qml69
-rw-r--r--examples/quick/imageelements/spritesequence.qml99
-rw-r--r--examples/quick/imageprovider/CMakeLists.txt50
-rw-r--r--examples/quick/imageprovider/doc/src/imageprovider.qdoc29
-rw-r--r--examples/quick/imageprovider/imageprovider-example.qml53
-rw-r--r--examples/quick/imageprovider/imageprovider.cpp51
-rw-r--r--examples/quick/imageresponseprovider/CMakeLists.txt43
-rw-r--r--examples/quick/imageresponseprovider/doc/src/imageresponseprovider.qdoc29
-rw-r--r--examples/quick/imageresponseprovider/imageresponseprovider-example.qml53
-rw-r--r--examples/quick/imageresponseprovider/imageresponseprovider.cpp51
-rw-r--r--examples/quick/itemvariablerefreshrate/CMakeLists.txt45
-rw-r--r--examples/quick/itemvariablerefreshrate/content/qt_logo.pngbin0 -> 6208 bytes
-rw-r--r--examples/quick/itemvariablerefreshrate/doc/images/qml-itemvariablerefreshrate-example.pngbin0 -> 43432 bytes
-rw-r--r--examples/quick/itemvariablerefreshrate/doc/src/itemvariablerefreshrate.qdoc37
-rw-r--r--examples/quick/itemvariablerefreshrate/itemvariablerefreshrate.pro8
-rw-r--r--examples/quick/itemvariablerefreshrate/itemvariablerefreshrate.qml85
-rw-r--r--examples/quick/itemvariablerefreshrate/itemvariablerefreshrate.qrc6
-rw-r--r--examples/quick/itemvariablerefreshrate/main.cpp4
-rw-r--r--examples/quick/keyinteraction/CMakeLists.txt83
-rw-r--r--examples/quick/keyinteraction/ContextMenu.qml34
-rw-r--r--examples/quick/keyinteraction/GridMenu.qml105
-rw-r--r--examples/quick/keyinteraction/ListMenu.qml122
-rw-r--r--examples/quick/keyinteraction/ListViewDelegate.qml73
-rw-r--r--examples/quick/keyinteraction/TabMenu.qml98
-rw-r--r--examples/quick/keyinteraction/doc/src/keyinteraction.qdoc29
-rw-r--r--examples/quick/keyinteraction/focus.qml160
-rw-r--r--examples/quick/keyinteraction/focus/Core/ContextMenu.qml76
-rw-r--r--examples/quick/keyinteraction/focus/Core/GridMenu.qml117
-rw-r--r--examples/quick/keyinteraction/focus/Core/ListMenu.qml119
-rw-r--r--examples/quick/keyinteraction/focus/Core/ListViewDelegate.qml97
-rw-r--r--examples/quick/keyinteraction/focus/Core/TabMenu.qml113
-rw-r--r--examples/quick/keyinteraction/focus/focus.qml177
-rw-r--r--examples/quick/keyinteraction/images/arrow.png (renamed from examples/quick/keyinteraction/focus/Core/images/arrow.png)bin411 -> 411 bytes
-rw-r--r--examples/quick/keyinteraction/images/qt-logo.png (renamed from examples/quick/keyinteraction/focus/Core/images/qt-logo.png)bin5149 -> 5149 bytes
-rw-r--r--examples/quick/keyinteraction/keyinteraction.qml55
-rw-r--r--examples/quick/keyinteraction/keyinteraction.qrc18
-rw-r--r--examples/quick/keyinteraction/main.cpp51
-rw-r--r--examples/quick/layouts/CMakeLists.txt69
-rw-r--r--examples/quick/layouts/doc/src/qtquicklayouts-examples.qdoc29
-rw-r--r--examples/quick/layouts/layouts.qml92
-rw-r--r--examples/quick/layouts/layouts.qmlproject16
-rw-r--r--examples/quick/layouts/layouts.qrc2
-rw-r--r--examples/quick/layouts/main.cpp53
-rw-r--r--examples/quick/localstorage/CMakeLists.txt48
-rw-r--r--examples/quick/localstorage/Database.js73
-rw-r--r--examples/quick/localstorage/Header.qml167
-rw-r--r--examples/quick/localstorage/MyDelegate.qml69
-rw-r--r--examples/quick/localstorage/MyModel.qml11
-rw-r--r--examples/quick/localstorage/doc/src/localstorage.qdoc29
-rw-r--r--examples/quick/localstorage/localstorage.pro11
-rw-r--r--examples/quick/localstorage/localstorage.qml239
-rw-r--r--examples/quick/localstorage/localstorage.qrc9
-rw-r--r--examples/quick/localstorage/localstorage/CMakeLists.txt58
-rw-r--r--examples/quick/localstorage/localstorage/Database.js120
-rw-r--r--examples/quick/localstorage/localstorage/Header.qml212
-rw-r--r--examples/quick/localstorage/localstorage/MyDelegate.qml116
-rw-r--r--examples/quick/localstorage/localstorage/MyModel.qml58
-rw-r--r--examples/quick/localstorage/localstorage/localstorage.pro9
-rw-r--r--examples/quick/localstorage/localstorage/localstorage.qml273
-rw-r--r--examples/quick/localstorage/localstorage/localstorage.qrc9
-rw-r--r--examples/quick/localstorage/localstorage/main.cpp61
-rw-r--r--examples/quick/localstorage/main.cpp14
-rw-r--r--examples/quick/models/CMakeLists.txt9
-rw-r--r--examples/quick/models/abstractitemmodel/CMakeLists.txt66
-rw-r--r--examples/quick/models/abstractitemmodel/abstractitemmodel.qrc2
-rw-r--r--examples/quick/models/abstractitemmodel/doc/src/abstractitemmodel-example.qdoc29
-rw-r--r--examples/quick/models/abstractitemmodel/main.cpp53
-rw-r--r--examples/quick/models/abstractitemmodel/model.cpp51
-rw-r--r--examples/quick/models/abstractitemmodel/model.h59
-rw-r--r--examples/quick/models/abstractitemmodel/view.qml53
-rw-r--r--examples/quick/models/objectlistmodel/CMakeLists.txt66
-rw-r--r--examples/quick/models/objectlistmodel/dataobject.cpp51
-rw-r--r--examples/quick/models/objectlistmodel/dataobject.h51
-rw-r--r--examples/quick/models/objectlistmodel/doc/src/objectlistmodel-example.qdoc29
-rw-r--r--examples/quick/models/objectlistmodel/main.cpp83
-rw-r--r--examples/quick/models/objectlistmodel/objectlistmodel.qrc2
-rw-r--r--examples/quick/models/objectlistmodel/view.qml62
-rw-r--r--examples/quick/models/stringlistmodel/CMakeLists.txt66
-rw-r--r--examples/quick/models/stringlistmodel/doc/src/stringlistmodel-example.qdoc29
-rw-r--r--examples/quick/models/stringlistmodel/main.cpp53
-rw-r--r--examples/quick/models/stringlistmodel/stringlistmodel.qrc2
-rw-r--r--examples/quick/models/stringlistmodel/view.qml53
-rw-r--r--examples/quick/mousearea/CMakeLists.txt68
-rw-r--r--examples/quick/mousearea/doc/src/mousearea.qdoc29
-rw-r--r--examples/quick/mousearea/main.cpp51
-rw-r--r--examples/quick/mousearea/mousearea-wheel-example.qml67
-rw-r--r--examples/quick/mousearea/mousearea.qml180
-rw-r--r--examples/quick/mousearea/mousearea.qrc2
-rw-r--r--examples/quick/multieffect/CMakeLists.txt5
-rw-r--r--examples/quick/multieffect/itemswitcher/CMakeLists.txt70
-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/itemswitcher/itemswitcher.pro10
-rw-r--r--examples/quick/multieffect/itemswitcher/main.cpp4
-rw-r--r--examples/quick/multieffect/itemswitcher/qml.qrc27
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/ItemSwitcher.qml57
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/PagesItem.qml49
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/PagesView.qml30
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/SettingsComponentButton.qml35
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/SettingsComponentSlider.qml54
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/SettingsView.qml168
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/SwitchEffect3DFlip.qml93
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/SwitchEffectBlinds.qml49
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/SwitchEffectBlur.qml34
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/SwitchEffectHeart.qml48
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/SwitchEffectStars.qml50
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/SwitchEffectThunder.qml87
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/images/Built_with_Qt.pngbin0 -> 13891 bytes
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/images/Built_with_Qt_RGB_logo.pngbin0 -> 14224 bytes
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/images/arrow.pngbin0 -> 835 bytes
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/images/background.pngbin0 -> 22366 bytes
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/images/hblinds.pngbin0 -> 12054 bytes
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/images/heart.pngbin0 -> 3786 bytes
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/images/quit_coding.pngbin0 -> 23713 bytes
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/images/smoke.pngbin0 -> 45280 bytes
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/images/star.pngbin0 -> 2852 bytes
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/images/stripes.pngbin0 -> 41520 bytes
-rw-r--r--examples/quick/multieffect/itemswitcher/qml/main.qml219
-rw-r--r--examples/quick/multieffect/multieffect.pro3
-rw-r--r--examples/quick/multieffect/testbed/CMakeLists.txt74
-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/main.cpp4
-rw-r--r--examples/quick/multieffect/testbed/qml.qrc31
-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/FpsItem.qml65
-rw-r--r--examples/quick/multieffect/testbed/qml/ResetSettingsOverlay.qml170
-rw-r--r--examples/quick/multieffect/testbed/qml/Settings.qml92
-rw-r--r--examples/quick/multieffect/testbed/qml/SettingsComponentCheckBox.qml35
-rw-r--r--examples/quick/multieffect/testbed/qml/SettingsComponentColorSelector.qml135
-rw-r--r--examples/quick/multieffect/testbed/qml/SettingsComponentSlider.qml54
-rw-r--r--examples/quick/multieffect/testbed/qml/SettingsComponentView.qml147
-rw-r--r--examples/quick/multieffect/testbed/qml/SettingsView.qml407
-rw-r--r--examples/quick/multieffect/testbed/qml/ShaderView.qml29
-rw-r--r--examples/quick/multieffect/testbed/qml/TestMaskItem.qml17
-rw-r--r--examples/quick/multieffect/testbed/qml/TestSourceItem.qml113
-rw-r--r--examples/quick/multieffect/testbed/qml/WarningsItem.qml66
-rw-r--r--examples/quick/multieffect/testbed/qml/WarningsView.qml38
-rw-r--r--examples/quick/multieffect/testbed/qml/images/Built_with_Qt.pngbin0 -> 13891 bytes
-rw-r--r--examples/quick/multieffect/testbed/qml/images/Built_with_Qt_RGB_logo.pngbin0 -> 14224 bytes
-rw-r--r--examples/quick/multieffect/testbed/qml/images/arrow.pngbin0 -> 835 bytes
-rw-r--r--examples/quick/multieffect/testbed/qml/images/pause.pngbin0 -> 245 bytes
-rw-r--r--examples/quick/multieffect/testbed/qml/images/play.pngbin0 -> 281 bytes
-rw-r--r--examples/quick/multieffect/testbed/qml/images/spinner.pngbin0 -> 1687 bytes
-rw-r--r--examples/quick/multieffect/testbed/qml/images/warning.pngbin0 -> 10285 bytes
-rw-r--r--examples/quick/multieffect/testbed/qml/main.qml186
-rw-r--r--examples/quick/multieffect/testbed/testbed.pro10
-rw-r--r--examples/quick/particles/.prev_CMakeLists.txt7
-rw-r--r--examples/quick/particles/CMakeLists.txt12
-rw-r--r--examples/quick/particles/affectors/CMakeLists.txt312
-rw-r--r--examples/quick/particles/affectors/GreyButton.qml44
-rw-r--r--examples/quick/particles/affectors/affectors.pro1
-rw-r--r--examples/quick/particles/affectors/affectors.qml77
-rw-r--r--examples/quick/particles/affectors/affectors.qrc39
-rw-r--r--examples/quick/particles/affectors/age.qml62
-rw-r--r--examples/quick/particles/affectors/attractor.qml152
-rw-r--r--examples/quick/particles/affectors/content/GreyButton.qml91
-rw-r--r--examples/quick/particles/affectors/content/age.qml109
-rw-r--r--examples/quick/particles/affectors/content/attractor.qml200
-rw-r--r--examples/quick/particles/affectors/content/customaffector.qml156
-rw-r--r--examples/quick/particles/affectors/content/friction.qml121
-rw-r--r--examples/quick/particles/affectors/content/gravity.qml115
-rw-r--r--examples/quick/particles/affectors/content/groupgoal.qml213
-rw-r--r--examples/quick/particles/affectors/content/move.qml157
-rw-r--r--examples/quick/particles/affectors/content/spritegoal.qml222
-rw-r--r--examples/quick/particles/affectors/content/turbulence.qml142
-rw-r--r--examples/quick/particles/affectors/content/wander.qml107
-rw-r--r--examples/quick/particles/affectors/customaffector.qml109
-rw-r--r--examples/quick/particles/affectors/doc/src/affectors.qdoc63
-rw-r--r--examples/quick/particles/affectors/friction.qml74
-rw-r--r--examples/quick/particles/affectors/gravity.qml68
-rw-r--r--examples/quick/particles/affectors/groupgoal.qml166
-rw-r--r--examples/quick/particles/affectors/images/_explo.png (renamed from examples/quick/particles/images/_explo.png)bin81528 -> 81528 bytes
-rw-r--r--examples/quick/particles/affectors/images/backgroundLeaves.jpg (renamed from examples/quick/particles/images/backgroundLeaves.jpg)bin78665 -> 78665 bytes
-rw-r--r--examples/quick/particles/affectors/images/candle.png (renamed from examples/quick/particles/images/candle.png)bin1348 -> 1348 bytes
-rw-r--r--examples/quick/particles/affectors/images/finalfrontier.png (renamed from examples/quick/particles/images/finalfrontier.png)bin695061 -> 695061 bytes
-rw-r--r--examples/quick/particles/affectors/images/matchmask.png (renamed from examples/quick/particles/images/matchmask.png)bin2369 -> 2369 bytes
-rw-r--r--examples/quick/particles/affectors/images/meteor.png (renamed from examples/quick/particles/images/meteor.png)bin83169 -> 83169 bytes
-rw-r--r--examples/quick/particles/affectors/images/nullRock.png (renamed from examples/quick/particles/images/nullRock.png)bin140 -> 140 bytes
-rw-r--r--examples/quick/particles/affectors/images/particleA.png (renamed from examples/quick/particles/images/particleA.png)bin870 -> 870 bytes
-rw-r--r--examples/quick/particles/affectors/images/realLeaf1.png (renamed from examples/quick/particles/images/realLeaf1.png)bin15625 -> 15625 bytes
-rw-r--r--examples/quick/particles/affectors/images/realLeaf2.png (renamed from examples/quick/particles/images/realLeaf2.png)bin13660 -> 13660 bytes
-rw-r--r--examples/quick/particles/affectors/images/realLeaf3.png (renamed from examples/quick/particles/images/realLeaf3.png)bin23809 -> 23809 bytes
-rw-r--r--examples/quick/particles/affectors/images/realLeaf4.png (renamed from examples/quick/particles/images/realLeaf4.png)bin23655 -> 23655 bytes
-rw-r--r--examples/quick/particles/affectors/images/rocket.png (renamed from examples/quick/particles/images/rocket.png)bin7315 -> 7315 bytes
-rw-r--r--examples/quick/particles/affectors/images/rocket2.png (renamed from examples/quick/particles/images/rocket2.png)bin1918 -> 1918 bytes
-rw-r--r--examples/quick/particles/affectors/images/snowflake.png (renamed from examples/quick/particles/images/snowflake.png)bin189327 -> 189327 bytes
-rw-r--r--examples/quick/particles/affectors/main.cpp53
-rw-r--r--examples/quick/particles/affectors/move.qml110
-rw-r--r--examples/quick/particles/affectors/spritegoal.qml174
-rw-r--r--examples/quick/particles/affectors/turbulence.qml94
-rw-r--r--examples/quick/particles/affectors/wander.qml60
-rw-r--r--examples/quick/particles/emitters/CMakeLists.txt299
-rw-r--r--examples/quick/particles/emitters/burstandpulse.qml75
-rw-r--r--examples/quick/particles/emitters/content/burstandpulse.qml122
-rw-r--r--examples/quick/particles/emitters/content/customemitter.qml106
-rw-r--r--examples/quick/particles/emitters/content/emitmask.qml84
-rw-r--r--examples/quick/particles/emitters/content/maximumemitted.qml92
-rw-r--r--examples/quick/particles/emitters/content/shapeanddirection.qml122
-rw-r--r--examples/quick/particles/emitters/content/trailemitter.qml186
-rw-r--r--examples/quick/particles/emitters/content/velocityfrommotion.qml322
-rw-r--r--examples/quick/particles/emitters/customemitter.qml59
-rw-r--r--examples/quick/particles/emitters/doc/src/emitters.qdoc41
-rw-r--r--examples/quick/particles/emitters/emitmask.qml37
-rw-r--r--examples/quick/particles/emitters/emitters.pro1
-rw-r--r--examples/quick/particles/emitters/emitters.qml71
-rw-r--r--examples/quick/particles/emitters/emitters.qrc18
-rw-r--r--examples/quick/particles/emitters/images/portal_bg.png (renamed from examples/quick/particles/images/portal_bg.png)bin96858 -> 96858 bytes
-rw-r--r--examples/quick/particles/emitters/images/starfish_mask.png (renamed from examples/quick/particles/images/starfish_mask.png)bin7403 -> 7403 bytes
-rw-r--r--examples/quick/particles/emitters/main.cpp53
-rw-r--r--examples/quick/particles/emitters/maximumemitted.qml45
-rw-r--r--examples/quick/particles/emitters/shapeanddirection.qml75
-rw-r--r--examples/quick/particles/emitters/trailemitter.qml139
-rw-r--r--examples/quick/particles/emitters/velocityfrommotion.qml271
-rw-r--r--examples/quick/particles/imageparticle/CMakeLists.txt305
-rw-r--r--examples/quick/particles/imageparticle/allatonce.qml63
-rw-r--r--examples/quick/particles/imageparticle/colored.qml51
-rw-r--r--examples/quick/particles/imageparticle/colortable.qml49
-rw-r--r--examples/quick/particles/imageparticle/content/allatonce.qml110
-rw-r--r--examples/quick/particles/imageparticle/content/colored.qml98
-rw-r--r--examples/quick/particles/imageparticle/content/colortable.qml96
-rw-r--r--examples/quick/particles/imageparticle/content/deformation.qml135
-rw-r--r--examples/quick/particles/imageparticle/content/rotation.qml83
-rw-r--r--examples/quick/particles/imageparticle/content/sharing.qml217
-rw-r--r--examples/quick/particles/imageparticle/content/sprites.qml126
-rw-r--r--examples/quick/particles/imageparticle/deformation.qml88
-rw-r--r--examples/quick/particles/imageparticle/doc/src/imageparticle.qdoc43
-rw-r--r--examples/quick/particles/imageparticle/imageparticle.pro1
-rw-r--r--examples/quick/particles/imageparticle/imageparticle.qml71
-rw-r--r--examples/quick/particles/imageparticle/imageparticle.qrc24
-rw-r--r--examples/quick/particles/imageparticle/images/bear_tiles.png (renamed from examples/quick/particles/images/bear_tiles.png)bin40349 -> 40349 bytes
-rw-r--r--examples/quick/particles/imageparticle/images/colortable.png (renamed from examples/quick/particles/images/colortable.png)bin571 -> 571 bytes
-rw-r--r--examples/quick/particles/imageparticle/images/flower.png (renamed from examples/quick/particles/images/flower.png)bin4683 -> 4683 bytes
-rw-r--r--examples/quick/particles/imageparticle/images/starfish_0.png (renamed from examples/quick/particles/images/starfish_0.png)bin15972 -> 15972 bytes
-rw-r--r--examples/quick/particles/imageparticle/images/starfish_1.png (renamed from examples/quick/particles/images/starfish_1.png)bin15746 -> 15746 bytes
-rw-r--r--examples/quick/particles/imageparticle/images/starfish_2.png (renamed from examples/quick/particles/images/starfish_2.png)bin16067 -> 16067 bytes
-rw-r--r--examples/quick/particles/imageparticle/images/starfish_3.png (renamed from examples/quick/particles/images/starfish_3.png)bin16201 -> 16201 bytes
-rw-r--r--examples/quick/particles/imageparticle/images/starfish_4.png (renamed from examples/quick/particles/images/starfish_4.png)bin14698 -> 14698 bytes
-rw-r--r--examples/quick/particles/imageparticle/main.cpp53
-rw-r--r--examples/quick/particles/imageparticle/rotation.qml36
-rw-r--r--examples/quick/particles/imageparticle/sharing.qml170
-rw-r--r--examples/quick/particles/imageparticle/sprites.qml79
-rw-r--r--examples/quick/particles/images.qrc35
-rw-r--r--examples/quick/particles/images/meteor_explo.pngbin219946 -> 0 bytes
-rw-r--r--examples/quick/particles/images/meteors.pngbin132137 -> 0 bytes
-rw-r--r--examples/quick/particles/images/sizeInOut.pngbin132 -> 0 bytes
-rw-r--r--examples/quick/particles/itemparticle/CMakeLists.txt271
-rw-r--r--examples/quick/particles/itemparticle/content/Delegate.qml98
-rw-r--r--examples/quick/particles/itemparticle/content/Delegate2.qml89
-rw-r--r--examples/quick/particles/itemparticle/content/ExpandingDelegate.qml215
-rw-r--r--examples/quick/particles/itemparticle/content/bubble.pngbin2347 -> 0 bytes
-rw-r--r--examples/quick/particles/itemparticle/content/script.js27
-rw-r--r--examples/quick/particles/itemparticle/delegates.qml105
-rw-r--r--examples/quick/particles/itemparticle/itemparticle.pro12
-rw-r--r--examples/quick/particles/itemparticle/main.cpp51
-rw-r--r--examples/quick/particles/itemparticle/particleview.qml309
-rw-r--r--examples/quick/particles/particles.pro4
-rw-r--r--examples/quick/particles/system/CMakeLists.txt296
-rw-r--r--examples/quick/particles/system/content/dynamiccomparison.qml149
-rw-r--r--examples/quick/particles/system/content/dynamicemitters.qml150
-rw-r--r--examples/quick/particles/system/content/multiplepainters.qml106
-rw-r--r--examples/quick/particles/system/content/startstop.qml96
-rw-r--r--examples/quick/particles/system/content/timedgroupchanges.qml137
-rw-r--r--examples/quick/particles/system/doc/src/system.qdoc39
-rw-r--r--examples/quick/particles/system/dynamiccomparison.qml103
-rw-r--r--examples/quick/particles/system/dynamicemitters.qml107
-rw-r--r--examples/quick/particles/system/images/particle2.png (renamed from examples/quick/particles/images/particle2.png)bin1073 -> 1073 bytes
-rw-r--r--examples/quick/particles/system/images/particle3.png (renamed from examples/quick/particles/images/particle3.png)bin574 -> 574 bytes
-rw-r--r--examples/quick/particles/system/images/sparkleSize.png (renamed from examples/quick/particles/images/sparkleSize.png)bin378 -> 378 bytes
-rw-r--r--examples/quick/particles/system/main.cpp53
-rw-r--r--examples/quick/particles/system/multiplepainters.qml58
-rw-r--r--examples/quick/particles/system/startstop.qml50
-rw-r--r--examples/quick/particles/system/system.pro1
-rw-r--r--examples/quick/particles/system/system.qml67
-rw-r--r--examples/quick/particles/system/system.qrc15
-rw-r--r--examples/quick/particles/system/timedgroupchanges.qml90
-rw-r--r--examples/quick/pointerhandlers/CMakeLists.txt95
-rw-r--r--examples/quick/pointerhandlers/components/Button.qml59
-rw-r--r--examples/quick/pointerhandlers/components/CheckBox.qml58
-rw-r--r--examples/quick/pointerhandlers/components/CorkPanel.qml118
-rw-r--r--examples/quick/pointerhandlers/components/FakeFlickable.qml102
-rw-r--r--examples/quick/pointerhandlers/components/FlashAnimation.qml14
-rw-r--r--examples/quick/pointerhandlers/components/LeftDrawer.qml76
-rw-r--r--examples/quick/pointerhandlers/components/MomentumAnimation.qml34
-rw-r--r--examples/quick/pointerhandlers/components/MouseFeedbackSprite.qml58
-rw-r--r--examples/quick/pointerhandlers/components/QuadPieMenu.qml116
-rw-r--r--examples/quick/pointerhandlers/components/ScrollBar.qml114
-rw-r--r--examples/quick/pointerhandlers/components/Slider.qml112
-rw-r--r--examples/quick/pointerhandlers/components/TouchpointFeedbackSprite.qml25
-rw-r--r--examples/quick/pointerhandlers/components/images/checkmark.pngbin0 -> 809 bytes
-rw-r--r--examples/quick/pointerhandlers/components/images/cork.jpg (renamed from examples/quick/touchinteraction/flickable/content/cork.jpg)bin149337 -> 149337 bytes
-rw-r--r--examples/quick/pointerhandlers/components/images/fingersprite.pngbin0 -> 6792 bytes
-rw-r--r--examples/quick/pointerhandlers/components/images/mixer-knob.pngbin0 -> 7821 bytes
-rw-r--r--examples/quick/pointerhandlers/components/images/mouse.pngbin0 -> 1919 bytes
-rw-r--r--examples/quick/pointerhandlers/components/images/mouse_left.pngbin0 -> 740 bytes
-rw-r--r--examples/quick/pointerhandlers/components/images/mouse_middle.pngbin0 -> 558 bytes
-rw-r--r--examples/quick/pointerhandlers/components/images/mouse_right.pngbin0 -> 906 bytes
-rw-r--r--examples/quick/pointerhandlers/components/images/mouse_wheel_ridges.pngbin0 -> 167 bytes
-rw-r--r--examples/quick/pointerhandlers/components/images/note-yellow.png (renamed from examples/quick/touchinteraction/flickable/content/note-yellow.png)bin54283 -> 54283 bytes
-rw-r--r--examples/quick/pointerhandlers/components/images/tack.png (renamed from examples/quick/touchinteraction/flickable/content/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/fakeFlickable.qml103
-rw-r--r--examples/quick/pointerhandlers/flingAnimation.qml101
-rw-r--r--examples/quick/pointerhandlers/images/arrowhead.pngbin0 -> 883 bytes
-rw-r--r--examples/quick/pointerhandlers/images/balloon.pngbin0 -> 3759 bytes
-rw-r--r--examples/quick/pointerhandlers/images/blur-circle.png (renamed from examples/quick/touchinteraction/multipointtouch/content/blur-circle.png)bin4279 -> 4279 bytes
-rw-r--r--examples/quick/pointerhandlers/images/cursor-airbrush.pngbin0 -> 823 bytes
-rw-r--r--examples/quick/pointerhandlers/images/cursor-eraser.pngbin0 -> 1454 bytes
-rw-r--r--examples/quick/pointerhandlers/images/cursor-felt-marker.pngbin0 -> 513 bytes
-rw-r--r--examples/quick/pointerhandlers/images/cursor-pencil.pngbin0 -> 1307 bytes
-rw-r--r--examples/quick/pointerhandlers/images/fighter.pngbin0 -> 9669 bytes
-rw-r--r--examples/quick/pointerhandlers/images/grabbing-location.svg1
-rw-r--r--examples/quick/pointerhandlers/images/joystick-outer-case-pov.jpgbin0 -> 50687 bytes
-rw-r--r--examples/quick/pointerhandlers/images/map.svgzbin0 -> 27956 bytes
-rw-r--r--examples/quick/pointerhandlers/images/missile.pngbin0 -> 2305 bytes
-rw-r--r--examples/quick/pointerhandlers/images/redball.pngbin0 -> 10002 bytes
-rw-r--r--examples/quick/pointerhandlers/joystick.qml50
-rw-r--r--examples/quick/pointerhandlers/main.cpp4
-rw-r--r--examples/quick/pointerhandlers/map.qml86
-rw-r--r--examples/quick/pointerhandlers/mixer.qml34
-rw-r--r--examples/quick/pointerhandlers/multibuttons.qml72
-rw-r--r--examples/quick/pointerhandlers/multiflame.qml69
-rw-r--r--examples/quick/pointerhandlers/pieMenu.qml30
-rw-r--r--examples/quick/pointerhandlers/pinchHandler.qml194
-rw-r--r--examples/quick/pointerhandlers/pointerhandlers.pro10
-rw-r--r--examples/quick/pointerhandlers/pointerhandlers.qml48
-rw-r--r--examples/quick/pointerhandlers/qml.qrc55
-rw-r--r--examples/quick/pointerhandlers/sidebar.qml184
-rw-r--r--examples/quick/pointerhandlers/singlePointHandlerProperties.qml139
-rw-r--r--examples/quick/pointerhandlers/tabletCanvasDrawing.qml204
-rw-r--r--examples/quick/pointerhandlers/tapHandler.qml213
-rw-r--r--examples/quick/pointerhandlers/tapWithModifiers.qml30
-rw-r--r--examples/quick/positioners/CMakeLists.txt142
-rw-r--r--examples/quick/positioners/doc/src/positioners.qdoc29
-rw-r--r--examples/quick/positioners/main.cpp51
-rw-r--r--examples/quick/positioners/positioners-attachedproperties.qml101
-rw-r--r--examples/quick/positioners/positioners-transitions.qml279
-rw-r--r--examples/quick/positioners/positioners.qml59
-rw-r--r--examples/quick/positioners/positioners.qrc2
-rw-r--r--examples/quick/quick-accessibility/Button.qml49
-rw-r--r--examples/quick/quick-accessibility/CMakeLists.txt71
-rw-r--r--examples/quick/quick-accessibility/Checkbox.qml44
-rw-r--r--examples/quick/quick-accessibility/Slider.qml53
-rw-r--r--examples/quick/quick-accessibility/accessibility.qml54
-rw-r--r--examples/quick/quick-accessibility/accessibility.qrc8
-rw-r--r--examples/quick/quick-accessibility/content/Button.qml96
-rw-r--r--examples/quick/quick-accessibility/content/Checkbox.qml91
-rw-r--r--examples/quick/quick-accessibility/content/Slider.qml100
-rw-r--r--examples/quick/quick-accessibility/doc/src/accessibility.qdoc31
-rw-r--r--examples/quick/quick-accessibility/main.cpp51
-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.txt70
-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/fillRules.qml62
-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/sampling.qml257
-rw-r--r--examples/quick/quickshapes/shapes/shapegallery.qml184
-rw-r--r--examples/quick/quickshapes/shapes/shapes.pro10
-rw-r--r--examples/quick/quickshapes/shapes/shapes.qrc28
-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.conf2
-rw-r--r--examples/quick/quickshapes/weatherforecast/weatherforecast.pro10
-rw-r--r--examples/quick/quickshapes/weatherforecast/weatherforecast.qrc33
-rw-r--r--examples/quick/quickwidgets/CMakeLists.txt6
-rw-r--r--examples/quick/quickwidgets/qquickviewcomparison/CMakeLists.txt66
-rw-r--r--examples/quick/quickwidgets/qquickviewcomparison/fbitem.cpp286
-rw-r--r--examples/quick/quickwidgets/qquickviewcomparison/fbitem.h147
-rw-r--r--examples/quick/quickwidgets/qquickviewcomparison/logo.cpp151
-rw-r--r--examples/quick/quickwidgets/qquickviewcomparison/logo.h75
-rw-r--r--examples/quick/quickwidgets/qquickviewcomparison/main.cpp91
-rw-r--r--examples/quick/quickwidgets/qquickviewcomparison/mainwindow.cpp245
-rw-r--r--examples/quick/quickwidgets/qquickviewcomparison/mainwindow.h102
-rw-r--r--examples/quick/quickwidgets/qquickviewcomparison/qquickviewcomparison.pro24
-rw-r--r--examples/quick/quickwidgets/qquickviewcomparison/qquickviewcomparison.qrc5
-rw-r--r--examples/quick/quickwidgets/qquickviewcomparison/test.qml228
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt57
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/images/qquickwidgetversuswindow-opengl-example.jpgbin0 -> 25452 bytes
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc39
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/fbitem.cpp239
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/fbitem.h100
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/logo.cpp104
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/logo.h28
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp42
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/mainwindow.cpp198
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/mainwindow.h55
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/qquickwidgetversuswindow_opengl.pro24
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/qquickwidgetversuswindow_opengl.qrc6
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/test.qml171
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag23
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag.qsbbin0 -> 1717 bytes
-rw-r--r--examples/quick/quickwidgets/quickwidget/CMakeLists.txt78
-rw-r--r--examples/quick/quickwidgets/quickwidget/customgl.qml69
-rw-r--r--examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc30
-rw-r--r--examples/quick/quickwidgets/quickwidget/fbitem.cpp100
-rw-r--r--examples/quick/quickwidgets/quickwidget/fbitem.h64
-rw-r--r--examples/quick/quickwidgets/quickwidget/main.cpp155
-rw-r--r--examples/quick/quickwidgets/quickwidget/quickwidget.pro3
-rw-r--r--examples/quick/quickwidgets/quickwidget/quickwidget.qrc2
-rw-r--r--examples/quick/quickwidgets/quickwidget/rotatingsquare.qml82
-rw-r--r--examples/quick/quickwidgets/quickwidget/rotatingsquaretab.qml76
-rw-r--r--examples/quick/quickwidgets/quickwidgets.pro2
-rw-r--r--examples/quick/rendercontrol/.prev_CMakeLists.txt6
-rw-r--r--examples/quick/rendercontrol/CMakeLists.txt12
-rw-r--r--examples/quick/rendercontrol/rendercontrol.pro2
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/CMakeLists.txt65
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/demo.qml63
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/doc/src/rendercontrol_d3d11.qdoc30
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/engine.cpp61
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/engine.h56
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/main.cpp53
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/quad.frag3
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/rendercontrol.qrc2
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/rendercontrol_d3d11.pro2
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/window.cpp79
-rw-r--r--examples/quick/rendercontrol/rendercontrol_d3d11/window.h55
-rw-r--r--examples/quick/rendercontrol/rendercontrol_opengl/CMakeLists.txt69
-rw-r--r--examples/quick/rendercontrol/rendercontrol_opengl/cuberenderer.cpp53
-rw-r--r--examples/quick/rendercontrol/rendercontrol_opengl/cuberenderer.h51
-rw-r--r--examples/quick/rendercontrol/rendercontrol_opengl/demo.qml63
-rw-r--r--examples/quick/rendercontrol/rendercontrol_opengl/doc/src/rendercontrol_opengl.qdoc45
-rw-r--r--examples/quick/rendercontrol/rendercontrol_opengl/main.cpp53
-rw-r--r--examples/quick/rendercontrol/rendercontrol_opengl/rendercontrol.qrc2
-rw-r--r--examples/quick/rendercontrol/rendercontrol_opengl/window_singlethreaded.cpp66
-rw-r--r--examples/quick/rendercontrol/rendercontrol_opengl/window_singlethreaded.h53
-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.txt128
-rw-r--r--examples/quick/righttoleft/doc/images/qml-righttoleft-example.pngbin35323 -> 0 bytes
-rw-r--r--examples/quick/righttoleft/doc/src/righttoleft.qdoc48
-rw-r--r--examples/quick/righttoleft/layoutdirection/layoutdirection.qml265
-rw-r--r--examples/quick/righttoleft/layoutdirection/layoutdirection.qmlproject16
-rw-r--r--examples/quick/righttoleft/layoutmirroring/layoutmirroring.qml213
-rw-r--r--examples/quick/righttoleft/layoutmirroring/layoutmirroring.qmlproject16
-rw-r--r--examples/quick/righttoleft/main.cpp51
-rw-r--r--examples/quick/righttoleft/righttoleft.pro10
-rw-r--r--examples/quick/righttoleft/righttoleft.qml66
-rw-r--r--examples/quick/righttoleft/righttoleft.qmlproject16
-rw-r--r--examples/quick/righttoleft/righttoleft.qrc8
-rw-r--r--examples/quick/righttoleft/textalignment/textalignment.qml468
-rw-r--r--examples/quick/righttoleft/textalignment/textalignment.qmlproject16
-rw-r--r--examples/quick/scenegraph/.prev_CMakeLists.txt22
-rw-r--r--examples/quick/scenegraph/CMakeLists.txt29
-rw-r--r--examples/quick/scenegraph/customgeometry/.prev_CMakeLists.txt60
-rw-r--r--examples/quick/scenegraph/customgeometry/CMakeLists.txt72
-rw-r--r--examples/quick/scenegraph/customgeometry/beziercurve.cpp57
-rw-r--r--examples/quick/scenegraph/customgeometry/beziercurve.h55
-rw-r--r--examples/quick/scenegraph/customgeometry/doc/src/customgeometry.qdoc62
-rw-r--r--examples/quick/scenegraph/customgeometry/main.cpp51
-rw-r--r--examples/quick/scenegraph/customgeometry/main.qml57
-rw-r--r--examples/quick/scenegraph/custommaterial/.prev_CMakeLists.txt64
-rw-r--r--examples/quick/scenegraph/custommaterial/CMakeLists.txt81
-rw-r--r--examples/quick/scenegraph/custommaterial/customitem.cpp51
-rw-r--r--examples/quick/scenegraph/custommaterial/customitem.h53
-rw-r--r--examples/quick/scenegraph/custommaterial/doc/src/custommaterial.qdoc29
-rw-r--r--examples/quick/scenegraph/custommaterial/main.cpp51
-rw-r--r--examples/quick/scenegraph/custommaterial/main.qml59
-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.txt54
-rw-r--r--examples/quick/scenegraph/customrendernode/customrender.cpp214
-rw-r--r--examples/quick/scenegraph/customrendernode/customrender.h34
-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.cpp56
-rw-r--r--examples/quick/scenegraph/customrendernode/main.qml132
-rw-r--r--examples/quick/scenegraph/customrendernode/shaders/customrender.frag18
-rw-r--r--examples/quick/scenegraph/customrendernode/shaders/customrender.vert31
-rw-r--r--examples/quick/scenegraph/d3d11underqml/CMakeLists.txt70
-rw-r--r--examples/quick/scenegraph/d3d11underqml/d3d11squircle.cpp53
-rw-r--r--examples/quick/scenegraph/d3d11underqml/d3d11squircle.h51
-rw-r--r--examples/quick/scenegraph/d3d11underqml/doc/src/d3d11underqml.qdoc29
-rw-r--r--examples/quick/scenegraph/d3d11underqml/main.cpp55
-rw-r--r--examples/quick/scenegraph/d3d11underqml/main.qml55
-rw-r--r--examples/quick/scenegraph/d3d11underqml/squircle.frag3
-rw-r--r--examples/quick/scenegraph/fboitem/CMakeLists.txt68
-rw-r--r--examples/quick/scenegraph/fboitem/doc/images/fboitem-example.jpgbin25863 -> 0 bytes
-rw-r--r--examples/quick/scenegraph/fboitem/doc/src/fboitem.qdoc36
-rw-r--r--examples/quick/scenegraph/fboitem/fboinsgrenderer.cpp85
-rw-r--r--examples/quick/scenegraph/fboitem/fboinsgrenderer.h66
-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.cpp69
-rw-r--r--examples/quick/scenegraph/fboitem/main.qml129
-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.txt79
-rw-r--r--examples/quick/scenegraph/graph/doc/src/graph.qdoc29
-rw-r--r--examples/quick/scenegraph/graph/graph.cpp51
-rw-r--r--examples/quick/scenegraph/graph/graph.h51
-rw-r--r--examples/quick/scenegraph/graph/gridnode.cpp51
-rw-r--r--examples/quick/scenegraph/graph/gridnode.h51
-rw-r--r--examples/quick/scenegraph/graph/linenode.cpp57
-rw-r--r--examples/quick/scenegraph/graph/linenode.h51
-rw-r--r--examples/quick/scenegraph/graph/main.cpp55
-rw-r--r--examples/quick/scenegraph/graph/main.qml67
-rw-r--r--examples/quick/scenegraph/graph/noisynode.cpp58
-rw-r--r--examples/quick/scenegraph/graph/noisynode.h51
-rw-r--r--examples/quick/scenegraph/graph/shaders/compile.bat49
-rw-r--r--examples/quick/scenegraph/graph/shaders/line.frag3
-rw-r--r--examples/quick/scenegraph/graph/shaders/noisy.frag3
-rw-r--r--examples/quick/scenegraph/metaltextureimport/CMakeLists.txt77
-rw-r--r--examples/quick/scenegraph/metaltextureimport/doc/src/metaltextureimport.qdoc34
-rw-r--r--examples/quick/scenegraph/metaltextureimport/main.cpp53
-rw-r--r--examples/quick/scenegraph/metaltextureimport/main.qml55
-rw-r--r--examples/quick/scenegraph/metaltextureimport/metaltextureimport.h51
-rw-r--r--examples/quick/scenegraph/metaltextureimport/metaltextureimport.mm51
-rw-r--r--examples/quick/scenegraph/metaltextureimport/squircle.frag3
-rw-r--r--examples/quick/scenegraph/metalunderqml/CMakeLists.txt74
-rw-r--r--examples/quick/scenegraph/metalunderqml/doc/src/metalunderqml.qdoc29
-rw-r--r--examples/quick/scenegraph/metalunderqml/main.cpp55
-rw-r--r--examples/quick/scenegraph/metalunderqml/main.qml55
-rw-r--r--examples/quick/scenegraph/metalunderqml/metalsquircle.h51
-rw-r--r--examples/quick/scenegraph/metalunderqml/metalsquircle.mm53
-rw-r--r--examples/quick/scenegraph/metalunderqml/squircle.frag3
-rw-r--r--examples/quick/scenegraph/openglunderqml/CMakeLists.txt73
-rw-r--r--examples/quick/scenegraph/openglunderqml/doc/src/openglunderqml.qdoc30
-rw-r--r--examples/quick/scenegraph/openglunderqml/main.cpp55
-rw-r--r--examples/quick/scenegraph/openglunderqml/main.qml57
-rw-r--r--examples/quick/scenegraph/openglunderqml/squircle.cpp53
-rw-r--r--examples/quick/scenegraph/openglunderqml/squircle.h58
-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.cpp266
-rw-r--r--examples/quick/scenegraph/shared/logorenderer.h88
-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.txt73
-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/threadedanimation/main.cpp53
-rw-r--r--examples/quick/scenegraph/threadedanimation/main.qml59
-rw-r--r--examples/quick/scenegraph/threadedanimation/spinner.cpp51
-rw-r--r--examples/quick/scenegraph/threadedanimation/spinner.h53
-rw-r--r--examples/quick/scenegraph/twotextureproviders/CMakeLists.txt79
-rw-r--r--examples/quick/scenegraph/twotextureproviders/doc/src/twotextureproviders.qdoc29
-rw-r--r--examples/quick/scenegraph/twotextureproviders/main.cpp53
-rw-r--r--examples/quick/scenegraph/twotextureproviders/main.qml63
-rw-r--r--examples/quick/scenegraph/twotextureproviders/shaders/checker.frag3
-rw-r--r--examples/quick/scenegraph/twotextureproviders/shaders/compile.bat42
-rw-r--r--examples/quick/scenegraph/twotextureproviders/shaders/xorblender.frag3
-rw-r--r--examples/quick/scenegraph/twotextureproviders/xorblender.cpp51
-rw-r--r--examples/quick/scenegraph/twotextureproviders/xorblender.h53
-rw-r--r--examples/quick/scenegraph/vulkantextureimport/CMakeLists.txt78
-rw-r--r--examples/quick/scenegraph/vulkantextureimport/doc/src/vulkantextureimport.qdoc31
-rw-r--r--examples/quick/scenegraph/vulkantextureimport/main.cpp53
-rw-r--r--examples/quick/scenegraph/vulkantextureimport/main.qml57
-rw-r--r--examples/quick/scenegraph/vulkantextureimport/vulkantextureimport.cpp51
-rw-r--r--examples/quick/scenegraph/vulkantextureimport/vulkantextureimport.h51
-rw-r--r--examples/quick/scenegraph/vulkanunderqml/CMakeLists.txt78
-rw-r--r--examples/quick/scenegraph/vulkanunderqml/doc/src/vulkanunderqml.qdoc116
-rw-r--r--examples/quick/scenegraph/vulkanunderqml/main.cpp53
-rw-r--r--examples/quick/scenegraph/vulkanunderqml/main.qml57
-rw-r--r--examples/quick/scenegraph/vulkanunderqml/vulkansquircle.cpp57
-rw-r--r--examples/quick/scenegraph/vulkanunderqml/vulkansquircle.h51
-rw-r--r--examples/quick/shadereffects/CMakeLists.txt92
-rw-r--r--examples/quick/shadereffects/content/Slider.qml102
-rw-r--r--examples/quick/shadereffects/content/shaders/blur.frag3
-rw-r--r--examples/quick/shadereffects/content/shaders/colorize.frag3
-rwxr-xr-xexamples/quick/shadereffects/content/shaders/compile.bat56
-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.qdoc29
-rw-r--r--examples/quick/shadereffects/main.cpp51
-rw-r--r--examples/quick/shadereffects/shadereffects.qml73
-rw-r--r--examples/quick/shadereffects/shadereffects.qrc3
-rw-r--r--examples/quick/shapes/CMakeLists.txt169
-rw-r--r--examples/quick/shapes/content/clippedtigers.qml137
-rw-r--r--examples/quick/shapes/content/interactive.qml344
-rw-r--r--examples/quick/shapes/content/item10.qml174
-rw-r--r--examples/quick/shapes/content/item11.qml115
-rw-r--r--examples/quick/shapes/content/item12.qml113
-rw-r--r--examples/quick/shapes/content/item13.qml97
-rw-r--r--examples/quick/shapes/content/item14.qml91
-rw-r--r--examples/quick/shapes/content/item15.qml113
-rw-r--r--examples/quick/shapes/content/item17.qml77
-rw-r--r--examples/quick/shapes/content/item18.qml71
-rw-r--r--examples/quick/shapes/content/item2.qml153
-rw-r--r--examples/quick/shapes/content/item3.qml98
-rw-r--r--examples/quick/shapes/content/item4.qml86
-rw-r--r--examples/quick/shapes/content/item5.qml89
-rw-r--r--examples/quick/shapes/content/item6.qml89
-rw-r--r--examples/quick/shapes/content/item7.qml95
-rw-r--r--examples/quick/shapes/content/item8.qml93
-rw-r--r--examples/quick/shapes/content/item9.qml100
-rw-r--r--examples/quick/shapes/content/main.qml65
-rw-r--r--examples/quick/shapes/content/sampling.qml186
-rw-r--r--examples/quick/shapes/content/shapegallery.qml200
-rw-r--r--examples/quick/shapes/content/tapableTriangle.qml101
-rw-r--r--examples/quick/shapes/content/tiger.qml3714
-rw-r--r--examples/quick/shapes/doc/src/shapes.qdoc39
-rw-r--r--examples/quick/shapes/main.cpp51
-rw-r--r--examples/quick/shapes/shapes.pro31
-rw-r--r--examples/quick/shapes/shapes.qrc33
-rw-r--r--examples/quick/shared/Button.qml55
-rw-r--r--examples/quick/shared/CMakeLists.txt38
-rw-r--r--examples/quick/shared/CheckBox.qml53
-rw-r--r--examples/quick/shared/FlickrRssModel.qml92
-rw-r--r--examples/quick/shared/Images.qml14
-rw-r--r--examples/quick/shared/Label.qml53
-rw-r--r--examples/quick/shared/LauncherList.qml77
-rw-r--r--examples/quick/shared/SimpleLauncherDelegate.qml126
-rw-r--r--examples/quick/shared/Slider.qml69
-rw-r--r--examples/quick/shared/TabSet.qml55
-rw-r--r--examples/quick/shared/TextField.qml53
-rw-r--r--examples/quick/shared/qmldir3
-rw-r--r--examples/quick/shared/shared.h66
-rw-r--r--examples/quick/shared/shared.qrc15
-rw-r--r--examples/quick/tableview/CMakeLists.txt6
-rw-r--r--examples/quick/tableview/gameoflife/CMakeLists.txt72
-rw-r--r--examples/quick/tableview/gameoflife/doc/src/gameoflife.qdoc29
-rw-r--r--examples/quick/tableview/gameoflife/gameoflifemodel.cpp51
-rw-r--r--examples/quick/tableview/gameoflife/gameoflifemodel.h51
-rw-r--r--examples/quick/tableview/gameoflife/main.cpp53
-rw-r--r--examples/quick/tableview/gameoflife/main.qml75
-rw-r--r--examples/quick/tableview/pixelator/CMakeLists.txt70
-rw-r--r--examples/quick/tableview/pixelator/doc/src/pixelator.qdoc29
-rw-r--r--examples/quick/tableview/pixelator/imagemodel.cpp51
-rw-r--r--examples/quick/tableview/pixelator/imagemodel.h51
-rw-r--r--examples/quick/tableview/pixelator/main.cpp53
-rw-r--r--examples/quick/tableview/pixelator/main.qml57
-rw-r--r--examples/quick/text/.prev_CMakeLists.txt144
-rw-r--r--examples/quick/text/CMakeLists.txt190
-rw-r--r--examples/quick/text/doc/src/text.qdoc29
-rw-r--r--examples/quick/text/fonts/availableFonts.qml60
-rw-r--r--examples/quick/text/fonts/banner.qml84
-rw-r--r--examples/quick/text/fonts/fonts.qml104
-rw-r--r--examples/quick/text/fonts/hello.qml82
-rw-r--r--examples/quick/text/imgtag/TextWithImage.qml53
-rw-r--r--examples/quick/text/imgtag/imgtag.qml53
-rw-r--r--examples/quick/text/main.cpp51
-rw-r--r--examples/quick/text/styledtext-layout.qml71
-rw-r--r--examples/quick/text/text.qml68
-rw-r--r--examples/quick/text/text.qmlproject1
-rw-r--r--examples/quick/text/text.qrc7
-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.qml221
-rw-r--r--examples/quick/threading/CMakeLists.txt130
-rw-r--r--examples/quick/threading/doc/images/qml-threading-example.pngbin22778 -> 0 bytes
-rw-r--r--examples/quick/threading/doc/src/threading.qdoc68
-rw-r--r--examples/quick/threading/main.cpp51
-rw-r--r--examples/quick/threading/threadedlistmodel/dataloader.mjs59
-rw-r--r--examples/quick/threading/threadedlistmodel/doc/src/threadedlistmodel.qdoc37
-rw-r--r--examples/quick/threading/threadedlistmodel/threadedlistmodel.qmlproject66
-rw-r--r--examples/quick/threading/threadedlistmodel/timedisplay.qml89
-rw-r--r--examples/quick/threading/threading.pro10
-rw-r--r--examples/quick/threading/threading.qml65
-rw-r--r--examples/quick/threading/threading.qmlproject16
-rw-r--r--examples/quick/threading/threading.qrc10
-rw-r--r--examples/quick/threading/workerscript/Spinner.qml98
-rw-r--r--examples/quick/threading/workerscript/workerscript.mjs74
-rw-r--r--examples/quick/threading/workerscript/workerscript.qml109
-rw-r--r--examples/quick/threading/workerscript/workerscript.qmlproject66
-rw-r--r--examples/quick/touchinteraction/CMakeLists.txt147
-rw-r--r--examples/quick/touchinteraction/doc/images/qml-touchinteraction-example.pngbin35860 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/doc/src/touchinteraction.qdoc79
-rw-r--r--examples/quick/touchinteraction/flickable/basic-flickable.qml80
-rw-r--r--examples/quick/touchinteraction/flickable/content/Panel.qml155
-rw-r--r--examples/quick/touchinteraction/flickable/corkboards.qml99
-rw-r--r--examples/quick/touchinteraction/main.cpp51
-rw-r--r--examples/quick/touchinteraction/multipointtouch/bearwhack.qml145
-rw-r--r--examples/quick/touchinteraction/multipointtouch/content/AugmentedTouchPoint.qml82
-rw-r--r--examples/quick/touchinteraction/multipointtouch/content/Bear0.pngbin14359 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/content/Bear1.pngbin99378 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/content/Bear2.pngbin80759 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/content/Bear3.pngbin21122 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/content/BearB.pngbin16505 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/content/BearWhackParticleSystem.qml193
-rw-r--r--examples/quick/touchinteraction/multipointtouch/content/ParticleFlame.qml80
-rw-r--r--examples/quick/touchinteraction/multipointtouch/content/blur-circle3.pngbin5148 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/content/heart-blur.pngbin5406 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/content/title.pngbin76389 -> 0 bytes
-rw-r--r--examples/quick/touchinteraction/multipointtouch/multiflame.qml105
-rw-r--r--examples/quick/touchinteraction/pincharea/flickresize.qml109
-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.qml68
-rw-r--r--examples/quick/touchinteraction/touchinteraction.qmlproject16
-rw-r--r--examples/quick/touchinteraction/touchinteraction.qrc27
-rw-r--r--examples/quick/tutorials/CMakeLists.txt4
-rw-r--r--examples/quick/tutorials/dynamicview/CMakeLists.txt7
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview1/CMakeLists.txt49
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview1/PetsModel.qml107
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview1/dynamicview.qml82
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview1/dynamicview1.qrc2
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview1/main.cpp53
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview2/CMakeLists.txt49
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview2/PetsModel.qml107
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview2/dynamicview.qml101
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview2/dynamicview2.qrc2
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview2/main.cpp53
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview3/CMakeLists.txt49
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview3/PetsModel.qml107
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview3/dynamicview.qml110
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview3/dynamicview3.qrc2
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview3/main.cpp53
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview4/CMakeLists.txt50
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview4/ListSelector.qml95
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview4/PetsModel.qml107
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview4/dynamicview.qml133
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview4/dynamicview4.qrc4
-rw-r--r--examples/quick/tutorials/dynamicview/dynamicview4/main.cpp53
-rw-r--r--examples/quick/tutorials/helloworld/Cell.qml53
-rw-r--r--examples/quick/tutorials/helloworld/tutorial1.qml53
-rw-r--r--examples/quick/tutorials/helloworld/tutorial2.qml53
-rw-r--r--examples/quick/tutorials/helloworld/tutorial3.qml61
-rw-r--r--examples/quick/tutorials/samegame/CMakeLists.txt7
-rw-r--r--examples/quick/tutorials/samegame/samegame1/Block.qml55
-rw-r--r--examples/quick/tutorials/samegame/samegame1/Button.qml53
-rw-r--r--examples/quick/tutorials/samegame/samegame1/CMakeLists.txt53
-rw-r--r--examples/quick/tutorials/samegame/samegame1/main.cpp53
-rw-r--r--examples/quick/tutorials/samegame/samegame1/pics/background.jpg (renamed from examples/quick/tutorials/samegame/shared/pics/background.jpg)bin36473 -> 36473 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame1/pics/redStone.png (renamed from examples/quick/tutorials/samegame/shared/pics/redStone.png)bin2902 -> 2902 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame1/samegame.qml55
-rw-r--r--examples/quick/tutorials/samegame/samegame1/samegame1.pro5
-rw-r--r--examples/quick/tutorials/samegame/samegame1/samegame1.qrc4
-rw-r--r--examples/quick/tutorials/samegame/samegame2/Block.qml55
-rw-r--r--examples/quick/tutorials/samegame/samegame2/Button.qml53
-rw-r--r--examples/quick/tutorials/samegame/samegame2/CMakeLists.txt54
-rw-r--r--examples/quick/tutorials/samegame/samegame2/main.cpp53
-rw-r--r--examples/quick/tutorials/samegame/samegame2/pics/background.jpgbin0 -> 36473 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame2/pics/redStone.pngbin0 -> 2902 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame2/samegame.qml55
-rw-r--r--examples/quick/tutorials/samegame/samegame2/samegame2.pro5
-rw-r--r--examples/quick/tutorials/samegame/samegame2/samegame2.qrc4
-rw-r--r--examples/quick/tutorials/samegame/samegame3/Block.qml59
-rw-r--r--examples/quick/tutorials/samegame/samegame3/Button.qml53
-rw-r--r--examples/quick/tutorials/samegame/samegame3/CMakeLists.txt57
-rw-r--r--examples/quick/tutorials/samegame/samegame3/Dialog.qml53
-rw-r--r--examples/quick/tutorials/samegame/samegame3/main.cpp53
-rw-r--r--examples/quick/tutorials/samegame/samegame3/pics/background.jpgbin0 -> 36473 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame3/pics/blueStone.png (renamed from examples/quick/tutorials/samegame/shared/pics/blueStone.png)bin3054 -> 3054 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame3/pics/greenStone.png (renamed from examples/quick/tutorials/samegame/shared/pics/greenStone.png)bin2932 -> 2932 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame3/pics/redStone.pngbin0 -> 2902 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame3/samegame.qml55
-rw-r--r--examples/quick/tutorials/samegame/samegame3/samegame3.pro5
-rw-r--r--examples/quick/tutorials/samegame/samegame3/samegame3.qrc7
-rw-r--r--examples/quick/tutorials/samegame/samegame4/BoomBlock.qml92
-rw-r--r--examples/quick/tutorials/samegame/samegame4/Button.qml44
-rw-r--r--examples/quick/tutorials/samegame/samegame4/CMakeLists.txt64
-rw-r--r--examples/quick/tutorials/samegame/samegame4/Dialog.qml70
-rw-r--r--examples/quick/tutorials/samegame/samegame4/content/BoomBlock.qml139
-rw-r--r--examples/quick/tutorials/samegame/samegame4/content/Button.qml91
-rw-r--r--examples/quick/tutorials/samegame/samegame4/content/Dialog.qml117
-rw-r--r--examples/quick/tutorials/samegame/samegame4/content/samegame.js227
-rw-r--r--examples/quick/tutorials/samegame/samegame4/main.cpp53
-rw-r--r--examples/quick/tutorials/samegame/samegame4/pics/background.jpgbin0 -> 36473 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame4/pics/blueStar.png (renamed from examples/quick/tutorials/samegame/shared/pics/blueStar.png)bin149 -> 149 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame4/pics/blueStone.pngbin0 -> 3054 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame4/pics/greenStar.png (renamed from examples/quick/tutorials/samegame/shared/pics/greenStar.png)bin149 -> 149 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame4/pics/greenStone.pngbin0 -> 2932 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame4/pics/redStar.png (renamed from examples/quick/tutorials/samegame/shared/pics/redStar.png)bin148 -> 148 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame4/pics/redStone.pngbin0 -> 2902 bytes
-rw-r--r--examples/quick/tutorials/samegame/samegame4/samegame.js230
-rw-r--r--examples/quick/tutorials/samegame/samegame4/samegame.qml58
-rw-r--r--examples/quick/tutorials/samegame/samegame4/samegame4.pro5
-rw-r--r--examples/quick/tutorials/samegame/samegame4/samegame4.qrc17
-rw-r--r--examples/quick/tutorials/samegame/shared/pics/shared.qrc13
-rw-r--r--examples/quick/tutorials/samegame/shared/pics/star.pngbin262 -> 0 bytes
-rw-r--r--examples/quick/tutorials/samegame/shared/pics/yellowStone.pngbin3056 -> 0 bytes
-rw-r--r--examples/quick/views/CMakeLists.txt230
-rw-r--r--examples/quick/views/delegatemodel/delegatemodel.qmlproject14
-rw-r--r--examples/quick/views/delegatemodel/dragselection.qml181
-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.cpp51
-rw-r--r--examples/quick/views/delegatemodel/slideshow.qml164
-rw-r--r--examples/quick/views/doc/src/views.qdoc36
-rw-r--r--examples/quick/views/gridview/gridview-example.qml76
-rw-r--r--examples/quick/views/listview/content/PetsModel.qml53
-rw-r--r--examples/quick/views/listview/content/PressAndHoldButton.qml55
-rw-r--r--examples/quick/views/listview/content/RecipesModel.qml85
-rw-r--r--examples/quick/views/listview/content/SmallText.qml55
-rw-r--r--examples/quick/views/listview/content/TextButton.qml55
-rw-r--r--examples/quick/views/listview/content/ToggleButton.qml53
-rw-r--r--examples/quick/views/listview/displaymargin.qml59
-rw-r--r--examples/quick/views/listview/dynamiclist.qml153
-rw-r--r--examples/quick/views/listview/expandingdelegates.qml161
-rw-r--r--examples/quick/views/listview/highlight.qml99
-rw-r--r--examples/quick/views/listview/highlightranges.qml117
-rw-r--r--examples/quick/views/listview/sections.qml154
-rw-r--r--examples/quick/views/main.cpp51
-rw-r--r--examples/quick/views/objectmodel/objectmodel.qml119
-rw-r--r--examples/quick/views/package/Delegate.qml96
-rw-r--r--examples/quick/views/package/view.qml75
-rw-r--r--examples/quick/views/pathview/pathview-example.qml137
-rw-r--r--examples/quick/views/views.qml59
-rw-r--r--examples/quick/views/views.qmlproject1
-rw-r--r--examples/quick/views/views.qrc4
-rw-r--r--examples/quick/window/AllScreens.qml55
-rw-r--r--examples/quick/window/CMakeLists.txt146
-rw-r--r--examples/quick/window/CurrentScreen.qml51
-rw-r--r--examples/quick/window/Splash.qml73
-rw-r--r--examples/quick/window/doc/src/window.qdoc32
-rw-r--r--examples/quick/window/main.cpp58
-rw-r--r--examples/quick/window/window.qml97
-rw-r--r--examples/quick/window/window.qrc2
-rw-r--r--examples/quickcontrols/CMakeLists.txt21
-rw-r--r--examples/quickcontrols/attachedstyleproperties/CMakeLists.txt47
-rw-r--r--examples/quickcontrols/attachedstyleproperties/MyStyle/ApplicationWindow.qml17
-rw-r--r--examples/quickcontrols/attachedstyleproperties/MyStyle/Button.qml33
-rw-r--r--examples/quickcontrols/attachedstyleproperties/MyStyle/CMakeLists.txt47
-rw-r--r--examples/quickcontrols/attachedstyleproperties/MyStyle/Label.qml10
-rw-r--r--examples/quickcontrols/attachedstyleproperties/MyStyle/Popup.qml49
-rw-r--r--examples/quickcontrols/attachedstyleproperties/MyStyle/Switch.qml58
-rw-r--r--examples/quickcontrols/attachedstyleproperties/MyStyle/ToolBar.qml24
-rw-r--r--examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp134
-rw-r--r--examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.h76
-rw-r--r--examples/quickcontrols/attachedstyleproperties/attachedstyleproperties.cpp28
-rw-r--r--examples/quickcontrols/attachedstyleproperties/attachedstyleproperties.qml115
-rw-r--r--examples/quickcontrols/attachedstyleproperties/doc/images/qtquickcontrols-attachedstyleproperties.pngbin0 -> 11703 bytes
-rw-r--r--examples/quickcontrols/attachedstyleproperties/doc/src/qtquickcontrols-attachedstyleproperties.qdoc19
-rw-r--r--examples/quickcontrols/chattutorial/CMakeLists.txt16
-rw-r--r--examples/quickcontrols/chattutorial/chapter1/CMakeLists.txt49
-rw-r--r--examples/quickcontrols/chattutorial/chapter1/Main.qml23
-rw-r--r--examples/quickcontrols/chattutorial/chapter1/chapter1.pro15
-rw-r--r--examples/quickcontrols/chattutorial/chapter1/main.cpp16
-rw-r--r--examples/quickcontrols/chattutorial/chapter1/qmldir2
-rw-r--r--examples/quickcontrols/chattutorial/chapter1/qtquickcontrols2.conf2
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/CMakeLists.txt62
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/Main.qml50
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/chapter2.pro27
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein.pngbin0 -> 1669 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein@2x.pngbin0 -> 5657 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein@3x.pngbin0 -> 11804 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein@4x.pngbin0 -> 19989 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway.pngbin0 -> 2255 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway@2x.pngbin0 -> 6375 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway@3x.pngbin0 -> 13723 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway@4x.pngbin0 -> 24109 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude.pngbin0 -> 2937 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude@2x.pngbin0 -> 9239 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude@3x.pngbin0 -> 18163 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude@4x.pngbin0 -> 28614 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/images/images.qrc16
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/main.cpp16
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/qmldir2
-rw-r--r--examples/quickcontrols/chattutorial/chapter2/qtquickcontrols2.conf2
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/CMakeLists.txt64
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/ContactPage.qml47
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/ConversationPage.qml102
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/Main.qml18
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/chapter3.pro29
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein.pngbin0 -> 1669 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein@2x.pngbin0 -> 5657 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein@3x.pngbin0 -> 11804 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein@4x.pngbin0 -> 19989 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway.pngbin0 -> 2255 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway@2x.pngbin0 -> 6375 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway@3x.pngbin0 -> 13723 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway@4x.pngbin0 -> 24109 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude.pngbin0 -> 2937 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude@2x.pngbin0 -> 9239 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude@3x.pngbin0 -> 18163 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude@4x.pngbin0 -> 28614 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/images/images.qrc16
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/main.cpp16
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/qmldir4
-rw-r--r--examples/quickcontrols/chattutorial/chapter3/qtquickcontrols2.conf2
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/CMakeLists.txt67
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/ContactPage.qml51
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/ConversationPage.qml128
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/Main.qml18
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/chapter4.pro39
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein.pngbin0 -> 1669 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein@2x.pngbin0 -> 5657 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein@3x.pngbin0 -> 11804 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein@4x.pngbin0 -> 19989 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway.pngbin0 -> 2255 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway@2x.pngbin0 -> 6375 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway@3x.pngbin0 -> 13723 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway@4x.pngbin0 -> 24109 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude.pngbin0 -> 2937 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude@2x.pngbin0 -> 9239 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude@3x.pngbin0 -> 18163 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude@4x.pngbin0 -> 28614 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/images/images.qrc16
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/main.cpp46
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/qmldir5
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/qtquickcontrols2.conf2
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.cpp43
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.h19
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.cpp107
-rw-r--r--examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.h34
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/+Material/ChatToolBar.qml9
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/CMakeLists.txt69
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/ChatToolBar.qml7
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/ContactPage.qml51
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/ConversationPage.qml127
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/Main.qml18
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/chapter5.pro41
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein.pngbin0 -> 1669 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein@2x.pngbin0 -> 5657 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein@3x.pngbin0 -> 11804 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein@4x.pngbin0 -> 19989 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway.pngbin0 -> 2255 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway@2x.pngbin0 -> 6375 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway@3x.pngbin0 -> 13723 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway@4x.pngbin0 -> 24109 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude.pngbin0 -> 2937 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude@2x.pngbin0 -> 9239 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude@3x.pngbin0 -> 18163 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude@4x.pngbin0 -> 28614 bytes
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/images/images.qrc16
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/main.cpp46
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/qmldir6
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/qtquickcontrols2.conf10
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.cpp43
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.h19
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.cpp107
-rw-r--r--examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.h34
-rw-r--r--examples/quickcontrols/chattutorial/chattutorial.pro8
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter1.pngbin0 -> 4798 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter2-listview-header.gifbin0 -> 176936 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter2.pngbin0 -> 20119 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter3-listview-header.gifbin0 -> 262432 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter3-view-margins.pngbin0 -> 2960 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter3.gifbin0 -> 169856 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter4-long-message.pngbin0 -> 13079 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter4-message-timestamp.pngbin0 -> 9750 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter4.gifbin0 -> 102536 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-material-dark.pngbin0 -> 19787 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-material-test.pngbin0 -> 17337 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-material.pngbin0 -> 17475 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-universal-dark.pngbin0 -> 15520 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-universal.pngbin0 -> 16575 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-material-dark.pngbin0 -> 14723 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-material-test.pngbin0 -> 2688 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-material.pngbin0 -> 2861 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-universal-dark.pngbin0 -> 8590 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-universal.pngbin0 -> 9627 bytes
-rw-r--r--examples/quickcontrols/chattutorial/doc/src/qtquickcontrols-chattutorial.qdoc821
-rw-r--r--examples/quickcontrols/contactlist/CMakeLists.txt48
-rw-r--r--examples/quickcontrols/contactlist/ContactDelegate.ui.qml87
-rw-r--r--examples/quickcontrols/contactlist/ContactDialog.qml49
-rw-r--r--examples/quickcontrols/contactlist/ContactForm.ui.qml72
-rw-r--r--examples/quickcontrols/contactlist/ContactList.qml70
-rw-r--r--examples/quickcontrols/contactlist/ContactView.ui.qml41
-rw-r--r--examples/quickcontrols/contactlist/SectionDelegate.ui.qml19
-rw-r--r--examples/quickcontrols/contactlist/contactlist.pro39
-rw-r--r--examples/quickcontrols/contactlist/contactmodel.cpp83
-rw-r--r--examples/quickcontrols/contactlist/contactmodel.h46
-rw-r--r--examples/quickcontrols/contactlist/designer/Backend/ContactModel.qml41
-rw-r--r--examples/quickcontrols/contactlist/designer/Backend/qmldir2
-rw-r--r--examples/quickcontrols/contactlist/doc/images/qtquickcontrols-contactlist.pngbin0 -> 23581 bytes
-rw-r--r--examples/quickcontrols/contactlist/doc/src/qtquickcontrols-contactlist.qdoc51
-rw-r--r--examples/quickcontrols/contactlist/main.cpp15
-rw-r--r--examples/quickcontrols/contactlist/qmldir8
-rw-r--r--examples/quickcontrols/eventcalendar/CMakeLists.txt53
-rw-r--r--examples/quickcontrols/eventcalendar/MonthGridDelegate.qml78
-rw-r--r--examples/quickcontrols/eventcalendar/doc/images/qtquickcalendar-eventcalendar.pngbin0 -> 76700 bytes
-rw-r--r--examples/quickcontrols/eventcalendar/doc/src/qtquickcontrols-eventcalendar.qdoc20
-rw-r--r--examples/quickcontrols/eventcalendar/event.h16
-rw-r--r--examples/quickcontrols/eventcalendar/eventcalendar.cpp29
-rw-r--r--examples/quickcontrols/eventcalendar/eventcalendar.pro25
-rw-r--r--examples/quickcontrols/eventcalendar/eventcalendar.qml113
-rw-r--r--examples/quickcontrols/eventcalendar/eventmodel.cpp88
-rw-r--r--examples/quickcontrols/eventcalendar/eventmodel.h56
-rw-r--r--examples/quickcontrols/eventcalendar/qmldir1
-rw-r--r--examples/quickcontrols/eventcalendar/qtquickcontrols2.conf2
-rw-r--r--examples/quickcontrols/eventcalendar/sqleventdatabase.cpp70
-rw-r--r--examples/quickcontrols/eventcalendar/sqleventdatabase.h28
-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.txt52
-rw-r--r--examples/quickcontrols/flatstyle/MainForm.ui.qml100
-rw-r--r--examples/quickcontrols/flatstyle/doc/images/qtquickcontrols-flatstyle-creator.pngbin0 -> 22469 bytes
-rw-r--r--examples/quickcontrols/flatstyle/doc/images/qtquickcontrols-flatstyle.pngbin0 -> 9120 bytes
-rw-r--r--examples/quickcontrols/flatstyle/doc/src/qtquickcontrols-flatstyle.qdoc72
-rw-r--r--examples/quickcontrols/flatstyle/flatstyle.pro23
-rw-r--r--examples/quickcontrols/flatstyle/flatstyle.qml33
-rw-r--r--examples/quickcontrols/flatstyle/flatstyle.qmlproject45
-rw-r--r--examples/quickcontrols/flatstyle/imports/Flat/Button.qml70
-rw-r--r--examples/quickcontrols/flatstyle/imports/Flat/CheckBox.qml92
-rw-r--r--examples/quickcontrols/flatstyle/imports/Flat/Switch.qml88
-rw-r--r--examples/quickcontrols/flatstyle/imports/Flat/qmldir5
-rw-r--r--examples/quickcontrols/flatstyle/imports/Theme/Theme.qml27
-rw-r--r--examples/quickcontrols/flatstyle/imports/Theme/qmldir2
-rw-r--r--examples/quickcontrols/flatstyle/main.cpp16
-rw-r--r--examples/quickcontrols/flatstyle/qtquickcontrols2.conf2
-rw-r--r--examples/quickcontrols/gallery/+Material/ToolBar.qml8
-rw-r--r--examples/quickcontrols/gallery/CMakeLists.txt106
-rw-r--r--examples/quickcontrols/gallery/ToolBar.qml6
-rw-r--r--examples/quickcontrols/gallery/doc/images/qtquickcontrols-gallery-drawer.pngbin0 -> 15428 bytes
-rw-r--r--examples/quickcontrols/gallery/doc/images/qtquickcontrols-gallery-menu.pngbin0 -> 15953 bytes
-rw-r--r--examples/quickcontrols/gallery/doc/images/qtquickcontrols-gallery-welcome.pngbin0 -> 18513 bytes
-rw-r--r--examples/quickcontrols/gallery/doc/src/qtquickcontrols-gallery.qdoc56
-rw-r--r--examples/quickcontrols/gallery/gallery.cpp50
-rw-r--r--examples/quickcontrols/gallery/gallery.pro68
-rw-r--r--examples/quickcontrols/gallery/gallery.qml325
-rw-r--r--examples/quickcontrols/gallery/icons/gallery/20x20/back.pngbin0 -> 146 bytes
-rw-r--r--examples/quickcontrols/gallery/icons/gallery/20x20/drawer.pngbin0 -> 123 bytes
-rw-r--r--examples/quickcontrols/gallery/icons/gallery/20x20/menu.pngbin0 -> 123 bytes
-rw-r--r--examples/quickcontrols/gallery/icons/gallery/20x20@2/back.pngbin0 -> 184 bytes
-rw-r--r--examples/quickcontrols/gallery/icons/gallery/20x20@2/drawer.pngbin0 -> 126 bytes
-rw-r--r--examples/quickcontrols/gallery/icons/gallery/20x20@2/menu.pngbin0 -> 158 bytes
-rw-r--r--examples/quickcontrols/gallery/icons/gallery/20x20@3/back.pngbin0 -> 227 bytes
-rw-r--r--examples/quickcontrols/gallery/icons/gallery/20x20@3/drawer.pngbin0 -> 130 bytes
-rw-r--r--examples/quickcontrols/gallery/icons/gallery/20x20@3/menu.pngbin0 -> 193 bytes
-rw-r--r--examples/quickcontrols/gallery/icons/gallery/20x20@4/back.pngbin0 -> 246 bytes
-rw-r--r--examples/quickcontrols/gallery/icons/gallery/20x20@4/drawer.pngbin0 -> 131 bytes
-rw-r--r--examples/quickcontrols/gallery/icons/gallery/20x20@4/menu.pngbin0 -> 223 bytes
-rw-r--r--examples/quickcontrols/gallery/icons/gallery/index.theme24
-rw-r--r--examples/quickcontrols/gallery/images/arrow.pngbin0 -> 319 bytes
-rw-r--r--examples/quickcontrols/gallery/images/arrow@2x.pngbin0 -> 476 bytes
-rw-r--r--examples/quickcontrols/gallery/images/arrow@3x.pngbin0 -> 611 bytes
-rw-r--r--examples/quickcontrols/gallery/images/arrow@4x.pngbin0 -> 758 bytes
-rw-r--r--examples/quickcontrols/gallery/images/arrows.pngbin0 -> 458 bytes
-rw-r--r--examples/quickcontrols/gallery/images/arrows@2x.pngbin0 -> 699 bytes
-rw-r--r--examples/quickcontrols/gallery/images/arrows@3x.pngbin0 -> 942 bytes
-rw-r--r--examples/quickcontrols/gallery/images/arrows@4x.pngbin0 -> 1211 bytes
-rw-r--r--examples/quickcontrols/gallery/images/qt-logo.pngbin0 -> 2849 bytes
-rw-r--r--examples/quickcontrols/gallery/images/qt-logo@2x.pngbin0 -> 4936 bytes
-rw-r--r--examples/quickcontrols/gallery/images/qt-logo@3x.pngbin0 -> 7254 bytes
-rw-r--r--examples/quickcontrols/gallery/images/qt-logo@4x.pngbin0 -> 9505 bytes
-rw-r--r--examples/quickcontrols/gallery/pages/BusyIndicatorPage.qml28
-rw-r--r--examples/quickcontrols/gallery/pages/ButtonPage.qml44
-rw-r--r--examples/quickcontrols/gallery/pages/CheckBoxPage.qml40
-rw-r--r--examples/quickcontrols/gallery/pages/ComboBoxPage.qml51
-rw-r--r--examples/quickcontrols/gallery/pages/DelayButtonPage.qml27
-rw-r--r--examples/quickcontrols/gallery/pages/DelegatePage.qml179
-rw-r--r--examples/quickcontrols/gallery/pages/DialPage.qml27
-rw-r--r--examples/quickcontrols/gallery/pages/DialogPage.qml179
-rw-r--r--examples/quickcontrols/gallery/pages/FramePage.qml47
-rw-r--r--examples/quickcontrols/gallery/pages/GroupBoxPage.qml48
-rw-r--r--examples/quickcontrols/gallery/pages/PageIndicatorPage.qml27
-rw-r--r--examples/quickcontrols/gallery/pages/ProgressBarPage.qml33
-rw-r--r--examples/quickcontrols/gallery/pages/RadioButtonPage.qml39
-rw-r--r--examples/quickcontrols/gallery/pages/RangeSliderPage.qml35
-rw-r--r--examples/quickcontrols/gallery/pages/ScrollBarPage.qml40
-rw-r--r--examples/quickcontrols/gallery/pages/ScrollIndicatorPage.qml40
-rw-r--r--examples/quickcontrols/gallery/pages/ScrollablePage.qml24
-rw-r--r--examples/quickcontrols/gallery/pages/SliderPage.qml33
-rw-r--r--examples/quickcontrols/gallery/pages/SpinBoxPage.qml29
-rw-r--r--examples/quickcontrols/gallery/pages/StackViewPage.qml58
-rw-r--r--examples/quickcontrols/gallery/pages/SwipeViewPage.qml49
-rw-r--r--examples/quickcontrols/gallery/pages/SwitchPage.qml39
-rw-r--r--examples/quickcontrols/gallery/pages/TabBarPage.qml57
-rw-r--r--examples/quickcontrols/gallery/pages/TextAreaPage.qml29
-rw-r--r--examples/quickcontrols/gallery/pages/TextFieldPage.qml27
-rw-r--r--examples/quickcontrols/gallery/pages/ToolTipPage.qml30
-rw-r--r--examples/quickcontrols/gallery/pages/TumblerPage.qml26
-rw-r--r--examples/quickcontrols/gallery/qmldir1
-rw-r--r--examples/quickcontrols/gallery/qtquickcontrols2.conf8
-rw-r--r--examples/quickcontrols/imagine/automotive/CMakeLists.txt148
-rw-r--r--examples/quickcontrols/imagine/automotive/automotive.cpp26
-rw-r--r--examples/quickcontrols/imagine/automotive/automotive.pro15
-rw-r--r--examples/quickcontrols/imagine/automotive/doc/images/qtquickcontrols-automotive.pngbin0 -> 356738 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/doc/src/qtquickcontrols-automotive.qdoc19
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44/air-con.pngbin0 -> 1394 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44/command.pngbin0 -> 1350 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44/message.pngbin0 -> 479 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44/music.pngbin0 -> 622 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44/seats.pngbin0 -> 1017 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44/settings.pngbin0 -> 1406 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44/statistics.pngbin0 -> 324 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44/windows.pngbin0 -> 564 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/air-con.pngbin0 -> 2337 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/command.pngbin0 -> 2461 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/message.pngbin0 -> 639 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/music.pngbin0 -> 1106 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/navigation.pngbin0 -> 1604 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/seats.pngbin0 -> 1793 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/settings.pngbin0 -> 2413 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/statistics.pngbin0 -> 394 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/windows.pngbin0 -> 999 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/icons.svg526
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/automotive/index.theme14
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/car.pngbin0 -> 14952 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/car@2x.pngbin0 -> 37391 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/icons.qrc29
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/warning.pngbin0 -> 1212 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/warning@2x.pngbin0 -> 2118 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/weather.pngbin0 -> 1092 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/icons/weather@2x.pngbin0 -> 1798 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/applicationwindow-background.pngbin0 -> 67 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/applicationwindow-background@2x.pngbin0 -> 77 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked-hovered.9.pngbin0 -> 347 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked-hovered@2x.9.pngbin0 -> 636 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked.9.pngbin0 -> 205 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked@2x.9.pngbin0 -> 276 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/button-background-hovered.9.pngbin0 -> 294 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/button-background-hovered@2x.9.pngbin0 -> 560 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/button-background-pressed.9.pngbin0 -> 205 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/button-background-pressed@2x.9.pngbin0 -> 276 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/button-background.9.pngbin0 -> 196 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/button-background@2x.9.pngbin0 -> 257 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered.pngbin0 -> 2144 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered@2x.pngbin0 -> 3784 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-pressed.pngbin0 -> 1178 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-pressed@2x.pngbin0 -> 2475 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-background.pngbin0 -> 1014 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-background@2x.pngbin0 -> 2182 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle-pressed.pngbin0 -> 115 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle-pressed@2x.pngbin0 -> 151 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle.pngbin0 -> 143 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle@2x.pngbin0 -> 155 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/frame-background.9.pngbin0 -> 168 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/frame-background@2x.9.pngbin0 -> 209 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/imagine-assets.qrc80
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-checked.9.pngbin0 -> 120 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-checked@2x.9.pngbin0 -> 124 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-hovered.9.pngbin0 -> 176 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-hovered@2x.9.pngbin0 -> 222 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-pressed.9.pngbin0 -> 118 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-pressed@2x.9.pngbin0 -> 124 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background.9.pngbin0 -> 112 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background@2x.9.pngbin0 -> 118 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-hovered.pngbin0 -> 623 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-hovered@2x.pngbin0 -> 1062 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-pressed.pngbin0 -> 271 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-pressed@2x.pngbin0 -> 429 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked.pngbin0 -> 291 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked@2x.pngbin0 -> 452 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-hovered.pngbin0 -> 444 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-hovered@2x.pngbin0 -> 842 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-pressed.pngbin0 -> 249 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-pressed@2x.pngbin0 -> 420 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator.pngbin0 -> 231 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator@2x.pngbin0 -> 384 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/scrollindicator-handle.pngbin0 -> 78 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/scrollindicator-handle@2x.pngbin0 -> 79 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/slider-background-horizontal.9.pngbin0 -> 127 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/slider-background-horizontal@2x.9.pngbin0 -> 149 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-hovered.pngbin0 -> 196 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-hovered@2x.pngbin0 -> 364 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-pressed.pngbin0 -> 125 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-pressed@2x.pngbin0 -> 173 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle.pngbin0 -> 125 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle@2x.pngbin0 -> 173 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal-pressed.9.pngbin0 -> 126 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal-pressed@2x.9.pngbin0 -> 148 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal.9.pngbin0 -> 126 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal@2x.9.pngbin0 -> 148 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-background.9.pngbin0 -> 112 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-background@2x.9.pngbin0 -> 118 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked-hovered.pngbin0 -> 253 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked-hovered@2x.pngbin0 -> 441 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked.pngbin0 -> 145 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked@2x.pngbin0 -> 195 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-hovered.pngbin0 -> 253 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-hovered@2x.pngbin0 -> 452 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-pressed.pngbin0 -> 145 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-pressed@2x.pngbin0 -> 195 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle.pngbin0 -> 139 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle@2x.pngbin0 -> 179 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator-pressed.pngbin0 -> 129 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator-pressed@2x.pngbin0 -> 180 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator.pngbin0 -> 129 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator@2x.pngbin0 -> 180 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/toolseparator-separator-vertical.9.pngbin0 -> 115 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/imagine-assets/toolseparator-separator-vertical@2x.9.pngbin0 -> 120 bytes
-rw-r--r--examples/quickcontrols/imagine/automotive/qml/FeatureButton.qml23
-rw-r--r--examples/quickcontrols/imagine/automotive/qml/LargeLabel.qml37
-rw-r--r--examples/quickcontrols/imagine/automotive/qml/automotive.qml595
-rw-r--r--examples/quickcontrols/imagine/automotive/qml/qml.qrc7
-rw-r--r--examples/quickcontrols/imagine/automotive/qtquickcontrols2.conf8
-rw-r--r--examples/quickcontrols/ios/todolist/AppSettings.qml14
-rw-r--r--examples/quickcontrols/ios/todolist/CMakeLists.txt86
-rw-r--r--examples/quickcontrols/ios/todolist/Database.qml161
-rw-r--r--examples/quickcontrols/ios/todolist/FontSizePage.qml44
-rw-r--r--examples/quickcontrols/ios/todolist/HomePage.qml173
-rw-r--r--examples/quickcontrols/ios/todolist/MaxTasksPage.qml37
-rw-r--r--examples/quickcontrols/ios/todolist/NavBar.qml44
-rw-r--r--examples/quickcontrols/ios/todolist/ProjectPage.qml256
-rw-r--r--examples/quickcontrols/ios/todolist/SettingsPage.qml67
-rw-r--r--examples/quickcontrols/ios/todolist/ToggleCompletedTasksPage.qml35
-rw-r--r--examples/quickcontrols/ios/todolist/doc/images/qtquickcontrols-todolist.pngbin0 -> 67497 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/doc/src/qtquickcontrols-todolist.qdoc22
-rw-r--r--examples/quickcontrols/ios/todolist/images/add-new.pngbin0 -> 312 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/add-new@2x.pngbin0 -> 569 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/add-new@3x.pngbin0 -> 1406 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/back-white.pngbin0 -> 201 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/back-white@2x.pngbin0 -> 290 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/back-white@3x.pngbin0 -> 730 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/back.pngbin0 -> 201 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/back@2x.pngbin0 -> 290 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/back@3x.pngbin0 -> 730 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/close-white.pngbin0 -> 319 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/close-white@2x.pngbin0 -> 459 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/close-white@3x.pngbin0 -> 707 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/close.pngbin0 -> 319 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/close@2x.pngbin0 -> 459 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/close@3x.pngbin0 -> 707 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/plus-math.pngbin0 -> 115 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/plus-math@2x.pngbin0 -> 120 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/plus-math@3x.pngbin0 -> 382 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/settings.pngbin0 -> 1399 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/settings@2x.pngbin0 -> 2878 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/images/settings@3x.pngbin0 -> 5929 bytes
-rw-r--r--examples/quickcontrols/ios/todolist/main.qml32
-rw-r--r--examples/quickcontrols/ios/todolist/qmldir2
-rw-r--r--examples/quickcontrols/ios/todolist/src/main.cpp34
-rw-r--r--examples/quickcontrols/ios/todolist/todolist.pro42
-rw-r--r--examples/quickcontrols/quickcontrols.pro15
-rw-r--r--examples/quickcontrols/texteditor/+touch/texteditor.html19
-rw-r--r--examples/quickcontrols/texteditor/CMakeLists.txt54
-rw-r--r--examples/quickcontrols/texteditor/creatorKateHighlighter.pngbin0 -> 106622 bytes
-rw-r--r--examples/quickcontrols/texteditor/doc/images/qtquickcontrols-texteditor-desktop.jpgbin0 -> 76304 bytes
-rw-r--r--examples/quickcontrols/texteditor/doc/images/qtquickcontrols-texteditor-touch.jpgbin0 -> 31203 bytes
-rw-r--r--examples/quickcontrols/texteditor/doc/src/qtquickcontrols-texteditor.qdoc163
-rw-r--r--examples/quickcontrols/texteditor/einstein.pngbin0 -> 19989 bytes
-rw-r--r--examples/quickcontrols/texteditor/example.md179
-rw-r--r--examples/quickcontrols/texteditor/fonts/fontello.ttfbin0 -> 19044 bytes
-rw-r--r--examples/quickcontrols/texteditor/images/qt-logo.pngbin0 -> 3255 bytes
-rw-r--r--examples/quickcontrols/texteditor/qml/+touch/texteditor.qml261
-rw-r--r--examples/quickcontrols/texteditor/qml/texteditor.qml542
-rw-r--r--examples/quickcontrols/texteditor/red.pngbin0 -> 130 bytes
-rw-r--r--examples/quickcontrols/texteditor/texteditor.cpp37
-rw-r--r--examples/quickcontrols/texteditor/texteditor.html34
-rw-r--r--examples/quickcontrols/texteditor/texteditor.pro17
-rw-r--r--examples/quickcontrols/texteditor/texteditor.qrc10
-rw-r--r--examples/quickcontrols/wearable/CMakeLists.txt68
-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.qml13
-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.json1
-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.pngbin0 -> 28479 bytes
-rw-r--r--examples/quickcontrols/wearable/doc/src/qtquickcontrols-wearable.qdoc127
-rw-r--r--examples/quickcontrols/wearable/wearable.cpp30
-rw-r--r--examples/quickcontrols/wearable/wearable.pro19
-rw-r--r--examples/quickcontrols/wearable/wearable.qrc135
2157 files changed, 56203 insertions, 57756 deletions
diff --git a/examples/.prev_CMakeLists.txt b/examples/.prev_CMakeLists.txt
deleted file mode 100644
index c2ccea65c1..0000000000
--- a/examples/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated from examples.pro.
-
-qt_examples_build_begin()
-
-add_subdirectory(qml)
-if(TARGET Qt::QuickTest)
- add_subdirectory(qmltest)
-endif()
-if(TARGET Qt::Quick)
- add_subdirectory(quick)
-endif()
-
-qt_examples_build_end()
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index b6c19fb6e1..6e3573b1be 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -1,17 +1,15 @@
-# Generated from examples.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-# special case begin
-qt_examples_build_begin()
-# special case end
+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 Qt6::QuickTemplates2)
+ add_subdirectory(quickcontrols)
endif()
-# special case begin
qt_examples_build_end()
-# special case end
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 0712e81552..b73064e0c7 100644
--- a/examples/examples.pro
+++ b/examples/examples.pro
@@ -1,4 +1,4 @@
TEMPLATE = subdirs
-qtHaveModule(qmltest): SUBDIRS += qmltest
SUBDIRS += qml
-qtHaveModule(quick): SUBDIRS += quick
+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_java_based_android_project.qdoc b/examples/platforms/android/doc/src/qml_in_java_based_android_project.qdoc
new file mode 100644
index 0000000000..177699d1e1
--- /dev/null
+++ b/examples/platforms/android/doc/src/qml_in_java_based_android_project.qdoc
@@ -0,0 +1,116 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qml-in-java-based-android-projects-example.html
+ \title QML in Java-Based Android Projects
+ \brief Uses a \l {Qt Quick View Android Class}{QtQuickView} to embed a QML component into a Java-based Android project.
+ \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 project that utilize 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-based
+ Android applications.
+
+ \image portrait_java.png
+
+ First, we look at the \c MainActivity's onCreate() method:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java onCreate
+
+ Where an instance of \l {Qt Quick View Android Class}{QtQuickView} named
+ \c m_qmlView is created by giving it the Java application Context,URI of
+ the QML project's \c main.qml file and the name of the QML project's main
+ library as parameters:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java m_qmlView
+
+ \c m_qmlView is then added to Android FrameLayout ViewGroup with
+ appropriate layout parameters:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java layoutParams
+
+ \section1 Interacting with the QML component
+
+ To interact with the imported QML component we first need to implement
+ the \l {Qt Quick View Android Class}{QtQuickView} public interface
+ \l [Qt Quick View Android Class]{public interface StatusChangeListener}{StatusChangeListener}:
+
+ \code
+ public class MainActivity extends AppCompatActivity implements
+ QtQuickView.StatusChangeListener{
+ ...
+ }
+ \endcode
+
+ Then, define an override for the \l [Qt Quick View Android Class]{public interface StatusChangeListener}{StatusChangeListener} callback
+ function \c onStatusChanged():
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java onStatusChanged
+
+ Then, set that listener to listen for status changes of \c m_qmlView
+ with the \l [Qt Quick View Android Class]{public void setStatusChangeListener(StatusChangeListener listener)}{setStatusChangeListener()}:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java setStatusChangeListener
+
+ The overridden callback function \c onStatusChanged() receives
+ \c StatusChanged() signal containing the current
+ \l [Qt Quick View Android Class]{Status values}{Status value} of the
+ \c m_qmlView. If this \l [Qt Quick View Android Class]{Status values}{Status value}
+ is confirmed to be \l [Qt Quick View Android Class]{Status values}{STATUS_READY},
+ we can start interacting with the QML view.
+
+ \section1 Getting and setting QML view property values
+
+ Getting and setting QML view property values happens through the
+ \l [Qt Quick View Android Class]{public <T extends Object> T getProperty(String propertyName)}{QtQuickView.getProperty()}
+ and \l [Qt Quick View Android Class]{public void setProperty(String propertyName, Object value)}{QtQuickView.setProperty()}
+ methods.
+
+ The root object of the QML component's background color is set when a click
+ event of a Android button occurs:
+
+ \snippet android/qml_in_java_based_android_project/app/src/main/java/com/example/qml_in_java_based_android_project/MainActivity.java onClickListener
+
+ With the \l [Qt Quick View Android Class]{public void setProperty(String propertyName, Object value)}{QtQuickView.setProperty()}
+ method we set the "colorStringFormat" property value to a random color
+ value that is fetched from the project's \c Colors.java class.
+
+ The \l [Qt Quick View Android Class]{public <T extends Object> T getProperty (String propertyName)}{QtQuickView.getProperty()}{QtQuickView.getProperty()}
+ method is used here to fetch the current background color of the root
+ object of the QML component and then show it to the user on the Android
+ side of the application.
+
+ \section1 Signal listeners
+
+ \l {Qt Quick View Android Class}{QtQuickView} class offers a
+ connectSignalListener() and disconnectSignalListener() methods which are
+ used to connect and disconnect a signal listener to a signal that is
+ declared in the QML component root object.
+
+ Here we connect a signal listener to the \c onClicked() signal of the
+ QML component:
+
+ \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
+
+ The \c onClicked() signal is emitted every time the button on the QML UI 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 project's \c Colors.java class.
+
+ The \l [Qt Quick View Android Class]{public <T> int addSignalListener(String signalName, Class<T> argType, SignalListener<T> listener)}{QtQuickView.connectSignalListener()}
+ returns a unique signal listener id which we store and use later to
+ identify and disconnect the listener.
+
+ \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
+
+ Here, the previously connected signal listener is disconnected using the
+ \l [Qt Quick View Android Class]{public boolean removeSignalListener(int signalListenerId)}{QtQuickView.disconnectSignalListener()}
+ method by giving it the unique signal listener id.
+
+*/
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..9aed5c0a4e
--- /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 qml_in_android_view
+ 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.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_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_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..8e9ab1deb9
--- /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 26
+ 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..e7aee43c55
--- /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,178 @@
+// 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.Button;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import org.qtproject.qt.android.QtQuickView;
+
+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 QtQuickView.StatusChangeListener {
+
+ private static final String TAG = "myTag";
+ private final Colors m_colors = new Colors();
+ private final Map<Integer, String> m_statusNames = new HashMap<Integer, String>() {{
+ put(QtQuickView.STATUS_READY, " READY");
+ put(QtQuickView.STATUS_LOADING, " LOADING");
+ put(QtQuickView.STATUS_ERROR, " ERROR");
+ put(QtQuickView.STATUS_NULL, " NULL");
+ }};
+ private int m_qmlButtonSignalListenerId;
+ private LinearLayout m_mainLinear;
+ private FrameLayout m_qmlFrameLayout;
+ private QtQuickView m_qmlView;
+ 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.qmlStatus);
+ m_androidControlsLayout = findViewById(R.id.javaLinear);
+ m_box = findViewById(R.id.box);
+
+ m_switch = findViewById(R.id.switch1);
+ m_switch.setOnClickListener(view -> switchListener());
+ //! [m_qmlView]
+ m_qmlView = new QtQuickView(this, "qrc:/qt/qml/qml_in_android_view/main.qml",
+ "qml_in_android_view");
+ //! [m_qmlView]
+
+ // Set status change listener for m_qmlView
+ // listener implemented below in OnStatusChanged
+ //! [setStatusChangeListener]
+ m_qmlView.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_qmlView, params);
+ //! [layoutParams]
+ Button button = findViewById(R.id.button);
+ button.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);
+ }
+
+ //! [onStatusChanged]
+ @Override
+ public void onStatusChanged(int status) {
+ Log.i(TAG, "Status of QtQuickView: " + status);
+
+ final String qmlStatus = getResources().getString(R.string.qml_view_status)
+ + m_statusNames.get(status);
+
+ // 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 (status == QtQuickView.STATUS_READY && !m_switch.isChecked()) {
+ m_qmlButtonSignalListenerId = m_qmlView.connectSignalListener("onClicked", Object.class,
+ (String signal, Object o) -> {
+ Log.i(TAG, "QML button clicked");
+ m_androidControlsLayout.setBackgroundColor(Color.parseColor(m_colors.getColor()));
+ });
+
+ }
+ //! [qml signal listener]
+ }
+ //! [onStatusChanged]
+ //! [onClickListener]
+ public void onClickListener() {
+ // Set the QML view root object property "colorStringFormat" value to
+ // color from Colors.getColor()
+ m_qmlView.setProperty("colorStringFormat", m_colors.getColor());
+
+ String qmlBackgroundColor = m_qmlView.getProperty("colorStringFormat");
+
+ // 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_qmlView.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_qmlView.connectSignalListener("onClicked",
+ Object.class, (String t, Object value) -> {
+ Log.i(TAG, "QML button clicked");
+ m_androidControlsLayout.setBackgroundColor(Color.parseColor(m_colors.getColor()));
+ });
+ }
+ }
+}
+
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..0d55ae643b
--- /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/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/button"
+ 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/switch1"
+ 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/box"
+ 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..be631746b6
--- /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 26
+ 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..339eea40fe
--- /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,138 @@
+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.qt.android.QtQuickView
+
+class MainActivity : AppCompatActivity(), QtQuickView.StatusChangeListener {
+
+ private val TAG = "myTag"
+ private val m_colors: Colors = Colors()
+ private lateinit var m_binding: ActivityMainBinding
+ private var m_qmlButtonSignalListenerId = 0
+ private var m_qmlView: QtQuickView? = null
+ private val m_statusNames = hashMapOf(
+ QtQuickView.STATUS_READY to "READY",
+ QtQuickView.STATUS_LOADING to "LOADING",
+ QtQuickView.STATUS_ERROR to "ERROR",
+ QtQuickView.STATUS_NULL to "NULL"
+ )
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ m_binding = ActivityMainBinding.inflate(layoutInflater)
+ val view = m_binding.root
+ setContentView(view)
+
+ m_binding.signalSwitch.setOnClickListener { switchListener() }
+
+ m_qmlView = QtQuickView(
+ this, "qrc:/qt/qml/qml_in_android_view/main.qml",
+ "qml_in_android_view"
+ )
+ // Set status change listener for m_qmlView
+ // listener implemented below in OnStatusChanged
+ m_qmlView!!.setStatusChangeListener(this)
+ val params: ViewGroup.LayoutParams = FrameLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT
+ )
+ m_binding.qmlFrame.addView(m_qmlView, params)
+
+ m_binding.changeColorButton.setOnClickListener { onClickListener() }
+
+ // Check target device orientation on launch
+ handleOrientationChanges()
+ }
+
+ 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
+ }
+
+ private fun onClickListener() {
+ // Set the QML view root object property "colorStringFormat" value to
+ // color from Colors.getColor()
+ m_qmlView!!.setProperty("colorStringFormat", m_colors.getColor())
+
+ val qmlBackgroundColor = m_qmlView!!.getProperty<String>("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))
+ }
+
+ 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)
+ m_qmlView!!.disconnectSignalListener(m_qmlButtonSignalListenerId)
+ } else {
+ Log.v(TAG, "QML button onClicked signal listener connected")
+ m_binding.switchText.setText(R.string.disconnect_qml_button_signal_listener)
+ m_qmlButtonSignalListenerId = m_qmlView!!.connectSignalListener<Any>(
+ "onClicked",
+ Any::class.java
+ ) { t: String?, value: Any? ->
+ Log.i(TAG, "QML button clicked")
+ m_binding.kotlinLinear.setBackgroundColor(Color.parseColor(m_colors.getColor()))
+ }
+ }
+ }
+
+ override fun onStatusChanged(status: Int) {
+ 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
+ if (status == QtQuickView.STATUS_READY && !m_binding.signalSwitch.isChecked) {
+ m_qmlButtonSignalListenerId = m_qmlView!!.connectSignalListener(
+ "onClicked", Any::class.java
+ ) { _: String?, _: Any? ->
+ Log.v(TAG, "QML button clicked")
+ m_binding.kotlinLinear.setBackgroundColor(Color.parseColor(m_colors.getColor()))
+ }
+ }
+ }
+}
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/.prev_CMakeLists.txt b/examples/qml/.prev_CMakeLists.txt
deleted file mode 100644
index 0ec4c9b39d..0000000000
--- a/examples/qml/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-# Generated from qml.pro.
-
-add_subdirectory(referenceexamples)
-add_subdirectory(tutorials)
-add_subdirectory(shell)
-if(TARGET Qt::Quick)
- add_subdirectory(qmlextensionplugins)
- add_subdirectory(xmlhttprequest)
-endif()
-if(QT_FEATURE_qml_network AND TARGET Qt::Quick)
- add_subdirectory(networkaccessmanagerfactory)
-endif()
diff --git a/examples/qml/CMakeLists.txt b/examples/qml/CMakeLists.txt
index 0ec4c9b39d..e5dc00d0fd 100644
--- a/examples/qml/CMakeLists.txt
+++ b/examples/qml/CMakeLists.txt
@@ -1,12 +1,10 @@
-# Generated from qml.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-add_subdirectory(referenceexamples)
add_subdirectory(tutorials)
-add_subdirectory(shell)
-if(TARGET Qt::Quick)
- add_subdirectory(qmlextensionplugins)
- add_subdirectory(xmlhttprequest)
-endif()
-if(QT_FEATURE_qml_network AND TARGET Qt::Quick)
- add_subdirectory(networkaccessmanagerfactory)
+if(TARGET Qt6::Quick)
+ if (TARGET Qt6::lupdate)
+ qt_internal_add_example(qml-i18n)
+ endif()
endif()
+
diff --git a/examples/qml/doc/src/qml-extending.qdoc b/examples/qml/doc/src/qml-extending.qdoc
deleted file mode 100644
index c9922ebd45..0000000000
--- a/examples/qml/doc/src/qml-extending.qdoc
+++ /dev/null
@@ -1,364 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
-\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 0
-
-The Person class remains unaltered in this example and the Boy and Girl C++
-classes are trivial extensions of it. 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.
-
-\section2 Define Boy and Girl
-
-The implementation of Boy and Girl is trivial.
-
-\snippet referenceexamples/coercion/person.cpp 1
-
-All that is necessary is to implement the constructor, and to register the types
-and their QML name with the QML engine.
-
-\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 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/content/Button.qml b/examples/qml/dynamicscene/content/Button.qml
deleted file mode 100644
index d558ef7608..0000000000
--- a/examples/qml/dynamicscene/content/Button.qml
+++ /dev/null
@@ -1,87 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Rectangle {
- id: container
-
- property variant text
- signal clicked
-
- height: text.height + 10; width: text.width + 20
- border.width: 1
- radius: 4
- antialiasing: true
-
- gradient: Gradient {
- GradientStop {
- position: 0.0
- color: !mouseArea.pressed ? "#eeeeee" : "#888888"
- }
- GradientStop {
- position: 1.0
- color: !mouseArea.pressed ? "#888888" : "#333333"
- }
- }
-
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- onClicked: container.clicked()
- }
-
- Text {
- id: text
- anchors.centerIn:parent
- font.pointSize: 10
- text: parent.text
- }
-}
diff --git a/examples/qml/dynamicscene/content/GenericSceneItem.qml b/examples/qml/dynamicscene/content/GenericSceneItem.qml
deleted file mode 100644
index 3c83169c7a..0000000000
--- a/examples/qml/dynamicscene/content/GenericSceneItem.qml
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Image {
- property bool created: false
- property string image
-
- source: image
-
-}
diff --git a/examples/qml/dynamicscene/content/PaletteItem.qml b/examples/qml/dynamicscene/content/PaletteItem.qml
deleted file mode 100644
index ca734a5dba..0000000000
--- a/examples/qml/dynamicscene/content/PaletteItem.qml
+++ /dev/null
@@ -1,69 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-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/content/PerspectiveItem.qml b/examples/qml/dynamicscene/content/PerspectiveItem.qml
deleted file mode 100644
index a712358000..0000000000
--- a/examples/qml/dynamicscene/content/PerspectiveItem.qml
+++ /dev/null
@@ -1,74 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-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/content/Sun.qml b/examples/qml/dynamicscene/content/Sun.qml
deleted file mode 100644
index 0e70f3b5db..0000000000
--- a/examples/qml/dynamicscene/content/Sun.qml
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-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/content/images/NOTE b/examples/qml/dynamicscene/content/images/NOTE
deleted file mode 100644
index fcd87f9132..0000000000
--- a/examples/qml/dynamicscene/content/images/NOTE
+++ /dev/null
@@ -1 +0,0 @@
-Images (except star.png) are from the KDE project.
diff --git a/examples/qml/dynamicscene/content/images/face-smile.png b/examples/qml/dynamicscene/content/images/face-smile.png
deleted file mode 100644
index 3d66d72578..0000000000
--- a/examples/qml/dynamicscene/content/images/face-smile.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/content/images/moon.png b/examples/qml/dynamicscene/content/images/moon.png
deleted file mode 100644
index 1c0d6066a8..0000000000
--- a/examples/qml/dynamicscene/content/images/moon.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/content/images/rabbit_brown.png b/examples/qml/dynamicscene/content/images/rabbit_brown.png
deleted file mode 100644
index ebfdeed332..0000000000
--- a/examples/qml/dynamicscene/content/images/rabbit_brown.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/content/images/rabbit_bw.png b/examples/qml/dynamicscene/content/images/rabbit_bw.png
deleted file mode 100644
index 7bff9b92ca..0000000000
--- a/examples/qml/dynamicscene/content/images/rabbit_bw.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/content/images/star.png b/examples/qml/dynamicscene/content/images/star.png
deleted file mode 100644
index bdcd36909d..0000000000
--- a/examples/qml/dynamicscene/content/images/star.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/content/images/sun.png b/examples/qml/dynamicscene/content/images/sun.png
deleted file mode 100644
index c5fd36ed39..0000000000
--- a/examples/qml/dynamicscene/content/images/sun.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/content/images/tree_s.png b/examples/qml/dynamicscene/content/images/tree_s.png
deleted file mode 100644
index 6eac35a729..0000000000
--- a/examples/qml/dynamicscene/content/images/tree_s.png
+++ /dev/null
Binary files differ
diff --git a/examples/qml/dynamicscene/content/itemCreation.js b/examples/qml/dynamicscene/content/itemCreation.js
deleted file mode 100644
index 2829a83410..0000000000
--- a/examples/qml/dynamicscene/content/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/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 37ad6fa772..0000000000
--- a/examples/qml/dynamicscene/doc/src/dynamicscene.qdoc
+++ /dev/null
@@ -1,34 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
- \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 d197b95235..0000000000
--- a/examples/qml/dynamicscene/dynamicscene.qml
+++ /dev/null
@@ -1,282 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-import "content"
-
-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();
- }
-
- Text {
- 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: "content/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
-
- Text { 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: "content/images/sun.png"
- image: "images/sun.png"
- }
- PaletteItem {
- anchors.verticalCenter: parent.verticalCenter
- componentFile: "GenericSceneItem.qml"
- source: "content/images/moon.png"
- image: "images/moon.png"
- }
- PaletteItem {
- anchors.verticalCenter: parent.verticalCenter
- componentFile: "PerspectiveItem.qml"
- source: "content/images/tree_s.png"
- image: "images/tree_s.png"
- }
- PaletteItem {
- anchors.verticalCenter: parent.verticalCenter
- componentFile: "PerspectiveItem.qml"
- source: "content/images/rabbit_brown.png"
- image: "images/rabbit_brown.png"
- }
- PaletteItem {
- anchors.verticalCenter: parent.verticalCenter
- componentFile: "PerspectiveItem.qml"
- source: "content/images/rabbit_bw.png"
- image: "images/rabbit_bw.png"
- }
- }
- }
-
- Text { 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
- Text { 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
-
- TextEdit {
- id: qmlText
- anchors.fill: parent; anchors.margins: 5
- readOnly: false
- font.pixelSize: 14
- selectByMouse: true
- wrapMode: TextEdit.WordWrap
-
- text: "import QtQuick 2.0\nImage {\n id: smile\n x: 360 * Math.random()\n y: 40 * Math.random() \n source: 'content/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 { target: gradientStopA; color: "DeepSkyBlue" }
- PropertyChanges { target: gradientStopB; color: "SkyBlue" }
- PropertyChanges { target: 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 ac9baa4941..0000000000
--- a/examples/qml/dynamicscene/dynamicscene.qrc
+++ /dev/null
@@ -1,19 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>dynamicscene.qml</file>
- <file>content/images/face-smile.png</file>
- <file>content/images/moon.png</file>
- <file>content/images/NOTE</file>
- <file>content/images/rabbit_brown.png</file>
- <file>content/images/rabbit_bw.png</file>
- <file>content/images/star.png</file>
- <file>content/images/sun.png</file>
- <file>content/images/tree_s.png</file>
- <file>content/Button.qml</file>
- <file>content/GenericSceneItem.qml</file>
- <file>content/itemCreation.js</file>
- <file>content/PaletteItem.qml</file>
- <file>content/PerspectiveItem.qml</file>
- <file>content/Sun.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/qml/dynamicscene/main.cpp b/examples/qml/dynamicscene/main.cpp
deleted file mode 100644
index e28375158d..0000000000
--- a/examples/qml/dynamicscene/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "../../quick/shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(dynamicscene)
diff --git a/examples/qml/locale/locale.qml b/examples/qml/locale/locale.qml
deleted file mode 100644
index e48c86deb8..0000000000
--- a/examples/qml/locale/locale.qml
+++ /dev/null
@@ -1,142 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Rectangle {
- id: root
- width: 320
- height: 480
- color: "lightgray"
-
- property string locale: view.currentItem.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: Text {
- 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 = index
- }
- }
- 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 11a88738ab..0000000000
--- a/examples/qml/networkaccessmanagerfactory/CMakeLists.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-# Generated from networkaccessmanagerfactory.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(networkaccessmanagerfactory LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/networkaccessmanagerfactory")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Network)
-
-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
-)
-
-
-# Resources:
-set(networkaccessmanagerfactory_resource_files
- "view.qml"
-)
-
-qt6_add_resources(networkaccessmanagerfactory "networkaccessmanagerfactory"
- PREFIX
- "/"
- FILES
- ${networkaccessmanagerfactory_resource_files}
-)
-
-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 443647c80b..0000000000
--- a/examples/qml/networkaccessmanagerfactory/doc/src/networkaccessmanagerfactory.qdoc
+++ /dev/null
@@ -1,39 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \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 a0fddf50c6..0000000000
--- a/examples/qml/networkaccessmanagerfactory/main.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#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 da90e531b5..0000000000
--- a/examples/qml/networkaccessmanagerfactory/view.qml
+++ /dev/null
@@ -1,57 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Image {
- width: 200
- height: 100
- source: "http://doc.qt.io/qt-5/images/logo.png"
-}
diff --git a/examples/qml/qml-i18n/CMakeLists.txt b/examples/qml/qml-i18n/CMakeLists.txt
new file mode 100644
index 0000000000..fd242d3678
--- /dev/null
+++ b/examples/qml/qml-i18n/CMakeLists.txt
@@ -0,0 +1,45 @@
+# 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)
+
+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
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+qt_add_qml_module(qmli18n
+ URI Translated
+ QML_FILES
+ Main.qml
+)
+
+qt_add_translations(qmli18n
+ RESOURCE_PREFIX /qt/qml/Translated/i18n
+ TS_FILE_BASE qml
+ TS_FILE_DIR i18n
+)
+
+install(TARGETS qmli18n
+ 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/Main.qml b/examples/qml/qml-i18n/Main.qml
new file mode 100644
index 0000000000..8d414348dd
--- /dev/null
+++ b/examples/qml/qml-i18n/Main.qml
@@ -0,0 +1,25 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Window
+
+Window {
+ visible: true
+ width: 640; height: 480
+
+ Column {
+ anchors.fill: parent; spacing: 20
+
+ Text {
+ text: "If a translation is available for the system language (eg. French) then the " +
+ "string below will be translated (eg. 'Bonjour'). Otherwise it will show 'Hello'."
+ width: parent.width; wrapMode: Text.WordWrap
+ }
+
+ Text {
+ text: qsTr("Hello")
+ font.pointSize: 25; anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+}
diff --git a/examples/qml/qml-i18n/doc/src/i18n.qdoc b/examples/qml/qml-i18n/doc/src/i18n.qdoc
index 48946aac9c..6096aa3383 100644
--- a/examples/qml/qml-i18n/doc/src/i18n.qdoc
+++ b/examples/qml/qml-i18n/doc/src/i18n.qdoc
@@ -1,57 +1,62 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
- \title QML Examples - Internationalization
+ \title Qt Quick I18N
+ \examplecategory {User Interface Components}
\example qml-i18n
\image qml-i18n-example.png
- \brief This is an internationalization example.
+ \ingroup examples-linguist
+ \brief Generating translation files (TS and QM) for a Qt Quick application.
- The QML runtime automatically loads a translation from the i18n subdirectory of the root
- QML file, based on the system language.
+ When you run the example application, the QML runtime automatically loads a
+ translation from the \c i18n subdirectory of the directory that contains the
+ main .qml file, based on the system language.
- The files are created or updated by running:
+ \section1 Marking Text as Translatable
-\code
- lupdate qml-i18n.qml -ts i18n/base.ts
-\endcode
+ In the \c Main.qml file, use the \c qsTr command to mark UI text as
+ translatable:
- Translations for new languages are created by copying \e i18n/base.ts to \e i18n/qml_<lang>.ts
- The .ts files can then be edited with \l{Qt Linguist}:
+ \quotefromfile qml-i18n/Main.qml
+ \skipto }
+ \skipto Text
+ \printuntil )
-\code
- linguist i18n/qml_fr.ts
-\endcode
+ \section1 Enabling Translation
- The run-time translation files are then generated by running:
+ In the \c main.cpp file, use \l QQmlApplicationEngine to automatically load
+ translation files from a subdirectory called \c i18n in the directory that
+ contains the main QML file:
-\code
- lrelease i18n/*.ts
-\endcode
+ \quotefromfile qml-i18n/main.cpp
+ \skipto <QQmlApplicationEngine>
+ \printuntil engine;
-\note On Android, please make sure to include the generated *.qm files as resources.
+ The translation file names in the \c i18n subdirectory must have the prefix
+ \c qml_. For example, \c qml_en_AU.ts.
+ \section1 Creating Translation Files
+
+ Add the \c LinguistTools module as a value of the \c find_package command in
+ the \c CMakeLists.txt file:
+
+ \quotefromfile qml-i18n/CMakeLists.txt
+ \skipto find_package(
+ \printuntil )
+
+ Define the translation files to generate in the \l qt_add_translations
+ command:
+
+ \skipto qt_add_translations
+ \printuntil )
+
+ Build the application to generate TS and QM files.
+
+ \note On Android, make sure to include the QM files as resources.
+
+ \section1 Adding Translations
+
+ To create translations for new languages, copy \e {i18n/base.ts} to
+ \e {i18n/qml_<lang>.ts}. You can use \l{Qt Linguist} to translate the
+ strings.
*/
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 9f6c588b84..fe20802d3d 100644
--- a/examples/qml/qml-i18n/main.cpp
+++ b/examples/qml/qml-i18n/main.cpp
@@ -1,52 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#include <QGuiApplication>
#include <QQmlApplicationEngine>
@@ -54,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.qml b/examples/qml/qml-i18n/qml-i18n.qml
deleted file mode 100644
index 85c4c44160..0000000000
--- a/examples/qml/qml-i18n/qml-i18n.qml
+++ /dev/null
@@ -1,72 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.12
-import QtQuick.Window 2.12
-
-Window {
- visible: true
- width: 640; height: 480
-
- Column {
- anchors.fill: parent; spacing: 20
-
- Text {
- text: "If a translation is available for the system language (eg. French) then the " +
- "string below will be translated (eg. 'Bonjour'). Otherwise it will show 'Hello'."
- width: parent.width; wrapMode: Text.WordWrap
- }
-
- Text {
- text: qsTr("Hello")
- font.pointSize: 25; anchors.horizontalCenter: parent.horizontalCenter
- }
- }
-}
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/qmlextensionplugins/CMakeLists.txt b/examples/qml/qmlextensionplugins/CMakeLists.txt
deleted file mode 100644
index 7fc2b7268f..0000000000
--- a/examples/qml/qmlextensionplugins/CMakeLists.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-# Generated from qmlextensionplugins.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(qmlqtimeexampleplugin LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/qmlextensionplugins/imports/TimeExample")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-
-qt6_add_qml_module(qmlqtimeexampleplugin
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/imports/TimeExample"
- VERSION 1.0
- URI "TimeExample"
- INSTALL_LOCATION ${INSTALL_EXAMPLEDIR}
-)
-
-target_sources(qmlqtimeexampleplugin PRIVATE
- plugin.cpp
- timemodel.cpp timemodel.h
-)
-set_target_properties(qmlqtimeexampleplugin PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(qmlqtimeexampleplugin PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
-)
-
-install(TARGETS qmlqtimeexampleplugin
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(qmlqtimeexampleplugin PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI TimeExample
- QT_QMLTYPES_FILENAME imports/TimeExample/plugins.qmltypes
-)
-
-qt6_qml_type_registration(qmlqtimeexampleplugin)
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 24d6991d52..0000000000
--- a/examples/qml/qmlextensionplugins/doc/src/qmlpluginex.qdoc
+++ /dev/null
@@ -1,42 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \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:
- \code
- > qmake
- > make
- > qmlscene -I imports plugins.qml
- \endcode
-*/
diff --git a/examples/qml/qmlextensionplugins/imports/TimeExample/Clock.qml b/examples/qml/qmlextensionplugins/imports/TimeExample/Clock.qml
deleted file mode 100644
index 320161d29e..0000000000
--- a/examples/qml/qmlextensionplugins/imports/TimeExample/Clock.qml
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-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 ae5f35bf5f..0000000000
--- a/examples/qml/qmlextensionplugins/plugin.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#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 39b7a1cf8c..0000000000
--- a/examples/qml/qmlextensionplugins/plugins.qml
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-//![0]
-import TimeExample 1.0 // 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 af5ccb2988..0000000000
--- a/examples/qml/qmlextensionplugins/timemodel.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#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 bb107aeb71..0000000000
--- a/examples/qml/qmlextensionplugins/timemodel.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#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 827e3b0060..0000000000
--- a/examples/qml/referenceexamples/CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-# Generated from referenceexamples.pro.
-
-add_subdirectory(adding)
-add_subdirectory(coercion)
-add_subdirectory(default)
-add_subdirectory(properties)
-add_subdirectory(methods)
-if(TARGET Qt::Widgets)
- add_subdirectory(extended)
-endif()
-if(TARGET Qt::Quick)
- add_subdirectory(attached)
- add_subdirectory(binding)
- add_subdirectory(grouped)
- add_subdirectory(signal)
- add_subdirectory(valuesource)
-endif()
diff --git a/examples/qml/referenceexamples/adding/CMakeLists.txt b/examples/qml/referenceexamples/adding/CMakeLists.txt
deleted file mode 100644
index 9e04f3799a..0000000000
--- a/examples/qml/referenceexamples/adding/CMakeLists.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-# Generated from adding.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(adding LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/adding")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS 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
-)
-
-
-# Resources:
-set(adding_resource_files
- "example.qml"
-)
-
-qt6_add_resources(adding "adding"
- PREFIX
- "/"
- FILES
- ${adding_resource_files}
-)
-
-install(TARGETS adding
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(adding PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI People
-)
-
-qt6_qml_type_registration(adding)
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 ef97df12d2..0000000000
--- a/examples/qml/referenceexamples/adding/example.qml
+++ /dev/null
@@ -1,58 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-// ![0]
-import People 1.0
-
-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 6c3920f04b..0000000000
--- a/examples/qml/referenceexamples/adding/main.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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() << "The person's name is" << person->name();
- qWarning() << "They wear a" << person->shoeSize() << "sized shoe";
- } else {
- qWarning() << component.errors();
- }
-
- return EXIT_SUCCESS;
-}
diff --git a/examples/qml/referenceexamples/adding/person.cpp b/examples/qml/referenceexamples/adding/person.cpp
deleted file mode 100644
index de4a33dd00..0000000000
--- a/examples/qml/referenceexamples/adding/person.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "person.h"
-
-// ![0]
-Person::Person(QObject *parent)
-: QObject(parent), m_shoeSize(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 530c335dee..0000000000
--- a/examples/qml/referenceexamples/adding/person.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- Person(QObject *parent = nullptr);
-
- 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/attached/CMakeLists.txt b/examples/qml/referenceexamples/attached/CMakeLists.txt
deleted file mode 100644
index 10aa52293c..0000000000
--- a/examples/qml/referenceexamples/attached/CMakeLists.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-# Generated from attached.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(attached LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/attached")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS 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
-)
-
-
-# Resources:
-set(attached_resource_files
- "example.qml"
-)
-
-qt6_add_resources(attached "attached"
- PREFIX
- "/"
- FILES
- ${attached_resource_files}
-)
-
-install(TARGETS attached
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(attached PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI People
-)
-
-qt6_qml_type_registration(attached)
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 9aed5df621..0000000000
--- a/examples/qml/referenceexamples/attached/birthdayparty.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "birthdayparty.h"
-
-BirthdayPartyAttached::BirthdayPartyAttached(QObject *object)
-: QObject(object)
-{
-}
-
-QDate BirthdayPartyAttached::rsvp() const
-{
- return m_rsvp;
-}
-
-void BirthdayPartyAttached::setRsvp(QDate d)
-{
- m_rsvp = d;
-}
-
-BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_host(nullptr)
-{
-}
-
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-int BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(int 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 4f2ed1702a..0000000000
--- a/examples/qml/referenceexamples/attached/birthdayparty.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- BirthdayPartyAttached(QObject *object);
-
- 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:
- BirthdayParty(QObject *parent = nullptr);
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- int guestCount() const;
- Person *guest(int) const;
-
- //! [static attached]
- static BirthdayPartyAttached *qmlAttachedProperties(QObject *);
- //! [static attached]
-private:
- Person *m_host;
- 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 66023fb80b..0000000000
--- a/examples/qml/referenceexamples/attached/example.qml
+++ /dev/null
@@ -1,79 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import People 1.0
-import QtQuick 2.0 // 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 2fceb98ac9..0000000000
--- a/examples/qml/referenceexamples/attached/main.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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()) {
- qWarning() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qWarning() << "He is inviting:";
- else
- qWarning() << "She is inviting:";
-
- for (int 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())
- qWarning() << " " << guest->name() << "RSVP date: Hasn't RSVP'd";
- else
- qWarning() << " " << guest->name() << "RSVP date:" << qPrintable(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 0603644108..0000000000
--- a/examples/qml/referenceexamples/attached/person.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "person.h"
-
-ShoeDescription::ShoeDescription(QObject *parent)
-: QObject(parent), m_size(0), m_price(0)
-{
-}
-
-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;
-}
-
-Person::Person(QObject *parent)
-: QObject(parent)
-{
-}
-
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- m_name = n;
-}
-
-ShoeDescription *Person::shoe()
-{
- return &m_shoe;
-}
-
-
-Boy::Boy(QObject * parent)
-: Person(parent)
-{
-}
-
-
-Girl::Girl(QObject * parent)
-: Person(parent)
-{
-}
-
diff --git a/examples/qml/referenceexamples/attached/person.h b/examples/qml/referenceexamples/attached/person.h
deleted file mode 100644
index 239f4405c0..0000000000
--- a/examples/qml/referenceexamples/attached/person.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- ShoeDescription(QObject *parent = 0);
-
- 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;
- QColor m_color;
- QString m_brand;
- qreal m_price;
-};
-
-class Person : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(ShoeDescription *shoe READ shoe)
- QML_ANONYMOUS
-public:
- Person(QObject *parent = nullptr);
-
- 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:
- Boy(QObject * parent = nullptr);
-};
-
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- Girl(QObject * parent = nullptr);
-};
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/binding/CMakeLists.txt b/examples/qml/referenceexamples/binding/CMakeLists.txt
deleted file mode 100644
index f64c24803c..0000000000
--- a/examples/qml/referenceexamples/binding/CMakeLists.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-# Generated from binding.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(binding LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/binding")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS 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
-)
-
-
-# Resources:
-set(binding_resource_files
- "example.qml"
-)
-
-qt6_add_resources(binding "binding"
- PREFIX
- "/"
- FILES
- ${binding_resource_files}
-)
-
-install(TARGETS binding
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(binding PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI People
-)
-
-qt6_qml_type_registration(binding)
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 02a1adbb35..0000000000
--- a/examples/qml/referenceexamples/binding/birthdayparty.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "birthdayparty.h"
-
-BirthdayPartyAttached::BirthdayPartyAttached(QObject *object)
-: QObject(object)
-{
-}
-
-QDate BirthdayPartyAttached::rsvp() const
-{
- return m_rsvp;
-}
-
-void BirthdayPartyAttached::setRsvp(QDate d)
-{
- if (d != m_rsvp) {
- m_rsvp = d;
- emit rsvpChanged();
- }
-}
-
-
-BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_host(nullptr)
-{
-}
-
-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);
-}
-
-int BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(int 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() << qPrintable(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 846a016cfc..0000000000
--- a/examples/qml/referenceexamples/binding/birthdayparty.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- BirthdayPartyAttached(QObject *object);
-
- 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:
- BirthdayParty(QObject *parent = nullptr);
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- int guestCount() const;
- Person *guest(int) 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;
- 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 b45ef6881b..0000000000
--- a/examples/qml/referenceexamples/binding/example.qml
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import People 1.0
-import QtQuick 2.0 // 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 5f8e6d696e..0000000000
--- a/examples/qml/referenceexamples/binding/happybirthdaysong.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "happybirthdaysong.h"
-#include <QTimer>
-
-HappyBirthdaySong::HappyBirthdaySong(QObject *parent)
-: QObject(parent), m_line(-1)
-{
- setName(QString());
- 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 c84e9d9e5e..0000000000
--- a/examples/qml/referenceexamples/binding/happybirthdaysong.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- HappyBirthdaySong(QObject *parent = nullptr);
-
- void setTarget(const QQmlProperty &) override;
-
- QString name() const;
- void setName(const QString &);
-
-private slots:
- void advance();
-
-signals:
- void nameChanged();
-private:
- int m_line;
- 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 2e9995fcd8..0000000000
--- a/examples/qml/referenceexamples/binding/main.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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()) {
- qWarning() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qWarning() << "He is inviting:";
- else
- qWarning() << "She is inviting:";
-
- for (int 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())
- qWarning() << " " << guest->name() << "RSVP date: Hasn't RSVP'd";
- else
- qWarning() << " " << guest->name() << "RSVP date:" << qPrintable(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 1a23d0a4f5..0000000000
--- a/examples/qml/referenceexamples/binding/person.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "person.h"
-
-ShoeDescription::ShoeDescription(QObject *parent)
-: QObject(parent), m_size(0), m_price(0)
-{
-}
-
-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();
-}
-
-Person::Person(QObject *parent)
-: QObject(parent)
-{
-}
-
-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;
-}
-
-
-Boy::Boy(QObject * parent)
-: Person(parent)
-{
-}
-
-
-Girl::Girl(QObject * parent)
-: Person(parent)
-{
-}
-
diff --git a/examples/qml/referenceexamples/binding/person.h b/examples/qml/referenceexamples/binding/person.h
deleted file mode 100644
index af9864950a..0000000000
--- a/examples/qml/referenceexamples/binding/person.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- ShoeDescription(QObject *parent = nullptr);
-
- 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;
- QColor m_color;
- QString m_brand;
- qreal m_price;
-};
-
-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:
- Person(QObject *parent = nullptr);
-
- 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:
- Boy(QObject * parent = nullptr);
-};
-
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- Girl(QObject * parent = nullptr);
-};
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/coercion/CMakeLists.txt b/examples/qml/referenceexamples/coercion/CMakeLists.txt
deleted file mode 100644
index 3160b92782..0000000000
--- a/examples/qml/referenceexamples/coercion/CMakeLists.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-# Generated from coercion.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(coercion LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/coercion")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS 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
-)
-
-
-# Resources:
-set(coercion_resource_files
- "example.qml"
-)
-
-qt6_add_resources(coercion "coercion"
- PREFIX
- "/"
- FILES
- ${coercion_resource_files}
-)
-
-install(TARGETS coercion
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(coercion PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI People
-)
-
-qt6_qml_type_registration(coercion)
diff --git a/examples/qml/referenceexamples/coercion/birthdayparty.cpp b/examples/qml/referenceexamples/coercion/birthdayparty.cpp
deleted file mode 100644
index 81db8ab1b8..0000000000
--- a/examples/qml/referenceexamples/coercion/birthdayparty.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "birthdayparty.h"
-
-BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_host(nullptr)
-{
-}
-
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-int BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(int 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 ba8b2445f1..0000000000
--- a/examples/qml/referenceexamples/coercion/birthdayparty.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- BirthdayParty(QObject *parent = nullptr);
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- int guestCount() const;
- Person *guest(int) const;
-
-private:
- Person *m_host;
- 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 9bf34e6a38..0000000000
--- a/examples/qml/referenceexamples/coercion/example.qml
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import People 1.0
-
-// ![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 6b47d0d4c4..0000000000
--- a/examples/qml/referenceexamples/coercion/main.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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()) {
- qWarning() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qWarning() << "He is inviting:";
- else
- qWarning() << "She is inviting:";
-
- for (int ii = 0; ii < party->guestCount(); ++ii)
- qWarning() << " " << 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 178d7052ce..0000000000
--- a/examples/qml/referenceexamples/coercion/person.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "person.h"
-
-Person::Person(QObject *parent)
-: QObject(parent), m_shoeSize(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;
-}
-
-// ![1]
-Boy::Boy(QObject * parent)
-: Person(parent)
-{
-}
-
-
-Girl::Girl(QObject * parent)
-: Person(parent)
-{
-}
-
-// ![1]
diff --git a/examples/qml/referenceexamples/coercion/person.h b/examples/qml/referenceexamples/coercion/person.h
deleted file mode 100644
index 7e2828da04..0000000000
--- a/examples/qml/referenceexamples/coercion/person.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- Person(QObject *parent = nullptr);
-
- 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:
- Boy(QObject * parent = nullptr);
-};
-
-//! [girl class]
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- Girl(QObject * parent = nullptr);
-};
-//! [girl class]
-
-// ![0]
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/default/CMakeLists.txt b/examples/qml/referenceexamples/default/CMakeLists.txt
deleted file mode 100644
index 6e207f3641..0000000000
--- a/examples/qml/referenceexamples/default/CMakeLists.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-# Generated from default.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(default LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/default")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS 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
-)
-
-
-# Resources:
-set(default_resource_files
- "example.qml"
-)
-
-qt6_add_resources(default "default"
- PREFIX
- "/"
- FILES
- ${default_resource_files}
-)
-
-install(TARGETS default
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(default PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI People
-)
-
-qt6_qml_type_registration(default)
diff --git a/examples/qml/referenceexamples/default/birthdayparty.cpp b/examples/qml/referenceexamples/default/birthdayparty.cpp
deleted file mode 100644
index 81db8ab1b8..0000000000
--- a/examples/qml/referenceexamples/default/birthdayparty.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "birthdayparty.h"
-
-BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_host(nullptr)
-{
-}
-
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-int BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(int 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 5eb6c88763..0000000000
--- a/examples/qml/referenceexamples/default/birthdayparty.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- BirthdayParty(QObject *parent = nullptr);
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- int guestCount() const;
- Person *guest(int) const;
-
-private:
- Person *m_host;
- 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 b7d3174f7b..0000000000
--- a/examples/qml/referenceexamples/default/example.qml
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import People 1.0
-
-// ![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 6b47d0d4c4..0000000000
--- a/examples/qml/referenceexamples/default/main.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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()) {
- qWarning() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qWarning() << "He is inviting:";
- else
- qWarning() << "She is inviting:";
-
- for (int ii = 0; ii < party->guestCount(); ++ii)
- qWarning() << " " << 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 a1d887a4d0..0000000000
--- a/examples/qml/referenceexamples/default/person.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "person.h"
-
-Person::Person(QObject *parent)
-: QObject(parent), m_shoeSize(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;
-}
-
-
-Boy::Boy(QObject * parent)
-: Person(parent)
-{
-}
-
-
-Girl::Girl(QObject * parent)
-: Person(parent)
-{
-}
-
diff --git a/examples/qml/referenceexamples/default/person.h b/examples/qml/referenceexamples/default/person.h
deleted file mode 100644
index 361a89c599..0000000000
--- a/examples/qml/referenceexamples/default/person.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- Person(QObject *parent = nullptr);
-
- QString name() const;
- void setName(const QString &);
-
- int shoeSize() const;
- void setShoeSize(int);
-private:
- QString m_name;
- int m_shoeSize;
-};
-
-class Boy : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- Boy(QObject * parent = nullptr);
-};
-
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- Girl(QObject * parent = nullptr);
-};
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/extended/CMakeLists.txt b/examples/qml/referenceexamples/extended/CMakeLists.txt
deleted file mode 100644
index 6843b39d38..0000000000
--- a/examples/qml/referenceexamples/extended/CMakeLists.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-# Generated from extended.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(extended LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/extended")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS 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
-)
-
-
-# Resources:
-set(extended_resource_files
- "example.qml"
-)
-
-qt6_add_resources(extended "extended"
- PREFIX
- "/"
- FILES
- ${extended_resource_files}
-)
-
-install(TARGETS extended
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(extended PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI People
-)
-
-qt6_qml_type_registration(extended)
diff --git a/examples/qml/referenceexamples/extended/example.qml b/examples/qml/referenceexamples/extended/example.qml
deleted file mode 100644
index 818372da33..0000000000
--- a/examples/qml/referenceexamples/extended/example.qml
+++ /dev/null
@@ -1,57 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import People 1.0
-
-// ![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 feb1a08585..0000000000
--- a/examples/qml/referenceexamples/extended/lineedit.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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();
- m.setLeft(l);
- m_lineedit->setTextMargins(m);
-}
-
-int LineEditExtension::rightMargin() const
-{
- return m_lineedit->textMargins().right();
-}
-
-void LineEditExtension::setRightMargin(int r)
-{
- QMargins m = m_lineedit->textMargins();
- m.setRight(r);
- m_lineedit->setTextMargins(m);
-}
-
-int LineEditExtension::topMargin() const
-{
- return m_lineedit->textMargins().top();
-}
-
-void LineEditExtension::setTopMargin(int t)
-{
- QMargins m = m_lineedit->textMargins();
- m.setTop(t);
- m_lineedit->setTextMargins(m);
-}
-
-int LineEditExtension::bottomMargin() const
-{
- return m_lineedit->textMargins().bottom();
-}
-
-void LineEditExtension::setBottomMargin(int b)
-{
- QMargins m = m_lineedit->textMargins();
- m.setBottom(b);
- m_lineedit->setTextMargins(m);
-}
-
-
diff --git a/examples/qml/referenceexamples/extended/lineedit.h b/examples/qml/referenceexamples/extended/lineedit.h
deleted file mode 100644
index 83d3f2a90a..0000000000
--- a/examples/qml/referenceexamples/extended/lineedit.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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 26048d9189..0000000000
--- a/examples/qml/referenceexamples/extended/main.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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 19dd60358b..0000000000
--- a/examples/qml/referenceexamples/grouped/CMakeLists.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-# Generated from grouped.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(grouped LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/grouped")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS 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
-)
-
-
-# Resources:
-set(grouped_resource_files
- "example.qml"
-)
-
-qt6_add_resources(grouped "grouped"
- PREFIX
- "/"
- FILES
- ${grouped_resource_files}
-)
-
-install(TARGETS grouped
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(grouped PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI People
-)
-
-qt6_qml_type_registration(grouped)
diff --git a/examples/qml/referenceexamples/grouped/birthdayparty.cpp b/examples/qml/referenceexamples/grouped/birthdayparty.cpp
deleted file mode 100644
index 81db8ab1b8..0000000000
--- a/examples/qml/referenceexamples/grouped/birthdayparty.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "birthdayparty.h"
-
-BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_host(nullptr)
-{
-}
-
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-int BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(int 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 f6834dad89..0000000000
--- a/examples/qml/referenceexamples/grouped/birthdayparty.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- BirthdayParty(QObject *parent = nullptr);
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- int guestCount() const;
- Person *guest(int) 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 c431bdce39..0000000000
--- a/examples/qml/referenceexamples/grouped/example.qml
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import People 1.0
-import QtQuick 2.0 // 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 63dbe988a4..0000000000
--- a/examples/qml/referenceexamples/grouped/main.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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()) {
- qWarning() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qWarning() << "He is inviting:";
- else
- qWarning() << "She is inviting:";
-
- Person *bestShoe = nullptr;
- for (int ii = 0; ii < party->guestCount(); ++ii) {
- Person *guest = party->guest(ii);
- qWarning() << " " << guest->name();
-
- if (!bestShoe || bestShoe->shoe()->price() < guest->shoe()->price())
- bestShoe = guest;
- }
- if (bestShoe)
- qWarning() << 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 0603644108..0000000000
--- a/examples/qml/referenceexamples/grouped/person.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "person.h"
-
-ShoeDescription::ShoeDescription(QObject *parent)
-: QObject(parent), m_size(0), m_price(0)
-{
-}
-
-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;
-}
-
-Person::Person(QObject *parent)
-: QObject(parent)
-{
-}
-
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- m_name = n;
-}
-
-ShoeDescription *Person::shoe()
-{
- return &m_shoe;
-}
-
-
-Boy::Boy(QObject * parent)
-: Person(parent)
-{
-}
-
-
-Girl::Girl(QObject * parent)
-: Person(parent)
-{
-}
-
diff --git a/examples/qml/referenceexamples/grouped/person.h b/examples/qml/referenceexamples/grouped/person.h
deleted file mode 100644
index df507c7386..0000000000
--- a/examples/qml/referenceexamples/grouped/person.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- ShoeDescription(QObject *parent = nullptr);
-
- 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;
- QColor m_color;
- QString m_brand;
- qreal m_price;
-};
-
-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:
- Person(QObject *parent = nullptr);
-
- 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:
- Boy(QObject * parent = nullptr);
-};
-
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- Girl(QObject * parent = nullptr);
-};
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/methods/CMakeLists.txt b/examples/qml/referenceexamples/methods/CMakeLists.txt
deleted file mode 100644
index 886928e10e..0000000000
--- a/examples/qml/referenceexamples/methods/CMakeLists.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-# Generated from methods.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(methods LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/methods")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS 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
-)
-
-
-# Resources:
-set(methods_resource_files
- "example.qml"
-)
-
-qt6_add_resources(methods "methods"
- PREFIX
- "/"
- FILES
- ${methods_resource_files}
-)
-
-install(TARGETS methods
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(methods PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI People
-)
-
-qt6_qml_type_registration(methods)
diff --git a/examples/qml/referenceexamples/methods/birthdayparty.cpp b/examples/qml/referenceexamples/methods/birthdayparty.cpp
deleted file mode 100644
index 4b30d31aeb..0000000000
--- a/examples/qml/referenceexamples/methods/birthdayparty.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "birthdayparty.h"
-
-BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_host(nullptr)
-{
-}
-
-// ![0]
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-int BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(int 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 5c2f3c9def..0000000000
--- a/examples/qml/referenceexamples/methods/birthdayparty.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- BirthdayParty(QObject *parent = nullptr);
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- int guestCount() const;
- Person *guest(int) const;
-
-// ![0]
- Q_INVOKABLE void invite(const QString &name);
-// ![0]
-
-private:
- Person *m_host;
- 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 e3cd838a18..0000000000
--- a/examples/qml/referenceexamples/methods/example.qml
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-// ![0]
-import QtQuick 2.0
-import People 1.0
-
-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 e30e1d9fb1..0000000000
--- a/examples/qml/referenceexamples/methods/main.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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()) {
- qWarning() << party->host()->name() << "is having a birthday!";
- qWarning() << "They are inviting:";
- for (int ii = 0; ii < party->guestCount(); ++ii)
- qWarning() << " " << 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 7712363ebf..0000000000
--- a/examples/qml/referenceexamples/methods/person.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "person.h"
-
-Person::Person(QObject *parent)
-: QObject(parent), m_shoeSize(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;
-}
-
diff --git a/examples/qml/referenceexamples/methods/person.h b/examples/qml/referenceexamples/methods/person.h
deleted file mode 100644
index 2407fbb1b9..0000000000
--- a/examples/qml/referenceexamples/methods/person.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- Person(QObject *parent = nullptr);
-
- QString name() const;
- void setName(const QString &);
-
- int shoeSize() const;
- void setShoeSize(int);
-private:
- QString m_name;
- int m_shoeSize;
-};
-
-#endif // PERSON_H
diff --git a/examples/qml/referenceexamples/properties/CMakeLists.txt b/examples/qml/referenceexamples/properties/CMakeLists.txt
deleted file mode 100644
index 1d4daf56d6..0000000000
--- a/examples/qml/referenceexamples/properties/CMakeLists.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-# Generated from properties.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(properties LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/properties")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS 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
-)
-
-
-# Resources:
-set(properties_resource_files
- "example.qml"
-)
-
-qt6_add_resources(properties "properties"
- PREFIX
- "/"
- FILES
- ${properties_resource_files}
-)
-
-install(TARGETS properties
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(properties PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI People
-)
-
-qt6_qml_type_registration(properties)
diff --git a/examples/qml/referenceexamples/properties/birthdayparty.cpp b/examples/qml/referenceexamples/properties/birthdayparty.cpp
deleted file mode 100644
index 2dc9bd803d..0000000000
--- a/examples/qml/referenceexamples/properties/birthdayparty.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "birthdayparty.h"
-
-BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_host(nullptr)
-{
-}
-
-// ![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 7e1668add3..0000000000
--- a/examples/qml/referenceexamples/properties/birthdayparty.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- BirthdayParty(QObject *parent = nullptr);
-
- 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;
- 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 31058c731c..0000000000
--- a/examples/qml/referenceexamples/properties/example.qml
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import People 1.0
-
-// ![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 e30e1d9fb1..0000000000
--- a/examples/qml/referenceexamples/properties/main.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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()) {
- qWarning() << party->host()->name() << "is having a birthday!";
- qWarning() << "They are inviting:";
- for (int ii = 0; ii < party->guestCount(); ++ii)
- qWarning() << " " << 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 7712363ebf..0000000000
--- a/examples/qml/referenceexamples/properties/person.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "person.h"
-
-Person::Person(QObject *parent)
-: QObject(parent), m_shoeSize(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;
-}
-
diff --git a/examples/qml/referenceexamples/properties/person.h b/examples/qml/referenceexamples/properties/person.h
deleted file mode 100644
index 2407fbb1b9..0000000000
--- a/examples/qml/referenceexamples/properties/person.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- Person(QObject *parent = nullptr);
-
- QString name() const;
- void setName(const QString &);
-
- int shoeSize() const;
- void setShoeSize(int);
-private:
- QString m_name;
- int m_shoeSize;
-};
-
-#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 b309efc576..0000000000
--- a/examples/qml/referenceexamples/signal/CMakeLists.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-# Generated from signal.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(signal LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/signal")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS 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
-)
-
-
-# Resources:
-set(signal_resource_files
- "example.qml"
-)
-
-qt6_add_resources(signal "signal"
- PREFIX
- "/"
- FILES
- ${signal_resource_files}
-)
-
-install(TARGETS signal
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(signal PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI People
-)
-
-qt6_qml_type_registration(signal)
diff --git a/examples/qml/referenceexamples/signal/birthdayparty.cpp b/examples/qml/referenceexamples/signal/birthdayparty.cpp
deleted file mode 100644
index 215c09782a..0000000000
--- a/examples/qml/referenceexamples/signal/birthdayparty.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "birthdayparty.h"
-
-BirthdayPartyAttached::BirthdayPartyAttached(QObject *object)
-: QObject(object)
-{
-}
-
-QDate BirthdayPartyAttached::rsvp() const
-{
- return m_rsvp;
-}
-
-void BirthdayPartyAttached::setRsvp(QDate d)
-{
- m_rsvp = d;
-}
-
-
-BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_host(nullptr)
-{
-}
-
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-int BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(int 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 6d7e022df0..0000000000
--- a/examples/qml/referenceexamples/signal/birthdayparty.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- BirthdayPartyAttached(QObject *object);
-
- 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:
- BirthdayParty(QObject *parent = nullptr);
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- int guestCount() const;
- Person *guest(int) const;
-
- static BirthdayPartyAttached *qmlAttachedProperties(QObject *);
-
- void startParty();
-// ![0]
-signals:
- void partyStarted(QTime time);
-// ![0]
-
-private:
- Person *m_host;
- 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 5d80d58867..0000000000
--- a/examples/qml/referenceexamples/signal/example.qml
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import People 1.0
-import QtQuick 2.0 // 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 7ef3595a8c..0000000000
--- a/examples/qml/referenceexamples/signal/main.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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()) {
- qWarning() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qWarning() << "He is inviting:";
- else
- qWarning() << "She is inviting:";
-
- for (int 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())
- qWarning() << " " << guest->name() << "RSVP date: Hasn't RSVP'd";
- else
- qWarning() << " " << guest->name() << "RSVP date:" << qPrintable(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 0603644108..0000000000
--- a/examples/qml/referenceexamples/signal/person.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "person.h"
-
-ShoeDescription::ShoeDescription(QObject *parent)
-: QObject(parent), m_size(0), m_price(0)
-{
-}
-
-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;
-}
-
-Person::Person(QObject *parent)
-: QObject(parent)
-{
-}
-
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- m_name = n;
-}
-
-ShoeDescription *Person::shoe()
-{
- return &m_shoe;
-}
-
-
-Boy::Boy(QObject * parent)
-: Person(parent)
-{
-}
-
-
-Girl::Girl(QObject * parent)
-: Person(parent)
-{
-}
-
diff --git a/examples/qml/referenceexamples/signal/person.h b/examples/qml/referenceexamples/signal/person.h
deleted file mode 100644
index 7283f39f61..0000000000
--- a/examples/qml/referenceexamples/signal/person.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- ShoeDescription(QObject *parent = nullptr);
-
- 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;
- QColor m_color;
- QString m_brand;
- qreal m_price;
-};
-
-class Person : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(ShoeDescription *shoe READ shoe)
- QML_ANONYMOUS
-public:
- Person(QObject *parent = nullptr);
-
- 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:
- Boy(QObject * parent = nullptr);
-};
-
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- Girl(QObject * parent = nullptr);
-};
-
-#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 9bdf9fc309..0000000000
--- a/examples/qml/referenceexamples/valuesource/CMakeLists.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-# Generated from valuesource.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(valuesource LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/referenceexamples/valuesource")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS 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
-)
-
-
-# Resources:
-set(valuesource_resource_files
- "example.qml"
-)
-
-qt6_add_resources(valuesource "valuesource"
- PREFIX
- "/"
- FILES
- ${valuesource_resource_files}
-)
-
-install(TARGETS valuesource
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(valuesource PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI People
-)
-
-qt6_qml_type_registration(valuesource)
diff --git a/examples/qml/referenceexamples/valuesource/birthdayparty.cpp b/examples/qml/referenceexamples/valuesource/birthdayparty.cpp
deleted file mode 100644
index 7ad11066cb..0000000000
--- a/examples/qml/referenceexamples/valuesource/birthdayparty.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "birthdayparty.h"
-
-BirthdayPartyAttached::BirthdayPartyAttached(QObject *object)
-: QObject(object)
-{
-}
-
-QDate BirthdayPartyAttached::rsvp() const
-{
- return m_rsvp;
-}
-
-void BirthdayPartyAttached::setRsvp(QDate d)
-{
- m_rsvp = d;
-}
-
-
-BirthdayParty::BirthdayParty(QObject *parent)
-: QObject(parent), m_host(nullptr)
-{
-}
-
-Person *BirthdayParty::host() const
-{
- return m_host;
-}
-
-void BirthdayParty::setHost(Person *c)
-{
- m_host = c;
-}
-
-QQmlListProperty<Person> BirthdayParty::guests()
-{
- return {this, &m_guests};
-}
-
-int BirthdayParty::guestCount() const
-{
- return m_guests.count();
-}
-
-Person *BirthdayParty::guest(int 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() << qPrintable(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 abd6363571..0000000000
--- a/examples/qml/referenceexamples/valuesource/birthdayparty.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- BirthdayPartyAttached(QObject *object);
-
- 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:
- BirthdayParty(QObject *parent = nullptr);
-
- Person *host() const;
- void setHost(Person *);
-
- QQmlListProperty<Person> guests();
- int guestCount() const;
- Person *guest(int) const;
-
- QString announcement() const;
- void setAnnouncement(const QString &);
-
- static BirthdayPartyAttached *qmlAttachedProperties(QObject *);
-
- void startParty();
-signals:
- void partyStarted(QTime time);
-
-private:
- Person *m_host;
- 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 65d511058a..0000000000
--- a/examples/qml/referenceexamples/valuesource/example.qml
+++ /dev/null
@@ -1,87 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import People 1.0
-import QtQuick 2.0 // 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 da09d3d7ba..0000000000
--- a/examples/qml/referenceexamples/valuesource/happybirthdaysong.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "happybirthdaysong.h"
-#include <QTimer>
-
-HappyBirthdaySong::HappyBirthdaySong(QObject *parent)
-: QObject(parent), m_line(-1)
-{
- setName(QString());
- 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 2600208968..0000000000
--- a/examples/qml/referenceexamples/valuesource/happybirthdaysong.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- HappyBirthdaySong(QObject *parent = nullptr);
-
- void setTarget(const QQmlProperty &) override;
-// ![1]
-
- QString name() const;
- void setName(const QString &);
-
-private slots:
- void advance();
-
-private:
- int m_line;
- 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 2e9995fcd8..0000000000
--- a/examples/qml/referenceexamples/valuesource/main.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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()) {
- qWarning() << party->host()->name() << "is having a birthday!";
-
- if (qobject_cast<Boy *>(party->host()))
- qWarning() << "He is inviting:";
- else
- qWarning() << "She is inviting:";
-
- for (int 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())
- qWarning() << " " << guest->name() << "RSVP date: Hasn't RSVP'd";
- else
- qWarning() << " " << guest->name() << "RSVP date:" << qPrintable(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 0603644108..0000000000
--- a/examples/qml/referenceexamples/valuesource/person.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "person.h"
-
-ShoeDescription::ShoeDescription(QObject *parent)
-: QObject(parent), m_size(0), m_price(0)
-{
-}
-
-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;
-}
-
-Person::Person(QObject *parent)
-: QObject(parent)
-{
-}
-
-QString Person::name() const
-{
- return m_name;
-}
-
-void Person::setName(const QString &n)
-{
- m_name = n;
-}
-
-ShoeDescription *Person::shoe()
-{
- return &m_shoe;
-}
-
-
-Boy::Boy(QObject * parent)
-: Person(parent)
-{
-}
-
-
-Girl::Girl(QObject * parent)
-: Person(parent)
-{
-}
-
diff --git a/examples/qml/referenceexamples/valuesource/person.h b/examples/qml/referenceexamples/valuesource/person.h
deleted file mode 100644
index 7283f39f61..0000000000
--- a/examples/qml/referenceexamples/valuesource/person.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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:
- ShoeDescription(QObject *parent = nullptr);
-
- 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;
- QColor m_color;
- QString m_brand;
- qreal m_price;
-};
-
-class Person : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(ShoeDescription *shoe READ shoe)
- QML_ANONYMOUS
-public:
- Person(QObject *parent = nullptr);
-
- 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:
- Boy(QObject * parent = nullptr);
-};
-
-class Girl : public Person
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- Girl(QObject * parent = nullptr);
-};
-
-#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 6c986b7778..0000000000
--- a/examples/qml/shell/CMakeLists.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-# Generated from shell.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(shell LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/shell")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS 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 b73c3014d2..0000000000
--- a/examples/qml/shell/main.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#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 0aa8ff83e8..ecfec86a25 100644
--- a/examples/qml/tutorials/CMakeLists.txt
+++ b/examples/qml/tutorials/CMakeLists.txt
@@ -1,5 +1,6 @@
-# Generated from tutorials.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# 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/.prev_CMakeLists.txt b/examples/qml/tutorials/extending-qml/.prev_CMakeLists.txt
deleted file mode 100644
index 8e41f3d77d..0000000000
--- a/examples/qml/tutorials/extending-qml/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-# Generated from extending-qml.pro.
-
-add_subdirectory(chapter1-basics)
-add_subdirectory(chapter2-methods)
-add_subdirectory(chapter3-bindings)
-add_subdirectory(chapter4-customPropertyTypes)
-add_subdirectory(chapter5-listproperties)
-add_subdirectory(chapter6-plugins)
diff --git a/examples/qml/tutorials/extending-qml/CMakeLists.txt b/examples/qml/tutorials/extending-qml/CMakeLists.txt
index 8e41f3d77d..87e3eaf54d 100644
--- a/examples/qml/tutorials/extending-qml/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/CMakeLists.txt
@@ -1,8 +1,9 @@
-# Generated from extending-qml.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-add_subdirectory(chapter1-basics)
-add_subdirectory(chapter2-methods)
-add_subdirectory(chapter3-bindings)
-add_subdirectory(chapter4-customPropertyTypes)
-add_subdirectory(chapter5-listproperties)
-add_subdirectory(chapter6-plugins)
+qt_internal_add_example(chapter1-basics)
+qt_internal_add_example(chapter2-methods)
+qt_internal_add_example(chapter3-bindings)
+qt_internal_add_example(chapter4-customPropertyTypes)
+qt_internal_add_example(chapter5-listproperties)
+qt_internal_add_example(chapter6-plugins)
diff --git a/examples/qml/tutorials/extending-qml/chapter1-basics/App.qml b/examples/qml/tutorials/extending-qml/chapter1-basics/App.qml
new file mode 100644
index 0000000000..ed89ce97c4
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter1-basics/App.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+//![0]
+import Charts
+import QtQuick
+
+Item {
+ width: 300; height: 200
+
+ PieChart {
+ id: aPieChart
+ anchors.centerIn: parent
+ width: 100; height: 100
+ name: "A simple pie chart"
+ color: "red"
+ }
+
+ Text {
+ anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 }
+ text: aPieChart.name
+ }
+}
+//![0]
diff --git a/examples/qml/tutorials/extending-qml/chapter1-basics/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter1-basics/CMakeLists.txt
index 7e1f1887c4..0080197766 100644
--- a/examples/qml/tutorials/extending-qml/chapter1-basics/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter1-basics/CMakeLists.txt
@@ -1,62 +1,47 @@
-# Generated from chapter1-basics.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(chapter1-basics LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC 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 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(chapter1-basics
main.cpp
piechart.cpp piechart.h
)
+
set_target_properties(chapter1-basics PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
-target_link_libraries(chapter1-basics PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(chapter1-basics_resource_files
- "app.qml"
+target_link_libraries(chapter1-basics PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-
-qt6_add_resources(chapter1-basics "chapter1-basics"
- PREFIX
- "/"
- FILES
- ${chapter1-basics_resource_files}
+#![0]
+qt_add_qml_module(chapter1-basics
+ URI Charts
+ 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}
)
-set_target_properties(chapter1-basics PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI Charts
+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
)
-
-qt6_qml_type_registration(chapter1-basics)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml/chapter1-basics/app.qml b/examples/qml/tutorials/extending-qml/chapter1-basics/app.qml
deleted file mode 100644
index 4b25fa3c02..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter1-basics/app.qml
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-//![0]
-import Charts 1.0
-import QtQuick 2.0
-
-Item {
- width: 300; height: 200
-
- PieChart {
- id: aPieChart
- anchors.centerIn: parent
- width: 100; height: 100
- name: "A simple pie chart"
- color: "red"
- }
-
- Text {
- anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 }
- text: aPieChart.name
- }
-}
-//![0]
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 10df9c2566..bc4bbba809 100644
--- a/examples/qml/tutorials/extending-qml/chapter1-basics/main.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter1-basics/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
#include "piechart.h"
#include <QtQuick/QQuickView>
@@ -58,8 +11,8 @@ 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 app.exec();
+ return QGuiApplication::exec();
}
//![0]
diff --git a/examples/qml/tutorials/extending-qml/chapter1-basics/piechart.cpp b/examples/qml/tutorials/extending-qml/chapter1-basics/piechart.cpp
index c8c221994c..f89c6934d4 100644
--- a/examples/qml/tutorials/extending-qml/chapter1-basics/piechart.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter1-basics/piechart.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "piechart.h"
#include <QPainter>
diff --git a/examples/qml/tutorials/extending-qml/chapter1-basics/piechart.h b/examples/qml/tutorials/extending-qml/chapter1-basics/piechart.h
index 687f8e2b4d..a438cafbfb 100644
--- a/examples/qml/tutorials/extending-qml/chapter1-basics/piechart.h
+++ b/examples/qml/tutorials/extending-qml/chapter1-basics/piechart.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef PIECHART_H
#define PIECHART_H
@@ -57,12 +10,12 @@
class PieChart : public QQuickPaintedItem
{
Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(QColor color READ color WRITE setColor)
+ Q_PROPERTY(QString name READ name WRITE setName FINAL)
+ Q_PROPERTY(QColor color READ color WRITE setColor FINAL)
QML_ELEMENT
public:
- PieChart(QQuickItem *parent = 0);
+ PieChart(QQuickItem *parent = nullptr);
QString name() const;
void setName(const QString &name);
@@ -70,7 +23,7 @@ public:
QColor color() const;
void setColor(const QColor &color);
- void paint(QPainter *painter);
+ void paint(QPainter *painter) override;
private:
QString m_name;
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
new file mode 100644
index 0000000000..56597c3f42
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter2-methods/App.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+//![0]
+import Charts
+import QtQuick
+
+Item {
+ width: 300; height: 200
+
+ PieChart {
+ id: aPieChart
+ anchors.centerIn: parent
+ width: 100; height: 100
+ color: "red"
+
+ onChartCleared: console.log("The chart has been cleared")
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: aPieChart.clearChart()
+ }
+
+ Text {
+ anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 }
+ text: "Click anywhere to clear the chart"
+ }
+}
+//![0]
diff --git a/examples/qml/tutorials/extending-qml/chapter2-methods/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter2-methods/CMakeLists.txt
index 456c3965eb..3fc7d3ffbf 100644
--- a/examples/qml/tutorials/extending-qml/chapter2-methods/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter2-methods/CMakeLists.txt
@@ -1,62 +1,47 @@
-# Generated from chapter2-methods.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(chapter2-methods LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC 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 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(chapter2-methods
main.cpp
piechart.cpp piechart.h
)
+
set_target_properties(chapter2-methods PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
-target_link_libraries(chapter2-methods PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(chapter2-methods_resource_files
- "app.qml"
+target_link_libraries(chapter2-methods PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(chapter2-methods "chapter2-methods"
- PREFIX
- "/"
- FILES
- ${chapter2-methods_resource_files}
+qt_add_qml_module(chapter2-methods
+ URI Charts
+ 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}
)
-set_target_properties(chapter2-methods PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI Charts
+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
)
-
-qt6_qml_type_registration(chapter2-methods)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml/chapter2-methods/app.qml b/examples/qml/tutorials/extending-qml/chapter2-methods/app.qml
deleted file mode 100644
index d6953a2b66..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter2-methods/app.qml
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-//![0]
-import Charts 1.0
-import QtQuick 2.0
-
-Item {
- width: 300; height: 200
-
- PieChart {
- id: aPieChart
- anchors.centerIn: parent
- width: 100; height: 100
- color: "red"
-
- onChartCleared: console.log("The chart has been cleared")
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: aPieChart.clearChart()
- }
-
- Text {
- anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 }
- text: "Click anywhere to clear the chart"
- }
-}
-//![0]
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 10df9c2566..bc4bbba809 100644
--- a/examples/qml/tutorials/extending-qml/chapter2-methods/main.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter2-methods/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
#include "piechart.h"
#include <QtQuick/QQuickView>
@@ -58,8 +11,8 @@ 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 app.exec();
+ return QGuiApplication::exec();
}
//![0]
diff --git a/examples/qml/tutorials/extending-qml/chapter2-methods/piechart.cpp b/examples/qml/tutorials/extending-qml/chapter2-methods/piechart.cpp
index bfcfb46a99..4789f04c4b 100644
--- a/examples/qml/tutorials/extending-qml/chapter2-methods/piechart.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter2-methods/piechart.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "piechart.h"
#include <QPainter>
diff --git a/examples/qml/tutorials/extending-qml/chapter2-methods/piechart.h b/examples/qml/tutorials/extending-qml/chapter2-methods/piechart.h
index 271afbf653..d1eb5f1359 100644
--- a/examples/qml/tutorials/extending-qml/chapter2-methods/piechart.h
+++ b/examples/qml/tutorials/extending-qml/chapter2-methods/piechart.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef PIECHART_H
#define PIECHART_H
@@ -58,14 +11,14 @@ class PieChart : public QQuickPaintedItem
{
//![0]
Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
- Q_PROPERTY(QColor color READ color WRITE setColor)
+ Q_PROPERTY(QString name READ name WRITE setName FINAL)
+ Q_PROPERTY(QColor color READ color WRITE setColor FINAL)
QML_ELEMENT
//![1]
public:
//![1]
- PieChart(QQuickItem *parent = 0);
+ PieChart(QQuickItem *parent = nullptr);
QString name() const;
void setName(const QString &name);
@@ -73,7 +26,7 @@ public:
QColor color() const;
void setColor(const QColor &color);
- void paint(QPainter *painter);
+ void paint(QPainter *painter) override;
//![2]
Q_INVOKABLE void clearChart();
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
new file mode 100644
index 0000000000..d29eaf4b9f
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter3-bindings/App.qml
@@ -0,0 +1,37 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+//![0]
+import Charts
+import QtQuick
+
+Item {
+ width: 300; height: 200
+
+ Row {
+ anchors.centerIn: parent
+ spacing: 20
+
+ PieChart {
+ id: chartA
+ width: 100; height: 100
+ color: "red"
+ }
+
+ PieChart {
+ id: chartB
+ width: 100; height: 100
+ color: chartA.color
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: { chartA.color = "blue" }
+ }
+
+ Text {
+ anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 }
+ text: "Click anywhere to change the chart color"
+ }
+}
+//![0]
diff --git a/examples/qml/tutorials/extending-qml/chapter3-bindings/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter3-bindings/CMakeLists.txt
index 6b81e93dff..a842eb48ca 100644
--- a/examples/qml/tutorials/extending-qml/chapter3-bindings/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter3-bindings/CMakeLists.txt
@@ -1,62 +1,47 @@
-# Generated from chapter3-bindings.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(chapter3-bindings LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC 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 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(chapter3-bindings
main.cpp
piechart.cpp piechart.h
)
+
set_target_properties(chapter3-bindings PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
-target_link_libraries(chapter3-bindings PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(chapter3-bindings_resource_files
- "app.qml"
+target_link_libraries(chapter3-bindings PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(chapter3-bindings "chapter3-bindings"
- PREFIX
- "/"
- FILES
- ${chapter3-bindings_resource_files}
+qt_add_qml_module(chapter3-bindings
+ URI Charts
+ 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}
)
-set_target_properties(chapter3-bindings PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI Charts
+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
)
-
-qt6_qml_type_registration(chapter3-bindings)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml/chapter3-bindings/app.qml b/examples/qml/tutorials/extending-qml/chapter3-bindings/app.qml
deleted file mode 100644
index c5da7ce91a..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter3-bindings/app.qml
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-//![0]
-import Charts 1.0
-import QtQuick 2.0
-
-Item {
- width: 300; height: 200
-
- Row {
- anchors.centerIn: parent
- spacing: 20
-
- PieChart {
- id: chartA
- width: 100; height: 100
- color: "red"
- }
-
- PieChart {
- id: chartB
- width: 100; height: 100
- color: chartA.color
- }
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: { chartA.color = "blue" }
- }
-
- Text {
- anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 }
- text: "Click anywhere to change the chart color"
- }
-}
-//![0]
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 10df9c2566..bc4bbba809 100644
--- a/examples/qml/tutorials/extending-qml/chapter3-bindings/main.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter3-bindings/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
#include "piechart.h"
#include <QtQuick/QQuickView>
@@ -58,8 +11,8 @@ 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 app.exec();
+ return QGuiApplication::exec();
}
//![0]
diff --git a/examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.cpp b/examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.cpp
index 5f802d4326..8c50411847 100644
--- a/examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "piechart.h"
#include <QPainter>
diff --git a/examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.h b/examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.h
index 58b1339298..449d0f80a8 100644
--- a/examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.h
+++ b/examples/qml/tutorials/extending-qml/chapter3-bindings/piechart.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef PIECHART_H
#define PIECHART_H
@@ -58,15 +11,15 @@ class PieChart : public QQuickPaintedItem
{
//![0]
Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName)
+ Q_PROPERTY(QString name READ name WRITE setName FINAL)
QML_ELEMENT
//![1]
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
+ Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged FINAL)
public:
//![1]
- PieChart(QQuickItem *parent = 0);
+ PieChart(QQuickItem *parent = nullptr);
QString name() const;
void setName(const QString &name);
@@ -74,7 +27,7 @@ public:
QColor color() const;
void setColor(const QColor &color);
- void paint(QPainter *painter);
+ void paint(QPainter *painter) override;
Q_INVOKABLE void clearChart();
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
new file mode 100644
index 0000000000..2edcda568e
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/App.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+//![0]
+import Charts
+import QtQuick
+
+Item {
+ width: 300; height: 200
+
+ PieChart {
+ id: chart
+ anchors.centerIn: parent
+ width: 100; height: 100
+
+ pieSlice: PieSlice {
+ anchors.fill: parent
+ color: "red"
+ }
+ }
+
+ Component.onCompleted: console.log("The pie is colored " + chart.pieSlice.color)
+}
+//![0]
diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/CMakeLists.txt
index 55fb20ea41..fd6428093b 100644
--- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/CMakeLists.txt
@@ -1,63 +1,49 @@
-# Generated from chapter4-customPropertyTypes.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(chapter4-customPropertyTypes LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/tutorials/extending-qml/chapter4-customPropertyTypes")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
+qt_standard_project_setup(REQUIRES 6.5)
+#![0]
qt_add_executable(chapter4-customPropertyTypes
main.cpp
piechart.cpp piechart.h
pieslice.cpp pieslice.h
)
+#![0]
set_target_properties(chapter4-customPropertyTypes PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
-target_link_libraries(chapter4-customPropertyTypes PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(chapter4-customPropertyTypes_resource_files
- "app.qml"
+target_link_libraries(chapter4-customPropertyTypes PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-
-qt6_add_resources(chapter4-customPropertyTypes "chapter4-customPropertyTypes"
- PREFIX
- "/"
- FILES
- ${chapter4-customPropertyTypes_resource_files}
+#![1]
+qt_add_qml_module(chapter4-customPropertyTypes
+ URI Charts
+ 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}
)
-set_target_properties(chapter4-customPropertyTypes PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI Charts
+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
)
-
-qt6_qml_type_registration(chapter4-customPropertyTypes)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/app.qml b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/app.qml
deleted file mode 100644
index 8f135ccdfe..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/app.qml
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-//![0]
-import Charts 1.0
-import QtQuick 2.0
-
-Item {
- width: 300; height: 200
-
- PieChart {
- id: chart
- anchors.centerIn: parent
- width: 100; height: 100
-
- pieSlice: PieSlice {
- anchors.fill: parent
- color: "red"
- }
- }
-
- Component.onCompleted: console.log("The pie is colored " + chart.pieSlice.color)
-}
-//![0]
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 76e075a72c..09a025ae85 100644
--- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/main.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "piechart.h"
#include "pieslice.h"
@@ -61,9 +14,9 @@ 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 app.exec();
+ return QGuiApplication::exec();
//![2]
}
diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.cpp b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.cpp
index 066963cf33..9b94585de6 100644
--- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "piechart.h"
#include "pieslice.h"
diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.h b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.h
index 855ad7ae3a..0c4088435f 100644
--- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.h
+++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/piechart.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef PIECHART_H
#define PIECHART_H
@@ -58,16 +11,16 @@ class PieSlice;
class PieChart : public QQuickItem
{
Q_OBJECT
- Q_PROPERTY(PieSlice* pieSlice READ pieSlice WRITE setPieSlice)
+ Q_PROPERTY(PieSlice* pieSlice READ pieSlice WRITE setPieSlice FINAL)
//![0]
- Q_PROPERTY(QString name READ name WRITE setName)
+ Q_PROPERTY(QString name READ name WRITE setName FINAL)
Q_MOC_INCLUDE("pieslice.h")
QML_ELEMENT
//![1]
public:
//![1]
- PieChart(QQuickItem *parent = 0);
+ PieChart(QQuickItem *parent = nullptr);
QString name() const;
void setName(const QString &name);
diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.cpp b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.cpp
index d1779b9b6d..a02558bf0a 100644
--- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "pieslice.h"
#include <QPainter>
diff --git a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.h b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.h
index 6e64917851..74c6149e85 100644
--- a/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.h
+++ b/examples/qml/tutorials/extending-qml/chapter4-customPropertyTypes/pieslice.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef PIESLICE_H
#define PIESLICE_H
@@ -57,16 +10,16 @@
class PieSlice : public QQuickPaintedItem
{
Q_OBJECT
- Q_PROPERTY(QColor color READ color WRITE setColor)
+ Q_PROPERTY(QColor color READ color WRITE setColor FINAL)
QML_ELEMENT
public:
- PieSlice(QQuickItem *parent = 0);
+ PieSlice(QQuickItem *parent = nullptr);
QColor color() const;
void setColor(const QColor &color);
- void paint(QPainter *painter);
+ void paint(QPainter *painter) override;
private:
QColor m_color;
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
new file mode 100644
index 0000000000..9e200a9b60
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/App.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+//![0]
+import Charts
+import QtQuick
+
+Item {
+ width: 300; height: 200
+
+ PieChart {
+ anchors.centerIn: parent
+ width: 100; height: 100
+
+ slices: [
+ PieSlice {
+ anchors.fill: parent
+ color: "red"
+ fromAngle: 0; angleSpan: 110
+ },
+ PieSlice {
+ anchors.fill: parent
+ color: "black"
+ fromAngle: 110; angleSpan: 50
+ },
+ PieSlice {
+ anchors.fill: parent
+ color: "blue"
+ fromAngle: 160; angleSpan: 100
+ }
+ ]
+ }
+}
+//![0]
diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter5-listproperties/CMakeLists.txt
index f41a349eac..73984849c0 100644
--- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/CMakeLists.txt
@@ -1,63 +1,48 @@
-# Generated from chapter5-listproperties.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(chapter5-listproperties LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC 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 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(chapter5-listproperties
main.cpp
piechart.cpp piechart.h
pieslice.cpp pieslice.h
)
+
set_target_properties(chapter5-listproperties PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
-target_link_libraries(chapter5-listproperties PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(chapter5-listproperties_resource_files
- "app.qml"
+target_link_libraries(chapter5-listproperties PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(chapter5-listproperties "chapter5-listproperties"
- PREFIX
- "/"
- FILES
- ${chapter5-listproperties_resource_files}
+qt_add_qml_module(chapter5-listproperties
+ URI Charts
+ 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}
)
-set_target_properties(chapter5-listproperties PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI Charts
+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
)
-
-qt6_qml_type_registration(chapter5-listproperties)
+install(SCRIPT ${deploy_script})
diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/app.qml b/examples/qml/tutorials/extending-qml/chapter5-listproperties/app.qml
deleted file mode 100644
index c0c66c03bf..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/app.qml
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-//![0]
-import Charts 1.0
-import QtQuick 2.0
-
-Item {
- width: 300; height: 200
-
- PieChart {
- anchors.centerIn: parent
- width: 100; height: 100
-
- slices: [
- PieSlice {
- anchors.fill: parent
- color: "red"
- fromAngle: 0; angleSpan: 110
- },
- PieSlice {
- anchors.fill: parent
- color: "black"
- fromAngle: 110; angleSpan: 50
- },
- PieSlice {
- anchors.fill: parent
- color: "blue"
- fromAngle: 160; angleSpan: 100
- }
- ]
- }
-}
-//![0]
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 7262969b62..12d4d49438 100644
--- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/main.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "piechart.h"
#include "pieslice.h"
@@ -59,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 app.exec();
+ return QGuiApplication::exec();
}
diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.cpp b/examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.cpp
index a8e14db542..c15ab2b9e4 100644
--- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "piechart.h"
#include "pieslice.h"
diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.h b/examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.h
index 236fa6796f..05f0f1ddad 100644
--- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.h
+++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/piechart.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef PIECHART_H
#define PIECHART_H
@@ -58,15 +11,15 @@ class PieSlice;
class PieChart : public QQuickItem
{
Q_OBJECT
- Q_PROPERTY(QQmlListProperty<PieSlice> slices READ slices)
+ Q_PROPERTY(QQmlListProperty<PieSlice> slices READ slices FINAL)
//![0]
- Q_PROPERTY(QString name READ name WRITE setName)
+ Q_PROPERTY(QString name READ name WRITE setName FINAL)
QML_ELEMENT
//![1]
public:
//![1]
- PieChart(QQuickItem *parent = 0);
+ PieChart(QQuickItem *parent = nullptr);
QString name() const;
void setName(const QString &name);
diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.cpp b/examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.cpp
index 6a4b130fa1..1c18554798 100644
--- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "pieslice.h"
#include <QPainter>
diff --git a/examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.h b/examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.h
index 0b290851f0..14efaffcc8 100644
--- a/examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.h
+++ b/examples/qml/tutorials/extending-qml/chapter5-listproperties/pieslice.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef PIESLICE_H
#define PIESLICE_H
@@ -57,14 +10,14 @@
class PieSlice : public QQuickPaintedItem
{
Q_OBJECT
- Q_PROPERTY(QColor color READ color WRITE setColor)
- Q_PROPERTY(int fromAngle READ fromAngle WRITE setFromAngle)
- Q_PROPERTY(int angleSpan READ angleSpan WRITE setAngleSpan)
+ Q_PROPERTY(QColor color READ color WRITE setColor FINAL)
+ Q_PROPERTY(int fromAngle READ fromAngle WRITE setFromAngle FINAL)
+ Q_PROPERTY(int angleSpan READ angleSpan WRITE setAngleSpan FINAL)
QML_ELEMENT
//![0]
public:
- PieSlice(QQuickItem *parent = 0);
+ PieSlice(QQuickItem *parent = nullptr);
QColor color() const;
void setColor(const QColor &color);
@@ -75,7 +28,7 @@ public:
int angleSpan() const;
void setAngleSpan(int span);
- void paint(QPainter *painter);
+ void paint(QPainter *painter) override;
private:
QColor m_color;
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/.prev_CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter6-plugins/.prev_CMakeLists.txt
deleted file mode 100644
index 0d68df497a..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-# Generated from chapter6-plugins.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(chapter6-plugins LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC 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 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(chapter6-plugins
- main.cpp
-)
-set_target_properties(chapter6-plugins PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(chapter6-plugins PUBLIC
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(app_resource_files
- "app.qml"
-)
-
-qt6_add_resources(chapter6-plugins "app"
- PREFIX
- "/"
- FILES
- ${app_resource_files}
-)
-
-install(TARGETS chapter6-plugins
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-add_subdirectory(import)
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/App.qml b/examples/qml/tutorials/extending-qml/chapter6-plugins/App.qml
new file mode 100644
index 0000000000..1d1cb74176
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/App.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+import QtQuick
+import Charts
+
+Item {
+ width: 300; height: 200
+
+ PieChart {
+ anchors.centerIn: parent
+ width: 100; height: 100
+
+ slices: [
+ PieSlice {
+ anchors.fill: parent
+ color: "red"
+ fromAngle: 0; angleSpan: 110
+ },
+ PieSlice {
+ anchors.fill: parent
+ color: "black"
+ fromAngle: 110; angleSpan: 50
+ },
+ PieSlice {
+ anchors.fill: parent
+ color: "blue"
+ fromAngle: 160; angleSpan: 100
+ }
+ ]
+ }
+}
+
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt
index 1c19c84caa..bd88766e0c 100644
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/CMakeLists.txt
@@ -1,52 +1,46 @@
-# Generated from chapter6-plugins.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(chapter6-plugins LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC 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 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(chapter6-plugins
main.cpp
)
+
set_target_properties(chapter6-plugins PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
-target_link_libraries(chapter6-plugins PUBLIC
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(app_resource_files
- "app.qml"
+target_link_libraries(chapter6-plugins PRIVATE
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(chapter6-plugins "app"
- PREFIX
- "/"
- FILES
- ${app_resource_files}
+qt_add_qml_module(chapter6-plugins
+ URI ChartsApp
+ 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}
+)
+
+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})
-add_subdirectory(import)
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/CMakeLists.txt
new file mode 100644
index 0000000000..a0fed166e0
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/CMakeLists.txt
@@ -0,0 +1,29 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+qt6_policy(SET QTP0001 NEW)
+qt6_add_qml_module(chartsplugin
+ URI "Charts"
+ PLUGIN_TARGET chartsplugin
+ DEPENDENCIES QtQuick
+)
+
+target_sources(chartsplugin PRIVATE
+ piechart.cpp piechart.h
+ pieslice.cpp pieslice.h
+)
+
+target_link_libraries(chartsplugin PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+install(TARGETS chartsplugin
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/Charts"
+ LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR}/Charts"
+)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qmldir
+ DESTINATION "${CMAKE_INSTALL_BINDIR}/Charts"
+)
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/Charts.pro b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/Charts.pro
new file mode 100644
index 0000000000..e3763b6f5e
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/Charts.pro
@@ -0,0 +1,31 @@
+TEMPLATE = lib
+CONFIG += plugin qmltypes
+QT += qml quick
+
+QML_IMPORT_NAME = Charts
+QML_IMPORT_MAJOR_VERSION = 1
+
+TARGET = $$qtLibraryTarget(chartsplugin)
+
+HEADERS += piechart.h \
+ pieslice.h \
+ chartsplugin.h
+
+SOURCES += piechart.cpp \
+ pieslice.cpp
+
+DESTPATH=$$[QT_INSTALL_EXAMPLES]/qml/tutorials/extending-qml/chapter6-plugins/$$QML_IMPORT_NAME
+
+target.path=$$DESTPATH
+qmldir.files=$$PWD/qmldir
+qmldir.path=$$DESTPATH
+INSTALLS += target qmldir
+
+CONFIG += install_ok # Do not cargo-cult this!
+
+OTHER_FILES += qmldir
+
+# Copy the qmldir file to the same folder as the plugin binary
+cpqmldir.files = qmldir
+cpqmldir.path = .
+COPIES += cpqmldir
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/chartsplugin.h b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/chartsplugin.h
new file mode 100644
index 0000000000..e460c28680
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/chartsplugin.h
@@ -0,0 +1,17 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#ifndef CHARTSPLUGIN_H
+#define CHARTSPLUGIN_H
+
+//![0]
+#include <QQmlEngineExtensionPlugin>
+
+class ChartsPlugin : public QQmlEngineExtensionPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlEngineExtensionInterface_iid)
+};
+//![0]
+
+#endif
+
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/piechart.cpp b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/piechart.cpp
new file mode 100644
index 0000000000..acbcf03b75
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/piechart.cpp
@@ -0,0 +1,34 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#include "piechart.h"
+#include "pieslice.h"
+
+PieChart::PieChart(QQuickItem *parent)
+ : QQuickItem(parent)
+{
+}
+
+QString PieChart::name() const
+{
+ return m_name;
+}
+
+void PieChart::setName(const QString &name)
+{
+ m_name = name;
+}
+
+QQmlListProperty<PieSlice> PieChart::slices()
+{
+ return QQmlListProperty<PieSlice>(this, nullptr, &PieChart::append_slice, nullptr,
+ nullptr, nullptr, nullptr, nullptr);
+}
+
+void PieChart::append_slice(QQmlListProperty<PieSlice> *list, PieSlice *slice)
+{
+ PieChart *chart = qobject_cast<PieChart *>(list->object);
+ if (chart) {
+ slice->setParentItem(chart);
+ chart->m_slices.append(slice);
+ }
+}
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/piechart.h b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/piechart.h
new file mode 100644
index 0000000000..6c771e9814
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/piechart.h
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#ifndef PIECHART_H
+#define PIECHART_H
+
+#include <QtQuick/QQuickItem>
+
+class PieSlice;
+
+class PieChart : public QQuickItem
+{
+ Q_OBJECT
+ Q_PROPERTY(QQmlListProperty<PieSlice> slices READ slices FINAL)
+ Q_PROPERTY(QString name READ name WRITE setName FINAL)
+ QML_ELEMENT
+
+public:
+ PieChart(QQuickItem *parent = nullptr);
+
+ QString name() const;
+ void setName(const QString &name);
+
+ QQmlListProperty<PieSlice> slices();
+
+private:
+ static void append_slice(QQmlListProperty<PieSlice> *list, PieSlice *slice);
+
+ QString m_name;
+ QList<PieSlice *> m_slices;
+};
+
+#endif
+
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/pieslice.cpp b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/pieslice.cpp
new file mode 100644
index 0000000000..884bf90053
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/pieslice.cpp
@@ -0,0 +1,49 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#include "pieslice.h"
+
+#include <QPainter>
+
+PieSlice::PieSlice(QQuickItem *parent)
+ : QQuickPaintedItem(parent)
+{
+}
+
+QColor PieSlice::color() const
+{
+ return m_color;
+}
+
+void PieSlice::setColor(const QColor &color)
+{
+ m_color = color;
+}
+
+int PieSlice::fromAngle() const
+{
+ return m_fromAngle;
+}
+
+void PieSlice::setFromAngle(int angle)
+{
+ m_fromAngle = angle;
+}
+
+int PieSlice::angleSpan() const
+{
+ return m_angleSpan;
+}
+
+void PieSlice::setAngleSpan(int angle)
+{
+ m_angleSpan = angle;
+}
+
+void PieSlice::paint(QPainter *painter)
+{
+ QPen pen(m_color, 2);
+ painter->setPen(pen);
+ painter->setRenderHints(QPainter::Antialiasing, true);
+ painter->drawPie(boundingRect().adjusted(1, 1, -1, -1), m_fromAngle * 16, m_angleSpan * 16);
+}
+
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/pieslice.h b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/pieslice.h
new file mode 100644
index 0000000000..b07773c29f
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/pieslice.h
@@ -0,0 +1,38 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#ifndef PIESLICE_H
+#define PIESLICE_H
+
+#include <QtQuick/QQuickPaintedItem>
+#include <QColor>
+
+class PieSlice : public QQuickPaintedItem
+{
+ Q_OBJECT
+ Q_PROPERTY(QColor color READ color WRITE setColor FINAL)
+ Q_PROPERTY(int fromAngle READ fromAngle WRITE setFromAngle FINAL)
+ Q_PROPERTY(int angleSpan READ angleSpan WRITE setAngleSpan FINAL)
+ QML_ELEMENT
+
+public:
+ PieSlice(QQuickItem *parent = nullptr);
+
+ QColor color() const;
+ void setColor(const QColor &color);
+
+ int fromAngle() const;
+ void setFromAngle(int angle);
+
+ int angleSpan() const;
+ void setAngleSpan(int span);
+
+ void paint(QPainter *painter) override;
+
+private:
+ QColor m_color;
+ int m_fromAngle;
+ int m_angleSpan;
+};
+
+#endif
+
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/qmldir b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/qmldir
new file mode 100644
index 0000000000..4536f60e91
--- /dev/null
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/Charts/qmldir
@@ -0,0 +1,5 @@
+module Charts
+optional plugin chartsplugin
+typeinfo plugins.qmltypes
+depends QtQuick
+prefer :/qt/qml/Charts/
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/app.pro b/examples/qml/tutorials/extending-qml/chapter6-plugins/app.pro
index b340981e42..8f53075a7d 100644
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/app.pro
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/app.pro
@@ -3,9 +3,9 @@ QT += qml quick
# Ensure that the application will see the import path for the Charts module:
# * On Windows, do not build into a debug/release subdirectory.
-# * On OS X, add the plugin files into the bundle.
+# * On macOS, add the plugin files into the bundle, only in a shared build though
win32: DESTDIR = ./
-osx {
+macos:!qtConfig(static) {
charts.files = $$OUT_PWD/Charts
charts.path = Contents/PlugIns
QMAKE_BUNDLE_DATA += charts
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/app.qml b/examples/qml/tutorials/extending-qml/chapter6-plugins/app.qml
deleted file mode 100644
index fdf2c5e74a..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/app.qml
+++ /dev/null
@@ -1,79 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
-import Charts 1.0
-
-Item {
- width: 300; height: 200
-
- PieChart {
- anchors.centerIn: parent
- width: 100; height: 100
-
- slices: [
- PieSlice {
- anchors.fill: parent
- color: "red"
- fromAngle: 0; angleSpan: 110
- },
- PieSlice {
- anchors.fill: parent
- color: "black"
- fromAngle: 110; angleSpan: 50
- },
- PieSlice {
- anchors.fill: parent
- color: "blue"
- fromAngle: 160; angleSpan: 100
- }
- ]
- }
-}
-
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/chapter6-plugins.pro b/examples/qml/tutorials/extending-qml/chapter6-plugins/chapter6-plugins.pro
index f858c80876..2d78235454 100644
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/chapter6-plugins.pro
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/chapter6-plugins.pro
@@ -1,5 +1,5 @@
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS = \
- import \
+ Charts \
app.pro
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/CMakeLists.txt b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/CMakeLists.txt
deleted file mode 100644
index ad3a5972e8..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/CMakeLists.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-# Generated from import.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(chartsplugin LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/tutorials/extending-qml/chapter6-plugins/Charts")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt6_add_qml_module(chartsplugin
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../Charts"
- VERSION 1.0
- URI "Charts"
- INSTALL_LOCATION ${INSTALL_EXAMPLEDIR}
-)
-
-target_sources(chartsplugin PRIVATE
- chartsplugin.h
- piechart.cpp piechart.h
- pieslice.cpp pieslice.h
-)
-set_target_properties(chartsplugin PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(chartsplugin PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-install(TARGETS chartsplugin
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(chartsplugin PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI Charts
-)
-
-qt6_qml_type_registration(chartsplugin)
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/chartsplugin.h b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/chartsplugin.h
deleted file mode 100644
index 780bb3a8f3..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/chartsplugin.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef CHARTSPLUGIN_H
-#define CHARTSPLUGIN_H
-
-//![0]
-#include <QQmlEngineExtensionPlugin>
-
-class ChartsPlugin : public QQmlEngineExtensionPlugin
-{
- Q_OBJECT
- Q_PLUGIN_METADATA(IID QQmlEngineExtensionInterface_iid)
-};
-//![0]
-
-#endif
-
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/import.pro b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/import.pro
deleted file mode 100644
index c37cd1fdee..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/import.pro
+++ /dev/null
@@ -1,36 +0,0 @@
-TEMPLATE = lib
-CONFIG += plugin qmltypes
-QT += qml quick
-
-QML_IMPORT_NAME = Charts
-QML_IMPORT_MAJOR_VERSION = 1
-
-DESTDIR = ../$$QML_IMPORT_NAME
-TARGET = $$qtLibraryTarget(chartsplugin)
-
-HEADERS += piechart.h \
- pieslice.h \
- chartsplugin.h
-
-SOURCES += piechart.cpp \
- pieslice.cpp
-
-DESTPATH=$$[QT_INSTALL_EXAMPLES]/qml/tutorials/extending-qml/chapter6-plugins/$$QML_IMPORT_NAME
-
-copy_qmltypes.files = $$OUT_PWD/plugins.qmltypes
-copy_qmltypes.path = $$DESTDIR
-COPIES += copy_qmltypes
-
-target.path=$$DESTPATH
-qmldir.files=$$PWD/qmldir
-qmldir.path=$$DESTPATH
-INSTALLS += target qmldir
-
-CONFIG += install_ok # Do not cargo-cult this!
-
-OTHER_FILES += qmldir
-
-# Copy the qmldir file to the same folder as the plugin binary
-cpqmldir.files = qmldir
-cpqmldir.path = $$DESTDIR
-COPIES += cpqmldir
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/piechart.cpp b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/piechart.cpp
deleted file mode 100644
index 536c0e16ae..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/piechart.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "piechart.h"
-#include "pieslice.h"
-
-PieChart::PieChart(QQuickItem *parent)
- : QQuickItem(parent)
-{
-}
-
-QString PieChart::name() const
-{
- return m_name;
-}
-
-void PieChart::setName(const QString &name)
-{
- m_name = name;
-}
-
-QQmlListProperty<PieSlice> PieChart::slices()
-{
- return QQmlListProperty<PieSlice>(this, nullptr, &PieChart::append_slice, nullptr,
- nullptr, nullptr, nullptr, nullptr);
-}
-
-void PieChart::append_slice(QQmlListProperty<PieSlice> *list, PieSlice *slice)
-{
- PieChart *chart = qobject_cast<PieChart *>(list->object);
- if (chart) {
- slice->setParentItem(chart);
- chart->m_slices.append(slice);
- }
-}
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/piechart.h b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/piechart.h
deleted file mode 100644
index e6b768b274..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/piechart.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef PIECHART_H
-#define PIECHART_H
-
-#include <QtQuick/QQuickItem>
-
-class PieSlice;
-
-class PieChart : public QQuickItem
-{
- Q_OBJECT
- Q_PROPERTY(QQmlListProperty<PieSlice> slices READ slices)
- Q_PROPERTY(QString name READ name WRITE setName)
- QML_ELEMENT
-
-public:
- PieChart(QQuickItem *parent = 0);
-
- QString name() const;
- void setName(const QString &name);
-
- QQmlListProperty<PieSlice> slices();
-
-private:
- static void append_slice(QQmlListProperty<PieSlice> *list, PieSlice *slice);
-
- QString m_name;
- QList<PieSlice *> m_slices;
-};
-
-#endif
-
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/pieslice.cpp b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/pieslice.cpp
deleted file mode 100644
index 1d30036929..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/pieslice.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "pieslice.h"
-
-#include <QPainter>
-
-PieSlice::PieSlice(QQuickItem *parent)
- : QQuickPaintedItem(parent)
-{
-}
-
-QColor PieSlice::color() const
-{
- return m_color;
-}
-
-void PieSlice::setColor(const QColor &color)
-{
- m_color = color;
-}
-
-int PieSlice::fromAngle() const
-{
- return m_fromAngle;
-}
-
-void PieSlice::setFromAngle(int angle)
-{
- m_fromAngle = angle;
-}
-
-int PieSlice::angleSpan() const
-{
- return m_angleSpan;
-}
-
-void PieSlice::setAngleSpan(int angle)
-{
- m_angleSpan = angle;
-}
-
-void PieSlice::paint(QPainter *painter)
-{
- QPen pen(m_color, 2);
- painter->setPen(pen);
- painter->setRenderHints(QPainter::Antialiasing, true);
- painter->drawPie(boundingRect().adjusted(1, 1, -1, -1), m_fromAngle * 16, m_angleSpan * 16);
-}
-
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/pieslice.h b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/pieslice.h
deleted file mode 100644
index 091870bd51..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/pieslice.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef PIESLICE_H
-#define PIESLICE_H
-
-#include <QtQuick/QQuickPaintedItem>
-#include <QColor>
-
-class PieSlice : public QQuickPaintedItem
-{
- Q_OBJECT
- Q_PROPERTY(QColor color READ color WRITE setColor)
- Q_PROPERTY(int fromAngle READ fromAngle WRITE setFromAngle)
- Q_PROPERTY(int angleSpan READ angleSpan WRITE setAngleSpan)
- QML_ELEMENT
-
-public:
- PieSlice(QQuickItem *parent = 0);
-
- QColor color() const;
- void setColor(const QColor &color);
-
- int fromAngle() const;
- void setFromAngle(int angle);
-
- int angleSpan() const;
- void setAngleSpan(int span);
-
- void paint(QPainter *painter);
-
-private:
- QColor m_color;
- int m_fromAngle;
- int m_angleSpan;
-};
-
-#endif
-
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/qmldir b/examples/qml/tutorials/extending-qml/chapter6-plugins/import/qmldir
deleted file mode 100644
index d9e8471b3c..0000000000
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/import/qmldir
+++ /dev/null
@@ -1,2 +0,0 @@
-module Charts
-plugin chartsplugin
diff --git a/examples/qml/tutorials/extending-qml/chapter6-plugins/main.cpp b/examples/qml/tutorials/extending-qml/chapter6-plugins/main.cpp
index a7dc34e5fd..7dfb1cf5a7 100644
--- a/examples/qml/tutorials/extending-qml/chapter6-plugins/main.cpp
+++ b/examples/qml/tutorials/extending-qml/chapter6-plugins/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtQuick/QQuickView>
#include <QGuiApplication>
#include <QQmlEngine>
@@ -56,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 235c14325f..0000000000
--- a/examples/qml/xmlhttprequest/CMakeLists.txt
+++ /dev/null
@@ -1,113 +0,0 @@
-# Generated from xmlhttprequest.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(xmlhttprequest LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qml/xmlhttprequest")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(xmlhttprequest
- main.cpp
-)
-set_target_properties(xmlhttprequest PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(xmlhttprequest PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(xmlhttprequest_resource_files
- "Get.qml"
- "GetForm.ui.qml"
- "data.xml"
- "methods.js"
- "xmlhttprequest.qml"
-)
-
-qt6_add_resources(xmlhttprequest "xmlhttprequest"
- PREFIX
- "/qml/xmlhttprequest"
- FILES
- ${xmlhttprequest_resource_files}
-)
-set_source_files_properties("../../quick/shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../../quick/shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../../quick/shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../../quick/shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../../quick/shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../../quick/shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../../quick/shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../../quick/shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../../quick/shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../../quick/shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../../quick/shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set(quick_shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/slider_handle.png"
-)
-
-qt6_add_resources(xmlhttprequest "quick_shared"
- PREFIX
- "/quick/shared"
- BASE
- "../../quick/shared"
- FILES
- ${quick_shared_resource_files}
-)
-
-install(TARGETS xmlhttprequest
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/qml/xmlhttprequest/Get.qml b/examples/qml/xmlhttprequest/Get.qml
deleted file mode 100644
index 96cec2a99d..0000000000
--- a/examples/qml/xmlhttprequest/Get.qml
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-import "methods.js" as Utils
-
-GetForm
-{
- anchors.fill: parent
-
- mouseArea.onClicked: Utils.makeRequest()
-
- button.border.width: mouseArea.pressed ? 2 : 1
- text.text: "Request data.xml"
-
-}
diff --git a/examples/qml/xmlhttprequest/GetForm.ui.qml b/examples/qml/xmlhttprequest/GetForm.ui.qml
deleted file mode 100644
index 284299ef35..0000000000
--- a/examples/qml/xmlhttprequest/GetForm.ui.qml
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-
-Rectangle {
- id:rect
- width: 350
- height: 400
-
- property alias button: button
- property alias text: buttonText
- property alias mouseArea: mouseArea
- property alias msg: ttext
-
- Text { id: ttext; anchors.fill: parent; anchors.margins: 10 }
-
- Rectangle {
- id: button
- anchors.horizontalCenter: parent.horizontalCenter;
- anchors.bottom: parent.bottom
- anchors.margins: 10
- width: buttonText.width + 10
- height: buttonText.height + 10
- radius : 5; antialiasing: true
-
- Text { id: buttonText; anchors.centerIn: parent }
-
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- }
- }
-}
-
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 f24d1ae636..0000000000
--- a/examples/qml/xmlhttprequest/doc/src/xmlhttprequest.qdoc
+++ /dev/null
@@ -1,44 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
- \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 02be6d2196..0000000000
--- a/examples/qml/xmlhttprequest/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "../../quick/shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(qml/xmlhttprequest/xmlhttprequest)
diff --git a/examples/qml/xmlhttprequest/methods.js b/examples/qml/xmlhttprequest/methods.js
deleted file mode 100644
index b3ab098ab6..0000000000
--- a/examples/qml/xmlhttprequest/methods.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-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 3b78db0252..0000000000
--- a/examples/qml/xmlhttprequest/xmlhttprequest.pro
+++ /dev/null
@@ -1,18 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-RESOURCES += \
- xmlhttprequest.qrc \
- ../../quick/shared/quick_shared.qrc
-
-EXAMPLE_FILES = \
- data.xml
-
-target.path = $$[QT_INSTALL_EXAMPLES]/qml/xmlhttprequest
-INSTALLS += target
-
-DISTFILES += \
- Get.qml \
- GetForm.ui.qml \
- methods.js
diff --git a/examples/qml/xmlhttprequest/xmlhttprequest.qml b/examples/qml/xmlhttprequest/xmlhttprequest.qml
deleted file mode 100644
index e6c7b10e16..0000000000
--- a/examples/qml/xmlhttprequest/xmlhttprequest.qml
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "../../quick/shared" as Examples
-
-Item {
- height: 480
- width: 320
- Examples.LauncherList {
- id: ll
- anchors.fill: parent
- Component.onCompleted: {
- addExample("Get data", "Send get request and show received header and body", Qt.resolvedUrl("Get.qml"));
- }
- }
-}
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 2e5dae4bb8..0000000000
--- a/examples/qml/xmlhttprequest/xmlhttprequest.qrc
+++ /dev/null
@@ -1,9 +0,0 @@
-<RCC>
- <qresource prefix="/qml/xmlhttprequest">
- <file>xmlhttprequest.qml</file>
- <file>data.xml</file>
- <file>methods.js</file>
- <file>Get.qml</file>
- <file>GetForm.ui.qml</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 9b071ad6b1..0000000000
--- a/examples/qmltest/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# Generated from qmltest.pro.
-
-add_subdirectory(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/.prev_CMakeLists.txt b/examples/qmltest/qmltest/.prev_CMakeLists.txt
deleted file mode 100644
index c50eb7bcd3..0000000000
--- a/examples/qmltest/qmltest/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-# Generated from qmltest.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(tst_qmltestexample LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-
-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
-)
-
-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/CMakeLists.txt b/examples/qmltest/qmltest/CMakeLists.txt
deleted file mode 100644
index c8a8361578..0000000000
--- a/examples/qmltest/qmltest/CMakeLists.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-# Generated from qmltest.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(tst_qmltestexample LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-#special case begin
-find_package(Qt6 COMPONENTS QuickTest)
-#special case end
-
-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
-# special case begin
- Qt::QuickTest
-# special case end
-)
-
-# special case begin
-# This line get added, but does not make sense
-#if(QT_BUILDING_QT)
-# target_link_libraries(tst_qmltestexample PUBLIC
-# Qt::Qml
-# Qt::QuickTest
-# )
-#endif()
-# special case end
-
-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 68aa1304eb..0000000000
--- a/examples/qmltest/qmltest/tst_basic.qml
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.4
-import QtTest 1.1
-
-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 3d65b09021..0000000000
--- a/examples/qmltest/qmltest/tst_item.qml
+++ /dev/null
@@ -1,67 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.4
-import QtTest 1.1
-
-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 935bffa859..0000000000
--- a/examples/qmltest/qmltest/tst_qmltest.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtQuickTest/quicktest.h>
-QUICK_TEST_MAIN(qmltestexample)
diff --git a/examples/quick/.prev_CMakeLists.txt b/examples/quick/.prev_CMakeLists.txt
deleted file mode 100644
index 5299e95ae2..0000000000
--- a/examples/quick/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-# Generated from quick.pro.
-
-add_subdirectory(quick-accessibility)
-add_subdirectory(animation)
-add_subdirectory(draganddrop)
-add_subdirectory(externaldraganddrop)
-add_subdirectory(canvas)
-add_subdirectory(imageelements)
-add_subdirectory(keyinteraction)
-add_subdirectory(layouts)
-add_subdirectory(localstorage)
-add_subdirectory(models)
-add_subdirectory(views)
-add_subdirectory(tableview)
-add_subdirectory(mousearea)
-add_subdirectory(positioners)
-add_subdirectory(righttoleft)
-add_subdirectory(scenegraph)
-add_subdirectory(shadereffects)
-add_subdirectory(text)
-add_subdirectory(threading)
-add_subdirectory(touchinteraction)
-add_subdirectory(tutorials)
-add_subdirectory(customitems)
-add_subdirectory(imageprovider)
-add_subdirectory(imageresponseprovider)
-add_subdirectory(window)
-add_subdirectory(particles)
-add_subdirectory(delegatechooser)
-add_subdirectory(shapes)
-if(QT_FEATURE_opengl OR QT_FEATURE_opengles2 OR QT_FEATURE_opengles3)
- add_subdirectory(textureprovider)
- add_subdirectory(rendercontrol)
-endif()
-if(TARGET Qt::Widgets)
- add_subdirectory(embeddedinwidgets)
-endif()
-if(TARGET Qt::Widgets AND (QT_FEATURE_opengl OR QT_FEATURE_opengles2 OR QT_FEATURE_opengles3) AND (QT_FEATURE_opengles2 OR QT_FEATURE_opengles3 OR TARGET Qt::QuickWidgets))
- add_subdirectory(quickwidgets)
-endif()
diff --git a/examples/quick/CMakeLists.txt b/examples/quick/CMakeLists.txt
index 6da827e757..ae3580eb56 100644
--- a/examples/quick/CMakeLists.txt
+++ b/examples/quick/CMakeLists.txt
@@ -1,39 +1,68 @@
-# Generated from quick.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-add_subdirectory(quick-accessibility)
-add_subdirectory(animation)
-add_subdirectory(draganddrop)
-add_subdirectory(externaldraganddrop)
-add_subdirectory(canvas)
-add_subdirectory(imageelements)
-add_subdirectory(keyinteraction)
-add_subdirectory(layouts)
-add_subdirectory(localstorage)
+qt_internal_add_example(quick-accessibility)
+qt_internal_add_example(animation)
+qt_internal_add_example(draganddrop)
+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)
-add_subdirectory(views)
+qt_internal_add_example(views)
add_subdirectory(tableview)
-add_subdirectory(mousearea)
-add_subdirectory(positioners)
-add_subdirectory(righttoleft)
+qt_internal_add_example(mousearea)
+qt_internal_add_example(positioners)
add_subdirectory(scenegraph)
-add_subdirectory(shadereffects)
-add_subdirectory(text)
-add_subdirectory(threading)
-add_subdirectory(touchinteraction)
+qt_internal_add_example(shadereffects)
+qt_internal_add_example(text)
add_subdirectory(tutorials)
add_subdirectory(customitems)
-add_subdirectory(imageprovider)
-add_subdirectory(imageresponseprovider)
-add_subdirectory(window)
+qt_internal_add_example(imageprovider)
+qt_internal_add_example(imageresponseprovider)
+qt_internal_add_example(window)
add_subdirectory(particles)
-add_subdirectory(delegatechooser)
-add_subdirectory(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)
- add_subdirectory(embeddedinwidgets)
+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.
+set(reused_dir_targets
+ animation_shared
+ canvas_shared
+ views_shared
+ positioners_shared
+ text_shared
+ window_shared
+ imageelements_shared
+ pointerhandlers_shared
+ affectors_shared
+ emitters_shared
+ imageparticle_shared
+ itemparticle_shared
+ system_shared
+ draganddrop_shared
+ testbed_shared
+ itemswitcher_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/animation/CMakeLists.txt b/examples/quick/animation/CMakeLists.txt
index 4352823374..5dc6d73547 100644
--- a/examples/quick/animation/CMakeLists.txt
+++ b/examples/quick/animation/CMakeLists.txt
@@ -1,144 +1,67 @@
-# Generated from animation.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(animation LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+add_subdirectory("../shared" "shared")
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/animation")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(animation
+qt_add_executable(animationexample
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(animation PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(animation PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
+target_link_libraries(animationexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(animation "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
-)
-set(animation_resource_files
- "animation.qml"
- "basics/animators.qml"
- "basics/color-animation.qml"
- "basics/images/face-smile.png"
- "basics/images/moon.png"
- "basics/images/shadow.png"
- "basics/images/star.png"
- "basics/images/sun.png"
- "basics/property-animation.qml"
- "behaviors/FocusRect.qml"
- "behaviors/SideRect.qml"
- "behaviors/behavior-example.qml"
- "behaviors/tvtennis.qml"
- "behaviors/wigglytext.qml"
- "easing/easing.qml"
- "pathanimation/pathanimation.qml"
- "pathinterpolator/pathinterpolator.qml"
- "states/qt-logo.png"
- "states/states.qml"
- "states/transitions.qml"
-)
+add_dependencies(animationexample animation_shared)
-qt6_add_resources(animation "animation"
- PREFIX
- "/animation"
- FILES
- ${animation_resource_files}
+qt_add_qml_module(animationexample
+ URI animation
+ QML_FILES
+ "animation.qml"
+ "basics/animators.qml"
+ "basics/color-animation.qml"
+ "basics/property-animation.qml"
+ "behaviors/FocusRect.qml"
+ "behaviors/SideRect.qml"
+ "behaviors/behavior-example.qml"
+ "behaviors/tvtennis.qml"
+ "behaviors/wigglytext.qml"
+ "easing/easing.qml"
+ "pathanimation/pathanimation.qml"
+ "pathinterpolator/pathinterpolator.qml"
+ "states/states.qml"
+ "states/transitions.qml"
+ RESOURCES
+ "basics/images/face-smile.png"
+ "basics/images/moon.png"
+ "basics/images/shadow.png"
+ "basics/images/star.png"
+ "basics/images/sun.png"
+ "states/qt-logo.png"
)
-install(TARGETS animation
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+install(TARGETS animationexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
+
+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/animation.qml b/examples/quick/animation/animation.qml
index efc4e6fa27..75e6b86b29 100644
--- a/examples/quick/animation/animation.qml
+++ b/examples/quick/animation/animation.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../shared" as Examples
+import QtQuick
+import shared as Examples
Item {
height: 480
diff --git a/examples/quick/animation/animation.qmlproject b/examples/quick/animation/animation.qmlproject
index 2e96daa881..94433ab9d0 100644
--- a/examples/quick/animation/animation.qmlproject
+++ b/examples/quick/animation/animation.qmlproject
@@ -2,6 +2,7 @@ import QmlProject 1.1
Project {
mainFile: "animation.qml"
+ importPaths: ["../"]
/* Include .qml, .js, and image files from current directory and subdirectories */
QmlFiles {
diff --git a/examples/quick/animation/animation.qrc b/examples/quick/animation/animation.qrc
index 2d88c03007..3489d66d6e 100644
--- a/examples/quick/animation/animation.qrc
+++ b/examples/quick/animation/animation.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/animation">
+ <qresource prefix="/qt/qml/animation">
<file>animation.qml</file>
<file>basics/images/face-smile.png</file>
<file>basics/images/moon.png</file>
diff --git a/examples/quick/animation/basics/animators.qml b/examples/quick/animation/basics/animators.qml
index 430e71bb26..80765d21d4 100644
--- a/examples/quick/animation/basics/animators.qml
+++ b/examples/quick/animation/basics/animators.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.2
+import QtQuick
Item {
id: window
diff --git a/examples/quick/animation/basics/color-animation.qml b/examples/quick/animation/basics/color-animation.qml
index 7fbfe0224b..6427e06ad2 100644
--- a/examples/quick/animation/basics/color-animation.qml
+++ b/examples/quick/animation/basics/color-animation.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import QtQuick.Particles 2.0
+import QtQuick
+import QtQuick.Particles
Item {
id: window
diff --git a/examples/quick/animation/basics/property-animation.qml b/examples/quick/animation/basics/property-animation.qml
index 8d640c9dda..cd9b8277f5 100644
--- a/examples/quick/animation/basics/property-animation.qml
+++ b/examples/quick/animation/basics/property-animation.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQml 2.0
-import QtQuick 2.0
+import QtQml
+import QtQuick
Item {
id: window
diff --git a/examples/quick/animation/behaviors/FocusRect.qml b/examples/quick/animation/behaviors/FocusRect.qml
index 5188919606..9841162e57 100644
--- a/examples/quick/animation/behaviors/FocusRect.qml
+++ b/examples/quick/animation/behaviors/FocusRect.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: focusRect
diff --git a/examples/quick/animation/behaviors/SideRect.qml b/examples/quick/animation/behaviors/SideRect.qml
index 19c0528054..5230e5a406 100644
--- a/examples/quick/animation/behaviors/SideRect.qml
+++ b/examples/quick/animation/behaviors/SideRect.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: myRect
diff --git a/examples/quick/animation/behaviors/behavior-example.qml b/examples/quick/animation/behaviors/behavior-example.qml
index 43ca31f185..c994ec18d9 100644
--- a/examples/quick/animation/behaviors/behavior-example.qml
+++ b/examples/quick/animation/behaviors/behavior-example.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
width: 320; height: 480
diff --git a/examples/quick/animation/behaviors/tvtennis.qml b/examples/quick/animation/behaviors/tvtennis.qml
index 261f603de6..4a55448ad7 100644
--- a/examples/quick/animation/behaviors/tvtennis.qml
+++ b/examples/quick/animation/behaviors/tvtennis.qml
@@ -1,84 +1,74 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: page
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: {
@@ -95,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 81d4a8aef9..1b987f6391 100644
--- a/examples/quick/animation/behaviors/wigglytext.qml
+++ b/examples/quick/animation/behaviors/wigglytext.qml
@@ -1,76 +1,31 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQml 2.0
-import QtQuick 2.0
+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
@@ -83,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 97a574d768..26e056b813 100644
--- a/examples/quick/animation/doc/src/animation.qdoc
+++ b/examples/quick/animation/doc/src/animation.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick Examples - Animation
@@ -31,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.
@@ -77,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 44c078b9a2..8b58bd5538 100644
--- a/examples/quick/animation/easing/easing.qml
+++ b/examples/quick/animation/easing/easing.qml
@@ -1,56 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQml 2.15
-import QtQml.Models 2.15
-import QtQuick 2.0
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQml
+import QtQml.Models
+import QtQuick
+
+pragma ComponentBehavior: Bound
Rectangle {
id: window
@@ -137,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
}
@@ -145,9 +100,10 @@ Rectangle {
states : State {
name: "right"
PropertyChanges {
- target: rect;
- x: window.width - 76;
- color: delegateInstance.ballColor
+ rect {
+ x: window.width - 76;
+ color: delegateInstance.ballColor
+ }
}
}
diff --git a/examples/quick/animation/main.cpp b/examples/quick/animation/main.cpp
index 2defa0a32e..cec3e1eafa 100644
--- a/examples/quick/animation/main.cpp
+++ b/examples/quick/animation/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../shared/shared.h"
DECLARATIVE_EXAMPLE_MAIN(animation/animation)
diff --git a/examples/quick/animation/pathanimation/pathanimation.qml b/examples/quick/animation/pathanimation/pathanimation.qml
index ae96b32680..b366f8178d 100644
--- a/examples/quick/animation/pathanimation/pathanimation.qml
+++ b/examples/quick/animation/pathanimation/pathanimation.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQml 2.0
-import QtQuick 2.0
+import QtQml
+import QtQuick
Rectangle {
id: window
@@ -62,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
@@ -112,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 07a82fc916..102aee9cee 100644
--- a/examples/quick/animation/pathinterpolator/pathinterpolator.qml
+++ b/examples/quick/animation/pathinterpolator/pathinterpolator.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQml 2.0
-import QtQuick 2.0
+import QtQml
+import QtQuick
Rectangle {
id: window
@@ -62,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
@@ -118,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 5ff8e5318c..47d10287b1 100644
--- a/examples/quick/animation/states/states.qml
+++ b/examples/quick/animation/states/states.qml
@@ -1,55 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQml 2.0
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: page
@@ -101,13 +53,23 @@ Rectangle {
// In state 'middleRight', move the image to middleRightRect
State {
name: "middleRight"
- PropertyChanges { target: userIcon; x: middleRightRect.x; y: middleRightRect.y }
+ PropertyChanges {
+ userIcon {
+ x: middleRightRect.x
+ y: middleRightRect.y
+ }
+ }
},
// In state 'bottomLeft', move the image to bottomLeftRect
State {
name: "bottomLeft"
- PropertyChanges { target: userIcon; x: bottomLeftRect.x; y: bottomLeftRect.y }
+ PropertyChanges {
+ userIcon {
+ x: bottomLeftRect.x
+ y: bottomLeftRect.y
+ }
+ }
}
// ![0]
]
diff --git a/examples/quick/animation/states/transitions.qml b/examples/quick/animation/states/transitions.qml
index 1cfdfec18a..a318bc82b0 100644
--- a/examples/quick/animation/states/transitions.qml
+++ b/examples/quick/animation/states/transitions.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
/*
This is exactly the same as states.qml, except that we have appended
@@ -105,13 +58,23 @@ Rectangle {
// In state 'middleRight', move the image to middleRightRect
State {
name: "middleRight"
- PropertyChanges { target: userIcon; x: middleRightRect.x; y: middleRightRect.y }
+ PropertyChanges {
+ userIcon {
+ x: middleRightRect.x
+ y: middleRightRect.y
+ }
+ }
},
// In state 'bottomLeft', move the image to bottomLeftRect
State {
name: "bottomLeft"
- PropertyChanges { target: userIcon; x: bottomLeftRect.x; y: bottomLeftRect.y }
+ PropertyChanges {
+ userIcon {
+ x: bottomLeftRect.x
+ y: bottomLeftRect.y
+ }
+ }
}
]
diff --git a/examples/quick/canvas/CMakeLists.txt b/examples/quick/canvas/CMakeLists.txt
index ef978ee80b..b48770f0a6 100644
--- a/examples/quick/canvas/CMakeLists.txt
+++ b/examples/quick/canvas/CMakeLists.txt
@@ -1,135 +1,57 @@
-# Generated from canvas.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(canvas LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+add_subdirectory("../shared" "shared")
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/canvas")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(canvas
+qt_add_executable(canvasexample
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(canvas PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(canvas PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(canvas_resource_files
- "bezierCurve/bezierCurve.qml"
- "canvas.qml"
- "clip/clip.qml"
- "contents/qt-logo.png"
- "quadraticCurveTo/quadraticCurveTo.qml"
- "roundedrect/roundedrect.qml"
- "smile/smile.qml"
- "squircle/squircle.png"
- "squircle/squircle.qml"
- "tiger/tiger.js"
- "tiger/tiger.qml"
-)
-
-qt6_add_resources(canvas "canvas"
- PREFIX
- "/canvas"
- FILES
- ${canvas_resource_files}
-)
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
-qt6_add_resources(canvas "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
-)
-
-install(TARGETS canvas
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
+target_link_libraries(canvasexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+qt_add_qml_module(canvasexample
+ URI canvas
+ QML_FILES
+ "LabeledSlider.qml"
+ "bezierCurve/bezierCurve.qml"
+ "canvas.qml"
+ "clip/clip.qml"
+ "quadraticCurveTo/quadraticCurveTo.qml"
+ "roundedrect/roundedrect.qml"
+ "smile/smile.qml"
+ "squircle/squircle.qml"
+ "tiger/tiger.js"
+ "tiger/tiger.qml"
+ RESOURCES
+ "contents/qt-logo.png"
+ "squircle/squircle.png"
+)
+
+install(TARGETS canvasexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+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
new file mode 100644
index 0000000000..fa0ab98f78
--- /dev/null
+++ b/examples/quick/canvas/LabeledSlider.qml
@@ -0,0 +1,37 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ id: labeledSlider
+ property alias name: label.text
+ property real min: 0.0
+ property real max: 1.0
+ property alias value: quickControlsSlider.value
+
+ implicitHeight: Math.max(label.implicitHeight, quickControlsSlider.implicitHeight)
+
+ Label {
+ id: label
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ anchors.verticalCenter: labeledSlider.verticalCenter
+ font: Qt.font({pointSize: 13})
+ }
+
+ Slider {
+ id: quickControlsSlider
+ 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)
+ }
+}
diff --git a/examples/quick/canvas/bezierCurve/bezierCurve.qml b/examples/quick/canvas/bezierCurve/bezierCurve.qml
index 4f573ed64e..0965a1e3db 100644
--- a/examples/quick/canvas/bezierCurve/bezierCurve.qml
+++ b/examples/quick/canvas/bezierCurve/bezierCurve.qml
@@ -1,137 +1,134 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../contents"
-import "../../shared"
+import QtQuick
+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
+ }
- Text {
- font.pointSize: 24
- font.bold: true
- text: "Bezier Curve"
+ Label {
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
- Slider {id: lineWidthCtrl; min: 1; max: 10; init: 2; name: "Outline"}
- Slider {id: scaleCtrl; min: 0.1; max: 10; init: 1; name: "Scale"}
- Slider {id: rotateCtrl; min: 0; max: Math.PI*2; init: 0; name: "Rotate"}
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
+
+ LabeledSlider {
+ id: lineWidthCtrl
+ name: qsTr("Outline")
+ min: 1
+ max: 10
+ value: 2
+ width: root.width
+ }
+
+ LabeledSlider {
+ id: scaleCtrl
+ name: qsTr("Scale")
+ min: 0.1
+ max: 10
+ value: 1
+ width: root.width
+ }
+
+ LabeledSlider {
+ 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 7768e1092b..6ac856eb6d 100644
--- a/examples/quick/canvas/canvas.qml
+++ b/examples/quick/canvas/canvas.qml
@@ -1,70 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../shared" as Examples
+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/canvas.qrc b/examples/quick/canvas/canvas.qrc
index cfdfc844b9..eb7b3ad6d6 100644
--- a/examples/quick/canvas/canvas.qrc
+++ b/examples/quick/canvas/canvas.qrc
@@ -1,6 +1,7 @@
<RCC>
- <qresource prefix="/canvas">
+ <qresource prefix="/qt/qml/canvas">
<file>canvas.qml</file>
+ <file>LabeledSlider.qml</file>
<file>bezierCurve/bezierCurve.qml</file>
<file>clip/clip.qml</file>
<file>contents/qt-logo.png</file>
diff --git a/examples/quick/canvas/clip/clip.qml b/examples/quick/canvas/clip/clip.qml
index 1771121cd6..3d0591f97a 100644
--- a/examples/quick/canvas/clip/clip.qml
+++ b/examples/quick/canvas/clip/clip.qml
@@ -1,158 +1,142 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "../contents"
-import "../../shared"
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import "../"
Item {
- id:container
+ id: root
width: 320
height: 480
Column {
- spacing:5
- anchors.fill: parent
- anchors.topMargin: 12
- Text {
- font.pointSize: 24
- font.bold: true
- text: "Squircle with Clip"
+ spacing: 5
+ anchors {
+ fill: root
+ topMargin: 12
+ }
+
+ Label {
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
- Slider {id: nCtrl; min: 1; max: 10; init: 4; name:"N"}
- Slider {id: rCtrl; min: 30; max: 180; init: 80; name:"Radius"}
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
+
+ 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 14ee363164..87a7c7b5c4 100644
--- a/examples/quick/canvas/doc/src/canvas.qdoc
+++ b/examples/quick/canvas/doc/src/canvas.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick Examples - Canvas
@@ -31,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/main.cpp b/examples/quick/canvas/main.cpp
index e2f5eb6bde..160a2e13e1 100644
--- a/examples/quick/canvas/main.cpp
+++ b/examples/quick/canvas/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../shared/shared.h"
DECLARATIVE_EXAMPLE_MAIN(canvas/canvas)
diff --git a/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml b/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml
index cd93205995..0f788891ab 100644
--- a/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml
+++ b/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml
@@ -1,145 +1,138 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../contents"
-import "../../shared"
+import QtQuick
+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
+ }
- Text {
- font.pointSize: 24
- font.bold: true
- text: "Quadratic Curve"
+ Label {
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
- Slider {id:lineWidthCtrl; min:1; max:10; init:2; name:"Outline"}
- Slider {id:scaleCtrl; min:0.1; max:10; init:1; name:"Scale"}
- Slider {id:rotateCtrl; min:0; max:Math.PI*2; init:0; name:"Rotate"}
+ id: controls
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
+
+ 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 08ede9b1e7..26861b921c 100644
--- a/examples/quick/canvas/roundedrect/roundedrect.qml
+++ b/examples/quick/canvas/roundedrect/roundedrect.qml
@@ -1,131 +1,120 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../contents"
-import "../../shared"
+import QtQuick
+import QtQuick.Controls
+import "../"
Item {
- id:container
+ id: root
width: 320
height: 480
Column {
spacing: 6
- anchors.fill: parent
- anchors.topMargin: 12
- Text {
- font.pointSize: 24
- font.bold: true
- text: "Rounded rectangle"
+ anchors {
+ fill: parent
+ topMargin: 12
+ }
+
+ Label {
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
- Slider {id: lineWidthCtrl ; min: 1 ; max: 10; init: 2 ; name: "Outline"}
- Slider {id: rCtrl ; min: 10 ; max: 80 ; init: 40 ; name: "Radius"}
+ id: controls
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
+
+ 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 cde18d4d38..bf534a3da2 100644
--- a/examples/quick/canvas/smile/smile.qml
+++ b/examples/quick/canvas/smile/smile.qml
@@ -1,138 +1,129 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../contents"
-import "../../shared"
+import QtQuick
+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
+ }
- Text {
- font.pointSize: 24
- font.bold: true
- text: "Smile with arcs"
+ Label {
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
- Slider {id: lineWidthCtrl ; min: 1 ; max: 10 ; init: 2 ; name: "Outline"}
- Slider {id: scaleCtrl ; min: 0.1 ; max: 10 ; init: 1 ; name: "Scale"}
- Slider {id: rotateCtrl ; min: 0 ; max: Math.PI*2 ; init: 0 ; name: "Rotate"}
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
+
+ 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 5416bfa1c7..3e4755e02c 100644
--- a/examples/quick/canvas/squircle/squircle.qml
+++ b/examples/quick/canvas/squircle/squircle.qml
@@ -1,72 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "../contents"
-import "../../shared"
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import "../"
Item {
- id: container
+ id: root
width: 320
height: 480
Column {
spacing: 6
- anchors.fill: parent
- anchors.topMargin: 12
- Text {
- font.pointSize: 24
- font.bold: true
- text: "Squircles"
+ anchors {
+ fill: parent
+ topMargin: 12
+ }
+
+ Label {
anchors.horizontalCenter: parent.horizontalCenter
- color: "#777"
+ text: qsTr("Squircles")
+ color: Qt.lighter(palette.text)
+ font {
+ pointSize: 24
+ bold: true
+ }
}
Image {
@@ -78,83 +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
- Slider {id: nCtrl ; min: 1 ; max: 10 ; init: 2 ; name: "N"}
- Slider {id: rCtrl ; min: 30 ; max: 180 ; init: 60 ; name: "Radius"}
+ id: controls
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
+
+ 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 71367d560a..e936619411 100644
--- a/examples/quick/canvas/tiger/tiger.qml
+++ b/examples/quick/canvas/tiger/tiger.qml
@@ -1,144 +1,119 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "../contents"
-import "../../shared"
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+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
+ }
- Text {
- font.pointSize: 24
- font.bold: true
- text: "Tiger with SVG path"
+ Label {
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
- Slider {id: scaleCtrl ; min: 0.1 ; max: 1 ; init: 0.3 ; name: "Scale"}
- Slider {id: rotateCtrl ; min: 0 ; max: Math.PI*2 ; init: 0 ; name: "Rotate"}
- Slider {id: alphaCtrl ; min: 0 ; max: 1 ; init: 1 ; name: "Alpha"}
+ anchors {
+ bottom: parent.bottom
+ bottomMargin: 12
+ }
+
+ 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/.prev_CMakeLists.txt b/examples/quick/customitems/.prev_CMakeLists.txt
deleted file mode 100644
index 4afbfe3f6b..0000000000
--- a/examples/quick/customitems/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-# Generated from customitems.pro.
-
-add_subdirectory(painteditem)
-add_subdirectory(maskedmousearea)
diff --git a/examples/quick/customitems/CMakeLists.txt b/examples/quick/customitems/CMakeLists.txt
index 4afbfe3f6b..92c5c8fe85 100644
--- a/examples/quick/customitems/CMakeLists.txt
+++ b/examples/quick/customitems/CMakeLists.txt
@@ -1,4 +1,6 @@
-# Generated from customitems.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-add_subdirectory(painteditem)
-add_subdirectory(maskedmousearea)
+qt_internal_add_example(dialcontrol)
+qt_internal_add_example(flipable)
+qt_internal_add_example(painteditem)
diff --git a/examples/quick/customitems/customitems.pro b/examples/quick/customitems/customitems.pro
index 1e0a2aed49..3199bfc9ad 100644
--- a/examples/quick/customitems/customitems.pro
+++ b/examples/quick/customitems/customitems.pro
@@ -1,14 +1,7 @@
TEMPLATE = subdirs
SUBDIRS = \
- painteditem \
- maskedmousearea
+ painteditem
EXAMPLE_FILES = \
dialcontrol \
- flipable \
- progressbar \
- scrollbar \
- searchbox \
- slideswitch \
- spinner \
- tabwidget
+ flipable
diff --git a/examples/quick/customitems/dialcontrol/CMakeLists.txt b/examples/quick/customitems/dialcontrol/CMakeLists.txt
index 9d2fa2818a..ff26205142 100644
--- a/examples/quick/customitems/dialcontrol/CMakeLists.txt
+++ b/examples/quick/customitems/dialcontrol/CMakeLists.txt
@@ -1,61 +1,53 @@
-# Generated from dialcontrol.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(dialcontrol LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC 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)
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
+qt_standard_project_setup(REQUIRES 6.5)
-qt_add_executable(dialcontrol
+qt_add_executable(dialcontrolexample
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(dialcontrol PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(dialcontrol PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
+target_link_libraries(dialcontrolexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
-# Resources:
-set(dialcontrol_resource_files
- "content/Dial.qml"
- "content/QuitButton.qml"
- "content/background.png"
- "content/needle.png"
- "content/needle_shadow.png"
- "content/overlay.png"
- "content/quit.png"
- "dialcontrol.qml"
+qt_add_qml_module(dialcontrolexample
+ URI dialcontrol
+ QML_FILES
+ "Dial.qml"
+ "QuitButton.qml"
+ "dialcontrol.qml"
+ RESOURCES
+ "background.png"
+ "needle.png"
+ "needle_shadow.png"
+ "overlay.png"
+ "quit.png"
)
-qt6_add_resources(dialcontrol "dialcontrol"
- PREFIX
- "/"
- FILES
- ${dialcontrol_resource_files}
+install(TARGETS dialcontrolexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS dialcontrol
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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
new file mode 100644
index 0000000000..3b9692cc91
--- /dev/null
+++ b/examples/quick/customitems/dialcontrol/Dial.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: root
+ property real value : 0
+
+ width: 210; height: 210
+
+ Image { source: "background.png" }
+
+//! [needle_shadow]
+ Image {
+ x: 96
+ y: 35
+ source: "needle_shadow.png"
+ transform: Rotation {
+ origin.x: 9; origin.y: 67
+ angle: needleRotation.angle
+ }
+ }
+//! [needle_shadow]
+//! [needle]
+ Image {
+ id: needle
+ x: 98; y: 33
+ antialiasing: true
+ source: "needle.png"
+ transform: Rotation {
+ id: needleRotation
+ origin.x: 5; origin.y: 65
+ //! [needle angle]
+ angle: Math.min(Math.max(-130, root.value * 2.6 - 130), 133)
+ Behavior on angle {
+ SpringAnimation {
+ spring: 1.4
+ damping: .15
+ }
+ }
+ //! [needle angle]
+ }
+ }
+//! [needle]
+//! [overlay]
+ Image { x: 21; y: 18; source: "overlay.png" }
+//! [overlay]
+}
diff --git a/examples/quick/customitems/dialcontrol/QuitButton.qml b/examples/quick/customitems/dialcontrol/QuitButton.qml
new file mode 100644
index 0000000000..841ff34ee8
--- /dev/null
+++ b/examples/quick/customitems/dialcontrol/QuitButton.qml
@@ -0,0 +1,15 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Image {
+ source: "quit.png"
+ scale: quitMouse.pressed ? 0.8 : 1.0
+ MouseArea {
+ id: quitMouse
+ anchors.fill: parent
+ anchors.margins: -10
+ onClicked: Qt.quit()
+ }
+}
diff --git a/examples/quick/customitems/dialcontrol/content/background.png b/examples/quick/customitems/dialcontrol/background.png
index 75d555d7ab..75d555d7ab 100644
--- a/examples/quick/customitems/dialcontrol/content/background.png
+++ b/examples/quick/customitems/dialcontrol/background.png
Binary files differ
diff --git a/examples/quick/customitems/dialcontrol/content/Dial.qml b/examples/quick/customitems/dialcontrol/content/Dial.qml
deleted file mode 100644
index 108b0e7410..0000000000
--- a/examples/quick/customitems/dialcontrol/content/Dial.qml
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Item {
- id: root
- property real value : 0
-
- width: 210; height: 210
-
- Image { source: "background.png" }
-
-//! [needle_shadow]
- Image {
- x: 96
- y: 35
- source: "needle_shadow.png"
- transform: Rotation {
- origin.x: 9; origin.y: 67
- angle: needleRotation.angle
- }
- }
-//! [needle_shadow]
-//! [needle]
- Image {
- id: needle
- x: 98; y: 33
- antialiasing: true
- source: "needle.png"
- transform: Rotation {
- id: needleRotation
- origin.x: 5; origin.y: 65
- //! [needle angle]
- angle: Math.min(Math.max(-130, root.value*2.6 - 130), 133)
- Behavior on angle {
- SpringAnimation {
- spring: 1.4
- damping: .15
- }
- }
- //! [needle angle]
- }
- }
-//! [needle]
-//! [overlay]
- Image { x: 21; y: 18; source: "overlay.png" }
-//! [overlay]
-}
diff --git a/examples/quick/customitems/dialcontrol/content/QuitButton.qml b/examples/quick/customitems/dialcontrol/content/QuitButton.qml
deleted file mode 100644
index 87dc159c5d..0000000000
--- a/examples/quick/customitems/dialcontrol/content/QuitButton.qml
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-Image {
- source: "quit.png"
- scale: quitMouse.pressed ? 0.8 : 1.0
- MouseArea {
- id: quitMouse
- anchors.fill: parent
- anchors.margins: -10
- onClicked: Qt.quit()
- }
-}
diff --git a/examples/quick/customitems/dialcontrol/dialcontrol.qml b/examples/quick/customitems/dialcontrol/dialcontrol.qml
index d0a623a72a..695ec9fb46 100644
--- a/examples/quick/customitems/dialcontrol/dialcontrol.qml
+++ b/examples/quick/customitems/dialcontrol/dialcontrol.qml
@@ -1,57 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [imports]
-import QtQuick 2.2
-import QtQuick.Window 2.1
-import "content"
+import QtQuick
+import QtQuick.Window
//! [imports]
//! [0]
@@ -91,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/dialcontrol.qrc b/examples/quick/customitems/dialcontrol/dialcontrol.qrc
index 6433d68bb8..c3c8d58b66 100644
--- a/examples/quick/customitems/dialcontrol/dialcontrol.qrc
+++ b/examples/quick/customitems/dialcontrol/dialcontrol.qrc
@@ -1,12 +1,12 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/qt/qml/dialcontrol">
+ <file>Dial.qml</file>
+ <file>QuitButton.qml</file>
+ <file>background.png</file>
<file>dialcontrol.qml</file>
- <file>content/background.png</file>
- <file>content/Dial.qml</file>
- <file>content/needle_shadow.png</file>
- <file>content/needle.png</file>
- <file>content/overlay.png</file>
- <file>content/quit.png</file>
- <file>content/QuitButton.qml</file>
+ <file>needle.png</file>
+ <file>needle_shadow.png</file>
+ <file>overlay.png</file>
+ <file>quit.png</file>
</qresource>
</RCC>
diff --git a/examples/quick/customitems/dialcontrol/doc/src/dialcontrol.qdoc b/examples/quick/customitems/dialcontrol/doc/src/dialcontrol.qdoc
index cd50650c0b..7b56478c37 100644
--- a/examples/quick/customitems/dialcontrol/doc/src/dialcontrol.qdoc
+++ b/examples/quick/customitems/dialcontrol/doc/src/dialcontrol.qdoc
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/dialcontrol/main.cpp b/examples/quick/customitems/dialcontrol/main.cpp
index 6ebe203a70..56b1d789e7 100644
--- a/examples/quick/customitems/dialcontrol/main.cpp
+++ b/examples/quick/customitems/dialcontrol/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(dialcontrol)
+DECLARATIVE_EXAMPLE_MAIN(dialcontrol/dialcontrol)
diff --git a/examples/quick/customitems/dialcontrol/content/needle.png b/examples/quick/customitems/dialcontrol/needle.png
index 2d19f75039..2d19f75039 100644
--- a/examples/quick/customitems/dialcontrol/content/needle.png
+++ b/examples/quick/customitems/dialcontrol/needle.png
Binary files differ
diff --git a/examples/quick/customitems/dialcontrol/content/needle_shadow.png b/examples/quick/customitems/dialcontrol/needle_shadow.png
index 8d8a928cc5..8d8a928cc5 100644
--- a/examples/quick/customitems/dialcontrol/content/needle_shadow.png
+++ b/examples/quick/customitems/dialcontrol/needle_shadow.png
Binary files differ
diff --git a/examples/quick/customitems/dialcontrol/content/overlay.png b/examples/quick/customitems/dialcontrol/overlay.png
index 3860a7b590..3860a7b590 100644
--- a/examples/quick/customitems/dialcontrol/content/overlay.png
+++ b/examples/quick/customitems/dialcontrol/overlay.png
Binary files differ
diff --git a/examples/quick/customitems/dialcontrol/content/quit.png b/examples/quick/customitems/dialcontrol/quit.png
index b822057d4e..b822057d4e 100644
--- a/examples/quick/customitems/dialcontrol/content/quit.png
+++ b/examples/quick/customitems/dialcontrol/quit.png
Binary files differ
diff --git a/examples/quick/customitems/flipable/content/5_heart.png b/examples/quick/customitems/flipable/5_heart.png
index fb59d81453..fb59d81453 100644
--- a/examples/quick/customitems/flipable/content/5_heart.png
+++ b/examples/quick/customitems/flipable/5_heart.png
Binary files differ
diff --git a/examples/quick/customitems/flipable/content/9_club.png b/examples/quick/customitems/flipable/9_club.png
index 2545001904..2545001904 100644
--- a/examples/quick/customitems/flipable/content/9_club.png
+++ b/examples/quick/customitems/flipable/9_club.png
Binary files differ
diff --git a/examples/quick/customitems/flipable/CMakeLists.txt b/examples/quick/customitems/flipable/CMakeLists.txt
new file mode 100644
index 0000000000..8d1c7ab7cf
--- /dev/null
+++ b/examples/quick/customitems/flipable/CMakeLists.txt
@@ -0,0 +1,51 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(flipable LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+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 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+qt_add_qml_module(flipableexample
+ URI flipable
+ QML_FILES
+ "flipable.qml"
+ "Card.qml"
+ RESOURCES
+ "5_heart.png"
+ "9_club.png"
+ "back.png"
+)
+
+install(TARGETS flipableexample
+ 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/Card.qml b/examples/quick/customitems/flipable/Card.qml
new file mode 100644
index 0000000000..0a1e4059f7
--- /dev/null
+++ b/examples/quick/customitems/flipable/Card.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Flipable {
+ id: container
+
+ property alias source: frontImage.source
+ property bool flipped: true
+ property int xAxis: 0
+ property int yAxis: 0
+ property int angle: 0
+
+ width: front.width; height: front.height
+
+ front: Image { id: frontImage }
+ back: Image { source: "back.png" }
+
+ state: "back"
+
+ MouseArea { anchors.fill: parent; onClicked: container.flipped = !container.flipped }
+
+ transform: Rotation {
+ id: rotation; origin.x: container.width / 2; origin.y: container.height / 2
+ axis.x: container.xAxis; axis.y: container.yAxis; axis.z: 0
+ }
+
+ states: State {
+ name: "back"; when: container.flipped
+ PropertyChanges { rotation.angle: container.angle }
+ }
+
+ transitions: Transition {
+ ParallelAnimation {
+ NumberAnimation { target: rotation; properties: "angle"; duration: 600 }
+ SequentialAnimation {
+ NumberAnimation { target: container; property: "scale"; to: 0.75; duration: 300 }
+ NumberAnimation { target: container; property: "scale"; to: 1.0; duration: 300 }
+ }
+ }
+ }
+}
diff --git a/examples/quick/customitems/flipable/content/back.png b/examples/quick/customitems/flipable/back.png
index f715d7487e..f715d7487e 100644
--- a/examples/quick/customitems/flipable/content/back.png
+++ b/examples/quick/customitems/flipable/back.png
Binary files differ
diff --git a/examples/quick/customitems/flipable/content/Card.qml b/examples/quick/customitems/flipable/content/Card.qml
deleted file mode 100644
index ffffdb6b7d..0000000000
--- a/examples/quick/customitems/flipable/content/Card.qml
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Flipable {
- id: container
-
- property alias source: frontImage.source
- property bool flipped: true
- property int xAxis: 0
- property int yAxis: 0
- property int angle: 0
-
- width: front.width; height: front.height
-
- front: Image { id: frontImage }
- back: Image { source: "back.png" }
-
- state: "back"
-
- MouseArea { anchors.fill: parent; onClicked: container.flipped = !container.flipped }
-
- transform: Rotation {
- id: rotation; origin.x: container.width / 2; origin.y: container.height / 2
- axis.x: container.xAxis; axis.y: container.yAxis; axis.z: 0
- }
-
- states: State {
- name: "back"; when: container.flipped
- PropertyChanges { target: rotation; angle: container.angle }
- }
-
- transitions: Transition {
- ParallelAnimation {
- NumberAnimation { target: rotation; properties: "angle"; duration: 600 }
- SequentialAnimation {
- NumberAnimation { target: container; property: "scale"; to: 0.75; duration: 300 }
- NumberAnimation { target: container; property: "scale"; to: 1.0; duration: 300 }
- }
- }
- }
-}
diff --git a/examples/quick/customitems/flipable/doc/src/flipable.qdoc b/examples/quick/customitems/flipable/doc/src/flipable.qdoc
index 58f5492251..8b2eea6611 100644
--- a/examples/quick/customitems/flipable/doc/src/flipable.qdoc
+++ b/examples/quick/customitems/flipable/doc/src/flipable.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/flipable/flipable.qml b/examples/quick/customitems/flipable/flipable.qml
index 3662898864..3d95afe75e 100644
--- a/examples/quick/customitems/flipable/flipable.qml
+++ b/examples/quick/customitems/flipable/flipable.qml
@@ -1,55 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "content"
+import QtQuick
Rectangle {
id: window
@@ -59,7 +11,7 @@ Rectangle {
Row {
anchors.centerIn: parent; spacing: 30
- Card { source: "content/9_club.png"; angle: 180; yAxis: 1 }
- Card { source: "content/5_heart.png"; angle: 540; xAxis: 1 }
+ Card { source: "9_club.png"; angle: 180; yAxis: 1 }
+ Card { source: "5_heart.png"; angle: 540; xAxis: 1 }
}
}
diff --git a/examples/quick/customitems/flipable/flipable.qrc b/examples/quick/customitems/flipable/flipable.qrc
index 7918ccf00e..a8056e45f9 100644
--- a/examples/quick/customitems/flipable/flipable.qrc
+++ b/examples/quick/customitems/flipable/flipable.qrc
@@ -1,9 +1,9 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/qt/qml/flipable">
<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>
+ <file>5_heart.png</file>
+ <file>9_club.png</file>
+ <file>back.png</file>
+ <file>Card.qml</file>
</qresource>
</RCC>
diff --git a/examples/quick/customitems/flipable/main.cpp b/examples/quick/customitems/flipable/main.cpp
index a0f0d67d45..c94af94422 100644
--- a/examples/quick/customitems/flipable/main.cpp
+++ b/examples/quick/customitems/flipable/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(flipable)
+DECLARATIVE_EXAMPLE_MAIN(flipable/flipable)
diff --git a/examples/quick/customitems/maskedmousearea/CMakeLists.txt b/examples/quick/customitems/maskedmousearea/CMakeLists.txt
deleted file mode 100644
index 0c5a19b5e7..0000000000
--- a/examples/quick/customitems/maskedmousearea/CMakeLists.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-# Generated from maskedmousearea.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(maskedmousearea LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/customitems/maskedmousearea")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-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
-)
-
-
-# Resources:
-set(maskedmousearea_resource_files
- "images/cloud_1.png"
- "images/cloud_2.png"
- "images/moon.png"
- "maskedmousearea.qml"
-)
-
-qt6_add_resources(maskedmousearea "maskedmousearea"
- PREFIX
- "/customitems/maskedmousearea"
- FILES
- ${maskedmousearea_resource_files}
-)
-
-install(TARGETS maskedmousearea
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(maskedmousearea PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI Example
-)
-
-qt6_qml_type_registration(maskedmousearea)
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 5b42516154..0000000000
--- a/examples/quick/customitems/maskedmousearea/main.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#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 app.exec();
-}
diff --git a/examples/quick/customitems/maskedmousearea/maskedmousearea.cpp b/examples/quick/customitems/maskedmousearea/maskedmousearea.cpp
deleted file mode 100644
index 55fce54ac0..0000000000
--- a/examples/quick/customitems/maskedmousearea/maskedmousearea.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#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 39d78a019a..0000000000
--- a/examples/quick/customitems/maskedmousearea/maskedmousearea.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#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 = 0);
-
- bool contains(const QPointF &point) const;
-
- 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);
- void mouseReleaseEvent(QMouseEvent *event);
- void hoverEnterEvent(QHoverEvent *event);
- void hoverLeaveEvent(QHoverEvent *event);
- void mouseUngrabEvent();
-
-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 2474edaf78..0000000000
--- a/examples/quick/customitems/maskedmousearea/maskedmousearea.qml
+++ /dev/null
@@ -1,142 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import Example 1.0
-
-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 533396a7cd..ca23161b1c 100644
--- a/examples/quick/customitems/painteditem/CMakeLists.txt
+++ b/examples/quick/customitems/painteditem/CMakeLists.txt
@@ -1,70 +1,46 @@
-# Generated from painteditem.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
-project(qmltextballoonplugin LANGUAGES CXX)
+cmake_minimum_required(VERSION 3.16)
+project(painteditem LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC 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}/quick/customitems/painteditem/TextBalloonPlugin")
+qt_standard_project_setup(REQUIRES 6.5)
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
+add_subdirectory(TextBalloon)
-qt6_add_qml_module(qmltextballoonplugin
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/TextBalloonPlugin"
- VERSION 1.0
- URI "TextBalloonPlugin"
- INSTALL_LOCATION ${INSTALL_EXAMPLEDIR}
-)
+qt_add_executable(painteditemexample WIN32 MACOSX_BUNDLE main.cpp)
-target_sources(qmltextballoonplugin PRIVATE
- TextBalloonPlugin/plugin.h
- textballoon.cpp textballoon.h
-)
-set_target_properties(qmltextballoonplugin PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(qmltextballoonplugin PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+qt_add_qml_module(painteditemexample
+ URI painteditem
+ QML_FILES
+ "textballoons.qml"
)
-
-# Resources:
-set(painteditem_resource_files
- "textballoon.h"
- "textballoons.qml"
+target_link_libraries(painteditemexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(qmltextballoonplugin "painteditem"
- PREFIX
- "/painteditem"
- FILES
- ${painteditem_resource_files}
-)
+add_dependencies(painteditemexample qmltextballoon)
-install(TARGETS qmltextballoonplugin
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+install(TARGETS painteditemexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-set_target_properties(qmltextballoonplugin PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI TextBalloonPlugin
+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
)
-
-qt6_qml_type_registration(qmltextballoonplugin)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/customitems/painteditem/TextBalloon/CMakeLists.txt b/examples/quick/customitems/painteditem/TextBalloon/CMakeLists.txt
new file mode 100644
index 0000000000..b94b297aeb
--- /dev/null
+++ b/examples/quick/customitems/painteditem/TextBalloon/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# 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()
+
+qt_add_qml_module(qmltextballoon
+ URI "TextBalloon"
+ PLUGIN_TARGET qmltextballoon
+ SOURCES
+ textballoon.cpp textballoon.h
+)
+
+target_link_libraries(qmltextballoon PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+install(TARGETS qmltextballoon
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}/TextBalloon"
+ LIBRARY DESTINATION "${CMAKE_INSTALL_BINDIR}/TextBalloon"
+)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qmldir
+ DESTINATION "${CMAKE_INSTALL_BINDIR}/TextBalloon"
+)
diff --git a/examples/quick/customitems/painteditem/TextBalloon/plugin.h b/examples/quick/customitems/painteditem/TextBalloon/plugin.h
new file mode 100644
index 0000000000..e598501b7e
--- /dev/null
+++ b/examples/quick/customitems/painteditem/TextBalloon/plugin.h
@@ -0,0 +1,12 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QQmlEngineExtensionPlugin>
+
+#include "textballoon.h"
+
+class TextBalloonPlugin : public QQmlEngineExtensionPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlEngineExtensionInterface_iid)
+};
diff --git a/examples/quick/customitems/painteditem/TextBalloon/qmldir b/examples/quick/customitems/painteditem/TextBalloon/qmldir
new file mode 100644
index 0000000000..3b72e9a44d
--- /dev/null
+++ b/examples/quick/customitems/painteditem/TextBalloon/qmldir
@@ -0,0 +1,2 @@
+module TextBalloon
+plugin qmltextballoonplugin
diff --git a/examples/quick/customitems/painteditem/TextBalloon/textballoon.cpp b/examples/quick/customitems/painteditem/TextBalloon/textballoon.cpp
new file mode 100644
index 0000000000..e7fe911147
--- /dev/null
+++ b/examples/quick/customitems/painteditem/TextBalloon/textballoon.cpp
@@ -0,0 +1,56 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "textballoon.h"
+#include <QPainter>
+
+//! [0]
+TextBalloon::TextBalloon(QQuickItem *parent)
+ : QQuickPaintedItem(parent)
+ , rightAligned(false)
+{
+}
+//! [0]
+
+//! [1]
+void TextBalloon::paint(QPainter *painter)
+{
+ QBrush brush(QColor("#007430"));
+
+ painter->setBrush(brush);
+ painter->setPen(Qt::NoPen);
+ painter->setRenderHint(QPainter::Antialiasing);
+
+ QSizeF itemSize = size();
+ painter->drawRoundedRect(0, 0, itemSize.width(), itemSize.height() - 10, 10, 10);
+
+ if (rightAligned)
+ {
+ const QPointF points[3] = {
+ QPointF(itemSize.width() - 10.0, itemSize.height() - 10.0),
+ QPointF(itemSize.width() - 20.0, itemSize.height()),
+ QPointF(itemSize.width() - 30.0, itemSize.height() - 10.0),
+ };
+ painter->drawConvexPolygon(points, 3);
+ }
+ else
+ {
+ const QPointF points[3] = {
+ QPointF(10.0, itemSize.height() - 10.0),
+ QPointF(20.0, itemSize.height()),
+ QPointF(30.0, itemSize.height() - 10.0),
+ };
+ painter->drawConvexPolygon(points, 3);
+ }
+}
+//! [1]
+
+bool TextBalloon::isRightAligned() const
+{
+ return this->rightAligned;
+}
+
+void TextBalloon::setRightAligned(bool rightAligned)
+{
+ this->rightAligned = rightAligned;
+}
diff --git a/examples/quick/customitems/painteditem/TextBalloon/textballoon.h b/examples/quick/customitems/painteditem/TextBalloon/textballoon.h
new file mode 100644
index 0000000000..a52db11ce7
--- /dev/null
+++ b/examples/quick/customitems/painteditem/TextBalloon/textballoon.h
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef TEXTBALLOON_H
+#define TEXTBALLOON_H
+
+#include <QtQuick>
+
+//! [0]
+class TextBalloon : public QQuickPaintedItem
+{
+ Q_OBJECT
+ Q_PROPERTY(bool rightAligned READ isRightAligned WRITE setRightAligned NOTIFY rightAlignedChanged)
+ QML_ELEMENT
+
+ public:
+ TextBalloon(QQuickItem *parent = nullptr);
+ void paint(QPainter *painter) override;
+
+ bool isRightAligned() const;
+ void setRightAligned(bool rightAligned);
+
+ private:
+ bool rightAligned;
+
+ signals:
+ void rightAlignedChanged();
+};
+//! [0]
+
+#endif
diff --git a/examples/quick/customitems/painteditem/TextBalloon/textballoon.pro b/examples/quick/customitems/painteditem/TextBalloon/textballoon.pro
new file mode 100644
index 0000000000..7f7662b451
--- /dev/null
+++ b/examples/quick/customitems/painteditem/TextBalloon/textballoon.pro
@@ -0,0 +1,28 @@
+TEMPLATE = lib
+CONFIG += plugin qmltypes
+QT += qml quick
+
+QML_IMPORT_NAME = TextBalloon
+QML_IMPORT_MAJOR_VERSION = 1
+
+TARGET = qmltextballoonplugin
+
+HEADERS += \
+ plugin.h \
+ textballoon.h
+
+SOURCES += textballoon.cpp
+
+RESOURCES += textballoon.qrc
+
+qmldir_output.files = qmldir
+qmldir_output.path = $$OUT_PWD
+COPIES += qmldir_output
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/customitems/painteditem/$$QML_IMPORT_NAME
+qmldir_install.files = qmldir
+qmldir_install.path = $$[QT_INSTALL_EXAMPLES]/quick/customitems/painteditem/$$QML_IMPORT_NAME
+
+INSTALLS += qmldir_install target
+
+CONFIG += install_ok # Do not cargo-cult this!
diff --git a/examples/quick/customitems/painteditem/TextBalloon/textballoon.qrc b/examples/quick/customitems/painteditem/TextBalloon/textballoon.qrc
new file mode 100644
index 0000000000..42c42bd0a6
--- /dev/null
+++ b/examples/quick/customitems/painteditem/TextBalloon/textballoon.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/TextBalloon">
+ <file>qmldir</file>
+ </qresource>
+</RCC>
diff --git a/examples/quick/customitems/painteditem/TextBalloonPlugin/plugin.h b/examples/quick/customitems/painteditem/TextBalloonPlugin/plugin.h
deleted file mode 100644
index 4abf2cf3dc..0000000000
--- a/examples/quick/customitems/painteditem/TextBalloonPlugin/plugin.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QQmlEngineExtensionPlugin>
-
-#include "../textballoon.h"
-
-class TextBalloonPlugin : public QQmlEngineExtensionPlugin
-{
- Q_OBJECT
- Q_PLUGIN_METADATA(IID QQmlEngineExtensionInterface_iid)
-};
diff --git a/examples/quick/customitems/painteditem/TextBalloonPlugin/qmldir b/examples/quick/customitems/painteditem/TextBalloonPlugin/qmldir
deleted file mode 100644
index e8a08ae9d3..0000000000
--- a/examples/quick/customitems/painteditem/TextBalloonPlugin/qmldir
+++ /dev/null
@@ -1 +0,0 @@
-plugin qmltextballoonplugin
diff --git a/examples/quick/customitems/painteditem/doc/src/textballoons.qdoc b/examples/quick/customitems/painteditem/doc/src/textballoons.qdoc
index 4541ba0bd9..a0194759bd 100644
--- a/examples/quick/customitems/painteditem/doc/src/textballoons.qdoc
+++ b/examples/quick/customitems/painteditem/doc/src/textballoons.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Scene Graph - Painted Item
\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.
@@ -38,16 +15,14 @@
The QQuickPaintedItem class is a class derived from QQuickItem for implementing
custom QML Scene Graph items using the QPainter interfaces.
- The example consists of an item class, a plugin class and a QML file
- to use this plugin. The \c TextBalloon class represents the individual
- text balloons extending QQuickPaintedItem, the \c TextBalloonPlugin class
- represents the skeleton code for a \l {Qt Quick} plugin and the
- \c textballoons.qml file is used to load the plugin and display the text
- balloons.
+ The example consists of an item class and a QML file to use the item. The
+ \c TextBalloon class represents the individual text balloons extending
+ QQuickPaintedItem and the \c textballoons.qml file is used to load the module
+ containing the TextBalloon QML type and display the text balloons.
We will focus on the \c TextBalloon class first and continue with the
- \c textballoons.qml file. For an example on how to implement a \l {Qt Quick}
- plugin please look at \l{Chapter 6: Writing an Extension Plugin}
+ \c textballoons.qml file. For an example on how to implement a plugin for a
+ QML module please look at \l{Chapter 6: Writing an Extension Plugin}
{Writing an Extension Plugin}
\section1 TextBalloon Class Declaration
@@ -56,7 +31,7 @@
is the base class for all QPainter based items in the QML Scene Graph
framework.
- \snippet customitems/painteditem/textballoon.h 0
+ \snippet customitems/painteditem/TextBalloon/textballoon.h 0
To implement a QQuickPaintedItem you must implement QQuickPaintedIem's pure
virtual function \l {QQuickPaintedItem::}{paint()} which implements the
@@ -67,13 +42,13 @@
We have to be sure to initialize the rightAligned property for a
TextBalloon item.
- \snippet customitems/painteditem/textballoon.cpp 0
+ \snippet customitems/painteditem/TextBalloon/textballoon.cpp 0
Then we implement the \c paint() function which is automatically called by
the Scene Graph framework to paint the contents of the item. The function
paints the item in local coordinates.
- \snippet customitems/painteditem/textballoon.cpp 1
+ \snippet customitems/painteditem/TextBalloon/textballoon.cpp 1
We start with setting the pen and brush on the item to define the look of
the item. After that we start drawing. Note that the \l {QQuickPaintedItem::}{contentsBoundingRect()}
@@ -81,7 +56,7 @@
returned by the \l {QQuickPaintedItem::}{contentsBoundingRect()} function is the size
of the item as defined in the QML file.
- \section1 Textballoons.qml File
+ \section1 textballoons.qml File
The Interface consists of two main parts. The scrollable area with the
textballoons and the controls button to add new balloons.
diff --git a/examples/quick/customitems/painteditem/main.cpp b/examples/quick/customitems/painteditem/main.cpp
new file mode 100644
index 0000000000..698db7e67c
--- /dev/null
+++ b/examples/quick/customitems/painteditem/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(painteditem/textballoons)
diff --git a/examples/quick/customitems/painteditem/painteditem.pro b/examples/quick/customitems/painteditem/painteditem.pro
index 641833f3aa..7c26304b26 100644
--- a/examples/quick/customitems/painteditem/painteditem.pro
+++ b/examples/quick/customitems/painteditem/painteditem.pro
@@ -1,29 +1,2 @@
-TEMPLATE = lib
-CONFIG += plugin qmltypes
-QT += qml quick
-
-QML_IMPORT_NAME = TextBalloonPlugin
-QML_IMPORT_MAJOR_VERSION = 1
-
-TARGET = qmltextballoonplugin
-
-HEADERS += \
- TextBalloonPlugin/plugin.h \
- textballoon.h
-
-SOURCES += textballoon.cpp
-
-RESOURCES += painteditem.qrc
-
-DESTDIR = $$QML_IMPORT_NAME
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/customitems/painteditem/$$QML_IMPORT_NAME
-qmldir.files = $$QML_IMPORT_NAME/qmldir
-qmldir.path = $$[QT_INSTALL_EXAMPLES]/quick/customitems/painteditem/$$QML_IMPORT_NAME
-
-INSTALLS += qmldir target
-
-CONFIG += install_ok # Do not cargo-cult this!
-
-OTHER_FILES += \
- textballoons.qml
+TEMPLATE = subdirs
+SUBDIRS = TextBalloon/textballoon.pro textballoonuser.pro
diff --git a/examples/quick/customitems/painteditem/painteditem.qrc b/examples/quick/customitems/painteditem/painteditem.qrc
index c240be02a1..95305efaca 100644
--- a/examples/quick/customitems/painteditem/painteditem.qrc
+++ b/examples/quick/customitems/painteditem/painteditem.qrc
@@ -1,6 +1,5 @@
<RCC>
- <qresource prefix="/painteditem">
- <file>textballoon.h</file>
+ <qresource prefix="/qt/qml/painteditem">
<file>textballoons.qml</file>
</qresource>
</RCC>
diff --git a/examples/quick/customitems/painteditem/textballoon.cpp b/examples/quick/customitems/painteditem/textballoon.cpp
deleted file mode 100644
index de34d67103..0000000000
--- a/examples/quick/customitems/painteditem/textballoon.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "textballoon.h"
-#include <QPainter>
-
-//! [0]
-TextBalloon::TextBalloon(QQuickItem *parent)
- : QQuickPaintedItem(parent)
- , rightAligned(false)
-{
-}
-//! [0]
-
-//! [1]
-void TextBalloon::paint(QPainter *painter)
-{
- QBrush brush(QColor("#007430"));
-
- painter->setBrush(brush);
- painter->setPen(Qt::NoPen);
- painter->setRenderHint(QPainter::Antialiasing);
-
- QSizeF itemSize = size();
- painter->drawRoundedRect(0, 0, itemSize.width(), itemSize.height() - 10, 10, 10);
-
- if (rightAligned)
- {
- const QPointF points[3] = {
- QPointF(itemSize.width() - 10.0, itemSize.height() - 10.0),
- QPointF(itemSize.width() - 20.0, itemSize.height()),
- QPointF(itemSize.width() - 30.0, itemSize.height() - 10.0),
- };
- painter->drawConvexPolygon(points, 3);
- }
- else
- {
- const QPointF points[3] = {
- QPointF(10.0, itemSize.height() - 10.0),
- QPointF(20.0, itemSize.height()),
- QPointF(30.0, itemSize.height() - 10.0),
- };
- painter->drawConvexPolygon(points, 3);
- }
-}
-//! [1]
-
-bool TextBalloon::isRightAligned()
-{
- return this->rightAligned;
-}
-
-void TextBalloon::setRightAligned(bool rightAligned)
-{
- this->rightAligned = rightAligned;
-}
diff --git a/examples/quick/customitems/painteditem/textballoon.h b/examples/quick/customitems/painteditem/textballoon.h
deleted file mode 100644
index eb72804602..0000000000
--- a/examples/quick/customitems/painteditem/textballoon.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef TEXTBALLOON_H
-#define TEXTBALLOON_H
-
-#include <QtQuick>
-
-//! [0]
-class TextBalloon : public QQuickPaintedItem
-{
- Q_OBJECT
- Q_PROPERTY(bool rightAligned READ isRightAligned WRITE setRightAligned NOTIFY rightAlignedChanged)
- QML_ELEMENT
-
- public:
- TextBalloon(QQuickItem *parent = 0);
- void paint(QPainter *painter);
-
- bool isRightAligned();
- void setRightAligned(bool rightAligned);
-
- private:
- bool rightAligned;
-
- signals:
- void rightAlignedChanged();
-};
-//! [0]
-
-#endif
diff --git a/examples/quick/customitems/painteditem/textballoons.qml b/examples/quick/customitems/painteditem/textballoons.qml
index 2c749bb440..1ef491f061 100644
--- a/examples/quick/customitems/painteditem/textballoons.qml
+++ b/examples/quick/customitems/painteditem/textballoons.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "TextBalloonPlugin" 1.0
+import QtQuick
+import TextBalloon
Item {
height: 480
@@ -67,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
@@ -97,7 +50,7 @@ Item {
Text {
anchors.centerIn: parent
- text: "Add another balloon"
+ text: qsTr("Add another balloon")
}
MouseArea {
diff --git a/examples/quick/customitems/painteditem/textballoonuser.pro b/examples/quick/customitems/painteditem/textballoonuser.pro
new file mode 100644
index 0000000000..7504542f4c
--- /dev/null
+++ b/examples/quick/customitems/painteditem/textballoonuser.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+
+QT += qml quick
+
+TARGET = painteditem
+SOURCES += main.cpp
+RESOURCES += painteditem.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/customitems/painteditem
+INSTALLS += target
diff --git a/examples/quick/customitems/progressbar/content/ProgressBar.qml b/examples/quick/customitems/progressbar/content/ProgressBar.qml
deleted file mode 100644
index 594cccfe75..0000000000
--- a/examples/quick/customitems/progressbar/content/ProgressBar.qml
+++ /dev/null
@@ -1,93 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Item {
- id: progressbar
-
- property int minimum: 0
- property int maximum: 100
- property int value: 0
- property alias color: gradient1.color
- property alias secondColor: gradient2.color
-
- width: 250; height: 23
- clip: true
-
- BorderImage {
- source: "background.png"
- width: parent.width; height: parent.height
- border { left: 4; top: 4; right: 4; bottom: 4 }
- }
-
- Rectangle {
- id: highlight
-
- property int widthDest: ((progressbar.width * (value - minimum)) / (maximum - minimum) - 6)
-
- width: highlight.widthDest
- Behavior on width { SmoothedAnimation { velocity: 1200 } }
-
- anchors { left: parent.left; top: parent.top; bottom: parent.bottom; margins: 3 }
- radius: 1
- gradient: Gradient {
- GradientStop { id: gradient1; position: 0.0 }
- GradientStop { id: gradient2; position: 1.0 }
- }
-
- }
- Text {
- anchors { right: highlight.right; rightMargin: 6; verticalCenter: parent.verticalCenter }
- color: "white"
- font.bold: true
- text: Math.floor((value - minimum) / (maximum - minimum) * 100) + '%'
- }
-}
diff --git a/examples/quick/customitems/progressbar/content/background.png b/examples/quick/customitems/progressbar/content/background.png
deleted file mode 100644
index 5c316bc03e..0000000000
--- a/examples/quick/customitems/progressbar/content/background.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/progressbar/main.qml b/examples/quick/customitems/progressbar/main.qml
deleted file mode 100644
index 2dd67621a8..0000000000
--- a/examples/quick/customitems/progressbar/main.qml
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "content"
-
-Rectangle {
- id: main
-
- width: 600; height: 405
- color: "#edecec"
-
- Flickable {
- anchors.fill: parent
- contentHeight: column.height + 20
-
- Column {
- id: column
- x: 10; y: 10
- spacing: 10
-
- Repeater {
- model: 25
-
- ProgressBar {
- property int r: Math.floor(Math.random() * 5000 + 1000)
- width: main.width - 20
-
- NumberAnimation on value { duration: r; from: 0; to: 100; loops: Animation.Infinite }
- ColorAnimation on color { duration: r; from: "lightsteelblue"; to: "thistle"; loops: Animation.Infinite }
- ColorAnimation on secondColor { duration: r; from: "steelblue"; to: "#CD96CD"; loops: Animation.Infinite }
- }
- }
- }
- }
-}
diff --git a/examples/quick/customitems/scrollbar/ScrollBar.qml b/examples/quick/customitems/scrollbar/ScrollBar.qml
deleted file mode 100644
index f2e46c5681..0000000000
--- a/examples/quick/customitems/scrollbar/ScrollBar.qml
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Item {
- id: scrollBar
-
- // The properties that define the scrollbar's state.
- // position and pageSize are in the range 0.0 - 1.0. They are relative to the
- // height of the page, i.e. a pageSize of 0.5 means that you can see 50%
- // of the height of the view.
- // orientation can be either Qt.Vertical or Qt.Horizontal
- property real position
- property real pageSize
- property variant orientation : Qt.Vertical
-
- // A light, semi-transparent background
- Rectangle {
- id: background
- anchors.fill: parent
- radius: orientation == Qt.Vertical ? (width/2 - 1) : (height/2 - 1)
- color: "white"
- opacity: 0.3
- }
-
- // Size the bar to the required size, depending upon the orientation.
- Rectangle {
- x: orientation == Qt.Vertical ? 1 : (scrollBar.position * (scrollBar.width-2) + 1)
- y: orientation == Qt.Vertical ? (scrollBar.position * (scrollBar.height-2) + 1) : 1
- width: orientation == Qt.Vertical ? (parent.width-2) : (scrollBar.pageSize * (scrollBar.width-2))
- height: orientation == Qt.Vertical ? (scrollBar.pageSize * (scrollBar.height-2)) : (parent.height-2)
- radius: orientation == Qt.Vertical ? (width/2 - 1) : (height/2 - 1)
- color: "black"
- opacity: 0.7
- }
-}
diff --git a/examples/quick/customitems/scrollbar/doc/images/qml-scrollbar-example.png b/examples/quick/customitems/scrollbar/doc/images/qml-scrollbar-example.png
deleted file mode 100644
index 2c80421b06..0000000000
--- a/examples/quick/customitems/scrollbar/doc/images/qml-scrollbar-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/scrollbar/doc/src/scrollbar.qdoc b/examples/quick/customitems/scrollbar/doc/src/scrollbar.qdoc
deleted file mode 100644
index 37852222c0..0000000000
--- a/examples/quick/customitems/scrollbar/doc/src/scrollbar.qdoc
+++ /dev/null
@@ -1,38 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
- \title UI Components: Scroll Bar Example
- \example customitems/scrollbar
- \brief The Scroll Bar Example shows how to use scroll bars on a flickable element.
-
- This example shows how to create scroll bars for a \l Flickable element
- using the \l {Flickable::visibleArea.xPosition}{Flickable::visibleArea}
- properties.
-
- \image qml-scrollbar-example.png
-*/
-
diff --git a/examples/quick/customitems/scrollbar/main.cpp b/examples/quick/customitems/scrollbar/main.cpp
deleted file mode 100644
index 579db41efd..0000000000
--- a/examples/quick/customitems/scrollbar/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(main)
diff --git a/examples/quick/customitems/scrollbar/main.qml b/examples/quick/customitems/scrollbar/main.qml
deleted file mode 100644
index 9248e44a42..0000000000
--- a/examples/quick/customitems/scrollbar/main.qml
+++ /dev/null
@@ -1,103 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Rectangle {
- width: 640
- height: 480
-
- // Create a flickable to view a large image.
- Flickable {
- id: view
- anchors.fill: parent
- contentWidth: picture.width
- contentHeight: picture.height
-
- Image {
- id: picture
- source: "pics/niagara_falls.jpg"
- asynchronous: true
- }
-
- // Only show the scrollbars when the view is moving.
- states: State {
- name: "ShowBars"
- when: view.movingVertically || view.movingHorizontally
- PropertyChanges { target: verticalScrollBar; opacity: 1 }
- PropertyChanges { target: horizontalScrollBar; opacity: 1 }
- }
-
- transitions: Transition {
- NumberAnimation { properties: "opacity"; duration: 400 }
- }
- }
-
- // Attach scrollbars to the right and bottom edges of the view.
- ScrollBar {
- id: verticalScrollBar
- width: 12; height: view.height-12
- anchors.right: view.right
- opacity: 0
- orientation: Qt.Vertical
- position: view.visibleArea.yPosition
- pageSize: view.visibleArea.heightRatio
- }
-
- ScrollBar {
- id: horizontalScrollBar
- width: view.width-12; height: 12
- anchors.bottom: view.bottom
- opacity: 0
- orientation: Qt.Horizontal
- position: view.visibleArea.xPosition
- pageSize: view.visibleArea.widthRatio
- }
-}
diff --git a/examples/quick/customitems/scrollbar/pics/niagara_falls.jpg b/examples/quick/customitems/scrollbar/pics/niagara_falls.jpg
deleted file mode 100644
index e625c0d3e6..0000000000
--- a/examples/quick/customitems/scrollbar/pics/niagara_falls.jpg
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/scrollbar/scrollbar.pro b/examples/quick/customitems/scrollbar/scrollbar.pro
deleted file mode 100644
index 7e6ea3c2d6..0000000000
--- a/examples/quick/customitems/scrollbar/scrollbar.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-
-RESOURCES += scrollbar.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/customitems/scrollbar
-INSTALLS += target
diff --git a/examples/quick/customitems/scrollbar/scrollbar.qmlproject b/examples/quick/customitems/scrollbar/scrollbar.qmlproject
deleted file mode 100644
index e5a8bf02ca..0000000000
--- a/examples/quick/customitems/scrollbar/scrollbar.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/customitems/scrollbar/scrollbar.qrc b/examples/quick/customitems/scrollbar/scrollbar.qrc
deleted file mode 100644
index b1ba5f9211..0000000000
--- a/examples/quick/customitems/scrollbar/scrollbar.qrc
+++ /dev/null
@@ -1,7 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>main.qml</file>
- <file>ScrollBar.qml</file>
- <file>pics/niagara_falls.jpg</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/customitems/searchbox/SearchBox.qml b/examples/quick/customitems/searchbox/SearchBox.qml
deleted file mode 100644
index 13927e0d6f..0000000000
--- a/examples/quick/customitems/searchbox/SearchBox.qml
+++ /dev/null
@@ -1,119 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-FocusScope {
- id: focusScope
- width: 250; height: 28
-
- BorderImage {
- source: "images/lineedit-bg.png"
- width: parent.width; height: parent.height
- border { left: 4; top: 4; right: 4; bottom: 4 }
- }
-
- BorderImage {
- source: "images/lineedit-bg-focus.png"
- width: parent.width; height: parent.height
- border { left: 4; top: 4; right: 4; bottom: 4 }
- visible: parent.activeFocus ? true : false
- }
-
- Text {
- id: typeSomething
- anchors.fill: parent; anchors.leftMargin: 8
- verticalAlignment: Text.AlignVCenter
- text: "Type something..."
- color: "gray"
- font.italic: true
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: { focusScope.focus = true; Qt.inputMethod.show(); }
- }
-
- TextInput {
- id: textInput
- anchors { left: parent.left; leftMargin: 8; right: clear.left; rightMargin: 8; verticalCenter: parent.verticalCenter }
- focus: true
- selectByMouse: true
- }
-
- Image {
- id: clear
- anchors { right: parent.right; rightMargin: 8; verticalCenter: parent.verticalCenter }
- source: "images/clear.png"
- opacity: 0
-
- MouseArea {
- anchors.fill: parent
- onClicked: { textInput.text = ''; focusScope.focus = true; textInput.openSoftwareInputPanel(); }
- }
- }
-
- states: State {
- name: "hasText"; when: textInput.text != ''
- PropertyChanges { target: typeSomething; opacity: 0 }
- PropertyChanges { target: clear; opacity: 1 }
- }
-
- transitions: [
- Transition {
- from: ""; to: "hasText"
- NumberAnimation { exclude: typeSomething; properties: "opacity" }
- },
- Transition {
- from: "hasText"; to: ""
- NumberAnimation { properties: "opacity" }
- }
- ]
-}
diff --git a/examples/quick/customitems/searchbox/images/clear.png b/examples/quick/customitems/searchbox/images/clear.png
deleted file mode 100644
index c20a9cfba5..0000000000
--- a/examples/quick/customitems/searchbox/images/clear.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/searchbox/images/lineedit-bg-focus.png b/examples/quick/customitems/searchbox/images/lineedit-bg-focus.png
deleted file mode 100644
index c8f2722298..0000000000
--- a/examples/quick/customitems/searchbox/images/lineedit-bg-focus.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/searchbox/images/lineedit-bg.png b/examples/quick/customitems/searchbox/images/lineedit-bg.png
deleted file mode 100644
index 5c316bc03e..0000000000
--- a/examples/quick/customitems/searchbox/images/lineedit-bg.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/searchbox/main.cpp b/examples/quick/customitems/searchbox/main.cpp
deleted file mode 100644
index 579db41efd..0000000000
--- a/examples/quick/customitems/searchbox/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(main)
diff --git a/examples/quick/customitems/searchbox/main.qml b/examples/quick/customitems/searchbox/main.qml
deleted file mode 100644
index bc6900ba7e..0000000000
--- a/examples/quick/customitems/searchbox/main.qml
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Rectangle {
- id: page
- width: 500; height: 250
- color: "#edecec"
-
- MouseArea {
- anchors.fill: parent
- onClicked: page.focus = false;
- }
- Column {
- anchors { horizontalCenter: parent.horizontalCenter; verticalCenter: parent.verticalCenter }
- spacing: 10
-
- SearchBox { id: search1; KeyNavigation.tab: search2; KeyNavigation.backtab: search3; focus: true }
- SearchBox { id: search2; KeyNavigation.tab: search3; KeyNavigation.backtab: search1 }
- SearchBox { id: search3; KeyNavigation.tab: search1; KeyNavigation.backtab: search2 }
- }
-}
diff --git a/examples/quick/customitems/searchbox/searchbox.pro b/examples/quick/customitems/searchbox/searchbox.pro
deleted file mode 100644
index c22fc117aa..0000000000
--- a/examples/quick/customitems/searchbox/searchbox.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-
-RESOURCES += searchbox.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/customitems/searchbox
-INSTALLS += target
diff --git a/examples/quick/customitems/searchbox/searchbox.qmlproject b/examples/quick/customitems/searchbox/searchbox.qmlproject
deleted file mode 100644
index e5a8bf02ca..0000000000
--- a/examples/quick/customitems/searchbox/searchbox.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/customitems/searchbox/searchbox.qrc b/examples/quick/customitems/searchbox/searchbox.qrc
deleted file mode 100644
index f7a8602c9a..0000000000
--- a/examples/quick/customitems/searchbox/searchbox.qrc
+++ /dev/null
@@ -1,9 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>main.qml</file>
- <file>SearchBox.qml</file>
- <file>images/clear.png</file>
- <file>images/lineedit-bg-focus.png</file>
- <file>images/lineedit-bg.png</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/customitems/slideswitch/content/Switch.qml b/examples/quick/customitems/slideswitch/content/Switch.qml
deleted file mode 100644
index 72eb13e1e3..0000000000
--- a/examples/quick/customitems/slideswitch/content/Switch.qml
+++ /dev/null
@@ -1,127 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//![0]
-import QtQuick 2.0
-
-Item {
- id: toggleswitch
- width: background.width; height: background.height
-
-//![1]
- property bool on: false
-//![1]
-
-//![2]
- function toggle() {
- if (toggleswitch.state == "on")
- toggleswitch.state = "off";
- else
- toggleswitch.state = "on";
- }
-//![2]
-
-//![3]
- function releaseSwitch() {
- if (knob.x == 1) {
- if (toggleswitch.state == "off") return;
- }
- if (knob.x == 78) {
- if (toggleswitch.state == "on") return;
- }
- toggle();
- }
-//![3]
-
-//![4]
- Image {
- id: background
- source: "background.png"
- MouseArea { anchors.fill: parent; onClicked: toggle() }
- }
-//![4]
-
-//![5]
- Image {
- id: knob
- x: 1; y: 2
- source: "knob.png"
-
- MouseArea {
- anchors.fill: parent
- drag.target: knob; drag.axis: Drag.XAxis; drag.minimumX: 1; drag.maximumX: 78
- onClicked: toggle()
- onReleased: releaseSwitch()
- }
- }
-//![5]
-
-//![6]
- states: [
- State {
- name: "on"
- PropertyChanges { target: knob; x: 78 }
- PropertyChanges { target: toggleswitch; on: true }
- },
- State {
- name: "off"
- PropertyChanges { target: knob; x: 1 }
- PropertyChanges { target: toggleswitch; on: false }
- }
- ]
-//![6]
-
-//![7]
- transitions: Transition {
- NumberAnimation { properties: "x"; easing.type: Easing.InOutQuad; duration: 200 }
- }
-//![7]
-}
-//![0]
diff --git a/examples/quick/customitems/slideswitch/content/background.png b/examples/quick/customitems/slideswitch/content/background.png
deleted file mode 100644
index d736815870..0000000000
--- a/examples/quick/customitems/slideswitch/content/background.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/slideswitch/content/background.svg b/examples/quick/customitems/slideswitch/content/background.svg
deleted file mode 100644
index f920d3e47a..0000000000
--- a/examples/quick/customitems/slideswitch/content/background.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
- <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
- xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
- x="0px" y="0px" width="130px" height="56px" viewBox="0 0 130 56" enable-background="new 0 0 130 56" xml:space="preserve">
-<defs>
-</defs>
-<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-37.5005" y1="-66" x2="-37.5005" y2="-121.9985" gradientTransform="matrix(1 0 0 -1 102.5 -66)">
- <stop offset="0.0056" style="stop-color:#000000"/>
- <stop offset="1" style="stop-color:#EAECEF"/>
-</linearGradient>
-<path fill="url(#SVGID_1_)" d="M101.998,55.998H28c-15.439,0-28-12.562-28-28C0,12.56,12.561,0,28,0h73.998
- c15.439,0,28,12.559,28,27.998C129.998,43.438,117.438,55.998,101.998,55.998L101.998,55.998z"/>
-<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-5.5" y1="-132.1338" x2="-69.5002" y2="-55.8613" gradientTransform="matrix(1 0 0 -1 102.5 -66)">
- <stop offset="0.0056" style="stop-color:#000000"/>
- <stop offset="1" style="stop-color:#828385"/>
-</linearGradient>
-<path fill="url(#SVGID_2_)" d="M127.999,27.998c0,14.359-11.642,26-26,26h-74c-14.359,0-26-11.641-26-26l0,0
- c0-14.359,11.641-26,26-26h74C116.357,1.998,127.999,13.639,127.999,27.998L127.999,27.998z"/>
-</svg>
diff --git a/examples/quick/customitems/slideswitch/content/knob.png b/examples/quick/customitems/slideswitch/content/knob.png
deleted file mode 100644
index ee0a436f84..0000000000
--- a/examples/quick/customitems/slideswitch/content/knob.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/slideswitch/content/knob.svg b/examples/quick/customitems/slideswitch/content/knob.svg
deleted file mode 100644
index fb6933718e..0000000000
--- a/examples/quick/customitems/slideswitch/content/knob.svg
+++ /dev/null
@@ -1,867 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://web.resource.org/cc/"
- 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"
- x="0px"
- y="0px"
- width="52px"
- height="52px"
- viewBox="0 0 52 52"
- enable-background="new 0 0 52 52"
- xml:space="preserve"
- id="svg3883"
- sodipodi:version="0.32"
- inkscape:version="0.44.1"
- sodipodi:docname="knob_on.svg"
- sodipodi:docbase="/local/axel/embeddedwidgets/embeddedstories/skins/svgslideswitch/MetallicBrush"><metadata
- id="metadata4200"><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><sodipodi:namedview
- inkscape:window-height="640"
- inkscape:window-width="937"
- 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="8.3653846"
- inkscape:cx="26.000002"
- inkscape:cy="26"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:current-layer="svg3883" />
-<defs
- id="defs3885">
-</defs>
-<linearGradient
- id="SVGID_1_"
- gradientUnits="userSpaceOnUse"
- x1="-59.7866"
- y1="-115.917"
- x2="-93.2123"
- y2="-76.0818"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#000000"
- id="stop3888" />
- <stop
- offset="1"
- style="stop-color:#EAECEF"
- id="stop3890" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="26"
- id="circle3892"
- style="fill:url(#SVGID_1_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="26"
- sodipodi:ry="26"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-<linearGradient
- id="SVGID_2_"
- gradientUnits="userSpaceOnUse"
- x1="-100.5"
- y1="-96"
- x2="-52.5"
- y2="-96"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#8AADCE"
- id="stop3895" />
- <stop
- offset="0.5"
- style="stop-color:#EAECEF"
- id="stop3897" />
- <stop
- offset="0.6043"
- style="stop-color:#E7EAED"
- id="stop3899" />
- <stop
- offset="0.6751"
- style="stop-color:#DEE4E7"
- id="stop3901" />
- <stop
- offset="0.7358"
- style="stop-color:#CFD9DD"
- id="stop3903" />
- <stop
- offset="0.791"
- style="stop-color:#B9CACF"
- id="stop3905" />
- <stop
- offset="0.8425"
- style="stop-color:#9EB6BD"
- id="stop3907" />
- <stop
- offset="0.891"
- style="stop-color:#7B9EA7"
- id="stop3909" />
- <stop
- offset="0.9374"
- style="stop-color:#53828C"
- id="stop3911" />
- <stop
- offset="0.9809"
- style="stop-color:#25626E"
- id="stop3913" />
- <stop
- offset="1"
- style="stop-color:#0E525F"
- id="stop3915" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="24"
- id="circle3917"
- style="fill:url(#SVGID_2_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="24"
- sodipodi:ry="24"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-<linearGradient
- id="SVGID_3_"
- gradientUnits="userSpaceOnUse"
- x1="-98.6328"
- y1="-96"
- x2="-54.3672"
- y2="-96"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#8AADCE"
- id="stop3920" />
- <stop
- offset="0.073"
- style="stop-color:#8FAECB"
- id="stop3922" />
- <stop
- offset="0.5"
- style="stop-color:#EAECEF"
- id="stop3924" />
- <stop
- offset="0.5902"
- style="stop-color:#E7E9ED"
- id="stop3926" />
- <stop
- offset="0.618"
- style="stop-color:#E4E7EB"
- id="stop3928" />
- <stop
- offset="0.6697"
- style="stop-color:#E0E4E9"
- id="stop3930" />
- <stop
- offset="0.7211"
- style="stop-color:#D4DCE1"
- id="stop3932" />
- <stop
- offset="0.7722"
- style="stop-color:#C0CFD5"
- id="stop3934" />
- <stop
- offset="0.809"
- style="stop-color:#ADC2C9"
- id="stop3936" />
- <stop
- offset="1"
- style="stop-color:#0E525F"
- id="stop3938" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="22.132999"
- id="circle3940"
- style="fill:url(#SVGID_3_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="22.132999"
- sodipodi:ry="22.132999"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-<linearGradient
- id="SVGID_4_"
- gradientUnits="userSpaceOnUse"
- x1="-96.7671"
- y1="-96"
- x2="-56.2324"
- y2="-96"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#8AADCE"
- id="stop3943" />
- <stop
- offset="0.073"
- style="stop-color:#86A7C4"
- id="stop3945" />
- <stop
- offset="0.5"
- style="stop-color:#EAECEF"
- id="stop3947" />
- <stop
- offset="0.577"
- style="stop-color:#E7EAED"
- id="stop3949" />
- <stop
- offset="0.618"
- style="stop-color:#E1E6EA"
- id="stop3951" />
- <stop
- offset="0.6697"
- style="stop-color:#DDE3E8"
- id="stop3953" />
- <stop
- offset="0.7211"
- style="stop-color:#D1DBE1"
- id="stop3955" />
- <stop
- offset="0.7722"
- style="stop-color:#BDCDD5"
- id="stop3957" />
- <stop
- offset="0.809"
- style="stop-color:#AAC0CA"
- id="stop3959" />
- <stop
- offset="1"
- style="stop-color:#0E525F"
- id="stop3961" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="20.267"
- id="circle3963"
- style="fill:url(#SVGID_4_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="20.267"
- sodipodi:ry="20.267"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-<linearGradient
- id="SVGID_5_"
- gradientUnits="userSpaceOnUse"
- x1="-94.8999"
- y1="-96"
- x2="-58.0996"
- y2="-96"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#8AADCE"
- id="stop3966" />
- <stop
- offset="0.073"
- style="stop-color:#7E9FBC"
- id="stop3968" />
- <stop
- offset="0.5"
- style="stop-color:#EAECEF"
- id="stop3970" />
- <stop
- offset="0.5709"
- style="stop-color:#E6E9ED"
- id="stop3972" />
- <stop
- offset="0.618"
- style="stop-color:#DFE4E9"
- id="stop3974" />
- <stop
- offset="0.6687"
- style="stop-color:#DBE1E7"
- id="stop3976" />
- <stop
- offset="0.7193"
- style="stop-color:#CFD9E0"
- id="stop3978" />
- <stop
- offset="0.7695"
- style="stop-color:#BBCCD6"
- id="stop3980" />
- <stop
- offset="0.809"
- style="stop-color:#A6BECA"
- id="stop3982" />
- <stop
- offset="1"
- style="stop-color:#0E525F"
- id="stop3984" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="18.4"
- id="circle3986"
- style="fill:url(#SVGID_5_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="18.4"
- sodipodi:ry="18.4"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-<linearGradient
- id="SVGID_6_"
- gradientUnits="userSpaceOnUse"
- x1="-93.0332"
- y1="-96"
- x2="-59.9668"
- y2="-96"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#8AADCE"
- id="stop3989" />
- <stop
- offset="0.073"
- style="stop-color:#7697B4"
- id="stop3991" />
- <stop
- offset="0.5"
- style="stop-color:#EAECEF"
- id="stop3993" />
- <stop
- offset="0.5636"
- style="stop-color:#E6E9ED"
- id="stop3995" />
- <stop
- offset="0.618"
- style="stop-color:#DCE2E8"
- id="stop3997" />
- <stop
- offset="0.6687"
- style="stop-color:#D8DFE6"
- id="stop3999" />
- <stop
- offset="0.7193"
- style="stop-color:#CCD7E0"
- id="stop4001" />
- <stop
- offset="0.7695"
- style="stop-color:#B8CAD5"
- id="stop4003" />
- <stop
- offset="0.809"
- style="stop-color:#A3BCCA"
- id="stop4005" />
- <stop
- offset="1"
- style="stop-color:#0E525F"
- id="stop4007" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="16.533001"
- id="circle4009"
- style="fill:url(#SVGID_6_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="16.533001"
- sodipodi:ry="16.533001"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-<linearGradient
- id="SVGID_7_"
- gradientUnits="userSpaceOnUse"
- x1="-91.167"
- y1="-96"
- x2="-61.833"
- y2="-96"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#8AADCE"
- id="stop4012" />
- <stop
- offset="0.073"
- style="stop-color:#6D8FAD"
- id="stop4014" />
- <stop
- offset="0.5"
- style="stop-color:#EAECEF"
- id="stop4016" />
- <stop
- offset="0.5605"
- style="stop-color:#E5E8EC"
- id="stop4018" />
- <stop
- offset="0.618"
- style="stop-color:#DAE1E7"
- id="stop4020" />
- <stop
- offset="0.6679"
- style="stop-color:#D6DEE5"
- id="stop4022" />
- <stop
- offset="0.7175"
- style="stop-color:#CAD6DF"
- id="stop4024" />
- <stop
- offset="0.7669"
- style="stop-color:#B6C9D6"
- id="stop4026" />
- <stop
- offset="0.809"
- style="stop-color:#9FBACB"
- id="stop4028" />
- <stop
- offset="1"
- style="stop-color:#0E525F"
- id="stop4030" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="14.667"
- id="circle4032"
- style="fill:url(#SVGID_7_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="14.667"
- sodipodi:ry="14.667"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-<linearGradient
- id="SVGID_8_"
- gradientUnits="userSpaceOnUse"
- x1="-89.2998"
- y1="-96"
- x2="-63.7002"
- y2="-96"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#8AADCE"
- id="stop4035" />
- <stop
- offset="0.073"
- style="stop-color:#6587A5"
- id="stop4037" />
- <stop
- offset="0.5"
- style="stop-color:#EAECEF"
- id="stop4039" />
- <stop
- offset="0.5588"
- style="stop-color:#E4E8EC"
- id="stop4041" />
- <stop
- offset="0.618"
- style="stop-color:#D8DFE7"
- id="stop4043" />
- <stop
- offset="0.6675"
- style="stop-color:#D4DCE5"
- id="stop4045" />
- <stop
- offset="0.7167"
- style="stop-color:#C8D5E0"
- id="stop4047" />
- <stop
- offset="0.7657"
- style="stop-color:#B4C8D6"
- id="stop4049" />
- <stop
- offset="0.809"
- style="stop-color:#9CB8CB"
- id="stop4051" />
- <stop
- offset="1"
- style="stop-color:#0E525F"
- id="stop4053" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="12.8"
- id="circle4055"
- style="fill:url(#SVGID_8_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="12.8"
- sodipodi:ry="12.8"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-<linearGradient
- id="SVGID_9_"
- gradientUnits="userSpaceOnUse"
- x1="-87.4331"
- y1="-96"
- x2="-65.5664"
- y2="-96"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#8AADCE"
- id="stop4058" />
- <stop
- offset="0.073"
- style="stop-color:#5D809D"
- id="stop4060" />
- <stop
- offset="0.5"
- style="stop-color:#EAECEF"
- id="stop4062" />
- <stop
- offset="0.5567"
- style="stop-color:#E3E7EC"
- id="stop4064" />
- <stop
- offset="0.618"
- style="stop-color:#D5DDE6"
- id="stop4066" />
- <stop
- offset="0.6671"
- style="stop-color:#D1DAE4"
- id="stop4068" />
- <stop
- offset="0.7159"
- style="stop-color:#C5D3DF"
- id="stop4070" />
- <stop
- offset="0.7645"
- style="stop-color:#B1C6D6"
- id="stop4072" />
- <stop
- offset="0.809"
- style="stop-color:#98B5CB"
- id="stop4074" />
- <stop
- offset="1"
- style="stop-color:#0E525F"
- id="stop4076" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="10.933"
- id="circle4078"
- style="fill:url(#SVGID_9_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="10.933"
- sodipodi:ry="10.933"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-<linearGradient
- id="SVGID_10_"
- gradientUnits="userSpaceOnUse"
- x1="-85.5659"
- y1="-96"
- x2="-67.4336"
- y2="-96"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#8AADCE"
- id="stop4081" />
- <stop
- offset="0.073"
- style="stop-color:#547896"
- id="stop4083" />
- <stop
- offset="0.5"
- style="stop-color:#EAECEF"
- id="stop4085" />
- <stop
- offset="0.5588"
- style="stop-color:#E1E6EB"
- id="stop4087" />
- <stop
- offset="0.618"
- style="stop-color:#D3DCE5"
- id="stop4089" />
- <stop
- offset="0.6663"
- style="stop-color:#CFD9E3"
- id="stop4091" />
- <stop
- offset="0.7143"
- style="stop-color:#C3D2DF"
- id="stop4093" />
- <stop
- offset="0.7621"
- style="stop-color:#AFC5D7"
- id="stop4095" />
- <stop
- offset="0.809"
- style="stop-color:#94B3CC"
- id="stop4097" />
- <stop
- offset="1"
- style="stop-color:#0E525F"
- id="stop4099" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="9.066"
- id="circle4101"
- style="fill:url(#SVGID_10_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="9.066"
- sodipodi:ry="9.066"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-<linearGradient
- id="SVGID_11_"
- gradientUnits="userSpaceOnUse"
- x1="-83.7002"
- y1="-96"
- x2="-69.2998"
- y2="-96"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#8AADCE"
- id="stop4104" />
- <stop
- offset="0.073"
- style="stop-color:#4C708E"
- id="stop4106" />
- <stop
- offset="0.5"
- style="stop-color:#EAECEF"
- id="stop4108" />
- <stop
- offset="0.5625"
- style="stop-color:#DEE4EA"
- id="stop4110" />
- <stop
- offset="0.618"
- style="stop-color:#D0DAE4"
- id="stop4112" />
- <stop
- offset="0.6663"
- style="stop-color:#CCD7E2"
- id="stop4114" />
- <stop
- offset="0.7143"
- style="stop-color:#C0D0DE"
- id="stop4116" />
- <stop
- offset="0.7621"
- style="stop-color:#ACC3D6"
- id="stop4118" />
- <stop
- offset="0.809"
- style="stop-color:#91B1CC"
- id="stop4120" />
- <stop
- offset="1"
- style="stop-color:#0E525F"
- id="stop4122" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="7.1999998"
- id="circle4124"
- style="fill:url(#SVGID_11_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="7.1999998"
- sodipodi:ry="7.1999998"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-<linearGradient
- id="SVGID_12_"
- gradientUnits="userSpaceOnUse"
- x1="-81.833"
- y1="-96"
- x2="-71.167"
- y2="-96"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#8AADCE"
- id="stop4127" />
- <stop
- offset="0.073"
- style="stop-color:#446986"
- id="stop4129" />
- <stop
- offset="0.5"
- style="stop-color:#EAECEF"
- id="stop4131" />
- <stop
- offset="0.5757"
- style="stop-color:#D9E0E8"
- id="stop4133" />
- <stop
- offset="0.618"
- style="stop-color:#CED8E3"
- id="stop4135" />
- <stop
- offset="0.6655"
- style="stop-color:#CAD5E2"
- id="stop4137" />
- <stop
- offset="0.7129"
- style="stop-color:#BECEDD"
- id="stop4139" />
- <stop
- offset="0.7601"
- style="stop-color:#AAC1D6"
- id="stop4141" />
- <stop
- offset="0.807"
- style="stop-color:#8EB0CC"
- id="stop4143" />
- <stop
- offset="0.809"
- style="stop-color:#8DAFCC"
- id="stop4145" />
- <stop
- offset="1"
- style="stop-color:#0E525F"
- id="stop4147" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="5.3330002"
- id="circle4149"
- style="fill:url(#SVGID_12_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="5.3330002"
- sodipodi:ry="5.3330002"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-<linearGradient
- id="SVGID_13_"
- gradientUnits="userSpaceOnUse"
- x1="-79.9658"
- y1="-96"
- x2="-73.0342"
- y2="-96"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#8AADCE"
- id="stop4152" />
- <stop
- offset="0.073"
- style="stop-color:#3B617F"
- id="stop4154" />
- <stop
- offset="0.5"
- style="stop-color:#EAECEF"
- id="stop4156" />
- <stop
- offset="0.6087"
- style="stop-color:#CED9E3"
- id="stop4158" />
- <stop
- offset="0.618"
- style="stop-color:#CBD7E2"
- id="stop4160" />
- <stop
- offset="0.6655"
- style="stop-color:#C7D4E1"
- id="stop4162" />
- <stop
- offset="0.7129"
- style="stop-color:#BBCDDD"
- id="stop4164" />
- <stop
- offset="0.7601"
- style="stop-color:#A7C0D6"
- id="stop4166" />
- <stop
- offset="0.807"
- style="stop-color:#8BAECD"
- id="stop4168" />
- <stop
- offset="0.809"
- style="stop-color:#8AADCD"
- id="stop4170" />
- <stop
- offset="1"
- style="stop-color:#0E525F"
- id="stop4172" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="3.4660001"
- id="circle4174"
- style="fill:url(#SVGID_13_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="3.4660001"
- sodipodi:ry="3.4660001"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-<linearGradient
- id="SVGID_14_"
- gradientUnits="userSpaceOnUse"
- x1="-78.1001"
- y1="-96"
- x2="-74.9004"
- y2="-96"
- gradientTransform="matrix(1,0,0,-1,102.5,-70)">
- <stop
- offset="0.0056"
- style="stop-color:#8AADCE"
- id="stop4177" />
- <stop
- offset="0.073"
- style="stop-color:#335977"
- id="stop4179" />
- <stop
- offset="0.5"
- style="stop-color:#EAECEF"
- id="stop4181" />
- <stop
- offset="0.618"
- style="stop-color:#C9D5E1"
- id="stop4183" />
- <stop
- offset="0.6648"
- style="stop-color:#C5D3E0"
- id="stop4185" />
- <stop
- offset="0.7114"
- style="stop-color:#B9CBDC"
- id="stop4187" />
- <stop
- offset="0.758"
- style="stop-color:#A5BFD6"
- id="stop4189" />
- <stop
- offset="0.8042"
- style="stop-color:#89ADCE"
- id="stop4191" />
- <stop
- offset="0.809"
- style="stop-color:#86ABCD"
- id="stop4193" />
- <stop
- offset="1"
- style="stop-color:#0E525F"
- id="stop4195" />
-</linearGradient>
-<circle
- cx="26"
- cy="26"
- r="1.6"
- id="circle4197"
- style="fill:url(#SVGID_14_)"
- sodipodi:cx="26"
- sodipodi:cy="26"
- sodipodi:rx="1.6"
- sodipodi:ry="1.6"
- transform="matrix(0.923077,0,0,0.923077,2,1.999996)" />
-</svg> \ No newline at end of file
diff --git a/examples/quick/customitems/slideswitch/doc/src/example-slideswitch.qdoc b/examples/quick/customitems/slideswitch/doc/src/example-slideswitch.qdoc
deleted file mode 100644
index 19c79dea97..0000000000
--- a/examples/quick/customitems/slideswitch/doc/src/example-slideswitch.qdoc
+++ /dev/null
@@ -1,132 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-/*!
-\page qmlexampletoggleswitch.html tutorial
-\title Qt Quick Examples - Toggle Switch
-\brief A reusable switch component made in QML
- \ingroup qtquickexamples
-
-This example shows how to create a reusable switch component in QML.
-
-The code for this example can be found in the \c examples/quick/customitems/slideswitch directory.
-
-The objects that compose the switch are:
-
-\list
-\li a \c on property (the interface to interact with the switch),
-\li two images (the background image and the knob),
-\li two mouse regions for user interation (on the background image and on the knob),
-\li two states (an \e on state and an \e off state),
-\li two functions or slots to react to the user interation (\c toggle() and \c dorelease()),
-\li and a transition that describe how to go from one state to the other.
-\endlist
-
-\section1 Switch.qml
-\snippet customitems/slideswitch/content/Switch.qml 0
-
-\section1 Walkthrough
-
-\section2 Interface
-\snippet customitems/slideswitch/content/Switch.qml 1
-
-This property is the interface of the switch. By default, the switch is off and this property is \c false.
-It can be used to activate/deactivate the switch or to query its current state.
-
-In this example:
-
-\qml
-Item {
- Switch {
- id: mySwitch
- on: true
- }
- Text {
- text: "The switch is on"
- visible: mySwitch.on == true
- }
-}
-\endqml
-
-the text will only be visible when the switch is on.
-
-\section2 Images and User Interaction
-\snippet customitems/slideswitch/content/Switch.qml 4
-
-First, we create the background image of the switch.
-In order for the switch to toggle when the user clicks on the background, we add a \l{MouseArea} as a child item of the image.
-A \c MouseArea has a \c onClicked property that is triggered when the item is clicked. For the moment we will just call a
-\c toggle() function. We will see what this function does in a moment.
-
-\snippet customitems/slideswitch/content/Switch.qml 5
-
-Then, we place the image of the knob on top of the background.
-The interaction here is a little more complex. We want the knob to move with the finger when it is clicked. That is what the \c drag
-property of the \c MouseArea is for. We also want to toggle the switch if the knob is released between state. We handle this case
-in the \c dorelease() function that is called in the \c onReleased property.
-
-\section2 States
-\snippet customitems/slideswitch/content/Switch.qml 6
-
-We define the two states of the switch:
-\list
-\li In the \e on state the knob is on the right (\c x position is 78) and the \c on property is \c true.
-\li In the \e off state the knob is on the left (\c x position is 1) and the \c on property is \c false.
-\endlist
-
-For more information on states see \l{Qt Quick States}.
-
-\section2 Functions
-
-We add two JavaScript functions to our switch:
-
-\snippet customitems/slideswitch/content/Switch.qml 2
-
-This first function is called when the background image or the knob are clicked. We simply want the switch to toggle between the two
-states (\e on and \e off).
-
-
-\snippet customitems/slideswitch/content/Switch.qml 3
-
-This second function is called when the knob is released and we want to make sure that the knob does not end up between states
-(neither \e on nor \e off). If it is the case call the \c toggle() function otherwise we do nothing.
-
-For more information on scripts see \l{JavaScript Expressions in QML Documents}.
-
-\section2 Transition
-\snippet customitems/slideswitch/content/Switch.qml 7
-
-At this point, when the switch toggles between the two states the knob will instantly change its \c x position between 1 and 78.
-In order for the knob to move smoothly we add a transition that will animate the \c x property with an easing curve for a duration of 200ms.
-
-For more information on transitions see \l{Animation and Transitions in Qt Quick}.
-
-\section1 Usage
-The switch can be used in a QML file, like this:
-\snippet customitems/slideswitch/slideswitch.qml 0
-*/
diff --git a/examples/quick/customitems/slideswitch/slideswitch.qml b/examples/quick/customitems/slideswitch/slideswitch.qml
deleted file mode 100644
index 7ddbfc2928..0000000000
--- a/examples/quick/customitems/slideswitch/slideswitch.qml
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "content"
-
-Rectangle {
- color: "white"
- width: 400; height: 250
-
-//![0]
- Switch { anchors.centerIn: parent; on: false }
-//![0]
-}
diff --git a/examples/quick/customitems/spinner/content/Spinner.qml b/examples/quick/customitems/spinner/content/Spinner.qml
deleted file mode 100644
index 0eec968ed1..0000000000
--- a/examples/quick/customitems/spinner/content/Spinner.qml
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Image {
- property alias model: view.model
- property alias delegate: view.delegate
- property alias currentIndex: view.currentIndex
- property real itemHeight: 30
-
- source: "spinner-bg.png"
- clip: true
-
- PathView {
- id: view
- anchors.fill: parent
-
- pathItemCount: height/itemHeight
- preferredHighlightBegin: 0.5
- preferredHighlightEnd: 0.5
- highlight: Image { source: "spinner-select.png"; width: view.width; height: itemHeight+4 }
- dragMargin: view.width/2
-
- path: Path {
- startX: view.width/2; startY: -itemHeight/2
- PathLine { x: view.width/2; y: view.pathItemCount*itemHeight + itemHeight }
- }
- }
-
- Keys.onDownPressed: view.incrementCurrentIndex()
- Keys.onUpPressed: view.decrementCurrentIndex()
-}
diff --git a/examples/quick/customitems/spinner/content/spinner-bg.png b/examples/quick/customitems/spinner/content/spinner-bg.png
deleted file mode 100644
index da34fc4090..0000000000
--- a/examples/quick/customitems/spinner/content/spinner-bg.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/spinner/content/spinner-select.png b/examples/quick/customitems/spinner/content/spinner-select.png
deleted file mode 100644
index 95a17a1fe2..0000000000
--- a/examples/quick/customitems/spinner/content/spinner-select.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/spinner/main.cpp b/examples/quick/customitems/spinner/main.cpp
deleted file mode 100644
index 579db41efd..0000000000
--- a/examples/quick/customitems/spinner/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(main)
diff --git a/examples/quick/customitems/spinner/main.qml b/examples/quick/customitems/spinner/main.qml
deleted file mode 100644
index 82b31aba0c..0000000000
--- a/examples/quick/customitems/spinner/main.qml
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "content"
-
-Rectangle {
- width: 240; height: 320
-
- Column {
- y: 20; x: 20; spacing: 20
-
- Spinner {
- id: spinner
- width: 200; height: 240
- focus: true
- model: 20
- itemHeight: 30
- delegate: Text { font.pixelSize: 25; text: index; height: 30 }
- }
-
- Text { text: "Current item index: " + spinner.currentIndex }
- }
-}
diff --git a/examples/quick/customitems/spinner/spinner.pro b/examples/quick/customitems/spinner/spinner.pro
deleted file mode 100644
index b5be6884d2..0000000000
--- a/examples/quick/customitems/spinner/spinner.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-
-RESOURCES += spinner.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/customitems/spinner
-INSTALLS += target
diff --git a/examples/quick/customitems/spinner/spinner.qmlproject b/examples/quick/customitems/spinner/spinner.qmlproject
deleted file mode 100644
index e5a8bf02ca..0000000000
--- a/examples/quick/customitems/spinner/spinner.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/customitems/spinner/spinner.qrc b/examples/quick/customitems/spinner/spinner.qrc
deleted file mode 100644
index 3a8e4b17fd..0000000000
--- a/examples/quick/customitems/spinner/spinner.qrc
+++ /dev/null
@@ -1,8 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>main.qml</file>
- <file>content/spinner-bg.png</file>
- <file>content/spinner-select.png</file>
- <file>content/Spinner.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/customitems/tabwidget/TabWidget.qml b/examples/quick/customitems/tabwidget/TabWidget.qml
deleted file mode 100644
index d0e6f8224b..0000000000
--- a/examples/quick/customitems/tabwidget/TabWidget.qml
+++ /dev/null
@@ -1,112 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Item {
- id: tabWidget
-
- // Setting the default property to stack.children means any child items
- // of the TabWidget are actually added to the 'stack' item's children.
- // See the "Property Binding"
- // documentation for details on default properties.
- default property alias content: stack.children
-
- property int current: 0
-
- onCurrentChanged: setOpacities()
- Component.onCompleted: setOpacities()
-
- function setOpacities() {
- for (var i = 0; i < stack.children.length; ++i) {
- stack.children[i].opacity = (i == current ? 1 : 0)
- }
- }
-
- Row {
- id: header
-
- Repeater {
- model: stack.children.length
- delegate: Rectangle {
- width: tabWidget.width / stack.children.length; height: 36
-
- Rectangle {
- width: parent.width; height: 1
- anchors { bottom: parent.bottom; bottomMargin: 1 }
- color: "#acb2c2"
- }
- BorderImage {
- anchors { fill: parent; leftMargin: 2; topMargin: 5; rightMargin: 1 }
- border { left: 7; right: 7 }
- source: "tab.png"
- visible: tabWidget.current == index
- }
- Text {
- horizontalAlignment: Qt.AlignHCenter; verticalAlignment: Qt.AlignVCenter
- anchors.fill: parent
- text: stack.children[index].title
- elide: Text.ElideRight
- font.bold: tabWidget.current == index
- }
- MouseArea {
- anchors.fill: parent
- onClicked: tabWidget.current = index
- }
- }
- }
- }
-
- Item {
- id: stack
- width: tabWidget.width
- anchors.top: header.bottom; anchors.bottom: tabWidget.bottom
- }
-}
diff --git a/examples/quick/customitems/tabwidget/doc/images/qml-tabwidget-example.png b/examples/quick/customitems/tabwidget/doc/images/qml-tabwidget-example.png
deleted file mode 100644
index 2e1cae2584..0000000000
--- a/examples/quick/customitems/tabwidget/doc/images/qml-tabwidget-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/tabwidget/doc/images/tab.png b/examples/quick/customitems/tabwidget/doc/images/tab.png
deleted file mode 100644
index 2ea989b68d..0000000000
--- a/examples/quick/customitems/tabwidget/doc/images/tab.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/customitems/tabwidget/doc/src/tabwidget.qdoc b/examples/quick/customitems/tabwidget/doc/src/tabwidget.qdoc
deleted file mode 100644
index a45c8107cb..0000000000
--- a/examples/quick/customitems/tabwidget/doc/src/tabwidget.qdoc
+++ /dev/null
@@ -1,42 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \title TabWidget Example
- \example customitems/tabwidget
- \brief The TabWidget example shows how to create a tabwidget using property aliases
- and QML Object default properties.
-
- This example shows how to create a tab widget. It also demonstrates how
- \l {Property aliases}{property aliases} and
- \l {QML Object Attributes#Default Properties}{default properties} can be used to collect and
- assemble the child items declared within an \l Item.
-
- \image qml-tabwidget-example.png
-*/
-
-
diff --git a/examples/quick/customitems/tabwidget/main.cpp b/examples/quick/customitems/tabwidget/main.cpp
deleted file mode 100644
index 579db41efd..0000000000
--- a/examples/quick/customitems/tabwidget/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(main)
diff --git a/examples/quick/customitems/tabwidget/main.qml b/examples/quick/customitems/tabwidget/main.qml
deleted file mode 100644
index 6867cf450b..0000000000
--- a/examples/quick/customitems/tabwidget/main.qml
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-TabWidget {
- id: tabs
- width: 640; height: 480
-
- Rectangle {
- property string title: "Red"
- anchors.fill: parent
- color: "#e3e3e3"
-
- Rectangle {
- anchors.fill: parent; anchors.margins: 20
- color: "#ff7f7f"
- Text {
- width: parent.width - 20
- anchors.centerIn: parent; horizontalAlignment: Qt.AlignHCenter
- text: "Roses are red"
- font.pixelSize: 20
- wrapMode: Text.WordWrap
- }
- }
- }
-
- Rectangle {
- property string title: "Green"
- anchors.fill: parent
- color: "#e3e3e3"
-
- Rectangle {
- anchors.fill: parent; anchors.margins: 20
- color: "#7fff7f"
- Text {
- width: parent.width - 20
- anchors.centerIn: parent; horizontalAlignment: Qt.AlignHCenter
- text: "Flower stems are green"
- font.pixelSize: 20
- wrapMode: Text.WordWrap
- }
- }
- }
-
- Rectangle {
- property string title: "Blue"
- anchors.fill: parent; color: "#e3e3e3"
-
- Rectangle {
- anchors.fill: parent; anchors.margins: 20
- color: "#7f7fff"
- Text {
- width: parent.width - 20
- anchors.centerIn: parent; horizontalAlignment: Qt.AlignHCenter
- text: "Violets are blue"
- font.pixelSize: 20
- wrapMode: Text.WordWrap
- }
- }
- }
-}
diff --git a/examples/quick/customitems/tabwidget/tabwidget.pro b/examples/quick/customitems/tabwidget/tabwidget.pro
deleted file mode 100644
index b852bb4075..0000000000
--- a/examples/quick/customitems/tabwidget/tabwidget.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-
-RESOURCES += tabwidget.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/customitems/tabwidget
-INSTALLS += target
diff --git a/examples/quick/customitems/tabwidget/tabwidget.qmlproject b/examples/quick/customitems/tabwidget/tabwidget.qmlproject
deleted file mode 100644
index e5a8bf02ca..0000000000
--- a/examples/quick/customitems/tabwidget/tabwidget.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/customitems/tabwidget/tabwidget.qrc b/examples/quick/customitems/tabwidget/tabwidget.qrc
deleted file mode 100644
index ee71f677b1..0000000000
--- a/examples/quick/customitems/tabwidget/tabwidget.qrc
+++ /dev/null
@@ -1,8 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>main.qml</file>
- <file>TabWidget.qml</file>
- <file>doc/images/qml-tabwidget-example.png</file>
- <file>doc/images/tab.png</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/delegatechooser/CMakeLists.txt b/examples/quick/delegatechooser/CMakeLists.txt
deleted file mode 100644
index dc45ad5c3c..0000000000
--- a/examples/quick/delegatechooser/CMakeLists.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-# Generated from delegatechooser.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(delegatechooser LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/delegatechooser")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(delegatechooser
- main.cpp
-)
-set_target_properties(delegatechooser PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(delegatechooser PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(qml_resource_files
- "delegatechooser.qml"
-)
-
-qt6_add_resources(delegatechooser "qml"
- PREFIX
- "/"
- FILES
- ${qml_resource_files}
-)
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
-
-qt6_add_resources(delegatechooser "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
-)
-
-install(TARGETS delegatechooser
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
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 afb8518abf..0000000000
--- a/examples/quick/delegatechooser/delegatechooser.qml
+++ /dev/null
@@ -1,145 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.12
-import QtQml.Models 2.12
-import QtQuick.Layouts 1.12
-import Qt.labs.qmlmodels 1.0
-
-Rectangle {
- visible: true
- width: 640
- height: 640
-
- ListModel {
- id: listModel
- ListElement { dataType: "rect"; color: "green" }
- ListElement { dataType: "image"; source: "../shared/images/qt-logo.png" }
- ListElement { dataType: "rect"; color: "green" }
- ListElement { dataType: "image"; source: "../shared/images/qt-logo.png" }
- 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"; source: "../shared/images/qt-logo.png" }
- ListElement { dataType: "rect"; color: "green" }
- ListElement { dataType: "image"; source: "../shared/images/qt-logo.png" }
- 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: model.source
- 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 5df9207e24..0000000000
--- a/examples/quick/delegatechooser/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(delegatechooser)
diff --git a/examples/quick/delegatechooser/qml.qrc b/examples/quick/delegatechooser/qml.qrc
deleted file mode 100644
index 0788f84c64..0000000000
--- a/examples/quick/delegatechooser/qml.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>delegatechooser.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/draganddrop/CMakeLists.txt b/examples/quick/draganddrop/CMakeLists.txt
index fe0107938a..0493f8feea 100644
--- a/examples/quick/draganddrop/CMakeLists.txt
+++ b/examples/quick/draganddrop/CMakeLists.txt
@@ -1,130 +1,53 @@
-# Generated from draganddrop.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(draganddrop LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+add_subdirectory("../shared" "shared")
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/draganddrop")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(draganddrop
+qt_add_executable(draganddropexample
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(draganddrop PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(draganddrop PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(draganddrop_resource_files
- "draganddrop.qml"
- "tiles/DragTile.qml"
- "tiles/DropTile.qml"
- "tiles/tiles.qml"
- "views/Icon.qml"
- "views/gridview.qml"
+qt_add_qml_module(draganddropexample
+ URI draganddrop
+ QML_FILES
+ "draganddrop.qml"
+ "tiles/DragTile.qml"
+ "tiles/DropTile.qml"
+ "tiles/tiles.qml"
+ "views/Icon.qml"
+ "views/gridview.qml"
+ "external/externaldraganddrop.qml"
)
-qt6_add_resources(draganddrop "draganddrop"
- PREFIX
- "/draganddrop"
- FILES
- ${draganddrop_resource_files}
-)
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
+target_link_libraries(draganddropexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(draganddrop "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
+add_dependencies(draganddropexample draganddrop_shared)
+
+install(TARGETS draganddropexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS draganddrop
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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 754fa8f8cb..444bbafca4 100644
--- a/examples/quick/draganddrop/doc/src/draganddrop.qdoc
+++ b/examples/quick/draganddrop/doc/src/draganddrop.qdoc
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick Examples - Drag and Drop
\example draganddrop
\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 b1fb6eb268..9e1629e5d4 100644
--- a/examples/quick/draganddrop/draganddrop.qml
+++ b/examples/quick/draganddrop/draganddrop.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../shared" as Examples
+import QtQuick
+import shared as Examples
Item {
height: 480
@@ -58,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 df9fec51d2..1e6ae00d12 100644
--- a/examples/quick/draganddrop/draganddrop.qrc
+++ b/examples/quick/draganddrop/draganddrop.qrc
@@ -1,10 +1,11 @@
<RCC>
- <qresource prefix="/draganddrop">
+ <qresource prefix="/qt/qml/draganddrop">
<file>draganddrop.qml</file>
<file>tiles/DragTile.qml</file>
<file>tiles/DropTile.qml</file>
<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/main.cpp b/examples/quick/draganddrop/main.cpp
index f31dc51577..e1bf553cea 100644
--- a/examples/quick/draganddrop/main.cpp
+++ b/examples/quick/draganddrop/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../shared/shared.h"
DECLARATIVE_EXAMPLE_MAIN(draganddrop/draganddrop)
diff --git a/examples/quick/draganddrop/tiles/DragTile.qml b/examples/quick/draganddrop/tiles/DragTile.qml
index 47f0ebed5e..f35695f865 100644
--- a/examples/quick/draganddrop/tiles/DragTile.qml
+++ b/examples/quick/draganddrop/tiles/DragTile.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
//! [0]
Item {
@@ -57,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
@@ -72,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
@@ -88,16 +46,20 @@ 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
- ParentChange { target: tile; parent: root }
- 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 bf7101f0f6..409c3801e4 100644
--- a/examples/quick/draganddrop/tiles/DropTile.qml
+++ b/examples/quick/draganddrop/tiles/DropTile.qml
@@ -1,80 +1,23 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
//! [0]
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 {
- target: 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 80270354aa..c9667022d7 100644
--- a/examples/quick/draganddrop/tiles/tiles.qml
+++ b/examples/quick/draganddrop/tiles/tiles.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
Rectangle {
id: root
@@ -61,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
@@ -93,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
@@ -106,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 261d6d146a..80bd0c1e7a 100644
--- a/examples/quick/draganddrop/views/Icon.qml
+++ b/examples/quick/draganddrop/views/Icon.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.14
+import QtQuick
Rectangle {
id: icon
@@ -88,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 05bd48e7fa..244d73341d 100644
--- a/examples/quick/draganddrop/views/gridview.qml
+++ b/examples/quick/draganddrop/views/gridview.qml
@@ -1,64 +1,23 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQml 2.14
-import QtQuick 2.14
-import QtQml.Models 2.14
+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]
@@ -95,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 4862e58f5c..d977def966 100644
--- a/examples/quick/embeddedinwidgets/CMakeLists.txt
+++ b/examples/quick/embeddedinwidgets/CMakeLists.txt
@@ -1,55 +1,44 @@
-# Generated from embeddedinwidgets.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(embeddedinwidgets LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick Widgets)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/embeddedinwidgets")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(embeddedinwidgets
+qt_add_executable(embeddedinwidgetsexample WIN32 MACOSX_BUNDLE
main.cpp
)
-set_target_properties(embeddedinwidgets PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(embeddedinwidgets PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::Widgets
-)
+target_link_libraries(embeddedinwidgetsexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::Widgets
+)
# Resources:
-set(embeddedinwidgets_resource_files
- "TextBox.qml"
- "main.qml"
+qt_add_qml_module(embeddedinwidgetsexample
+ URI embeddedinwidgets
+ QML_FILES
+ "Main.qml"
+ RESOURCES
+ "reflect.frag.qsb"
)
-qt6_add_resources(embeddedinwidgets "embeddedinwidgets"
- PREFIX
- "/embeddedinwidgets"
- FILES
- ${embeddedinwidgets_resource_files}
+install(TARGETS embeddedinwidgetsexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS embeddedinwidgets
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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
new file mode 100644
index 0000000000..1408e8f261
--- /dev/null
+++ b/examples/quick/embeddedinwidgets/Main.qml
@@ -0,0 +1,53 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Rectangle {
+ id: window
+
+ width: 400
+ height: 200
+
+ gradient: Gradient {
+ GradientStop { position: 0; color: "lightsteelblue" }
+ GradientStop { position: 1; color: "black" }
+ }
+
+ Column {
+ id: column
+
+ y: 50
+ width: 200
+ anchors.horizontalCenter: parent.horizontalCenter
+ spacing: 4
+
+
+ TextField {
+ text: "A QML text field..."
+ width: parent.width
+ focus: true
+ }
+
+ TextField {
+ text: "Another QML text field..."
+ width: parent.width
+ }
+
+ layer.enabled: true
+ layer.smooth: true
+ }
+
+ ShaderEffect {
+ anchors.top: column.bottom
+ width: column.width
+ height: column.height;
+ anchors.left: column.left
+
+ property variant source: column;
+ property size sourceSize: Qt.size(0.5 / column.width, 0.5 / column.height);
+
+ fragmentShader: "reflect.frag.qsb"
+ }
+}
diff --git a/examples/quick/embeddedinwidgets/TextBox.qml b/examples/quick/embeddedinwidgets/TextBox.qml
deleted file mode 100644
index b45bb0ef1b..0000000000
--- a/examples/quick/embeddedinwidgets/TextBox.qml
+++ /dev/null
@@ -1,85 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-FocusScope {
- id: root
-
- width: 100
- height: 30
-
- property Item nextInFocus;
- property string label;
-
- Rectangle {
- anchors.margins: 2
- anchors.fill: parent
- radius: 8
- gradient: Gradient {
- GradientStop { position: 0; color: "lightgray" }
- GradientStop { position: 1; color: "white" }
- }
- border.color: "white"
- border.width: 2
- antialiasing: true
-
- TextInput {
- anchors.fill: parent
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- focus: true
-
- text: root.label;
-
- KeyNavigation.tab: root.nextInFocus;
- }
- }
-}
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 de47a397ab..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 TextBox.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 62e0ed2161..0000000000
--- a/examples/quick/embeddedinwidgets/embeddedinwidgets.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/embeddedinwidgets">
- <file>main.qml</file>
- <file>TextBox.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/embeddedinwidgets/main.cpp b/examples/quick/embeddedinwidgets/main.cpp
index 91147772ba..2cc70e195e 100644
--- a/examples/quick/embeddedinwidgets/main.cpp
+++ b/examples/quick/embeddedinwidgets/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QMainWindow>
#include <QApplication>
@@ -73,6 +26,7 @@ private:
QQuickView *m_quickView;
};
+//! [ctor]
MainWindow::MainWindow()
: m_quickView(new QQuickView)
{
@@ -84,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());
@@ -98,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/main.qml b/examples/quick/embeddedinwidgets/main.qml
deleted file mode 100644
index e46f027bdb..0000000000
--- a/examples/quick/embeddedinwidgets/main.qml
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Rectangle {
- id: window
-
- width: 400
- height: 200
-
- gradient: Gradient {
- GradientStop { position: 0; color: "lightsteelblue" }
- GradientStop { position: 1; color: "black" }
- }
-
- Column {
- id: column
- opacity: 0.99 // work around QTBUG-29037
-
- y: 50
- width: 200
- anchors.horizontalCenter: parent.horizontalCenter
-
- TextBox {
- id: input1
- width: parent.width
- height: 30
- focus: true
-
- label: "A QML text box.."
-
- nextInFocus: input2;
- }
-
- TextBox {
- id: input2
- width: parent.width
- height: 30
-
- label: "Another QML text box.."
-
- nextInFocus: input1;
- }
-
- layer.enabled: true
- layer.smooth: true
- }
-
- ShaderEffect {
- anchors.top: column.bottom
- width: column.width
- height: column.height;
- anchors.left: column.left
-
- property variant source: column;
- property size sourceSize: Qt.size(0.5 / column.width, 0.5 / column.height);
-
- fragmentShader: "
- varying highp vec2 qt_TexCoord0;
- uniform lowp sampler2D source;
- uniform lowp vec2 sourceSize;
- uniform lowp float qt_Opacity;
- void main() {
-
- lowp vec2 tc = qt_TexCoord0 * vec2(1, -1) + vec2(0, 1);
- lowp vec4 col = 0.25 * (texture2D(source, tc + sourceSize)
- + texture2D(source, tc- sourceSize)
- + texture2D(source, tc + sourceSize * vec2(1, -1))
- + texture2D(source, tc + sourceSize * vec2(-1, 1))
- );
- gl_FragColor = col * qt_Opacity * (1.0 - qt_TexCoord0.y) * 0.2;
- }"
- }
-}
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
new file mode 100644
index 0000000000..e1d5dbf450
--- /dev/null
+++ b/examples/quick/embeddedinwidgets/reflect.frag
@@ -0,0 +1,25 @@
+// 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;
+layout(location = 0) out vec4 fragColor;
+
+layout(binding = 1) uniform sampler2D source;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 qt_Matrix;
+ float qt_Opacity;
+ vec2 sourceSize;
+};
+
+void main()
+{
+ vec2 tc = qt_TexCoord0 * vec2(1, -1) + vec2(0, 1);
+ vec4 col = 0.25 * (texture(source, tc + sourceSize)
+ + texture(source, tc- sourceSize)
+ + texture(source, tc + sourceSize * vec2(1, -1))
+ + texture(source, tc + sourceSize * vec2(-1, 1)));
+ fragColor = col * qt_Opacity * (1.0 - qt_TexCoord0.y) * 0.2;
+}
diff --git a/examples/quick/embeddedinwidgets/reflect.frag.qsb b/examples/quick/embeddedinwidgets/reflect.frag.qsb
new file mode 100644
index 0000000000..a4d25dcbf5
--- /dev/null
+++ b/examples/quick/embeddedinwidgets/reflect.frag.qsb
Binary files differ
diff --git a/examples/quick/externaldraganddrop/CMakeLists.txt b/examples/quick/externaldraganddrop/CMakeLists.txt
deleted file mode 100644
index 2f801b3045..0000000000
--- a/examples/quick/externaldraganddrop/CMakeLists.txt
+++ /dev/null
@@ -1,126 +0,0 @@
-# Generated from externaldraganddrop.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(externaldraganddrop LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/externaldraganddrop")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(externaldraganddrop
- main.cpp
-)
-set_target_properties(externaldraganddrop PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(externaldraganddrop PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(externaldraganddrop_resource_files
- "DragAndDropTextItem.qml"
- "externaldraganddrop.qml"
-)
-
-qt6_add_resources(externaldraganddrop "externaldraganddrop"
- PREFIX
- "/externaldraganddrop"
- FILES
- ${externaldraganddrop_resource_files}
-)
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
-
-qt6_add_resources(externaldraganddrop "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
-)
-
-install(TARGETS externaldraganddrop
- 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 605dc07434..0000000000
--- a/examples/quick/externaldraganddrop/DragAndDropTextItem.qml
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.2
-import "../shared" as Examples
-
-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
- }
- Text {
- anchors.fill: parent
- 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 = ""
- }
- }
- Examples.CheckBox {
- id: acceptDropCB
- anchors.right: parent.right
- 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 547b7f6695..0000000000
--- a/examples/quick/externaldraganddrop/doc/src/externaldraganddrop.qdoc
+++ /dev/null
@@ -1,44 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
- \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 0a592a84f3..0000000000
--- a/examples/quick/externaldraganddrop/externaldraganddrop.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-RESOURCES += externaldraganddrop.qrc ../shared/shared.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 47a76a259a..0000000000
--- a/examples/quick/externaldraganddrop/externaldraganddrop.qml
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.2
-import QtQuick.Layouts 1.0
-
-Item {
- id: root
- width: 320
- height: 480
-
- ColumnLayout {
-
- anchors.fill: parent
- anchors.margins: 8
-
- Text {
- Layout.fillWidth: true
- text: "Drag text into, out of, and between the boxes below."
- wrapMode: Text.WordWrap
- }
-
- DragAndDropTextItem {
- Layout.fillWidth: true
- height: 142
- display: "Sample Text"
- }
-
- DragAndDropTextItem {
- Layout.fillWidth: true
- height: 142
- display: "Option/ctrl drag to copy instead of move text."
- }
-
- DragAndDropTextItem {
- Layout.fillWidth: true
- height: 142
- 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 edac9820c9..0000000000
--- a/examples/quick/externaldraganddrop/externaldraganddrop.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/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 555fc93c84..0000000000
--- a/examples/quick/externaldraganddrop/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(externaldraganddrop/externaldraganddrop)
diff --git a/examples/quick/imageelements/BorderImageSelector.qml b/examples/quick/imageelements/BorderImageSelector.qml
new file mode 100644
index 0000000000..ae99b35231
--- /dev/null
+++ b/examples/quick/imageelements/BorderImageSelector.qml
@@ -0,0 +1,64 @@
+// 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
+ property Flickable flickable
+ width: parent.width
+ height: 64
+ function advance(steps) {
+ const nextIdx = curIdx + steps
+ if (nextIdx < 0 || nextIdx > maxIdx)
+ return
+ flickable.contentX += gridWidth * steps
+ curIdx += steps
+ }
+ Image {
+ source: "pics/arrow.png"
+ MouseArea{
+ anchors.fill: parent
+ onClicked: selector.advance(-1)
+ }
+ anchors.left: parent.left
+ anchors.leftMargin: 8
+ anchors.verticalCenter: parent.verticalCenter
+ opacity: selector.curIdx == 0 ? 0.2 : 1.0
+ Behavior on opacity {NumberAnimation{}}
+ }
+ Image {
+ source: "pics/arrow.png"
+ mirror: true
+ MouseArea{
+ anchors.fill: parent
+ onClicked: selector.advance(1)
+ }
+ opacity: selector.curIdx == selector.maxIdx ? 0.2 : 1.0
+ Behavior on opacity {NumberAnimation{}}
+ anchors.right: parent.right
+ anchors.rightMargin: 8
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ Repeater {
+ model: [ "Scale", "Repeat", "Scale/Repeat", "Round" ]
+ delegate: Text {
+ required property string modelData
+ required property int index
+
+ text: modelData
+ anchors.verticalCenter: parent.verticalCenter
+
+ x: (index - selector.curIdx) * 80 + 140
+ Behavior on x { NumberAnimation{} }
+
+ opacity: selector.curIdx == index ? 1.0 : 0.0
+ Behavior on opacity { NumberAnimation{} }
+ }
+ }
+}
diff --git a/examples/quick/imageelements/CMakeLists.txt b/examples/quick/imageelements/CMakeLists.txt
index ea354c3305..e13f57af9b 100644
--- a/examples/quick/imageelements/CMakeLists.txt
+++ b/examples/quick/imageelements/CMakeLists.txt
@@ -1,148 +1,69 @@
-# Generated from imageelements.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(imageelements LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+add_subdirectory("../shared" "shared")
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/imageelements")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(imageelements
+qt_add_executable(imageelementsexample
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(imageelements PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(imageelements PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(imageelements_resource_files
- "animatedimage.qml"
- "animatedsprite.qml"
- "borderimage.qml"
- "content/BearSheet.png"
- "content/BorderImageSelector.qml"
- "content/ImageCell.qml"
- "content/MyBorderImage.qml"
- "content/ShadowRectangle.qml"
- "content/Uniflow_steam_engine.gif"
- "content/arrow.png"
- "content/bw.png"
- "content/colors-round.sci"
- "content/colors-stretch.sci"
- "content/colors.png"
- "content/multi.ico"
- "content/qt-logo.png"
- "content/shadow.png"
- "content/speaker.png"
- "framestepping.qml"
- "image.qml"
- "imageelements.qml"
- "multiframeborderimage.qml"
- "shadows.qml"
- "spritesequence.qml"
+target_link_libraries(imageelementsexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(imageelements "imageelements"
- PREFIX
- "/imageelements"
- FILES
- ${imageelements_resource_files}
-)
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
+qt_add_qml_module(imageelementsexample
+ URI imageelements
+ QML_FILES
+ "animatedimage.qml"
+ "animatedsprite.qml"
+ "borderimage.qml"
+ "framestepping.qml"
+ "image.qml"
+ "imageelements.qml"
+ "multiframeborderimage.qml"
+ "shadows.qml"
+ "spritesequence.qml"
+ "BorderImageSelector.qml"
+ "ImageCell.qml"
+ "MyBorderImage.qml"
+ "ShadowRectangle.qml"
+ RESOURCES
+ "pics/qt-logo.png"
+ "pics/shadow.png"
+ "pics/speaker.png"
+ "pics/colors.png"
+ "pics/BearSheet.png"
+ "pics/Uniflow_steam_engine.gif"
+ "pics/arrow.png"
+ "pics/bw.png"
+ "pics/multi.ico"
+ "pics/colors-round.sci"
+ "pics/colors-stretch.sci"
+ )
-qt6_add_resources(imageelements "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
+install(TARGETS imageelementsexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS imageelements
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
+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
new file mode 100644
index 0000000000..537ed2a939
--- /dev/null
+++ b/examples/quick/imageelements/ImageCell.qml
@@ -0,0 +1,25 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ property alias mode: image.fillMode
+ property alias caption: captionItem.text
+
+ Image {
+ id: image
+
+ 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
+ }
+}
diff --git a/examples/quick/imageelements/MyBorderImage.qml b/examples/quick/imageelements/MyBorderImage.qml
new file mode 100644
index 0000000000..ae2d4171bd
--- /dev/null
+++ b/examples/quick/imageelements/MyBorderImage.qml
@@ -0,0 +1,65 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQml
+import QtQuick
+
+Item {
+ id: container
+
+ property alias horizontalMode: image.horizontalTileMode
+ property alias verticalMode: image.verticalTileMode
+ property alias source: image.source
+
+ property int minWidth
+ property int minHeight
+ property int maxWidth
+ property int maxHeight
+ property int margin
+
+ width: 240
+ height: 200
+
+ BorderImage {
+ id: image
+
+ anchors.centerIn: parent
+
+ SequentialAnimation on width {
+ loops: Animation.Infinite
+ NumberAnimation {
+ 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
+ }
+ }
+
+ SequentialAnimation on height {
+ loops: Animation.Infinite
+ NumberAnimation {
+ 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
+ }
+ }
+
+ border.top: container.margin
+ border.left: container.margin
+ border.bottom: container.margin
+ border.right: container.margin
+ }
+}
diff --git a/examples/quick/imageelements/ShadowRectangle.qml b/examples/quick/imageelements/ShadowRectangle.qml
new file mode 100644
index 0000000000..2be2fb81f2
--- /dev/null
+++ b/examples/quick/imageelements/ShadowRectangle.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ property alias color : rectangle.color
+
+//! [shadow]
+ BorderImage {
+ anchors.fill: rectangle
+ 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
+ }
+}
diff --git a/examples/quick/imageelements/animatedimage.qml b/examples/quick/imageelements/animatedimage.qml
index 04bc38fe95..114b5c9075 100644
--- a/examples/quick/imageelements/animatedimage.qml
+++ b/examples/quick/imageelements/animatedimage.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.12
-import "../shared" as Examples
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+import QtQuick
+import QtQuick.Controls
Column {
width: 320
@@ -59,7 +12,8 @@ Column {
//! [image]
AnimatedImage {
id: animation
- source: "content/Uniflow_steam_engine.gif"
+
+ source: "pics/Uniflow_steam_engine.gif"
anchors.horizontalCenter: parent.horizontalCenter
speed: speedSlider.value
TapHandler {
@@ -70,6 +24,7 @@ Column {
Rectangle {
id: timeline
+
color: "steelblue"
width: animation.width
height: 1
@@ -79,36 +34,53 @@ 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"
}
}
- Examples.Slider {
- id: speedSlider
- name: "Speed"
- min: 0
- max: 5
- init: 1
- width: 240
- x: animation.x
- Text {
+ Row {
+ spacing: 6
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Label {
+ text: qsTr("Speed:")
+ font.pointSize: 12
+ anchors.verticalCenter: speedSlider.verticalCenter
+ }
+
+ Slider {
+ id: speedSlider
+
+ from: 0
+ to: 5
+ value: 1
+ }
+
+ Label {
+ font: fontMetrics.font
+ text: qsTr(Math.round(animation.speed * 100) + "%")
+ width: fontMetrics.width
+ anchors.verticalCenter: speedSlider.verticalCenter
+ }
+
+ TextMetrics {
+ id: fontMetrics
+
+ text: "100%"
font.pointSize: 12
- text: Math.round(animation.speed * 100) + "%"
- x: animation.width - width
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: 6
}
}
- Examples.Button {
- text: "Reset"
+ Button {
+ text: qsTr("Reset")
enabled: speedSlider.value !== 1
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
- speedSlider.setValue(1)
+ speedSlider.value = 1
animation.playing = true
}
}
diff --git a/examples/quick/imageelements/animatedsprite.qml b/examples/quick/imageelements/animatedsprite.qml
index 8666c2b9fc..50da7cf0e9 100644
--- a/examples/quick/imageelements/animatedsprite.qml
+++ b/examples/quick/imageelements/animatedsprite.qml
@@ -1,53 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+import QtQuick
+import QtQuick.Controls
Item {
width: 320
@@ -60,8 +14,9 @@ Item {
//! [sprite]
AnimatedSprite {
id: sprite
+
anchors.centerIn: parent
- source: "content/speaker.png"
+ source: "pics/speaker.png"
frameCount: 60
frameSync: true
frameWidth: 170
@@ -70,8 +25,8 @@ Item {
}
//! [sprite]
- Text {
- text: "Left click to resume\nMiddle click to advance backward\nRight click to advance forward"
+ Label {
+ text: qsTr("Left click to resume\nMiddle click to advance backward\nRight click to advance forward")
visible: sprite.paused
}
@@ -80,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 00f18737f6..7c522a64be 100644
--- a/examples/quick/imageelements/borderimage.qml
+++ b/examples/quick/imageelements/borderimage.qml
@@ -1,63 +1,17 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "content"
+import QtQuick
Rectangle {
id: page
+
width: 320
height: 480
BorderImageSelector {
id: selector
+
curIdx: 0
maxIdx: 3
gridWidth: 240
@@ -68,6 +22,7 @@ Rectangle {
Flickable {
id: mainFlickable
+
width: parent.width
anchors.bottom: parent.bottom
anchors.top: selector.bottom
@@ -77,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: "content/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: "content/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: "content/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: "content/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: "content/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: "content/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: "content/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: "content/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/content/BorderImageSelector.qml b/examples/quick/imageelements/content/BorderImageSelector.qml
deleted file mode 100644
index d8c2101be7..0000000000
--- a/examples/quick/imageelements/content/BorderImageSelector.qml
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Item {
- id: selector
- property int curIdx: 0
- property int maxIdx: 3
- property int gridWidth: 240
- property Flickable flickable
- width: parent.width
- height: 64
- function advance(steps) {
- var nextIdx = curIdx + steps
- if (nextIdx < 0 || nextIdx > maxIdx)
- return;
- flickable.contentX += gridWidth * steps;
- curIdx += steps;
- }
- Image {
- source: "arrow.png"
- MouseArea{
- anchors.fill: parent
- onClicked: selector.advance(-1)
- }
- anchors.left: parent.left
- anchors.leftMargin: 8
- anchors.verticalCenter: parent.verticalCenter
- opacity: selector.curIdx == 0 ? 0.2 : 1.0
- Behavior on opacity {NumberAnimation{}}
- }
- Image {
- source: "arrow.png"
- mirror: true
- MouseArea{
- anchors.fill: parent
- onClicked: selector.advance(1)
- }
- opacity: selector.curIdx == selector.maxIdx ? 0.2 : 1.0
- Behavior on opacity {NumberAnimation{}}
- anchors.right: parent.right
- anchors.rightMargin: 8
- anchors.verticalCenter: parent.verticalCenter
- }
- Repeater {
- model: [ "Scale", "Repeat", "Scale/Repeat", "Round" ]
- delegate: Text {
- required property string modelData
- required property int index
-
- text: modelData
- anchors.verticalCenter: parent.verticalCenter
-
- x: (index - selector.curIdx) * 80 + 140
- Behavior on x { NumberAnimation{} }
-
- opacity: selector.curIdx == index ? 1.0 : 0.0
- Behavior on opacity { NumberAnimation{} }
- }
- }
-}
diff --git a/examples/quick/imageelements/content/ImageCell.qml b/examples/quick/imageelements/content/ImageCell.qml
deleted file mode 100644
index 7804346bd4..0000000000
--- a/examples/quick/imageelements/content/ImageCell.qml
+++ /dev/null
@@ -1,67 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
-
-Item {
- property alias mode: image.fillMode
- property alias caption: captionItem.text
-
- Image {
- id: image
- width: parent.width; height: parent.height - captionItem.height
- source: "qt-logo.png"
- clip: true // only makes a difference if mode is PreserveAspectCrop
- }
-
- Text {
- id: captionItem
- anchors.horizontalCenter: parent.horizontalCenter; anchors.bottom: parent.bottom
- }
-}
diff --git a/examples/quick/imageelements/content/MyBorderImage.qml b/examples/quick/imageelements/content/MyBorderImage.qml
deleted file mode 100644
index 3198de3bf1..0000000000
--- a/examples/quick/imageelements/content/MyBorderImage.qml
+++ /dev/null
@@ -1,101 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQml 2.0
-import QtQuick 2.0
-
-Item {
- id: container
-
- property alias horizontalMode: image.horizontalTileMode
- property alias verticalMode: image.verticalTileMode
- property alias source: image.source
-
- property int minWidth
- property int minHeight
- property int maxWidth
- property int maxHeight
- property int margin
-
- width: 240; height: 200
-
- BorderImage {
- id: image; anchors.centerIn: parent
-
- SequentialAnimation on width {
- loops: Animation.Infinite
- NumberAnimation {
- 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
- }
- }
-
- SequentialAnimation on height {
- loops: Animation.Infinite
- NumberAnimation {
- 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
- }
- }
-
- border.top: container.margin
- border.left: container.margin
- border.bottom: container.margin
- border.right: container.margin
- }
-}
diff --git a/examples/quick/imageelements/content/ShadowRectangle.qml b/examples/quick/imageelements/content/ShadowRectangle.qml
deleted file mode 100644
index 7bce665b23..0000000000
--- a/examples/quick/imageelements/content/ShadowRectangle.qml
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Item {
- property alias color : rectangle.color
-
-//! [shadow]
- BorderImage {
- anchors.fill: rectangle
- anchors { leftMargin: -6; topMargin: -6; rightMargin: -8; bottomMargin: -8 }
- border { left: 10; top: 10; right: 10; bottom: 10 }
- source: "shadow.png"
- }
-//! [shadow]
-
- Rectangle { id: rectangle; anchors.fill: parent }
-}
diff --git a/examples/quick/imageelements/doc/src/imageelements.qdoc b/examples/quick/imageelements/doc/src/imageelements.qdoc
index 4c00915e56..06fa25ab19 100644
--- a/examples/quick/imageelements/doc/src/imageelements.qdoc
+++ b/examples/quick/imageelements/doc/src/imageelements.qdoc
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick Examples - Image Elements
\example imageelements
\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}.
@@ -49,7 +26,7 @@
\e Shadows shows how to create a drop shadow effect for a rectangular item
using a \l BorderImage:
- \snippet imageelements/content/ShadowRectangle.qml shadow
+ \snippet imageelements/ShadowRectangle.qml shadow
\section1 Sprite Animations with AnimatedSprite
diff --git a/examples/quick/imageelements/framestepping.qml b/examples/quick/imageelements/framestepping.qml
index f5bad46e7b..a06aaae780 100644
--- a/examples/quick/imageelements/framestepping.qml
+++ b/examples/quick/imageelements/framestepping.qml
@@ -1,63 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.14
+import QtQuick
+import QtQuick.Controls
Rectangle {
width: 480
height: 320
Image {
id: img
+
anchors.centerIn: parent
cache: true
- source: "content/multi.ico"
+ source: "pics/multi.ico"
Shortcut {
sequence: StandardKey.MoveToNextPage
@@ -71,12 +26,13 @@ Rectangle {
}
}
- Text {
+ Label {
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
anchors.margins: 6
horizontalAlignment: Text.AlignHCenter
- text: "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 0750ea3b79..11acb51054 100644
--- a/examples/quick/imageelements/image.qml
+++ b/examples/quick/imageelements/image.qml
@@ -1,60 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "content"
+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
@@ -66,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 91f2e034f7..3470a30879 100644
--- a/examples/quick/imageelements/imageelements.qml
+++ b/examples/quick/imageelements/imageelements.qml
@@ -1,71 +1,25 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../shared"
+import QtQuick
+import shared as Shared
Item {
height: 480
width: 320
- LauncherList {
+ 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/imageelements.qrc b/examples/quick/imageelements/imageelements.qrc
index cedef2204c..75cd996074 100644
--- a/examples/quick/imageelements/imageelements.qrc
+++ b/examples/quick/imageelements/imageelements.qrc
@@ -1,28 +1,28 @@
<RCC>
- <qresource prefix="/imageelements">
- <file>content/arrow.png</file>
- <file>content/BearSheet.png</file>
- <file>content/BorderImageSelector.qml</file>
- <file>content/bw.png</file>
- <file>content/colors-round.sci</file>
- <file>content/colors-stretch.sci</file>
- <file>content/colors.png</file>
- <file>content/ImageCell.qml</file>
- <file>content/multi.ico</file>
- <file>content/MyBorderImage.qml</file>
- <file>content/qt-logo.png</file>
- <file>content/shadow.png</file>
- <file>content/ShadowRectangle.qml</file>
- <file>content/speaker.png</file>
- <file>content/Uniflow_steam_engine.gif</file>
- <file>imageelements.qml</file>
+ <qresource prefix="/qt/qml/imageelements">
<file>animatedimage.qml</file>
<file>animatedsprite.qml</file>
<file>borderimage.qml</file>
+ <file>BorderImageSelector.qml</file>
<file>framestepping.qml</file>
- <file>multiframeborderimage.qml</file>
+ <file>ImageCell.qml</file>
+ <file>imageelements.qml</file>
<file>image.qml</file>
+ <file>multiframeborderimage.qml</file>
+ <file>MyBorderImage.qml</file>
+ <file>ShadowRectangle.qml</file>
<file>shadows.qml</file>
<file>spritesequence.qml</file>
+ <file>pics/arrow.png</file>
+ <file>pics/BearSheet.png</file>
+ <file>pics/bw.png</file>
+ <file>pics/colors-round.sci</file>
+ <file>pics/colors-stretch.sci</file>
+ <file>pics/colors.png</file>
+ <file>pics/multi.ico</file>
+ <file>pics/qt-logo.png</file>
+ <file>pics/shadow.png</file>
+ <file>pics/speaker.png</file>
+ <file>pics/Uniflow_steam_engine.gif</file>
</qresource>
</RCC>
diff --git a/examples/quick/imageelements/main.cpp b/examples/quick/imageelements/main.cpp
index 235976b2fa..c6a28cb2ec 100644
--- a/examples/quick/imageelements/main.cpp
+++ b/examples/quick/imageelements/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../shared/shared.h"
DECLARATIVE_EXAMPLE_MAIN(imageelements/imageelements)
diff --git a/examples/quick/imageelements/multiframeborderimage.qml b/examples/quick/imageelements/multiframeborderimage.qml
index 0805ea4243..b5e76ae976 100644
--- a/examples/quick/imageelements/multiframeborderimage.qml
+++ b/examples/quick/imageelements/multiframeborderimage.qml
@@ -1,65 +1,25 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.14
+import QtQuick
+import QtQuick.Controls
Rectangle {
width: 480
height: 320
BorderImage {
id: img
+
anchors.fill: parent
anchors.margins: 6
cache: true
- source: "content/multi.ico"
- border { left: 19; top: 19; right: 19; bottom: 19 }
+ source: "pics/multi.ico"
+ border {
+ left: 19
+ top: 19
+ right: 19
+ bottom: 19
+ }
horizontalTileMode: BorderImage.Stretch
Shortcut {
@@ -74,10 +34,10 @@ Rectangle {
}
}
- Text {
+ Label {
anchors.centerIn: parent
horizontalAlignment: Text.AlignHCenter
- text: "frame " + (img.currentFrame + 1) + " of " + img.frameCount +
- "\nPress PgUp/PgDn to switch frames"
+ text: qsTr("frame " + (img.currentFrame + 1) + " of " + img.frameCount +
+ "\nPress PgUp/PgDn to switch frames")
}
}
diff --git a/examples/quick/imageelements/content/BearSheet.png b/examples/quick/imageelements/pics/BearSheet.png
index a084bf0f1e..a084bf0f1e 100644
--- a/examples/quick/imageelements/content/BearSheet.png
+++ b/examples/quick/imageelements/pics/BearSheet.png
Binary files differ
diff --git a/examples/quick/imageelements/content/Uniflow_steam_engine.gif b/examples/quick/imageelements/pics/Uniflow_steam_engine.gif
index 8754de4af9..8754de4af9 100644
--- a/examples/quick/imageelements/content/Uniflow_steam_engine.gif
+++ b/examples/quick/imageelements/pics/Uniflow_steam_engine.gif
Binary files differ
diff --git a/examples/quick/imageelements/content/arrow.png b/examples/quick/imageelements/pics/arrow.png
index 059be6294e..059be6294e 100644
--- a/examples/quick/imageelements/content/arrow.png
+++ b/examples/quick/imageelements/pics/arrow.png
Binary files differ
diff --git a/examples/quick/imageelements/content/bw.png b/examples/quick/imageelements/pics/bw.png
index 486eaae96e..486eaae96e 100644
--- a/examples/quick/imageelements/content/bw.png
+++ b/examples/quick/imageelements/pics/bw.png
Binary files differ
diff --git a/examples/quick/imageelements/content/colors-round.sci b/examples/quick/imageelements/pics/colors-round.sci
index 506f6f5f99..506f6f5f99 100644
--- a/examples/quick/imageelements/content/colors-round.sci
+++ b/examples/quick/imageelements/pics/colors-round.sci
diff --git a/examples/quick/imageelements/content/colors-stretch.sci b/examples/quick/imageelements/pics/colors-stretch.sci
index e4989a723c..e4989a723c 100644
--- a/examples/quick/imageelements/content/colors-stretch.sci
+++ b/examples/quick/imageelements/pics/colors-stretch.sci
diff --git a/examples/quick/imageelements/content/colors.png b/examples/quick/imageelements/pics/colors.png
index 57f5aca821..57f5aca821 100644
--- a/examples/quick/imageelements/content/colors.png
+++ b/examples/quick/imageelements/pics/colors.png
Binary files differ
diff --git a/examples/quick/imageelements/content/multi.ico b/examples/quick/imageelements/pics/multi.ico
index b748ceaa29..b748ceaa29 100644
--- a/examples/quick/imageelements/content/multi.ico
+++ b/examples/quick/imageelements/pics/multi.ico
Binary files differ
diff --git a/examples/quick/imageelements/content/qt-logo.png b/examples/quick/imageelements/pics/qt-logo.png
index 14ddf2a028..14ddf2a028 100644
--- a/examples/quick/imageelements/content/qt-logo.png
+++ b/examples/quick/imageelements/pics/qt-logo.png
Binary files differ
diff --git a/examples/quick/imageelements/content/shadow.png b/examples/quick/imageelements/pics/shadow.png
index 23c011d0ff..23c011d0ff 100644
--- a/examples/quick/imageelements/content/shadow.png
+++ b/examples/quick/imageelements/pics/shadow.png
Binary files differ
diff --git a/examples/quick/imageelements/content/speaker.png b/examples/quick/imageelements/pics/speaker.png
index fb0e857859..fb0e857859 100644
--- a/examples/quick/imageelements/content/speaker.png
+++ b/examples/quick/imageelements/pics/speaker.png
Binary files differ
diff --git a/examples/quick/imageelements/shadows.qml b/examples/quick/imageelements/shadows.qml
index 981133f725..3f345a3937 100644
--- a/examples/quick/imageelements/shadows.qml
+++ b/examples/quick/imageelements/shadows.qml
@@ -1,74 +1,33 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "content"
+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 8581bf1ea8..d578700195 100644
--- a/examples/quick/imageelements/spritesequence.qml
+++ b/examples/quick/imageelements/spritesequence.qml
@@ -1,81 +1,50 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+import QtQuick
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
interpolate: false
goalSprite: ""
//! [still]
- Sprite{
+ Sprite {
name: "still"
- source: "content/BearSheet.png"
+ source: "pics/BearSheet.png"
frameCount: 1
frameWidth: 256
frameHeight: 256
@@ -83,9 +52,9 @@ Item {
to: {"still":1, "blink":0.1, "floating":0}
}
//! [still]
- Sprite{
+ Sprite {
name: "blink"
- source: "content/BearSheet.png"
+ source: "pics/BearSheet.png"
frameCount: 3
frameX: 256
frameY: 1536
@@ -94,9 +63,9 @@ Item {
frameDuration: 100
to: {"still":1}
}
- Sprite{
+ Sprite {
name: "floating"
- source: "content/BearSheet.png"
+ source: "pics/BearSheet.png"
frameCount: 9
frameX: 0
frameY: 0
@@ -105,9 +74,9 @@ Item {
frameDuration: 160
to: {"still":0, "flailing":1}
}
- Sprite{
+ Sprite {
name: "flailing"
- source: "content/BearSheet.png"
+ source: "pics/BearSheet.png"
frameCount: 8
frameX: 0
frameY: 768
@@ -116,9 +85,9 @@ Item {
frameDuration: 160
to: {"falling":1}
}
- Sprite{
+ Sprite {
name: "falling"
- source: "content/BearSheet.png"
+ source: "pics/BearSheet.png"
frameCount: 5
frameY: 1280
frameWidth: 256
diff --git a/examples/quick/imageprovider/CMakeLists.txt b/examples/quick/imageprovider/CMakeLists.txt
index e3318b0755..a2fa3e5087 100644
--- a/examples/quick/imageprovider/CMakeLists.txt
+++ b/examples/quick/imageprovider/CMakeLists.txt
@@ -1,48 +1,36 @@
-# Generated from imageprovider.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(qmlimageproviderplugin LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/examples/quick/imageprovider)
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/imageprovider/ImageProviderCore")
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
+qt_standard_project_setup(REQUIRES 6.5)
qt6_add_qml_module(qmlimageproviderplugin
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/ImageProviderCore"
- VERSION 1.0
URI "ImageProviderCore"
- INSTALL_LOCATION ${INSTALL_EXAMPLEDIR}
+ PLUGIN_TARGET qmlimageproviderplugin
+ NO_PLUGIN_OPTIONAL
+ NO_GENERATE_PLUGIN_SOURCE
+ CLASS_NAME ImageProviderExtensionPlugin
+ SOURCES
+ imageprovider.cpp
)
-target_sources(qmlimageproviderplugin PRIVATE
- imageprovider.cpp
-)
-set_target_properties(qmlimageproviderplugin PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
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 2f380cb2de..d4cc2c923d 100644
--- a/examples/quick/imageprovider/doc/src/imageprovider.qdoc
+++ b/examples/quick/imageprovider/doc/src/imageprovider.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/imageprovider/imageprovider-example.qml b/examples/quick/imageprovider/imageprovider-example.qml
index fcda0ff3dc..5bd092bc2d 100644
--- a/examples/quick/imageprovider/imageprovider-example.qml
+++ b/examples/quick/imageprovider/imageprovider-example.qml
@@ -1,53 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+import QtQuick
import "ImageProviderCore" // import the plugin that registers the color image provider
//![0]
diff --git a/examples/quick/imageprovider/imageprovider.cpp b/examples/quick/imageprovider/imageprovider.cpp
index a606352cce..c7ec8536d3 100644
--- a/examples/quick/imageprovider/imageprovider.cpp
+++ b/examples/quick/imageprovider/imageprovider.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <qqmlextensionplugin.h>
diff --git a/examples/quick/imageresponseprovider/CMakeLists.txt b/examples/quick/imageresponseprovider/CMakeLists.txt
index 5f282a0fb9..52486af046 100644
--- a/examples/quick/imageresponseprovider/CMakeLists.txt
+++ b/examples/quick/imageresponseprovider/CMakeLists.txt
@@ -1,48 +1,43 @@
-# Generated from imageresponseprovider.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(qmlimageresponseproviderplugin LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/examples/quick/imageresponseprovider)
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/imageresponseprovider/ImageResponseProviderCore")
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
+qt_standard_project_setup(REQUIRES 6.5)
qt6_add_qml_module(qmlimageresponseproviderplugin
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/ImageResponseProviderCore"
- VERSION 1.0
URI "ImageResponseProviderCore"
- INSTALL_LOCATION ${INSTALL_EXAMPLEDIR}
+ PLUGIN_TARGET qmlimageresponseproviderplugin
+ NO_PLUGIN_OPTIONAL
+ NO_GENERATE_PLUGIN_SOURCE
+ CLASS_NAME ImageProviderExtensionPlugin
)
target_sources(qmlimageresponseproviderplugin PRIVATE
imageresponseprovider.cpp
)
+
set_target_properties(qmlimageresponseproviderplugin PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
+
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 a402033fd0..7d45057116 100644
--- a/examples/quick/imageresponseprovider/doc/src/imageresponseprovider.qdoc
+++ b/examples/quick/imageresponseprovider/doc/src/imageresponseprovider.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 Canonical Limited and/or its subsidiary(-ies)
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2015 Canonical Limited and/or its subsidiary(-ies)
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/imageresponseprovider/imageresponseprovider-example.qml b/examples/quick/imageresponseprovider/imageresponseprovider-example.qml
index 54305f0109..980e25fb5b 100644
--- a/examples/quick/imageresponseprovider/imageresponseprovider-example.qml
+++ b/examples/quick/imageresponseprovider/imageresponseprovider-example.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 Canonical Limited and/or its subsidiary(-ies)
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2015 Canonical Limited and/or its subsidiary(-ies)
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
import "ImageResponseProviderCore"
Column {
diff --git a/examples/quick/imageresponseprovider/imageresponseprovider.cpp b/examples/quick/imageresponseprovider/imageresponseprovider.cpp
index 4ab1090361..05b74d73a0 100644
--- a/examples/quick/imageresponseprovider/imageresponseprovider.cpp
+++ b/examples/quick/imageresponseprovider/imageresponseprovider.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 Canonical Limited and/or its subsidiary(-ies)
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2015 Canonical Limited and/or its subsidiary(-ies)
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <qqmlextensionplugin.h>
diff --git a/examples/quick/itemvariablerefreshrate/CMakeLists.txt b/examples/quick/itemvariablerefreshrate/CMakeLists.txt
new file mode 100644
index 0000000000..ca65a005e1
--- /dev/null
+++ b/examples/quick/itemvariablerefreshrate/CMakeLists.txt
@@ -0,0 +1,45 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(itemvariablerefreshrate LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(itemvariablerefreshrateexample
+ WIN32
+ MACOSX_BUNDLE
+ main.cpp
+)
+
+target_link_libraries(itemvariablerefreshrateexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+qt_add_qml_module(itemvariablerefreshrateexample
+ URI itemvariablerefreshrate
+ QML_FILES
+ "itemvariablerefreshrate.qml"
+ RESOURCES
+ "content/qt_logo.png"
+)
+
+install(TARGETS itemvariablerefreshrateexample
+ 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/content/qt_logo.png b/examples/quick/itemvariablerefreshrate/content/qt_logo.png
new file mode 100644
index 0000000000..30c621c9c6
--- /dev/null
+++ b/examples/quick/itemvariablerefreshrate/content/qt_logo.png
Binary files differ
diff --git a/examples/quick/itemvariablerefreshrate/doc/images/qml-itemvariablerefreshrate-example.png b/examples/quick/itemvariablerefreshrate/doc/images/qml-itemvariablerefreshrate-example.png
new file mode 100644
index 0000000000..592baa3a4a
--- /dev/null
+++ b/examples/quick/itemvariablerefreshrate/doc/images/qml-itemvariablerefreshrate-example.png
Binary files differ
diff --git a/examples/quick/itemvariablerefreshrate/doc/src/itemvariablerefreshrate.qdoc b/examples/quick/itemvariablerefreshrate/doc/src/itemvariablerefreshrate.qdoc
new file mode 100644
index 0000000000..51fbc2c523
--- /dev/null
+++ b/examples/quick/itemvariablerefreshrate/doc/src/itemvariablerefreshrate.qdoc
@@ -0,0 +1,37 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+/*!
+ \title Qt Quick Examples - Item Variable Refresh Rate
+ \example itemvariablerefreshrate
+ \image qml-itemvariablerefreshrate-example.png
+ \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
+ boost to performance if specific parts of a UI does not need to be re-rendered
+ every frame, but still require internal updates. Drawing parts that are static
+ most of the time or animations that does not have to run smoothly at all times
+ is a waste of resources. This property gives the user control over when the item
+ is drawn.
+
+ \note Using \l{Item Layers} may involve a performance penalty, depending on the size
+ of the layered item subtree, due to using separate render targets (textures),
+ which are then blended together in the main render pass.
+ Application designers should always evaluate the impact to ensure that the benefits
+ of using layers outweigh the potential disadvantages.
+
+ The example uses \l FrameAnimation to control how often the item is rendered.
+ Useful when you only want to e.g. every second frame.
+ Using something like a timer or other mechanics to toggle the flag is also valid.
+ \snippet itemvariablerefreshrate/itemvariablerefreshrate.qml frameAnimation
+ In the above snippet, the fps property is only there for visual demonstration purposes.
+
+ The item requires layer.enabled to be true, and then the item will
+ be rendered depending on the state of layer.live as shown in the below snippet.
+ \snippet itemvariablerefreshrate/itemvariablerefreshrate.qml item
+ Using modulo operator and a slider to set the value, we can dynamically change
+ how often the Qt logo is rendered.
+*/
diff --git a/examples/quick/itemvariablerefreshrate/itemvariablerefreshrate.pro b/examples/quick/itemvariablerefreshrate/itemvariablerefreshrate.pro
new file mode 100644
index 0000000000..7981d2492f
--- /dev/null
+++ b/examples/quick/itemvariablerefreshrate/itemvariablerefreshrate.pro
@@ -0,0 +1,8 @@
+TEMPLATE = app
+
+QT += quick qml
+SOURCES += main.cpp
+RESOURCES += itemvariablerefreshrate.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/itemvariablerefreshrate
+INSTALLS += target
diff --git a/examples/quick/itemvariablerefreshrate/itemvariablerefreshrate.qml b/examples/quick/itemvariablerefreshrate/itemvariablerefreshrate.qml
new file mode 100644
index 0000000000..2ef0cb4326
--- /dev/null
+++ b/examples/quick/itemvariablerefreshrate/itemvariablerefreshrate.qml
@@ -0,0 +1,85 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Rectangle {
+ id: root
+ width: 640
+ height: 480
+ visible: true
+
+ //! [frameAnimation]
+ FrameAnimation {
+ id: frameAnimation
+ property real fps: smoothFrameTime > 0 ? (1.0 / smoothFrameTime) : 0
+ running: true
+ }
+ //! [frameAnimation]
+
+
+ //! [item]
+ Item {
+ id: qt_logo
+ width: 230
+ height: 230
+ anchors.fill: parent
+ anchors.topMargin: 125
+ layer.enabled: true
+ layer.live: slider.value > 0 && frameAnimation.currentFrame % slider.value == 0
+ //! [item]
+
+ Rectangle {
+ id: rectangle
+ anchors.fill: parent
+ color: "black"
+ Image {
+ anchors.fill: parent
+ source: "content/qt_logo.png"
+ }
+
+ // one second is one full rotation
+ RotationAnimation on rotation {
+ loops: Animation.Infinite
+ duration: 1000
+ from: 0
+ to: 360
+ }
+ }
+ }
+
+ Column {
+ anchors.top: root.top
+ anchors.left: root.left
+ anchors.margins: 10
+
+ Label {
+ text: "FPS: " + frameAnimation.fps.toFixed(0)
+ font.pixelSize: 20
+ font.italic: true
+ }
+
+ Label {
+ text: "Rect rotation (degrees): " + rectangle.rotation.toFixed(0)
+ font.pixelSize: 20
+ font.italic: true
+ }
+
+ Row {
+ Label {
+ text: qsTr("Draw every " + slider.value.toFixed(0) + " frame")
+ font.pixelSize: 20
+ font.italic: true
+ }
+
+ Slider {
+ id: slider
+ from: 0
+ value: 1
+ to: 10
+ stepSize: 1
+ }
+ }
+ }
+}
diff --git a/examples/quick/itemvariablerefreshrate/itemvariablerefreshrate.qrc b/examples/quick/itemvariablerefreshrate/itemvariablerefreshrate.qrc
new file mode 100644
index 0000000000..c50b0da872
--- /dev/null
+++ b/examples/quick/itemvariablerefreshrate/itemvariablerefreshrate.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/qt/qml/itemvariablerefreshrate">
+ <file>itemvariablerefreshrate.qml</file>
+ <file>content/qt_logo.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/quick/itemvariablerefreshrate/main.cpp b/examples/quick/itemvariablerefreshrate/main.cpp
new file mode 100644
index 0000000000..078b9b4358
--- /dev/null
+++ b/examples/quick/itemvariablerefreshrate/main.cpp
@@ -0,0 +1,4 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#include "../shared/shared.h"
+DECLARATIVE_EXAMPLE_MAIN(itemvariablerefreshrate/itemvariablerefreshrate)
diff --git a/examples/quick/keyinteraction/CMakeLists.txt b/examples/quick/keyinteraction/CMakeLists.txt
index b62d6754d3..926e5e58a3 100644
--- a/examples/quick/keyinteraction/CMakeLists.txt
+++ b/examples/quick/keyinteraction/CMakeLists.txt
@@ -1,62 +1,51 @@
-# Generated from keyinteraction.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(keyinteraction LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/keyinteraction")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(keyinteraction
+qt_add_executable(keyinteractionexample WIN32 MACOSX_BUNDLE
main.cpp
)
-set_target_properties(keyinteraction PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(keyinteraction PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
+target_link_libraries(keyinteractionexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
# Resources:
-set(keyinteraction_resource_files
- "focus/Core/ContextMenu.qml"
- "focus/Core/GridMenu.qml"
- "focus/Core/ListMenu.qml"
- "focus/Core/ListViewDelegate.qml"
- "focus/Core/TabMenu.qml"
- "focus/Core/images/arrow.png"
- "focus/Core/images/qt-logo.png"
- "focus/focus.qml"
- "keyinteraction.qml"
+qt_add_qml_module(keyinteractionexample
+ URI keyinteraction
+ QML_FILES
+ "ContextMenu.qml"
+ "GridMenu.qml"
+ "ListMenu.qml"
+ "ListViewDelegate.qml"
+ "TabMenu.qml"
+ "focus.qml"
+ "keyinteraction.qml"
+ RESOURCES
+ "images/arrow.png"
+ "images/qt-logo.png"
)
-qt6_add_resources(keyinteraction "keyinteraction"
- PREFIX
- "/keyinteraction"
- FILES
- ${keyinteraction_resource_files}
+install(TARGETS keyinteractionexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS keyinteraction
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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
new file mode 100644
index 0000000000..22d149fd9d
--- /dev/null
+++ b/examples/quick/keyinteraction/ContextMenu.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+FocusScope {
+ id: container
+
+ required property Item keyRightTarget
+
+ property bool open: false
+
+ Item {
+ anchors.fill: parent
+
+ Rectangle {
+ anchors.fill: parent
+ color: "#D1DBBD"
+ focus: true
+ Keys.onRightPressed: container.keyRightTarget.focus = true
+
+ Text {
+ anchors {
+ top: parent.top
+ horizontalCenter: parent.horizontalCenter
+ margins: 30
+ }
+ color: "black"
+ font.pixelSize: 14
+ text: qsTr("Context Menu")
+ }
+ }
+ }
+}
diff --git a/examples/quick/keyinteraction/GridMenu.qml b/examples/quick/keyinteraction/GridMenu.qml
new file mode 100644
index 0000000000..b17a72bdc8
--- /dev/null
+++ b/examples/quick/keyinteraction/GridMenu.qml
@@ -0,0 +1,105 @@
+// 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
+ required property Item keyLeftTarget
+
+ Rectangle {
+ anchors.fill: parent
+ clip: true
+ gradient: Gradient {
+ 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
+ focus: true
+ model: 12
+
+ KeyNavigation.up: menu.keyUpTarget
+ KeyNavigation.down: menu.keyDownTarget
+ KeyNavigation.left: menu.keyLeftTarget
+
+ delegate: Item {
+ id: container
+
+ 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
+
+ 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
+
+ onClicked: {
+ container.GridView.view.currentIndex = container.index
+ container.forceActiveFocus()
+ }
+ }
+
+ states: State {
+ name: "active"
+ when: container.activeFocus
+ PropertyChanges {
+ content {
+ color: "#FCFFF5"
+ scale: 1.1
+ }
+ }
+ }
+
+ transitions: Transition {
+ NumberAnimation {
+ properties: "scale"
+ duration: 100
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quick/keyinteraction/ListMenu.qml b/examples/quick/keyinteraction/ListMenu.qml
new file mode 100644
index 0000000000..0f4763e1b2
--- /dev/null
+++ b/examples/quick/keyinteraction/ListMenu.qml
@@ -0,0 +1,122 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQml
+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
+ focus: true
+
+ KeyNavigation.up: menu.keyUpTarget
+ KeyNavigation.left: menu.keyLeftTarget
+ KeyNavigation.right: list2
+
+ model: 10
+ cacheBuffer: 200
+ delegate: ListViewDelegate {}
+
+ Behavior on y {
+ 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
+
+ KeyNavigation.up: menu.keyUpTarget
+ KeyNavigation.left: list1
+ KeyNavigation.right: list3
+
+ model: 10
+ cacheBuffer: 200
+ delegate: ListViewDelegate {}
+
+ Behavior on y {
+ 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
+
+ KeyNavigation.up: menu.keyUpTarget
+ KeyNavigation.left: list2
+
+ model: 10
+ cacheBuffer: 200
+ delegate: ListViewDelegate {}
+
+ Behavior on y {
+ NumberAnimation {
+ duration: 600
+ easing.type: Easing.OutQuint
+ }
+ }
+ }
+
+ Rectangle {
+ width: parent.width
+ height: 1
+ color: "#D1DBBD"
+ }
+
+ Rectangle {
+ y: 1
+ width: parent.width
+ height: 10
+ gradient: Gradient {
+ GradientStop {
+ position: 0.0
+ color: "#3E606F"
+ }
+ GradientStop {
+ position: 1.0
+ color: "transparent"
+ }
+ }
+ }
+
+ Rectangle {
+ y: parent.height - 10
+ width: parent.width
+ height: 10
+ gradient: Gradient {
+ 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
new file mode 100644
index 0000000000..8ae43c8ab5
--- /dev/null
+++ b/examples/quick/keyinteraction/ListViewDelegate.qml
@@ -0,0 +1,73 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: container
+ required property int index
+
+ 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
+ color: "transparent"
+ antialiasing: true
+ radius: 10
+
+ Rectangle {
+ anchors.fill: parent
+ anchors.margins: 3
+ color: "#91AA9D"
+ antialiasing: true
+ radius: 8
+ }
+ }
+
+ Text {
+ id: label
+
+ anchors.centerIn: content
+ text: qsTr("List element ") + (container.index + 1)
+ color: "#193441"
+ font.pixelSize: 14
+ }
+
+ MouseArea {
+ id: mouseArea
+
+ anchors.fill: parent
+ hoverEnabled: true
+
+ onClicked: {
+ container.ListView.view.currentIndex = container.index
+ container.forceActiveFocus()
+ }
+ }
+
+ states: State {
+ name: "active"
+ when: container.activeFocus
+ PropertyChanges {
+ content {
+ color: "#FCFFF5"
+ scale: 1.1
+ }
+ label.font.pixelSize: 16
+ }
+ }
+
+ transitions: Transition {
+ NumberAnimation {
+ properties: "scale"
+ duration: 100
+ }
+ }
+}
diff --git a/examples/quick/keyinteraction/TabMenu.qml b/examples/quick/keyinteraction/TabMenu.qml
new file mode 100644
index 0000000000..04451b3206
--- /dev/null
+++ b/examples/quick/keyinteraction/TabMenu.qml
@@ -0,0 +1,98 @@
+// 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
+ required property Item keyUpTarget
+ required property Item keyDownTarget
+
+ Rectangle {
+ anchors.fill: parent
+ clip: true
+ gradient: Gradient {
+ 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
+ Repeater {
+ activeFocusOnTab: false
+ model: 5
+ Item {
+ id: container
+
+ width: 152
+ height: 152
+ activeFocusOnTab: true
+ focus: true
+
+ KeyNavigation.up: menu.keyUpTarget
+ KeyNavigation.down: menu.keyDownTarget
+
+ Rectangle {
+ id: content
+ color: "transparent"
+ antialiasing: true
+ 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
+ }
+ }
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ hoverEnabled: true
+
+ onClicked: {
+ container.forceActiveFocus()
+ }
+ }
+
+ states: State {
+ name: "active"
+ when: container.activeFocus
+ PropertyChanges {
+ content {
+ color: "#FCFFF5"
+ scale: 1.1
+ }
+ }
+ }
+
+ transitions: Transition {
+ NumberAnimation {
+ properties: "scale"
+ duration: 100
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quick/keyinteraction/doc/src/keyinteraction.qdoc b/examples/quick/keyinteraction/doc/src/keyinteraction.qdoc
index 04824f91de..378169452c 100644
--- a/examples/quick/keyinteraction/doc/src/keyinteraction.qdoc
+++ b/examples/quick/keyinteraction/doc/src/keyinteraction.qdoc
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick Examples - Key Interaction
\example keyinteraction
\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
new file mode 100644
index 0000000000..42edcb5f01
--- /dev/null
+++ b/examples/quick/keyinteraction/focus.qml
@@ -0,0 +1,160 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQml
+import QtQuick
+
+Rectangle {
+ id: window
+
+ width: 800
+ height: 640
+ color: "#3E606F"
+
+ FocusScope {
+ id: mainView
+
+ width: parent.width
+ height: parent.height
+ focus: true
+
+ TabMenu {
+ id: tabMenu
+
+ y: 160
+ width: parent.width
+ height: 160
+
+ keyUpTarget: listMenu
+ keyDownTarget: gridMenu
+
+ focus: true
+ activeFocusOnTab: true
+
+ onActiveFocusChanged: {
+ if (activeFocus)
+ mainView.state = "showTabViews"
+ }
+ }
+
+ GridMenu {
+ id: gridMenu
+
+ y: 320
+ width: parent.width
+ height: 320
+ activeFocusOnTab: true
+
+ keyUpTarget: tabMenu
+ keyDownTarget: listMenu
+ keyLeftTarget: contextMenu
+
+ onActiveFocusChanged: {
+ if (activeFocus)
+ mainView.state = "showGridViews"
+ }
+ }
+
+ ListMenu {
+ id: listMenu
+
+ y: 640
+ width: parent.width
+ height: 320
+ activeFocusOnTab: true
+
+ keyUpTarget: gridMenu
+ keyLeftTarget: contextMenu
+
+ onActiveFocusChanged: {
+ if (activeFocus)
+ mainView.state = "showListViews"
+ }
+ }
+
+ Rectangle {
+ id: shade
+ anchors.fill: parent
+ color: "black"
+ opacity: 0
+ }
+
+ states: [
+ State {
+ name: "showTabViews"
+ PropertyChanges {
+ tabMenu.y: 160
+ gridMenu.y: 320
+ listMenu.y: 640
+ }
+ },
+
+ State {
+ name: "showGridViews"
+ PropertyChanges {
+ tabMenu.y: 0
+ gridMenu.y: 160
+ listMenu.y: 480
+ }
+ },
+
+ State {
+ name: "showListViews"
+ PropertyChanges {
+ tabMenu.y: -160
+ gridMenu.y: 0
+ listMenu.y: 320
+ }
+ }
+ ]
+
+ transitions: Transition {
+ NumberAnimation {
+ properties: "y"
+ duration: 600
+ easing.type: Easing.OutQuint
+ }
+ }
+ }
+
+ Image {
+ source: "images/arrow.png"
+ rotation: 90
+ anchors.verticalCenter: parent.verticalCenter
+
+ MouseArea {
+ anchors.fill: parent
+ anchors.margins: -10
+ onClicked: contextMenu.focus = true
+ }
+ }
+
+ ContextMenu {
+ keyRightTarget: mainView
+ id: contextMenu
+ x: -265
+ width: 260
+ height: parent.height
+ }
+
+ states: State {
+ name: "contextMenuOpen"
+ when: !mainView.activeFocus
+ PropertyChanges {
+ contextMenu {
+ x: 0
+ open: true
+ }
+ mainView.x: 130
+ shade.opacity: 0.25
+ }
+ }
+
+ transitions: Transition {
+ NumberAnimation {
+ properties: "x,opacity"
+ duration: 600
+ easing.type: Easing.OutQuint
+ }
+ }
+}
diff --git a/examples/quick/keyinteraction/focus/Core/ContextMenu.qml b/examples/quick/keyinteraction/focus/Core/ContextMenu.qml
deleted file mode 100644
index 31b5e1b83d..0000000000
--- a/examples/quick/keyinteraction/focus/Core/ContextMenu.qml
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-
-FocusScope {
- id: container
- required property Item keyRightTarget
-
- property bool open: false
-
- Item {
- anchors.fill: parent
-
- Rectangle {
- anchors.fill: parent
- color: "#D1DBBD"
- focus: true
- Keys.onRightPressed: container.keyRightTarget.focus = true
-
- Text {
- anchors { top: parent.top; horizontalCenter: parent.horizontalCenter; margins: 30 }
- color: "black"
- font.pixelSize: 14
- text: "Context Menu"
- }
- }
- }
-}
diff --git a/examples/quick/keyinteraction/focus/Core/GridMenu.qml b/examples/quick/keyinteraction/focus/Core/GridMenu.qml
deleted file mode 100644
index 78d6654957..0000000000
--- a/examples/quick/keyinteraction/focus/Core/GridMenu.qml
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-
-FocusScope {
- id: menu
- property alias interactive: gridView.interactive
- required property Item keyUpTarget
- required property Item keyDownTarget
- required property Item keyLeftTarget
-
- Rectangle {
- anchors.fill: parent
- clip: true
- gradient: Gradient {
- 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
- focus: true
- model: 12
-
- KeyNavigation.up: menu.keyUpTarget
- KeyNavigation.down: menu.keyDownTarget
- KeyNavigation.left: menu.keyLeftTarget
-
- delegate: Item {
- id: container
- width: GridView.view.cellWidth
- height: GridView.view.cellHeight
- required property int index
-
- Rectangle {
- id: content
- color: "transparent"
- antialiasing: true
- 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 }
- }
-
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- hoverEnabled: true
-
- onClicked: {
- container.GridView.view.currentIndex = container.index
- container.forceActiveFocus()
- }
- }
-
- states: State {
- name: "active"; when: container.activeFocus
- PropertyChanges { target: content; color: "#FCFFF5"; scale: 1.1 }
- }
-
- transitions: Transition {
- NumberAnimation { properties: "scale"; duration: 100 }
- }
- }
- }
- }
-}
diff --git a/examples/quick/keyinteraction/focus/Core/ListMenu.qml b/examples/quick/keyinteraction/focus/Core/ListMenu.qml
deleted file mode 100644
index 694ae3cac6..0000000000
--- a/examples/quick/keyinteraction/focus/Core/ListMenu.qml
+++ /dev/null
@@ -1,119 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQml 2.1
-import QtQuick 2.1
-
-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
- focus: true
- KeyNavigation.up: menu.keyUpTarget
- KeyNavigation.left: menu.keyLeftTarget
- KeyNavigation.right: list2
- model: 10; cacheBuffer: 200
- delegate: ListViewDelegate {}
-
- Behavior on y {
- 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
- KeyNavigation.up: menu.keyUpTarget
- KeyNavigation.left: list1
- KeyNavigation.right: list3
- model: 10; cacheBuffer: 200
- delegate: ListViewDelegate {}
-
- Behavior on y {
- 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
- KeyNavigation.up: menu.keyUpTarget
- KeyNavigation.left: list2
- model: 10; cacheBuffer: 200
- delegate: ListViewDelegate {}
-
- Behavior on y {
- NumberAnimation { duration: 600; easing.type: Easing.OutQuint }
- }
- }
-
- Rectangle { width: parent.width; height: 1; color: "#D1DBBD" }
-
- Rectangle {
- y: 1; width: parent.width; height: 10
- gradient: Gradient {
- GradientStop { position: 0.0; color: "#3E606F" }
- GradientStop { position: 1.0; color: "transparent" }
- }
- }
-
- Rectangle {
- y: parent.height - 10; width: parent.width; height: 10
- gradient: Gradient {
- GradientStop { position: 1.0; color: "#3E606F" }
- GradientStop { position: 0.0; color: "transparent" }
- }
- }
-}
diff --git a/examples/quick/keyinteraction/focus/Core/ListViewDelegate.qml b/examples/quick/keyinteraction/focus/Core/ListViewDelegate.qml
deleted file mode 100644
index 5a2957eab0..0000000000
--- a/examples/quick/keyinteraction/focus/Core/ListViewDelegate.qml
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-
-Item {
- id: container
- required property int index
-
- 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
- color: "transparent"
- antialiasing: true
- radius: 10
-
- 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)
- color: "#193441"
- font.pixelSize: 14
- }
-
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- hoverEnabled: true
-
- onClicked: {
- container.ListView.view.currentIndex = container.index
- container.forceActiveFocus()
- }
- }
-
- states: State {
- name: "active"; when: container.activeFocus
- PropertyChanges { target: content; color: "#FCFFF5"; scale: 1.1 }
- PropertyChanges { target: label; font.pixelSize: 16 }
- }
-
- transitions: Transition {
- NumberAnimation { properties: "scale"; duration: 100 }
- }
-}
diff --git a/examples/quick/keyinteraction/focus/Core/TabMenu.qml b/examples/quick/keyinteraction/focus/Core/TabMenu.qml
deleted file mode 100644
index 11b3d005c3..0000000000
--- a/examples/quick/keyinteraction/focus/Core/TabMenu.qml
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.1
-
-FocusScope {
- id: menu
- required property Item keyUpTarget
- required property Item keyDownTarget
-
- Rectangle {
- anchors.fill: parent
- clip: true
- gradient: Gradient {
- 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
- Repeater {
- activeFocusOnTab: false
- model: 5
- Item {
- id: container
- width: 152; height: 152
- activeFocusOnTab: true
- focus: true
-
- KeyNavigation.up: menu.keyUpTarget
- KeyNavigation.down: menu.keyDownTarget
-
- Rectangle {
- id: content
- color: "transparent"
- antialiasing: true
- 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 }
- }
-
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- hoverEnabled: true
-
- onClicked: {
- container.forceActiveFocus()
- }
- }
-
- states: State {
- name: "active"; when: container.activeFocus
- PropertyChanges { target: content; color: "#FCFFF5"; scale: 1.1 }
- }
-
- transitions: Transition {
- NumberAnimation { properties: "scale"; duration: 100 }
- }
- }
- }
- }
- }
-}
diff --git a/examples/quick/keyinteraction/focus/focus.qml b/examples/quick/keyinteraction/focus/focus.qml
deleted file mode 100644
index 9db9ab48bc..0000000000
--- a/examples/quick/keyinteraction/focus/focus.qml
+++ /dev/null
@@ -1,177 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQml 2.1
-import QtQuick 2.1
-import "Core"
-
-Rectangle {
- id: window
-
- width: 800; height: 640
- color: "#3E606F"
-
- FocusScope {
- id: mainView
-
- width: parent.width; height: parent.height
- focus: true
-
- TabMenu {
- id: tabMenu
- y: 160; width: parent.width; height: 160
-
- keyUpTarget: listMenu
- keyDownTarget: gridMenu
-
- focus: true
- activeFocusOnTab: true
-
- onActiveFocusChanged: {
- if (activeFocus)
- mainView.state = "showTabViews"
- }
- }
-
- GridMenu {
- id: gridMenu
- y: 320; width: parent.width; height: 320
- activeFocusOnTab: true
-
- keyUpTarget: tabMenu
- keyDownTarget: listMenu
- keyLeftTarget: contextMenu
-
- onActiveFocusChanged: {
- if (activeFocus)
- mainView.state = "showGridViews"
- }
- }
-
- ListMenu {
- id: listMenu
- y: 640; width: parent.width; height: 320
- activeFocusOnTab: true
-
- keyUpTarget: gridMenu
- keyLeftTarget: contextMenu
-
- onActiveFocusChanged: {
- if (activeFocus)
- mainView.state = "showListViews"
- }
- }
-
- Rectangle {
- id: shade
- anchors.fill: parent
- color: "black"
- opacity: 0
- }
-
- states: [
- State {
- name: "showTabViews"
- PropertyChanges { target: tabMenu; y: 160 }
- PropertyChanges { target: gridMenu; y: 320 }
- PropertyChanges { target: listMenu; y: 640 }
- },
-
- State {
- name: "showGridViews"
- PropertyChanges { target: tabMenu; y: 0 }
- PropertyChanges { target: gridMenu; y: 160 }
- PropertyChanges { target: listMenu; y: 480 }
- },
-
- State {
- name: "showListViews"
- PropertyChanges { target: tabMenu; y: -160 }
- PropertyChanges { target: gridMenu; y: 0 }
- PropertyChanges { target: listMenu; y: 320 }
- }
- ]
-
- transitions: Transition {
- NumberAnimation { properties: "y"; duration: 600; easing.type: Easing.OutQuint }
- }
- }
-
- Image {
- source: "Core/images/arrow.png"
- rotation: 90
- anchors.verticalCenter: parent.verticalCenter
-
- MouseArea {
- anchors.fill: parent; anchors.margins: -10
- onClicked: contextMenu.focus = true
- }
- }
-
- ContextMenu {
- keyRightTarget: mainView
- id: contextMenu
- x: -265
- width: 260
- height: parent.height
- }
-
- states: State {
- name: "contextMenuOpen"
- when: !mainView.activeFocus
- PropertyChanges { target: contextMenu; x: 0; open: true }
- PropertyChanges { target: mainView; x: 130 }
- PropertyChanges { target: shade; opacity: 0.25 }
- }
-
- transitions: Transition {
- NumberAnimation { properties: "x,opacity"; duration: 600; easing.type: Easing.OutQuint }
- }
-}
diff --git a/examples/quick/keyinteraction/focus/Core/images/arrow.png b/examples/quick/keyinteraction/images/arrow.png
index 20ee200f5f..20ee200f5f 100644
--- a/examples/quick/keyinteraction/focus/Core/images/arrow.png
+++ b/examples/quick/keyinteraction/images/arrow.png
Binary files differ
diff --git a/examples/quick/keyinteraction/focus/Core/images/qt-logo.png b/examples/quick/keyinteraction/images/qt-logo.png
index 14ddf2a028..14ddf2a028 100644
--- a/examples/quick/keyinteraction/focus/Core/images/qt-logo.png
+++ b/examples/quick/keyinteraction/images/qt-logo.png
Binary files differ
diff --git a/examples/quick/keyinteraction/keyinteraction.qml b/examples/quick/keyinteraction/keyinteraction.qml
index 7fa3078803..afae2d74d8 100644
--- a/examples/quick/keyinteraction/keyinteraction.qml
+++ b/examples/quick/keyinteraction/keyinteraction.qml
@@ -1,57 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.1
+import QtQuick
Loader {//Just loader, since there's only one.
- source: "focus/focus.qml"
+ source: "focus.qml"
focus: true
// Exception to the standard sizing, because this is primarily a desktop
// example and it benefits from being able to see everything at once.
diff --git a/examples/quick/keyinteraction/keyinteraction.qrc b/examples/quick/keyinteraction/keyinteraction.qrc
index c719654835..3193e39083 100644
--- a/examples/quick/keyinteraction/keyinteraction.qrc
+++ b/examples/quick/keyinteraction/keyinteraction.qrc
@@ -1,13 +1,13 @@
<RCC>
- <qresource prefix="/keyinteraction">
+ <qresource prefix="/qt/qml/keyinteraction">
<file>keyinteraction.qml</file>
- <file>focus/focus.qml</file>
- <file>focus/Core/images/arrow.png</file>
- <file>focus/Core/images/qt-logo.png</file>
- <file>focus/Core/ContextMenu.qml</file>
- <file>focus/Core/GridMenu.qml</file>
- <file>focus/Core/ListMenu.qml</file>
- <file>focus/Core/ListViewDelegate.qml</file>
- <file>focus/Core/TabMenu.qml</file>
+ <file>focus.qml</file>
+ <file>ContextMenu.qml</file>
+ <file>GridMenu.qml</file>
+ <file>ListMenu.qml</file>
+ <file>ListViewDelegate.qml</file>
+ <file>TabMenu.qml</file>
+ <file>images/arrow.png</file>
+ <file>images/qt-logo.png</file>
</qresource>
</RCC>
diff --git a/examples/quick/keyinteraction/main.cpp b/examples/quick/keyinteraction/main.cpp
index 53d26fb9b5..09f3088060 100644
--- a/examples/quick/keyinteraction/main.cpp
+++ b/examples/quick/keyinteraction/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../shared/shared.h"
DECLARATIVE_EXAMPLE_MAIN(keyinteraction/keyinteraction)
diff --git a/examples/quick/layouts/CMakeLists.txt b/examples/quick/layouts/CMakeLists.txt
index e87ef25e92..2979b8173d 100644
--- a/examples/quick/layouts/CMakeLists.txt
+++ b/examples/quick/layouts/CMakeLists.txt
@@ -1,54 +1,43 @@
-# Generated from layouts.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(layouts LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/layouts")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(layouts
+qt_add_executable(layoutsexample
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(layouts PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(layouts PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
+qt_add_qml_module(layoutsexample
+ URI layouts
+ QML_FILES
+ "layouts.qml"
+)
-# Resources:
-set(layouts_resource_files
- "layouts.qml"
+target_link_libraries(layoutsexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(layouts "layouts"
- PREFIX
- "/layouts"
- FILES
- ${layouts_resource_files}
+install(TARGETS layoutsexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS layouts
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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 deb1d62b2b..a7b021f1f9 100644
--- a/examples/quick/layouts/doc/src/qtquicklayouts-examples.qdoc
+++ b/examples/quick/layouts/doc/src/qtquicklayouts-examples.qdoc
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick Layouts - Basic Example
\example layouts
\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 8a1cb20d22..92fe305559 100644
--- a/examples/quick/layouts/layouts.qml
+++ b/examples/quick/layouts/layouts.qml
@@ -1,63 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.2
-import QtQuick.Controls 2.12
-import QtQuick.Layouts 1.3
+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
@@ -73,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 {
@@ -102,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
@@ -124,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
@@ -151,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/layouts/layouts.qrc b/examples/quick/layouts/layouts.qrc
index 1e01c43fe1..eddf00069e 100644
--- a/examples/quick/layouts/layouts.qrc
+++ b/examples/quick/layouts/layouts.qrc
@@ -1,5 +1,5 @@
<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/layouts">
+<qresource prefix="/qt/qml/layouts">
<file>layouts.qml</file>
</qresource>
</RCC>
diff --git a/examples/quick/layouts/main.cpp b/examples/quick/layouts/main.cpp
index ef3e27a799..92385c4b11 100644
--- a/examples/quick/layouts/main.cpp
+++ b/examples/quick/layouts/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QQmlApplicationEngine>
@@ -56,7 +9,7 @@ int main(int argc, char* argv[])
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
- engine.load(QUrl(QStringLiteral("qrc:///layouts/layouts.qml")));
+ engine.load(QUrl(QStringLiteral("qrc:/qt/qml/layouts/layouts.qml")));
return app.exec();
}
diff --git a/examples/quick/localstorage/CMakeLists.txt b/examples/quick/localstorage/CMakeLists.txt
index 913f64dd1b..cf39d98c20 100644
--- a/examples/quick/localstorage/CMakeLists.txt
+++ b/examples/quick/localstorage/CMakeLists.txt
@@ -1,3 +1,47 @@
-# Generated from localstorage.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-add_subdirectory(localstorage)
+cmake_minimum_required(VERSION 3.16)
+project(localstorage LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(localstorageexample
+ WIN32
+ MACOSX_BUNDLE
+ main.cpp
+)
+
+qt_add_qml_module(localstorageexample
+ URI localstorage
+ QML_FILES
+ "Database.js"
+ "Header.qml"
+ "MyDelegate.qml"
+ "MyModel.qml"
+ "localstorage.qml"
+ )
+
+target_link_libraries(localstorageexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+install(TARGETS localstorageexample
+ 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
new file mode 100644
index 0000000000..dd66ce8246
--- /dev/null
+++ b/examples/quick/localstorage/Database.js
@@ -0,0 +1,73 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+function dbInit()
+{
+ 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)')
+ })
+ } catch (err) {
+ console.log("Error creating table in database: " + err)
+ };
+}
+
+function dbGetHandle()
+{
+ try {
+ var db = LocalStorage.openDatabaseSync("Activity_Tracker_DB", "",
+ "Track exercise", 1000000)
+ } catch (err) {
+ console.log("Error opening database: " + err)
+ }
+ return db
+}
+
+function dbInsert(Pdate, Pdesc, Pdistance)
+{
+ let db = dbGetHandle()
+ let rowid = 0;
+ db.transaction(function (tx) {
+ tx.executeSql('INSERT INTO trip_log VALUES(?, ?, ?)',
+ [Pdate, Pdesc, Pdistance])
+ let result = tx.executeSql('SELECT last_insert_rowid()')
+ rowid = result.insertId
+ })
+ return rowid;
+}
+
+function dbReadAll()
+{
+ let db = dbGetHandle()
+ db.transaction(function (tx) {
+ 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: " ",
+ date: results.rows.item(i).date,
+ trip_desc: results.rows.item(i).trip_desc,
+ distance: results.rows.item(i).distance
+ })
+ }
+ })
+}
+
+function dbUpdate(Pdate, Pdesc, Pdistance, Prowid)
+{
+ let db = dbGetHandle()
+ db.transaction(function (tx) {
+ tx.executeSql(
+ 'update trip_log set date=?, trip_desc=?, distance=? where rowid = ?', [Pdate, Pdesc, Pdistance, Prowid])
+ })
+}
+
+function dbDeleteRow(Prowid)
+{
+ 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
new file mode 100644
index 0000000000..a539452844
--- /dev/null
+++ b/examples/quick/localstorage/Header.qml
@@ -0,0 +1,167 @@
+// 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.LocalStorage
+import "Database.js" as JS
+
+Item {
+ id: root
+ required property ListView listView
+ signal statusMessage(string msg)
+
+ width: Screen.width / 2
+ height: Screen.height / 7
+ enabled: false
+
+ function insertrec() {
+ const rowid = parseInt(JS.dbInsert(dateInput.text, descInput.text, distInput.text), 10)
+ if (rowid) {
+ listView.model.setProperty(listView.currentIndex, "id", rowid)
+ listView.forceLayout()
+ }
+ return rowid;
+ }
+
+ function editrec(Pdate, Pdesc, Pdistance, Prowid) {
+ dateInput.text = Pdate
+ descInput.text = Pdesc
+ distInput.text = Pdistance
+ }
+
+ function initrec_new() {
+ dateInput.clear()
+ descInput.clear()
+ distInput.clear()
+ listView.model.insert(0, {
+ date: "",
+ trip_desc: "",
+ distance: 0
+ })
+ listView.currentIndex = 0
+ dateInput.forceActiveFocus()
+ }
+
+ function initrec() {
+ dateInput.clear()
+ descInput.clear()
+ distInput.clear()
+ }
+
+ function setlistview() {
+ listView.model.setProperty(listView.currentIndex, "date",
+ dateInput.text)
+ listView.model.setProperty(listView.currentIndex, "trip_desc",
+ descInput.text)
+ listView.model.setProperty(listView.currentIndex, "distance",
+ parseInt(distInput.text,10))
+ }
+
+ Rectangle {
+ id: rootrect
+ border.width: 10
+ color: "#161616"
+
+ ColumnLayout {
+ id: mainLayout
+ anchors.fill: parent
+
+ Rectangle {
+ id: gridBox
+ Layout.fillWidth: true
+
+ GridLayout {
+ id: gridLayout
+ rows: 3
+ flow: GridLayout.TopToBottom
+ anchors.fill: parent
+
+ Label {
+ text: qsTr("Date")
+ font.pixelSize: 22
+ rightPadding: 10
+ }
+
+ Label {
+ text: qsTr("Description")
+ font.pixelSize: 22
+ rightPadding: 10
+ }
+
+ Label {
+ text: qsTr("Distance")
+ font.pixelSize: 22
+ }
+
+ TextField {
+ id: dateInput
+ font.pixelSize: 22
+ activeFocusOnPress: true
+ activeFocusOnTab: true
+ Layout.fillWidth: false
+
+ ToolTip {
+ x: parent.width + 3
+ y: (parent.height - height) / 2
+ text: qsTr("Date format = 'YYYY-MM-DD'")
+ visible: dateInput.enabled && dateInput.hovered
+ delay: 1000
+ }
+
+ validator: RegularExpressionValidator {
+ regularExpression: /\d{4}[,.:/-]\d\d?[,.:/-]\d\d?/
+ }
+
+ onFocusChanged: function() {
+ if (!dateInput.focus && !acceptableInput && root.enabled)
+ root.statusMessage(qsTr("Please fill in the date"));
+ }
+
+ onEditingFinished: function() {
+ const regex = /(\d+)[,.:/-](\d+)[,.:/-](\d+)/
+ if (dateInput.text.match(regex))
+ dateInput.text = dateInput.text.replace(regex, '$1-$2-$3')
+ }
+ }
+
+ TextField {
+ id: descInput
+ property string oldString
+ font.pixelSize: 22
+ activeFocusOnPress: true
+ activeFocusOnTab: true
+ 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}/
+ }
+ 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"))
+ }
+ }
+ }
+ }
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: dateInput.forceActiveFocus()
+ }
+}
diff --git a/examples/quick/localstorage/MyDelegate.qml b/examples/quick/localstorage/MyDelegate.qml
new file mode 100644
index 0000000000..94f78b5ed6
--- /dev/null
+++ b/examples/quick/localstorage/MyDelegate.qml
@@ -0,0 +1,69 @@
+// 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: delegate
+
+ required property int index
+ required property int distance
+ required property string trip_desc
+ required property string date
+
+ 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
+ color: Qt.lighter(color)
+ }
+ radius: 5
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: delegate.clicked()
+ }
+
+ RowLayout {
+ anchors.fill: parent
+
+ Label {
+ id: rDate
+ Layout.preferredWidth: 42
+ Layout.alignment: Qt.AlignCenter
+ horizontalAlignment: Text.AlignHCenter
+ text: delegate.date
+ font.pixelSize: 22
+ color: "black"
+ }
+
+ Label {
+ Layout.preferredWidth: 42
+ Layout.alignment: Qt.AlignCenter
+ horizontalAlignment: Text.AlignHCenter
+ text: delegate.trip_desc
+ font.pixelSize: 22
+ color: "black"
+ }
+
+ Label {
+ Layout.preferredWidth: 42
+ Layout.alignment: Qt.AlignCenter
+ horizontalAlignment: Text.AlignHCenter
+ text: delegate.distance
+ font.pixelSize: 22
+ color: "black"
+ }
+ }
+ }
+}
diff --git a/examples/quick/localstorage/MyModel.qml b/examples/quick/localstorage/MyModel.qml
new file mode 100644
index 0000000000..7a1fc5b0da
--- /dev/null
+++ b/examples/quick/localstorage/MyModel.qml
@@ -0,0 +1,11 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.LocalStorage
+import "Database.js" as JS
+
+ListModel {
+ id: listModel
+ Component.onCompleted: JS.dbReadAll()
+}
diff --git a/examples/quick/localstorage/doc/src/localstorage.qdoc b/examples/quick/localstorage/doc/src/localstorage.qdoc
index 144edae2f5..e9596987dc 100644
--- a/examples/quick/localstorage/doc/src/localstorage.qdoc
+++ b/examples/quick/localstorage/doc/src/localstorage.qdoc
@@ -1,32 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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.pro b/examples/quick/localstorage/localstorage.pro
index dd2eb80250..9709733c13 100644
--- a/examples/quick/localstorage/localstorage.pro
+++ b/examples/quick/localstorage/localstorage.pro
@@ -1,2 +1,9 @@
-TEMPLATE = subdirs
-SUBDIRS += localstorage
+TEMPLATE = app
+
+QT += quick qml
+SOURCES += main.cpp
+RESOURCES += \
+ localstorage.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/localstorage
+INSTALLS += target
diff --git a/examples/quick/localstorage/localstorage.qml b/examples/quick/localstorage/localstorage.qml
new file mode 100644
index 0000000000..3bed3e99df
--- /dev/null
+++ b/examples/quick/localstorage/localstorage.qml
@@ -0,0 +1,239 @@
+// 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.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"
+
+ Rectangle {
+ anchors.fill: parent
+
+ ColumnLayout {
+ anchors.fill: parent
+ anchors.margins: 10
+
+ Header {
+ id: input
+ Layout.fillWidth: true
+ listView: listView
+ enabled: window.creatingNewEntry || window.editingEntry
+ }
+
+ RowLayout {
+ Button {
+ text: qsTr("New")
+ Layout.fillWidth: false
+ onClicked: {
+ input.initrec_new()
+ window.creatingNewEntry = true
+ listView.model.setProperty(listView.currentIndex, "id", 0)
+ }
+ }
+ Button {
+ id: saveButton
+ enabled: (window.creatingNewEntry || window.editingEntry) && listView.currentIndex !== -1
+ text: qsTr("Save")
+ Layout.fillWidth: false
+ onClicked: {
+ let insertedRow = false;
+ if (listView.model.get(listView.currentIndex).id < 1) {
+ //insert mode
+ if (input.insertrec()) {
+ // Successfully inserted a row.
+ input.setlistview()
+ insertedRow = true
+ } else {
+ // Failed to insert a row; display an error message.
+ statustext.displayWarning(qsTr("Failed to insert row"))
+ }
+ } else {
+ // edit mode
+ input.setlistview()
+ JS.dbUpdate(listView.model.get(listView.currentIndex).date,
+ listView.model.get(listView.currentIndex).trip_desc,
+ listView.model.get(listView.currentIndex).distance,
+ listView.model.get(listView.currentIndex).id)
+ }
+
+ if (insertedRow) {
+ input.initrec()
+ window.creatingNewEntry = false
+ window.editingEntry = false
+ listView.forceLayout()
+ }
+ }
+ }
+ Button {
+ id: editButton
+ text: qsTr("Edit")
+ 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,
+ listView.model.get(listView.currentIndex).distance,
+ listView.model.get(listView.currentIndex).id)
+
+ window.editingEntry = true
+ }
+ }
+ Button {
+ id: deleteButton
+ text: qsTr("Delete")
+ 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) {
+ // ListView doesn't automatically set its currentIndex to -1
+ // when the count becomes 0.
+ listView.currentIndex = -1
+ }
+ }
+ }
+ Button {
+ id: cancelButton
+ text: qsTr("Cancel")
+ 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
+ // been saved to the database yet, so we can safely remove it from the model.
+ listView.model.remove(listView.currentIndex, 1)
+ }
+ listView.forceLayout()
+ window.creatingNewEntry = false
+ window.editingEntry = false
+ input.initrec()
+ }
+ }
+ Button {
+ text: qsTr("Exit")
+ Layout.fillWidth: false
+ onClicked: Qt.quit()
+ }
+ }
+ Item {
+ Layout.fillWidth: true
+ Layout.preferredHeight: 5
+ }
+ Label {
+ Layout.alignment: Qt.AlignCenter
+ text: qsTr("Saved activities")
+ font.pointSize: 15
+ }
+ Component {
+ id: highlightBar
+ Rectangle {
+ width: listView.currentItem?.width ?? implicitWidth
+ height: listView.currentItem?.height ?? implicitHeight
+ color: "lightgreen"
+ }
+ }
+ ListView {
+ id: listView
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ model: MyModel {}
+ delegate: MyDelegate {
+ width: listView.width
+ onClicked: ()=> listView.currentIndex = index
+ }
+ // Don't allow changing the currentIndex while the user is creating/editing values.
+ enabled: !window.creatingNewEntry && !window.editingEntry
+
+ highlight: highlightBar
+ highlightFollowsCurrentItem: true
+ focus: true
+ clip: true
+
+ header: Component {
+ RowLayout {
+ width: ListView.view.width
+ Repeater {
+ 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
+ bold: true
+ underline: true
+ }
+ padding: 12
+ horizontalAlignment: Label.AlignHCenter
+ }
+ }
+ }
+ }
+ }
+ Label {
+ id: statustext
+ color: "red"
+ font.bold: true
+ font.pointSize: 20
+ opacity: 0.0
+ visible: opacity > 0 // properly cull item if effectively invisible
+ Layout.alignment: Layout.Center
+
+ function displayWarning(text) {
+ statustext.text = text
+ statusAnim.restart()
+ }
+
+ Connections {
+ target: input
+ function onStatusMessage(msg) { statustext.displayWarning(msg); }
+ }
+
+ SequentialAnimation {
+ id: statusAnim
+
+ OpacityAnimator {
+ target: statustext
+ from: 0.0
+ to: 1.0
+ duration: 50
+ }
+
+ PauseAnimation {
+ duration: 2000
+ }
+
+ OpacityAnimator {
+ target: statustext
+ from: 1.0
+ to: 0.0
+ duration: 50
+ }
+ }
+ }
+ }
+ }
+ Component.onCompleted: {
+ JS.dbInit()
+ }
+}
diff --git a/examples/quick/localstorage/localstorage.qrc b/examples/quick/localstorage/localstorage.qrc
new file mode 100644
index 0000000000..3950613c7a
--- /dev/null
+++ b/examples/quick/localstorage/localstorage.qrc
@@ -0,0 +1,9 @@
+<RCC>
+ <qresource prefix="/qt/qml/localstorage">
+ <file>Header.qml</file>
+ <file>Database.js</file>
+ <file>MyModel.qml</file>
+ <file>MyDelegate.qml</file>
+ <file>localstorage.qml</file>
+ </qresource>
+</RCC>
diff --git a/examples/quick/localstorage/localstorage/CMakeLists.txt b/examples/quick/localstorage/localstorage/CMakeLists.txt
deleted file mode 100644
index bfb304b1cc..0000000000
--- a/examples/quick/localstorage/localstorage/CMakeLists.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-# Generated from localstorage.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(localstorage LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/localstorage/localstorage")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(localstorage
- main.cpp
-)
-set_target_properties(localstorage PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(localstorage PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(localstorage_resource_files
- "Database.js"
- "Header.qml"
- "MyDelegate.qml"
- "MyModel.qml"
- "localstorage.qml"
-)
-
-qt6_add_resources(localstorage "localstorage"
- PREFIX
- "/"
- FILES
- ${localstorage_resource_files}
-)
-
-install(TARGETS localstorage
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/quick/localstorage/localstorage/Database.js b/examples/quick/localstorage/localstorage/Database.js
deleted file mode 100644
index 6ad684a2bb..0000000000
--- a/examples/quick/localstorage/localstorage/Database.js
+++ /dev/null
@@ -1,120 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-function dbInit()
-{
- var 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)')
- })
- } catch (err) {
- console.log("Error creating table in database: " + err)
- };
-}
-
-function dbGetHandle()
-{
- try {
- var db = LocalStorage.openDatabaseSync("Activity_Tracker_DB", "",
- "Track exercise", 1000000)
- } catch (err) {
- console.log("Error opening database: " + err)
- }
- return db
-}
-
-function dbInsert(Pdate, Pdesc, Pdistance)
-{
- var db = dbGetHandle()
- var rowid = 0;
- db.transaction(function (tx) {
- tx.executeSql('INSERT INTO trip_log VALUES(?, ?, ?)',
- [Pdate, Pdesc, Pdistance])
- var result = tx.executeSql('SELECT last_insert_rowid()')
- rowid = result.insertId
- })
- return rowid;
-}
-
-function dbReadAll()
-{
- var 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++) {
- listModel.append({
- id: results.rows.item(i).rowid,
- checked: " ",
- date: results.rows.item(i).date,
- trip_desc: results.rows.item(i).trip_desc,
- distance: results.rows.item(i).distance
- })
- }
- })
-}
-
-function dbUpdate(Pdate, Pdesc, Pdistance, Prowid)
-{
- var db = dbGetHandle()
- db.transaction(function (tx) {
- tx.executeSql(
- 'update trip_log set date=?, trip_desc=?, distance=? where rowid = ?', [Pdate, Pdesc, Pdistance, Prowid])
- })
-}
-
-function dbDeleteRow(Prowid)
-{
- var db = dbGetHandle()
- db.transaction(function (tx) {
- tx.executeSql('delete from trip_log where rowid = ?', [Prowid])
- })
-}
diff --git a/examples/quick/localstorage/localstorage/Header.qml b/examples/quick/localstorage/localstorage/Header.qml
deleted file mode 100644
index 3328a88559..0000000000
--- a/examples/quick/localstorage/localstorage/Header.qml
+++ /dev/null
@@ -1,212 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Layouts
-import QtQuick.LocalStorage
-import "Database.js" as JS
-
-Item {
- id: root
- width: Screen.width / 2
- height: Screen.height / 7
-
- required property ListView listView
- signal statusMessage(string msg)
- enabled: false
-
- function insertrec() {
- var rowid = parseInt(JS.dbInsert(dateInput.text, descInput.text, distInput.text), 10)
- if (rowid) {
- listView.model.setProperty(listView.currentIndex, "id", rowid)
- listView.forceLayout()
- }
- return rowid;
- }
-
- function editrec(Pdate, Pdesc, Pdistance, Prowid) {
- dateInput.text = Pdate
- descInput.text = Pdesc
- distInput.text = Pdistance
- }
-
- function initrec_new() {
- dateInput.clear()
- descInput.clear()
- distInput.clear()
- listView.model.insert(0, {
- date: "",
- trip_desc: "",
- distance: 0
- })
- listView.currentIndex = 0
- dateInput.forceActiveFocus()
- }
-
- function initrec() {
- dateInput.clear()
- descInput.clear()
- distInput.clear()
- }
-
- function setlistview() {
- listView.model.setProperty(listView.currentIndex, "date",
- dateInput.text)
- listView.model.setProperty(listView.currentIndex, "trip_desc",
- descInput.text)
- listView.model.setProperty(listView.currentIndex, "distance",
- parseInt(distInput.text,10))
- }
-
- Rectangle {
- id: rootrect
- border.width: 10
- color: "#161616"
-
- ColumnLayout {
- id: mainLayout
- anchors.fill: parent
-
- Rectangle {
- id: gridBox
- Layout.fillWidth: true
-
- GridLayout {
- id: gridLayout
- rows: 3
- flow: GridLayout.TopToBottom
- anchors.fill: parent
-
- Label {
- text: qsTr("Date")
- font.pixelSize: 22
- rightPadding: 10
- }
-
- Label {
- text: qsTr("Description")
- font.pixelSize: 22
- rightPadding: 10
- }
-
- Label {
- text: qsTr("Distance")
- font.pixelSize: 22
- }
-
- TextField {
- id: dateInput
- font.pixelSize: 22
- activeFocusOnPress: true
- activeFocusOnTab: true
-
- ToolTip {
- parent: dateInput
- x: parent.width + 3
- y: (parent.height - height) / 2
- text: qsTr("Date format = 'YYYY-MM-DD'")
- visible: parent.enabled && parent.hovered
- delay: 1000
- }
-
- validator: RegularExpressionValidator {
- regularExpression: /\d{4}[,.:/-]\d\d?[,.:/-]\d\d?/
- }
-
- onFocusChanged: ()=> {
- if (!dateInput.focus && !acceptableInput && root.enabled)
- root.statusMessage(qsTr("Please fill in the date"));
- }
-
- onEditingFinished: ()=> {
- let regex = /(\d+)[,.:/-](\d+)[,.:/-](\d+)/
- if (dateInput.text.match(regex))
- dateInput.text = dateInput.text.replace(regex, '$1-$2-$3')
- }
- }
-
- TextField {
- id: descInput
- 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)
- root.statusMessage(qsTr("Enter a description of minimum 8 characters"))
- }
- }
-
- TextField {
- id: distInput
- font.pixelSize: 22
- activeFocusOnPress: true
- activeFocusOnTab: true
- 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)
- root.statusMessage(qsTr("Please fill in the distance"))
- }
- }
- }
- }
- }
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: dateInput.forceActiveFocus()
- }
-}
diff --git a/examples/quick/localstorage/localstorage/MyDelegate.qml b/examples/quick/localstorage/localstorage/MyDelegate.qml
deleted file mode 100644
index b715882ab4..0000000000
--- a/examples/quick/localstorage/localstorage/MyDelegate.qml
+++ /dev/null
@@ -1,116 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-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
- required property string date
-
- signal clicked()
-
- Rectangle {
- id: baseRec
- anchors.fill: parent
- opacity: 0.8
- color: delegate.index % 2 ? "lightgrey" : "grey"
- border.width: 2
- border.color: Qt.lighter(color)
- radius: 5
-
- MouseArea {
- anchors.fill: parent
- onClicked: delegate.clicked()
- }
-
- RowLayout {
- anchors.fill: parent
-
- Label {
- id: rDate
- Layout.preferredWidth: 42
- Layout.alignment: Qt.AlignCenter
- horizontalAlignment: Text.AlignHCenter
- text: delegate.date
- font.pixelSize: 22
- color: "black"
- }
-
- Label {
- Layout.preferredWidth: 42
- Layout.alignment: Qt.AlignCenter
- horizontalAlignment: Text.AlignHCenter
- text: delegate.trip_desc
- font.pixelSize: 22
- color: "black"
- }
-
- Label {
- Layout.preferredWidth: 42
- Layout.alignment: Qt.AlignCenter
- horizontalAlignment: Text.AlignHCenter
- text: delegate.distance
- font.pixelSize: 22
- color: "black"
- }
- }
- }
-}
diff --git a/examples/quick/localstorage/localstorage/MyModel.qml b/examples/quick/localstorage/localstorage/MyModel.qml
deleted file mode 100644
index 8665778a8c..0000000000
--- a/examples/quick/localstorage/localstorage/MyModel.qml
+++ /dev/null
@@ -1,58 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick
-import QtQuick.LocalStorage
-import "Database.js" as JS
-
-ListModel {
- id: listModel
- Component.onCompleted: JS.dbReadAll()
-}
diff --git a/examples/quick/localstorage/localstorage/localstorage.pro b/examples/quick/localstorage/localstorage/localstorage.pro
deleted file mode 100644
index 8feca66f28..0000000000
--- a/examples/quick/localstorage/localstorage/localstorage.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-RESOURCES += \
- localstorage.qrc
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/localstorage/localstorage
-INSTALLS += target
diff --git a/examples/quick/localstorage/localstorage/localstorage.qml b/examples/quick/localstorage/localstorage/localstorage.qml
deleted file mode 100644
index 15710fc55c..0000000000
--- a/examples/quick/localstorage/localstorage/localstorage.qml
+++ /dev/null
@@ -1,273 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Layouts
-import QtQuick.LocalStorage
-import "Database.js" as JS
-
-Window {
- id: window
- 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
-
- ColumnLayout {
- anchors.fill: parent
- anchors.margins: 10
-
- Header {
- id: input
- Layout.fillWidth: true
- listView: listView
- enabled: window.creatingNewEntry || window.editingEntry
- }
-
- RowLayout {
- Button {
- text: qsTr("New")
- onClicked: {
- input.initrec_new()
- window.creatingNewEntry = true
- listView.model.setProperty(listView.currentIndex, "id", 0)
- }
- }
- Button {
- id: saveButton
- enabled: (window.creatingNewEntry || window.editingEntry) && listView.currentIndex != -1
- text: qsTr("Save")
- onClicked: {
- var insertedRow = false;
- if (listView.model.get(listView.currentIndex).id < 1) {
- //insert mode
- if (input.insertrec()) {
- // Successfully inserted a row.
- input.setlistview()
- insertedRow = true
- } else {
- // Failed to insert a row; display an error message.
- statustext.displayWarning(qsTr("Failed to insert row"))
- }
- } else {
- // edit mode
- input.setlistview()
- JS.dbUpdate(listView.model.get(listView.currentIndex).date,
- listView.model.get(listView.currentIndex).trip_desc,
- listView.model.get(listView.currentIndex).distance,
- listView.model.get(listView.currentIndex).id)
- }
-
- if (insertedRow) {
- input.initrec()
- window.creatingNewEntry = false
- window.editingEntry = false
- listView.forceLayout()
- }
- }
- }
- Button {
- id: editButton
- text: qsTr("Edit")
- enabled: !window.creatingNewEntry && !window.editingEntry && listView.currentIndex != -1
- onClicked: {
- input.editrec(listView.model.get(listView.currentIndex).date,
- listView.model.get(listView.currentIndex).trip_desc,
- listView.model.get(listView.currentIndex).distance,
- listView.model.get(listView.currentIndex).id)
-
- window.editingEntry = true
- }
- }
- Button {
- id: deleteButton
- text: qsTr("Delete")
- enabled: !window.creatingNewEntry && listView.currentIndex != -1
- onClicked: {
- JS.dbDeleteRow(listView.model.get(listView.currentIndex).id)
- listView.model.remove(listView.currentIndex, 1)
- if (listView.count == 0) {
- // ListView doesn't automatically set its currentIndex to -1
- // when the count becomes 0.
- listView.currentIndex = -1
- }
- }
- }
- Button {
- id: cancelButton
- text: qsTr("Cancel")
- enabled: (window.creatingNewEntry || window.editingEntry) && listView.currentIndex != -1
- 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
- // been saved to the database yet, so we can safely remove it from the model.
- listView.model.remove(listView.currentIndex, 1)
- }
- listView.forceLayout()
- window.creatingNewEntry = false
- window.editingEntry = false
- input.initrec()
- }
- }
- Button {
- text: qsTr("Exit")
- onClicked: Qt.quit()
- }
- }
- Item {
- Layout.fillWidth: true
- height: 5
- }
- Label {
- Layout.alignment: Qt.AlignCenter
- text: qsTr("Saved activities")
- font.pointSize: 15
- }
- Component {
- id: highlightBar
- Rectangle {
- width: listView.currentItem !== null ? listView.currentItem.width : implicitWidth
- height: listView.currentItem !== null ? listView.currentItem.height : implicitHeight
- color: "lightgreen"
- }
- }
- ListView {
- id: listView
- Layout.fillWidth: true
- Layout.fillHeight: true
- model: MyModel {}
- delegate: MyDelegate {
- width: listView.width
- onClicked: ()=> listView.currentIndex = index
- }
- // Don't allow changing the currentIndex while the user is creating/editing values.
- enabled: !window.creatingNewEntry && !window.editingEntry
-
- highlight: highlightBar
- highlightFollowsCurrentItem: true
- focus: true
- clip: true
-
- header: Component {
- RowLayout {
- property var headerTitles: [qsTr("Date"), qsTr("Description"), qsTr("Distance")]
- width: ListView.view.width
- Repeater {
- model: headerTitles
- delegate: Label {
- id: headerTitleDelegate
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.preferredWidth: 1
- text: modelData
- font.pointSize: 15
- font.bold: true
- font.underline: true
- padding: 12
- horizontalAlignment: Label.AlignHCenter
- }
- }
- }
- }
- }
- Label {
- id: statustext
- color: "red"
- font.bold: true
- font.pointSize: 20
- opacity: 0.0
- visible: opacity !== 0 // properly cull item if effectively invisible
- Layout.alignment: Layout.Center
-
- function displayWarning(text) {
- statustext.text = text
- statusAnim.restart()
- }
-
- Connections {
- target: input
- function onStatusMessage(msg) { statustext.displayWarning(msg); }
- }
-
- SequentialAnimation {
- id: statusAnim
-
- OpacityAnimator {
- target: statustext
- from: 0.0
- to: 1.0
- duration: 50
- }
-
- PauseAnimation {
- duration: 2000
- }
-
- OpacityAnimator {
- target: statustext
- from: 1.0
- to: 0.0
- duration: 50
- }
- }
- }
- }
- }
- Component.onCompleted: {
- JS.dbInit()
- }
-}
diff --git a/examples/quick/localstorage/localstorage/localstorage.qrc b/examples/quick/localstorage/localstorage/localstorage.qrc
deleted file mode 100644
index a761306f3d..0000000000
--- a/examples/quick/localstorage/localstorage/localstorage.qrc
+++ /dev/null
@@ -1,9 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>Header.qml</file>
- <file>Database.js</file>
- <file>MyModel.qml</file>
- <file>MyDelegate.qml</file>
- <file>localstorage.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/localstorage/localstorage/main.cpp b/examples/quick/localstorage/localstorage/main.cpp
deleted file mode 100644
index 293c81768a..0000000000
--- a/examples/quick/localstorage/localstorage/main.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <QGuiApplication>
-#include <QQmlApplicationEngine>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- QQmlApplicationEngine engine;
- engine.load(QUrl(QStringLiteral("qrc:/localstorage.qml")));
-
- return app.exec();
-}
diff --git a/examples/quick/localstorage/main.cpp b/examples/quick/localstorage/main.cpp
new file mode 100644
index 0000000000..56c4552bc8
--- /dev/null
+++ b/examples/quick/localstorage/main.cpp
@@ -0,0 +1,14 @@
+// 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/localstorage/localstorage.qml")));
+
+ return app.exec();
+}
diff --git a/examples/quick/models/CMakeLists.txt b/examples/quick/models/CMakeLists.txt
index 6beadd409c..e8756b65ec 100644
--- a/examples/quick/models/CMakeLists.txt
+++ b/examples/quick/models/CMakeLists.txt
@@ -1,5 +1,6 @@
-# Generated from models.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-add_subdirectory(abstractitemmodel)
-add_subdirectory(objectlistmodel)
-add_subdirectory(stringlistmodel)
+qt_internal_add_example(abstractitemmodel)
+qt_internal_add_example(objectlistmodel)
+qt_internal_add_example(stringlistmodel)
diff --git a/examples/quick/models/abstractitemmodel/CMakeLists.txt b/examples/quick/models/abstractitemmodel/CMakeLists.txt
index 992fdd0f8a..3b3ab40025 100644
--- a/examples/quick/models/abstractitemmodel/CMakeLists.txt
+++ b/examples/quick/models/abstractitemmodel/CMakeLists.txt
@@ -1,55 +1,43 @@
-# Generated from abstractitemmodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(abstractitemmodel LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/models/abstractitemmodel")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(abstractitemmodel
+qt_add_executable(abstractitemmodelexample WIN32 MACOSX_BUNDLE
main.cpp
model.cpp model.h
)
-set_target_properties(abstractitemmodel PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(abstractitemmodel PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
+target_link_libraries(abstractitemmodelexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
# Resources:
-set(abstractitemmodel_resource_files
- "view.qml"
+qt_add_qml_module(abstractitemmodelexample
+ URI abstractitemmodel
+ QML_FILES
+ "view.qml"
)
-qt6_add_resources(abstractitemmodel "abstractitemmodel"
- PREFIX
- "/"
- FILES
- ${abstractitemmodel_resource_files}
+install(TARGETS abstractitemmodelexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS abstractitemmodel
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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/abstractitemmodel.qrc b/examples/quick/models/abstractitemmodel/abstractitemmodel.qrc
index 4ae861cb3d..bef1041008 100644
--- a/examples/quick/models/abstractitemmodel/abstractitemmodel.qrc
+++ b/examples/quick/models/abstractitemmodel/abstractitemmodel.qrc
@@ -1,5 +1,5 @@
<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
+<qresource prefix="/qt/qml/abstractitemmodel">
<file>view.qml</file>
</qresource>
</RCC>
diff --git a/examples/quick/models/abstractitemmodel/doc/src/abstractitemmodel-example.qdoc b/examples/quick/models/abstractitemmodel/doc/src/abstractitemmodel-example.qdoc
index 114a04c8f1..6f627d050c 100644
--- a/examples/quick/models/abstractitemmodel/doc/src/abstractitemmodel-example.qdoc
+++ b/examples/quick/models/abstractitemmodel/doc/src/abstractitemmodel-example.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/main.cpp b/examples/quick/models/abstractitemmodel/main.cpp
index dd5b368c6b..a391b5ce67 100644
--- a/examples/quick/models/abstractitemmodel/main.cpp
+++ b/examples/quick/models/abstractitemmodel/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "model.h"
#include <QGuiApplication>
@@ -70,7 +23,7 @@ int main(int argc, char ** argv)
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setInitialProperties({{"model", QVariant::fromValue(&model)}});
//![0]
- view.setSource(QUrl("qrc:view.qml"));
+ view.setSource(QUrl("qrc:/qt/qml/abstractitemmodel/view.qml"));
view.show();
return app.exec();
diff --git a/examples/quick/models/abstractitemmodel/model.cpp b/examples/quick/models/abstractitemmodel/model.cpp
index 9d0032e34c..a9b8ff9f2c 100644
--- a/examples/quick/models/abstractitemmodel/model.cpp
+++ b/examples/quick/models/abstractitemmodel/model.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "model.h"
Animal::Animal(const QString &type, const QString &size)
diff --git a/examples/quick/models/abstractitemmodel/model.h b/examples/quick/models/abstractitemmodel/model.h
index 186388c96f..d4a5e738a7 100644
--- a/examples/quick/models/abstractitemmodel/model.h
+++ b/examples/quick/models/abstractitemmodel/model.h
@@ -1,52 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// 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>
@@ -75,7 +32,7 @@ public:
SizeRole
};
- AnimalModel(QObject *parent = 0);
+ AnimalModel(QObject *parent = nullptr);
//![1]
void addAnimal(const Animal &animal);
@@ -92,4 +49,4 @@ private:
};
//![2]
-
+#endif // MODEL_H
diff --git a/examples/quick/models/abstractitemmodel/view.qml b/examples/quick/models/abstractitemmodel/view.qml
index 2b9f87df92..7d2b3ab976 100644
--- a/examples/quick/models/abstractitemmodel/view.qml
+++ b/examples/quick/models/abstractitemmodel/view.qml
@@ -1,53 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+import QtQuick
//![0]
ListView {
diff --git a/examples/quick/models/objectlistmodel/CMakeLists.txt b/examples/quick/models/objectlistmodel/CMakeLists.txt
index 23b4cf7ed5..8e74bb1883 100644
--- a/examples/quick/models/objectlistmodel/CMakeLists.txt
+++ b/examples/quick/models/objectlistmodel/CMakeLists.txt
@@ -1,55 +1,43 @@
-# Generated from objectlistmodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(objectlistmodel LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/models/objectlistmodel")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(objectlistmodel
+qt_add_executable(objectlistmodelexample WIN32 MACOSX_BUNDLE
dataobject.cpp dataobject.h
main.cpp
)
-set_target_properties(objectlistmodel PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(objectlistmodel PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
+target_link_libraries(objectlistmodelexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
# Resources:
-set(objectlistmodel_resource_files
- "view.qml"
+qt_add_qml_module(objectlistmodelexample
+ URI objectlistmodel
+ QML_FILES
+ "view.qml"
)
-qt6_add_resources(objectlistmodel "objectlistmodel"
- PREFIX
- "/"
- FILES
- ${objectlistmodel_resource_files}
+install(TARGETS objectlistmodelexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS objectlistmodel
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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/dataobject.cpp b/examples/quick/models/objectlistmodel/dataobject.cpp
index 6963d75c42..cf8dd3ccef 100644
--- a/examples/quick/models/objectlistmodel/dataobject.cpp
+++ b/examples/quick/models/objectlistmodel/dataobject.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QDebug>
#include "dataobject.h"
diff --git a/examples/quick/models/objectlistmodel/dataobject.h b/examples/quick/models/objectlistmodel/dataobject.h
index 6033ff40c4..93aaa57619 100644
--- a/examples/quick/models/objectlistmodel/dataobject.h
+++ b/examples/quick/models/objectlistmodel/dataobject.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef DATAOBJECT_H
#define DATAOBJECT_H
diff --git a/examples/quick/models/objectlistmodel/doc/src/objectlistmodel-example.qdoc b/examples/quick/models/objectlistmodel/doc/src/objectlistmodel-example.qdoc
index 2c9f0f1459..2ceec9376d 100644
--- a/examples/quick/models/objectlistmodel/doc/src/objectlistmodel-example.qdoc
+++ b/examples/quick/models/objectlistmodel/doc/src/objectlistmodel-example.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/objectlistmodel/main.cpp b/examples/quick/models/objectlistmodel/main.cpp
index 8fbe7c183c..584e091431 100644
--- a/examples/quick/models/objectlistmodel/main.cpp
+++ b/examples/quick/models/objectlistmodel/main.cpp
@@ -1,54 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
+#include <QList>
#include <qqmlengine.h>
#include <qqmlcontext.h>
@@ -68,21 +22,36 @@ int main(int argc, char ** argv)
{
QGuiApplication app(argc, argv);
- QList<QObject *> dataList = {
- new DataObject("Item 1", "red"),
- new DataObject("Item 2", "green"),
- new DataObject("Item 3", "blue"),
- new DataObject("Item 4", "yellow")
- };
+ const QStringList colorList = {"red",
+ "green",
+ "blue",
+ "yellow"};
+
+ const QStringList moduleList = {"Core", "GUI", "Multimedia", "Multimedia Widgets", "Network",
+ "QML", "Quick", "Quick Controls", "Quick Dialogs",
+ "Quick Layouts", "Quick Test", "SQL", "Widgets", "3D",
+ "Android Extras", "Bluetooth", "Concurrent", "D-Bus",
+ "Gamepad", "Graphical Effects", "Help", "Image Formats",
+ "Location", "Mac Extras", "NFC", "OpenGL", "Platform Headers",
+ "Positioning", "Print Support", "Purchasing", "Quick Extras",
+ "Quick Timeline", "Quick Widgets", "Remote Objects", "Script",
+ "SCXML", "Script Tools", "Sensors", "Serial Bus",
+ "Serial Port", "Speech", "SVG", "UI Tools", "WebEngine",
+ "WebSockets", "WebView", "Windows Extras", "XML",
+ "XML Patterns", "Charts", "Network Authorization",
+ "Virtual Keyboard", "Quick 3D", "Quick WebGL"};
+
+ QList<QObject *> dataList;
+ for (const QString &module : moduleList)
+ dataList.append(new DataObject("Qt " + module, colorList.at(rand() % colorList.length())));
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setInitialProperties({{ "model", QVariant::fromValue(dataList) }});
//![0]
- view.setSource(QUrl("qrc:view.qml"));
+ view.setSource(QUrl("qrc:/qt/qml/objectlistmodel/view.qml"));
view.show();
return app.exec();
}
-
diff --git a/examples/quick/models/objectlistmodel/objectlistmodel.qrc b/examples/quick/models/objectlistmodel/objectlistmodel.qrc
index 17e9301471..7552b9e751 100644
--- a/examples/quick/models/objectlistmodel/objectlistmodel.qrc
+++ b/examples/quick/models/objectlistmodel/objectlistmodel.qrc
@@ -1,5 +1,5 @@
<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
+<qresource prefix="/qt/qml/objectlistmodel">
<file>view.qml</file>
</qresource>
</RCC>
diff --git a/examples/quick/models/objectlistmodel/view.qml b/examples/quick/models/objectlistmodel/view.qml
index ba0c905e1e..5dd4844b19 100644
--- a/examples/quick/models/objectlistmodel/view.qml
+++ b/examples/quick/models/objectlistmodel/view.qml
@@ -1,66 +1,22 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
+import QtQuick.Controls
//![0]
ListView {
- width: 100; height: 100
+ id: listview
+ width: 200; height: 320
required model
+ ScrollBar.vertical: ScrollBar { }
delegate: Rectangle {
+ width: listview.width; height: 25
+
required color
required property string name
- height: 25
- width: 100
Text { text: parent.name }
}
}
diff --git a/examples/quick/models/stringlistmodel/CMakeLists.txt b/examples/quick/models/stringlistmodel/CMakeLists.txt
index acf6be6981..bdbacace99 100644
--- a/examples/quick/models/stringlistmodel/CMakeLists.txt
+++ b/examples/quick/models/stringlistmodel/CMakeLists.txt
@@ -1,54 +1,42 @@
-# Generated from stringlistmodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(stringlistmodel LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/models/stringlistmodel")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(stringlistmodel
+qt_add_executable(stringlistmodelexample WIN32 MACOSX_BUNDLE
main.cpp
)
-set_target_properties(stringlistmodel PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(stringlistmodel PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
+target_link_libraries(stringlistmodelexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
# Resources:
-set(stringlistmodel_resource_files
- "view.qml"
+qt_add_qml_module(stringlistmodelexample
+ URI stringlistmodel
+ QML_FILES
+ "view.qml"
)
-qt6_add_resources(stringlistmodel "stringlistmodel"
- PREFIX
- "/"
- FILES
- ${stringlistmodel_resource_files}
+install(TARGETS stringlistmodelexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS stringlistmodel
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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 3d2fd8cb95..3b00a0e211 100644
--- a/examples/quick/models/stringlistmodel/doc/src/stringlistmodel-example.qdoc
+++ b/examples/quick/models/stringlistmodel/doc/src/stringlistmodel-example.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/models/stringlistmodel/main.cpp b/examples/quick/models/stringlistmodel/main.cpp
index d9de69b3aa..2f2d4b223d 100644
--- a/examples/quick/models/stringlistmodel/main.cpp
+++ b/examples/quick/models/stringlistmodel/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QStringList>
@@ -79,7 +32,7 @@ int main(int argc, char ** argv)
view.setInitialProperties({{ "model", QVariant::fromValue(dataList) }});
//![0]
- view.setSource(QUrl("qrc:view.qml"));
+ view.setSource(QUrl("qrc:/qt/qml/stringlistmodel/view.qml"));
view.show();
return app.exec();
diff --git a/examples/quick/models/stringlistmodel/stringlistmodel.qrc b/examples/quick/models/stringlistmodel/stringlistmodel.qrc
index 17e9301471..fa7c643b44 100644
--- a/examples/quick/models/stringlistmodel/stringlistmodel.qrc
+++ b/examples/quick/models/stringlistmodel/stringlistmodel.qrc
@@ -1,5 +1,5 @@
<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
+<qresource prefix="/qt/qml/stringlistmodel">
<file>view.qml</file>
</qresource>
</RCC>
diff --git a/examples/quick/models/stringlistmodel/view.qml b/examples/quick/models/stringlistmodel/view.qml
index e392284d0f..c94987a356 100644
--- a/examples/quick/models/stringlistmodel/view.qml
+++ b/examples/quick/models/stringlistmodel/view.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
//![0]
ListView {
diff --git a/examples/quick/mousearea/CMakeLists.txt b/examples/quick/mousearea/CMakeLists.txt
index 941f02b613..b78d6c9157 100644
--- a/examples/quick/mousearea/CMakeLists.txt
+++ b/examples/quick/mousearea/CMakeLists.txt
@@ -1,55 +1,43 @@
-# Generated from mousearea.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(mousearea LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/mousearea")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(mousearea
+qt_add_executable(mouseareaexample WIN32 MACOSX_BUNDLE
main.cpp
)
-set_target_properties(mousearea PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(mousearea PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
+target_link_libraries(mouseareaexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
# Resources:
-set(mousearea_resource_files
- "mousearea-wheel-example.qml"
- "mousearea.qml"
+qt_add_qml_module(mouseareaexample
+ URI mousearea
+ QML_FILES
+ "mousearea-wheel-example.qml"
+ "mousearea.qml"
)
-qt6_add_resources(mousearea "mousearea"
- PREFIX
- "/mousearea"
- FILES
- ${mousearea_resource_files}
+install(TARGETS mouseareaexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS mousearea
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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 3911764614..3ff2422747 100644
--- a/examples/quick/mousearea/doc/src/mousearea.qdoc
+++ b/examples/quick/mousearea/doc/src/mousearea.qdoc
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick Examples - MouseArea
\example mousearea
\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/main.cpp b/examples/quick/mousearea/main.cpp
index 6113ab1ad8..e729454ef6 100644
--- a/examples/quick/mousearea/main.cpp
+++ b/examples/quick/mousearea/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../shared/shared.h"
DECLARATIVE_EXAMPLE_MAIN(mousearea/mousearea)
diff --git a/examples/quick/mousearea/mousearea-wheel-example.qml b/examples/quick/mousearea/mousearea-wheel-example.qml
index 5e8fba3ac3..145c69fcef 100644
--- a/examples/quick/mousearea/mousearea-wheel-example.qml
+++ b/examples/quick/mousearea/mousearea-wheel-example.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
height: 700
@@ -74,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
}
}
}
@@ -87,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 ff792f952d..b220b47a9e 100644
--- a/examples/quick/mousearea/mousearea.qml
+++ b/examples/quick/mousearea/mousearea.qml
@@ -1,67 +1,30 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.4
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+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
@@ -73,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
@@ -175,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: 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/mousearea/mousearea.qrc b/examples/quick/mousearea/mousearea.qrc
index 23d30aa37c..7c6545b56d 100644
--- a/examples/quick/mousearea/mousearea.qrc
+++ b/examples/quick/mousearea/mousearea.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/mousearea">
+ <qresource prefix="/qt/qml/mousearea">
<file>mousearea.qml</file>
<file>mousearea-wheel-example.qml</file>
</qresource>
diff --git a/examples/quick/multieffect/CMakeLists.txt b/examples/quick/multieffect/CMakeLists.txt
new file mode 100644
index 0000000000..802cb16eea
--- /dev/null
+++ b/examples/quick/multieffect/CMakeLists.txt
@@ -0,0 +1,5 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# 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
new file mode 100644
index 0000000000..cb2043d023
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/CMakeLists.txt
@@ -0,0 +1,70 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(itemswitcher LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick QuickControls2)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+add_subdirectory("../../shared" "shared")
+
+qt_add_executable(itemswitcherexample WIN32 MACOSX_BUNDLE
+ main.cpp
+)
+
+target_link_libraries(itemswitcherexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+ Qt6::QuickControls2
+)
+
+add_dependencies(itemswitcherexample itemswitcher_shared)
+
+# Resources:
+qt_add_qml_module(itemswitcherexample
+ URI itemswitcher
+ QML_FILES
+ "qml/main.qml"
+ "qml/PagesView.qml"
+ "qml/SwitchEffect3DFlip.qml"
+ "qml/SwitchEffectBlur.qml"
+ "qml/SwitchEffectStars.qml"
+ "qml/ItemSwitcher.qml"
+ "qml/PagesItem.qml"
+ "qml/SettingsView.qml"
+ "qml/SwitchEffectBlinds.qml"
+ "qml/SwitchEffectHeart.qml"
+ "qml/SwitchEffectThunder.qml"
+ "qml/SettingsComponentButton.qml"
+ "qml/SettingsComponentSlider.qml"
+ RESOURCES
+ "qml/images/background.png"
+ "qml/images/hblinds.png"
+ "qml/images/heart.png"
+ "qml/images/quit_coding.png"
+ "qml/images/smoke.png"
+ "qml/images/star.png"
+ "qml/images/stripes.png"
+ "qml/images/arrow.png"
+ "qml/images/Built_with_Qt.png"
+ "qml/images/Built_with_Qt_RGB_logo.png"
+)
+
+install(TARGETS itemswitcherexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+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/itemswitcher/itemswitcher.pro b/examples/quick/multieffect/itemswitcher/itemswitcher.pro
new file mode 100644
index 0000000000..f1ab3e381b
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/itemswitcher.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+
+QT += quick qml
+QT += quickcontrols2
+SOURCES += main.cpp
+RESOURCES += \
+ qml.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/multieffect/itemswitcher
+INSTALLS += target
diff --git a/examples/quick/multieffect/itemswitcher/main.cpp b/examples/quick/multieffect/itemswitcher/main.cpp
new file mode 100644
index 0000000000..a7d7046411
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/main.cpp
@@ -0,0 +1,4 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#include "../../shared/shared.h"
+DECLARATIVE_EXAMPLE_MAIN(itemswitcher/qml/main)
diff --git a/examples/quick/multieffect/itemswitcher/qml.qrc b/examples/quick/multieffect/itemswitcher/qml.qrc
new file mode 100644
index 0000000000..3ccc23502a
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml.qrc
@@ -0,0 +1,27 @@
+<RCC>
+ <qresource prefix="/qt/qml/itemswitcher">
+ <file>qml/ItemSwitcher.qml</file>
+ <file>qml/main.qml</file>
+ <file>qml/SwitchEffectBlur.qml</file>
+ <file>qml/SwitchEffectBlinds.qml</file>
+ <file>qml/images/hblinds.png</file>
+ <file>qml/SwitchEffectHeart.qml</file>
+ <file>qml/images/heart.png</file>
+ <file>qml/SwitchEffectStars.qml</file>
+ <file>qml/images/star.png</file>
+ <file>qml/PagesView.qml</file>
+ <file>qml/PagesItem.qml</file>
+ <file>qml/SwitchEffectThunder.qml</file>
+ <file>qml/images/stripes.png</file>
+ <file>qml/images/background.png</file>
+ <file>qml/SettingsView.qml</file>
+ <file>qml/images/quit_coding.png</file>
+ <file>qml/images/smoke.png</file>
+ <file>qml/SwitchEffect3DFlip.qml</file>
+ <file>qml/SettingsComponentButton.qml</file>
+ <file>qml/SettingsComponentSlider.qml</file>
+ <file>qml/images/arrow.png</file>
+ <file>qml/images/Built_with_Qt.png</file>
+ <file>qml/images/Built_with_Qt_RGB_logo.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/quick/multieffect/itemswitcher/qml/ItemSwitcher.qml b/examples/quick/multieffect/itemswitcher/qml/ItemSwitcher.qml
new file mode 100644
index 0000000000..eb405749be
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/ItemSwitcher.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: rootItem
+
+ property var sourceItems: []
+
+ property Item fromItem
+ property Item toItem
+
+ property var effect
+
+ property int currentIndex: 0
+ property int previousIndex: 0
+ property real inAnimation: 0
+ readonly property real outAnimation: 1.0 - inAnimation
+ // Duration of switch animation, in ms
+ property int duration: 1500
+
+ property bool _initialized: false
+
+ onCurrentIndexChanged: {
+ fromItem = sourceItems[previousIndex];
+ toItem = sourceItems[currentIndex];
+ if (_initialized)
+ switchAnimation.restart();
+ previousIndex = currentIndex;
+ }
+
+ // Initialize the items and currentIndex
+ Timer {
+ running: true
+ interval: 0
+ onTriggered: {
+ fromItem = sourceItems[previousIndex];
+ toItem = sourceItems[currentIndex];
+ previousIndex = currentIndex;
+ _initialized = true;
+ }
+ }
+
+ SequentialAnimation {
+ id: switchAnimation
+ alwaysRunToEnd: true
+ NumberAnimation {
+ target: rootItem
+ property: "inAnimation"
+ from: 0
+ to: 1
+ duration: rootItem.duration
+ easing.type: Easing.InOutQuad
+ }
+ }
+}
diff --git a/examples/quick/multieffect/itemswitcher/qml/PagesItem.qml b/examples/quick/multieffect/itemswitcher/qml/PagesItem.qml
new file mode 100644
index 0000000000..87b39d4947
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/PagesItem.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: rootItem
+
+ property Item source
+ property bool selected: false
+ property string text
+
+ signal clicked
+
+ Rectangle {
+ anchors.fill: parent
+ color: "#000000"
+ border.color: "#f0f0f0"
+ opacity: rootItem.selected ? 0.4 : 0
+ Behavior on opacity {
+ NumberAnimation {
+ duration: 400
+ easing.type: Easing.InOutQuad
+ }
+ }
+ }
+
+ ShaderEffectSource {
+ anchors.fill: parent
+ anchors.margins: 10
+ sourceItem: rootItem.source
+ smooth: true
+ mipmap: true
+ }
+ Text {
+ anchors.centerIn: parent
+ visible: rootItem.text != ""
+ text: rootItem.text
+ font.pixelSize: 14 * dp
+ color: "#ffffff"
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ rootItem.clicked();
+ }
+ }
+}
diff --git a/examples/quick/multieffect/itemswitcher/qml/PagesView.qml b/examples/quick/multieffect/itemswitcher/qml/PagesView.qml
new file mode 100644
index 0000000000..b6e5c45a94
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/PagesView.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: rootItem
+
+ property real itemSize: 120 * dp
+ property real margin: 10 * dp
+
+ default property alias contents: contentItem.children
+
+ width: contentItem.width + 2 * margin
+ height: itemSize + 2 * margin
+
+ Rectangle {
+ anchors.fill: parent
+ color: "#606060"
+ border.color: "#f0f0f0"
+ border.width: 1
+ opacity: 0.4
+ }
+ Row {
+ id: contentItem
+ x: margin
+ y: margin
+ spacing: margin
+ }
+}
diff --git a/examples/quick/multieffect/itemswitcher/qml/SettingsComponentButton.qml b/examples/quick/multieffect/itemswitcher/qml/SettingsComponentButton.qml
new file mode 100644
index 0000000000..26a0085d8a
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/SettingsComponentButton.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: rootItem
+
+ property alias text: textItem.text
+ property bool selected: false
+
+ signal clicked
+
+ width: parent.width
+ height: 40 * dp
+ Rectangle {
+ anchors.fill: parent
+ color: "#606060"
+ border.color: "#d0d0d0"
+ border.width: 1
+ opacity: selected ? 0.8 : 0.4
+ }
+ Text {
+ id: textItem
+ anchors.centerIn: parent
+ font.pixelSize: 16 * dp
+ color: "#f0f0f0"
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ rootItem.clicked();
+ }
+ }
+}
diff --git a/examples/quick/multieffect/itemswitcher/qml/SettingsComponentSlider.qml b/examples/quick/multieffect/itemswitcher/qml/SettingsComponentSlider.qml
new file mode 100644
index 0000000000..ed04584e44
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/SettingsComponentSlider.qml
@@ -0,0 +1,54 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+Column {
+ id: rootItem
+
+ property alias text: textItem.text
+ property alias value: slider.value
+ property alias from: slider.from
+ property alias to: slider.to
+ property alias checked: checkBox.checked
+ property alias stepSize: slider.stepSize
+ property bool showCheckbox: false
+
+ signal toggled
+ signal moved
+
+ Material.theme: Material.Dark
+ Material.accent: Material.LightGreen
+ spacing: -12
+
+ Text {
+ id: textItem
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: "#f0f0f0"
+ font.pixelSize: 14 * dp
+ }
+
+ Row {
+ CheckBox {
+ id: checkBox
+ visible: rootItem.showCheckbox
+ checked: true
+ onToggled: {
+ rootItem.toggled();
+ }
+ }
+ Slider {
+ id: slider
+ property real sliderWidth: settings.settingsViewWidth - 50
+ width: rootItem.showCheckbox ? sliderWidth : sliderWidth + checkBox.width
+ value: 50
+ from: 0
+ to: 800
+ onMoved: {
+ rootItem.moved();
+ }
+ }
+ }
+}
diff --git a/examples/quick/multieffect/itemswitcher/qml/SettingsView.qml b/examples/quick/multieffect/itemswitcher/qml/SettingsView.qml
new file mode 100644
index 0000000000..cf1a753b4d
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/SettingsView.qml
@@ -0,0 +1,168 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls.Material
+
+Item {
+ id: rootItem
+
+ property bool show: true
+ property real showAnimation: show ? 1 : 0
+
+ Material.theme: Material.Dark
+ Material.accent: Material.LightGreen
+ width: settings.settingsViewWidth
+ x: -(width + 30) * (1 - showAnimation) + 20
+
+ Behavior on showAnimation {
+ NumberAnimation {
+ duration: 400
+ easing.type: Easing.InOutQuad
+ }
+ }
+
+ // Open/close button
+ Item {
+ width: 30 * dp
+ height: 30 * dp
+ anchors.left: parent.right
+ anchors.leftMargin: 20
+ anchors.top: parent.top
+ anchors.topMargin: -10
+ Rectangle {
+ anchors.fill: parent
+ color: "#404040"
+ opacity: 0.4
+ border.width: 1
+ border.color: "#808080"
+ }
+
+ Image {
+ anchors.centerIn: parent
+ source: "images/arrow.png"
+ rotation: rootItem.showAnimation * 180
+ }
+ MouseArea {
+ anchors.fill: parent
+ anchors.margins: -30 * dp
+ onClicked: {
+ rootItem.show = !rootItem.show;
+ }
+ }
+ }
+
+ // Background
+ Rectangle {
+ anchors.fill: scrollView
+ opacity: showAnimation ? 0.6 : 0
+ visible: opacity
+ anchors.margins: -10
+ color: "#202020"
+ border.color: "#808080"
+ border.width: 1
+ }
+
+ ScrollView {
+ id: scrollView
+ anchors.fill: parent
+ ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
+ ScrollBar.vertical.interactive: false
+ clip: true
+ Column {
+ id: settingsArea
+ width: rootItem.width
+ opacity: showAnimation
+ visible: opacity
+ spacing: 8 * dp
+
+ Item {
+ width: 1
+ height: 20 * dp
+ }
+ Image {
+ anchors.horizontalCenter: parent.horizontalCenter
+ fillMode: Image.PreserveAspectFit
+ width: parent.width * 0.8
+ height: width * 0.25
+ source: "images/Built_with_Qt_RGB_logo.png"
+ }
+ Item {
+ width: 1
+ height: 28 * dp
+ }
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: qsTr("Switching Effects")
+ font.pixelSize: 20 * dp
+ font.bold: true
+ color: "#f0f0f0"
+ }
+ SettingsComponentButton {
+ text: "Blinds"
+ selected: settings.effectIndex === 0
+ onClicked: {
+ settings.effectIndex = 0;
+ }
+ }
+ SettingsComponentButton {
+ text: "Blurry"
+ selected: settings.effectIndex === 1
+ onClicked: {
+ settings.effectIndex = 1;
+ }
+ }
+ SettingsComponentButton {
+ text: "Heart"
+ selected: settings.effectIndex === 2
+ onClicked: {
+ settings.effectIndex = 2;
+ }
+ }
+ SettingsComponentButton {
+ text: "Stars"
+ selected: settings.effectIndex === 3
+ onClicked: {
+ settings.effectIndex = 3;
+ }
+ }
+ SettingsComponentButton {
+ text: "Thunder"
+ selected: settings.effectIndex === 4
+ onClicked: {
+ settings.effectIndex = 4;
+ }
+ }
+ SettingsComponentButton {
+ text: "3D Flip"
+ selected: settings.effectIndex === 5
+ onClicked: {
+ settings.effectIndex = 5;
+ }
+ }
+ Item {
+ width: 1
+ height: 10
+ }
+
+ SettingsComponentSlider {
+ text: qsTr("Animation Duration") + ": " + value.toFixed(0) + " ms"
+ value: settings.switchDuration
+ from: 500
+ to: 5000
+ onMoved: {
+ settings.switchDuration = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Animation Time") + ": " + (value * settings.switchDuration).toFixed(0) + " ms"
+ value: itemSwitcher.inAnimation
+ from: 0
+ to: 1
+ onMoved: {
+ itemSwitcher.inAnimation = value;
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quick/multieffect/itemswitcher/qml/SwitchEffect3DFlip.qml b/examples/quick/multieffect/itemswitcher/qml/SwitchEffect3DFlip.qml
new file mode 100644
index 0000000000..bb33b8c6b6
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/SwitchEffect3DFlip.qml
@@ -0,0 +1,93 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Effects
+
+Item {
+ id: rootItem
+ // We expect all effects to be placed under ItemSwitcher
+ property Item switcher: rootItem.parent
+
+ anchors.fill: parent
+
+ MultiEffect {
+ source: switcher.fromItem
+ width: parent.width
+ height: parent.height
+ x: switcher.inAnimation * rootItem.width
+ blurEnabled: true
+ blur: switcher.inAnimation
+ blurMax: 32
+ blurMultiplier: 0.5
+ opacity: switcher.outAnimation
+
+ saturation: -switcher.inAnimation * 1.5
+
+ maskEnabled: true
+ maskSource: Image {
+ source: "images/smoke.png"
+ visible: false
+ }
+ maskThresholdMin: switcher.inAnimation * 0.6
+ maskSpreadAtMin: 0.1
+ maskThresholdMax: 1.0 - (switcher.inAnimation * 0.6)
+ maskSpreadAtMax: 0.1
+
+ shadowEnabled: true
+ shadowOpacity: 0.5
+ shadowBlur: 0.8
+ shadowVerticalOffset: 5
+ shadowHorizontalOffset: 10 + (x * 0.2)
+ shadowScale: 1.02
+
+ transform: Rotation {
+ origin.x: parent.width / 2
+ origin.y: parent.height / 2
+ axis { x: 0; y: 1; z: 0 }
+ angle: switcher.inAnimation * 60
+ }
+ rotation: -switcher.inAnimation * 20
+ scale: 1.0 + (switcher.inAnimation * 0.2)
+ }
+
+ MultiEffect {
+ source: switcher.toItem
+ width: parent.width
+ height: parent.height
+ x: -switcher.outAnimation * rootItem.width
+ blurEnabled: true
+ blur: switcher.outAnimation * 2
+ blurMax: 32
+ blurMultiplier: 0.5
+ opacity: switcher.inAnimation
+
+ saturation: -switcher.outAnimation * 1.5
+
+ maskEnabled: true
+ maskSource: Image {
+ source: "images/smoke.png"
+ visible: false
+ }
+ maskThresholdMin: switcher.outAnimation * 0.6
+ maskSpreadAtMin: 0.1
+ maskThresholdMax: 1.0 - (switcher.outAnimation * 0.6)
+ maskSpreadAtMax: 0.1
+
+ shadowEnabled: true
+ shadowOpacity: 0.5
+ shadowBlur: 0.8
+ shadowVerticalOffset: 5
+ shadowHorizontalOffset: 10 + (x * 0.2)
+ shadowScale: 1.02
+
+ transform: Rotation {
+ origin.x: parent.width / 2
+ origin.y: parent.height / 2
+ axis { x: 0; y: 1; z: 0 }
+ angle: -switcher.outAnimation * 60
+ }
+ rotation: switcher.outAnimation * 20
+ scale: 1.0 - (switcher.outAnimation * 0.4)
+ }
+}
diff --git a/examples/quick/multieffect/itemswitcher/qml/SwitchEffectBlinds.qml b/examples/quick/multieffect/itemswitcher/qml/SwitchEffectBlinds.qml
new file mode 100644
index 0000000000..8849631be9
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/SwitchEffectBlinds.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Effects
+
+Item {
+ id: rootItem
+ // We expect all effects to be placed under ItemSwitcher
+ property Item switcher: rootItem.parent
+ property real rotation: 0
+
+ anchors.fill: parent
+
+ Item {
+ id: mask
+ anchors.fill: parent
+ layer.enabled: true
+ visible: false
+ smooth: false
+ clip: true
+ Image {
+ anchors.fill: parent
+ anchors.margins: -parent.width * 0.25
+ source: "images/hblinds.png"
+ rotation: rootItem.rotation
+ smooth: false
+ }
+ }
+
+ // Item going out
+ MultiEffect {
+ source: switcher.fromItem
+ anchors.fill: parent
+ maskEnabled: true
+ maskSource: mask
+ maskThresholdMin: switcher.inAnimation
+ maskSpreadAtMin: 0.4
+ }
+ // Item coming in
+ MultiEffect {
+ source: switcher.toItem
+ anchors.fill: parent
+ maskEnabled: true
+ maskSource: mask
+ maskThresholdMax: switcher.inAnimation
+ maskSpreadAtMax: 0.4
+ }
+}
diff --git a/examples/quick/multieffect/itemswitcher/qml/SwitchEffectBlur.qml b/examples/quick/multieffect/itemswitcher/qml/SwitchEffectBlur.qml
new file mode 100644
index 0000000000..7df93a2f99
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/SwitchEffectBlur.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Effects
+
+Item {
+ id: rootItem
+ // We expect all effects to be placed under ItemSwitcher
+ property Item switcher: rootItem.parent
+
+ anchors.fill: parent
+
+ MultiEffect {
+ source: switcher.fromItem
+ anchors.fill: parent
+ blurEnabled: true
+ blur: switcher.inAnimation * 4
+ blurMax: 32
+ blurMultiplier: 0.5
+ opacity: switcher.outAnimation
+ saturation: -switcher.inAnimation * 2
+ }
+ MultiEffect {
+ source: switcher.toItem
+ anchors.fill: parent
+ blurEnabled: true
+ blur: switcher.outAnimation * 4
+ blurMax: 32
+ blurMultiplier: 0.5
+ opacity: switcher.inAnimation
+ saturation: -switcher.outAnimation * 2
+ }
+}
diff --git a/examples/quick/multieffect/itemswitcher/qml/SwitchEffectHeart.qml b/examples/quick/multieffect/itemswitcher/qml/SwitchEffectHeart.qml
new file mode 100644
index 0000000000..e80c54460c
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/SwitchEffectHeart.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Effects
+
+Item {
+ id: rootItem
+ // We expect all effects to be placed under ItemSwitcher
+ property Item switcher: rootItem.parent
+
+ anchors.fill: parent
+
+ Item {
+ id: mask
+ anchors.fill: parent
+ layer.enabled: true
+ visible: false
+ clip: true
+ Image {
+ anchors.fill: parent
+ source: "images/heart.png"
+ scale: switcher.inAnimation * 3
+ }
+ }
+
+ // Item going out
+ MultiEffect {
+ source: switcher.fromItem
+ anchors.fill: parent
+ maskEnabled: true
+ maskSource: mask
+ maskInverted: true
+ maskThresholdMin: 0.5
+ maskSpreadAtMin: 0.0
+ }
+ // Item coming in
+ MultiEffect {
+ source: switcher.toItem
+ anchors.fill: parent
+ maskEnabled: true
+ maskSource: mask
+ maskThresholdMin: 0.5
+ maskSpreadAtMin: 0.0
+ colorizationColor: "red"
+ colorization: Math.max(0, 1.0 - switcher.inAnimation * 2)
+ }
+}
diff --git a/examples/quick/multieffect/itemswitcher/qml/SwitchEffectStars.qml b/examples/quick/multieffect/itemswitcher/qml/SwitchEffectStars.qml
new file mode 100644
index 0000000000..c533572e66
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/SwitchEffectStars.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Effects
+
+Item {
+ id: rootItem
+ // We expect all effects to be placed under ItemSwitcher
+ property Item switcher: rootItem.parent
+
+ anchors.fill: parent
+
+ Item {
+ id: mask
+ anchors.fill: parent
+ layer.enabled: true
+ visible: false
+ clip: true
+ Image {
+ anchors.fill: parent
+ source: "images/star.png"
+ scale: switcher.inAnimation * 5
+ rotation: switcher.outAnimation * 360
+ }
+ }
+
+ // Item going out
+ MultiEffect {
+ source: switcher.fromItem
+ anchors.fill: parent
+ maskEnabled: true
+ maskSource: mask
+ maskInverted: true
+ maskThresholdMin: 0.5
+ maskSpreadAtMin: 0.5
+ }
+ // Item coming in
+ MultiEffect {
+ source: switcher.toItem
+ anchors.fill: parent
+ maskEnabled: true
+ maskSource: mask
+ maskThresholdMin: 0.5
+ maskSpreadAtMin: 0.5
+ colorizationColor: "#ffd020"
+ colorization: Math.max(0, 1.0 - switcher.inAnimation * 2)
+ brightness: Math.max(0.0, 0.8 - switcher.inAnimation * 2)
+ }
+}
diff --git a/examples/quick/multieffect/itemswitcher/qml/SwitchEffectThunder.qml b/examples/quick/multieffect/itemswitcher/qml/SwitchEffectThunder.qml
new file mode 100644
index 0000000000..80a6e9bf8f
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/SwitchEffectThunder.qml
@@ -0,0 +1,87 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Effects
+
+Item {
+ id: rootItem
+ // We expect all effects to be placed under ItemSwitcher
+ property Item switcher: rootItem.parent
+
+ property real _xPos: Math.sin(switcher.inAnimation * Math.PI * 50) * width * 0.03 * (0.5 - Math.abs(0.5 - switcher.inAnimation))
+ property real _yPos: Math.sin(switcher.inAnimation * Math.PI * 35) * width * 0.02 * (0.5 - Math.abs(0.5 - switcher.inAnimation))
+
+ anchors.fill: parent
+
+ Image {
+ id: maskImage
+ source: "images/stripes.png"
+ visible: false
+ }
+
+ MultiEffect {
+ source: switcher.fromItem
+ width: parent.width
+ height: parent.height
+ x: rootItem._xPos
+ y: rootItem._yPos
+ blurEnabled: true
+ blur: switcher.inAnimation
+ blurMax: 32
+ blurMultiplier: 0.5
+ opacity: switcher.outAnimation
+ colorizationColor: "#f0d060"
+ colorization: switcher.inAnimation
+
+ contrast: switcher.inAnimation
+ brightness: switcher.inAnimation
+
+ maskEnabled: true
+ maskSource: maskImage
+ maskThresholdMin: switcher.inAnimation * 0.9
+ maskSpreadAtMin: 0.2
+ maskThresholdMax: 1.0
+
+ shadowEnabled: true
+ shadowColor: "#f04000"
+ shadowBlur: 1.0
+ shadowOpacity: 5.0 - switcher.outAnimation * 5.0
+ shadowHorizontalOffset: 0
+ shadowVerticalOffset: 0
+ shadowScale: 1.04
+
+ }
+ MultiEffect {
+ source: switcher.toItem
+ width: parent.width
+ height: parent.height
+ x: -rootItem._xPos
+ y: -rootItem._yPos
+ blurEnabled: true
+ blur: switcher.outAnimation * 2
+ blurMax: 32
+ blurMultiplier: 0.5
+ opacity: switcher.inAnimation * 3.0 - 1.0
+
+ colorizationColor: "#f0d060"
+ colorization: switcher.outAnimation
+ contrast: switcher.outAnimation
+ brightness: switcher.outAnimation
+
+ maskEnabled: true
+ maskSource: maskImage
+ maskThresholdMin: switcher.outAnimation * 0.6
+ maskSpreadAtMin: 0.2
+ maskThresholdMax: 1.0
+
+ shadowEnabled: true
+ shadowColor: "#f04000"
+ shadowBlur: 1.0
+ shadowOpacity: 5.0 - switcher.inAnimation * 5.0
+ shadowHorizontalOffset: 0
+ shadowVerticalOffset: 0
+ shadowScale: 1.04
+ }
+
+}
diff --git a/examples/quick/multieffect/itemswitcher/qml/images/Built_with_Qt.png b/examples/quick/multieffect/itemswitcher/qml/images/Built_with_Qt.png
new file mode 100644
index 0000000000..e612481510
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/images/Built_with_Qt.png
Binary files differ
diff --git a/examples/quick/multieffect/itemswitcher/qml/images/Built_with_Qt_RGB_logo.png b/examples/quick/multieffect/itemswitcher/qml/images/Built_with_Qt_RGB_logo.png
new file mode 100644
index 0000000000..8d2dfc17ec
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/images/Built_with_Qt_RGB_logo.png
Binary files differ
diff --git a/examples/quick/multieffect/itemswitcher/qml/images/arrow.png b/examples/quick/multieffect/itemswitcher/qml/images/arrow.png
new file mode 100644
index 0000000000..067bec4509
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/images/arrow.png
Binary files differ
diff --git a/examples/quick/multieffect/itemswitcher/qml/images/background.png b/examples/quick/multieffect/itemswitcher/qml/images/background.png
new file mode 100644
index 0000000000..9b9e9e487d
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/images/background.png
Binary files differ
diff --git a/examples/quick/multieffect/itemswitcher/qml/images/hblinds.png b/examples/quick/multieffect/itemswitcher/qml/images/hblinds.png
new file mode 100644
index 0000000000..09ce73ee03
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/images/hblinds.png
Binary files differ
diff --git a/examples/quick/multieffect/itemswitcher/qml/images/heart.png b/examples/quick/multieffect/itemswitcher/qml/images/heart.png
new file mode 100644
index 0000000000..dda1f4bab1
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/images/heart.png
Binary files differ
diff --git a/examples/quick/multieffect/itemswitcher/qml/images/quit_coding.png b/examples/quick/multieffect/itemswitcher/qml/images/quit_coding.png
new file mode 100644
index 0000000000..0930013af4
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/images/quit_coding.png
Binary files differ
diff --git a/examples/quick/multieffect/itemswitcher/qml/images/smoke.png b/examples/quick/multieffect/itemswitcher/qml/images/smoke.png
new file mode 100644
index 0000000000..83dfcc453c
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/images/smoke.png
Binary files differ
diff --git a/examples/quick/multieffect/itemswitcher/qml/images/star.png b/examples/quick/multieffect/itemswitcher/qml/images/star.png
new file mode 100644
index 0000000000..f83bd87892
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/images/star.png
Binary files differ
diff --git a/examples/quick/multieffect/itemswitcher/qml/images/stripes.png b/examples/quick/multieffect/itemswitcher/qml/images/stripes.png
new file mode 100644
index 0000000000..7a79767e6e
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/images/stripes.png
Binary files differ
diff --git a/examples/quick/multieffect/itemswitcher/qml/main.qml b/examples/quick/multieffect/itemswitcher/qml/main.qml
new file mode 100644
index 0000000000..9685c71ccb
--- /dev/null
+++ b/examples/quick/multieffect/itemswitcher/qml/main.qml
@@ -0,0 +1,219 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+Rectangle {
+ id: mainWindow
+
+ // Multiplier for resolution independency
+ readonly property real dp: 0.2 + Math.min(width, height) / 1200
+
+ width: 1280
+ height: 720
+ visible: true
+ color: "#404040"
+
+ QtObject {
+ id: settings
+ property real settingsViewWidth: 100 + 150 * dp
+ property int effectIndex: 0
+ property int switchDuration: 1500
+ property int itemSize: mainWindow.height * 0.6
+ }
+
+ Item {
+ id: testItem1
+ width: 1
+ height: 1
+ }
+
+ Rectangle {
+ id: testItem2
+ anchors.fill: itemSwitcher
+ color: "#d0d0d0"
+ visible: false
+ Image {
+ anchors.fill: parent
+ anchors.margins: 4
+ source: "images/background.png"
+ }
+ Text {
+ anchors.centerIn: parent
+ font.pixelSize: 40 * dp
+ horizontalAlignment: Text.AlignHCenter
+ text: "This is the\nfirst item"
+ color: "#ffffff"
+ style: Text.Outline
+ styleColor: "#202020"
+ }
+ }
+
+ Rectangle {
+ id: testItem3Content
+ anchors.fill: itemSwitcher
+ color: "white"
+ border.width: 5
+ visible: itemSwitcher.currentIndex === 2
+ Text {
+ anchors.centerIn: parent
+ font.pixelSize: 48 * dp
+ horizontalAlignment: Text.AlignHCenter
+ text: "This is a\nDIFFERENT\nsecond item"
+ rotation: slider.value * 360
+ }
+ Slider {
+ id: slider
+ anchors.top: parent.top
+ anchors.topMargin: 20 * dp
+ anchors.horizontalCenter: parent.horizontalCenter
+ from: 0
+ to: 1
+ width: parent.width * 0.8
+ }
+ Button {
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 20 * dp
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: "Controls Button"
+ }
+ }
+ ShaderEffectSource {
+ // Wrap testItem3 into ShaderEffectSource so it doesn't need
+ // visible = false and can be interactive.
+ id: testItem3
+ anchors.fill: testItem3Content
+ sourceItem: testItem3Content
+ hideSource: true
+ visible: false
+ }
+
+ Image {
+ id: testItem4
+ source: "images/Built_with_Qt.png"
+ anchors.fill: itemSwitcher
+ visible: false
+ }
+
+ Image {
+ id: testItem5
+ source: "images/quit_coding.png"
+ anchors.fill: itemSwitcher
+ visible: false
+ }
+
+ Item {
+ id: mainArea
+ anchors.left: settingsView.right
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+
+ PagesView {
+ id: pagesView
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top
+ anchors.topMargin: 20 * dp
+ PagesItem {
+ width: pagesView.itemSize
+ height: pagesView.itemSize
+ source: testItem1
+ text: "(EMPTY)"
+ selected: itemSwitcher.currentIndex === 0
+ onClicked: {
+ itemSwitcher.currentIndex = 0;
+ }
+ }
+ PagesItem {
+ width: pagesView.itemSize
+ height: pagesView.itemSize
+ source: testItem2
+ selected: itemSwitcher.currentIndex === 1
+ onClicked: {
+ itemSwitcher.currentIndex = 1;
+ }
+ }
+ PagesItem {
+ width: pagesView.itemSize
+ height: pagesView.itemSize
+ source: testItem3
+ selected: itemSwitcher.currentIndex === 2
+ onClicked: {
+ itemSwitcher.currentIndex = 2;
+ }
+ }
+ PagesItem {
+ width: pagesView.itemSize
+ height: pagesView.itemSize
+ source: testItem4
+ selected: itemSwitcher.currentIndex === 3
+ onClicked: {
+ itemSwitcher.currentIndex = 3;
+ }
+ }
+ PagesItem {
+ width: pagesView.itemSize
+ height: pagesView.itemSize
+ source: testItem5
+ selected: itemSwitcher.currentIndex === 4
+ onClicked: {
+ itemSwitcher.currentIndex = 4;
+ }
+ }
+ }
+ }
+ ItemSwitcher {
+ id: itemSwitcher
+ anchors.centerIn: mainArea
+ anchors.verticalCenterOffset: pagesView.height / 2
+ width: settings.itemSize
+ height: settings.itemSize
+ duration: settings.switchDuration
+ Component.onCompleted: {
+ // Add all switchable items into switcher
+ sourceItems.push(testItem1);
+ sourceItems.push(testItem2);
+ sourceItems.push(testItem3);
+ sourceItems.push(testItem4);
+ sourceItems.push(testItem5);
+ // From item is the currently selected one
+ currentIndex = settings.effectIndex;
+ }
+
+ SwitchEffectBlinds {
+ id: blindsEffect
+ visible: settings.effectIndex == 0
+ rotation: 45
+ }
+ SwitchEffectBlur {
+ id: blurEffect
+ visible: settings.effectIndex == 1
+ }
+ SwitchEffectHeart {
+ id: heartEffect
+ visible: settings.effectIndex == 2
+ }
+ SwitchEffectStars {
+ id: starsEffect
+ visible: settings.effectIndex == 3
+ }
+ SwitchEffectThunder {
+ id: thunderEffect
+ visible: settings.effectIndex == 4
+ }
+ SwitchEffect3DFlip {
+ id: flipEffect
+ visible: settings.effectIndex == 5
+ }
+ }
+
+ SettingsView {
+ id: settingsView
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ anchors.margins: 20
+ }
+}
diff --git a/examples/quick/multieffect/multieffect.pro b/examples/quick/multieffect/multieffect.pro
new file mode 100644
index 0000000000..b06faae7df
--- /dev/null
+++ b/examples/quick/multieffect/multieffect.pro
@@ -0,0 +1,3 @@
+TEMPLATE = subdirs
+SUBDIRS += testbed \
+ itemswitcher
diff --git a/examples/quick/multieffect/testbed/CMakeLists.txt b/examples/quick/multieffect/testbed/CMakeLists.txt
new file mode 100644
index 0000000000..fb8c566378
--- /dev/null
+++ b/examples/quick/multieffect/testbed/CMakeLists.txt
@@ -0,0 +1,74 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(testbed LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick QuickControls2)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+add_subdirectory("../../shared" "shared")
+
+qt_add_executable(testbedexample WIN32 MACOSX_BUNDLE
+ main.cpp
+)
+
+target_link_libraries(testbedexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+ Qt6::QuickControls2
+)
+
+add_dependencies(testbedexample testbed_shared)
+
+# Resources:
+qt_add_qml_module(testbedexample
+ URI testbed
+ QML_FILES
+ "qml/FpsItem.qml"
+ "qml/main.qml"
+ "qml/ResetSettingsOverlay.qml"
+ "qml/Settings.qml"
+ "qml/SettingsView.qml"
+ "qml/ShaderView.qml"
+ "qml/TestMaskItem.qml"
+ "qml/TestSourceItem.qml"
+ "qml/WarningsItem.qml"
+ "qml/WarningsView.qml"
+ "qml/SettingsComponentView.qml"
+ "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"
+ "qml/images/spinner.png"
+ "qml/images/warning.png"
+ "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
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+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/main.cpp b/examples/quick/multieffect/testbed/main.cpp
new file mode 100644
index 0000000000..130e3ab0b4
--- /dev/null
+++ b/examples/quick/multieffect/testbed/main.cpp
@@ -0,0 +1,4 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#include "../../shared/shared.h"
+DECLARATIVE_EXAMPLE_MAIN(testbed/qml/main)
diff --git a/examples/quick/multieffect/testbed/qml.qrc b/examples/quick/multieffect/testbed/qml.qrc
new file mode 100644
index 0000000000..4c23cff873
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml.qrc
@@ -0,0 +1,31 @@
+<RCC>
+ <qresource prefix="/qt/qml/testbed">
+ <file>qml/main.qml</file>
+ <file>qml/Settings.qml</file>
+ <file>qml/ResetSettingsOverlay.qml</file>
+ <file>qml/FpsItem.qml</file>
+ <file>qml/images/spinner.png</file>
+ <file>qml/images/warning.png</file>
+ <file>qml/WarningsView.qml</file>
+ <file>qml/WarningsItem.qml</file>
+ <file>qml/ShaderView.qml</file>
+ <file>qml/TestSourceItem.qml</file>
+ <file>qml/TestMaskItem.qml</file>
+ <file>qml/SettingsView.qml</file>
+ <file>qml/images/pause.png</file>
+ <file>qml/images/play.png</file>
+ <file>qml/SettingsComponentCheckBox.qml</file>
+ <file>qml/SettingsComponentColorSelector.qml</file>
+ <file>qml/SettingsComponentSlider.qml</file>
+ <file>qml/SettingsComponentView.qml</file>
+ <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/FpsItem.qml b/examples/quick/multieffect/testbed/qml/FpsItem.qml
new file mode 100644
index 0000000000..53042655a3
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/FpsItem.qml
@@ -0,0 +1,65 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: root
+ property int frameCounter: 0
+ property int frameCounterAvg: 0
+ property int counter: 0
+ property int fps: 0
+ property int fpsAvg: 0
+
+ width: 200 * dp
+ height: Math.floor(42 * dp)
+
+ Image {
+ id: spinnerImage
+ anchors.verticalCenter: parent.verticalCenter
+ x: 4 * dp
+ width: 32 * dp
+ height: width
+ source: "images/spinner.png"
+ NumberAnimation on rotation {
+ from:0
+ to: 360
+ duration: 800
+ loops: Animation.Infinite
+ }
+ onRotationChanged: frameCounter++;
+ }
+ Image {
+ anchors.centerIn: spinnerImage
+ width: 18 * dp
+ height: width
+ source: settings.animateMovement ? "images/play.png" : "images/pause.png"
+ opacity: 0.5
+ }
+
+ Text {
+ anchors.left: spinnerImage.right
+ anchors.leftMargin: 8 * dp
+ anchors.verticalCenter: spinnerImage.verticalCenter
+ color: "#c0c0c0"
+ font.pixelSize: 22 * dp
+ text: "Ø " + root.fpsAvg + " | " + root.fps + " fps"
+ }
+
+ Timer {
+ interval: 2000
+ repeat: true
+ running: true
+ onTriggered: {
+ frameCounterAvg += frameCounter;
+ root.fps = Math.ceil(frameCounter / 2);
+ counter++;
+ frameCounter = 0;
+ if (counter >= 3) {
+ root.fpsAvg = Math.ceil(frameCounterAvg / (2 * counter));
+ frameCounterAvg = 0;
+ counter = 0;
+ }
+ }
+ }
+}
diff --git a/examples/quick/multieffect/testbed/qml/ResetSettingsOverlay.qml b/examples/quick/multieffect/testbed/qml/ResetSettingsOverlay.qml
new file mode 100644
index 0000000000..3931548124
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/ResetSettingsOverlay.qml
@@ -0,0 +1,170 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+Item {
+ id: rootItem
+
+ property real showAnimationProgress: 0
+ property int itemWidth: 256 * dp
+ property int lineSpacing1: 0
+ property int lineWidth1: 20 * dp
+ property int lineSpacing2: 10 * dp
+ property int lineWidth2: 10 * dp
+
+ readonly property int cx: itemWidth / 2
+ readonly property int cy: itemWidth / 2
+
+ signal animationFinished
+
+ function startShow() {
+ hideAnimationItem.stop();
+ showAnimationItem.restart();
+ }
+ function stopShow() {
+ showAnimationItem.stop();
+ hideAnimationItem.restart();
+ }
+
+ function ringProgress() {
+ return showAnimationProgress * (2 * Math.PI) - (Math.PI / 2);
+ }
+
+ function useLargeArcFunc() {
+ return (ringProgress() > Math.PI / 2);
+ }
+
+ anchors.fill: parent
+ visible: opacity
+ opacity: 0
+
+ SequentialAnimation {
+ id: showAnimationItem
+ PauseAnimation {
+ duration: 400
+ }
+ ScriptAction {
+ script: {
+ rootItem.showAnimationProgress = 0;
+ }
+ }
+ NumberAnimation {
+ target: rootItem
+ property: "opacity"
+ to: 1
+ duration: 400
+ easing.type: Easing.InOutQuad
+ }
+ NumberAnimation {
+ target: rootItem
+ property: "showAnimationProgress"
+ to: 1
+ duration: 2000
+ easing.type: Easing.InOutQuad
+ }
+ ScriptAction {
+ script: rootItem.animationFinished();
+ }
+ }
+ SequentialAnimation {
+ id: hideAnimationItem
+ NumberAnimation {
+ target: rootItem
+ property: "opacity"
+ to: 0
+ duration: 400
+ easing.type: Easing.InOutQuad
+ }
+ ScriptAction {
+ script: {
+ rootItem.showAnimationProgress = 0;
+ }
+ }
+ }
+
+ Rectangle {
+ anchors.fill: parent
+ color: "#000000"
+ opacity: 0.6
+ }
+
+ Shape {
+ id: shapeItem
+ x: (parent.width / 2) - (itemWidth / 2)
+ y: (parent.height / 2) - (itemWidth / 2)
+ opacity: rootItem.showAnimationProgress
+ width: itemWidth
+ height: itemWidth
+ rotation: rootItem.showAnimationProgress * 360
+ ShapePath {
+ strokeColor: "#606060"
+ fillColor: "transparent"
+ strokeWidth: lineWidth1
+ capStyle: ShapePath.RoundCap
+ PathMove {
+ x: itemWidth / 2
+ y: pathArc1.spacing
+ }
+ PathArc {
+ id: pathArc1
+ property real spacing: lineSpacing1 + lineWidth1
+ x: cx + ((itemWidth / 2 - spacing) * Math.cos(ringProgress()))
+ y: cy + ((itemWidth / 2 - spacing) * Math.sin(ringProgress()))
+ radiusX: itemWidth / 2 - spacing
+ radiusY: itemWidth / 2 - spacing
+ useLargeArc: useLargeArcFunc()
+ }
+ }
+
+ ShapePath {
+ strokeColor: "#808080"
+ fillColor: "transparent"
+ strokeWidth: lineWidth2
+ capStyle: ShapePath.RoundCap
+ PathMove {
+ x: itemWidth / 2
+ y: pathArc2.spacing
+ }
+ PathArc {
+ id: pathArc2
+ property real spacing: lineSpacing2 + lineWidth2
+ x: cx + ((itemWidth / 2 - spacing) * Math.cos(ringProgress()))
+ y: cy + ((itemWidth / 2 - spacing) * Math.sin(ringProgress()))
+ radiusX: itemWidth / 2 - spacing
+ radiusY: itemWidth / 2 - spacing
+ useLargeArc: useLargeArcFunc()
+ }
+ }
+ }
+ Text {
+ id: textItem
+ anchors.centerIn: shapeItem
+ font.pixelSize: 32 * dp
+ color: "#d0d0d0"
+ text: showAnimationProgress < 1 ? qsTr("Reset to default settings?") : qsTr("Reseted!")
+ Behavior on text {
+ SequentialAnimation {
+ NumberAnimation {
+ target: textItem
+ properties: "scale, opacity"
+ to: 0
+ duration: 200
+ easing.type: Easing.InOutQuad
+ }
+ PropertyAction {
+ target: textItem
+ property: "text"
+ }
+ NumberAnimation {
+ target: textItem
+ properties: "scale, opacity"
+ to: 1.0
+ duration: 200
+ easing.type: Easing.InOutQuad
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quick/multieffect/testbed/qml/Settings.qml b/examples/quick/multieffect/testbed/qml/Settings.qml
new file mode 100644
index 0000000000..05947c2ab4
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/Settings.qml
@@ -0,0 +1,92 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+QtObject {
+ id: rootItem
+
+ // Emitted when settings are reseted to default
+ signal reseted
+
+ // When adding settings here remember to add them also into reset()
+
+ // *** General settings - No UI for these ***
+ // Change to false to not show settings view at all
+ property bool showSettingsView: true
+ property real settingsViewWidth: 100 + 150 * dp
+ 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)
+
+ property bool brightnessEnabled: true
+ property real brightness: 0.0
+ property bool contrastEnabled: true
+ property real contrast: 0.0
+ property bool saturationEnabled: true
+ property real saturation: 0.0
+ property bool colorizationEnabled: true
+ property color colorizationColor: Qt.rgba(1.0, 0.0, 0.0, 1.0)
+ property real colorization: 0.0
+
+ property bool blurEnabled: true
+ property real blur: 0.0
+ property int blurMax: 32
+ property real blurMultiplier: 0.0
+
+ property bool shadowEnabled: true
+ property real shadowOpacity: 1.0
+ property real shadowBlur: 1.0
+ property real shadowHorizontalOffset: 10
+ property real shadowVerticalOffset: 5
+ property color shadowColor: Qt.rgba(0.0, 0.0, 0.0, 1.0)
+ property real shadowScale: 1.0
+
+ property bool maskEnabled: true
+ property bool maskInverted: false
+ property real maskThresholdMin: 0.0
+ property real maskSpreadAtMin: 0.0
+ property real maskThresholdMax: 1.0
+ property real maskSpreadAtMax: 0.0
+
+ function reset() {
+ autoPaddingEnabled = defaultSettings.autoPaddingEnabled;
+ paddingRect = defaultSettings.paddingRect;
+
+ brightnessEnabled = defaultSettings.brightnessEnabled;
+ brightness = defaultSettings.brightness;
+ contrastEnabled = defaultSettings.contrastEnabled;
+ contrast = defaultSettings.contrast;
+ saturationEnabled = defaultSettings.saturationEnabled;
+ saturation = defaultSettings.saturation;
+ colorizationEnabled = defaultSettings.colorizationEnabled;
+ colorizationColor = defaultSettings.colorizationColor;
+ colorization = defaultSettings.colorization;
+
+ blurEnabled = defaultSettings.blurEnabled;
+ blur = defaultSettings.blur;
+ blurMax = defaultSettings.blurMax;
+ blurMultiplier = defaultSettings.blurMultiplier;
+
+ shadowEnabled = defaultSettings.shadowEnabled;
+ shadowOpacity = defaultSettings.shadowOpacity;
+ shadowBlur = defaultSettings.shadowBlur;
+ shadowHorizontalOffset = defaultSettings.shadowHorizontalOffset;
+ shadowVerticalOffset = defaultSettings.shadowVerticalOffset;
+ shadowColor = defaultSettings.shadowColor;
+ shadowScale = defaultSettings.shadowScale;
+
+ maskEnabled = defaultSettings.maskEnabled;
+ maskInverted = defaultSettings.maskInverted;
+ maskThresholdMin = defaultSettings.maskThresholdMin;
+ maskSpreadAtMin = defaultSettings.maskSpreadAtMin;
+ maskThresholdMax = defaultSettings.maskThresholdMax;
+ maskSpreadAtMax = defaultSettings.maskSpreadAtMax;
+
+ rootItem.reseted();
+ }
+}
diff --git a/examples/quick/multieffect/testbed/qml/SettingsComponentCheckBox.qml b/examples/quick/multieffect/testbed/qml/SettingsComponentCheckBox.qml
new file mode 100644
index 0000000000..ef1cb27d89
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/SettingsComponentCheckBox.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+Column {
+ id: rootItem
+
+ property alias text: textItem.text
+ property alias checked: checkBox.checked
+
+ signal toggled
+
+ Material.theme: Material.Dark
+ Material.accent: Material.LightGreen
+ spacing: -12
+
+ Row {
+ CheckBox {
+ id: checkBox
+ checked: true
+ onToggled: {
+ rootItem.toggled();
+ }
+ }
+ Text {
+ id: textItem
+ anchors.verticalCenter: parent.verticalCenter
+ color: "#f0f0f0"
+ font.pixelSize: 14 * dp
+ }
+ }
+}
diff --git a/examples/quick/multieffect/testbed/qml/SettingsComponentColorSelector.qml b/examples/quick/multieffect/testbed/qml/SettingsComponentColorSelector.qml
new file mode 100644
index 0000000000..c158f84a7d
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/SettingsComponentColorSelector.qml
@@ -0,0 +1,135 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+Column {
+ id: rootItem
+
+ property alias text: textItem.text
+ readonly property color value: Qt.rgba(colorRed, colorGreen, colorBlue, 1.0)
+ readonly property real colorRed: sliderRed.value
+ readonly property real colorGreen: sliderGreen.value
+ readonly property real colorBlue: sliderBlue.value
+ readonly property real itemWidth: (rootItem.width / 3) - itemMargin
+ readonly property real itemMargin: 4
+ readonly property real colorBarHeight: 4
+
+ // Use this to set the initial values
+ function setValues(r, g, b) {
+ sliderRed.value = r;
+ sliderGreen.value = g;
+ sliderBlue.value = b;
+ }
+
+ Material.theme: Material.Dark
+ Material.accent: Material.LightGreen
+ spacing: -12
+ width: 200
+
+ Text {
+ id: textItem
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: "#f0f0f0"
+ font.pixelSize: 14 * dp
+ }
+ Item {
+ width: 1
+ height: 36
+ }
+
+ Row {
+ x: itemMargin / 2
+ spacing: itemMargin
+ opacity: rootItem.enabled ? 1.0 : 0.2
+ Column {
+ Rectangle {
+ width: rootItem.itemWidth
+ height: colorBarHeight
+ border.width: 1
+ border.color: "#202020"
+ gradient: Gradient {
+ orientation: Gradient.Horizontal
+ GradientStop { position: 0.0; color: Qt.rgba(0.0, colorGreen, colorBlue, 1.0) }
+ GradientStop { position: 1.0; color: Qt.rgba(1.0, colorGreen, colorBlue, 1.0) }
+ }
+ Text {
+ id: textItemRed
+ anchors.centerIn: parent
+ color: "#f0f0f0"
+ style: Text.Outline
+ styleColor: "#000000"
+ text: "R: " + Math.ceil(sliderRed.value * 255)
+ font.pixelSize: 14 * dp
+ }
+ }
+ Slider {
+ id: sliderRed
+ width: rootItem.itemWidth
+ value: 0
+ from: 0
+ to: 1
+ }
+ }
+ Column {
+ Rectangle {
+ width: rootItem.itemWidth
+ height: colorBarHeight
+ border.width: 1
+ border.color: "#202020"
+ gradient: Gradient {
+ orientation: Gradient.Horizontal
+ GradientStop { position: 0.0; color: Qt.rgba(colorRed, 0.0, colorBlue, 1.0) }
+ GradientStop { position: 1.0; color: Qt.rgba(colorRed, 1.0, colorBlue, 1.0) }
+ }
+ Text {
+ id: textItemGreen
+ anchors.centerIn: parent
+ color: "#f0f0f0"
+ style: Text.Outline
+ styleColor: "#000000"
+ text: "G: " + Math.ceil(sliderGreen.value * 255)
+ font.pixelSize: 14 * dp
+ }
+ }
+ Slider {
+ id: sliderGreen
+ width: rootItem.itemWidth
+ value: 0
+ from: 0
+ to: 1
+ }
+ }
+ Column {
+ Rectangle {
+ width: rootItem.itemWidth
+ height: colorBarHeight
+ border.width: 1
+ border.color: "#202020"
+ gradient: Gradient {
+ orientation: Gradient.Horizontal
+ GradientStop { position: 0.0; color: Qt.rgba(colorRed, colorGreen, 0.0, 1.0) }
+ GradientStop { position: 1.0; color: Qt.rgba(colorRed, colorGreen, 1.0, 1.0) }
+ }
+ Text {
+ id: textItemBlue
+ anchors.centerIn: parent
+ color: "#f0f0f0"
+ style: Text.Outline
+ styleColor: "#000000"
+ text: "B: " + Math.ceil(sliderBlue.value * 255)
+ font.pixelSize: 14 * dp
+ }
+ }
+ Slider {
+ id: sliderBlue
+ width: rootItem.itemWidth
+ value: 0
+ from: 0
+ to: 1
+ }
+ }
+ }
+}
diff --git a/examples/quick/multieffect/testbed/qml/SettingsComponentSlider.qml b/examples/quick/multieffect/testbed/qml/SettingsComponentSlider.qml
new file mode 100644
index 0000000000..ed04584e44
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/SettingsComponentSlider.qml
@@ -0,0 +1,54 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+Column {
+ id: rootItem
+
+ property alias text: textItem.text
+ property alias value: slider.value
+ property alias from: slider.from
+ property alias to: slider.to
+ property alias checked: checkBox.checked
+ property alias stepSize: slider.stepSize
+ property bool showCheckbox: false
+
+ signal toggled
+ signal moved
+
+ Material.theme: Material.Dark
+ Material.accent: Material.LightGreen
+ spacing: -12
+
+ Text {
+ id: textItem
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: "#f0f0f0"
+ font.pixelSize: 14 * dp
+ }
+
+ Row {
+ CheckBox {
+ id: checkBox
+ visible: rootItem.showCheckbox
+ checked: true
+ onToggled: {
+ rootItem.toggled();
+ }
+ }
+ Slider {
+ id: slider
+ property real sliderWidth: settings.settingsViewWidth - 50
+ width: rootItem.showCheckbox ? sliderWidth : sliderWidth + checkBox.width
+ value: 50
+ from: 0
+ to: 800
+ onMoved: {
+ rootItem.moved();
+ }
+ }
+ }
+}
diff --git a/examples/quick/multieffect/testbed/qml/SettingsComponentView.qml b/examples/quick/multieffect/testbed/qml/SettingsComponentView.qml
new file mode 100644
index 0000000000..08eb0ad300
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/SettingsComponentView.qml
@@ -0,0 +1,147 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Column {
+ id: rootItem
+
+ property alias text: textItem.text
+ property bool show: true
+
+ default property alias contents: contentItem.children
+ property real showHideAnimationSpeed: 400
+
+ width: settings.settingsViewWidth
+
+ Component.onCompleted: {
+ // Set initial open state
+ contentItem.visible = rootItem.show;
+ contentItem.opacity = rootItem.show;
+ contentItemArea.height = rootItem.show ? contentItem.height : 0;
+ }
+
+ Item {
+ id: lightsSettings
+ width: parent.width
+ height: 30
+ Rectangle {
+ anchors.fill: parent
+ color: "#404040"
+ border.width: 1
+ border.color: "#808080"
+ opacity: 0.4
+ }
+ Image {
+ x: 8
+ source: "images/arrow.png"
+ anchors.verticalCenter: parent.verticalCenter
+ rotation: rootItem.show ? 90 : 0
+ Behavior on rotation {
+ NumberAnimation {
+ duration: showHideAnimationSpeed
+ easing.type: Easing.InOutQuad
+ }
+ }
+ }
+
+ Text {
+ id: textItem
+ x: 30
+ anchors.verticalCenter: parent.verticalCenter
+ color: "#f0f0f0"
+ font.bold: true
+ font.pixelSize: 16 * dp
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ rootItem.show = !rootItem.show;
+ if (rootItem.show) {
+ hideAnimation.stop();
+ showAnimation.start();
+ } else {
+ showAnimation.stop();
+ hideAnimation.start();
+ }
+
+ }
+ }
+ }
+
+ Item {
+ width: 1
+ height: 5
+ }
+
+ SequentialAnimation {
+ id: showAnimation
+ ScriptAction {
+ script: contentItem.visible = true;
+ }
+ ParallelAnimation {
+ NumberAnimation {
+ target: contentItemArea
+ property: "height"
+ to: contentItem.height
+ duration: showHideAnimationSpeed
+ easing.type: Easing.InOutQuad
+ }
+ SequentialAnimation {
+ PauseAnimation {
+ duration: showHideAnimationSpeed / 2
+ }
+ NumberAnimation {
+ target: contentItem
+ property: "opacity"
+ to: 1.0
+ duration: showHideAnimationSpeed / 2
+ easing.type: Easing.InOutQuad
+ }
+ }
+ }
+ }
+
+ SequentialAnimation {
+ id: hideAnimation
+ ParallelAnimation {
+ NumberAnimation {
+ target: contentItemArea
+ property: "height"
+ to: 0
+ duration: showHideAnimationSpeed
+ easing.type: Easing.InOutQuad
+ }
+ SequentialAnimation {
+ NumberAnimation {
+ target: contentItem
+ property: "opacity"
+ to: 0
+ duration: showHideAnimationSpeed / 2
+ easing.type: Easing.InOutQuad
+ }
+ PauseAnimation {
+ duration: showHideAnimationSpeed / 2
+ }
+ }
+ }
+ ScriptAction {
+ script: contentItem.visible = false;
+ }
+ }
+
+ Item {
+ id: contentItemArea
+ width: parent.width - 10
+ x: 5
+ Column {
+ id: contentItem
+ spacing: -10
+ }
+ }
+
+ Item {
+ width: 1
+ height: 5
+ }
+}
diff --git a/examples/quick/multieffect/testbed/qml/SettingsView.qml b/examples/quick/multieffect/testbed/qml/SettingsView.qml
new file mode 100644
index 0000000000..789f7685c2
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/SettingsView.qml
@@ -0,0 +1,407 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls.Material
+
+Item {
+ id: rootItem
+
+ property bool show: true
+ property real showAnimation: show ? 1 : 0
+
+ function resetSettings() {
+ colorizationColorSelector.setValues(defaultSettings.colorizationColor.r,
+ defaultSettings.colorizationColor.g,
+ defaultSettings.colorizationColor.b);
+ shadowColorSelector.setValues(defaultSettings.shadowColor.r,
+ defaultSettings.shadowColor.g,
+ defaultSettings.shadowColor.b);
+ }
+
+ Material.theme: Material.Dark
+ Material.accent: Material.LightGreen
+ width: settings.settingsViewWidth
+ x: -(width + 30) * (1 - showAnimation) + 20
+
+ Behavior on showAnimation {
+ NumberAnimation {
+ duration: 400
+ easing.type: Easing.InOutQuad
+ }
+ }
+
+ // Open/close button
+ Item {
+ width: 30 * dp
+ height: 30 * dp
+ anchors.left: parent.right
+ anchors.leftMargin: 20
+ anchors.top: parent.top
+ anchors.topMargin: -10
+ Rectangle {
+ anchors.fill: parent
+ color: "#404040"
+ opacity: 0.4
+ border.width: 1
+ border.color: "#808080"
+ }
+
+ Image {
+ anchors.centerIn: parent
+ source: "images/arrow.png"
+ rotation: rootItem.showAnimation * 180
+ }
+ MouseArea {
+ anchors.fill: parent
+ anchors.margins: -30 * dp
+ onClicked: {
+ rootItem.show = !rootItem.show;
+ }
+ }
+ }
+
+ // Background
+ Rectangle {
+ anchors.fill: scrollView
+ opacity: showAnimation ? 0.6 : 0
+ visible: opacity
+ anchors.margins: -10
+ color: "#202020"
+ border.color: "#808080"
+ border.width: 1
+ }
+
+ ScrollView {
+ id: scrollView
+ anchors.fill: parent
+ ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
+ ScrollBar.vertical.interactive: false
+ clip: true
+ Column {
+ id: settingsArea
+ anchors.fill: parent
+ opacity: showAnimation
+ visible: opacity
+
+ Item {
+ width: 1
+ height: 20 * dp
+ }
+ Image {
+ anchors.horizontalCenter: parent.horizontalCenter
+ fillMode: Image.PreserveAspectFit
+ width: parent.width * 0.8
+ height: width * 0.25
+ source: "images/Built_with_Qt_RGB_logo.png"
+ }
+ Item {
+ width: 1
+ height: 28 * dp
+ }
+
+ SettingsComponentView {
+ id: settingsViewGeneral
+ text: qsTr("General")
+ show: true
+ SettingsComponentCheckBox {
+ text: "Show Shaders"
+ checked: settings.showShader
+ onToggled: {
+ settings.showShader = checked;
+ }
+ }
+ SettingsComponentCheckBox {
+ text: "Show Item Size"
+ checked: settings.showItemSize
+ onToggled: {
+ settings.showItemSize = checked;
+ }
+ }
+ SettingsComponentCheckBox {
+ text: "AutoPadding Enabled"
+ checked: settings.autoPaddingEnabled
+ onToggled: {
+ settings.autoPaddingEnabled = checked;
+ }
+ }
+ SettingsComponentCheckBox {
+ text: "Show Custom MultiEffect"
+ checked: settings.showCustomMultiEffect
+ onToggled: {
+ settings.showCustomMultiEffect = checked;
+ }
+ }
+ Item {
+ width: 1
+ height: 20 * dp
+ }
+ SettingsComponentSlider {
+ text: qsTr("Padding Left") + ": " + value.toFixed(0)
+ value: settings.paddingRect.x
+ from: 0.0
+ to: 300
+ onMoved: {
+ settings.paddingRect.x = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Padding Right") + ": " + value.toFixed(0)
+ value: settings.paddingRect.width
+ from: 0.0
+ to: 300
+ onMoved: {
+ settings.paddingRect.width = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Padding Top") + ": " + value.toFixed(0)
+ value: settings.paddingRect.y
+ from: 0.0
+ to: 300
+ onMoved: {
+ settings.paddingRect.y = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Padding Bottom") + ": " + value.toFixed(0)
+ value: settings.paddingRect.height
+ from: 0.0
+ to: 300
+ onMoved: {
+ settings.paddingRect.height = value;
+ }
+ }
+ }
+
+ SettingsComponentView {
+ text: qsTr("Color")
+ show: false
+ SettingsComponentSlider {
+ text: qsTr("Brightness") + ": " + value.toFixed(3)
+ showCheckbox: true
+ checked: settings.brightnessEnabled
+ onToggled: {
+ settings.brightnessEnabled = checked;
+ }
+ value: settings.brightness
+ from: -1
+ to: 1
+ onMoved: {
+ settings.brightness = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Contrast") + ": " + value.toFixed(3)
+ showCheckbox: true
+ checked: settings.contrastEnabled
+ onToggled: {
+ settings.contrastEnabled = checked;
+ }
+ value: settings.contrast
+ from: -1
+ to: 1
+ onMoved: {
+ settings.contrast = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Saturation") + ": " + value.toFixed(3)
+ showCheckbox: true
+ checked: settings.saturationEnabled
+ onToggled: {
+ settings.saturationEnabled = checked;
+ }
+ value: settings.saturation
+ from: -1
+ to: 1
+ onMoved: {
+ settings.saturation = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Colorization") + ": " + value.toFixed(3)
+ showCheckbox: true
+ checked: settings.colorizationEnabled
+ onToggled: {
+ settings.colorizationEnabled = checked;
+ }
+ value: settings.colorization
+ from: 0
+ to: 1
+ onMoved: {
+ settings.colorization = value;
+ }
+ }
+ SettingsComponentColorSelector {
+ id: colorizationColorSelector
+ text: qsTr("Colorization Color")
+ width: settings.settingsViewWidth - 10
+ onValueChanged: {
+ settings.colorizationColor = value;
+ }
+ }
+ }
+ SettingsComponentView {
+ text: qsTr("Blur")
+ show: false
+
+ SettingsComponentSlider {
+ text: qsTr("Blur") + ": " + value.toFixed(3)
+ showCheckbox: true
+ checked: settings.blurEnabled
+ onToggled: {
+ settings.blurEnabled = checked;
+ }
+ value: settings.blur
+ from: 0
+ to: 1.0
+ onMoved: {
+ settings.blur = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Blur Multiplier") + ": " + value.toFixed(3)
+ value: settings.blurMultiplier
+ from: 0.0
+ to: 2.0
+ onMoved: {
+ settings.blurMultiplier = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Blur Max") + ": " + value.toFixed(0)
+ value: settings.blurMax
+ from: 0
+ to: 64
+ stepSize: 2
+ onMoved: {
+ settings.blurMax = value;
+ }
+ }
+
+ }
+ SettingsComponentView {
+ text: qsTr("Shadow")
+ show: false
+
+ SettingsComponentSlider {
+ text: qsTr("Shadow") + ": " + value.toFixed(3)
+ showCheckbox: true
+ checked: settings.shadowEnabled
+ onToggled: {
+ settings.shadowEnabled = checked;
+ }
+ value: settings.shadowOpacity
+ from: 0
+ to: 1.0
+ onMoved: {
+ settings.shadowOpacity = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Shadow Blur") + ": " + value.toFixed(3)
+ value: settings.shadowBlur
+ from: 0.0
+ to: 1.0
+ onMoved: {
+ settings.shadowBlur = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Shadow HorizontalOffset") + ": " + value.toFixed(1)
+ value: settings.shadowHorizontalOffset
+ from: -20.0
+ to: 20.0
+ onMoved: {
+ settings.shadowHorizontalOffset = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Shadow VerticalOffset") + ": " + value.toFixed(1)
+ value: settings.shadowVerticalOffset
+ from: -20.0
+ to: 20.0
+ onMoved: {
+ settings.shadowVerticalOffset = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Shadow Scale") + ": " + value.toFixed(3)
+ value: settings.shadowScale
+ from: 0.8
+ to: 1.2
+ onMoved: {
+ settings.shadowScale = value;
+ }
+ }
+ SettingsComponentColorSelector {
+ id: shadowColorSelector
+ text: qsTr("Shadow Color")
+ width: settings.settingsViewWidth - 10
+ onValueChanged: {
+ settings.shadowColor = value;
+ }
+ }
+ }
+ SettingsComponentView {
+ text: qsTr("Mask")
+ show: false
+ SettingsComponentCheckBox {
+ text: "Mask Enabled"
+ checked: settings.maskEnabled
+ onToggled: {
+ settings.maskEnabled = checked;
+ }
+ }
+ SettingsComponentCheckBox {
+ text: "Mask Inverted"
+ checked: settings.maskInverted
+ onToggled: {
+ settings.maskInverted = checked;
+ }
+ }
+ Item {
+ width: 1
+ height: 20 * dp
+ }
+ SettingsComponentSlider {
+ text: qsTr("Mask Threshold Min") + ": " + value.toFixed(3)
+ value: settings.maskThresholdMin
+ from: 0.0
+ to: 1.0
+ onMoved: {
+ settings.maskThresholdMin = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Mask Spread At Min") + ": " + value.toFixed(3)
+ value: settings.maskSpreadAtMin
+ from: 0.0
+ to: 1.0
+ onMoved: {
+ settings.maskSpreadAtMin = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Mask Threshold Max") + ": " + value.toFixed(3)
+ value: settings.maskThresholdMax
+ from: 0.0
+ to: 1.0
+ onMoved: {
+ settings.maskThresholdMax = value;
+ }
+ }
+ SettingsComponentSlider {
+ text: qsTr("Mask Spread At Max") + ": " + value.toFixed(3)
+ value: settings.maskSpreadAtMax
+ from: 0.0
+ to: 1.0
+ onMoved: {
+ settings.maskSpreadAtMax = value;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quick/multieffect/testbed/qml/ShaderView.qml b/examples/quick/multieffect/testbed/qml/ShaderView.qml
new file mode 100644
index 0000000000..fc89f5aec5
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/ShaderView.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: rootItem
+
+ property string text
+
+ width: textItem.width
+ height: textItem.height
+
+ Rectangle {
+ anchors.fill: textItem
+ anchors.margins: -10
+ z: -1
+ color: "#000000"
+ opacity: 0.6
+ border.color: "#ffffff"
+ border.width: 2
+ }
+ Text {
+ id: textItem
+ text: rootItem.text
+ font.pixelSize: 16
+ color: "#ffffff"
+ }
+}
diff --git a/examples/quick/multieffect/testbed/qml/TestMaskItem.qml b/examples/quick/multieffect/testbed/qml/TestMaskItem.qml
new file mode 100644
index 0000000000..4ba5950b96
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/TestMaskItem.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: rootItem
+ layer.enabled: true
+ visible: false
+ Rectangle {
+ anchors.fill: parent
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#00000000" }
+ GradientStop { position: 1.0; color: "#ffffffff" }
+ }
+ }
+}
diff --git a/examples/quick/multieffect/testbed/qml/TestSourceItem.qml b/examples/quick/multieffect/testbed/qml/TestSourceItem.qml
new file mode 100644
index 0000000000..ca5ca387ec
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/TestSourceItem.qml
@@ -0,0 +1,113 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+Item {
+ id: rootItem
+
+ Material.theme: Material.Dark
+ Material.accent: Material.LightGreen
+
+ Image {
+ anchors.centerIn: parent
+ width: parent.width / 2
+ height: parent.height / 2
+ sourceSize.width: width
+ sourceSize.height: height
+ source: "images/Built_with_Qt.png"
+ fillMode: Image.PreserveAspectFit
+ SequentialAnimation on anchors.verticalCenterOffset {
+ loops: Animation.Infinite
+ paused: !settings.animateMovement
+ NumberAnimation {
+ to: 50
+ duration: 2000
+ easing.type: Easing.InOutQuad
+ }
+ NumberAnimation {
+ to: -50
+ duration: 2000
+ easing.type: Easing.InOutQuad
+ }
+ }
+ }
+ Text {
+ font.pixelSize: 50
+ font.bold: true
+ text: "TESTING"
+ color: "white"
+ }
+ Image {
+ source: "images/warning.png"
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ mipmap: true
+ SequentialAnimation on scale {
+ loops: Animation.Infinite
+ paused: !settings.animateMovement
+ NumberAnimation {
+ to: 0.4
+ duration: 3000
+ easing.type: Easing.InOutQuad
+ }
+ NumberAnimation {
+ to: 1.0
+ duration: 1000
+ easing.type: Easing.OutBack
+ }
+ }
+
+ }
+ Rectangle {
+ width: parent.width * 0.2
+ height: width
+ anchors.top: parent.top
+ anchors.topMargin: width * 0.2
+ anchors.right: parent.right
+ anchors.rightMargin: width * 0.2
+ color: "#808080"
+ border.color: "#f0f0f0"
+ border.width: 2
+ radius: width * 0.1
+ SequentialAnimation on opacity {
+ paused: !settings.animateMovement
+ loops: Animation.Infinite
+ NumberAnimation {
+ to: 0.0
+ duration: 2000
+ easing.type: Easing.InOutQuad
+ }
+ NumberAnimation {
+ to: 1.0
+ duration: 2000
+ easing.type: Easing.InOutQuad
+ }
+ }
+
+ NumberAnimation on rotation {
+ paused: !settings.animateMovement
+ loops: Animation.Infinite
+ from: 0
+ to: 360
+ duration: 10000
+ }
+ }
+
+ Column {
+ anchors.right: parent.right
+ anchors.rightMargin: width * 0.2
+ anchors.bottom: parent.bottom
+ Button {
+ id: button
+ text: "Controls Button"
+ Material.theme: Material.Light
+ }
+ Slider {
+ width: button.width
+ }
+ }
+}
+
diff --git a/examples/quick/multieffect/testbed/qml/WarningsItem.qml b/examples/quick/multieffect/testbed/qml/WarningsItem.qml
new file mode 100644
index 0000000000..201332c87b
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/WarningsItem.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 string text
+
+ function show() {
+ showAnimation.restart();
+ }
+
+ height: 42
+ width: warningIcon.width + textItem.width + 40
+ opacity: 0
+
+ Rectangle {
+ anchors.fill: parent
+ color: "#000000"
+ opacity: 0.6
+ }
+
+ SequentialAnimation {
+ id: showAnimation
+ NumberAnimation {
+ target: rootItem
+ property: "opacity"
+ to: 1
+ duration: 400
+ easing.type: Easing.InOutQuad
+ }
+ PauseAnimation {
+ duration: 2000
+ }
+ NumberAnimation {
+ target: rootItem
+ property: "opacity"
+ to: 0
+ duration: 400
+ easing.type: Easing.InOutQuad
+ }
+ }
+
+ Image {
+ id: warningIcon
+ anchors.verticalCenter: parent.verticalCenter
+ x: 8
+ source: "images/warning.png"
+ mipmap: true
+ width: 24
+ height: width
+ }
+
+ Text {
+ id: textItem
+ anchors.left: warningIcon.right
+ anchors.leftMargin: 8
+ anchors.verticalCenter: parent.verticalCenter
+ color: "#ffffff"
+ font.pixelSize: 16
+ text: rootItem.text
+ }
+
+}
diff --git a/examples/quick/multieffect/testbed/qml/WarningsView.qml b/examples/quick/multieffect/testbed/qml/WarningsView.qml
new file mode 100644
index 0000000000..c25ad5fccd
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/WarningsView.qml
@@ -0,0 +1,38 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: rootItem
+
+ function showShaderWarning() {
+ shaderWarning.show();
+ }
+ function showSizeWarning() {
+ sizeWarning.show();
+ }
+
+ height: 60
+
+ WarningsItem {
+ id: shaderWarning
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ text: qsTr("Shader changed!")
+ }
+ WarningsItem {
+ id: sizeWarning
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: shaderWarning.right
+ 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/images/Built_with_Qt.png b/examples/quick/multieffect/testbed/qml/images/Built_with_Qt.png
new file mode 100644
index 0000000000..e612481510
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/images/Built_with_Qt.png
Binary files differ
diff --git a/examples/quick/multieffect/testbed/qml/images/Built_with_Qt_RGB_logo.png b/examples/quick/multieffect/testbed/qml/images/Built_with_Qt_RGB_logo.png
new file mode 100644
index 0000000000..8d2dfc17ec
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/images/Built_with_Qt_RGB_logo.png
Binary files differ
diff --git a/examples/quick/multieffect/testbed/qml/images/arrow.png b/examples/quick/multieffect/testbed/qml/images/arrow.png
new file mode 100644
index 0000000000..067bec4509
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/images/arrow.png
Binary files differ
diff --git a/examples/quick/multieffect/testbed/qml/images/pause.png b/examples/quick/multieffect/testbed/qml/images/pause.png
new file mode 100644
index 0000000000..ef6e0ac26a
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/images/pause.png
Binary files differ
diff --git a/examples/quick/multieffect/testbed/qml/images/play.png b/examples/quick/multieffect/testbed/qml/images/play.png
new file mode 100644
index 0000000000..4cd0f78184
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/images/play.png
Binary files differ
diff --git a/examples/quick/multieffect/testbed/qml/images/spinner.png b/examples/quick/multieffect/testbed/qml/images/spinner.png
new file mode 100644
index 0000000000..3ff86d53ac
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/images/spinner.png
Binary files differ
diff --git a/examples/quick/multieffect/testbed/qml/images/warning.png b/examples/quick/multieffect/testbed/qml/images/warning.png
new file mode 100644
index 0000000000..08d74b8b83
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/images/warning.png
Binary files differ
diff --git a/examples/quick/multieffect/testbed/qml/main.qml b/examples/quick/multieffect/testbed/qml/main.qml
new file mode 100644
index 0000000000..8fc761169e
--- /dev/null
+++ b/examples/quick/multieffect/testbed/qml/main.qml
@@ -0,0 +1,186 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Effects
+import "CustomMultiEffect"
+
+Rectangle {
+ id: mainWindow
+
+ // Multiplier for resolution independency
+ readonly property real dp: 0.2 + Math.min(width, height) / 1200
+
+ width: 1280
+ height: 720
+ color: "#404040"
+
+ Settings {
+ id: settings
+ onReseted: {
+ settingsView.resetSettings();
+ }
+ }
+
+ Settings {
+ id: defaultSettings
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ if (resetSettingsOverlay.showAnimationProgress == 0)
+ settings.animateMovement = !settings.animateMovement;
+ }
+ onPressed: {
+ resetSettingsOverlay.startShow();
+ }
+ onReleased: {
+ resetSettingsOverlay.stopShow();
+ }
+ }
+
+
+ Item {
+ id: mainArea
+ anchors.left: settingsView.right
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+
+ TestSourceItem {
+ id: testSourceItem
+ anchors.centerIn: parent
+ width: parent.width / 2
+ height: parent.height / 2
+
+ layer.enabled: true
+ visible: false
+ }
+ TestMaskItem {
+ id: testMaskItem
+ anchors.fill: testSourceItem
+ }
+
+ Rectangle {
+ readonly property int margin: 2
+ x: quickMultiEffect.x + quickMultiEffect.itemRect.x - margin
+ y: quickMultiEffect.y + quickMultiEffect.itemRect.y - margin
+ width: quickMultiEffect.itemRect.width + margin * 2
+ height: quickMultiEffect.itemRect.height + margin * 2
+ visible: settings.showItemSize
+ color: "transparent"
+ border.color: "#ffffff"
+ border.width: 2
+ }
+
+ 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
+ contrast: settings.contrastEnabled ? settings.contrast : 0
+ saturation: settings.saturationEnabled ? settings.saturation : 0
+ colorizationColor: settings.colorizationColor
+ colorization: settings.colorizationEnabled ? settings.colorization : 0
+ blurEnabled: settings.blurEnabled
+ blur: settings.blur
+ blurMax: settings.blurMax
+ blurMultiplier: settings.blurMultiplier
+ shadowEnabled: settings.shadowEnabled
+ shadowOpacity: settings.shadowOpacity
+ shadowBlur: settings.shadowBlur
+ shadowHorizontalOffset: settings.shadowHorizontalOffset
+ shadowVerticalOffset: settings.shadowVerticalOffset
+ shadowColor: settings.shadowColor
+ shadowScale: settings.shadowScale
+ maskEnabled: settings.maskEnabled
+ maskInverted: settings.maskInverted
+ maskThresholdMin: settings.maskThresholdMin
+ maskSpreadAtMin: settings.maskSpreadAtMin
+ maskThresholdMax: settings.maskThresholdMax
+ maskSpreadAtMax: settings.maskSpreadAtMax
+
+ onItemSizeChanged: {
+ if (visible)
+ warningsView.showSizeWarning();
+ }
+ onShaderChanged: {
+ 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 {
+ id: settingsView
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ anchors.margins: 20
+ visible: settings.showSettingsView
+ Component.onCompleted: {
+ settings.reset();
+ }
+ }
+
+ FpsItem {
+ anchors.right: parent.right
+ }
+
+ ShaderView {
+ id: shaderView
+ visible: settings.showShader
+ anchors.horizontalCenter: mainArea.horizontalCenter
+ anchors.top: mainArea.top
+ anchors.topMargin: 20
+ text: "Fragment shader: " + quickMultiEffect.fragmentShader + "\nVertex shader: " + quickMultiEffect.vertexShader
+ }
+
+ WarningsView {
+ id: warningsView
+ anchors.bottom: parent.bottom
+ anchors.left: settingsView.right
+ anchors.leftMargin: 40
+ anchors.right: parent.right
+ }
+
+ ResetSettingsOverlay {
+ id: resetSettingsOverlay
+ onAnimationFinished: {
+ settings.reset();
+ }
+ }
+}
diff --git a/examples/quick/multieffect/testbed/testbed.pro b/examples/quick/multieffect/testbed/testbed.pro
new file mode 100644
index 0000000000..e1ae55b118
--- /dev/null
+++ b/examples/quick/multieffect/testbed/testbed.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+
+QT += quick qml
+QT += quickcontrols2
+SOURCES += main.cpp
+RESOURCES += \
+ qml.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/multieffect/testbed
+INSTALLS += target
diff --git a/examples/quick/particles/.prev_CMakeLists.txt b/examples/quick/particles/.prev_CMakeLists.txt
deleted file mode 100644
index 1dbf49be21..0000000000
--- a/examples/quick/particles/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-# Generated from particles.pro.
-
-add_subdirectory(affectors)
-add_subdirectory(emitters)
-add_subdirectory(imageparticle)
-add_subdirectory(itemparticle)
-add_subdirectory(system)
diff --git a/examples/quick/particles/CMakeLists.txt b/examples/quick/particles/CMakeLists.txt
index 1dbf49be21..ce9658b74a 100644
--- a/examples/quick/particles/CMakeLists.txt
+++ b/examples/quick/particles/CMakeLists.txt
@@ -1,7 +1,7 @@
-# Generated from particles.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-add_subdirectory(affectors)
-add_subdirectory(emitters)
-add_subdirectory(imageparticle)
-add_subdirectory(itemparticle)
-add_subdirectory(system)
+qt_internal_add_example(affectors)
+qt_internal_add_example(emitters)
+qt_internal_add_example(imageparticle)
+qt_internal_add_example(system)
diff --git a/examples/quick/particles/affectors/CMakeLists.txt b/examples/quick/particles/affectors/CMakeLists.txt
index 1e65a15d2e..dc29e1787b 100644
--- a/examples/quick/particles/affectors/CMakeLists.txt
+++ b/examples/quick/particles/affectors/CMakeLists.txt
@@ -1,271 +1,73 @@
-# Generated from affectors.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(affectors LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+add_subdirectory("../../shared" "shared")
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/particles/affectors")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(affectors
+qt_add_executable(affectorsexample WIN32 MACOSX_BUNDLE
main.cpp
)
-set_target_properties(affectors PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(affectors PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(affectors_resource_files
- "affectors.qml"
- "content/GreyButton.qml"
- "content/age.qml"
- "content/attractor.qml"
- "content/customaffector.qml"
- "content/friction.qml"
- "content/gravity.qml"
- "content/groupgoal.qml"
- "content/move.qml"
- "content/spritegoal.qml"
- "content/turbulence.qml"
- "content/wander.qml"
+target_link_libraries(affectorsexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(affectors "affectors"
- PREFIX
- "/particles/affectors"
- FILES
- ${affectors_resource_files}
-)
-set_source_files_properties("../images/_explo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/_explo.png"
-)
-set_source_files_properties("../images/backgroundLeaves.jpg"
- PROPERTIES QT_RESOURCE_ALIAS "images/backgroundLeaves.jpg"
-)
-set_source_files_properties("../images/bear_tiles.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/bear_tiles.png"
-)
-set_source_files_properties("../images/candle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/candle.png"
-)
-set_source_files_properties("../images/colortable.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/colortable.png"
-)
-set_source_files_properties("../images/finalfrontier.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/finalfrontier.png"
-)
-set_source_files_properties("../images/flower.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/flower.png"
-)
-set_source_files_properties("../images/matchmask.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/matchmask.png"
-)
-set_source_files_properties("../images/meteor.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteor.png"
-)
-set_source_files_properties("../images/meteor_explo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteor_explo.png"
-)
-set_source_files_properties("../images/meteors.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteors.png"
-)
-set_source_files_properties("../images/nullRock.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/nullRock.png"
-)
-set_source_files_properties("../images/particle2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particle2.png"
-)
-set_source_files_properties("../images/particle3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particle3.png"
-)
-set_source_files_properties("../images/particleA.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particleA.png"
-)
-set_source_files_properties("../images/portal_bg.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/portal_bg.png"
-)
-set_source_files_properties("../images/realLeaf1.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf1.png"
-)
-set_source_files_properties("../images/realLeaf2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf2.png"
-)
-set_source_files_properties("../images/realLeaf3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf3.png"
-)
-set_source_files_properties("../images/realLeaf4.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf4.png"
-)
-set_source_files_properties("../images/rocket.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/rocket.png"
-)
-set_source_files_properties("../images/rocket2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/rocket2.png"
-)
-set_source_files_properties("../images/sizeInOut.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/sizeInOut.png"
-)
-set_source_files_properties("../images/snowflake.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/snowflake.png"
-)
-set_source_files_properties("../images/sparkleSize.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/sparkleSize.png"
-)
-set_source_files_properties("../images/starfish_0.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_0.png"
-)
-set_source_files_properties("../images/starfish_1.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_1.png"
-)
-set_source_files_properties("../images/starfish_2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_2.png"
-)
-set_source_files_properties("../images/starfish_3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_3.png"
-)
-set_source_files_properties("../images/starfish_4.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_4.png"
-)
-set_source_files_properties("../images/starfish_mask.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_mask.png"
-)
-set(images_resource_files
- "images/_explo.png"
- "images/backgroundLeaves.jpg"
- "images/bear_tiles.png"
- "images/candle.png"
- "images/colortable.png"
- "images/finalfrontier.png"
- "images/flower.png"
- "images/matchmask.png"
- "images/meteor.png"
- "images/meteor_explo.png"
- "images/meteors.png"
- "images/nullRock.png"
- "images/particle2.png"
- "images/particle3.png"
- "images/particleA.png"
- "images/portal_bg.png"
- "images/realLeaf1.png"
- "images/realLeaf2.png"
- "images/realLeaf3.png"
- "images/realLeaf4.png"
- "images/rocket.png"
- "images/rocket2.png"
- "images/sizeInOut.png"
- "images/snowflake.png"
- "images/sparkleSize.png"
- "images/starfish_0.png"
- "images/starfish_1.png"
- "images/starfish_2.png"
- "images/starfish_3.png"
- "images/starfish_4.png"
- "images/starfish_mask.png"
-)
+add_dependencies(affectorsexample affectors_shared)
-qt6_add_resources(affectors "images"
- PREFIX
- "/particles"
- BASE
- ".."
- FILES
- ${images_resource_files}
-)
-set_source_files_properties("../../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
+# Resources:
+qt_add_qml_module(affectorsexample
+ URI affectors
+ QML_FILES
+ "affectors.qml"
+ "GreyButton.qml"
+ "age.qml"
+ "attractor.qml"
+ "customaffector.qml"
+ "friction.qml"
+ "gravity.qml"
+ "groupgoal.qml"
+ "move.qml"
+ "spritegoal.qml"
+ "turbulence.qml"
+ "wander.qml"
+ RESOURCES
+ "images/snowflake.png"
+ "images/finalfrontier.png"
+ "images/meteor.png"
+ "images/rocket.png"
+ "images/rocket2.png"
+ "images/backgroundLeaves.jpg"
+ "images/realLeaf1.png"
+ "images/realLeaf2.png"
+ "images/realLeaf3.png"
+ "images/realLeaf4.png"
+ "images/particleA.png"
+ "images/matchmask.png"
+ "images/nullRock.png"
+ "images/_explo.png"
+ "images/candle.png"
)
-qt6_add_resources(affectors "shared"
- PREFIX
- "/shared"
- BASE
- "../../shared"
- FILES
- ${shared_resource_files}
+install(TARGETS affectorsexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS affectors
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
+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
new file mode 100644
index 0000000000..412a6dfa60
--- /dev/null
+++ b/examples/quick/particles/affectors/GreyButton.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: container
+
+ required property string text
+ property string subText: ""
+ signal clicked
+
+ width: buttonLabel.width + 20; height: col.height + 12
+
+ MouseArea {
+ id: mouseArea;
+ anchors.fill: parent;
+ onClicked: container.clicked();
+ onPressed: background.color = Qt.darker("lightgrey");
+ onReleased: background.color="lightgrey";
+ }
+
+ Rectangle {
+ id: background
+ anchors.fill: parent
+ color: "lightgrey"
+ radius: 4
+ border.width: 1
+ border.color: Qt.darker(color)
+ }
+
+ Column {
+ spacing: 2
+ id: col
+ x: 10
+ y: 6
+ Text {
+ id: buttonLabel; text: container.text; color: "black"; font.pixelSize: 24
+ }
+ Text {
+ id: buttonLabel2; text: container.subText; color: "black"; font.pixelSize: 12
+ }
+ }
+}
diff --git a/examples/quick/particles/affectors/affectors.pro b/examples/quick/particles/affectors/affectors.pro
index 673ccfbb81..fc049c21b0 100644
--- a/examples/quick/particles/affectors/affectors.pro
+++ b/examples/quick/particles/affectors/affectors.pro
@@ -4,7 +4,6 @@ QT += quick qml
SOURCES += main.cpp
RESOURCES += \
affectors.qrc \
- ../images.qrc \
../../shared/shared.qrc
target.path = $$[QT_INSTALL_EXAMPLES]/quick/particles/affectors
diff --git a/examples/quick/particles/affectors/affectors.qml b/examples/quick/particles/affectors/affectors.qml
index 81240fed9b..f4f746471a 100644
--- a/examples/quick/particles/affectors/affectors.qml
+++ b/examples/quick/particles/affectors/affectors.qml
@@ -1,73 +1,26 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../../shared" as Examples
+import QtQuick
+import shared
Item {
height: 480
width: 320
- Examples.LauncherList {
+ LauncherList {
id: ll
anchors.fill: parent
Component.onCompleted: {
- addExample("Age", "Kills off particles that enter the affector", Qt.resolvedUrl("content/age.qml"));
- addExample("Attractor", "Simulates a small black hole", Qt.resolvedUrl("content/attractor.qml"));
- addExample("Custom Affector", "Custom falling leaves", Qt.resolvedUrl("content/customaffector.qml"));
- addExample("Friction", "Leaves that slow down as they fall", Qt.resolvedUrl("content/friction.qml"));
- addExample("Gravity", "Leaves that fall towards the earth as you move it", Qt.resolvedUrl("content/gravity.qml"));
- addExample("GroupGoal", "Balls that can be set on fire various ways", Qt.resolvedUrl("content/groupgoal.qml"));
- addExample("Move", "Some effects you can get by altering trajectory midway", Qt.resolvedUrl("content/move.qml"));
- addExample("SpriteGoal", "A ship that makes asteroids explode", Qt.resolvedUrl("content/spritegoal.qml"));
- addExample("Turbulence", "A candle with faint wind", Qt.resolvedUrl("content/turbulence.qml"));
- addExample("Wander", "Drifting snow flakes", Qt.resolvedUrl("content/wander.qml"));
+ addExample("Age", "Kills off particles that enter the affector", Qt.resolvedUrl("age.qml"));
+ addExample("Attractor", "Simulates a small black hole", Qt.resolvedUrl("attractor.qml"));
+ addExample("Custom Affector", "Custom falling leaves", Qt.resolvedUrl("customaffector.qml"));
+ addExample("Friction", "Leaves that slow down as they fall", Qt.resolvedUrl("friction.qml"));
+ addExample("Gravity", "Leaves that fall towards the earth as you move it", Qt.resolvedUrl("gravity.qml"));
+ addExample("GroupGoal", "Balls that can be set on fire various ways", Qt.resolvedUrl("groupgoal.qml"));
+ addExample("Move", "Some effects you can get by altering trajectory midway", Qt.resolvedUrl("move.qml"));
+ addExample("SpriteGoal", "A ship that makes asteroids explode", Qt.resolvedUrl("spritegoal.qml"));
+ addExample("Turbulence", "A candle with faint wind", Qt.resolvedUrl("turbulence.qml"));
+ addExample("Wander", "Drifting snow flakes", Qt.resolvedUrl("wander.qml"));
}
}
}
diff --git a/examples/quick/particles/affectors/affectors.qrc b/examples/quick/particles/affectors/affectors.qrc
index c1d797e4d8..a826d351a8 100644
--- a/examples/quick/particles/affectors/affectors.qrc
+++ b/examples/quick/particles/affectors/affectors.qrc
@@ -1,16 +1,31 @@
<RCC>
- <qresource prefix="/particles/affectors">
+ <qresource prefix="/qt/qml/affectors">
<file>affectors.qml</file>
- <file>content/age.qml</file>
- <file>content/attractor.qml</file>
- <file>content/customaffector.qml</file>
- <file>content/friction.qml</file>
- <file>content/gravity.qml</file>
- <file>content/GreyButton.qml</file>
- <file>content/groupgoal.qml</file>
- <file>content/move.qml</file>
- <file>content/spritegoal.qml</file>
- <file>content/turbulence.qml</file>
- <file>content/wander.qml</file>
+ <file>age.qml</file>
+ <file>attractor.qml</file>
+ <file>customaffector.qml</file>
+ <file>friction.qml</file>
+ <file>gravity.qml</file>
+ <file>GreyButton.qml</file>
+ <file>groupgoal.qml</file>
+ <file>move.qml</file>
+ <file>spritegoal.qml</file>
+ <file>turbulence.qml</file>
+ <file>wander.qml</file>
+ <file>images/snowflake.png</file>
+ <file>images/finalfrontier.png</file>
+ <file>images/meteor.png</file>
+ <file>images/rocket.png</file>
+ <file>images/rocket2.png</file>
+ <file>images/backgroundLeaves.jpg</file>
+ <file>images/realLeaf1.png</file>
+ <file>images/realLeaf2.png</file>
+ <file>images/realLeaf3.png</file>
+ <file>images/realLeaf4.png</file>
+ <file>images/particleA.png</file>
+ <file>images/matchmask.png</file>
+ <file>images/nullRock.png</file>
+ <file>images/_explo.png</file>
+ <file>images/candle.png</file>
</qresource>
</RCC>
diff --git a/examples/quick/particles/affectors/age.qml b/examples/quick/particles/affectors/age.qml
new file mode 100644
index 0000000000..a43a9a08ef
--- /dev/null
+++ b/examples/quick/particles/affectors/age.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.Particles
+
+Rectangle {
+ id: root
+ width: 360
+ height: 600
+ color: "white"
+
+ ParticleSystem { id: particles }
+
+ ImageParticle {
+ system: particles
+ sprites: Sprite {
+ name: "snow"
+ source: "images/snowflake.png"
+ frameCount: 51
+ frameDuration: 40
+ frameDurationVariation: 8
+ }
+ }
+
+ Emitter {
+ system: particles
+ emitRate: 20
+ lifeSpan: 8000
+ velocity: PointDirection { y:80; yVariation: 40; }
+ acceleration: PointDirection { y: 4 }
+ size: 36
+ endSize: 12
+ sizeVariation: 8
+ width: parent.width
+ height: 100
+ }
+
+ MouseArea {
+ id: ma
+ anchors.fill: parent
+ hoverEnabled: true
+ }
+
+ Rectangle {
+ color: "#803333AA"
+ border.color: "black"
+ x: ma.mouseX - 36
+ y: ma.mouseY - 36
+ width: 72
+ height: 72
+ //! [0]
+ Age {
+ anchors.fill: parent
+ system: particles
+ once: true
+ lifeLeft: 1200
+ advancePosition: false
+ }
+ //! [0]
+ }
+}
diff --git a/examples/quick/particles/affectors/attractor.qml b/examples/quick/particles/affectors/attractor.qml
new file mode 100644
index 0000000000..c5b95ee2a0
--- /dev/null
+++ b/examples/quick/particles/affectors/attractor.qml
@@ -0,0 +1,152 @@
+// 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: 540
+ color: "black"
+ Image {
+ source: "images/finalfrontier.png"
+ anchors.centerIn:parent
+ }
+ ParticleSystem {
+ id: particles
+ anchors.fill: parent
+
+ Emitter {
+ group: "stars"
+ emitRate: 40
+ lifeSpan: 4000
+ enabled: true
+ size: 30
+ sizeVariation: 10
+ velocity: PointDirection { x: 220; xVariation: 40 }
+ height: parent.height
+ }
+ Emitter {
+ group: "roids"
+ emitRate: 10
+ lifeSpan: 4000
+ enabled: true
+ size: 30
+ sizeVariation: 10
+ velocity: PointDirection { x: 220; xVariation: 40 }
+ height: parent.height
+ }
+ ImageParticle {
+ id: stars
+ groups: ["stars"]
+ source: "qrc:///particleresources/star.png"
+ color: "white"
+ colorVariation: 0.1
+ alpha: 0
+ }
+ ImageParticle {
+ id: roids
+ groups: ["roids"]
+ sprites: Sprite {
+ id: spinState
+ name: "spinning"
+ source: "images/meteor.png"
+ frameCount: 35
+ frameDuration: 60
+ }
+ }
+ ImageParticle {
+ id: shot
+ groups: ["shot"]
+ source: "qrc:///particleresources/star.png"
+
+ color: "#0FF06600"
+ colorVariation: 0.3
+ }
+ ImageParticle {
+ id: engine
+ groups: ["engine"]
+ source: "qrc:///particleresources/fuzzydot.png"
+
+ SequentialAnimation on color {
+ loops: Animation.Infinite
+ ColorAnimation {
+ from: "red"
+ to: "cyan"
+ duration: 1000
+ }
+ ColorAnimation {
+ from: "cyan"
+ to: "red"
+ duration: 1000
+ }
+ }
+
+ colorVariation: 0.2
+ }
+ //! [0]
+ Attractor {
+ id: gs; pointX: root.width/2; pointY: root.height/2; strength: 4000000;
+ affectedParameter: Attractor.Acceleration
+ proportionalToDistance: Attractor.InverseQuadratic
+ }
+ //! [0]
+ Age {
+ x: gs.pointX - 8;
+ y: gs.pointY - 8;
+ width: 16
+ height: 16
+ }
+ Rectangle {
+ color: "black"
+ width: 8
+ height: 8
+ radius: 4
+ x: gs.pointX - 4
+ y: gs.pointY - 4
+ }
+
+ Image {
+ source:"images/rocket2.png"
+ id: ship
+ width: 45
+ height: 22
+ //Automatic movement
+ SequentialAnimation on x {
+ loops: -1
+ NumberAnimation{to: root.width-45; easing.type: Easing.InOutQuad; duration: 2000}
+ NumberAnimation{to: 0; easing.type: Easing.OutInQuad; duration: 6000}
+ }
+ SequentialAnimation on y {
+ loops: -1
+ NumberAnimation{to: root.height-22; easing.type: Easing.OutInQuad; duration: 6000}
+ NumberAnimation{to: 0; easing.type: Easing.InOutQuad; duration: 2000}
+ }
+ }
+ Emitter {
+ group: "engine"
+ emitRate: 200
+ lifeSpan: 1000
+ size: 10
+ endSize: 4
+ sizeVariation: 4
+ velocity: PointDirection { x: -128; xVariation: 32 }
+ height: ship.height
+ y: ship.y
+ x: ship.x
+ width: 20
+ }
+ Emitter {
+ group: "shot"
+ emitRate: 32
+ lifeSpan: 1000
+ enabled: true
+ size: 40
+ velocity: PointDirection { x: 256; }
+ x: ship.x + ship.width
+ y: ship.y + ship.height/2
+ }
+ }
+}
+
diff --git a/examples/quick/particles/affectors/content/GreyButton.qml b/examples/quick/particles/affectors/content/GreyButton.qml
deleted file mode 100644
index d78d913cf0..0000000000
--- a/examples/quick/particles/affectors/content/GreyButton.qml
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Item {
- id: container
-
- property string text: "Button"
- property string subText: ""
- signal clicked
-
- width: buttonLabel.width + 20; height: col.height + 12
-
- MouseArea {
- id: mouseArea;
- anchors.fill: parent;
- onClicked: container.clicked();
- onPressed: background.color = Qt.darker("lightgrey");
- onReleased: background.color="lightgrey";
- }
-
- Rectangle {
- id: background
- anchors.fill: parent
- color: "lightgrey"
- radius: 4
- border.width: 1
- border.color: Qt.darker(color)
- }
-
- Column {
- spacing: 2
- id: col
- x: 10
- y: 6
- Text {
- id: buttonLabel; text: container.text; color: "black"; font.pixelSize: 24
- }
- Text {
- id: buttonLabel2; text: container.subText; color: "black"; font.pixelSize: 12
- }
- }
-}
diff --git a/examples/quick/particles/affectors/content/age.qml b/examples/quick/particles/affectors/content/age.qml
deleted file mode 100644
index ff5114a596..0000000000
--- a/examples/quick/particles/affectors/content/age.qml
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- id: root
- width: 360
- height: 600
- color: "white"
-
- ParticleSystem { id: particles }
-
- ImageParticle {
- system: particles
- sprites: Sprite {
- name: "snow"
- source: "../../images/snowflake.png"
- frameCount: 51
- frameDuration: 40
- frameDurationVariation: 8
- }
- }
-
- Emitter {
- system: particles
- emitRate: 20
- lifeSpan: 8000
- velocity: PointDirection { y:80; yVariation: 40; }
- acceleration: PointDirection { y: 4 }
- size: 36
- endSize: 12
- sizeVariation: 8
- width: parent.width
- height: 100
- }
-
- MouseArea {
- id: ma
- anchors.fill: parent
- hoverEnabled: true
- }
-
- Rectangle {
- color: "#803333AA"
- border.color: "black"
- x: ma.mouseX - 36
- y: ma.mouseY - 36
- width: 72
- height: 72
- //! [0]
- Age {
- anchors.fill: parent
- system: particles
- once: true
- lifeLeft: 1200
- advancePosition: false
- }
- //! [0]
- }
-}
diff --git a/examples/quick/particles/affectors/content/attractor.qml b/examples/quick/particles/affectors/content/attractor.qml
deleted file mode 100644
index 7fbb6069b2..0000000000
--- a/examples/quick/particles/affectors/content/attractor.qml
+++ /dev/null
@@ -1,200 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- id: root
- width: 360
- height: 540
- color: "black"
- Image {
- source: "../../images/finalfrontier.png"
- anchors.centerIn:parent
- }
- ParticleSystem {
- id: particles
- anchors.fill: parent
-
- Emitter {
- group: "stars"
- emitRate: 40
- lifeSpan: 4000
- enabled: true
- size: 30
- sizeVariation: 10
- velocity: PointDirection { x: 220; xVariation: 40 }
- height: parent.height
- }
- Emitter {
- group: "roids"
- emitRate: 10
- lifeSpan: 4000
- enabled: true
- size: 30
- sizeVariation: 10
- velocity: PointDirection { x: 220; xVariation: 40 }
- height: parent.height
- }
- ImageParticle {
- id: stars
- groups: ["stars"]
- source: "qrc:///particleresources/star.png"
- color: "white"
- colorVariation: 0.1
- alpha: 0
- }
- ImageParticle {
- id: roids
- groups: ["roids"]
- sprites: Sprite {
- id: spinState
- name: "spinning"
- source: "../../images/meteor.png"
- frameCount: 35
- frameDuration: 60
- }
- }
- ImageParticle {
- id: shot
- groups: ["shot"]
- source: "qrc:///particleresources/star.png"
-
- color: "#0FF06600"
- colorVariation: 0.3
- }
- ImageParticle {
- id: engine
- groups: ["engine"]
- source: "qrc:///particleresources/fuzzydot.png"
-
- color: "orange"
- SequentialAnimation on color {
- loops: Animation.Infinite
- ColorAnimation {
- from: "red"
- to: "cyan"
- duration: 1000
- }
- ColorAnimation {
- from: "cyan"
- to: "red"
- duration: 1000
- }
- }
-
- colorVariation: 0.2
- }
- //! [0]
- Attractor {
- id: gs; pointX: root.width/2; pointY: root.height/2; strength: 4000000;
- affectedParameter: Attractor.Acceleration
- proportionalToDistance: Attractor.InverseQuadratic
- }
- //! [0]
- Age {
- x: gs.pointX - 8;
- y: gs.pointY - 8;
- width: 16
- height: 16
- }
- Rectangle {
- color: "black"
- width: 8
- height: 8
- radius: 4
- x: gs.pointX - 4
- y: gs.pointY - 4
- }
-
- Image {
- source:"../../images/rocket2.png"
- id: ship
- width: 45
- height: 22
- //Automatic movement
- SequentialAnimation on x {
- loops: -1
- NumberAnimation{to: root.width-45; easing.type: Easing.InOutQuad; duration: 2000}
- NumberAnimation{to: 0; easing.type: Easing.OutInQuad; duration: 6000}
- }
- SequentialAnimation on y {
- loops: -1
- NumberAnimation{to: root.height-22; easing.type: Easing.OutInQuad; duration: 6000}
- NumberAnimation{to: 0; easing.type: Easing.InOutQuad; duration: 2000}
- }
- }
- Emitter {
- group: "engine"
- emitRate: 200
- lifeSpan: 1000
- size: 10
- endSize: 4
- sizeVariation: 4
- velocity: PointDirection { x: -128; xVariation: 32 }
- height: ship.height
- y: ship.y
- x: ship.x
- width: 20
- }
- Emitter {
- group: "shot"
- emitRate: 32
- lifeSpan: 1000
- enabled: true
- size: 40
- velocity: PointDirection { x: 256; }
- x: ship.x + ship.width
- y: ship.y + ship.height/2
- }
- }
-}
-
diff --git a/examples/quick/particles/affectors/content/customaffector.qml b/examples/quick/particles/affectors/content/customaffector.qml
deleted file mode 100644
index 76fc4dc302..0000000000
--- a/examples/quick/particles/affectors/content/customaffector.qml
+++ /dev/null
@@ -1,156 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Item {
- width: 360
- height: 600
-
- Image {
- source: "../../images/backgroundLeaves.jpg"
- anchors.fill: parent
- }
- ParticleSystem {
- anchors.fill: parent
- Emitter {
- width: parent.width
- emitRate: 4
- lifeSpan: 14000
- size: 80
- velocity: PointDirection { y: 60 }
- }
- Wander {
- anchors.fill: parent
- anchors.bottomMargin: 100
- xVariance: 60
- pace: 60
- }
-
- //! [0]
- Affector {
- width: parent.width
- height: parent.height - 100
- onAffectParticles: (particles, dt) => {
- //Wobbly movement
- for (var i=0; i<particles.length; i++) {
- var particle = particles[i];
- particle.rotation += particle.vx * 0.15 * dt;
- particle.update = true;
- }
- }
- }
- //! [0]
-
- //! [1]
- Affector {//Custom Friction, adds some 'randomness'
- x: -60
- width: parent.width + 120
- height: 100
- anchors.bottom: parent.bottom
- onAffectParticles: (particles, dt) => {
- for (var i=0; i<particles.length; i++) {
- var particle = particles[i];
- var pseudoRand = (Math.floor(particle.t*1327) % 10) + 1;
- var yslow = dt * pseudoRand * 0.5 + 1;
- var xslow = dt * pseudoRand * 0.05 + 1;
- if (particle.vy < 1)
- particle.vy = 0;
- else
- particle.vy = (particle.vy / yslow);
- if (particle.vx < 1)
- particle.vx = 0;
- else
- particle.vx = (particle.vx / xslow);
- particle.update = true;
- }
- }
- }
- //! [1]
-
- ImageParticle {
- anchors.fill: parent
- id: particles
- sprites: [Sprite {
- source: "../../images/realLeaf1.png"
- frameCount: 1
- frameDuration: 1
- to: {"a":1, "b":1, "c":1, "d":1}
- }, Sprite {
- name: "a"
- source: "../../images/realLeaf1.png"
- frameCount: 1
- frameDuration: 10000
- },
- Sprite {
- name: "b"
- source: "../../images/realLeaf2.png"
- frameCount: 1
- frameDuration: 10000
- },
- Sprite {
- name: "c"
- source: "../../images/realLeaf3.png"
- frameCount: 1
- frameDuration: 10000
- },
- Sprite {
- name: "d"
- source: "../../images/realLeaf4.png"
- frameCount: 1
- frameDuration: 10000
- }
- ]
-
- z:4
- }
- }
-}
diff --git a/examples/quick/particles/affectors/content/friction.qml b/examples/quick/particles/affectors/content/friction.qml
deleted file mode 100644
index 1fa85ec2fe..0000000000
--- a/examples/quick/particles/affectors/content/friction.qml
+++ /dev/null
@@ -1,121 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Item {
- width: 360
- height: 600
-
- Image {
- source: "../../images/backgroundLeaves.jpg"
- anchors.fill: parent
- }
- ParticleSystem {
- anchors.fill: parent
- Emitter {
- width: parent.width
- emitRate: 4
- lifeSpan: 14000
- size: 80
- velocity: PointDirection { y: 160; yVariation: 80; xVariation: 20 }
- }
-
- ImageParticle {
- anchors.fill: parent
- id: particles
- sprites: [Sprite {
- source: "../../images/realLeaf1.png"
- frameCount: 1
- frameDuration: 1
- to: {"a":1, "b":1, "c":1, "d":1}
- }, Sprite {
- name: "a"
- source: "../../images/realLeaf1.png"
- frameCount: 1
- frameDuration: 10000
- },
- Sprite {
- name: "b"
- source: "../../images/realLeaf2.png"
- frameCount: 1
- frameDuration: 10000
- },
- Sprite {
- name: "c"
- source: "../../images/realLeaf3.png"
- frameCount: 1
- frameDuration: 10000
- },
- Sprite {
- name: "d"
- source: "../../images/realLeaf4.png"
- frameCount: 1
- frameDuration: 10000
- }
- ]
-
- width: 100
- height: 100
- x: 20
- y: 20
- z:4
- }
-
- //! [0]
- Friction {
- anchors.fill: parent
- anchors.margins: -40
- factor: 0.4
- }
- //! [0]
- }
-}
diff --git a/examples/quick/particles/affectors/content/gravity.qml b/examples/quick/particles/affectors/content/gravity.qml
deleted file mode 100644
index 99b14f3b1f..0000000000
--- a/examples/quick/particles/affectors/content/gravity.qml
+++ /dev/null
@@ -1,115 +0,0 @@
-/****************************************************************************
-*
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Item {
- id: window
- width: 320; height: 480
- Rectangle {
- id: sky
- anchors.fill: parent
- gradient: Gradient {
- GradientStop {
- position: 0.0
- color: "DeepSkyBlue"
- }
- GradientStop {
- position: 1.0
- color: "SkyBlue"
- }
- }
- }
-
- Rectangle {
- id: ground
- width: parent.height * 2
- height: parent.height
- y: parent.height/2
- x: parent.width/2 - parent.height
- transformOrigin: Item.Top
- rotation: 0
- gradient: Gradient {
- GradientStop { position: 0.0; color: "ForestGreen"; }
- GradientStop { position: 1.0; color: "DarkGreen"; }
- }
- }
-
- MouseArea {
- anchors.fill: parent
- onPositionChanged: {
- var rot = Math.atan2(mouseY - window.height/2,mouseX - window.width/2) * 180/Math.PI;
- ground.rotation = rot;
- }
- }
-
- ParticleSystem { id: sys }
- //! [0]
- Gravity {
- system: sys
- magnitude: 32
- angle: ground.rotation + 90
- }
- //! [0]
- Emitter {
- system: sys
- anchors.centerIn: parent
- emitRate: 1
- lifeSpan: 10000
- size: 64
- }
- ImageParticle {
- anchors.fill: parent
- system: sys
- source: "../../images/realLeaf1.png"
- }
-
-}
diff --git a/examples/quick/particles/affectors/content/groupgoal.qml b/examples/quick/particles/affectors/content/groupgoal.qml
deleted file mode 100644
index 9910531a98..0000000000
--- a/examples/quick/particles/affectors/content/groupgoal.qml
+++ /dev/null
@@ -1,213 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-
-Rectangle {
- id: root
- width: 360
- height: 600
- color: "black"
-
- property int score: 0
- Text {
- color: "white"
- anchors.right: parent.right
- text: root.score
- }
-
- ParticleSystem {
- id: particles
- anchors.fill: parent
- // ![unlit]
- ParticleGroup {
- name: "unlit"
- duration: 1000
- to: {"lighting":1, "unlit":99}
- ImageParticle {
- source: "../../images/particleA.png"
- colorVariation: 0.1
- color: "#2060160f"
- }
- GroupGoal {
- whenCollidingWith: ["lit"]
- goalState: "lighting"
- jump: true
- }
- }
- // ![unlit]
- // ![lighting]
- ParticleGroup {
- name: "lighting"
- duration: 100
- to: {"lit":1}
- }
- // ![lighting]
- // ![lit]
- ParticleGroup {
- name: "lit"
- duration: 10000
- onEntered: root.score++
- TrailEmitter {
- id: fireballFlame
- group: "flame"
-
- emitRatePerParticle: 48
- lifeSpan: 200
- emitWidth: 8
- emitHeight: 8
-
- size: 24
- sizeVariation: 8
- endSize: 4
- }
-
- TrailEmitter {
- id: fireballSmoke
- group: "smoke"
- // ![lit]
-
- emitRatePerParticle: 120
- lifeSpan: 2000
- emitWidth: 16
- emitHeight: 16
-
- velocity: PointDirection {yVariation: 16; xVariation: 16}
- acceleration: PointDirection {y: -16}
-
- size: 24
- sizeVariation: 8
- endSize: 8
- }
- }
-
- ImageParticle {
- id: smoke
- anchors.fill: parent
- groups: ["smoke"]
- source: "qrc:///particleresources/glowdot.png"
- colorVariation: 0
- color: "#00111111"
- }
- ImageParticle {
- id: pilot
- anchors.fill: parent
- groups: ["pilot"]
- source: "qrc:///particleresources/glowdot.png"
- redVariation: 0.01
- blueVariation: 0.4
- color: "#0010004f"
- }
- ImageParticle {
- id: flame
- anchors.fill: parent
- groups: ["flame", "lit", "lighting"]
- source: "../../images/particleA.png"
- colorVariation: 0.1
- color: "#00ff400f"
- }
-
- Emitter {
- height: parent.height/2
- emitRate: 4
- lifeSpan: 4000//TODO: Infinite & kill zone
- size: 24
- sizeVariation: 4
- velocity: PointDirection {x:120; xVariation: 80; yVariation: 50}
- acceleration: PointDirection {y:120}
- group: "unlit"
- }
-
- Emitter {
- id: flamer
- x: 100
- y: 300
- group: "pilot"
- emitRate: 80
- lifeSpan: 600
- size: 24
- sizeVariation: 2
- endSize: 0
- velocity: PointDirection { y:-100; yVariation: 4; xVariation: 4 }
- // ![groupgoal-pilot]
- GroupGoal {
- groups: ["unlit"]
- goalState: "lit"
- jump: true
- system: particles
- x: -15
- y: -55
- height: 75
- width: 30
- shape: MaskShape {source: "../../images/matchmask.png"}
- }
- // ![groupgoal-pilot]
- }
- // ![groupgoal-ma]
- //Click to enflame
- GroupGoal {
- groups: ["unlit"]
- goalState: "lighting"
- jump: true
- enabled: ma.pressed
- width: 18
- height: 18
- x: ma.mouseX - width/2
- y: ma.mouseY - height/2
- }
- // ![groupgoal-ma]
- MouseArea {
- id: ma
- anchors.fill: parent
- }
- }
-}
diff --git a/examples/quick/particles/affectors/content/move.qml b/examples/quick/particles/affectors/content/move.qml
deleted file mode 100644
index b33d7f4006..0000000000
--- a/examples/quick/particles/affectors/content/move.qml
+++ /dev/null
@@ -1,157 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- width: 360
- height: 540
- color: "black"
- ParticleSystem {
- anchors.fill: parent
- ImageParticle {
- groups: ["A"]
- anchors.fill: parent
- source: "qrc:///particleresources/star.png"
- color:"#FF1010"
- redVariation: 0.8
- }
-
- Emitter {
- group: "A"
- emitRate: 100
- lifeSpan: 2800
- size: 32
- sizeVariation: 8
- velocity: PointDirection{ x: 66; xVariation: 20 }
- width: 80
- height: 80
- }
-
- //! [A]
- Affector {
- groups: ["A"]
- x: 120
- width: 80
- height: 80
- once: true
- position: PointDirection { x: 120; }
- }
- //! [A]
-
- ImageParticle {
- groups: ["B"]
- anchors.fill: parent
- source: "qrc:///particleresources/star.png"
- color:"#10FF10"
- greenVariation: 0.8
- }
-
- Emitter {
- group: "B"
- emitRate: 100
- lifeSpan: 2800
- size: 32
- sizeVariation: 8
- velocity: PointDirection{ x: 240; xVariation: 60 }
- y: 260
- width: 10
- height: 10
- }
-
- //! [B]
- Affector {
- groups: ["B"]
- x: 120
- y: 240
- width: 80
- height: 80
- once: true
- velocity: AngleDirection { angleVariation:360; magnitude: 72 }
- }
- //! [B]
-
- ImageParticle {
- groups: ["C"]
- anchors.fill: parent
- source: "qrc:///particleresources/star.png"
- color:"#1010FF"
- blueVariation: 0.8
- }
-
- Emitter {
- group: "C"
- y: 400
- emitRate: 100
- lifeSpan: 2800
- size: 32
- sizeVariation: 8
- velocity: PointDirection{ x: 80; xVariation: 10 }
- acceleration: PointDirection { y: 10; x: 20; }
- width: 80
- height: 80
- }
-
- //! [C]
- Affector {
- groups: ["C"]
- x: 120
- y: 400
- width: 80
- height: 120
- once: true
- relative: false
- acceleration: PointDirection { y: -80; }
- }
- //! [C]
-
- }
-}
diff --git a/examples/quick/particles/affectors/content/spritegoal.qml b/examples/quick/particles/affectors/content/spritegoal.qml
deleted file mode 100644
index 294f693221..0000000000
--- a/examples/quick/particles/affectors/content/spritegoal.qml
+++ /dev/null
@@ -1,222 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Item {
- id: root
- width: 360
- height: 540
- MouseArea {
- id: ma
- anchors.fill: parent
- }
-
- ParticleSystem { id: sys }
- Image {
- source: "../../images/finalfrontier.png"
- transformOrigin: Item.Center
- anchors.centerIn: parent
- NumberAnimation on rotation {
- from: 0
- to: 360
- duration: 200000
- loops: Animation.Infinite
- }
-
- }
- ImageParticle {
- system: sys
- groups: ["starfield"]
- source: "qrc:///particleresources/star.png"
- colorVariation: 0.3
- color: "white"
- }
- Emitter {
- id: starField
- system: sys
- group: "starfield"
-
- emitRate: 80
- lifeSpan: 2500
-
- anchors.centerIn: parent
-
- //acceleration: AngledDirection {angleVariation: 360; magnitude: 200}//Is this a better effect, more consistent velocity?
- acceleration: PointDirection { xVariation: 200; yVariation: 200; }
-
- size: 0
- endSize: 80
- sizeVariation: 10
- }
- Emitter {
- system: sys
- group: "meteor"
- emitRate: 12
- lifeSpan: 5000
- acceleration: PointDirection { xVariation: 80; yVariation: 80; }
- size: 15
- endSize: 300
- anchors.centerIn: parent
- }
- ImageParticle {
- system: sys
- groups: ["meteor"]
- sprites:[Sprite {
- id: spinState
- name: "spinning"
- source: "../../images/meteor.png"
- frameCount: 35
- frameDuration: 40
- randomStart: true
- to: {"explode":0, "spinning":1}
- },Sprite {
- name: "explode"
- source: "../../images/_explo.png"
- frameCount: 22
- frameDuration: 40
- to: {"nullFrame":1}
- },Sprite {//Not sure if this is needed, but seemed easiest
- name: "nullFrame"
- source: "../../images/nullRock.png"
- frameCount: 1
- frameDuration: 1000
- }
- ]
- }
- //! [0]
- SpriteGoal {
- groups: ["meteor"]
- system: sys
- goalState: "explode"
- jump: true
- anchors.fill: rocketShip
- width: 60
- height: 60
- }
- //! [0]
- Image {
- id: rocketShip
- source: "../../images/rocket.png"
- anchors.centerIn: holder
- rotation: (circle.percent+0.25) * 360
- z: 2
- }
- Item {
- id: holder
- x: circle.x - Math.sin(circle.percent * 6.28316530714)*200
- y: circle.y + Math.cos(circle.percent * 6.28316530714)*200
- z: 1
- }
-
- Item {
- id: circle
- x: root.width / 1.2
- y: root.height / 1.7
- property real percent: 0
-
- SequentialAnimation on percent {
- id: circleAnim1
- loops: Animation.Infinite
- running: true
- NumberAnimation {
- duration: 4000
- from: 1
- to: 0
- }
-
- }
- }
-
- ImageParticle {
- z:0
- system: sys
- groups: ["exhaust"]
- source: "qrc:///particleresources/fuzzydot.png"
-
- color: "orange"
- SequentialAnimation on color {
- loops: Animation.Infinite
- ColorAnimation {
- from: "red"
- to: "cyan"
- duration: 1000
- }
- ColorAnimation {
- from: "cyan"
- to: "red"
- duration: 1000
- }
- }
-
- colorVariation: 0.2
- }
-
- Emitter {
- id: trailsNormal2
- system: sys
- group: "exhaust"
-
- emitRate: 300
- lifeSpan: 500
-
- y: holder.y
- x: holder.x
-
- velocity: PointDirection { xVariation: 40; yVariation: 40; }
- velocityFromMovement: 16
-
- acceleration: PointDirection { xVariation: 10; yVariation: 10; }
-
- size: 4
- sizeVariation: 4
- }
-}
diff --git a/examples/quick/particles/affectors/content/turbulence.qml b/examples/quick/particles/affectors/content/turbulence.qml
deleted file mode 100644
index e58b3ede7f..0000000000
--- a/examples/quick/particles/affectors/content/turbulence.qml
+++ /dev/null
@@ -1,142 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- width: 320
- height: 480
- color: "#222222"
- id: root
- Image {
- source: "../../images/candle.png"
- anchors.bottom: parent.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.bottomMargin: -60
- anchors.horizontalCenterOffset: 2
- }
- ParticleSystem {
- anchors.fill: parent
- MouseArea {
- anchors.fill: parent
- onClicked: turb.enabled = !turb.enabled
- }
-
- //! [0]
- Turbulence {
- id: turb
- enabled: true
- height: (parent.height / 2) - 4
- 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]
-
- ImageParticle {
- groups: ["smoke"]
- source: "qrc:///particleresources/glowdot.png"
- color: "#11111111"
- colorVariation: 0
- }
- ImageParticle {
- groups: ["flame"]
- source: "qrc:///particleresources/glowdot.png"
- color: "#11ff400f"
- colorVariation: 0.1
- }
- Emitter {
- anchors.centerIn: parent
- group: "flame"
-
- emitRate: 120
- lifeSpan: 1200
- size: 20
- endSize: 10
- sizeVariation: 10
- acceleration: PointDirection { y: -40 }
- velocity: AngleDirection { angle: 270; magnitude: 20; angleVariation: 22; magnitudeVariation: 5 }
- }
- TrailEmitter {
- id: smoke1
- width: root.width
- height: root.height/2
- group: "smoke"
- follow: "flame"
-
- emitRatePerParticle: 1
- lifeSpan: 2400
- lifeSpanVariation: 400
- size: 16
- endSize: 8
- sizeVariation: 8
- acceleration: PointDirection { y: -40 }
- velocity: AngleDirection { angle: 270; magnitude: 40; angleVariation: 22; magnitudeVariation: 5 }
- }
- TrailEmitter {
- id: smoke2
- width: root.width
- height: root.height/2 - 20
- group: "smoke"
- follow: "flame"
-
- emitRatePerParticle: 4
- lifeSpan: 2400
- size: 36
- endSize: 24
- sizeVariation: 12
- acceleration: PointDirection { y: -40 }
- velocity: AngleDirection { angle: 270; magnitude: 40; angleVariation: 22; magnitudeVariation: 5 }
- }
- }
-}
diff --git a/examples/quick/particles/affectors/content/wander.qml b/examples/quick/particles/affectors/content/wander.qml
deleted file mode 100644
index 736fc1af76..0000000000
--- a/examples/quick/particles/affectors/content/wander.qml
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- width: 360
- height: 540
- ParticleSystem { id: particles }
- ImageParticle {
- system: particles
- sprites: Sprite {
- name: "snow"
- source: "../../images/snowflake.png"
- frameCount: 51
- frameDuration: 40
- frameDurationVariation: 8
- }
- }
-
- //! [0]
- Wander {
- id: wanderer
- system: particles
- anchors.fill: parent
- xVariance: 360/(wanderer.affectedParameter+1);
- pace: 100*(wanderer.affectedParameter+1);
- }
- //! [0]
-
- Emitter {
- system: particles
- emitRate: 20
- lifeSpan: 7000
- velocity: PointDirection { y:80; yVariation: 40; }
- acceleration: PointDirection { y: 4 }
- size: 20
- sizeVariation: 10
- width: parent.width
- height: 100
- }
- Row {
- anchors.bottom: parent.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- spacing: 4
- GreyButton {
- text:"dx/dt"
- onClicked: wanderer.affectedParameter = Wander.Position;
- }
- GreyButton {
- text:"dv/dt"
- onClicked: wanderer.affectedParameter = Wander.Velocity;
- }
- GreyButton {
- text:"da/dt"
- onClicked: wanderer.affectedParameter = Wander.Acceleration;
- }
- }
-}
diff --git a/examples/quick/particles/affectors/customaffector.qml b/examples/quick/particles/affectors/customaffector.qml
new file mode 100644
index 0000000000..e85ea96ef6
--- /dev/null
+++ b/examples/quick/particles/affectors/customaffector.qml
@@ -0,0 +1,109 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Item {
+ width: 360
+ height: 600
+
+ Image {
+ source: "images/backgroundLeaves.jpg"
+ anchors.fill: parent
+ }
+ ParticleSystem {
+ anchors.fill: parent
+ Emitter {
+ width: parent.width
+ emitRate: 4
+ lifeSpan: 14000
+ size: 80
+ velocity: PointDirection { y: 60 }
+ }
+ Wander {
+ anchors.fill: parent
+ anchors.bottomMargin: 100
+ xVariance: 60
+ pace: 60
+ }
+
+ //! [0]
+ Affector {
+ width: parent.width
+ height: parent.height - 100
+ onAffectParticles: (particles, dt) => {
+ //Wobbly movement
+ for (var i=0; i<particles.length; i++) {
+ var particle = particles[i];
+ particle.rotation += particle.vx * 0.15 * dt;
+ particle.update = true;
+ }
+ }
+ }
+ //! [0]
+
+ //! [1]
+ Affector {//Custom Friction, adds some 'randomness'
+ x: -60
+ width: parent.width + 120
+ height: 100
+ anchors.bottom: parent.bottom
+ onAffectParticles: (particles, dt) => {
+ for (var i=0; i<particles.length; i++) {
+ var particle = particles[i];
+ var pseudoRand = (Math.floor(particle.t*1327) % 10) + 1;
+ var yslow = dt * pseudoRand * 0.5 + 1;
+ var xslow = dt * pseudoRand * 0.05 + 1;
+ if (particle.vy < 1)
+ particle.vy = 0;
+ else
+ particle.vy = (particle.vy / yslow);
+ if (particle.vx < 1)
+ particle.vx = 0;
+ else
+ particle.vx = (particle.vx / xslow);
+ particle.update = true;
+ }
+ }
+ }
+ //! [1]
+
+ ImageParticle {
+ anchors.fill: parent
+ id: particles
+ sprites: [Sprite {
+ source: "images/realLeaf1.png"
+ frameCount: 1
+ frameDuration: 1
+ to: {"a":1, "b":1, "c":1, "d":1}
+ }, Sprite {
+ name: "a"
+ source: "images/realLeaf1.png"
+ frameCount: 1
+ frameDuration: 10000
+ },
+ Sprite {
+ name: "b"
+ source: "images/realLeaf2.png"
+ frameCount: 1
+ frameDuration: 10000
+ },
+ Sprite {
+ name: "c"
+ source: "images/realLeaf3.png"
+ frameCount: 1
+ frameDuration: 10000
+ },
+ Sprite {
+ name: "d"
+ source: "images/realLeaf4.png"
+ frameCount: 1
+ frameDuration: 10000
+ }
+ ]
+
+ z:4
+ }
+ }
+}
diff --git a/examples/quick/particles/affectors/doc/src/affectors.qdoc b/examples/quick/particles/affectors/doc/src/affectors.qdoc
index 9857a86241..73f99aabed 100644
--- a/examples/quick/particles/affectors/doc/src/affectors.qdoc
+++ b/examples/quick/particles/affectors/doc/src/affectors.qdoc
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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
@@ -35,7 +12,7 @@
Each example is a small QML file emphasizing a particular type or feature.
Age demonstrates using an Age affector to prematurely end the lives of particles.
- \snippet particles/affectors/content/age.qml 0
+ \snippet particles/affectors/age.qml 0
As you move the affector around the screen, the particles inside it
(which haven't already been affected) jump to a period near the end
@@ -44,7 +21,7 @@
the end of their life instantly.
Attractor demonstrates using an Attractor affector to simulate a black hole
- \snippet particles/affectors/content/attractor.qml 0
+ \snippet particles/affectors/attractor.qml 0
All particles in the scene, including the rocket ship's exhaust and pellets, are pulled
towards the black hole. This effect is stronger closer to the black hole, so the
@@ -55,58 +32,58 @@
Custom Affector manipulates the properties of the particles directly in javascript.
One Affector is used to make the leaves rock back and forth as they fall, looking more
leaf-like than just spinning in circles:
- \snippet particles/affectors/content/customaffector.qml 0
+ \snippet particles/affectors/customaffector.qml 0
Another is used to provide a slightly varying friction to the leaves as they 'land',
to look more natural:
- \snippet particles/affectors/content/customaffector.qml 1
+ \snippet particles/affectors/customaffector.qml 1
Friction is similar to the falling leaves in the custom affector, except that it uses a
flat friction the whole way down instead of custom affectors.
- \snippet particles/affectors/content/friction.qml 0
+ \snippet particles/affectors/friction.qml 0
Gravity is a convenience affector for applying a constant acceleration to particles inside it
- \snippet particles/affectors/content/gravity.qml 0
+ \snippet particles/affectors/gravity.qml 0
GroupGoal sets up two particle groups for flaming and non-flaming balls, and gives you various
ways to transition between them.
- \snippet particles/affectors/content/groupgoal.qml unlit
+ \snippet particles/affectors/groupgoal.qml unlit
The non-flaming balls have a one in a hundred chance of lighting on their own each second, but they also
have a GroupGoal set on the whole group. This affector affects all particles of the unlit group, when colliding
with particles in the lit group, and cause them to move to the lighting group.
- \snippet particles/affectors/content/groupgoal.qml lighting
+ \snippet particles/affectors/groupgoal.qml lighting
lighting is an intermediate group so that the glow builds up and the transition is less jarring. So it automatically
moves into the lit group after 100ms.
- \snippet particles/affectors/content/groupgoal.qml lit
+ \snippet particles/affectors/groupgoal.qml lit
The lit group also has TrailEmitters on it for additional fire and smoke, but does not transition anywhere.
There are two more GroupGoal objects that allow particles in the unlit group to transition to the lighting group
(and then to the lit group).
- \snippet particles/affectors/content/groupgoal.qml groupgoal-pilot
+ \snippet particles/affectors/groupgoal.qml groupgoal-pilot
The first is just an area bound to the location of an image of a pilot flame. When unlit balls pass through the flame,
they go straight to lit because the pilot flame is so hot.
- \snippet particles/affectors/content/groupgoal.qml groupgoal-ma
+ \snippet particles/affectors/groupgoal.qml groupgoal-ma
The second is bound to the location of the last pointer interaction, so that touching or clicking on unlit balls (which
is hard due to their constant movement) causes them to move to the lighting group.
Move shows some simple effects you can get by altering trajectory midway.
The red particles have an affector that affects their position, jumping them forwards by 120px.
- \snippet particles/affectors/content/move.qml A
+ \snippet particles/affectors/move.qml A
The green particles have an affector that affects their velocity, but with some angle variation. By adding some random direction
velocity to their existing forwards velocity, they begin to spray off in a cone.
- \snippet particles/affectors/content/move.qml B
+ \snippet particles/affectors/move.qml B
The blue particles have an affector that affects their acceleration, and because it sets relative to false this resets the acceleration instead of
adding to it. Once the blue particles reach the affector, their horizontal velocity stops increasing as their vertical velocity decreases.
- \snippet particles/affectors/content/move.qml C
+ \snippet particles/affectors/move.qml C
SpriteGoal has an affector which interacts with the sprite engine of particles, if they are being drawn as sprites by ImageParticle.
- \snippet particles/affectors/content/spritegoal.qml 0
+ \snippet particles/affectors/spritegoal.qml 0
The SpriteGoal follows the image of the rocket ship on screen, and when it interacts with particles drawn by ImageParticle as sprites,
it instructs them to move immediately to the "explode" state, which in this case is the animation of the asteroid breaking into many pieces.
Turbulence has a flame with smoke, and both sets of particles being affected by a Turbulence affector. This gives a faint wind effect.
- \snippet particles/affectors/content/turbulence.qml 0
+ \snippet particles/affectors/turbulence.qml 0
To make the wind change direction, subsitute a black and white noise image in the noiseSource parameter (it currently uses a default noise source).
Wander uses a Wander affector to add some horizontal drift to snowflakes as they fall down.
- \snippet particles/affectors/content/wander.qml 0
+ \snippet particles/affectors/wander.qml 0
There are different movements given by applying the Wander to different attributes of the trajectory, so the example makes it easy to play around and see the difference.
*/
diff --git a/examples/quick/particles/affectors/friction.qml b/examples/quick/particles/affectors/friction.qml
new file mode 100644
index 0000000000..ec2a421387
--- /dev/null
+++ b/examples/quick/particles/affectors/friction.qml
@@ -0,0 +1,74 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Item {
+ width: 360
+ height: 600
+
+ Image {
+ source: "images/backgroundLeaves.jpg"
+ anchors.fill: parent
+ }
+ ParticleSystem {
+ anchors.fill: parent
+ Emitter {
+ width: parent.width
+ emitRate: 4
+ lifeSpan: 14000
+ size: 80
+ velocity: PointDirection { y: 160; yVariation: 80; xVariation: 20 }
+ }
+
+ ImageParticle {
+ anchors.fill: parent
+ id: particles
+ sprites: [Sprite {
+ source: "images/realLeaf1.png"
+ frameCount: 1
+ frameDuration: 1
+ to: {"a":1, "b":1, "c":1, "d":1}
+ }, Sprite {
+ name: "a"
+ source: "images/realLeaf1.png"
+ frameCount: 1
+ frameDuration: 10000
+ },
+ Sprite {
+ name: "b"
+ source: "images/realLeaf2.png"
+ frameCount: 1
+ frameDuration: 10000
+ },
+ Sprite {
+ name: "c"
+ source: "images/realLeaf3.png"
+ frameCount: 1
+ frameDuration: 10000
+ },
+ Sprite {
+ name: "d"
+ source: "images/realLeaf4.png"
+ frameCount: 1
+ frameDuration: 10000
+ }
+ ]
+
+ width: 100
+ height: 100
+ x: 20
+ y: 20
+ z:4
+ }
+
+ //! [0]
+ Friction {
+ anchors.fill: parent
+ anchors.margins: -40
+ factor: 0.4
+ }
+ //! [0]
+ }
+}
diff --git a/examples/quick/particles/affectors/gravity.qml b/examples/quick/particles/affectors/gravity.qml
new file mode 100644
index 0000000000..cf64d48689
--- /dev/null
+++ b/examples/quick/particles/affectors/gravity.qml
@@ -0,0 +1,68 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Item {
+ id: window
+ width: 320; height: 480
+ Rectangle {
+ id: sky
+ anchors.fill: parent
+ gradient: Gradient {
+ GradientStop {
+ position: 0.0
+ color: "DeepSkyBlue"
+ }
+ GradientStop {
+ position: 1.0
+ color: "SkyBlue"
+ }
+ }
+ }
+
+ Rectangle {
+ id: ground
+ width: parent.height * 2
+ height: parent.height
+ y: parent.height/2
+ x: parent.width/2 - parent.height
+ transformOrigin: Item.Top
+ rotation: 0
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "ForestGreen"; }
+ GradientStop { position: 1.0; color: "DarkGreen"; }
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onPositionChanged: {
+ var rot = Math.atan2(mouseY - window.height/2,mouseX - window.width/2) * 180/Math.PI;
+ ground.rotation = rot;
+ }
+ }
+
+ ParticleSystem { id: sys }
+ //! [0]
+ Gravity {
+ system: sys
+ magnitude: 32
+ angle: ground.rotation + 90
+ }
+ //! [0]
+ Emitter {
+ system: sys
+ anchors.centerIn: parent
+ emitRate: 1
+ lifeSpan: 10000
+ size: 64
+ }
+ ImageParticle {
+ anchors.fill: parent
+ system: sys
+ source: "images/realLeaf1.png"
+ }
+
+}
diff --git a/examples/quick/particles/affectors/groupgoal.qml b/examples/quick/particles/affectors/groupgoal.qml
new file mode 100644
index 0000000000..a1a784e2ec
--- /dev/null
+++ b/examples/quick/particles/affectors/groupgoal.qml
@@ -0,0 +1,166 @@
+// 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"
+
+ property int score: 0
+ Text {
+ color: "white"
+ anchors.right: parent.right
+ text: root.score
+ }
+
+ ParticleSystem {
+ id: particles
+ anchors.fill: parent
+ // ![unlit]
+ ParticleGroup {
+ name: "unlit"
+ duration: 1000
+ to: {"lighting":1, "unlit":99}
+ ImageParticle {
+ source: "images/particleA.png"
+ colorVariation: 0.1
+ color: "#2060160f"
+ }
+ GroupGoal {
+ whenCollidingWith: ["lit"]
+ goalState: "lighting"
+ jump: true
+ }
+ }
+ // ![unlit]
+ // ![lighting]
+ ParticleGroup {
+ name: "lighting"
+ duration: 100
+ to: {"lit":1}
+ }
+ // ![lighting]
+ // ![lit]
+ ParticleGroup {
+ name: "lit"
+ duration: 10000
+ onEntered: root.score++
+ TrailEmitter {
+ id: fireballFlame
+ group: "flame"
+
+ emitRatePerParticle: 48
+ lifeSpan: 200
+ emitWidth: 8
+ emitHeight: 8
+
+ size: 24
+ sizeVariation: 8
+ endSize: 4
+ }
+
+ TrailEmitter {
+ id: fireballSmoke
+ group: "smoke"
+ // ![lit]
+
+ emitRatePerParticle: 120
+ lifeSpan: 2000
+ emitWidth: 16
+ emitHeight: 16
+
+ velocity: PointDirection {yVariation: 16; xVariation: 16}
+ acceleration: PointDirection {y: -16}
+
+ size: 24
+ sizeVariation: 8
+ endSize: 8
+ }
+ }
+
+ ImageParticle {
+ id: smoke
+ anchors.fill: parent
+ groups: ["smoke"]
+ source: "qrc:///particleresources/glowdot.png"
+ colorVariation: 0
+ color: "#00111111"
+ }
+ ImageParticle {
+ id: pilot
+ anchors.fill: parent
+ groups: ["pilot"]
+ source: "qrc:///particleresources/glowdot.png"
+ redVariation: 0.01
+ blueVariation: 0.4
+ color: "#0010004f"
+ }
+ ImageParticle {
+ id: flame
+ anchors.fill: parent
+ groups: ["flame", "lit", "lighting"]
+ source: "images/particleA.png"
+ colorVariation: 0.1
+ color: "#00ff400f"
+ }
+
+ Emitter {
+ height: parent.height/2
+ emitRate: 4
+ lifeSpan: 4000//TODO: Infinite & kill zone
+ size: 24
+ sizeVariation: 4
+ velocity: PointDirection {x:120; xVariation: 80; yVariation: 50}
+ acceleration: PointDirection {y:120}
+ group: "unlit"
+ }
+
+ Emitter {
+ id: flamer
+ x: 100
+ y: 300
+ group: "pilot"
+ emitRate: 80
+ lifeSpan: 600
+ size: 24
+ sizeVariation: 2
+ endSize: 0
+ velocity: PointDirection { y:-100; yVariation: 4; xVariation: 4 }
+ // ![groupgoal-pilot]
+ GroupGoal {
+ groups: ["unlit"]
+ goalState: "lit"
+ jump: true
+ system: particles
+ x: -15
+ y: -55
+ height: 75
+ width: 30
+ shape: MaskShape {source: "images/matchmask.png"}
+ }
+ // ![groupgoal-pilot]
+ }
+ // ![groupgoal-ma]
+ //Click to enflame
+ GroupGoal {
+ groups: ["unlit"]
+ goalState: "lighting"
+ jump: true
+ enabled: ma.pressed
+ width: 18
+ height: 18
+ x: ma.mouseX - width/2
+ y: ma.mouseY - height/2
+ }
+ // ![groupgoal-ma]
+ MouseArea {
+ id: ma
+ anchors.fill: parent
+ }
+ }
+}
diff --git a/examples/quick/particles/images/_explo.png b/examples/quick/particles/affectors/images/_explo.png
index 4297245d49..4297245d49 100644
--- a/examples/quick/particles/images/_explo.png
+++ b/examples/quick/particles/affectors/images/_explo.png
Binary files differ
diff --git a/examples/quick/particles/images/backgroundLeaves.jpg b/examples/quick/particles/affectors/images/backgroundLeaves.jpg
index 08be16751d..08be16751d 100644
--- a/examples/quick/particles/images/backgroundLeaves.jpg
+++ b/examples/quick/particles/affectors/images/backgroundLeaves.jpg
Binary files differ
diff --git a/examples/quick/particles/images/candle.png b/examples/quick/particles/affectors/images/candle.png
index 8fa3193719..8fa3193719 100644
--- a/examples/quick/particles/images/candle.png
+++ b/examples/quick/particles/affectors/images/candle.png
Binary files differ
diff --git a/examples/quick/particles/images/finalfrontier.png b/examples/quick/particles/affectors/images/finalfrontier.png
index 2ba1815230..2ba1815230 100644
--- a/examples/quick/particles/images/finalfrontier.png
+++ b/examples/quick/particles/affectors/images/finalfrontier.png
Binary files differ
diff --git a/examples/quick/particles/images/matchmask.png b/examples/quick/particles/affectors/images/matchmask.png
index e575875c55..e575875c55 100644
--- a/examples/quick/particles/images/matchmask.png
+++ b/examples/quick/particles/affectors/images/matchmask.png
Binary files differ
diff --git a/examples/quick/particles/images/meteor.png b/examples/quick/particles/affectors/images/meteor.png
index e8c368aea7..e8c368aea7 100644
--- a/examples/quick/particles/images/meteor.png
+++ b/examples/quick/particles/affectors/images/meteor.png
Binary files differ
diff --git a/examples/quick/particles/images/nullRock.png b/examples/quick/particles/affectors/images/nullRock.png
index 4076327a1a..4076327a1a 100644
--- a/examples/quick/particles/images/nullRock.png
+++ b/examples/quick/particles/affectors/images/nullRock.png
Binary files differ
diff --git a/examples/quick/particles/images/particleA.png b/examples/quick/particles/affectors/images/particleA.png
index d86fc9696b..d86fc9696b 100644
--- a/examples/quick/particles/images/particleA.png
+++ b/examples/quick/particles/affectors/images/particleA.png
Binary files differ
diff --git a/examples/quick/particles/images/realLeaf1.png b/examples/quick/particles/affectors/images/realLeaf1.png
index 6cabf29efd..6cabf29efd 100644
--- a/examples/quick/particles/images/realLeaf1.png
+++ b/examples/quick/particles/affectors/images/realLeaf1.png
Binary files differ
diff --git a/examples/quick/particles/images/realLeaf2.png b/examples/quick/particles/affectors/images/realLeaf2.png
index bfeca861d5..bfeca861d5 100644
--- a/examples/quick/particles/images/realLeaf2.png
+++ b/examples/quick/particles/affectors/images/realLeaf2.png
Binary files differ
diff --git a/examples/quick/particles/images/realLeaf3.png b/examples/quick/particles/affectors/images/realLeaf3.png
index b1071e862b..b1071e862b 100644
--- a/examples/quick/particles/images/realLeaf3.png
+++ b/examples/quick/particles/affectors/images/realLeaf3.png
Binary files differ
diff --git a/examples/quick/particles/images/realLeaf4.png b/examples/quick/particles/affectors/images/realLeaf4.png
index d61d53d10e..d61d53d10e 100644
--- a/examples/quick/particles/images/realLeaf4.png
+++ b/examples/quick/particles/affectors/images/realLeaf4.png
Binary files differ
diff --git a/examples/quick/particles/images/rocket.png b/examples/quick/particles/affectors/images/rocket.png
index a171610b03..a171610b03 100644
--- a/examples/quick/particles/images/rocket.png
+++ b/examples/quick/particles/affectors/images/rocket.png
Binary files differ
diff --git a/examples/quick/particles/images/rocket2.png b/examples/quick/particles/affectors/images/rocket2.png
index 7110f8fdc6..7110f8fdc6 100644
--- a/examples/quick/particles/images/rocket2.png
+++ b/examples/quick/particles/affectors/images/rocket2.png
Binary files differ
diff --git a/examples/quick/particles/images/snowflake.png b/examples/quick/particles/affectors/images/snowflake.png
index 490887a82f..490887a82f 100644
--- a/examples/quick/particles/images/snowflake.png
+++ b/examples/quick/particles/affectors/images/snowflake.png
Binary files differ
diff --git a/examples/quick/particles/affectors/main.cpp b/examples/quick/particles/affectors/main.cpp
index 9e90217000..46fbff5674 100644
--- a/examples/quick/particles/affectors/main.cpp
+++ b/examples/quick/particles/affectors/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(particles/affectors/affectors)
+DECLARATIVE_EXAMPLE_MAIN(affectors/affectors)
diff --git a/examples/quick/particles/affectors/move.qml b/examples/quick/particles/affectors/move.qml
new file mode 100644
index 0000000000..447f5b0d32
--- /dev/null
+++ b/examples/quick/particles/affectors/move.qml
@@ -0,0 +1,110 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ width: 360
+ height: 540
+ color: "black"
+ ParticleSystem {
+ anchors.fill: parent
+ ImageParticle {
+ groups: ["A"]
+ anchors.fill: parent
+ source: "qrc:///particleresources/star.png"
+ color:"#FF1010"
+ redVariation: 0.8
+ }
+
+ Emitter {
+ group: "A"
+ emitRate: 100
+ lifeSpan: 2800
+ size: 32
+ sizeVariation: 8
+ velocity: PointDirection{ x: 66; xVariation: 20 }
+ width: 80
+ height: 80
+ }
+
+ //! [A]
+ Affector {
+ groups: ["A"]
+ x: 120
+ width: 80
+ height: 80
+ once: true
+ position: PointDirection { x: 120; }
+ }
+ //! [A]
+
+ ImageParticle {
+ groups: ["B"]
+ anchors.fill: parent
+ source: "qrc:///particleresources/star.png"
+ color:"#10FF10"
+ greenVariation: 0.8
+ }
+
+ Emitter {
+ group: "B"
+ emitRate: 100
+ lifeSpan: 2800
+ size: 32
+ sizeVariation: 8
+ velocity: PointDirection{ x: 240; xVariation: 60 }
+ y: 260
+ width: 10
+ height: 10
+ }
+
+ //! [B]
+ Affector {
+ groups: ["B"]
+ x: 120
+ y: 240
+ width: 80
+ height: 80
+ once: true
+ velocity: AngleDirection { angleVariation:360; magnitude: 72 }
+ }
+ //! [B]
+
+ ImageParticle {
+ groups: ["C"]
+ anchors.fill: parent
+ source: "qrc:///particleresources/star.png"
+ color:"#1010FF"
+ blueVariation: 0.8
+ }
+
+ Emitter {
+ group: "C"
+ y: 400
+ emitRate: 100
+ lifeSpan: 2800
+ size: 32
+ sizeVariation: 8
+ velocity: PointDirection{ x: 80; xVariation: 10 }
+ acceleration: PointDirection { y: 10; x: 20; }
+ width: 80
+ height: 80
+ }
+
+ //! [C]
+ Affector {
+ groups: ["C"]
+ x: 120
+ y: 400
+ width: 80
+ height: 120
+ once: true
+ relative: false
+ acceleration: PointDirection { y: -80; }
+ }
+ //! [C]
+
+ }
+}
diff --git a/examples/quick/particles/affectors/spritegoal.qml b/examples/quick/particles/affectors/spritegoal.qml
new file mode 100644
index 0000000000..98d793d304
--- /dev/null
+++ b/examples/quick/particles/affectors/spritegoal.qml
@@ -0,0 +1,174 @@
+// 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
+ width: 360
+ height: 540
+ MouseArea {
+ id: ma
+ anchors.fill: parent
+ }
+
+ ParticleSystem { id: sys }
+ Image {
+ source: "images/finalfrontier.png"
+ transformOrigin: Item.Center
+ anchors.centerIn: parent
+ NumberAnimation on rotation {
+ from: 0
+ to: 360
+ duration: 200000
+ loops: Animation.Infinite
+ }
+
+ }
+ ImageParticle {
+ system: sys
+ groups: ["starfield"]
+ source: "qrc:///particleresources/star.png"
+ colorVariation: 0.3
+ color: "white"
+ }
+ Emitter {
+ id: starField
+ system: sys
+ group: "starfield"
+
+ emitRate: 80
+ lifeSpan: 2500
+
+ anchors.centerIn: parent
+
+ //acceleration: AngledDirection {angleVariation: 360; magnitude: 200}//Is this a better effect, more consistent velocity?
+ acceleration: PointDirection { xVariation: 200; yVariation: 200; }
+
+ size: 0
+ endSize: 80
+ sizeVariation: 10
+ }
+ Emitter {
+ system: sys
+ group: "meteor"
+ emitRate: 12
+ lifeSpan: 5000
+ acceleration: PointDirection { xVariation: 80; yVariation: 80; }
+ size: 15
+ endSize: 300
+ anchors.centerIn: parent
+ }
+ ImageParticle {
+ system: sys
+ groups: ["meteor"]
+ sprites:[Sprite {
+ id: spinState
+ name: "spinning"
+ source: "images/meteor.png"
+ frameCount: 35
+ frameDuration: 40
+ randomStart: true
+ to: {"explode":0, "spinning":1}
+ },Sprite {
+ name: "explode"
+ source: "images/_explo.png"
+ frameCount: 22
+ frameDuration: 40
+ to: {"nullFrame":1}
+ },Sprite {//Not sure if this is needed, but seemed easiest
+ name: "nullFrame"
+ source: "images/nullRock.png"
+ frameCount: 1
+ frameDuration: 1000
+ }
+ ]
+ }
+ //! [0]
+ SpriteGoal {
+ groups: ["meteor"]
+ system: sys
+ goalState: "explode"
+ jump: true
+ anchors.fill: rocketShip
+ width: 60
+ height: 60
+ }
+ //! [0]
+ Image {
+ id: rocketShip
+ source: "images/rocket.png"
+ anchors.centerIn: holder
+ rotation: (circle.percent+0.25) * 360
+ z: 2
+ }
+ Item {
+ id: holder
+ x: circle.x - Math.sin(circle.percent * 6.28316530714)*200
+ y: circle.y + Math.cos(circle.percent * 6.28316530714)*200
+ z: 1
+ }
+
+ Item {
+ id: circle
+ x: root.width / 1.2
+ y: root.height / 1.7
+ property real percent
+
+ SequentialAnimation on percent {
+ id: circleAnim1
+ loops: Animation.Infinite
+ running: true
+ NumberAnimation {
+ duration: 4000
+ from: 1
+ to: 0
+ }
+
+ }
+ }
+
+ ImageParticle {
+ z:0
+ system: sys
+ groups: ["exhaust"]
+ source: "qrc:///particleresources/fuzzydot.png"
+
+ SequentialAnimation on color {
+ loops: Animation.Infinite
+ ColorAnimation {
+ from: "red"
+ to: "cyan"
+ duration: 1000
+ }
+ ColorAnimation {
+ from: "cyan"
+ to: "red"
+ duration: 1000
+ }
+ }
+
+ colorVariation: 0.2
+ }
+
+ Emitter {
+ id: trailsNormal2
+ system: sys
+ group: "exhaust"
+
+ emitRate: 300
+ lifeSpan: 500
+
+ y: holder.y
+ x: holder.x
+
+ velocity: PointDirection { xVariation: 40; yVariation: 40; }
+ velocityFromMovement: 16
+
+ acceleration: PointDirection { xVariation: 10; yVariation: 10; }
+
+ size: 4
+ sizeVariation: 4
+ }
+}
diff --git a/examples/quick/particles/affectors/turbulence.qml b/examples/quick/particles/affectors/turbulence.qml
new file mode 100644
index 0000000000..049e1a584d
--- /dev/null
+++ b/examples/quick/particles/affectors/turbulence.qml
@@ -0,0 +1,94 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ width: 320
+ height: 480
+ color: "#222222"
+ id: root
+ Image {
+ source: "images/candle.png"
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottomMargin: -60
+ anchors.horizontalCenterOffset: 2
+ }
+ ParticleSystem {
+ anchors.fill: parent
+ MouseArea {
+ anchors.fill: parent
+ onClicked: turb.enabled = !turb.enabled
+ }
+
+ //! [0]
+ Turbulence {
+ id: turb
+ enabled: true
+ height: (parent.height / 2) - 4
+ width: parent.width
+ x: parent. width / 4
+ anchors.fill: parent
+ NumberAnimation on strength{from: 16; to: 64; easing.type: Easing.InOutBounce; duration: 1800; loops: -1}
+ }
+ //! [0]
+
+ ImageParticle {
+ groups: ["smoke"]
+ source: "qrc:///particleresources/glowdot.png"
+ color: "#11111111"
+ colorVariation: 0
+ }
+ ImageParticle {
+ groups: ["flame"]
+ source: "qrc:///particleresources/glowdot.png"
+ color: "#11ff400f"
+ colorVariation: 0.1
+ }
+ Emitter {
+ anchors.centerIn: parent
+ group: "flame"
+
+ emitRate: 120
+ lifeSpan: 1200
+ size: 20
+ endSize: 10
+ sizeVariation: 10
+ acceleration: PointDirection { y: -40 }
+ velocity: AngleDirection { angle: 270; magnitude: 20; angleVariation: 22; magnitudeVariation: 5 }
+ }
+ TrailEmitter {
+ id: smoke1
+ width: root.width
+ height: root.height/2
+ group: "smoke"
+ follow: "flame"
+
+ emitRatePerParticle: 1
+ lifeSpan: 2400
+ lifeSpanVariation: 400
+ size: 16
+ endSize: 8
+ sizeVariation: 8
+ acceleration: PointDirection { y: -40 }
+ velocity: AngleDirection { angle: 270; magnitude: 40; angleVariation: 22; magnitudeVariation: 5 }
+ }
+ TrailEmitter {
+ id: smoke2
+ width: root.width
+ height: root.height/2 - 20
+ group: "smoke"
+ follow: "flame"
+
+ emitRatePerParticle: 4
+ lifeSpan: 2400
+ size: 36
+ endSize: 24
+ sizeVariation: 12
+ acceleration: PointDirection { y: -40 }
+ velocity: AngleDirection { angle: 270; magnitude: 40; angleVariation: 22; magnitudeVariation: 5 }
+ }
+ }
+}
diff --git a/examples/quick/particles/affectors/wander.qml b/examples/quick/particles/affectors/wander.qml
new file mode 100644
index 0000000000..c4c2914d49
--- /dev/null
+++ b/examples/quick/particles/affectors/wander.qml
@@ -0,0 +1,60 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ width: 360
+ height: 540
+ ParticleSystem { id: particles }
+ ImageParticle {
+ system: particles
+ sprites: Sprite {
+ name: "snow"
+ source: "images/snowflake.png"
+ frameCount: 51
+ frameDuration: 40
+ frameDurationVariation: 8
+ }
+ }
+
+ //! [0]
+ Wander {
+ id: wanderer
+ system: particles
+ anchors.fill: parent
+ xVariance: 360/(wanderer.affectedParameter+1);
+ pace: 100*(wanderer.affectedParameter+1);
+ }
+ //! [0]
+
+ Emitter {
+ system: particles
+ emitRate: 20
+ lifeSpan: 7000
+ velocity: PointDirection { y:80; yVariation: 40; }
+ acceleration: PointDirection { y: 4 }
+ size: 20
+ sizeVariation: 10
+ width: parent.width
+ height: 100
+ }
+ Row {
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ spacing: 4
+ GreyButton {
+ text: qsTr("dx/dt")
+ onClicked: wanderer.affectedParameter = Wander.Position;
+ }
+ GreyButton {
+ text: qsTr("dv/dt")
+ onClicked: wanderer.affectedParameter = Wander.Velocity;
+ }
+ GreyButton {
+ 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 a6ca0875ce..772f45fa0a 100644
--- a/examples/quick/particles/emitters/CMakeLists.txt
+++ b/examples/quick/particles/emitters/CMakeLists.txt
@@ -1,267 +1,56 @@
-# Generated from emitters.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(emitters LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+add_subdirectory("../../shared" "shared")
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/particles/emitters")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(emitters
+qt_add_executable(emittersexample WIN32 MACOSX_BUNDLE
main.cpp
)
-set_target_properties(emitters PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(emitters PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(emitters_resource_files
- "content/burstandpulse.qml"
- "content/customemitter.qml"
- "content/emitmask.qml"
- "content/maximumemitted.qml"
- "content/shapeanddirection.qml"
- "content/trailemitter.qml"
- "content/velocityfrommotion.qml"
- "emitters.qml"
+target_link_libraries(emittersexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(emitters "emitters"
- PREFIX
- "/particles/emitters"
- FILES
- ${emitters_resource_files}
-)
-set_source_files_properties("../images/_explo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/_explo.png"
-)
-set_source_files_properties("../images/backgroundLeaves.jpg"
- PROPERTIES QT_RESOURCE_ALIAS "images/backgroundLeaves.jpg"
-)
-set_source_files_properties("../images/bear_tiles.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/bear_tiles.png"
-)
-set_source_files_properties("../images/candle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/candle.png"
-)
-set_source_files_properties("../images/colortable.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/colortable.png"
-)
-set_source_files_properties("../images/finalfrontier.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/finalfrontier.png"
-)
-set_source_files_properties("../images/flower.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/flower.png"
-)
-set_source_files_properties("../images/matchmask.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/matchmask.png"
-)
-set_source_files_properties("../images/meteor.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteor.png"
-)
-set_source_files_properties("../images/meteor_explo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteor_explo.png"
-)
-set_source_files_properties("../images/meteors.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteors.png"
-)
-set_source_files_properties("../images/nullRock.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/nullRock.png"
-)
-set_source_files_properties("../images/particle2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particle2.png"
-)
-set_source_files_properties("../images/particle3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particle3.png"
-)
-set_source_files_properties("../images/particleA.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particleA.png"
-)
-set_source_files_properties("../images/portal_bg.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/portal_bg.png"
-)
-set_source_files_properties("../images/realLeaf1.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf1.png"
-)
-set_source_files_properties("../images/realLeaf2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf2.png"
-)
-set_source_files_properties("../images/realLeaf3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf3.png"
-)
-set_source_files_properties("../images/realLeaf4.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf4.png"
-)
-set_source_files_properties("../images/rocket.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/rocket.png"
-)
-set_source_files_properties("../images/rocket2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/rocket2.png"
-)
-set_source_files_properties("../images/sizeInOut.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/sizeInOut.png"
-)
-set_source_files_properties("../images/snowflake.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/snowflake.png"
-)
-set_source_files_properties("../images/sparkleSize.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/sparkleSize.png"
-)
-set_source_files_properties("../images/starfish_0.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_0.png"
-)
-set_source_files_properties("../images/starfish_1.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_1.png"
-)
-set_source_files_properties("../images/starfish_2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_2.png"
-)
-set_source_files_properties("../images/starfish_3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_3.png"
-)
-set_source_files_properties("../images/starfish_4.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_4.png"
-)
-set_source_files_properties("../images/starfish_mask.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_mask.png"
-)
-set(images_resource_files
- "images/_explo.png"
- "images/backgroundLeaves.jpg"
- "images/bear_tiles.png"
- "images/candle.png"
- "images/colortable.png"
- "images/finalfrontier.png"
- "images/flower.png"
- "images/matchmask.png"
- "images/meteor.png"
- "images/meteor_explo.png"
- "images/meteors.png"
- "images/nullRock.png"
- "images/particle2.png"
- "images/particle3.png"
- "images/particleA.png"
- "images/portal_bg.png"
- "images/realLeaf1.png"
- "images/realLeaf2.png"
- "images/realLeaf3.png"
- "images/realLeaf4.png"
- "images/rocket.png"
- "images/rocket2.png"
- "images/sizeInOut.png"
- "images/snowflake.png"
- "images/sparkleSize.png"
- "images/starfish_0.png"
- "images/starfish_1.png"
- "images/starfish_2.png"
- "images/starfish_3.png"
- "images/starfish_4.png"
- "images/starfish_mask.png"
-)
-
-qt6_add_resources(emitters "images"
- PREFIX
- "/particles"
- BASE
- ".."
- FILES
- ${images_resource_files}
-)
-set_source_files_properties("../../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
+add_dependencies(emittersexample emitters_shared)
-qt6_add_resources(emitters "shared"
- PREFIX
- "/shared"
- BASE
- "../../shared"
- FILES
- ${shared_resource_files}
-)
-
-install(TARGETS emitters
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
+# Resources:
+qt_add_qml_module(emittersexample
+ URI emitters
+ QML_FILES
+ "burstandpulse.qml"
+ "customemitter.qml"
+ "emitmask.qml"
+ "maximumemitted.qml"
+ "shapeanddirection.qml"
+ "trailemitter.qml"
+ "velocityfrommotion.qml"
+ "emitters.qml"
+ RESOURCES
+ "images/portal_bg.png"
+ "images/starfish_mask.png"
+)
+
+install(TARGETS emittersexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+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/burstandpulse.qml b/examples/quick/particles/emitters/burstandpulse.qml
new file mode 100644
index 0000000000..ffc620e41b
--- /dev/null
+++ b/examples/quick/particles/emitters/burstandpulse.qml
@@ -0,0 +1,75 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ id: root
+
+ width: 320
+ height: 480
+ color: "black"
+ property bool lastWasPulse: false
+ Timer {
+ interval: 3500
+ triggeredOnStart: true
+ running: true
+ repeat: true
+ onTriggered: {
+ //! [0]
+ if (root.lastWasPulse) {
+ burstEmitter.burst(500);
+ root.lastWasPulse = false;
+ } else {
+ pulseEmitter.pulse(500);
+ root.lastWasPulse = true;
+ }
+ //! [0]
+ }
+ }
+ ParticleSystem {
+ id: particles
+ anchors.fill: parent
+ ImageParticle {
+ source: "qrc:///particleresources/star.png"
+ alpha: 0
+ colorVariation: 0.6
+ }
+
+ Emitter {
+ id: burstEmitter
+ x: parent.width/2
+ y: parent.height/3
+ emitRate: 1000
+ lifeSpan: 2000
+ enabled: false
+ velocity: AngleDirection{magnitude: 64; angleVariation: 360}
+ size: 24
+ sizeVariation: 8
+ Text {
+ anchors.centerIn: parent
+ color: "white"
+ font.pixelSize: 18
+ text: "Burst"
+ }
+ }
+ Emitter {
+ id: pulseEmitter
+ x: parent.width/2
+ y: 2*parent.height/3
+ emitRate: 1000
+ lifeSpan: 2000
+ enabled: false
+ velocity: AngleDirection{magnitude: 64; angleVariation: 360}
+ size: 24
+ sizeVariation: 8
+ Text {
+ anchors.centerIn: parent
+ color: "white"
+ font.pixelSize: 18
+ text: "Pulse"
+ }
+ }
+ }
+}
diff --git a/examples/quick/particles/emitters/content/burstandpulse.qml b/examples/quick/particles/emitters/content/burstandpulse.qml
deleted file mode 100644
index d3c38c2360..0000000000
--- a/examples/quick/particles/emitters/content/burstandpulse.qml
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- id: root
-
- width: 320
- height: 480
- color: "black"
- property bool lastWasPulse: false
- Timer {
- interval: 3500
- triggeredOnStart: true
- running: true
- repeat: true
- onTriggered: {
- //! [0]
- if (root.lastWasPulse) {
- burstEmitter.burst(500);
- root.lastWasPulse = false;
- } else {
- pulseEmitter.pulse(500);
- root.lastWasPulse = true;
- }
- //! [0]
- }
- }
- ParticleSystem {
- id: particles
- anchors.fill: parent
- ImageParticle {
- source: "qrc:///particleresources/star.png"
- alpha: 0
- colorVariation: 0.6
- }
-
- Emitter {
- id: burstEmitter
- x: parent.width/2
- y: parent.height/3
- emitRate: 1000
- lifeSpan: 2000
- enabled: false
- velocity: AngleDirection{magnitude: 64; angleVariation: 360}
- size: 24
- sizeVariation: 8
- Text {
- anchors.centerIn: parent
- color: "white"
- font.pixelSize: 18
- text: "Burst"
- }
- }
- Emitter {
- id: pulseEmitter
- x: parent.width/2
- y: 2*parent.height/3
- emitRate: 1000
- lifeSpan: 2000
- enabled: false
- velocity: AngleDirection{magnitude: 64; angleVariation: 360}
- size: 24
- sizeVariation: 8
- Text {
- anchors.centerIn: parent
- color: "white"
- font.pixelSize: 18
- text: "Pulse"
- }
- }
- }
-}
diff --git a/examples/quick/particles/emitters/content/customemitter.qml b/examples/quick/particles/emitters/content/customemitter.qml
deleted file mode 100644
index f6aea13d08..0000000000
--- a/examples/quick/particles/emitters/content/customemitter.qml
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-ParticleSystem {
- id: sys
- width: 360
- height: 600
- running: true
- Rectangle {
- z: -1
- anchors.fill: parent
- color: "black"
- }
-
- property real petalLength: 180
- property real petalRotation: 0
- NumberAnimation on petalRotation {
- from: 0;
- to: 360;
- loops: -1;
- running: true
- duration: 24000
- }
-
- function convert(a) {return a*(Math.PI/180);}
- Emitter {
- lifeSpan: 4000
- emitRate: 120
- size: 12
- anchors.centerIn: parent
- //! [0]
- onEmitParticles: (particles) => {
- for (var i=0; i<particles.length; i++) {
- var 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);
- 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;
- theta /= 6.0;
- theta *= 2.0*Math.PI;
- theta += sys.convert(sys.petalRotation);//Convert from degrees to radians
- particle.initialVX = sys.petalLength * Math.cos(theta);
- particle.initialVY = sys.petalLength * Math.sin(theta);
- particle.initialAX = particle.initialVX * -0.5;
- particle.initialAY = particle.initialVY * -0.5;
- }
- }
- //! [0]
- }
-
- ImageParticle {
- source: "qrc:///particleresources/fuzzydot.png"
- alpha: 0.0
- }
-}
diff --git a/examples/quick/particles/emitters/content/emitmask.qml b/examples/quick/particles/emitters/content/emitmask.qml
deleted file mode 100644
index db13480e29..0000000000
--- a/examples/quick/particles/emitters/content/emitmask.qml
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- color: "goldenrod"
- width: 400
- height: 400
- ParticleSystem {
- width: 300
- height: 300
- anchors.centerIn: parent
-
- ImageParticle {
- source: "qrc:///particleresources/glowdot.png"
- z: 2
- anchors.fill: parent
- color: "#336666CC"
- colorVariation: 0.0
- }
-
- Emitter {
- anchors.fill: parent
- emitRate: 6000
- lifeSpan: 720
- size: 10
- //! [0]
- shape: MaskShape {
- source: "../../images/starfish_mask.png"
- }
- //! [0]
- }
-
- }
-}
diff --git a/examples/quick/particles/emitters/content/maximumemitted.qml b/examples/quick/particles/emitters/content/maximumemitted.qml
deleted file mode 100644
index dd4dfdfbdd..0000000000
--- a/examples/quick/particles/emitters/content/maximumemitted.qml
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- color: "black"
- width: 360
- height: 540
- ParticleSystem {
- id: sys
- anchors.fill: parent
- onEmptyChanged: if (empty) sys.pause();
-
- ImageParticle {
- system: sys
- id: cp
- source: "qrc:///particleresources/glowdot.png"
- colorVariation: 0.4
- color: "#000000FF"
- }
-
- Emitter {
- //burst on click
- id: bursty
- system: sys
- enabled: ma.pressed
- x: ma.mouseX
- y: ma.mouseY
- emitRate: 16000
- maximumEmitted: 4000
- acceleration: AngleDirection {angleVariation: 360; magnitude: 360; }
- size: 8
- endSize: 16
- sizeVariation: 4
- }
-
- MouseArea {
- anchors.fill: parent
- onPressed: sys.resume()
- id: ma
- }
- }
-}
diff --git a/examples/quick/particles/emitters/content/shapeanddirection.qml b/examples/quick/particles/emitters/content/shapeanddirection.qml
deleted file mode 100644
index 8d1659b099..0000000000
--- a/examples/quick/particles/emitters/content/shapeanddirection.qml
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- id: root
- width: 360
- height: 540
- color: "black"
- Image {
- anchors.fill: parent
- source: "../../images/portal_bg.png"
- }
-
- ParticleSystem {
- id: particles
- anchors.fill: parent
-
- ImageParticle {
- groups: ["center","edge"]
- anchors.fill: parent
- source: "qrc:///particleresources/glowdot.png"
- colorVariation: 0.1
- color: "#009999FF"
- }
-
- Emitter {
- anchors.fill: parent
- group: "center"
- emitRate: 400
- lifeSpan: 2000
- size: 20
- sizeVariation: 2
- endSize: 0
- //! [0]
- shape: EllipseShape {fill: false}
- velocity: TargetDirection {
- targetX: root.width/2
- targetY: root.height/2
- proportionalMagnitude: true
- magnitude: 0.5
- }
- //! [0]
- }
-
- Emitter {
- anchors.fill: parent
- group: "edge"
- startTime: 2000
- emitRate: 2000
- lifeSpan: 2000
- size: 28
- sizeVariation: 2
- endSize: 16
- shape: EllipseShape {fill: false}
- velocity: TargetDirection {
- targetX: root.width/2
- targetY: root.height/2
- proportionalMagnitude: true
- magnitude: 0.1
- magnitudeVariation: 0.1
- }
- acceleration: TargetDirection {
- targetX: root.width/2
- targetY: root.height/2
- targetVariation: 200
- proportionalMagnitude: true
- magnitude: 0.1
- magnitudeVariation: 0.1
- }
- }
- }
-}
diff --git a/examples/quick/particles/emitters/content/trailemitter.qml b/examples/quick/particles/emitters/content/trailemitter.qml
deleted file mode 100644
index fdb6180eb6..0000000000
--- a/examples/quick/particles/emitters/content/trailemitter.qml
+++ /dev/null
@@ -1,186 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- id: root
- width: 360
- height: 540
- color: "black"
-
- 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
- }
- }
-}
-
diff --git a/examples/quick/particles/emitters/content/velocityfrommotion.qml b/examples/quick/particles/emitters/content/velocityfrommotion.qml
deleted file mode 100644
index eee533a2fe..0000000000
--- a/examples/quick/particles/emitters/content/velocityfrommotion.qml
+++ /dev/null
@@ -1,322 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
-
- id: root
-
- height: 540
- width: 360
-
- gradient: Gradient {
- GradientStop { position: 0; color: "#000020" }
- GradientStop { position: 1; color: "#000000" }
- }
-
- MouseArea {
- id: mouseArea
- anchors.fill: root
- }
-
- ParticleSystem { id: sys1 }
- ImageParticle {
- system: sys1
- source: "qrc:///particleresources/glowdot.png"
- color: "cyan"
- alpha: 0
- SequentialAnimation on color {
- loops: Animation.Infinite
- ColorAnimation {
- from: "cyan"
- to: "magenta"
- duration: 1000
- }
- ColorAnimation {
- from: "magenta"
- to: "blue"
- duration: 2000
- }
- ColorAnimation {
- from: "blue"
- to: "violet"
- duration: 2000
- }
- ColorAnimation {
- from: "violet"
- to: "cyan"
- duration: 2000
- }
- }
- colorVariation: 0.3
- }
- //! [0]
- Emitter {
- id: trailsNormal
- system: sys1
-
- emitRate: 500
- lifeSpan: 2000
-
- y: mouseArea.pressed ? mouseArea.mouseY : circle.cy
- x: mouseArea.pressed ? mouseArea.mouseX : circle.cx
-
- velocity: PointDirection {xVariation: 4; yVariation: 4;}
- acceleration: PointDirection {xVariation: 10; yVariation: 10;}
- velocityFromMovement: 8
-
- size: 8
- sizeVariation: 4
- }
- //! [0]
- ParticleSystem { id: sys2 }
- ImageParticle {
- color: "cyan"
- system: sys2
- alpha: 0
- SequentialAnimation on color {
- loops: Animation.Infinite
- ColorAnimation {
- from: "magenta"
- to: "cyan"
- duration: 1000
- }
- ColorAnimation {
- from: "cyan"
- to: "magenta"
- duration: 2000
- }
- }
- colorVariation: 0.5
- source: "qrc:///particleresources/star.png"
- }
- Emitter {
- id: trailsStars
- system: sys2
-
- emitRate: 100
- lifeSpan: 2200
-
-
- y: mouseArea.pressed ? mouseArea.mouseY : circle.cy
- x: mouseArea.pressed ? mouseArea.mouseX : circle.cx
-
- velocity: PointDirection {xVariation: 4; yVariation: 4;}
- acceleration: PointDirection {xVariation: 10; yVariation: 10;}
- velocityFromMovement: 8
-
- size: 22
- sizeVariation: 4
- }
- ParticleSystem { id: sys3; }
- ImageParticle {
- source: "qrc:///particleresources/glowdot.png"
- system: sys3
- color: "orange"
- alpha: 0
- SequentialAnimation on color {
- loops: Animation.Infinite
- ColorAnimation {
- from: "red"
- to: "green"
- duration: 2000
- }
- ColorAnimation {
- from: "green"
- to: "red"
- duration: 2000
- }
- }
-
- colorVariation: 0.2
-
- }
- Emitter {
- id: trailsNormal2
- system: sys3
-
- emitRate: 300
- lifeSpan: 2000
-
- y: mouseArea.pressed ? mouseArea.mouseY : circle2.cy
- x: mouseArea.pressed ? mouseArea.mouseX : circle2.cx
-
- velocityFromMovement: 16
-
- velocity: PointDirection {xVariation: 4; yVariation: 4;}
- acceleration: PointDirection {xVariation: 10; yVariation: 10;}
-
- size: 12
- sizeVariation: 4
- }
- ParticleSystem { id: sys4; }
- ImageParticle {
- system: sys4
- source: "qrc:///particleresources/star.png"
- color: "green"
- alpha: 0
- SequentialAnimation on color {
- loops: Animation.Infinite
- ColorAnimation {
- from: "green"
- to: "red"
- duration: 2000
- }
- ColorAnimation {
- from: "red"
- to: "green"
- duration: 2000
- }
- }
-
- colorVariation: 0.5
- }
- Emitter {
- id: trailsStars2
- system: sys4
-
- emitRate: 50
- lifeSpan: 2200
-
-
- y: mouseArea.pressed ? mouseArea.mouseY : circle2.cy
- x: mouseArea.pressed ? mouseArea.mouseX : circle2.cx
-
- velocityFromMovement: 16
- velocity: PointDirection {xVariation: 2; yVariation: 2;}
- acceleration: PointDirection {xVariation: 10; yVariation: 10;}
-
- size: 22
- sizeVariation: 4
- }
-
-
-
- color: "white"
-
- Item {
- id: circle
- //anchors.fill: parent
- property real radius: 0
- 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
-
- SequentialAnimation on percent {
- loops: Animation.Infinite
- running: true
- NumberAnimation {
- duration: 1000
- from: 1
- to: 0
- loops: 8
- }
- NumberAnimation {
- duration: 1000
- from: 0
- to: 1
- loops: 8
- }
-
- }
-
- SequentialAnimation on radius {
- loops: Animation.Infinite
- running: true
- NumberAnimation {
- duration: 4000
- from: 0
- to: 100
- }
- NumberAnimation {
- duration: 4000
- from: 100
- to: 0
- }
- }
- }
-
- Item {
- id: circle3
- property real radius: 100
- 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
-
- SequentialAnimation on percent {
- loops: Animation.Infinite
- running: true
- NumberAnimation { from: 0.0; to: 1 ; duration: 10000; }
- }
- }
-
- Item {
- id: circle2
- property real radius: 30
- property real dx: circle3.cx
- 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
-
- SequentialAnimation on percent {
- loops: Animation.Infinite
- running: true
- NumberAnimation { from: 0.0; to: 1 ; duration: 1000; }
- }
- }
-
-}
diff --git a/examples/quick/particles/emitters/customemitter.qml b/examples/quick/particles/emitters/customemitter.qml
new file mode 100644
index 0000000000..ed23d68720
--- /dev/null
+++ b/examples/quick/particles/emitters/customemitter.qml
@@ -0,0 +1,59 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+ParticleSystem {
+ id: sys
+ width: 360
+ height: 600
+ running: true
+ Rectangle {
+ z: -1
+ anchors.fill: parent
+ color: "black"
+ }
+
+ property real petalLength: 180
+ property real petalRotation
+ NumberAnimation on petalRotation {
+ from: 0;
+ to: 360;
+ loops: -1;
+ running: true
+ duration: 24000
+ }
+
+ function convert(a) {return a*(Math.PI/180);}
+ Emitter {
+ lifeSpan: 4000
+ emitRate: 120
+ size: 12
+ anchors.centerIn: parent
+ //! [0]
+ onEmitParticles: (particles) => {
+ for (var i=0; i<particles.length; i++) {
+ let particle = particles[i];
+ particle.startSize = Math.max(02,Math.min(492,Math.tan(particle.t/2)*24));
+ 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;
+ theta /= 6.0;
+ theta *= 2.0*Math.PI;
+ theta += sys.convert(sys.petalRotation);//Convert from degrees to radians
+ particle.initialVX = sys.petalLength * Math.cos(theta);
+ particle.initialVY = sys.petalLength * Math.sin(theta);
+ particle.initialAX = particle.initialVX * -0.5;
+ particle.initialAY = particle.initialVY * -0.5;
+ }
+ }
+ //! [0]
+ }
+
+ ImageParticle {
+ source: "qrc:///particleresources/fuzzydot.png"
+ alpha: 0.0
+ }
+}
diff --git a/examples/quick/particles/emitters/doc/src/emitters.qdoc b/examples/quick/particles/emitters/doc/src/emitters.qdoc
index 2ba7ceb0b9..51a1ac308a 100644
--- a/examples/quick/particles/emitters/doc/src/emitters.qdoc
+++ b/examples/quick/particles/emitters/doc/src/emitters.qdoc
@@ -1,32 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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
@@ -34,27 +11,27 @@
Each example is a small QML file emphasizing a particular type or feature.
Velocity from motion gives the effect of strong particle motion through primarily moving the emitters:
- \snippet particles/emitters/content/velocityfrommotion.qml 0
+ \snippet particles/emitters/velocityfrommotion.qml 0
Burst and pulse calls the burst and pulse methods on two idential emitters.
- \snippet particles/emitters/content/burstandpulse.qml 0
+ \snippet particles/emitters/burstandpulse.qml 0
Note how burst takes an argument of number of particles to emit, and pulse takes an argument of number of milliseconds to emit for.
This gives a slightly different behaviour, which is easy to see in this example.
Custom Emitter connects to the emitParticles signal to set arbitrary values on particle data as they're emitted;
- \snippet particles/emitters/content/customemitter.qml 0
+ \snippet particles/emitters/customemitter.qml 0
This is used to emit curving particles in six rotating spokes.
Emit mask sets an image mask on the Emitter, to emit out of an arbitrary shape.
- \snippet particles/emitters/content/emitmask.qml 0
+ \snippet particles/emitters/emitmask.qml 0
Maximum emitted emits no more than a certain number of particles at a time. This example makes it easy to see what happens when the limit is reached.
Shape and Direction emits particles out of an unfilled Ellipse shape, using a TargetDirection
- \snippet particles/emitters/content/shapeanddirection.qml 0
+ \snippet particles/emitters/shapeanddirection.qml 0
This sends the particles towards the center of the ellipse with proportional speed, keeping the ellipse outline as they move to the center.
TrailEmitter uses that type to add smoke particles to trail the fire particles in the scene.
- \snippet particles/emitters/content/customemitter.qml 0
+ \snippet particles/emitters/customemitter.qml 0
*/
diff --git a/examples/quick/particles/emitters/emitmask.qml b/examples/quick/particles/emitters/emitmask.qml
new file mode 100644
index 0000000000..8a3e97f1d9
--- /dev/null
+++ b/examples/quick/particles/emitters/emitmask.qml
@@ -0,0 +1,37 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ color: "goldenrod"
+ width: 400
+ height: 400
+ ParticleSystem {
+ width: 300
+ height: 300
+ anchors.centerIn: parent
+
+ ImageParticle {
+ source: "qrc:///particleresources/glowdot.png"
+ z: 2
+ anchors.fill: parent
+ color: "#336666CC"
+ colorVariation: 0.0
+ }
+
+ Emitter {
+ anchors.fill: parent
+ emitRate: 6000
+ lifeSpan: 720
+ size: 10
+ //! [0]
+ shape: MaskShape {
+ source: "images/starfish_mask.png"
+ }
+ //! [0]
+ }
+
+ }
+}
diff --git a/examples/quick/particles/emitters/emitters.pro b/examples/quick/particles/emitters/emitters.pro
index c5d8b8b0c9..e493bc6a72 100644
--- a/examples/quick/particles/emitters/emitters.pro
+++ b/examples/quick/particles/emitters/emitters.pro
@@ -4,7 +4,6 @@ QT += quick qml
SOURCES += main.cpp
RESOURCES += \
emitters.qrc \
- ../images.qrc \
../../shared/shared.qrc
target.path = $$[QT_INSTALL_EXAMPLES]/quick/particles/emitters
diff --git a/examples/quick/particles/emitters/emitters.qml b/examples/quick/particles/emitters/emitters.qml
index 83b9eacc7c..8c981f0662 100644
--- a/examples/quick/particles/emitters/emitters.qml
+++ b/examples/quick/particles/emitters/emitters.qml
@@ -1,70 +1,23 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../../shared" as Examples
+import QtQuick
+import shared
Item {
height: 480
width: 320
- Examples.LauncherList {
+ LauncherList {
id: ll
anchors.fill: parent
Component.onCompleted: {
- addExample("Velocity from Motion", "Particle motion just by moving emitters", Qt.resolvedUrl("content/velocityfrommotion.qml"));
- addExample("Burst and Pulse", "Emit imperatively", Qt.resolvedUrl("content/burstandpulse.qml"));
- addExample("Custom Emitter", "Custom starting state", Qt.resolvedUrl("content/customemitter.qml"));
- addExample("Emit Mask", "Emit arbitrary shapes", Qt.resolvedUrl("content/emitmask.qml"));
- addExample("Maximum Emitted", "Put a limit on emissions", Qt.resolvedUrl("content/maximumemitted.qml"));
- addExample("Shape and Direction", "Creates a portal effect", Qt.resolvedUrl("content/shapeanddirection.qml"));
- addExample("TrailEmitter", "Emit from other particles", Qt.resolvedUrl("content/trailemitter.qml"));
+ addExample("Velocity from Motion", "Particle motion just by moving emitters", Qt.resolvedUrl("velocityfrommotion.qml"));
+ addExample("Burst and Pulse", "Emit imperatively", Qt.resolvedUrl("burstandpulse.qml"));
+ addExample("Custom Emitter", "Custom starting state", Qt.resolvedUrl("customemitter.qml"));
+ addExample("Emit Mask", "Emit arbitrary shapes", Qt.resolvedUrl("emitmask.qml"));
+ addExample("Maximum Emitted", "Put a limit on emissions", Qt.resolvedUrl("maximumemitted.qml"));
+ addExample("Shape and Direction", "Creates a portal effect", Qt.resolvedUrl("shapeanddirection.qml"));
+ addExample("TrailEmitter", "Emit from other particles", Qt.resolvedUrl("trailemitter.qml"));
}
}
}
diff --git a/examples/quick/particles/emitters/emitters.qrc b/examples/quick/particles/emitters/emitters.qrc
index 708c8683f0..5f3217d8a5 100644
--- a/examples/quick/particles/emitters/emitters.qrc
+++ b/examples/quick/particles/emitters/emitters.qrc
@@ -1,12 +1,14 @@
<RCC>
- <qresource prefix="/particles/emitters">
+ <qresource prefix="/qt/qml/emitters">
<file>emitters.qml</file>
- <file>content/burstandpulse.qml</file>
- <file>content/customemitter.qml</file>
- <file>content/emitmask.qml</file>
- <file>content/maximumemitted.qml</file>
- <file>content/shapeanddirection.qml</file>
- <file>content/trailemitter.qml</file>
- <file>content/velocityfrommotion.qml</file>
+ <file>burstandpulse.qml</file>
+ <file>customemitter.qml</file>
+ <file>emitmask.qml</file>
+ <file>maximumemitted.qml</file>
+ <file>shapeanddirection.qml</file>
+ <file>trailemitter.qml</file>
+ <file>velocityfrommotion.qml</file>
+ <file>images/starfish_mask.png</file>
+ <file>images/portal_bg.png</file>
</qresource>
</RCC>
diff --git a/examples/quick/particles/images/portal_bg.png b/examples/quick/particles/emitters/images/portal_bg.png
index 3c59eeabb9..3c59eeabb9 100644
--- a/examples/quick/particles/images/portal_bg.png
+++ b/examples/quick/particles/emitters/images/portal_bg.png
Binary files differ
diff --git a/examples/quick/particles/images/starfish_mask.png b/examples/quick/particles/emitters/images/starfish_mask.png
index 7ae39b34c5..7ae39b34c5 100644
--- a/examples/quick/particles/images/starfish_mask.png
+++ b/examples/quick/particles/emitters/images/starfish_mask.png
Binary files differ
diff --git a/examples/quick/particles/emitters/main.cpp b/examples/quick/particles/emitters/main.cpp
index e2b3cf2026..eccb3c8459 100644
--- a/examples/quick/particles/emitters/main.cpp
+++ b/examples/quick/particles/emitters/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(particles/emitters/emitters)
+DECLARATIVE_EXAMPLE_MAIN(emitters/emitters)
diff --git a/examples/quick/particles/emitters/maximumemitted.qml b/examples/quick/particles/emitters/maximumemitted.qml
new file mode 100644
index 0000000000..c5d33a9541
--- /dev/null
+++ b/examples/quick/particles/emitters/maximumemitted.qml
@@ -0,0 +1,45 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ color: "black"
+ width: 360
+ height: 540
+ ParticleSystem {
+ id: sys
+ anchors.fill: parent
+ onEmptyChanged: if (empty) sys.pause();
+
+ ImageParticle {
+ system: sys
+ id: cp
+ source: "qrc:///particleresources/glowdot.png"
+ colorVariation: 0.4
+ color: "#000000FF"
+ }
+
+ Emitter {
+ //burst on click
+ id: bursty
+ system: sys
+ enabled: ma.pressed
+ x: ma.mouseX
+ y: ma.mouseY
+ emitRate: 16000
+ maximumEmitted: 4000
+ acceleration: AngleDirection {angleVariation: 360; magnitude: 360; }
+ size: 8
+ endSize: 16
+ sizeVariation: 4
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: sys.resume()
+ id: ma
+ }
+ }
+}
diff --git a/examples/quick/particles/emitters/shapeanddirection.qml b/examples/quick/particles/emitters/shapeanddirection.qml
new file mode 100644
index 0000000000..190eb9cb60
--- /dev/null
+++ b/examples/quick/particles/emitters/shapeanddirection.qml
@@ -0,0 +1,75 @@
+// Copyright (C) 2017 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: 540
+ color: "black"
+ Image {
+ anchors.fill: parent
+ source: "images/portal_bg.png"
+ }
+
+ ParticleSystem {
+ id: particles
+ anchors.fill: parent
+
+ ImageParticle {
+ groups: ["center","edge"]
+ anchors.fill: parent
+ source: "qrc:///particleresources/glowdot.png"
+ colorVariation: 0.1
+ color: "#009999FF"
+ }
+
+ Emitter {
+ anchors.fill: parent
+ group: "center"
+ emitRate: 400
+ lifeSpan: 2000
+ size: 20
+ sizeVariation: 2
+ endSize: 0
+ //! [0]
+ shape: EllipseShape {fill: false}
+ velocity: TargetDirection {
+ targetX: root.width/2
+ targetY: root.height/2
+ proportionalMagnitude: true
+ magnitude: 0.5
+ }
+ //! [0]
+ }
+
+ Emitter {
+ anchors.fill: parent
+ group: "edge"
+ startTime: 2000
+ emitRate: 2000
+ lifeSpan: 2000
+ size: 28
+ sizeVariation: 2
+ endSize: 16
+ shape: EllipseShape {fill: false}
+ velocity: TargetDirection {
+ targetX: root.width/2
+ targetY: root.height/2
+ proportionalMagnitude: true
+ magnitude: 0.1
+ magnitudeVariation: 0.1
+ }
+ acceleration: TargetDirection {
+ targetX: root.width/2
+ targetY: root.height/2
+ targetVariation: 200
+ proportionalMagnitude: true
+ magnitude: 0.1
+ magnitudeVariation: 0.1
+ }
+ }
+ }
+}
diff --git a/examples/quick/particles/emitters/trailemitter.qml b/examples/quick/particles/emitters/trailemitter.qml
new file mode 100644
index 0000000000..eb8f03ab3c
--- /dev/null
+++ b/examples/quick/particles/emitters/trailemitter.qml
@@ -0,0 +1,139 @@
+// Copyright (C) 2017 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: 540
+ color: "black"
+
+ 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
+ }
+ }
+}
+
diff --git a/examples/quick/particles/emitters/velocityfrommotion.qml b/examples/quick/particles/emitters/velocityfrommotion.qml
new file mode 100644
index 0000000000..aa65ac7d9e
--- /dev/null
+++ b/examples/quick/particles/emitters/velocityfrommotion.qml
@@ -0,0 +1,271 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+
+ id: root
+
+ height: 540
+ width: 360
+
+ gradient: Gradient {
+ GradientStop { position: 0; color: "#000020" }
+ GradientStop { position: 1; color: "#000000" }
+ }
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: root
+ }
+
+ ParticleSystem { id: sys1 }
+ ImageParticle {
+ system: sys1
+ source: "qrc:///particleresources/glowdot.png"
+ alpha: 0
+ SequentialAnimation on color {
+ loops: Animation.Infinite
+ ColorAnimation {
+ from: "cyan"
+ to: "magenta"
+ duration: 1000
+ }
+ ColorAnimation {
+ from: "magenta"
+ to: "blue"
+ duration: 2000
+ }
+ ColorAnimation {
+ from: "blue"
+ to: "violet"
+ duration: 2000
+ }
+ ColorAnimation {
+ from: "violet"
+ to: "cyan"
+ duration: 2000
+ }
+ }
+ colorVariation: 0.3
+ }
+ //! [0]
+ Emitter {
+ id: trailsNormal
+ system: sys1
+
+ emitRate: 500
+ lifeSpan: 2000
+
+ y: mouseArea.pressed ? mouseArea.mouseY : circle.cy
+ x: mouseArea.pressed ? mouseArea.mouseX : circle.cx
+
+ velocity: PointDirection {xVariation: 4; yVariation: 4;}
+ acceleration: PointDirection {xVariation: 10; yVariation: 10;}
+ velocityFromMovement: 8
+
+ size: 8
+ sizeVariation: 4
+ }
+ //! [0]
+ ParticleSystem { id: sys2 }
+ ImageParticle {
+ system: sys2
+ alpha: 0
+ SequentialAnimation on color {
+ loops: Animation.Infinite
+ ColorAnimation {
+ from: "magenta"
+ to: "cyan"
+ duration: 1000
+ }
+ ColorAnimation {
+ from: "cyan"
+ to: "magenta"
+ duration: 2000
+ }
+ }
+ colorVariation: 0.5
+ source: "qrc:///particleresources/star.png"
+ }
+ Emitter {
+ id: trailsStars
+ system: sys2
+
+ emitRate: 100
+ lifeSpan: 2200
+
+
+ y: mouseArea.pressed ? mouseArea.mouseY : circle.cy
+ x: mouseArea.pressed ? mouseArea.mouseX : circle.cx
+
+ velocity: PointDirection {xVariation: 4; yVariation: 4;}
+ acceleration: PointDirection {xVariation: 10; yVariation: 10;}
+ velocityFromMovement: 8
+
+ size: 22
+ sizeVariation: 4
+ }
+ ParticleSystem { id: sys3; }
+ ImageParticle {
+ source: "qrc:///particleresources/glowdot.png"
+ system: sys3
+ alpha: 0
+ SequentialAnimation on color {
+ loops: Animation.Infinite
+ ColorAnimation {
+ from: "red"
+ to: "green"
+ duration: 2000
+ }
+ ColorAnimation {
+ from: "green"
+ to: "red"
+ duration: 2000
+ }
+ }
+
+ colorVariation: 0.2
+
+ }
+ Emitter {
+ id: trailsNormal2
+ system: sys3
+
+ emitRate: 300
+ lifeSpan: 2000
+
+ y: mouseArea.pressed ? mouseArea.mouseY : circle2.cy
+ x: mouseArea.pressed ? mouseArea.mouseX : circle2.cx
+
+ velocityFromMovement: 16
+
+ velocity: PointDirection {xVariation: 4; yVariation: 4;}
+ acceleration: PointDirection {xVariation: 10; yVariation: 10;}
+
+ size: 12
+ sizeVariation: 4
+ }
+ ParticleSystem { id: sys4; }
+ ImageParticle {
+ system: sys4
+ source: "qrc:///particleresources/star.png"
+ alpha: 0
+ SequentialAnimation on color {
+ loops: Animation.Infinite
+ ColorAnimation {
+ from: "green"
+ to: "red"
+ duration: 2000
+ }
+ ColorAnimation {
+ from: "red"
+ to: "green"
+ duration: 2000
+ }
+ }
+
+ colorVariation: 0.5
+ }
+ Emitter {
+ id: trailsStars2
+ system: sys4
+
+ emitRate: 50
+ lifeSpan: 2200
+
+
+ y: mouseArea.pressed ? mouseArea.mouseY : circle2.cy
+ x: mouseArea.pressed ? mouseArea.mouseX : circle2.cx
+
+ velocityFromMovement: 16
+ velocity: PointDirection {xVariation: 2; yVariation: 2;}
+ acceleration: PointDirection {xVariation: 10; yVariation: 10;}
+
+ size: 22
+ sizeVariation: 4
+ }
+
+
+
+ color: "white"
+
+ Item {
+ id: circle
+ //anchors.fill: parent
+ 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
+
+ SequentialAnimation on percent {
+ loops: Animation.Infinite
+ running: true
+ NumberAnimation {
+ duration: 1000
+ from: 1
+ to: 0
+ loops: 8
+ }
+ NumberAnimation {
+ duration: 1000
+ from: 0
+ to: 1
+ loops: 8
+ }
+
+ }
+
+ SequentialAnimation on radius {
+ loops: Animation.Infinite
+ running: true
+ NumberAnimation {
+ duration: 4000
+ from: 0
+ to: 100
+ }
+ NumberAnimation {
+ duration: 4000
+ from: 100
+ to: 0
+ }
+ }
+ }
+
+ Item {
+ id: circle3
+ property real radius: 100
+ 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
+
+ SequentialAnimation on percent {
+ loops: Animation.Infinite
+ running: true
+ NumberAnimation { from: 0.0; to: 1 ; duration: 10000; }
+ }
+ }
+
+ Item {
+ id: circle2
+ property real radius: 30
+ property real dx: circle3.cx
+ 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
+
+ SequentialAnimation on percent {
+ loops: Animation.Infinite
+ running: true
+ NumberAnimation { from: 0.0; to: 1 ; duration: 1000; }
+ }
+ }
+
+}
diff --git a/examples/quick/particles/imageparticle/CMakeLists.txt b/examples/quick/particles/imageparticle/CMakeLists.txt
index 29bddbb0db..c587d9bcc3 100644
--- a/examples/quick/particles/imageparticle/CMakeLists.txt
+++ b/examples/quick/particles/imageparticle/CMakeLists.txt
@@ -1,267 +1,62 @@
-# Generated from imageparticle.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(imageparticle LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+add_subdirectory("../../shared" "shared")
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/particles/imageparticle")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(imageparticle
+qt_add_executable(imageparticleexample WIN32 MACOSX_BUNDLE
main.cpp
)
-set_target_properties(imageparticle PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(imageparticle PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(imageparticle_resource_files
- "content/allatonce.qml"
- "content/colored.qml"
- "content/colortable.qml"
- "content/deformation.qml"
- "content/rotation.qml"
- "content/sharing.qml"
- "content/sprites.qml"
- "imageparticle.qml"
+target_link_libraries(imageparticleexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(imageparticle "imageparticle"
- PREFIX
- "/particles/imageparticle"
- FILES
- ${imageparticle_resource_files}
-)
-set_source_files_properties("../images/_explo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/_explo.png"
-)
-set_source_files_properties("../images/backgroundLeaves.jpg"
- PROPERTIES QT_RESOURCE_ALIAS "images/backgroundLeaves.jpg"
-)
-set_source_files_properties("../images/bear_tiles.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/bear_tiles.png"
-)
-set_source_files_properties("../images/candle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/candle.png"
-)
-set_source_files_properties("../images/colortable.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/colortable.png"
-)
-set_source_files_properties("../images/finalfrontier.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/finalfrontier.png"
-)
-set_source_files_properties("../images/flower.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/flower.png"
-)
-set_source_files_properties("../images/matchmask.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/matchmask.png"
-)
-set_source_files_properties("../images/meteor.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteor.png"
-)
-set_source_files_properties("../images/meteor_explo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteor_explo.png"
-)
-set_source_files_properties("../images/meteors.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteors.png"
-)
-set_source_files_properties("../images/nullRock.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/nullRock.png"
-)
-set_source_files_properties("../images/particle2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particle2.png"
-)
-set_source_files_properties("../images/particle3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particle3.png"
-)
-set_source_files_properties("../images/particleA.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particleA.png"
-)
-set_source_files_properties("../images/portal_bg.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/portal_bg.png"
-)
-set_source_files_properties("../images/realLeaf1.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf1.png"
-)
-set_source_files_properties("../images/realLeaf2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf2.png"
-)
-set_source_files_properties("../images/realLeaf3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf3.png"
-)
-set_source_files_properties("../images/realLeaf4.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf4.png"
-)
-set_source_files_properties("../images/rocket.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/rocket.png"
-)
-set_source_files_properties("../images/rocket2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/rocket2.png"
-)
-set_source_files_properties("../images/sizeInOut.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/sizeInOut.png"
-)
-set_source_files_properties("../images/snowflake.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/snowflake.png"
-)
-set_source_files_properties("../images/sparkleSize.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/sparkleSize.png"
-)
-set_source_files_properties("../images/starfish_0.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_0.png"
-)
-set_source_files_properties("../images/starfish_1.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_1.png"
-)
-set_source_files_properties("../images/starfish_2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_2.png"
-)
-set_source_files_properties("../images/starfish_3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_3.png"
-)
-set_source_files_properties("../images/starfish_4.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_4.png"
-)
-set_source_files_properties("../images/starfish_mask.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_mask.png"
-)
-set(images_resource_files
- "images/_explo.png"
- "images/backgroundLeaves.jpg"
- "images/bear_tiles.png"
- "images/candle.png"
- "images/colortable.png"
- "images/finalfrontier.png"
- "images/flower.png"
- "images/matchmask.png"
- "images/meteor.png"
- "images/meteor_explo.png"
- "images/meteors.png"
- "images/nullRock.png"
- "images/particle2.png"
- "images/particle3.png"
- "images/particleA.png"
- "images/portal_bg.png"
- "images/realLeaf1.png"
- "images/realLeaf2.png"
- "images/realLeaf3.png"
- "images/realLeaf4.png"
- "images/rocket.png"
- "images/rocket2.png"
- "images/sizeInOut.png"
- "images/snowflake.png"
- "images/sparkleSize.png"
- "images/starfish_0.png"
- "images/starfish_1.png"
- "images/starfish_2.png"
- "images/starfish_3.png"
- "images/starfish_4.png"
- "images/starfish_mask.png"
-)
-
-qt6_add_resources(imageparticle "images"
- PREFIX
- "/particles"
- BASE
- ".."
- FILES
- ${images_resource_files}
-)
-set_source_files_properties("../../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
+add_dependencies(imageparticleexample imageparticle_shared)
-qt6_add_resources(imageparticle "shared"
- PREFIX
- "/shared"
- BASE
- "../../shared"
- FILES
- ${shared_resource_files}
-)
-
-install(TARGETS imageparticle
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
+# Resources:
+qt_add_qml_module(imageparticleexample
+ URI imageparticle
+ QML_FILES
+ "allatonce.qml"
+ "colored.qml"
+ "colortable.qml"
+ "deformation.qml"
+ "imageparticle.qml"
+ "rotation.qml"
+ "sharing.qml"
+ "sprites.qml"
+ RESOURCES
+ "images/bear_tiles.png"
+ "images/colortable.png"
+ "images/starfish_0.png"
+ "images/starfish_1.png"
+ "images/starfish_2.png"
+ "images/starfish_3.png"
+ "images/starfish_4.png"
+ "images/flower.png"
+)
+
+install(TARGETS imageparticleexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+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/allatonce.qml b/examples/quick/particles/imageparticle/allatonce.qml
new file mode 100644
index 0000000000..62a8d6c448
--- /dev/null
+++ b/examples/quick/particles/imageparticle/allatonce.qml
@@ -0,0 +1,63 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ color: "white"
+ width: 640
+ height: 480
+ ParticleSystem {
+ id: sys
+ }
+
+ ImageParticle {
+ // ![0]
+ sprites: [
+ Sprite {
+ name: "bear"
+ source: "images/bear_tiles.png"
+ frameCount: 13
+ frameDuration: 120
+ }
+ ]
+ colorVariation: 0.5
+ rotationVelocityVariation: 360
+ colorTable: "images/colortable.png"
+ // ![0]
+ system: sys
+ }
+
+ Friction {
+ factor: 0.1
+ system: sys
+ }
+
+ Emitter {
+ system: sys
+ anchors.centerIn: parent
+ id: particles
+ emitRate: 200
+ lifeSpan: 6000
+ velocity: AngleDirection {angleVariation: 360; magnitude: 80; magnitudeVariation: 40}
+ size: 60
+ endSize: 120
+ }
+
+ Text {
+ x: 16
+ y: 16
+ text: "QML..."
+ style: Text.Outline; styleColor: "#AAAAAA"
+ font.pixelSize: 32
+ }
+ Text {
+ anchors.bottom: parent.bottom
+ anchors.right: parent.right
+ anchors.margins: 16
+ text: "... can you be trusted with the power?"
+ style: Text.Outline; styleColor: "#AAAAAA"
+ font.pixelSize: width > 400 ? 32 : 16
+ }
+}
diff --git a/examples/quick/particles/imageparticle/colored.qml b/examples/quick/particles/imageparticle/colored.qml
new file mode 100644
index 0000000000..8d4be46873
--- /dev/null
+++ b/examples/quick/particles/imageparticle/colored.qml
@@ -0,0 +1,51 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ width: 360
+ height: 540
+ color: "black"
+ ParticleSystem {
+ anchors.fill: parent
+ ImageParticle {
+ groups: ["stars"]
+ anchors.fill: parent
+ source: "qrc:///particleresources/star.png"
+ }
+ Emitter {
+ group: "stars"
+ emitRate: 800
+ lifeSpan: 2400
+ size: 24
+ sizeVariation: 8
+ anchors.fill: parent
+ }
+
+ // ![0]
+ ImageParticle {
+ anchors.fill: parent
+ source: "qrc:///particleresources/star.png"
+ alpha: 0
+ alphaVariation: 0.2
+ colorVariation: 1.0
+ }
+ // ![0]
+
+ Emitter {
+ anchors.centerIn: parent
+ emitRate: 400
+ lifeSpan: 2400
+ size: 48
+ sizeVariation: 8
+ velocity: AngleDirection {angleVariation: 180; magnitude: 60}
+ }
+
+ Turbulence {
+ anchors.fill: parent
+ strength: 2
+ }
+ }
+}
diff --git a/examples/quick/particles/imageparticle/colortable.qml b/examples/quick/particles/imageparticle/colortable.qml
new file mode 100644
index 0000000000..f571f98b56
--- /dev/null
+++ b/examples/quick/particles/imageparticle/colortable.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick.Particles
+import QtQuick
+
+Rectangle {
+ id: root
+ width: 360
+ height: 540
+ color: "black"
+
+ ParticleSystem { id: particles }
+
+ ImageParticle {
+ system: particles
+ colorVariation: 0.5
+ alpha: 0
+
+ //! [0]
+ source: "qrc:///particleresources/glowdot.png"
+ colorTable: "images/colortable.png"
+ sizeTable: "images/colortable.png"
+ //! [0]
+ }
+
+ Emitter {
+ system: particles
+ emitRate: 500
+ lifeSpan: 2000
+
+ y: root.height / 2 + Math.sin(t * 2) * root.height * 0.3
+ x: root.width / 2 + Math.cos(t) * root.width * 0.3
+ property real t;
+
+ NumberAnimation on t {
+ from: 0; to: Math.PI * 2; duration: 10000; loops: Animation.Infinite
+ }
+
+ velocityFromMovement: 20
+
+ velocity: PointDirection { xVariation: 5; yVariation: 5;}
+ acceleration: PointDirection { xVariation: 5; yVariation: 5;}
+
+ size: 16
+ //endSize: 8
+ //sizeVariation: 8
+ }
+}
diff --git a/examples/quick/particles/imageparticle/content/allatonce.qml b/examples/quick/particles/imageparticle/content/allatonce.qml
deleted file mode 100644
index 4b6c9b35cc..0000000000
--- a/examples/quick/particles/imageparticle/content/allatonce.qml
+++ /dev/null
@@ -1,110 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- color: "white"
- width: 640
- height: 480
- ParticleSystem {
- id: sys
- }
-
- ImageParticle {
- // ![0]
- sprites: [
- Sprite {
- name: "bear"
- source: "../../images/bear_tiles.png"
- frameCount: 13
- frameDuration: 120
- }
- ]
- colorVariation: 0.5
- rotationVelocityVariation: 360
- colorTable: "../../images/colortable.png"
- // ![0]
- system: sys
- }
-
- Friction {
- factor: 0.1
- system: sys
- }
-
- Emitter {
- system: sys
- anchors.centerIn: parent
- id: particles
- emitRate: 200
- lifeSpan: 6000
- velocity: AngleDirection {angleVariation: 360; magnitude: 80; magnitudeVariation: 40}
- size: 60
- endSize: 120
- }
-
- Text {
- x: 16
- y: 16
- text: "QML..."
- style: Text.Outline; styleColor: "#AAAAAA"
- font.pixelSize: 32
- }
- Text {
- anchors.bottom: parent.bottom
- anchors.right: parent.right
- anchors.margins: 16
- text: "... can you be trusted with the power?"
- style: Text.Outline; styleColor: "#AAAAAA"
- font.pixelSize: width > 400 ? 32 : 16
- }
-}
diff --git a/examples/quick/particles/imageparticle/content/colored.qml b/examples/quick/particles/imageparticle/content/colored.qml
deleted file mode 100644
index 3452cad805..0000000000
--- a/examples/quick/particles/imageparticle/content/colored.qml
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- width: 360
- height: 540
- color: "black"
- ParticleSystem {
- anchors.fill: parent
- ImageParticle {
- groups: ["stars"]
- anchors.fill: parent
- source: "qrc:///particleresources/star.png"
- }
- Emitter {
- group: "stars"
- emitRate: 800
- lifeSpan: 2400
- size: 24
- sizeVariation: 8
- anchors.fill: parent
- }
-
- // ![0]
- ImageParticle {
- anchors.fill: parent
- source: "qrc:///particleresources/star.png"
- alpha: 0
- alphaVariation: 0.2
- colorVariation: 1.0
- }
- // ![0]
-
- Emitter {
- anchors.centerIn: parent
- emitRate: 400
- lifeSpan: 2400
- size: 48
- sizeVariation: 8
- velocity: AngleDirection {angleVariation: 180; magnitude: 60}
- }
-
- Turbulence {
- anchors.fill: parent
- strength: 2
- }
- }
-}
diff --git a/examples/quick/particles/imageparticle/content/colortable.qml b/examples/quick/particles/imageparticle/content/colortable.qml
deleted file mode 100644
index 5f88c1a8b3..0000000000
--- a/examples/quick/particles/imageparticle/content/colortable.qml
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick.Particles 2.0
-import QtQuick 2.0
-
-Rectangle {
- id: root
- width: 360
- height: 540
- color: "black"
-
- ParticleSystem { id: particles }
-
- ImageParticle {
- system: particles
- colorVariation: 0.5
- alpha: 0
-
- //! [0]
- source: "qrc:///particleresources/glowdot.png"
- colorTable: "../../images/colortable.png"
- sizeTable: "../../images/colortable.png"
- //! [0]
- }
-
- Emitter {
- system: particles
- emitRate: 500
- lifeSpan: 2000
-
- y: root.height / 2 + Math.sin(t * 2) * root.height * 0.3
- x: root.width / 2 + Math.cos(t) * root.width * 0.3
- property real t;
-
- NumberAnimation on t {
- from: 0; to: Math.PI * 2; duration: 10000; loops: Animation.Infinite
- }
-
- velocityFromMovement: 20
-
- velocity: PointDirection { xVariation: 5; yVariation: 5;}
- acceleration: PointDirection { xVariation: 5; yVariation: 5;}
-
- size: 16
- //endSize: 8
- //sizeVariation: 8
- }
-}
diff --git a/examples/quick/particles/imageparticle/content/deformation.qml b/examples/quick/particles/imageparticle/content/deformation.qml
deleted file mode 100644
index ce672c8fa3..0000000000
--- a/examples/quick/particles/imageparticle/content/deformation.qml
+++ /dev/null
@@ -1,135 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- color: "goldenrod"
- width: 400
- height: 400
- ParticleSystem {id:sys}
-
- //! [spin]
- ImageParticle {
- system: sys
- groups: ["goingLeft", "goingRight"]
- source: "../../images/starfish_4.png"
- rotation: 90
- rotationVelocity: 90
- autoRotation: true
- }
- //! [spin]
- //! [deform]
- ImageParticle {
- system: sys
- groups: ["goingDown"]
- source: "../../images/starfish_0.png"
- rotation: 180
- yVector: PointDirection { y: 0.5; yVariation: 0.25; xVariation: 0.25; }
- }
- //! [deform]
-
- Timer {
- running: true
- repeat: false
- interval: 100
- onTriggered: emitA.enabled = true;
- }
- Timer {
- running: true
- repeat: false
- interval: 4200
- onTriggered: emitB.enabled = true;
- }
- Timer {
- running: true
- repeat: false
- interval: 8400
- onTriggered: emitC.enabled = true;
- }
-
- Emitter {
- id: emitA
- x: 0
- y: 120
- system: sys
- enabled: false
- group: "goingRight"
- velocity: PointDirection { x: 100 }
- lifeSpan: 4000
- emitRate: 1
- size: 128
- }
- Emitter {
- id: emitB
- x: 400
- y: 240
- system: sys
- enabled: false
- group: "goingLeft"
- velocity: PointDirection { x: -100 }
- lifeSpan: 4000
- emitRate: 1
- size: 128
- }
- Emitter {
- id: emitC
- x: 0
- y: 360
- system: sys
- enabled: false
- group: "goingDown"
- velocity: PointDirection { x: 100 }
- lifeSpan: 4000
- emitRate: 1
- size: 128
- }
-}
diff --git a/examples/quick/particles/imageparticle/content/rotation.qml b/examples/quick/particles/imageparticle/content/rotation.qml
deleted file mode 100644
index d118bb1d97..0000000000
--- a/examples/quick/particles/imageparticle/content/rotation.qml
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- color: "goldenrod"
- width: 2000
- height: 2000
- ParticleSystem {id: sys}
- ImageParticle {
- id: up
- system: sys
- source: "../../images/starfish_2.png"
- autoRotation: true //leaving these two settings at default allows you to test going up performance levels
- rotation: -90
- }
-
- Emitter {
- anchors.centerIn: parent
- system: sys
- emitRate: 10
- size: 200
- lifeSpan: 10000
- velocity: AngleDirection {angleVariation: 360; magnitudeVariation: 100;}
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- up.autoRotation = !up.autoRotation
- up.rotation = up.autoRotation ? -90 : 0
- }
- }
-}
diff --git a/examples/quick/particles/imageparticle/content/sharing.qml b/examples/quick/particles/imageparticle/content/sharing.qml
deleted file mode 100644
index 13b0dadf85..0000000000
--- a/examples/quick/particles/imageparticle/content/sharing.qml
+++ /dev/null
@@ -1,217 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-// This example shows how to create your own highlight delegate for a ListView
-// that uses a SpringAnimation to provide custom movement when the
-// highlight bar is moved between items.
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- id: root
-
- property real delegateHeight: 65
- width: 200; height: 300
- gradient: Gradient {
- GradientStop { position: 0.0; color: "#EEEEFF" }
- GradientStop { position: 1.0; color: "lightblue" }
- }
-
- // Define a delegate component. A component will be
- // instantiated for each visible item in the list.
- component PetDelegate: Item {
- id: pet
- width: 200; height: root.delegateHeight
- z: 10
-
- required property int index
- required property string name
- required property string type
- required property int age
-
- Column {
- Text {color: "white"; text: pet.name; font.pixelSize: 18 }
- Text {color: "white"; text: 'Type: ' + pet.type; font.pixelSize: 14 }
- Text {color: "white"; text: 'Age: ' + pet.age; font.pixelSize: 14 }
- }
- MouseArea { anchors.fill: parent; onClicked: listView.currentIndex = pet.index; }
- // indent the item if it is the current item
- states: State {
- name: "Current"
- when: pet.ListView.isCurrentItem
- PropertyChanges { target: pet; x: 20 }
- }
- transitions: Transition {
- NumberAnimation { properties: "x"; duration: 200 }
- }
- }
-
- // Define a highlight with customized movement between items.
- component HighlightBar : Rectangle {
- z: 0
- width: 200; height: root.delegateHeight
- gradient: Gradient {
- GradientStop { position: 0.0; color: "#99FF99" }
- GradientStop { position: 1.0; color: "#88FF88" }
- }
- y: listView.currentItem.y;
- Behavior on y { SpringAnimation { spring: 2; damping: 0.2 } }
- //! [1]
- ImageParticle {
- anchors.fill: parent
- system: particles
- source: "../../images/flower.png"
- color: "red"
- clip: true
- alpha: 1.0
- }
- //! [1]
- }
-
- ListView {
- id: listView
- width: 200; height: parent.height
-
- 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 {}
- highlightFollowsCurrentItem: false
-
- ParticleSystem { id: particles }
- Emitter {
- system: particles
- anchors.fill: parent
- emitRate: 0
- lifeSpan: 10000
- size: 24
- sizeVariation: 8
- velocity: AngleDirection { angleVariation: 360; magnitude: 3 }
- maximumEmitted: 10
- startTime: 5000
- Timer { running: true; interval: 10; onTriggered: parent.emitRate = 1; }
- }
-
- //! [0]
- ImageParticle {
- anchors.fill: parent
- system: particles
- source: "../../images/flower.png"
- alpha: 0.1
- color: "white"
- rotationVariation: 180
- z: -1
- }
- //! [0]
- }
-
- ListModel {
- id: petsModel
- ListElement {
- name: "Polly"
- type: "Parrot"
- age: 12
- size: "Small"
- }
- ListElement {
- name: "Penny"
- type: "Turtle"
- age: 4
- size: "Small"
- }
- ListElement {
- name: "Warren"
- type: "Rabbit"
- age: 2
- size: "Small"
- }
- ListElement {
- name: "Spot"
- type: "Dog"
- age: 9
- size: "Medium"
- }
- ListElement {
- name: "Schrödinger"
- type: "Cat"
- age: 2
- size: "Medium"
- }
- ListElement {
- name: "Joey"
- type: "Kangaroo"
- age: 1
- size: "Medium"
- }
- ListElement {
- name: "Kimba"
- type: "Bunny"
- age: 65
- size: "Large"
- }
- ListElement {
- name: "Rover"
- type: "Dog"
- age: 5
- size: "Large"
- }
- ListElement {
- name: "Tiny"
- type: "Elephant"
- age: 15
- size: "Large"
- }
- }
-
-}
diff --git a/examples/quick/particles/imageparticle/content/sprites.qml b/examples/quick/particles/imageparticle/content/sprites.qml
deleted file mode 100644
index c8ffe6c0e5..0000000000
--- a/examples/quick/particles/imageparticle/content/sprites.qml
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- color: "lightsteelblue"
- width: 800
- height: 800
- id: root
-
- SpriteSequence {
- sprites: Sprite {
- name: "bear"
- source: "../../images/bear_tiles.png"
- frameCount: 13
- frameDuration: 120
- }
- width: 250
- height: 250
- x: 20
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 20
- z:4
- }
-
- ParticleSystem { id: sys }
-
- ImageParticle {
- anchors.fill: parent
- id: particles
- system: sys
- sprites: [Sprite {
- name: "happy"
- source: "../../images/starfish_1.png"
- frameCount: 1
- frameDuration: 260
- to: {"happy": 1, "silly": 1, "angry": 1}
- }, Sprite {
- name: "angry"
- source: "../../images/starfish_0.png"
- frameCount: 1
- frameDuration: 260
- to: {"happy": 1, "silly": 1, "angry": 1}
- }, Sprite {
- name: "silly"
- source: "../../images/starfish_2.png"
- frameCount: 1
- frameDuration: 260
- to: {"happy": 1, "silly": 1, "noticedbear": 0}
- }, Sprite {
- name: "noticedbear"
- source: "../../images/starfish_3.png"
- frameCount: 1
- frameDuration: 2600
- }]
- }
-
- Emitter {
- system: sys
- emitRate: 2
- lifeSpan: 10000
- velocity: AngleDirection {angle: 90; magnitude: 60; angleVariation: 5}
- acceleration: PointDirection { y: 10 }
- size: 160
- sizeVariation: 40
- width: parent.width
- height: 100
- }
-
- SpriteGoal {
- system: sys
- width: root.width;
- height: root.height/2;
- y: root.height/2;
- goalState:"noticedbear"
- }
-}
diff --git a/examples/quick/particles/imageparticle/deformation.qml b/examples/quick/particles/imageparticle/deformation.qml
new file mode 100644
index 0000000000..f853798b05
--- /dev/null
+++ b/examples/quick/particles/imageparticle/deformation.qml
@@ -0,0 +1,88 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ color: "goldenrod"
+ width: 400
+ height: 400
+ ParticleSystem {id:sys}
+
+ //! [spin]
+ ImageParticle {
+ system: sys
+ groups: ["goingLeft", "goingRight"]
+ source: "images/starfish_4.png"
+ rotation: 90
+ rotationVelocity: 90
+ autoRotation: true
+ }
+ //! [spin]
+ //! [deform]
+ ImageParticle {
+ system: sys
+ groups: ["goingDown"]
+ source: "images/starfish_0.png"
+ rotation: 180
+ yVector: PointDirection { y: 0.5; yVariation: 0.25; xVariation: 0.25; }
+ }
+ //! [deform]
+
+ Timer {
+ running: true
+ repeat: false
+ interval: 100
+ onTriggered: emitA.enabled = true;
+ }
+ Timer {
+ running: true
+ repeat: false
+ interval: 4200
+ onTriggered: emitB.enabled = true;
+ }
+ Timer {
+ running: true
+ repeat: false
+ interval: 8400
+ onTriggered: emitC.enabled = true;
+ }
+
+ Emitter {
+ id: emitA
+ x: 0
+ y: 120
+ system: sys
+ enabled: false
+ group: "goingRight"
+ velocity: PointDirection { x: 100 }
+ lifeSpan: 4000
+ emitRate: 1
+ size: 128
+ }
+ Emitter {
+ id: emitB
+ x: 400
+ y: 240
+ system: sys
+ enabled: false
+ group: "goingLeft"
+ velocity: PointDirection { x: -100 }
+ lifeSpan: 4000
+ emitRate: 1
+ size: 128
+ }
+ Emitter {
+ id: emitC
+ x: 0
+ y: 360
+ system: sys
+ enabled: false
+ group: "goingDown"
+ velocity: PointDirection { x: 100 }
+ lifeSpan: 4000
+ emitRate: 1
+ size: 128
+ }
+}
diff --git a/examples/quick/particles/imageparticle/doc/src/imageparticle.qdoc b/examples/quick/particles/imageparticle/doc/src/imageparticle.qdoc
index 6a71e1f5fd..4bbbc6a430 100644
--- a/examples/quick/particles/imageparticle/doc/src/imageparticle.qdoc
+++ b/examples/quick/particles/imageparticle/doc/src/imageparticle.qdoc
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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
@@ -35,25 +12,25 @@
Each example is a small QML file emphasizing a particular type or feature.
All at once shows off several of the features of ImageParticle at the same time.
- \snippet particles/imageparticle/content/allatonce.qml 0
+ \snippet particles/imageparticle/allatonce.qml 0
Colored shows a simple ImageParticle with some color variation.
- \snippet particles/imageparticle/content/colored.qml 0
+ \snippet particles/imageparticle/colored.qml 0
Color Table sets the color over life on the particles to provide a fixed rainbow effect.
- \snippet particles/imageparticle/content/colortable.qml 0
+ \snippet particles/imageparticle/colortable.qml 0
Deformation spins and squishes a starfish particle.
- \snippet particles/imageparticle/content/deformation.qml spin
- \snippet particles/imageparticle/content/deformation.qml deform
+ \snippet particles/imageparticle/deformation.qml spin
+ \snippet particles/imageparticle/deformation.qml deform
Rotation demonstrates the autoRotate property, so that particles rotate in the direction that they travel.
Sharing demonstrates what happens when multiple ImageParticles try to render the same particle.
The following ImageParticle renders the particles inside the ListView:
- \snippet particles/imageparticle/content/sharing.qml 0
+ \snippet particles/imageparticle/sharing.qml 0
The following ImageParticle is placed inside the list highlight, and renders the particles above the other ImageParticle.
- \snippet particles/imageparticle/content/sharing.qml 1
+ \snippet particles/imageparticle/sharing.qml 1
Note that because it sets the color and alpha in this ImageParticle, it renders the particles in a different color.
Since it doesn't specify anything about the rotation, it shares the rotation with the other ImageParticle so that the flowers are rotated the same way in both.
Note that you can undo rotation in another ImageParticle, you just need to explicitly set rotationVariation to 0.
diff --git a/examples/quick/particles/imageparticle/imageparticle.pro b/examples/quick/particles/imageparticle/imageparticle.pro
index e639c7423a..c9c5e59eb0 100644
--- a/examples/quick/particles/imageparticle/imageparticle.pro
+++ b/examples/quick/particles/imageparticle/imageparticle.pro
@@ -4,7 +4,6 @@ QT += quick qml
SOURCES += main.cpp
RESOURCES += \
imageparticle.qrc \
- ../images.qrc \
../../shared/shared.qrc
target.path = $$[QT_INSTALL_EXAMPLES]/quick/particles/imageparticle
diff --git a/examples/quick/particles/imageparticle/imageparticle.qml b/examples/quick/particles/imageparticle/imageparticle.qml
index a8dfa6a0c9..2fb97cd568 100644
--- a/examples/quick/particles/imageparticle/imageparticle.qml
+++ b/examples/quick/particles/imageparticle/imageparticle.qml
@@ -1,70 +1,23 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../../shared" as Examples
+import QtQuick
+import shared
Item {
height: 480
width: 320
- Examples.LauncherList {
+ LauncherList {
id: ll
anchors.fill: parent
Component.onCompleted: {
- addExample("All at once", "Uses all ImageParticle features", Qt.resolvedUrl("content/allatonce.qml"));
- addExample("Colored", "Colorized image particles", Qt.resolvedUrl("content/colored.qml"));
- addExample("Color Table", "Color-over-life rainbow particles", Qt.resolvedUrl("content/colortable.qml"));
- addExample("Deformation", "Deformed particles", Qt.resolvedUrl("content/deformation.qml"));
- addExample("Rotation", "Rotated particles", Qt.resolvedUrl("content/rotation.qml"));
- addExample("Sharing", "Multiple ImageParticles on the same particles", Qt.resolvedUrl("content/sharing.qml"));
- addExample("Sprites", "Particles rendered with sprites", Qt.resolvedUrl("content/sprites.qml"));
+ addExample("All at once", "Uses all ImageParticle features", Qt.resolvedUrl("allatonce.qml"));
+ addExample("Colored", "Colorized image particles", Qt.resolvedUrl("colored.qml"));
+ addExample("Color Table", "Color-over-life rainbow particles", Qt.resolvedUrl("colortable.qml"));
+ addExample("Deformation", "Deformed particles", Qt.resolvedUrl("deformation.qml"));
+ addExample("Rotation", "Rotated particles", Qt.resolvedUrl("rotation.qml"));
+ addExample("Sharing", "Multiple ImageParticles on the same particles", Qt.resolvedUrl("sharing.qml"));
+ addExample("Sprites", "Particles rendered with sprites", Qt.resolvedUrl("sprites.qml"));
}
}
}
diff --git a/examples/quick/particles/imageparticle/imageparticle.qrc b/examples/quick/particles/imageparticle/imageparticle.qrc
index d9e4115e3e..f77a5ac411 100644
--- a/examples/quick/particles/imageparticle/imageparticle.qrc
+++ b/examples/quick/particles/imageparticle/imageparticle.qrc
@@ -1,12 +1,20 @@
<RCC>
- <qresource prefix="/particles/imageparticle">
+ <qresource prefix="/qt/qml/imageparticle">
<file>imageparticle.qml</file>
- <file>content/allatonce.qml</file>
- <file>content/colored.qml</file>
- <file>content/colortable.qml</file>
- <file>content/deformation.qml</file>
- <file>content/rotation.qml</file>
- <file>content/sharing.qml</file>
- <file>content/sprites.qml</file>
+ <file>allatonce.qml</file>
+ <file>colored.qml</file>
+ <file>colortable.qml</file>
+ <file>deformation.qml</file>
+ <file>rotation.qml</file>
+ <file>sharing.qml</file>
+ <file>sprites.qml</file>
+ <file>images/bear_tiles.png</file>
+ <file>images/colortable.png</file>
+ <file>images/starfish_0.png</file>
+ <file>images/starfish_1.png</file>
+ <file>images/starfish_2.png</file>
+ <file>images/starfish_3.png</file>
+ <file>images/starfish_4.png</file>
+ <file>images/flower.png</file>
</qresource>
</RCC>
diff --git a/examples/quick/particles/images/bear_tiles.png b/examples/quick/particles/imageparticle/images/bear_tiles.png
index 6bbb2a9b6d..6bbb2a9b6d 100644
--- a/examples/quick/particles/images/bear_tiles.png
+++ b/examples/quick/particles/imageparticle/images/bear_tiles.png
Binary files differ
diff --git a/examples/quick/particles/images/colortable.png b/examples/quick/particles/imageparticle/images/colortable.png
index 15509ab5b7..15509ab5b7 100644
--- a/examples/quick/particles/images/colortable.png
+++ b/examples/quick/particles/imageparticle/images/colortable.png
Binary files differ
diff --git a/examples/quick/particles/images/flower.png b/examples/quick/particles/imageparticle/images/flower.png
index b5c606210e..b5c606210e 100644
--- a/examples/quick/particles/images/flower.png
+++ b/examples/quick/particles/imageparticle/images/flower.png
Binary files differ
diff --git a/examples/quick/particles/images/starfish_0.png b/examples/quick/particles/imageparticle/images/starfish_0.png
index 8747f0236e..8747f0236e 100644
--- a/examples/quick/particles/images/starfish_0.png
+++ b/examples/quick/particles/imageparticle/images/starfish_0.png
Binary files differ
diff --git a/examples/quick/particles/images/starfish_1.png b/examples/quick/particles/imageparticle/images/starfish_1.png
index 1f3f159d5e..1f3f159d5e 100644
--- a/examples/quick/particles/images/starfish_1.png
+++ b/examples/quick/particles/imageparticle/images/starfish_1.png
Binary files differ
diff --git a/examples/quick/particles/images/starfish_2.png b/examples/quick/particles/imageparticle/images/starfish_2.png
index c6c7e5a676..c6c7e5a676 100644
--- a/examples/quick/particles/images/starfish_2.png
+++ b/examples/quick/particles/imageparticle/images/starfish_2.png
Binary files differ
diff --git a/examples/quick/particles/images/starfish_3.png b/examples/quick/particles/imageparticle/images/starfish_3.png
index 307a89f815..307a89f815 100644
--- a/examples/quick/particles/images/starfish_3.png
+++ b/examples/quick/particles/imageparticle/images/starfish_3.png
Binary files differ
diff --git a/examples/quick/particles/images/starfish_4.png b/examples/quick/particles/imageparticle/images/starfish_4.png
index d61c26545a..d61c26545a 100644
--- a/examples/quick/particles/images/starfish_4.png
+++ b/examples/quick/particles/imageparticle/images/starfish_4.png
Binary files differ
diff --git a/examples/quick/particles/imageparticle/main.cpp b/examples/quick/particles/imageparticle/main.cpp
index ff0764a730..43bd43a1b6 100644
--- a/examples/quick/particles/imageparticle/main.cpp
+++ b/examples/quick/particles/imageparticle/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(particles/imageparticle/imageparticle)
+DECLARATIVE_EXAMPLE_MAIN(imageparticle/imageparticle)
diff --git a/examples/quick/particles/imageparticle/rotation.qml b/examples/quick/particles/imageparticle/rotation.qml
new file mode 100644
index 0000000000..df1a40d786
--- /dev/null
+++ b/examples/quick/particles/imageparticle/rotation.qml
@@ -0,0 +1,36 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ color: "goldenrod"
+ width: 2000
+ height: 2000
+ ParticleSystem {id: sys}
+ ImageParticle {
+ id: up
+ system: sys
+ source: "images/starfish_2.png"
+ autoRotation: true //leaving these two settings at default allows you to test going up performance levels
+ rotation: -90
+ }
+
+ Emitter {
+ anchors.centerIn: parent
+ system: sys
+ emitRate: 10
+ size: 200
+ lifeSpan: 10000
+ velocity: AngleDirection {angleVariation: 360; magnitudeVariation: 100;}
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ up.autoRotation = !up.autoRotation
+ up.rotation = up.autoRotation ? -90 : 0
+ }
+ }
+}
diff --git a/examples/quick/particles/imageparticle/sharing.qml b/examples/quick/particles/imageparticle/sharing.qml
new file mode 100644
index 0000000000..3519072b70
--- /dev/null
+++ b/examples/quick/particles/imageparticle/sharing.qml
@@ -0,0 +1,170 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+// This example shows how to create your own highlight delegate for a ListView
+// that uses a SpringAnimation to provide custom movement when the
+// highlight bar is moved between items.
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ id: root
+
+ property real delegateHeight: 65
+ width: 200; height: 300
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#EEEEFF" }
+ GradientStop { position: 1.0; color: "lightblue" }
+ }
+
+ // Define a delegate component. A component will be
+ // instantiated for each visible item in the list.
+ component PetDelegate: Item {
+ id: pet
+ width: 200; height: root.delegateHeight
+ z: 10
+
+ required property int index
+ required property string name
+ required property string type
+ required property int age
+
+ Column {
+ Text {color: "white"; text: pet.name; font.pixelSize: 18 }
+ Text {color: "white"; text: 'Type: ' + pet.type; font.pixelSize: 14 }
+ Text {color: "white"; text: 'Age: ' + pet.age; font.pixelSize: 14 }
+ }
+ MouseArea { anchors.fill: parent; onClicked: listView.currentIndex = pet.index; }
+ // indent the item if it is the current item
+ states: State {
+ name: "Current"
+ when: pet.ListView.isCurrentItem
+ PropertyChanges { pet.x: 20 }
+ }
+ transitions: Transition {
+ NumberAnimation { properties: "x"; duration: 200 }
+ }
+ }
+
+ // Define a highlight with customized movement between items.
+ component HighlightBar : Rectangle {
+ z: 0
+ width: 200; height: root.delegateHeight
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#99FF99" }
+ GradientStop { position: 1.0; color: "#88FF88" }
+ }
+ y: listView.currentItem.y;
+ Behavior on y { SpringAnimation { spring: 2; damping: 0.2 } }
+ //! [1]
+ ImageParticle {
+ anchors.fill: parent
+ system: particles
+ source: "images/flower.png"
+ color: "red"
+ clip: true
+ alpha: 1.0
+ }
+ //! [1]
+ }
+
+ ListView {
+ id: listView
+ width: 200; height: parent.height
+
+ 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 {}
+ highlightFollowsCurrentItem: false
+
+ ParticleSystem { id: particles }
+ Emitter {
+ system: particles
+ anchors.fill: parent
+ emitRate: 0
+ lifeSpan: 10000
+ size: 24
+ sizeVariation: 8
+ velocity: AngleDirection { angleVariation: 360; magnitude: 3 }
+ maximumEmitted: 10
+ startTime: 5000
+ Timer { running: true; interval: 10; onTriggered: parent.emitRate = 1; }
+ }
+
+ //! [0]
+ ImageParticle {
+ anchors.fill: parent
+ system: particles
+ source: "images/flower.png"
+ alpha: 0.1
+ color: "white"
+ rotationVariation: 180
+ z: -1
+ }
+ //! [0]
+ }
+
+ ListModel {
+ id: petsModel
+ ListElement {
+ name: "Polly"
+ type: "Parrot"
+ age: 12
+ size: "Small"
+ }
+ ListElement {
+ name: "Penny"
+ type: "Turtle"
+ age: 4
+ size: "Small"
+ }
+ ListElement {
+ name: "Warren"
+ type: "Rabbit"
+ age: 2
+ size: "Small"
+ }
+ ListElement {
+ name: "Spot"
+ type: "Dog"
+ age: 9
+ size: "Medium"
+ }
+ ListElement {
+ name: "Schrödinger"
+ type: "Cat"
+ age: 2
+ size: "Medium"
+ }
+ ListElement {
+ name: "Joey"
+ type: "Kangaroo"
+ age: 1
+ size: "Medium"
+ }
+ ListElement {
+ name: "Kimba"
+ type: "Bunny"
+ age: 65
+ size: "Large"
+ }
+ ListElement {
+ name: "Rover"
+ type: "Dog"
+ age: 5
+ size: "Large"
+ }
+ ListElement {
+ name: "Tiny"
+ type: "Elephant"
+ age: 15
+ size: "Large"
+ }
+ }
+
+}
diff --git a/examples/quick/particles/imageparticle/sprites.qml b/examples/quick/particles/imageparticle/sprites.qml
new file mode 100644
index 0000000000..d4887feab6
--- /dev/null
+++ b/examples/quick/particles/imageparticle/sprites.qml
@@ -0,0 +1,79 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ color: "lightsteelblue"
+ width: 800
+ height: 800
+ id: root
+
+ SpriteSequence {
+ sprites: Sprite {
+ name: "bear"
+ source: "images/bear_tiles.png"
+ frameCount: 13
+ frameDuration: 120
+ }
+ width: 250
+ height: 250
+ x: 20
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 20
+ z:4
+ }
+
+ ParticleSystem { id: sys }
+
+ ImageParticle {
+ anchors.fill: parent
+ id: particles
+ system: sys
+ sprites: [Sprite {
+ name: "happy"
+ source: "images/starfish_1.png"
+ frameCount: 1
+ frameDuration: 260
+ to: {"happy": 1, "silly": 1, "angry": 1}
+ }, Sprite {
+ name: "angry"
+ source: "images/starfish_0.png"
+ frameCount: 1
+ frameDuration: 260
+ to: {"happy": 1, "silly": 1, "angry": 1}
+ }, Sprite {
+ name: "silly"
+ source: "images/starfish_2.png"
+ frameCount: 1
+ frameDuration: 260
+ to: {"happy": 1, "silly": 1, "noticedbear": 0}
+ }, Sprite {
+ name: "noticedbear"
+ source: "images/starfish_3.png"
+ frameCount: 1
+ frameDuration: 2600
+ }]
+ }
+
+ Emitter {
+ system: sys
+ emitRate: 2
+ lifeSpan: 10000
+ velocity: AngleDirection {angle: 90; magnitude: 60; angleVariation: 5}
+ acceleration: PointDirection { y: 10 }
+ size: 160
+ sizeVariation: 40
+ width: parent.width
+ height: 100
+ }
+
+ SpriteGoal {
+ system: sys
+ width: root.width;
+ height: root.height/2;
+ y: root.height/2;
+ goalState:"noticedbear"
+ }
+}
diff --git a/examples/quick/particles/images.qrc b/examples/quick/particles/images.qrc
deleted file mode 100644
index 1f754838a8..0000000000
--- a/examples/quick/particles/images.qrc
+++ /dev/null
@@ -1,35 +0,0 @@
-<RCC>
- <qresource prefix="/particles">
- <file>images/_explo.png</file>
- <file>images/backgroundLeaves.jpg</file>
- <file>images/bear_tiles.png</file>
- <file>images/candle.png</file>
- <file>images/colortable.png</file>
- <file>images/finalfrontier.png</file>
- <file>images/flower.png</file>
- <file>images/matchmask.png</file>
- <file>images/meteor_explo.png</file>
- <file>images/meteor.png</file>
- <file>images/meteors.png</file>
- <file>images/nullRock.png</file>
- <file>images/particle2.png</file>
- <file>images/particle3.png</file>
- <file>images/particleA.png</file>
- <file>images/portal_bg.png</file>
- <file>images/realLeaf1.png</file>
- <file>images/realLeaf2.png</file>
- <file>images/realLeaf3.png</file>
- <file>images/realLeaf4.png</file>
- <file>images/rocket.png</file>
- <file>images/rocket2.png</file>
- <file>images/sizeInOut.png</file>
- <file>images/snowflake.png</file>
- <file>images/sparkleSize.png</file>
- <file>images/starfish_0.png</file>
- <file>images/starfish_1.png</file>
- <file>images/starfish_2.png</file>
- <file>images/starfish_3.png</file>
- <file>images/starfish_4.png</file>
- <file>images/starfish_mask.png</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/particles/images/meteor_explo.png b/examples/quick/particles/images/meteor_explo.png
deleted file mode 100644
index e659bfe2cf..0000000000
--- a/examples/quick/particles/images/meteor_explo.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/particles/images/meteors.png b/examples/quick/particles/images/meteors.png
deleted file mode 100644
index bada8a1407..0000000000
--- a/examples/quick/particles/images/meteors.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/particles/images/sizeInOut.png b/examples/quick/particles/images/sizeInOut.png
deleted file mode 100644
index 43d8862dbe..0000000000
--- a/examples/quick/particles/images/sizeInOut.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/particles/itemparticle/CMakeLists.txt b/examples/quick/particles/itemparticle/CMakeLists.txt
deleted file mode 100644
index bb88ffb633..0000000000
--- a/examples/quick/particles/itemparticle/CMakeLists.txt
+++ /dev/null
@@ -1,271 +0,0 @@
-# Generated from itemparticle.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(itemparticle LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/particles/itemparticle")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(itemparticle
- main.cpp
-)
-set_target_properties(itemparticle PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(itemparticle PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-file(GLOB resource_glob_0 RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "content/*")
-foreach(file IN LISTS resource_glob_0)
- set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}")
-endforeach()
-
-file(GLOB resource_glob_1 RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "*qml")
-foreach(file IN LISTS resource_glob_1)
- set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}")
-endforeach()
-
-# Resources:
-set_source_files_properties("../images/_explo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/_explo.png"
-)
-set_source_files_properties("../images/backgroundLeaves.jpg"
- PROPERTIES QT_RESOURCE_ALIAS "images/backgroundLeaves.jpg"
-)
-set_source_files_properties("../images/bear_tiles.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/bear_tiles.png"
-)
-set_source_files_properties("../images/candle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/candle.png"
-)
-set_source_files_properties("../images/colortable.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/colortable.png"
-)
-set_source_files_properties("../images/finalfrontier.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/finalfrontier.png"
-)
-set_source_files_properties("../images/flower.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/flower.png"
-)
-set_source_files_properties("../images/matchmask.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/matchmask.png"
-)
-set_source_files_properties("../images/meteor.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteor.png"
-)
-set_source_files_properties("../images/meteor_explo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteor_explo.png"
-)
-set_source_files_properties("../images/meteors.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteors.png"
-)
-set_source_files_properties("../images/nullRock.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/nullRock.png"
-)
-set_source_files_properties("../images/particle2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particle2.png"
-)
-set_source_files_properties("../images/particle3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particle3.png"
-)
-set_source_files_properties("../images/particleA.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particleA.png"
-)
-set_source_files_properties("../images/portal_bg.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/portal_bg.png"
-)
-set_source_files_properties("../images/realLeaf1.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf1.png"
-)
-set_source_files_properties("../images/realLeaf2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf2.png"
-)
-set_source_files_properties("../images/realLeaf3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf3.png"
-)
-set_source_files_properties("../images/realLeaf4.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf4.png"
-)
-set_source_files_properties("../images/rocket.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/rocket.png"
-)
-set_source_files_properties("../images/rocket2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/rocket2.png"
-)
-set_source_files_properties("../images/sizeInOut.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/sizeInOut.png"
-)
-set_source_files_properties("../images/snowflake.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/snowflake.png"
-)
-set_source_files_properties("../images/sparkleSize.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/sparkleSize.png"
-)
-set_source_files_properties("../images/starfish_0.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_0.png"
-)
-set_source_files_properties("../images/starfish_1.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_1.png"
-)
-set_source_files_properties("../images/starfish_2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_2.png"
-)
-set_source_files_properties("../images/starfish_3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_3.png"
-)
-set_source_files_properties("../images/starfish_4.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_4.png"
-)
-set_source_files_properties("../images/starfish_mask.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_mask.png"
-)
-set(images_resource_files
- "images/_explo.png"
- "images/backgroundLeaves.jpg"
- "images/bear_tiles.png"
- "images/candle.png"
- "images/colortable.png"
- "images/finalfrontier.png"
- "images/flower.png"
- "images/matchmask.png"
- "images/meteor.png"
- "images/meteor_explo.png"
- "images/meteors.png"
- "images/nullRock.png"
- "images/particle2.png"
- "images/particle3.png"
- "images/particleA.png"
- "images/portal_bg.png"
- "images/realLeaf1.png"
- "images/realLeaf2.png"
- "images/realLeaf3.png"
- "images/realLeaf4.png"
- "images/rocket.png"
- "images/rocket2.png"
- "images/sizeInOut.png"
- "images/snowflake.png"
- "images/sparkleSize.png"
- "images/starfish_0.png"
- "images/starfish_1.png"
- "images/starfish_2.png"
- "images/starfish_3.png"
- "images/starfish_4.png"
- "images/starfish_mask.png"
-)
-
-qt6_add_resources(itemparticle "images"
- PREFIX
- "/particles"
- BASE
- ".."
- FILES
- ${images_resource_files}
-)
-set_source_files_properties("../../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
-
-qt6_add_resources(itemparticle "shared"
- PREFIX
- "/shared"
- BASE
- "../../shared"
- FILES
- ${shared_resource_files}
-)
-set(qmake_immediate_resource_files
- ${resource_glob_0}
- ${resource_glob_1}
-)
-
-qt6_add_resources(itemparticle "qmake_immediate"
- PREFIX
- "/"
- FILES
- ${qmake_immediate_resource_files}
-)
-
-install(TARGETS itemparticle
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/quick/particles/itemparticle/content/Delegate.qml b/examples/quick/particles/itemparticle/content/Delegate.qml
deleted file mode 100644
index 946b7b8748..0000000000
--- a/examples/quick/particles/itemparticle/content/Delegate.qml
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-//![0]
-Package {
- Text { id: listDelegate; width: 200; height: 25; text: 'Empty'; Package.name: 'list' }
- Text { id: gridDelegate; width: 100; height: 50; text: 'Empty'; Package.name: 'grid' }
-
- Rectangle {
- id: wrapper
- width: 200; height: 25
- color: 'lightsteelblue'
-
- Text { text: display; anchors.centerIn: parent }
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (wrapper.state == 'inList')
- wrapper.state = 'inGrid';
- else
- wrapper.state = 'inList';
- }
- }
-
- state: 'inList'
- states: [
- State {
- name: 'inList'
- ParentChange { target: wrapper; parent: listDelegate }
- },
- State {
- name: 'inGrid'
- ParentChange {
- target: wrapper; parent: gridDelegate
- x: 0; y: 0; width: gridDelegate.width; height: gridDelegate.height
- }
- }
- ]
-
- transitions: [
- Transition {
- ParentAnimation {
- NumberAnimation { properties: 'x,y,width,height'; duration: 300 }
- }
- }
- ]
- }
-}
-//![0]
diff --git a/examples/quick/particles/itemparticle/content/Delegate2.qml b/examples/quick/particles/itemparticle/content/Delegate2.qml
deleted file mode 100644
index 03465609d9..0000000000
--- a/examples/quick/particles/itemparticle/content/Delegate2.qml
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-//![0]
-Package {
- Item { id: gridDelegate; width: w; height: h; Package.name: 'grid' }
- Item { id: particleDelegate; width: w; height: h; Package.name: 'particles'
-
- Rectangle {
- id: wrapper
- width: w; height: h;
- color: col
- rotation: Math.random()*360
- Behavior on rotation {RotationAnimation {}}
-
- states: State {
- name: "gridded"
- when: root.inGrid
- PropertyChanges {
- target: wrapper
- rotation: 0
- }
- ParentChange {
- target: wrapper
- parent: gridDelegate
- x:0
- y:0
- }
- }
- transitions: [
- Transition {
- ParentAnimation {
- NumberAnimation { properties: 'x,y,width,height'; duration: 300 }
- }
- }
- ]
- }
- }
-}
-//![0]
diff --git a/examples/quick/particles/itemparticle/content/ExpandingDelegate.qml b/examples/quick/particles/itemparticle/content/ExpandingDelegate.qml
deleted file mode 100644
index 9ffbc7f350..0000000000
--- a/examples/quick/particles/itemparticle/content/ExpandingDelegate.qml
+++ /dev/null
@@ -1,215 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "../../../modelviews/listview/content"
-
-// This example illustrates expanding a list item to show a more detailed view.
-
- // Delegate for the recipes. This delegate has two modes:
- // 1. List mode (default), which just shows the picture and title of the recipe.
- // 2. Details mode, which also shows the ingredients and method.
- Component {
- id: recipeDelegate
-
- Item {
- id: recipe
-
- // Create a property to contain the visibility of the details.
- // We can bind multiple element's opacity to this one property,
- // rather than having a "PropertyChanges" line for each element we
- // want to fade.
- property real detailsOpacity : 0
-
- //this bit changed for aesthetics
- width: 70
- 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
- color: "ivory"
- border.color: "orange"
- radius: 5
- antialiasing: true
- }
- Image {
- anchors.fill:parent
- anchors.margins: -32
- source: "bubble.png"
- }
-
-
- // This mouse region covers the entire delegate.
- // When clicked it changes mode to 'Details'. If we are already
- // in Details mode, then no change will happen.
- MouseArea {
- anchors.fill: parent
- onClicked: recipe.state = 'Details';
- }
-
- // Lay out the page: picture, title and ingredients at the top, and method at the
- // bottom. Note that elements that should not be visible in the list
- // mode have their opacity set to recipe.detailsOpacity.
- Row {
- id: topLayout
- x: 10; y: 10; height: recipeImage.height; width: parent.width
- spacing: 10
-
- Image {
- id: recipeImage
- width: 50; height: 50
- source: "../../modelviews/listview/" + picture
- }
-
- Column {
- width: background.width - recipeImage.width - 20; height: recipeImage.height
- spacing: 5
-
- Text {
- text: title
- font.bold: true; font.pointSize: 16
- }
-
- Text {
- text: "Ingredients"
- font.pointSize: 12; font.bold: true
- opacity: recipe.detailsOpacity
- }
-
- Text {
- text: ingredients
- wrapMode: Text.WordWrap
- width: parent.width
- opacity: recipe.detailsOpacity
- }
- }
- }
-
- Item {
- id: details
- x: 10; width: parent.width - 20
- anchors { top: topLayout.bottom; topMargin: 10; bottom: parent.bottom; bottomMargin: 10 }
- opacity: recipe.detailsOpacity
-
- Text {
- id: methodTitle
- anchors.top: parent.top
- text: "Method"
- font.pointSize: 12; font.bold: true
- }
-
- Flickable {
- id: flick
- width: parent.width
- anchors { top: methodTitle.bottom; bottom: parent.bottom }
- contentHeight: methodText.height
- clip: true
-
- Text { id: methodText; text: method; wrapMode: Text.WordWrap; width: details.width }
- }
-
- Image {
- anchors { right: flick.right; top: flick.top }
- source: "../../modelviews/listview/" + "content/pics/moreUp.png"
- opacity: flick.atYBeginning ? 0 : 1
- }
-
- Image {
- anchors { right: flick.right; bottom: flick.bottom }
- source: "../../modelviews/listview/" + "content/pics/moreDown.png"
- opacity: flick.atYEnd ? 0 : 1
- }
- }
-
- // A button to close the detailed view, i.e. set the state back to default ('').
- TextButton {
- y: 10
- anchors { right: background.right; rightMargin: 10 }
- opacity: recipe.detailsOpacity
- text: "Close"
-
- onClicked: recipe.state = '';
- }
-
- states: State {
- name: "Details"
-
- PropertyChanges { target: background; color: "white" }
- PropertyChanges { target: recipeImage; width: 130; height: 130 } // Make picture bigger
- PropertyChanges { target: recipe; detailsOpacity: 1; x: 0; opacity: 1 } // Make details visible
- PropertyChanges { target: recipe; height: root.height; width: root.height; x:0; y:0; z:100} // Fill the entire list area with the detailed view
-
- // Move the list so that this item is at the top.
- //PropertyChanges { target: recipe.ListView.view; explicit: true; contentY: recipe.y }
-
- // Disallow flicking while we're in detailed view
- //PropertyChanges { target: recipe.ListView.view; interactive: false }
- }
-
- transitions: Transition {
- //The only strictly necessary particle specific lines
- to: "Details"
- reversible: true
- ScriptAction {script: {
- if(state == "Details")
- mp.freeze(index);
- else
- mp.unfreeze(index);
- }
- }
- // Make the state changes smooth
- ParallelAnimation {
- ColorAnimation { property: "color"; duration: 500 }
- NumberAnimation { duration: 300; properties: "detailsOpacity,opacity,x,y,height,width" }
- }
- }
- }
- }
diff --git a/examples/quick/particles/itemparticle/content/bubble.png b/examples/quick/particles/itemparticle/content/bubble.png
deleted file mode 100644
index f26ed1d3f2..0000000000
--- a/examples/quick/particles/itemparticle/content/bubble.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/particles/itemparticle/content/script.js b/examples/quick/particles/itemparticle/content/script.js
deleted file mode 100644
index e8ef93a847..0000000000
--- a/examples/quick/particles/itemparticle/content/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/itemparticle/delegates.qml b/examples/quick/particles/itemparticle/delegates.qml
deleted file mode 100644
index 0e9267214f..0000000000
--- a/examples/quick/particles/itemparticle/delegates.qml
+++ /dev/null
@@ -1,105 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-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/itemparticle.pro b/examples/quick/particles/itemparticle/itemparticle.pro
deleted file mode 100644
index f5c0576b4a..0000000000
--- a/examples/quick/particles/itemparticle/itemparticle.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-RESOURCES += \
- ../images.qrc \
- ../../shared/shared.qrc \
- $$files("content/*") \
- $$files("*qml")
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/particles/itemparticle
-INSTALLS += target
diff --git a/examples/quick/particles/itemparticle/main.cpp b/examples/quick/particles/itemparticle/main.cpp
deleted file mode 100644
index da21f15be3..0000000000
--- a/examples/quick/particles/itemparticle/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(particleview)
diff --git a/examples/quick/particles/itemparticle/particleview.qml b/examples/quick/particles/itemparticle/particleview.qml
deleted file mode 100644
index 8eb18dc283..0000000000
--- a/examples/quick/particles/itemparticle/particleview.qml
+++ /dev/null
@@ -1,309 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.12
-import QtQuick.Particles 2.12
-import "shared" as Shared
-import "content/script.js" as Script
-import "content"
-
-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: "qrc:///particles/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
- }
- }
- Shared.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 {
- target: 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/particles.pro b/examples/quick/particles/particles.pro
index 5343fa00f1..62f7f35807 100644
--- a/examples/quick/particles/particles.pro
+++ b/examples/quick/particles/particles.pro
@@ -2,12 +2,8 @@ TEMPLATE = subdirs
SUBDIRS += affectors \
emitters \
imageparticle \
- itemparticle \
system
-EXAMPLE_FILES = \
- images.qrc
-
#Install shared images too
qml.files = images
qml.path = $$[QT_INSTALL_EXAMPLES]/quick/particles
diff --git a/examples/quick/particles/system/CMakeLists.txt b/examples/quick/particles/system/CMakeLists.txt
index 737dc5f90b..0c8f8852f9 100644
--- a/examples/quick/particles/system/CMakeLists.txt
+++ b/examples/quick/particles/system/CMakeLists.txt
@@ -1,265 +1,55 @@
-# Generated from system.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(system LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+add_subdirectory("../../shared" "shared")
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/particles/system")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(system
+qt_add_executable(systemexample WIN32 MACOSX_BUNDLE
main.cpp
)
-set_target_properties(system PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(system PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(system_resource_files
- "content/dynamiccomparison.qml"
- "content/dynamicemitters.qml"
- "content/multiplepainters.qml"
- "content/startstop.qml"
- "content/timedgroupchanges.qml"
- "system.qml"
+target_link_libraries(systemexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(system "system"
- PREFIX
- "/particles/system"
- FILES
- ${system_resource_files}
-)
-set_source_files_properties("../images/_explo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/_explo.png"
-)
-set_source_files_properties("../images/backgroundLeaves.jpg"
- PROPERTIES QT_RESOURCE_ALIAS "images/backgroundLeaves.jpg"
-)
-set_source_files_properties("../images/bear_tiles.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/bear_tiles.png"
-)
-set_source_files_properties("../images/candle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/candle.png"
-)
-set_source_files_properties("../images/colortable.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/colortable.png"
-)
-set_source_files_properties("../images/finalfrontier.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/finalfrontier.png"
-)
-set_source_files_properties("../images/flower.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/flower.png"
-)
-set_source_files_properties("../images/matchmask.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/matchmask.png"
-)
-set_source_files_properties("../images/meteor.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteor.png"
-)
-set_source_files_properties("../images/meteor_explo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteor_explo.png"
-)
-set_source_files_properties("../images/meteors.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/meteors.png"
-)
-set_source_files_properties("../images/nullRock.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/nullRock.png"
-)
-set_source_files_properties("../images/particle2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particle2.png"
-)
-set_source_files_properties("../images/particle3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particle3.png"
-)
-set_source_files_properties("../images/particleA.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/particleA.png"
-)
-set_source_files_properties("../images/portal_bg.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/portal_bg.png"
-)
-set_source_files_properties("../images/realLeaf1.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf1.png"
-)
-set_source_files_properties("../images/realLeaf2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf2.png"
-)
-set_source_files_properties("../images/realLeaf3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf3.png"
-)
-set_source_files_properties("../images/realLeaf4.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/realLeaf4.png"
-)
-set_source_files_properties("../images/rocket.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/rocket.png"
-)
-set_source_files_properties("../images/rocket2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/rocket2.png"
-)
-set_source_files_properties("../images/sizeInOut.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/sizeInOut.png"
-)
-set_source_files_properties("../images/snowflake.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/snowflake.png"
-)
-set_source_files_properties("../images/sparkleSize.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/sparkleSize.png"
-)
-set_source_files_properties("../images/starfish_0.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_0.png"
-)
-set_source_files_properties("../images/starfish_1.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_1.png"
-)
-set_source_files_properties("../images/starfish_2.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_2.png"
-)
-set_source_files_properties("../images/starfish_3.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_3.png"
-)
-set_source_files_properties("../images/starfish_4.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_4.png"
-)
-set_source_files_properties("../images/starfish_mask.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/starfish_mask.png"
-)
-set(images_resource_files
- "images/_explo.png"
- "images/backgroundLeaves.jpg"
- "images/bear_tiles.png"
- "images/candle.png"
- "images/colortable.png"
- "images/finalfrontier.png"
- "images/flower.png"
- "images/matchmask.png"
- "images/meteor.png"
- "images/meteor_explo.png"
- "images/meteors.png"
- "images/nullRock.png"
- "images/particle2.png"
- "images/particle3.png"
- "images/particleA.png"
- "images/portal_bg.png"
- "images/realLeaf1.png"
- "images/realLeaf2.png"
- "images/realLeaf3.png"
- "images/realLeaf4.png"
- "images/rocket.png"
- "images/rocket2.png"
- "images/sizeInOut.png"
- "images/snowflake.png"
- "images/sparkleSize.png"
- "images/starfish_0.png"
- "images/starfish_1.png"
- "images/starfish_2.png"
- "images/starfish_3.png"
- "images/starfish_4.png"
- "images/starfish_mask.png"
-)
-
-qt6_add_resources(system "images"
- PREFIX
- "/particles"
- BASE
- ".."
- FILES
- ${images_resource_files}
-)
-set_source_files_properties("../../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
+add_dependencies(systemexample system_shared)
-qt6_add_resources(system "shared"
- PREFIX
- "/shared"
- BASE
- "../../shared"
- FILES
- ${shared_resource_files}
-)
-
-install(TARGETS system
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
+# Resources:
+qt_add_qml_module(systemexample
+ URI system
+ QML_FILES
+ "dynamiccomparison.qml"
+ "dynamicemitters.qml"
+ "multiplepainters.qml"
+ "timedgroupchanges.qml"
+ "startstop.qml"
+ "system.qml"
+ RESOURCES
+ "images/sparkleSize.png"
+ "images/particle2.png"
+ "images/particle3.png"
+)
+
+install(TARGETS systemexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+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/content/dynamiccomparison.qml b/examples/quick/particles/system/content/dynamiccomparison.qml
deleted file mode 100644
index c1d42863ee..0000000000
--- a/examples/quick/particles/system/content/dynamiccomparison.qml
+++ /dev/null
@@ -1,149 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- id: root
- color: "black"
- width: 640
- height: 480
- ParticleSystem {
- id: sys
- }
-
- ImageParticle {
- system: sys
- source: "qrc:///particleresources/glowdot.png"
- color: "white"
- colorVariation: 1.0
- alpha: 0.1
- entryEffect: ImageParticle.None
- }
-
- Emitter {
- id: emitter
- system: sys
- width: parent.width/2
- velocity: PointDirection {y: 72; yVariation: 24}
- lifeSpan: 10000
- emitRate: 1000
- enabled: false
- size: 32
- }
-
- //! [fake]
- Item {
- 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--;
- }
- }
-
- Component {
- id: fakeParticle
- Image {
- id: container
- property int lifeSpan: 10000
- 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}
- SequentialAnimation on opacity {
- running: true
- NumberAnimation { from:0; to: 1; duration: 500}
- PauseAnimation { duration: container.lifeSpan - 1000}
- NumberAnimation { from:1; to: 0; duration: 500}
- ScriptAction { script: container.destroy(); }
- }
- }
- }
- }
- //! [fake]
-
- //Hooked to a timer, but click for extra bursts that really stress performance
- Timer {
- interval: 10000
- triggeredOnStart: true
- repeat: true
- running: true
- onTriggered: {
- emitter.burst(1000);
- fakeEmitter.burst(1000);
- }
- }
- Text {
- anchors.left: parent.left
- anchors.bottom: parent.bottom
- text: "1000 particles"
- color: "white"
- MouseArea {
- anchors.fill: parent
- onClicked: emitter.burst(1000);
- }
- }
- Text {
- anchors.right: parent.right
- anchors.bottom: parent.bottom
- text: "1000 items"
- color: "white"
- MouseArea {
- anchors.fill: parent
- onClicked: fakeEmitter.burst(1000);
- }
- }
-}
diff --git a/examples/quick/particles/system/content/dynamicemitters.qml b/examples/quick/particles/system/content/dynamicemitters.qml
deleted file mode 100644
index 8eb87d2baa..0000000000
--- a/examples/quick/particles/system/content/dynamicemitters.qml
+++ /dev/null
@@ -1,150 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- id: root
- color: "black"
- width: 640
- height: 480
- ParticleSystem {
- id: sys
- }
- ImageParticle {
- system: sys
- source: "qrc:///particleresources/glowdot.png"
- color: "white"
- colorVariation: 1.0
- alpha: 0.1
- }
-
- Component {
- id: emitterComp
- Emitter {
- id: container
- Emitter {
- id: emitMore
- system: sys
- emitRate: 128
- lifeSpan: 600
- size: 16
- endSize: 8
- velocity: AngleDirection {angleVariation:360; magnitude: 60}
- }
-
- property int life: 2600
- property real targetX: 0
- property real targetY: 0
- function go() {
- xAnim.start();
- yAnim.start();
- container.enabled = true
- }
- system: sys
- emitRate: 32
- lifeSpan: 600
- size: 24
- endSize: 8
- NumberAnimation on x {
- id: xAnim;
- to: targetX
- duration: life
- running: false
- }
- NumberAnimation on y {
- id: yAnim;
- to: targetY
- duration: life
- running: false
- }
- Timer {
- interval: life
- running: true
- onTriggered: container.destroy();
- }
- }
- }
-
- function customEmit(x,y) {
- //! [0]
- for (var i=0; i<8; i++) {
- var 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();
- }
- //! [0]
- }
-
- Timer {
- interval: 10000
- triggeredOnStart: true
- running: true
- repeat: true
- onTriggered: customEmit(Math.random() * 320, Math.random() * 480)
- }
- MouseArea {
- anchors.fill: parent
- onClicked: (mouse)=> customEmit(mouse.x, mouse.y);
- }
-
- Text {
- anchors.horizontalCenter: parent.horizontalCenter
- text: "Click Somewhere"
- color: "white"
- font.pixelSize: 24
- }
-}
diff --git a/examples/quick/particles/system/content/multiplepainters.qml b/examples/quick/particles/system/content/multiplepainters.qml
deleted file mode 100644
index 1f2dcb6214..0000000000
--- a/examples/quick/particles/system/content/multiplepainters.qml
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- id: root
- width: 360
- height: 600
- color: "darkblue"
- property bool cloneMode: false
- ParticleSystem {
- id: sys
- }
- MouseArea {
- anchors.fill: parent
- onClicked: cloneMode = !cloneMode;
- }
- Text {
- anchors.horizontalCenter: parent.horizontalCenter
- text: "Click to Toggle"
- color: "white"
- font.pixelSize: 24
- }
- Emitter {
- system: sys
- y:root.height + 20
- width: root.width
- emitRate: 200
- lifeSpan: 4000
- startTime: 4000
- velocity: PointDirection { y: -120; }
- }
-
- ImageParticle {
- system: sys
- visible: !cloneMode
- source: "../../images/particle2.png"
- }
-
- ImageParticle {
- system: sys
- visible: cloneMode
- z: 0
- source: "../../images/particle3.png"
- }
-
- ImageParticle {
- system: sys
- clip: true
- visible: cloneMode
- y: 120
- height: 240
- width: root.width
- z: 1
- source: "qrc:///particleresources/glowdot.png"
- }
-}
diff --git a/examples/quick/particles/system/content/startstop.qml b/examples/quick/particles/system/content/startstop.qml
deleted file mode 100644
index a9ef7285aa..0000000000
--- a/examples/quick/particles/system/content/startstop.qml
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- width: 360
- height: 540
- color: "black"
- Text {
- text: "Left click to start/stop\nRight click to pause/unpause"
- color: "white"
- font.pixelSize: 24
- }
- MouseArea {
- anchors.fill: parent
- acceptedButtons: Qt.LeftButton | Qt.RightButton
- onClicked: (mouse) => {
- if (mouse.button == Qt.LeftButton)
- particles.running = !particles.running
- else
- particles.paused = !particles.paused;
- }
- }
-
- ParticleSystem {
- id: particles
- running: false
- }
-
- ImageParticle {
- anchors.fill: parent
- system: particles
- source: "qrc:///particleresources/star.png"
- sizeTable: "../../images/sparkleSize.png"
- alpha: 0
- colorVariation: 0.6
- }
-
- Emitter {
- anchors.fill: parent
- system: particles
- emitRate: 2000
- lifeSpan: 2000
- size: 30
- sizeVariation: 10
- }
-}
diff --git a/examples/quick/particles/system/content/timedgroupchanges.qml b/examples/quick/particles/system/content/timedgroupchanges.qml
deleted file mode 100644
index cab992f898..0000000000
--- a/examples/quick/particles/system/content/timedgroupchanges.qml
+++ /dev/null
@@ -1,137 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Rectangle {
- width: 360
- height: 600
- color: "black"
- ParticleSystem {
- anchors.fill: parent
- id: syssy
- //! [0]
- ParticleGroup {
- name: "fire"
- duration: 2000
- durationVariation: 2000
- to: {"splode":1}
- }
- //! [0]
- //! [1]
- ParticleGroup {
- name: "splode"
- duration: 400
- to: {"dead":1}
- TrailEmitter {
- group: "works"
- emitRatePerParticle: 100
- lifeSpan: 1000
- maximumEmitted: 1200
- size: 8
- velocity: AngleDirection {angle: 270; angleVariation: 45; magnitude: 20; magnitudeVariation: 20;}
- acceleration: PointDirection {y:100; yVariation: 20}
- }
- }
- //! [1]
- //! [2]
- ParticleGroup {
- name: "dead"
- duration: 1000
- Affector {
- once: true
- onAffected: (x, y)=> worksEmitter.burst(400,x,y)
- }
- }
- //! [2]
-
- Timer {
- interval: 6000
- running: true
- triggeredOnStart: true
- repeat: true
- onTriggered:startingEmitter.pulse(100);
- }
- Emitter {
- id: startingEmitter
- group: "fire"
- width: parent.width
- y: parent.height
- enabled: false
- emitRate: 80
- lifeSpan: 6000
- velocity: PointDirection {y:-100;}
- size: 32
- }
-
- Emitter {
- id: worksEmitter
- group: "works"
- enabled: false
- emitRate: 100
- lifeSpan: 1600
- maximumEmitted: 6400
- size: 8
- velocity: CumulativeDirection {
- PointDirection {y:-100}
- AngleDirection {angleVariation: 360; magnitudeVariation: 80;}
- }
- acceleration: PointDirection {y:100; yVariation: 20}
- }
-
- ImageParticle {
- groups: ["works", "fire", "splode"]
- source: "qrc:///particleresources/glowdot.png"
- entryEffect: ImageParticle.Scale
- }
- }
-}
-
diff --git a/examples/quick/particles/system/doc/src/system.qdoc b/examples/quick/particles/system/doc/src/system.qdoc
index 22382190d3..b936bd8976 100644
--- a/examples/quick/particles/system/doc/src/system.qdoc
+++ b/examples/quick/particles/system/doc/src/system.qdoc
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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
@@ -35,7 +12,7 @@
Each example is a small QML file emphasizing a particular type or feature.
Dynamic comparison compares using the particle system to getting a similar effect with the following code that dynamically instantiates Image types.
- \snippet particles/system/content/dynamiccomparison.qml fake
+ \snippet particles/system/dynamiccomparison.qml fake
Note how the Image objects are not able to be randomly colorized.
Start and Stop simply sets the running and paused states of a ParticleSystem. While the system does not perform any simulation when stopped or paused, a restart restarts the simulation from the beginning, while unpausing resumes the simulation from where it was.
@@ -43,14 +20,14 @@
Timed group changes is an example that highlights the ParticleGroup type. While normally referring to groups with a string name is sufficient, additional effects can be
done by setting properties on groups.
The first group has a variable duration on it, but always transitions to the second group.
- \snippet particles/system/content/timedgroupchanges.qml 0
+ \snippet particles/system/timedgroupchanges.qml 0
The second group has a TrailEmitter on it, and a fixed duration for emitting into the third group. By placing the TrailEmitter as a direct child of the ParticleGroup, it automatically selects that group to follow.
- \snippet particles/system/content/timedgroupchanges.qml 1
+ \snippet particles/system/timedgroupchanges.qml 1
The third group has an Affector as a direct child, which makes the affector automatically target this group. The affector means that as soon as particles enter this group, a burst function can be called on another emitter, using the x,y positions of this particle.
- \snippet particles/system/content/timedgroupchanges.qml 2
+ \snippet particles/system/timedgroupchanges.qml 2
If TrailEmitter does not suit your needs for multiple emitters, you can also dynamically create Emitters while still using the same ParticleSystem and image particle
- \snippet particles/system/content/dynamicemitters.qml 0
+ \snippet particles/system/dynamicemitters.qml 0
Note that this effect, a flurry of flying rainbow spears, would be better served with TrailEmitter. It is only done with dynamic emitters in this example to show the concept more simply.
Multiple Painters shows how to control paint ordering of individual particles. While the paint ordering of particles within one ImagePainter is not strictly defined, ImageParticle objects follow the normal Z-ordering rules for \l {Qt Quick} items. This example allow you to paint the inside of the particles above the black borders using a pair of ImageParticles each painting different parts of the same logical particle.
diff --git a/examples/quick/particles/system/dynamiccomparison.qml b/examples/quick/particles/system/dynamiccomparison.qml
new file mode 100644
index 0000000000..d29b72f998
--- /dev/null
+++ b/examples/quick/particles/system/dynamiccomparison.qml
@@ -0,0 +1,103 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+pragma ComponentBehavior: Bound
+
+Rectangle {
+ id: root
+ color: "black"
+ width: 640
+ height: 480
+ ParticleSystem {
+ id: sys
+ }
+
+ ImageParticle {
+ system: sys
+ source: "qrc:///particleresources/glowdot.png"
+ color: "white"
+ colorVariation: 1.0
+ alpha: 0.1
+ entryEffect: ImageParticle.None
+ }
+
+ Emitter {
+ id: emitter
+ system: sys
+ width: parent.width/2
+ velocity: PointDirection {y: 72; yVariation: 24}
+ lifeSpan: 10000
+ emitRate: 1000
+ enabled: false
+ size: 32
+ }
+
+ //! [fake]
+ Item {
+ id: fakeEmitter
+ function burst(number) {
+ while (number > 0) {
+ 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--
+ }
+ }
+
+ Component {
+ id: fakeParticle
+ Image {
+ id: container
+ property int lifeSpan: 10000
+ width: 32
+ height: 32
+ source: "qrc:///particleresources/glowdot.png"
+ 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 }
+ ScriptAction { script: container.destroy(); }
+ }
+ }
+ }
+ }
+ //! [fake]
+
+ //Hooked to a timer, but click for extra bursts that really stress performance
+ Timer {
+ interval: 10000
+ triggeredOnStart: true
+ repeat: true
+ running: true
+ onTriggered: {
+ emitter.burst(1000);
+ fakeEmitter.burst(1000);
+ }
+ }
+ Text {
+ anchors.left: parent.left
+ anchors.bottom: parent.bottom
+ text: qsTr("1000 particles")
+ color: "white"
+ MouseArea {
+ anchors.fill: parent
+ onClicked: emitter.burst(1000);
+ }
+ }
+ Text {
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ text: qsTr("1000 items")
+ color: "white"
+ MouseArea {
+ anchors.fill: parent
+ onClicked: fakeEmitter.burst(1000);
+ }
+ }
+}
diff --git a/examples/quick/particles/system/dynamicemitters.qml b/examples/quick/particles/system/dynamicemitters.qml
new file mode 100644
index 0000000000..31c70b2a6c
--- /dev/null
+++ b/examples/quick/particles/system/dynamicemitters.qml
@@ -0,0 +1,107 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+pragma ComponentBehavior: Bound
+
+Rectangle {
+ id: root
+ color: "black"
+ width: 640
+ height: 480
+ ParticleSystem {
+ id: sys
+ }
+ ImageParticle {
+ system: sys
+ source: "qrc:///particleresources/glowdot.png"
+ color: "white"
+ colorVariation: 1.0
+ alpha: 0.1
+ }
+
+ Component {
+ id: emitterComp
+ Emitter {
+ id: container
+ Emitter {
+ id: emitMore
+ system: sys
+ emitRate: 128
+ lifeSpan: 600
+ size: 16
+ endSize: 8
+ velocity: AngleDirection {
+ angleVariation: 360
+ magnitude: 60
+ }
+ }
+
+ property int life: 2600
+ property real targetX: 0
+ property real targetY: 0
+ function go() {
+ xAnim.start()
+ yAnim.start()
+ container.enabled = true
+ }
+ system: sys
+ emitRate: 32
+ lifeSpan: 600
+ size: 24
+ endSize: 8
+ NumberAnimation on x {
+ id: xAnim;
+ to: container.targetX
+ duration: container.life
+ running: false
+ }
+ NumberAnimation on y {
+ id: yAnim;
+ to: container.targetY
+ duration: container.life
+ running: false
+ }
+ Timer {
+ interval: container.life
+ running: true
+ onTriggered: container.destroy()
+ }
+ }
+ }
+
+ function customEmit(x, y) {
+ //! [0]
+ 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()
+ }
+ //! [0]
+ }
+
+ Timer {
+ interval: 10000
+ triggeredOnStart: true
+ running: true
+ repeat: true
+ onTriggered: root.customEmit(Math.random() * 320, Math.random() * 480)
+ }
+ TapHandler {
+ onTapped: function(event) { root.customEmit(event.pressPosition.x, event.pressPosition.y) }
+ }
+
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: qsTr("Click Somewhere")
+ color: "white"
+ font.pixelSize: 24
+ }
+}
diff --git a/examples/quick/particles/images/particle2.png b/examples/quick/particles/system/images/particle2.png
index 4f3372cd07..4f3372cd07 100644
--- a/examples/quick/particles/images/particle2.png
+++ b/examples/quick/particles/system/images/particle2.png
Binary files differ
diff --git a/examples/quick/particles/images/particle3.png b/examples/quick/particles/system/images/particle3.png
index 2b04601403..2b04601403 100644
--- a/examples/quick/particles/images/particle3.png
+++ b/examples/quick/particles/system/images/particle3.png
Binary files differ
diff --git a/examples/quick/particles/images/sparkleSize.png b/examples/quick/particles/system/images/sparkleSize.png
index 752056541b..752056541b 100644
--- a/examples/quick/particles/images/sparkleSize.png
+++ b/examples/quick/particles/system/images/sparkleSize.png
Binary files differ
diff --git a/examples/quick/particles/system/main.cpp b/examples/quick/particles/system/main.cpp
index 63a88412f5..b18019f663 100644
--- a/examples/quick/particles/system/main.cpp
+++ b/examples/quick/particles/system/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(particles/system/system)
+DECLARATIVE_EXAMPLE_MAIN(system/system)
diff --git a/examples/quick/particles/system/multiplepainters.qml b/examples/quick/particles/system/multiplepainters.qml
new file mode 100644
index 0000000000..5356f5fe8a
--- /dev/null
+++ b/examples/quick/particles/system/multiplepainters.qml
@@ -0,0 +1,58 @@
+// 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: "darkblue"
+ property bool cloneMode: false
+ ParticleSystem {
+ id: sys
+ }
+ TapHandler {
+ onTapped: root.cloneMode = !root.cloneMode
+ }
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: qsTr("Click to Toggle")
+ color: "white"
+ font.pixelSize: 24
+ }
+ Emitter {
+ system: sys
+ y:root.height + 20
+ width: root.width
+ emitRate: 200
+ lifeSpan: 4000
+ startTime: 4000
+ velocity: PointDirection { y: -120 }
+ }
+
+ ImageParticle {
+ system: sys
+ visible: !root.cloneMode
+ source: "images/particle2.png"
+ }
+
+ ImageParticle {
+ system: sys
+ visible: root.cloneMode
+ z: 0
+ source: "images/particle3.png"
+ }
+
+ ImageParticle {
+ system: sys
+ clip: true
+ visible: root.cloneMode
+ y: 120
+ height: 240
+ width: root.width
+ z: 1
+ source: "qrc:///particleresources/glowdot.png"
+ }
+}
diff --git a/examples/quick/particles/system/startstop.qml b/examples/quick/particles/system/startstop.qml
new file mode 100644
index 0000000000..e89c1f40f0
--- /dev/null
+++ b/examples/quick/particles/system/startstop.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Rectangle {
+ width: 360
+ height: 540
+ color: "black"
+ Text {
+ text: qsTr("Left click to start/stop\nRight click to pause/unpause")
+ color: "white"
+ font.pixelSize: 24
+ }
+
+ TapHandler {
+ acceptedButtons: Qt.LeftButton | Qt.RightButton
+ onTapped: function (event, mouseButton)
+ {
+ if (mouseButton === Qt.LeftButton)
+ particles.running = !particles.running
+ else
+ particles.paused = !particles.paused;
+ }
+ }
+
+ ParticleSystem {
+ id: particles
+ running: false
+ }
+
+ ImageParticle {
+ anchors.fill: parent
+ system: particles
+ source: "qrc:///particleresources/star.png"
+ sizeTable: "images/sparkleSize.png"
+ alpha: 0
+ colorVariation: 0.6
+ }
+
+ Emitter {
+ anchors.fill: parent
+ system: particles
+ emitRate: 2000
+ lifeSpan: 2000
+ size: 30
+ sizeVariation: 10
+ }
+}
diff --git a/examples/quick/particles/system/system.pro b/examples/quick/particles/system/system.pro
index df143f10a3..ea620f687a 100644
--- a/examples/quick/particles/system/system.pro
+++ b/examples/quick/particles/system/system.pro
@@ -4,7 +4,6 @@ QT += quick qml
SOURCES += main.cpp
RESOURCES += \
system.qrc \
- ../images.qrc \
../../shared/shared.qrc
target.path = $$[QT_INSTALL_EXAMPLES]/quick/particles/system
diff --git a/examples/quick/particles/system/system.qml b/examples/quick/particles/system/system.qml
index 569676d424..021438944a 100644
--- a/examples/quick/particles/system/system.qml
+++ b/examples/quick/particles/system/system.qml
@@ -1,68 +1,21 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../../shared" as Examples
+import QtQuick
+import shared
Item {
height: 480
width: 320
- Examples.LauncherList {
+ LauncherList {
id: ll
anchors.fill: parent
Component.onCompleted: {
- addExample("Dynamic Comparison", "Compares with dynamically created elements", Qt.resolvedUrl("content/dynamiccomparison.qml"));
- addExample("StartStop", "Start and stop the simulation", Qt.resolvedUrl("content/startstop.qml"));
- addExample("Timed group changes", "Emit into managed groups", Qt.resolvedUrl("content/timedgroupchanges.qml"));
- addExample("Dynamic Emitters", "Dynamically instantiated emitters with a single system", Qt.resolvedUrl("content/dynamicemitters.qml"));
- addExample("Multiple Painters", "Several ParticlePainters on the same logical particles", Qt.resolvedUrl("content/multiplepainters.qml"));
+ addExample("Dynamic Comparison", "Compares with dynamically created elements", Qt.resolvedUrl("dynamiccomparison.qml"));
+ addExample("StartStop", "Start and stop the simulation", Qt.resolvedUrl("startstop.qml"));
+ addExample("Timed group changes", "Emit into managed groups", Qt.resolvedUrl("timedgroupchanges.qml"));
+ addExample("Dynamic Emitters", "Dynamically instantiated emitters with a single system", Qt.resolvedUrl("dynamicemitters.qml"));
+ addExample("Multiple Painters", "Several ParticlePainters on the same logical particles", Qt.resolvedUrl("multiplepainters.qml"));
}
}
}
diff --git a/examples/quick/particles/system/system.qrc b/examples/quick/particles/system/system.qrc
index 3fb8221fb1..806f11e818 100644
--- a/examples/quick/particles/system/system.qrc
+++ b/examples/quick/particles/system/system.qrc
@@ -1,10 +1,13 @@
<RCC>
- <qresource prefix="/particles/system">
+ <qresource prefix="/qt/qml/system">
<file>system.qml</file>
- <file>content/dynamiccomparison.qml</file>
- <file>content/dynamicemitters.qml</file>
- <file>content/multiplepainters.qml</file>
- <file>content/startstop.qml</file>
- <file>content/timedgroupchanges.qml</file>
+ <file>dynamiccomparison.qml</file>
+ <file>dynamicemitters.qml</file>
+ <file>multiplepainters.qml</file>
+ <file>startstop.qml</file>
+ <file>timedgroupchanges.qml</file>
+ <file>images/sparkleSize.png</file>
+ <file>images/particle2.png</file>
+ <file>images/particle3.png</file>
</qresource>
</RCC>
diff --git a/examples/quick/particles/system/timedgroupchanges.qml b/examples/quick/particles/system/timedgroupchanges.qml
new file mode 100644
index 0000000000..b60269ba13
--- /dev/null
+++ b/examples/quick/particles/system/timedgroupchanges.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.Particles
+
+Rectangle {
+ width: 360
+ height: 600
+ color: "black"
+ ParticleSystem {
+ anchors.fill: parent
+ id: syssy
+ //! [0]
+ ParticleGroup {
+ name: "fire"
+ duration: 2000
+ durationVariation: 2000
+ to: {"splode":1}
+ }
+ //! [0]
+ //! [1]
+ ParticleGroup {
+ name: "splode"
+ duration: 400
+ to: {"dead":1}
+ TrailEmitter {
+ group: "works"
+ emitRatePerParticle: 100
+ lifeSpan: 1000
+ maximumEmitted: 1200
+ size: 8
+ velocity: AngleDirection {angle: 270; angleVariation: 45; magnitude: 20; magnitudeVariation: 20;}
+ acceleration: PointDirection {y:100; yVariation: 20}
+ }
+ }
+ //! [1]
+ //! [2]
+ ParticleGroup {
+ name: "dead"
+ duration: 1000
+ Affector {
+ once: true
+ onAffected: (x, y)=> worksEmitter.burst(400,x,y)
+ }
+ }
+ //! [2]
+
+ Timer {
+ interval: 6000
+ running: true
+ triggeredOnStart: true
+ repeat: true
+ onTriggered:startingEmitter.pulse(100);
+ }
+ Emitter {
+ id: startingEmitter
+ group: "fire"
+ width: parent.width
+ y: parent.height
+ enabled: false
+ emitRate: 80
+ lifeSpan: 6000
+ velocity: PointDirection {y:-100;}
+ size: 32
+ }
+
+ Emitter {
+ id: worksEmitter
+ group: "works"
+ enabled: false
+ emitRate: 100
+ lifeSpan: 1600
+ maximumEmitted: 6400
+ size: 8
+ velocity: CumulativeDirection {
+ PointDirection {y:-100}
+ AngleDirection {angleVariation: 360; magnitudeVariation: 80;}
+ }
+ acceleration: PointDirection {y:100; yVariation: 20}
+ }
+
+ ImageParticle {
+ groups: ["works", "fire", "splode"]
+ source: "qrc:///particleresources/glowdot.png"
+ entryEffect: ImageParticle.Scale
+ }
+ }
+}
+
diff --git a/examples/quick/pointerhandlers/CMakeLists.txt b/examples/quick/pointerhandlers/CMakeLists.txt
new file mode 100644
index 0000000000..a8b3cbe3d0
--- /dev/null
+++ b/examples/quick/pointerhandlers/CMakeLists.txt
@@ -0,0 +1,95 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(pointerhandlers LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick Svg)
+
+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
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+ Qt6::Svg
+)
+
+add_dependencies(pointerhandlersexample pointerhandlers_shared)
+
+qt_add_qml_module(pointerhandlersexample
+ URI pointerhandlers
+ QML_FILES
+ "components/Button.qml"
+ "components/CheckBox.qml"
+ "components/CorkPanel.qml"
+ "components/FakeFlickable.qml"
+ "components/FlashAnimation.qml"
+ "components/LeftDrawer.qml"
+ "components/MomentumAnimation.qml"
+ "components/MouseFeedbackSprite.qml"
+ "components/QuadPieMenu.qml"
+ "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"
+ "sidebar.qml"
+ "singlePointHandlerProperties.qml"
+ "tabletCanvasDrawing.qml"
+ "tapHandler.qml"
+ RESOURCES
+ "components/images/checkmark.png"
+ "components/images/cork.jpg"
+ "components/images/fingersprite.png"
+ "components/images/mixer-knob.png"
+ "components/images/mouse.png"
+ "components/images/mouse_left.png"
+ "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"
+ "images/cursor-pencil.png"
+ "images/fighter.png"
+ "images/grabbing-location.svg"
+ "images/joystick-outer-case-pov.jpg"
+ "images/map.svgz"
+ "images/missile.png"
+ "images/redball.png"
+)
+
+install(TARGETS pointerhandlersexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+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/Button.qml b/examples/quick/pointerhandlers/components/Button.qml
new file mode 100644
index 0000000000..4943f9cb94
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/Button.qml
@@ -0,0 +1,59 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Rectangle {
+ id: root
+ property alias label: label
+ property alias text: label.text
+ property alias pressed: tap.pressed
+ property alias hovered: hoverHandler.hovered
+ property alias gesturePolicy: tap.gesturePolicy
+ property alias margin: tap.margin
+ property alias exclusiveSignals: tap.exclusiveSignals
+ signal tapped
+
+ implicitHeight: Math.max(Screen.pixelDensity * 7, label.implicitHeight * 2)
+ implicitWidth: Math.max(Screen.pixelDensity * 11, label.implicitWidth * 1.3)
+ height: implicitHeight
+ width: implicitWidth
+ radius: height / 6
+
+ border { color: Qt.darker(palette.button, 1.5); width: 1 }
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: tap.pressed ? Qt.darker(palette.button, 1.3) : palette.button }
+ GradientStop { position: 1.0; color: Qt.darker(palette.button, 1.3) }
+ }
+
+ TapHandler {
+ id: tap
+ margin: 10 // the user can tap a little beyond the edges
+ objectName: label.text + " Tap"
+ onSingleTapped: {
+ tapFlash.start()
+ root.tapped()
+ }
+ }
+ HoverHandler {
+ id: hoverHandler
+ }
+
+ Text {
+ id: label
+ font.pointSize: 14
+ color: palette.buttonText
+ text: "Button"
+ anchors.centerIn: parent
+ }
+
+ Rectangle {
+ anchors.fill: parent
+ color: "transparent"
+ border.width: 2; radius: root.radius; antialiasing: true
+ opacity: tapFlash.running ? 1 : 0
+ FlashAnimation on visible {
+ id: tapFlash
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/components/CheckBox.qml b/examples/quick/pointerhandlers/components/CheckBox.qml
new file mode 100644
index 0000000000..481a411c06
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/CheckBox.qml
@@ -0,0 +1,58 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ id: root
+ implicitHeight: frame.height
+ implicitWidth: row.implicitWidth
+ width: implicitWidth
+ height: implicitHeight
+ property alias text: label.text
+ property bool checked
+
+ property alias pressed: tapHandler.pressed
+ property alias row: row
+ signal clicked
+
+ Row {
+ id: row
+ anchors.verticalCenter: parent.verticalCenter
+ spacing: 6
+ Rectangle {
+ id: frame
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: tapHandler.pressed ? Qt.darker(palette.button, 1.3) : palette.button }
+ GradientStop { position: 1.0; color: Qt.darker(palette.button, 1.3) }
+ }
+ height: label.implicitHeight * 1.5
+ width: height
+ anchors.margins: 1
+ radius: 3
+ antialiasing: true
+ border.color: Qt.darker(palette.button, 1.5)
+ Image {
+ id: theX
+ source: "images/checkmark.png"
+ anchors.fill: frame
+ anchors.margins: frame.width / 5
+ fillMode: Image.PreserveAspectFit
+ smooth: true
+ visible: root.checked
+ }
+ }
+ Text {
+ id: label
+ color: palette.text
+ anchors.verticalCenter: frame.verticalCenter
+ }
+ }
+ TapHandler {
+ id: tapHandler
+ onTapped: {
+ parent.checked = !parent.checked
+ parent.clicked()
+ }
+ }
+}
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/FakeFlickable.qml b/examples/quick/pointerhandlers/components/FakeFlickable.qml
new file mode 100644
index 0000000000..d3e8583d58
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/FakeFlickable.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 Qt.labs.animation
+
+Item {
+ id: root
+ objectName: "viewport"
+ default property alias data: __contentItem.data
+ property alias velocity: anim.velocity
+ property alias contentX: __contentItem.x // sign is reversed compared to Flickable.contentX
+ property alias contentY: __contentItem.y // sign is reversed compared to Flickable.contentY
+ property alias contentWidth: __contentItem.width
+ property alias contentHeight: __contentItem.height
+ signal flickStarted
+ signal flickEnded
+
+ Item {
+ id: __contentItem
+ objectName: "__contentItem"
+ width: childrenRect.width
+ height: childrenRect.height
+
+ BoundaryRule on x {
+ id: xbr
+ minimum: root.width - __contentItem.width
+ maximum: 0
+ minimumOvershoot: 100
+ maximumOvershoot: 100
+ overshootFilter: BoundaryRule.Peak
+ }
+
+ BoundaryRule on y {
+ id: ybr
+ minimum: root.height - __contentItem.height
+ maximum: 0
+ minimumOvershoot: 100
+ maximumOvershoot: 100
+ overshootFilter: BoundaryRule.Peak
+ }
+
+ DragHandler {
+ id: dragHandler
+ onActiveChanged:
+ if (active) {
+ anim.stop()
+ root.flickStarted()
+ } else {
+ var vel = centroid.velocity
+ if (xbr.returnToBounds())
+ vel.x = 0
+ if (ybr.returnToBounds())
+ vel.y = 0
+ if (vel.x !== 0 || vel.y !== 0)
+ anim.restart(vel)
+ else
+ root.flickEnded()
+ }
+ }
+ WheelHandler {
+ rotationScale: 15
+ property: "x"
+ orientation: Qt.Horizontal
+ acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
+ onActiveChanged:
+ // emitting signals in both instances is redundant but hard to avoid
+ // when the touchpad is flicking along both axes
+ if (active) {
+ anim.stop()
+ root.flickStarted()
+ } else {
+ xbr.returnToBounds()
+ root.flickEnded()
+ }
+ }
+ WheelHandler {
+ rotationScale: 15
+ property: "y"
+ orientation: Qt.Vertical
+ acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
+ onActiveChanged:
+ if (active) {
+ anim.stop()
+ root.flickStarted()
+ } else {
+ ybr.returnToBounds()
+ root.flickEnded()
+ }
+ }
+ MomentumAnimation {
+ id: anim
+ target: __contentItem
+ onStarted: root.flickStarted()
+ onStopped: {
+ xbr.returnToBounds()
+ ybr.returnToBounds()
+ root.flickEnded()
+ }
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/components/FlashAnimation.qml b/examples/quick/pointerhandlers/components/FlashAnimation.qml
new file mode 100644
index 0000000000..bdbcaecdfa
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/FlashAnimation.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+SequentialAnimation {
+ id: tapFlash
+ running: false
+ loops: 3
+ PropertyAction { value: false }
+ PauseAnimation { duration: 100 }
+ PropertyAction { value: true }
+ PauseAnimation { duration: 100 }
+}
diff --git a/examples/quick/pointerhandlers/components/LeftDrawer.qml b/examples/quick/pointerhandlers/components/LeftDrawer.qml
new file mode 100644
index 0000000000..8d09ce6c2e
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/LeftDrawer.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 Qt.labs.animation
+
+Item {
+ id: root
+ objectName: "LeftHandlerDrawer"
+ width: 100
+ height: 400
+ property real stickout: 4
+ property real xOpen: rect.radius * -2
+ property real xClosed: stickout - width
+ x: xClosed
+ y: 10
+
+ function close() {
+ openCloseAnimation.to = xClosed
+ openCloseAnimation.start()
+ }
+ function open() {
+ openCloseAnimation.to = xOpen
+ openCloseAnimation.start()
+ }
+
+ DragHandler {
+ id: dragHandler
+ yAxis.enabled: false
+ xAxis.minimum: -1000
+ margin: 20
+ onActiveChanged:
+ if (!active) {
+ if (xbr.returnToBounds())
+ return;
+ if (activeTranslation.x > 0)
+ open()
+ if (activeTranslation.x < 0)
+ close()
+ }
+ }
+
+ BoundaryRule on x {
+ id: xbr
+ minimum: xClosed
+ maximum: xOpen
+ minimumOvershoot: rect.radius
+ maximumOvershoot: rect.radius
+ }
+
+ NumberAnimation on x {
+ id: openCloseAnimation
+ duration: 300
+ easing { type: Easing.OutBounce; overshoot: 5 }
+ }
+
+ // TODO this was supposed to be RectangularGlow but we lost QtGraphicalEffects in Qt 6
+ Rectangle {
+ id: effect
+ anchors.fill: parent
+ border.width: dragHandler.margin
+ border.color: "cyan"
+ opacity: 0.2
+ radius: rect.radius + dragHandler.margin
+ }
+
+ Rectangle {
+ id: rect
+ anchors.fill: parent
+ anchors.margins: 3
+ color: "#333"
+ border.color: "cyan"
+ border.width: 2
+ radius: 10
+ antialiasing: true
+ }
+}
diff --git a/examples/quick/pointerhandlers/components/MomentumAnimation.qml b/examples/quick/pointerhandlers/components/MomentumAnimation.qml
new file mode 100644
index 0000000000..9577980e8e
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/MomentumAnimation.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+ParallelAnimation {
+ id: root
+ property Item target: null
+ property int duration: 500
+ property vector2d velocity: Qt.vector2d(0,0)
+
+ function restart(vel) {
+ stop()
+ velocity = vel
+ start()
+ }
+
+ NumberAnimation {
+ id: xAnim
+ target: root.target
+ property: "x"
+ to: target.x + velocity.x / duration * 100
+ duration: root.duration
+ easing.type: Easing.OutQuad
+ }
+ NumberAnimation {
+ id: yAnim
+ target: root.target
+ property: "y"
+ to: target.y + velocity.y / duration * 100
+ duration: root.duration
+ easing.type: Easing.OutQuad
+ }
+}
diff --git a/examples/quick/pointerhandlers/components/MouseFeedbackSprite.qml b/examples/quick/pointerhandlers/components/MouseFeedbackSprite.qml
new file mode 100644
index 0000000000..57c58d826f
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/MouseFeedbackSprite.qml
@@ -0,0 +1,58 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+HoverHandler {
+ id: handler
+ objectName: "mouse point"
+ acceptedDevices: PointerDevice.Mouse
+ target: Image {
+ objectName: "mouse sprite"
+ source: "images/mouse.png"
+ 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: phandler.point.pressedButtons & Qt.LeftButton
+ }
+ Image {
+ source: "images/mouse_middle.png"
+ visible: phandler.point.pressedButtons & Qt.MiddleButton
+ }
+ Image {
+ source: "images/mouse_right.png"
+ visible: phandler.point.pressedButtons & Qt.RightButton
+ }
+ PointHandler {
+ id: phandler
+ acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
+ }
+
+ WheelHandler {
+ blocking: false
+ onWheel: (event)=> {
+ wheelSprite.reverse = (event.angleDelta.y < 0)
+ wheelAnimationTimer.start()
+ }
+ }
+ AnimatedSprite {
+ id: wheelSprite
+ x: 19
+ y: 7
+ source: "images/mouse_wheel_ridges.png"
+ frameWidth: 5
+ frameHeight: 15
+ frameCount: 3
+ frameDuration: 50
+ running: wheelAnimationTimer.running
+ visible: running
+ Timer {
+ id: wheelAnimationTimer
+ interval: 500
+ }
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/components/QuadPieMenu.qml b/examples/quick/pointerhandlers/components/QuadPieMenu.qml
new file mode 100644
index 0000000000..eae268eccb
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/QuadPieMenu.qml
@@ -0,0 +1,116 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Shapes
+
+TapHandler {
+ property var labels: [ "upperLeft", "upperRight", "lowerRight", "lowerLeft" ]
+ signal triggered(string text)
+
+ id: menuTap
+ acceptedButtons: Qt.RightButton
+ gesturePolicy: TapHandler.DragWithinBounds
+ onPressedChanged: if (pressed) {
+ impl.x = point.position.x - impl.width / 2
+ impl.y = point.position.y - impl.width / 2
+ } else {
+ if (impl.highlightedShape)
+ menuTap.triggered(impl.highlightedShape.text)
+ }
+
+ property Item impl: Item {
+ parent: menuTap.parent
+ width: 100
+ height: 100
+ // 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
+
+ component PieSegment : Shape {
+ id: shape
+ property int orientation: Qt.TopRightCorner
+ property alias text: text.text
+
+ width: 100
+ height: 100
+ containsMode: Shape.FillContains
+ preferredRendererType: Shape.CurveRenderer
+
+ property bool highlighted: menuTap.pressed &&
+ shape.contains(shape.mapFromItem(menuTap.parent, menuTap.point.position))
+ onHighlightedChanged: {
+ if (highlighted)
+ impl.highlightedShape = shape
+ else if (impl.highlightedShape === shape)
+ impl.highlightedShape = null
+ }
+
+ ShapePath {
+ fillColor: highlighted ? "darkturquoise" : "aliceblue"
+ PathSvg {
+ id: svgPath
+ path: switch (orientation) {
+ case Qt.TopRightCorner:
+ return "M75,50 l 25,0 a50,50 0 0,0 -50,-50 l 0,25 a25,25 0 0,1 25,25";
+ case Qt.BottomRightCorner:
+ return "M75,50 l 25,0 a50,50 0 0,1 -50,50 l 0,-25 a25,25 0 0,0 25,-25";
+ case Qt.TopLeftCorner:
+ return "M50,25 l 0,-25 a50,50 0 0,0 -50,50 l 25,0 a25,25 0 0,1 25,-25";
+ case Qt.BottomLeftCorner:
+ return "M50,75 l 0,25 a50,50 0 0,1 -50,-50 l 25,0 a25,25 0 0,0 25,25";
+ }
+ }
+ }
+ Text {
+ id: text
+ anchors {
+ centerIn: parent
+ horizontalCenterOffset: switch (orientation) {
+ case Qt.TopRightCorner:
+ case Qt.BottomRightCorner:
+ return 25;
+ default:
+ return -25;
+ }
+ verticalCenterOffset: switch (orientation) {
+ case Qt.BottomLeftCorner:
+ case Qt.BottomRightCorner:
+ return 25;
+ default:
+ return -25;
+ }
+ }
+ horizontalAlignment: Text.AlignHCenter
+ rotation: switch (orientation) {
+ case Qt.TopRightCorner:
+ case Qt.BottomLeftCorner:
+ return 45;
+ default:
+ return -45;
+ }
+ }
+ }
+
+ PieSegment {
+ orientation: Qt.TopLeftCorner
+ text: labels[0]
+ }
+ PieSegment {
+ orientation: Qt.TopRightCorner
+ text: labels[1]
+ }
+ PieSegment {
+ orientation: Qt.BottomRightCorner
+ text: labels[2]
+ }
+ PieSegment {
+ orientation: Qt.BottomLeftCorner
+ text: labels[3]
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/components/ScrollBar.qml b/examples/quick/pointerhandlers/components/ScrollBar.qml
new file mode 100644
index 0000000000..6b13c03305
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/ScrollBar.qml
@@ -0,0 +1,114 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Rectangle {
+ id: root
+ property real contentHeight: 100
+ property FakeFlickable flick: null
+ property real position
+
+ onPositionChanged: if (flick && (drag.active || tap.active)) {
+ if (knob.state === "horizontal")
+ flick.contentX = position * knob.scrollDistance
+ else if (knob.state === "vertical")
+ flick.contentY = position * knob.scrollDistance
+ }
+
+ color: palette.button
+ border.color: Qt.darker(palette.button, 1.5)
+ gradient: Gradient {
+ GradientStop { position: 0; color: Qt.darker(palette.button, 1.3) }
+ GradientStop { position: 1; color: palette.button }
+ }
+ antialiasing: true
+ radius: Math.min(width, height) / 6
+ width: 20
+ height: 20
+
+ TapHandler {
+ id: tap
+ onTapped: {
+ if (knob.state === "horizontal")
+ knob.x = position.x - knob.width / 2
+ else if (knob.state === "vertical")
+ knob.y = position.y - knob.height / 2
+ }
+ }
+
+ Rectangle {
+ id: knob
+ border.color: "black"
+ border.width: 1
+ gradient: Gradient {
+ GradientStop { position: 0; color: palette.button }
+ GradientStop { position: 1; color: Qt.darker(palette.button, 1.3) }
+ }
+ radius: 2
+ antialiasing: true
+ state: root.height > root.width ? "vertical" : root.height < root.width ? "horizontal" : ""
+ property real scrollDistance: 0
+ property real scrolledX: 0
+ property real scrolledY: 0
+ property real max: 0
+
+ Binding on x {
+ value: knob.scrolledX
+ when: !drag.active
+ }
+
+ Binding on y {
+ value: knob.scrolledY
+ when: !drag.active
+ }
+
+ states: [
+ // We will control the horizontal. We will control the vertical.
+ State {
+ name: "horizontal"
+ PropertyChanges {
+ knob {
+ max: root.width - knob.width
+ 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
+ height: root.height - 2
+ }
+ drag {
+ xAxis.minimum: 0
+ xAxis.maximum: knob.max
+ yAxis.minimum: 1
+ yAxis.maximum: 1
+ }
+ root.position: knob.x / drag.xAxis.maximum
+ }
+ },
+ State {
+ name: "vertical"
+ PropertyChanges {
+ knob {
+ max: root.height - knob.height
+ scrolledX: 1
+ 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
+ }
+ drag {
+ xAxis.minimum: 1
+ xAxis.maximum: 1
+ yAxis.minimum: 0
+ yAxis.maximum: knob.max
+ }
+ root.position: knob.y / drag.yAxis.maximum
+ }
+ }
+ ]
+
+ DragHandler {
+ id: drag
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/components/Slider.qml b/examples/quick/pointerhandlers/components/Slider.qml
new file mode 100644
index 0000000000..b3b0d7ffc9
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/Slider.qml
@@ -0,0 +1,112 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import Qt.labs.animation
+
+Item {
+ id: root
+ property int value: 50
+ property int maximumValue: 99
+ property alias label: label.text
+ property alias tapEnabled: tap.enabled
+ property alias pressed: tap.pressed
+ signal tapped
+
+ DragHandler {
+ id: dragHandler
+ objectName: label.text + " DragHandler"
+ target: knob
+ xAxis.enabled: false
+ }
+
+ WheelHandler {
+ id: wheelHandler
+ objectName: label.text + " WheelHandler"
+ acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
+ invertible: false // Don't let the system "natural scrolling" setting affect this
+ rotationScale: -0.5 // But make it go consistently in the same direction as the fingers or wheel, a bit slow
+ target: knob
+ property: "y"
+ }
+
+ Rectangle {
+ id: slot
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ anchors.margins: 10
+ anchors.topMargin: label.height + 6
+ anchors.bottomMargin: valueLabel.height + 4
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: 10
+ color: "black"
+ radius: width / 2
+ smooth: true
+ }
+
+ Rectangle {
+ // RectangularGlow is better, but that's a different module
+ id: glow
+ anchors.fill: knob
+ anchors.margins: -5
+ anchors.leftMargin: -2
+ anchors.horizontalCenterOffset: 1
+ radius: 5
+ color: "#4400FFFF"
+ opacity: tap.pressed || tapFlash.running ? 1 : 0
+ FlashAnimation on visible {
+ id: tapFlash
+ }
+ }
+ Image {
+ id: knob
+ source: "images/mixer-knob.png"
+ antialiasing: true
+ x: slot.x - width / 2 + slot.width / 2
+ height: root.width / 2
+ width: implicitWidth / implicitHeight * height
+ property bool programmatic: false
+ property real multiplier: root.maximumValue / (ybr.maximum - ybr.minimum)
+ onYChanged: if (!programmatic) root.value = root.maximumValue - (knob.y - ybr.minimum) * multiplier
+ transformOrigin: Item.Center
+ function setValue(value) { knob.y = ybr.maximum - value / knob.multiplier }
+ TapHandler {
+ id: tap
+ objectName: label.text + " TapHandler"
+ gesturePolicy: TapHandler.DragThreshold
+ onTapped: {
+ tapFlash.start()
+ root.tapped
+ }
+ }
+ BoundaryRule on y {
+ id: ybr
+ minimum: slot.y
+ maximum: slot.height + slot.y - knob.height
+ }
+ }
+
+ Text {
+ id: valueLabel
+ font.pointSize: 16
+ color: "red"
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: root.value
+ }
+
+ Text {
+ id: label
+ font.pointSize: 12
+ color: "red"
+ anchors.top: parent.top
+ anchors.topMargin: 5
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ onHeightChanged: {
+ knob.programmatic = true
+ knob.setValue(root.value)
+ knob.programmatic = false
+ }
+}
diff --git a/examples/quick/pointerhandlers/components/TouchpointFeedbackSprite.qml b/examples/quick/pointerhandlers/components/TouchpointFeedbackSprite.qml
new file mode 100644
index 0000000000..3bbd6a0c36
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/TouchpointFeedbackSprite.qml
@@ -0,0 +1,25 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+PointHandler {
+ id: handler
+ objectName: "point " + handler.point.id.toString(16)
+ acceptedDevices: PointerDevice.TouchScreen | PointerDevice.TouchPad
+ target: AnimatedSprite {
+ objectName: "sprite " + handler.point.id.toString(16)
+ source: "images/fingersprite.png"
+ visible: handler.active
+ running: visible // QTBUG-64544: running defaults to true, but we don't see it animating if we don't toggle it like this
+ x: handler.point.position.x - 20
+ y: handler.point.position.y - 13
+ width: frameWidth
+ height: frameHeight
+ frameWidth: 43
+ frameHeight: 64
+ frameCount: 3
+ frameRate: 5
+ parent: handler.parent
+ }
+}
diff --git a/examples/quick/pointerhandlers/components/images/checkmark.png b/examples/quick/pointerhandlers/components/images/checkmark.png
new file mode 100644
index 0000000000..821aafccdd
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/images/checkmark.png
Binary files differ
diff --git a/examples/quick/touchinteraction/flickable/content/cork.jpg b/examples/quick/pointerhandlers/components/images/cork.jpg
index 160bc002bf..160bc002bf 100644
--- a/examples/quick/touchinteraction/flickable/content/cork.jpg
+++ b/examples/quick/pointerhandlers/components/images/cork.jpg
Binary files differ
diff --git a/examples/quick/pointerhandlers/components/images/fingersprite.png b/examples/quick/pointerhandlers/components/images/fingersprite.png
new file mode 100644
index 0000000000..423d115fdf
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/images/fingersprite.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/components/images/mixer-knob.png b/examples/quick/pointerhandlers/components/images/mixer-knob.png
new file mode 100644
index 0000000000..b7d42ee3bd
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/images/mixer-knob.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/components/images/mouse.png b/examples/quick/pointerhandlers/components/images/mouse.png
new file mode 100644
index 0000000000..268946df0a
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/images/mouse.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/components/images/mouse_left.png b/examples/quick/pointerhandlers/components/images/mouse_left.png
new file mode 100644
index 0000000000..9292301b47
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/images/mouse_left.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/components/images/mouse_middle.png b/examples/quick/pointerhandlers/components/images/mouse_middle.png
new file mode 100644
index 0000000000..064e8b9c16
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/images/mouse_middle.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/components/images/mouse_right.png b/examples/quick/pointerhandlers/components/images/mouse_right.png
new file mode 100644
index 0000000000..cab1a36ba6
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/images/mouse_right.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/components/images/mouse_wheel_ridges.png b/examples/quick/pointerhandlers/components/images/mouse_wheel_ridges.png
new file mode 100644
index 0000000000..755cfdc4de
--- /dev/null
+++ b/examples/quick/pointerhandlers/components/images/mouse_wheel_ridges.png
Binary files differ
diff --git a/examples/quick/touchinteraction/flickable/content/note-yellow.png b/examples/quick/pointerhandlers/components/images/note-yellow.png
index 3195952ad2..3195952ad2 100644
--- a/examples/quick/touchinteraction/flickable/content/note-yellow.png
+++ b/examples/quick/pointerhandlers/components/images/note-yellow.png
Binary files differ
diff --git a/examples/quick/touchinteraction/flickable/content/tack.png b/examples/quick/pointerhandlers/components/images/tack.png
index cef2d1cd23..cef2d1cd23 100644
--- a/examples/quick/touchinteraction/flickable/content/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/pointerhandlers/fakeFlickable.qml b/examples/quick/pointerhandlers/fakeFlickable.qml
new file mode 100644
index 0000000000..ac8e8f699e
--- /dev/null
+++ b/examples/quick/pointerhandlers/fakeFlickable.qml
@@ -0,0 +1,103 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import "components"
+
+Rectangle {
+ id: root
+ color: "#444"
+ width: 480
+ height: 640
+
+ FakeFlickable {
+ id: ff
+ anchors.fill: parent
+ anchors.leftMargin: 20
+ anchors.rightMargin: rightSB.width
+
+ Text {
+ id: text
+ color: "beige"
+ font.family: "mono"
+ font.pointSize: slider.value
+ onTextChanged: console.log("text geom " + width + "x" + height +
+ ", parent " + parent + " geom " + parent.width + "x" + parent.height)
+ }
+
+ onFlickStarted: {
+ root.border.color = "green"
+ console.log("flick started with velocity " + velocity)
+ }
+ onFlickEnded: {
+ root.border.color = "transparent"
+ console.log("flick ended with velocity " + velocity)
+ }
+
+ Component.onCompleted: {
+ var request = new XMLHttpRequest()
+ request.open('GET', 'components/FakeFlickable.qml')
+ request.onreadystatechange = function(event) {
+ if (request.readyState === XMLHttpRequest.DONE)
+ text.text = request.responseText
+ }
+ request.send()
+ }
+ }
+
+ ScrollBar {
+ id: rightSB
+ objectName: "rightSB"
+ flick: ff
+ height: parent.height - width
+ anchors.right: parent.right
+ }
+
+ ScrollBar {
+ id: bottomSB
+ objectName: "bottomSB"
+ flick: ff
+ width: parent.width - height
+ anchors.bottom: parent.bottom
+ }
+
+ Rectangle {
+ id: cornerCover
+ color: "lightgray"
+ width: rightSB.width
+ height: bottomSB.height
+ anchors {
+ right: parent.right
+ bottom: parent.bottom
+ }
+ }
+
+ LeftDrawer {
+ width: buttonRow.implicitWidth + 20
+ anchors.verticalCenter: parent.verticalCenter
+ Column {
+ anchors.fill: parent
+ anchors.margins: 10
+ Slider {
+ id: slider
+ width: parent.width
+ height: parent.height - buttonRow.implicitHeight
+ label: "font\nsize"
+ maximumValue: 36
+ value: 14
+ }
+ Row {
+ id: buttonRow
+ spacing: 4
+ Button {
+ text: "⭯"
+ onTapped: ff.rotation -= 45
+ }
+ Button {
+ text: "⭮"
+ onTapped: ff.rotation += 45
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/flingAnimation.qml b/examples/quick/pointerhandlers/flingAnimation.qml
new file mode 100644
index 0000000000..f4a72e5b5b
--- /dev/null
+++ b/examples/quick/pointerhandlers/flingAnimation.qml
@@ -0,0 +1,101 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import "components"
+
+Rectangle {
+ id: root
+ width: 640
+ height: 480
+ color: "black"
+
+ Repeater {
+ model: 2
+
+ Image {
+ id: ball
+ objectName: "ball" + index
+ source: "images/redball.png"
+ property real homeX: 200 + index * 200
+ property real homeY: 200
+ width: 80; height: 80; x: homeX; y: 200
+
+ Text {
+ anchors.centerIn: parent
+ color: "white"
+ text: momentum.velocity.x.toFixed(2) + "," + momentum.velocity.y.toFixed(2)
+ }
+
+ SequentialAnimation {
+ id: anim
+
+ function restart(vel) {
+ stop()
+ momentum.velocity = vel
+ start()
+ }
+
+ MomentumAnimation { id: momentum; target: ball }
+
+ PauseAnimation { duration: 500 }
+
+ ParallelAnimation {
+ id: ballReturn
+ NumberAnimation {
+ target: ball
+ property: "x"
+ to: homeX
+ duration: 1000
+ easing.period: 50
+ easing.type: Easing.OutElastic
+ }
+ NumberAnimation {
+ target: ball
+ property: "y"
+ to: homeY
+ duration: 1000
+ easing.type: Easing.OutElastic
+ }
+ }
+ }
+
+ DragHandler {
+ id: dragHandler
+ objectName: "dragHandler" + index
+ onActiveChanged: {
+ if (!active)
+ anim.restart(centroid.velocity)
+ }
+ }
+ Rectangle {
+ visible: dragHandler.active
+ anchors.fill: parent
+ anchors.margins: -5
+ radius: width / 2
+ opacity: 0.25
+ }
+
+ Rectangle {
+ visible: width > 0
+ width: dragHandler.centroid.velocity.length() / 10
+ height: 2
+ x: ball.width / 2
+ y: ball.height / 2
+ z: -1
+ rotation: Math.atan2(dragHandler.centroid.velocity.y, dragHandler.centroid.velocity.x) * 180 / Math.PI
+ transformOrigin: Item.BottomLeft
+ antialiasing: true
+
+ Image {
+ source: "images/arrowhead.png"
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ width: 16
+ height: 12
+ antialiasing: true
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/images/arrowhead.png b/examples/quick/pointerhandlers/images/arrowhead.png
new file mode 100644
index 0000000000..7719bc6d6a
--- /dev/null
+++ b/examples/quick/pointerhandlers/images/arrowhead.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/images/balloon.png b/examples/quick/pointerhandlers/images/balloon.png
new file mode 100644
index 0000000000..6476facc49
--- /dev/null
+++ b/examples/quick/pointerhandlers/images/balloon.png
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/content/blur-circle.png b/examples/quick/pointerhandlers/images/blur-circle.png
index 1b03cd0b2c..1b03cd0b2c 100644
--- a/examples/quick/touchinteraction/multipointtouch/content/blur-circle.png
+++ b/examples/quick/pointerhandlers/images/blur-circle.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/images/cursor-airbrush.png b/examples/quick/pointerhandlers/images/cursor-airbrush.png
new file mode 100644
index 0000000000..bea756ed6f
--- /dev/null
+++ b/examples/quick/pointerhandlers/images/cursor-airbrush.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/images/cursor-eraser.png b/examples/quick/pointerhandlers/images/cursor-eraser.png
new file mode 100644
index 0000000000..e5488a89f2
--- /dev/null
+++ b/examples/quick/pointerhandlers/images/cursor-eraser.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/images/cursor-felt-marker.png b/examples/quick/pointerhandlers/images/cursor-felt-marker.png
new file mode 100644
index 0000000000..132f09aa39
--- /dev/null
+++ b/examples/quick/pointerhandlers/images/cursor-felt-marker.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/images/cursor-pencil.png b/examples/quick/pointerhandlers/images/cursor-pencil.png
new file mode 100644
index 0000000000..cc2f447d02
--- /dev/null
+++ b/examples/quick/pointerhandlers/images/cursor-pencil.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/images/fighter.png b/examples/quick/pointerhandlers/images/fighter.png
new file mode 100644
index 0000000000..2acee43cba
--- /dev/null
+++ b/examples/quick/pointerhandlers/images/fighter.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/images/grabbing-location.svg b/examples/quick/pointerhandlers/images/grabbing-location.svg
new file mode 100644
index 0000000000..c26881e9ba
--- /dev/null
+++ b/examples/quick/pointerhandlers/images/grabbing-location.svg
@@ -0,0 +1 @@
+<svg width="3408" height="3124"><path d="M1517 1562c0-126-93-229-208-229s-208 102-208 229c0 126 93 229 208 229s208-102 208-229zm123-172c-58-206-221-365-424-412l-270 531H380l203-223 219-241 346-380c42 14 82 32 121 54 232 128 402 375 449 671h-77zm-551-933c448 123 782 546 802 1055h1517C3386 673 2787 0 2050 0H696L0 1367h120l826-938 146 25c-1 1-2 2-3 4zm551 1277c-58 206-221 365-424 412l-270-531H380l203 223 219 241 346 380c42-14 82-32 121-54 232-128 402-375 449-671h-77zm-548 936l-146 25-826-938H0l696 1367h1354c737 0 1337-673 1358-1512H1891c-19 509-354 933-802 1055 1 1 2 2 3 4z" fill="#ee832b"/></svg>
diff --git a/examples/quick/pointerhandlers/images/joystick-outer-case-pov.jpg b/examples/quick/pointerhandlers/images/joystick-outer-case-pov.jpg
new file mode 100644
index 0000000000..01cd78fdcf
--- /dev/null
+++ b/examples/quick/pointerhandlers/images/joystick-outer-case-pov.jpg
Binary files differ
diff --git a/examples/quick/pointerhandlers/images/map.svgz b/examples/quick/pointerhandlers/images/map.svgz
new file mode 100644
index 0000000000..64d509c106
--- /dev/null
+++ b/examples/quick/pointerhandlers/images/map.svgz
Binary files differ
diff --git a/examples/quick/pointerhandlers/images/missile.png b/examples/quick/pointerhandlers/images/missile.png
new file mode 100644
index 0000000000..72c02d1fb9
--- /dev/null
+++ b/examples/quick/pointerhandlers/images/missile.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/images/redball.png b/examples/quick/pointerhandlers/images/redball.png
new file mode 100644
index 0000000000..68d2e1d638
--- /dev/null
+++ b/examples/quick/pointerhandlers/images/redball.png
Binary files differ
diff --git a/examples/quick/pointerhandlers/joystick.qml b/examples/quick/pointerhandlers/joystick.qml
new file mode 100644
index 0000000000..ca939f3cdc
--- /dev/null
+++ b/examples/quick/pointerhandlers/joystick.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ width: image.implicitWidth; height: image.implicitHeight
+ Image {
+ id: image
+ anchors.centerIn: parent
+ source: "images/joystick-outer-case-pov.jpg"
+ property real margin: 50
+
+ Image {
+ id: knob
+ source: "images/redball.png"
+ DragHandler {
+ id: dragHandler
+ xAxis {
+ minimum: image.margin
+ maximum: image.width - image.margin - knob.width
+ }
+ yAxis {
+ minimum: image.margin
+ maximum: image.height - image.margin - knob.height
+ }
+ }
+
+ anchors {
+ horizontalCenter: parent.horizontalCenter
+ verticalCenter: parent.verticalCenter
+ }
+ states: [
+ State {
+ when: dragHandler.active
+ AnchorChanges {
+ target: knob
+ anchors.horizontalCenter: undefined
+ anchors.verticalCenter: undefined
+ }
+ }
+ ]
+ transitions: [
+ Transition {
+ AnchorAnimation { easing.type: Easing.OutElastic }
+ }
+ ]
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/main.cpp b/examples/quick/pointerhandlers/main.cpp
new file mode 100644
index 0000000000..eda5480eba
--- /dev/null
+++ b/examples/quick/pointerhandlers/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(pointerhandlers/pointerhandlers)
diff --git a/examples/quick/pointerhandlers/map.qml b/examples/quick/pointerhandlers/map.qml
new file mode 100644
index 0000000000..082d9d26c3
--- /dev/null
+++ b/examples/quick/pointerhandlers/map.qml
@@ -0,0 +1,86 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ width: 640
+ height: 480
+
+ Rectangle {
+ id: map
+ color: "aqua"
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: image.width
+ height: image.height
+ transform: Rotation {
+ id: tilt
+ origin.x: width / 2
+ origin.y: height / 2
+ axis { x: 1; y: 0; z: 0 }
+ angle: tiltHandler.persistentTranslation.y / -2
+ }
+
+ WheelHandler {
+ id: wheelHandler
+ objectName: "vertical mouse wheel for scaling"
+ property: "scale"
+ onWheel: function(event) {
+ console.log("rotation " + event.angleDelta + " scaled " + rotation + " @ " + point.position + " => " + map.scale)
+ }
+ }
+
+ WheelHandler {
+ id: horizontalWheelHandler
+ objectName: "horizontal mouse wheel for side-scrolling"
+ property: "x"
+ orientation: Qt.Horizontal
+ }
+
+ Image {
+ id: image
+ anchors.centerIn: parent
+ fillMode: Image.PreserveAspectFit
+ source: "images/map.svgz"
+ Component.onCompleted: { width = implicitWidth; height = implicitHeight }
+ }
+
+ Text {
+ anchors.centerIn: parent
+ text: image.sourceSize.width + " x " + image.sourceSize.height +
+ " scale " + map.scale.toFixed(2) + " active scale " + pinch.activeScale.toFixed(2)
+ }
+ }
+
+ DragHandler {
+ objectName: "single-point drag"
+ target: map
+ }
+
+ DragHandler {
+ id: tiltHandler
+ objectName: "two-point tilt"
+ minimumPointCount: 2
+ maximumPointCount: 2
+ xAxis.enabled: false
+ target: null
+ }
+
+ PinchHandler {
+ id: pinch
+ objectName: "two-point pinch"
+ target: map
+ minimumScale: 0.1
+ maximumScale: 10
+ onActiveChanged: if (!active) reRenderIfNecessary()
+ grabPermissions: PinchHandler.TakeOverForbidden // don't allow takeover if pinch has started
+ }
+
+ function reRenderIfNecessary() {
+ var newSourceWidth = image.sourceSize.width * pinch.scale
+ var ratio = newSourceWidth / image.sourceSize.width
+ if (ratio > 1.1 || ratio < 0.9)
+ image.sourceSize.width = newSourceWidth
+ }
+}
diff --git a/examples/quick/pointerhandlers/mixer.qml b/examples/quick/pointerhandlers/mixer.qml
new file mode 100644
index 0000000000..f88a1d50b9
--- /dev/null
+++ b/examples/quick/pointerhandlers/mixer.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import "components"
+
+Rectangle {
+ id: root
+ width: 1280
+ height: 960
+ objectName: "root"
+ color: "#222222"
+
+ ListView {
+ id: list
+ objectName: "listView"
+ anchors.fill: parent
+ anchors.margins: 10
+ orientation: Qt.Horizontal
+
+ model: 20
+
+ delegate: Item {
+ objectName: "delegateItem" + index
+ width: 154
+ height: list.height
+
+ Slider {
+ anchors.fill: parent
+ label: "Channel " + (index + 1)
+ }
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/multibuttons.qml b/examples/quick/pointerhandlers/multibuttons.qml
new file mode 100644
index 0000000000..29657f10ea
--- /dev/null
+++ b/examples/quick/pointerhandlers/multibuttons.qml
@@ -0,0 +1,72 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+import QtQuick.Layouts
+import "components"
+
+Item {
+ width: 800
+ height: 800
+ ColumnLayout {
+ anchors.right: parent.right
+ anchors.margins: 20
+ spacing: 20
+ Text { text: "protagonist"; font.pointSize: 12; font.weight: Font.Bold; bottomPadding: -10 }
+ Button {
+ id: balloonsButton
+ text: "Launch Balloons"
+ Layout.fillWidth: true
+ gesturePolicy: TapHandler.WithinBounds
+ Text {
+ anchors { top: parent.bottom; horizontalCenter: parent.horizontalCenter }
+ text: "gesturePolicy: WithinBounds"
+ }
+ }
+ Text { text: "the goons"; font.pointSize: 12; font.weight: Font.Bold; bottomPadding: -10 }
+ Button {
+ id: missilesButton
+ text: "Launch Missile"
+ Layout.fillWidth: true
+ gesturePolicy: TapHandler.ReleaseWithinBounds
+ exclusiveSignals: TapHandler.SingleTap
+ onTapped: missileEmitter.burst(1)
+ Text {
+ anchors { top: parent.bottom; horizontalCenter: parent.horizontalCenter }
+ text: "gesturePolicy: ReleaseWithinBounds"
+ }
+ }
+ Button {
+ id: fightersButton
+ text: "Launch Fighters"
+ Layout.fillWidth: true
+ gesturePolicy: TapHandler.DragThreshold
+ Text {
+ anchors { top: parent.bottom; horizontalCenter: parent.horizontalCenter }
+ text: "gesturePolicy: DragThreshold"
+ }
+ }
+ }
+ ParticleSystem {
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ anchors.leftMargin: 150
+ ImageParticle { source: "images/balloon.png" }
+ Emitter { anchors.bottom: parent.bottom; enabled: balloonsButton.pressed; lifeSpan: 5000; size: 64
+ maximumEmitted: 99
+ emitRate: 50; velocity: PointDirection { x: 10; y: -150; yVariation: 30; xVariation: 50 } } }
+ ParticleSystem {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ ImageParticle { source: "images/fighter.png" }
+ Emitter { anchors.bottom: parent.bottom; enabled: fightersButton.pressed; lifeSpan: 15000; size: 204
+ emitRate: 3; velocity: PointDirection { x: -1000; y: -250; yVariation: 150; xVariation: 50 } } }
+ ParticleSystem {
+ anchors.bottom: parent.bottom
+ anchors.right: parent.right
+ anchors.rightMargin: 100
+ ImageParticle { source: "images/missile.png"; autoRotation: true; rotation: 90 }
+ Emitter { id: missileEmitter; anchors.bottom: parent.bottom; lifeSpan: 5000; size: 128;
+ emitRate: 0; velocity: PointDirection { x: -200; y: -350; yVariation: 200; xVariation: 100 } } }
+}
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/pieMenu.qml b/examples/quick/pointerhandlers/pieMenu.qml
new file mode 100644
index 0000000000..d0feb2e825
--- /dev/null
+++ b/examples/quick/pointerhandlers/pieMenu.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import "components"
+
+Item {
+ width: 800
+ height: 480
+
+ Rectangle {
+ id: rect
+ anchors.fill: parent; anchors.margins: 40
+ color: pieMenu.active ? "lightgrey" : "darkgrey"
+
+ QuadPieMenu {
+ id: pieMenu
+ labels: [ "whiz", "bang", "fizz", "buzz" ]
+ onTriggered: (text)=> feedback.text = "selected **" + text + "**"
+ onCanceled: feedback.text = "canceled"
+ }
+
+ Text {
+ id: feedback
+ x: 6; y: 6
+ textFormat: Text.MarkdownText
+ text: "hold for context menu"
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/pinchHandler.qml b/examples/quick/pointerhandlers/pinchHandler.qml
new file mode 100644
index 0000000000..016bb0c00c
--- /dev/null
+++ b/examples/quick/pointerhandlers/pinchHandler.qml
@@ -0,0 +1,194 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import "components"
+
+Rectangle {
+ width: 1024; height: 600
+ color: "#eee"
+
+ function getTransformationDetails(item, pinchhandler) {
+ return "\n\npinch.scale:" + pinchhandler.scale.toFixed(2)
+ + "\npinch.rotation:" + pinchhandler.rotation.toFixed(2)
+ + "\npinch.translation:" + "(" + pinchhandler.translation.x.toFixed(2) + "," + pinchhandler.translation.y.toFixed(2) + ")"
+ + "\nrect.scale: " + item.scale.toFixed(2)
+ + "\nrect.rotation: " + item.rotation.toFixed(2)
+ + "\nrect.position: " + "(" + item.x.toFixed(2) + "," + item.y.toFixed(2) + ")"
+ }
+
+ function activePincher() {
+ if (grandparentPinch.active)
+ return grandparentPinch
+ else if (parentPinch.active)
+ return parentPinch
+ else if (pinch2.active)
+ return pinch2
+ return pinch3 // always return a pinch handler, even when its inactive. The indicator will be invisble anyway.
+ }
+
+ Rectangle {
+ width: parent.width - 100; height: parent.height - 100; x: 50; y: 50
+ color: "beige"
+ border.width: grandparentPinch.active ? 2 : 0
+ border.color: border.width > 0 ? "red" : "transparent"
+ antialiasing: true
+
+ PinchHandler {
+ id: grandparentPinch
+ objectName: "grandparent pinch"
+ minimumScale: 0.5
+ maximumScale: 3
+ minimumPointCount: 3
+ maximumPointCount: 6 // mutants are allowed; using both hands is not normal for a pinch gesture, but we can't tell
+ }
+
+ Text {
+ text: "Pinch with 3 or more fingers to scale, rotate and translate"
+ + getTransformationDetails(parent, grandparentPinch)
+ }
+
+ Rectangle {
+ width: parent.width - 100; height: parent.height - 100; x: 50; y: 50
+ color: "#ffe0e0e0"
+ antialiasing: true
+
+ PinchHandler {
+ id: parentPinch
+ objectName: "parent pinch"
+ minimumScale: 0.5
+ maximumScale: 3
+ }
+
+ Text {
+ text: "Pinch with 2 fingers to scale, rotate and translate"
+ + getTransformationDetails(parent, parentPinch)
+ }
+
+ Rectangle {
+ id: rect2
+ width: 400
+ height: 300
+ color: "lightsteelblue"
+ antialiasing: true
+ x: 100
+ y: 200
+ rotation: 30
+ transformOrigin: Item.TopRight
+ border.width: (lsbDragHandler.active || pinch2.active) ? 2 : 0
+ border.color: border.width > 0 ? "red" : "transparent"
+
+ Text {
+ anchors.centerIn: parent
+ text: "Pinch with 2 fingers to scale, rotate and translate\nDrag with 1 finger"
+ + getTransformationDetails(rect2, pinch2) + "\nz " + rect2.z
+ }
+ DragHandler {
+ id: lsbDragHandler
+ objectName: "lightsteelblue drag"
+ }
+ PinchHandler {
+ id: pinch2
+ objectName: "lightsteelblue pinch"
+ minimumRotation: -45
+ maximumRotation: 45
+ minimumScale: 0.5
+ maximumScale: 3
+ xAxis.minimum: 0
+ xAxis.maximum: 600
+ // acceptedModifiers: Qt.ControlModifier
+ }
+ TapHandler { gesturePolicy: TapHandler.DragThreshold; onTapped: rect2.z = rect3.z + 1 }
+ }
+
+ Rectangle {
+ id: rect3
+ x: 500
+ width: 400
+ height: 300
+ color: "wheat"
+ antialiasing: true
+ border.width: (wheatDragHandler.active || pinch3.active) ? 2 : 0
+ border.color: border.width > 0 ? "red" : "transparent"
+
+ Text {
+ anchors.centerIn: parent
+ text: "Pinch with 3 fingers to scale, rotate and translate\nDrag with 1 finger"
+ + getTransformationDetails(rect3, pinch3) + "\nz " + rect3.z
+ }
+ DragHandler {
+ id: wheatDragHandler
+ objectName: "wheat drag"
+ }
+ PinchHandler {
+ id: pinch3
+ objectName: "wheat 3-finger pinch"
+ minimumPointCount: 3
+ minimumScale: 0.1
+ maximumScale: 10
+ onActiveChanged: {
+ if (!active)
+ anim.restart(centroid.velocity)
+ }
+ onGrabChanged: function (transition, point) {
+ if (transition === 0x10) { // GrabExclusive
+ console.log(point.id, "grabbed @", point.position)
+ Qt.createQmlObject("import QtQuick; Rectangle { opacity: 0.5; border.color: 'red'; radius: 8; width: radius * 2; height: radius * 2; " +
+ "x: " + (point.position.x - 8) + "; y: " + (point.position.y - 8) + "}",
+ rect3, "touchpoint" + point.id);
+ }
+ }
+ }
+ TapHandler { gesturePolicy: TapHandler.DragThreshold; onTapped: rect3.z = rect2.z + 1 }
+ MomentumAnimation { id: anim; target: rect3 }
+ }
+
+ Rectangle {
+ id: rect4
+ x: 400
+ y: 250
+ width: 300
+ height: 220
+ color: "#609cbc3d"
+ radius: 10
+ antialiasing: true
+ border {
+ width: 5
+ color: "maroon"
+ }
+ PinchHandler {
+ id: pinch4
+ target: null
+ xAxis.onActiveValueChanged: (delta) => rect4.width = Math.min(500, Math.max(120, 15 * Math.round((rect4.width + delta) / 15)))
+ yAxis.onActiveValueChanged: (delta) => rect4.opacity = Math.max(0.1, Math.min(0.9, rect4.opacity - delta / 200))
+ rotationAxis.onActiveValueChanged: (delta) => rect4.radius = Math.max(0, Math.min(60, rect4.radius + delta))
+ scaleAxis.onActiveValueChanged: (delta) => rect4.border.width *= delta
+ }
+ Text {
+ anchors.fill: parent
+ anchors.margins: rect4.radius / Math.PI + rect4.border.width
+ text: "Pinch with 2 fingers to tweak various properties"
+ wrapMode: Text.WordWrap
+ }
+ Text {
+ anchors.top: rect4.bottom
+ anchors.left: rect4.left
+ text: "opacity " + rect4.opacity.toFixed(3) + " width " + rect4.width +
+ " border " + rect4.border.width.toFixed(1) + " radius " + rect4.radius.toFixed(1)
+ }
+ }
+ }
+ }
+ Rectangle {
+ id: centroidIndicator
+ property QtObject pincher: activePincher()
+ x: pincher.centroid.scenePosition.x - radius
+ y: pincher.centroid.scenePosition.y - radius
+ z: 1
+ visible: pincher.active
+ radius: width / 2
+ width: 10
+ height: width
+ color: "red"
+ }
+}
diff --git a/examples/quick/pointerhandlers/pointerhandlers.pro b/examples/quick/pointerhandlers/pointerhandlers.pro
new file mode 100644
index 0000000000..ae557f778a
--- /dev/null
+++ b/examples/quick/pointerhandlers/pointerhandlers.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+
+QT += quick qml
+SOURCES += main.cpp
+RESOURCES += \
+ qml.qrc \
+ ../shared/shared.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/pointerhandlers
+INSTALLS += target
diff --git a/examples/quick/pointerhandlers/pointerhandlers.qml b/examples/quick/pointerhandlers/pointerhandlers.qml
new file mode 100644
index 0000000000..049182fa8a
--- /dev/null
+++ b/examples/quick/pointerhandlers/pointerhandlers.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Layouts
+import shared as Examples
+import "components"
+
+Rectangle {
+ id: window
+ width: 800
+ height: 800
+ visible: true
+ Examples.LauncherList {
+ id: ll
+ objectName: "LauncherList"
+ anchors.fill: parent
+ Component.onCompleted: {
+ addExample("tap", "TapHandler: device-agnostic tap/click detection for buttons", Qt.resolvedUrl("tapHandler.qml"))
+ 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"))
+ }
+ }
+ Item {
+ id: glassPane
+ objectName: "glassPane"
+ z: 10000
+ anchors.fill: parent
+
+ Instantiator {
+ model: 10
+ delegate: TouchpointFeedbackSprite { parent: glassPane }
+ }
+ }
+
+ MouseFeedbackSprite { }
+}
diff --git a/examples/quick/pointerhandlers/qml.qrc b/examples/quick/pointerhandlers/qml.qrc
new file mode 100644
index 0000000000..237eb8eae0
--- /dev/null
+++ b/examples/quick/pointerhandlers/qml.qrc
@@ -0,0 +1,55 @@
+<RCC>
+ <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>
+ <file>singlePointHandlerProperties.qml</file>
+ <file>sidebar.qml</file>
+ <file>tabletCanvasDrawing.qml</file>
+ <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>
+ <file>components/MomentumAnimation.qml</file>
+ <file>components/MouseFeedbackSprite.qml</file>
+ <file>components/QuadPieMenu.qml</file>
+ <file>components/ScrollBar.qml</file>
+ <file>components/Slider.qml</file>
+ <file>components/TouchpointFeedbackSprite.qml</file>
+ <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>
+ <file>images/cursor-pencil.png</file>
+ <file>images/fighter.png</file>
+ <file>components/images/fingersprite.png</file>
+ <file>images/grabbing-location.svg</file>
+ <file>images/joystick-outer-case-pov.jpg</file>
+ <file>images/map.svgz</file>
+ <file>images/missile.png</file>
+ <file>components/images/mixer-knob.png</file>
+ <file>components/images/mouse.png</file>
+ <file>components/images/mouse_left.png</file>
+ <file>components/images/mouse_middle.png</file>
+ <file>components/images/mouse_right.png</file>
+ <file>components/images/mouse_wheel_ridges.png</file>
+ <file>images/redball.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/quick/pointerhandlers/sidebar.qml b/examples/quick/pointerhandlers/sidebar.qml
new file mode 100644
index 0000000000..55857cf733
--- /dev/null
+++ b/examples/quick/pointerhandlers/sidebar.qml
@@ -0,0 +1,184 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import "components"
+
+Rectangle {
+ id: root
+ width: 640
+ height: 480
+ color: rootHover.hovered ? "#555" : "#444"
+
+ component ButtonsAndStuff: Column {
+ anchors.fill: parent
+ anchors.margins: 8
+ spacing: 8
+
+ CheckBox {
+ id: hoverBlockingCB
+ text: "Button hover is blocking"
+ }
+
+ Rectangle {
+ objectName: "buttonWithMA"
+ width: parent.width
+ height: 30
+ color: buttonMA.pressed ? "lightsteelblue" : "#999"
+ border.color: buttonMA.containsMouse ? "cyan" : "transparent"
+
+ MouseArea {
+ id: buttonMA
+ objectName: "buttonMA"
+ hoverEnabled: true
+ cursorShape: Qt.UpArrowCursor
+ anchors.fill: parent
+ onClicked: console.log("clicked MA")
+ }
+
+ Text {
+ anchors.centerIn: parent
+ text: "MouseArea"
+ }
+ }
+
+ Rectangle {
+ objectName: "buttonWithHH"
+ width: parent.width
+ height: 30
+ color: flash ? "#999" : "white"
+ border.color: buttonHH.hovered ? "cyan" : "transparent"
+ property bool flash: true
+
+ HoverHandler {
+ id: buttonHH
+ objectName: "buttonHH"
+ acceptedDevices: PointerDevice.AllDevices
+ blocking: hoverBlockingCB.checked
+ cursorShape: tapHandler.pressed ? Qt.BusyCursor : Qt.PointingHandCursor
+ }
+
+ TapHandler {
+ id: tapHandler
+ onTapped: tapFlash.start()
+ }
+
+ Text {
+ anchors.centerIn: parent
+ text: "HoverHandler"
+ }
+
+ FlashAnimation on flash {
+ id: tapFlash
+ }
+ }
+ }
+
+ Rectangle {
+ id: paddle
+ width: 100
+ height: 40
+ color: paddleHH.hovered ? "indianred" : "#888"
+ y: parent.height - 100
+ radius: 10
+
+ HoverHandler {
+ id: paddleHH
+ objectName: "paddleHH"
+ }
+
+ SequentialAnimation on x {
+ NumberAnimation {
+ to: root.width - paddle.width
+ duration: 2000
+ easing { type: Easing.InOutQuad }
+ }
+ PauseAnimation { duration: 100 }
+ NumberAnimation {
+ to: 0
+ duration: 2000
+ easing { type: Easing.InOutQuad }
+ }
+ PauseAnimation { duration: 100 }
+ loops: Animation.Infinite
+ }
+ }
+
+ Rectangle {
+ objectName: "topSidebar"
+ radius: 5
+ antialiasing: true
+ x: -10
+ y: -radius
+ width: 200
+ height: 200
+ border.color: topSidebarHH.hovered ? "cyan" : "black"
+ color: "#777"
+
+ Rectangle {
+ color: "cyan"
+ width: 10
+ height: width
+ radius: width / 2
+ visible: topSidebarHH.hovered
+ x: topSidebarHH.point.position.x - width / 2
+ y: topSidebarHH.point.position.y - height / 2
+ z: 100
+ }
+
+ HoverHandler {
+ id: topSidebarHH
+ objectName: "topSidebarHH"
+ cursorShape: Qt.OpenHandCursor
+ }
+
+ ButtonsAndStuff {
+ anchors.fill: parent
+ }
+
+ Text {
+ anchors { left: parent.left; bottom: parent.bottom; margins: 12 }
+ text: "Hover Handler"
+ }
+ }
+
+ Rectangle {
+ objectName: "bottomSidebar"
+ radius: 5
+ antialiasing: true
+ x: -10
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: -radius
+ width: 200
+ height: 200
+ border.color: bottomSidebarMA.containsMouse ? "cyan" : "black"
+ color: "#777"
+
+ MouseArea {
+ id: bottomSidebarMA
+ objectName: "bottomSidebarMA"
+ hoverEnabled: true
+ cursorShape: Qt.ClosedHandCursor
+ anchors.fill: parent
+
+ ButtonsAndStuff {
+ anchors.fill: parent
+ }
+ }
+
+ Text {
+ anchors { left: parent.left; bottom: parent.bottom; margins: 12 }
+ text: "MouseArea"
+ }
+ }
+
+ HoverHandler {
+ id: rootHover
+ }
+
+ Text {
+ anchors.right: parent.right
+ color: "cyan"
+ text: "scene " + rootHover.point.scenePosition.x.toFixed(1) + ", " + rootHover.point.scenePosition.y.toFixed(1)
+ }
+}
diff --git a/examples/quick/pointerhandlers/singlePointHandlerProperties.qml b/examples/quick/pointerhandlers/singlePointHandlerProperties.qml
new file mode 100644
index 0000000000..74dbac4b98
--- /dev/null
+++ b/examples/quick/pointerhandlers/singlePointHandlerProperties.qml
@@ -0,0 +1,139 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Rectangle {
+ id: root
+ width: 480
+ height: 480
+ color: "black"
+
+ Item {
+ id: crosshairs
+ x: pointHandler.point.position.x - width / 2
+ y: pointHandler.point.position.y - height / 2
+ width: parent.width / 2; height: parent.height / 2
+ visible: pointHandler.active
+ rotation: pointHandler.point.rotation
+
+ Rectangle {
+ color: "goldenrod"
+ anchors.centerIn: parent
+ width: 2; height: parent.height
+ antialiasing: true
+ }
+ Rectangle {
+ color: "goldenrod"
+ anchors.centerIn: parent
+ width: parent.width; height: 2
+ antialiasing: true
+ }
+ Rectangle {
+ color: "goldenrod"
+ width: Math.max(2, 50 * pointHandler.point.pressure)
+ height: width
+ radius: width / 2
+ anchors.centerIn: parent
+ antialiasing: true
+ Rectangle {
+ y: -56
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: "lightsteelblue"
+ implicitWidth: label.implicitWidth
+ implicitHeight: label.implicitHeight
+ Text {
+ id: label
+ text: 'seat: ' + pointHandler.point.device.seatName + '\ndevice: ' + pointHandler.point.device.name +
+ '\nid: ' + pointHandler.point.id.toString(16) + " uid: " + pointHandler.point.uniqueId.numericId +
+ '\npos: (' + pointHandler.point.position.x.toFixed(2) + ', ' + pointHandler.point.position.y.toFixed(2) + ')' +
+ '\nmodifiers: ' + pointHandler.point.modifiers.toString(16)
+ }
+ }
+ }
+ Rectangle {
+ color: "transparent"
+ border.color: "white"
+ antialiasing: true
+ width: pointHandler.point.ellipseDiameters.width
+ height: pointHandler.point.ellipseDiameters.height
+ radius: Math.min(width / 2, height / 2)
+ anchors.centerIn: parent
+ }
+ }
+ Rectangle {
+ id: velocityVector
+ visible: width > 0
+ width: pointHandler.point.velocity.length() / 10
+ height: 2
+ x: pointHandler.point.position.x
+ y: pointHandler.point.position.y
+ rotation: Math.atan2(pointHandler.point.velocity.y, pointHandler.point.velocity.x) * 180 / Math.PI
+ transformOrigin: Item.BottomLeft
+ antialiasing: true
+
+ Image {
+ source: "images/arrowhead.png"
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ width: 16
+ height: 12
+ antialiasing: true
+ }
+ }
+
+ Component {
+ id: grabbingLocationIndicator
+ Image {
+ source: "components/images/grabbing-location.svg"
+ sourceSize.width: 32
+ sourceSize.height: 32
+ }
+ }
+
+ Component {
+ id: mouseButtonIndicator
+ Image {
+ property int buttons
+ source: "components/images/mouse.png"
+ Image {
+ source: "components/images/mouse_left.png"
+ visible: buttons & Qt.LeftButton
+ }
+ Image {
+ source: "components/images/mouse_middle.png"
+ visible: buttons & Qt.MiddleButton
+ }
+ Image {
+ source: "components/images/mouse_right.png"
+ visible: buttons & Qt.RightButton
+ }
+ }
+ }
+
+ PointHandler {
+ id: pointHandler
+ target: null
+ acceptedButtons: Qt.AllButtons
+ onGrabChanged: function(transition, point) {
+ if (active) {
+ console.log("grabbed " + point.pointId + " @ " + point.sceneGrabPos)
+ grabbingLocationIndicator.createObject(root, {"x": point.sceneGrabPosition.x, "y": point.sceneGrabPosition.y - 16})
+ }
+ }
+ onPointChanged: {
+ if (point.pressedButtons)
+ mouseButtonIndicator.createObject(root, {"x": point.pressPosition.x - 44, "y": point.pressPosition.y - 64, "buttons": point.pressedButtons})
+ }
+ }
+
+ Text {
+ color: "white"
+ text: "drag to see feedback"
+ anchors {
+ bottom: parent.bottom
+ horizontalCenter: parent.horizontalCenter
+ margins: 6
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/tabletCanvasDrawing.qml b/examples/quick/pointerhandlers/tabletCanvasDrawing.qml
new file mode 100644
index 0000000000..10435b0c1d
--- /dev/null
+++ b/examples/quick/pointerhandlers/tabletCanvasDrawing.qml
@@ -0,0 +1,204 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Layouts
+import "components"
+
+Rectangle {
+ width: 1024
+ height: 1024
+ color: "#444"
+
+ ColumnLayout {
+ x: -15; width: 80
+ height: parent.height
+ Slider {
+ id: hueSlider
+ width: 80; height: 200
+ Layout.fillHeight: true
+ label: "hue"
+ Rectangle {
+ color: "beige"
+ width: 30
+ height: 25
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 2
+ anchors.horizontalCenter: parent.horizontalCenter
+ Rectangle {
+ border.color: "white"
+ color: canvas.drawingColor
+ anchors.fill: parent
+ }
+ }
+ }
+ Slider {
+ id: saturationSlider
+ width: 80; height: 200
+ Layout.fillHeight: true
+ label: "sat"
+ }
+ Slider {
+ id: lightnessSlider
+ width: 80; height: 200
+ Layout.fillHeight: true
+ label: "light"
+ }
+ }
+
+ ColumnLayout {
+ x: parent.width - 65; width: 80
+ height: parent.height
+ Slider {
+ id: widthSlider
+ width: 80; height: 200
+ Layout.fillHeight: true
+ label: "width"
+ }
+ Slider {
+ id: alphaSlider
+ width: 80; height: 200
+ Layout.fillHeight: true
+ label: "alpha"
+ }
+ }
+
+ Rectangle {
+ id: rect
+ width: 640
+ height: 480
+ color: "beige"
+ anchors {
+ fill: parent
+ margins: 10
+ leftMargin: 50
+ rightMargin: 50
+ }
+
+ Canvas {
+ id: canvas
+ anchors.fill: parent
+ antialiasing: true
+ renderTarget: Canvas.FramebufferObject
+ property color drawingColor: Qt.hsla(hueSlider.value / 100.0,
+ saturationSlider.value / 100.0,
+ lightnessSlider.value / 100.0,
+ alphaSlider.value / 100.0)
+ property var points: []
+ property var pressures: []
+ property var pointerType: PointerDevice.Pen
+ onPaint: {
+ if (points.length < 2)
+ return
+ var ctx = canvas.getContext('2d');
+ ctx.save()
+ ctx.strokeStyle = pointerType === PointerDevice.Pen ? drawingColor : "beige"
+ ctx.lineCap = "round"
+ if (pressures.length === points.length) {
+ for (var i = 1; i < points.length; i++) {
+ ctx.lineWidth = pressures[i] * widthSlider.value
+ ctx.beginPath()
+ ctx.moveTo(points[i - 1].x, points[i - 1].y)
+ ctx.lineTo(points[i].x, points[i].y)
+ ctx.stroke()
+ }
+ points = points.slice(points.length - 2, 1)
+ pressures = pressures.slice(pressures.length - 2, 1)
+ } else {
+ ctx.beginPath()
+ ctx.moveTo(points[0].x, points[0].y)
+ for (var i = 1; i < points.length; i++)
+ ctx.lineTo(points[i].x, points[i].y)
+ ctx.lineWidth = widthSlider
+ ctx.stroke()
+ points = points.slice(points.length - 2, 1)
+ pressures = []
+ }
+ ctx.restore()
+ }
+ }
+
+ Text {
+ text: "draw with a drawing-tablet stylus"
+ anchors {
+ bottom: parent.bottom
+ horizontalCenter: parent.horizontalCenter
+ margins: 6
+ }
+ }
+
+ PointHandler {
+ acceptedPointerTypes: PointerDevice.Pen
+ onActiveChanged:
+ if (active) {
+ canvas.pointerType = PointerDevice.Pen
+ } else {
+ canvas.points = []
+ canvas.pressures = []
+ }
+ onPointChanged:
+ if (active) {
+ canvas.points.push(point.position)
+ canvas.pressures.push(point.pressure)
+ canvas.requestPaint()
+ }
+ }
+
+ PointHandler {
+ acceptedPointerTypes: PointerDevice.Eraser
+ onActiveChanged:
+ if (active) {
+ canvas.pointerType = PointerDevice.Eraser
+ } else {
+ canvas.points = []
+ canvas.pressures = []
+ }
+ onPointChanged:
+ if (active) {
+ canvas.points.push(point.position)
+ canvas.pressures.push(point.pressure)
+ canvas.requestPaint()
+ }
+ }
+
+ HoverHandler {
+ id: stylusHandler
+ acceptedDevices: PointerDevice.Stylus
+ acceptedPointerTypes: PointerDevice.Pen
+ target: Image {
+ parent: rect
+ source: stylusHandler.point.rotation === 0 ?
+ "images/cursor-pencil.png" : "images/cursor-felt-marker.png"
+ visible: stylusHandler.hovered
+ rotation: stylusHandler.point.rotation
+ x: stylusHandler.point.position.x
+ y: stylusHandler.point.position.y
+ }
+ }
+
+ HoverHandler {
+ id: airbrushHandler
+ acceptedDevices: PointerDevice.Airbrush
+ acceptedPointerTypes: PointerDevice.Pen
+ target: Image {
+ parent: rect
+ source: "images/cursor-airbrush.png"
+ visible: airbrushHandler.hovered
+ x: airbrushHandler.point.position.x
+ y: airbrushHandler.point.position.y
+ }
+ }
+
+ HoverHandler {
+ id: eraserHandler
+ acceptedPointerTypes: PointerDevice.Eraser
+ target: Image {
+ parent: rect
+ source: "images/cursor-eraser.png"
+ visible: eraserHandler.hovered
+ x: eraserHandler.point.position.x
+ y: eraserHandler.point.position.y - 32
+ }
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/tapHandler.qml b/examples/quick/pointerhandlers/tapHandler.qml
new file mode 100644
index 0000000000..5891491695
--- /dev/null
+++ b/examples/quick/pointerhandlers/tapHandler.qml
@@ -0,0 +1,213 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Layouts
+import "components"
+
+Item {
+ width: 1024
+ height: 480
+
+ Rectangle {
+ id: rect
+ anchors.fill: parent; anchors.margins: 40; anchors.topMargin: 60
+ 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 :
+ TapHandler.ReleaseWithinBounds)
+
+ onCanceled: function(point) {
+ console.log("canceled @ " + point.position)
+ 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 +
+ " " + (tapCount > 1 ? (tapCount + " times") : "for the first time"))
+ if (tapCount > 1) {
+ tapCountLabel.text = tapCount
+ flashAnimation.start()
+ }
+ }
+ onLongPressed: longPressFeedback.createObject(rect,
+ {"x": point.position.x, "y": point.position.y,
+ "text": "long press after\n" + handler.timeHeld.toFixed(3) + " sec",
+ "color": buttonToBlinkColor(point.pressedButtons)})
+ }
+
+ Text {
+ id: tapCountLabel
+ anchors.centerIn: parent
+ font.pixelSize: 72
+ font.weight: Font.Black
+ SequentialAnimation {
+ id: flashAnimation
+ PropertyAction { target: tapCountLabel; property: "visible"; value: true }
+ PropertyAction { target: tapCountLabel; property: "opacity"; value: 1.0 }
+ PropertyAction { target: tapCountLabel; property: "scale"; value: 1.0 }
+ ParallelAnimation {
+ NumberAnimation {
+ target: tapCountLabel
+ property: "opacity"
+ to: 0
+ duration: 500
+ }
+ NumberAnimation {
+ target: tapCountLabel
+ property: "scale"
+ to: 1.5
+ duration: 500
+ }
+ }
+ }
+ }
+
+ Rectangle {
+ id: expandingCircle
+ radius: handler.timeHeld * 100
+ visible: radius > 0 && handler.pressed
+ border.width: 3
+ border.color: buttonToBlinkColor(handler.point.pressedButtons)
+ color: "transparent"
+ width: radius * 2
+ height: radius * 2
+ x: handler.point.pressPosition.x - radius
+ y: handler.point.pressPosition.y - radius
+ opacity: 0.25
+ }
+
+ Component {
+ id: longPressFeedback
+ Text { }
+ }
+
+ SequentialAnimation {
+ id: borderBlink
+ property color blinkColor: "red"
+ function tapFeedback(button) {
+ stop();
+ blinkColor = buttonToBlinkColor(button);
+ start();
+ }
+ ScriptAction { script: rect.border.color = borderBlink.blinkColor }
+ PauseAnimation { duration: 100 }
+ ScriptAction { script: rect.border.color = "transparent" }
+ PauseAnimation { duration: 100 }
+ }
+
+ Text {
+ text: "tap, click with different buttons, double-click, long press in this area"
+ anchors {
+ bottom: parent.bottom
+ horizontalCenter: parent.horizontalCenter
+ margins: 6
+ }
+ }
+ }
+
+ function buttonToBlinkColor(button) {
+ switch (button) {
+ case Qt.MiddleButton: return "orange";
+ case Qt.RightButton: return "magenta";
+ default: return "green";
+ }
+ }
+
+ GridLayout {
+ columnSpacing: 6; rowSpacing: 6
+ Text {
+ text: "accepted mouse clicks:"
+ }
+ CheckBox {
+ id: leftAllowedCB
+ checked: true
+ text: "left"
+ }
+ CheckBox {
+ id: middleAllowedCB
+ text: "middle"
+ }
+ CheckBox {
+ id: rightAllowedCB
+ text: "right"
+ }
+
+ Text {
+ text: "exclusive signals:"
+ }
+ CheckBox {
+ id: singleExclusiveCB
+ text: "single"
+ }
+ CheckBox {
+ id: doubleExclusiveCB
+ text: "double"
+ }
+
+ Text {
+ text: "gesture policy:"
+ horizontalAlignment: Text.AlignRight
+ Layout.row: 1
+ Layout.fillWidth: true
+ }
+ CheckBox {
+ id: policyDragThresholdCB
+ text: "drag threshold"
+ onCheckedChanged: if (checked) {
+ policyWithinBoundsCB.checked = false;
+ policyReleaseWithinBoundsCB.checked = false;
+ policyDragWithinBoundsCB.checked = false;
+ }
+ }
+ CheckBox {
+ id: policyWithinBoundsCB
+ text: "within bounds"
+ onCheckedChanged: if (checked) {
+ policyDragThresholdCB.checked = false;
+ policyReleaseWithinBoundsCB.checked = false;
+ policyDragWithinBoundsCB.checked = false;
+ }
+ }
+ CheckBox {
+ id: policyReleaseWithinBoundsCB
+ checked: true
+ text: "release within bounds"
+ onCheckedChanged: if (checked) {
+ policyDragThresholdCB.checked = false;
+ policyWithinBoundsCB.checked = false;
+ policyDragWithinBoundsCB.checked = false;
+ }
+ }
+ CheckBox {
+ id: policyDragWithinBoundsCB
+ text: "drag within bounds"
+ onCheckedChanged: if (checked) {
+ policyDragThresholdCB.checked = false;
+ policyWithinBoundsCB.checked = false;
+ policyReleaseWithinBoundsCB.checked = false;
+ }
+ }
+ }
+}
diff --git a/examples/quick/pointerhandlers/tapWithModifiers.qml b/examples/quick/pointerhandlers/tapWithModifiers.qml
new file mode 100644
index 0000000000..a129f2f0fd
--- /dev/null
+++ b/examples/quick/pointerhandlers/tapWithModifiers.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Item {
+ width: 200
+ height: 200
+ TapHandler {
+ acceptedModifiers: Qt.ControlModifier
+ onTapped: console.log("control-tapped")
+ }
+ TapHandler {
+ acceptedModifiers: Qt.NoModifier
+ onTapped: console.log("tapped with no modifiers")
+ }
+ TapHandler {
+ onTapped:
+ switch (point.modifiers) {
+ case Qt.ControlModifier | Qt.AltModifier:
+ console.log("CTRL+ALT");
+ break;
+ case Qt.ControlModifier | Qt.AltModifier | Qt.MetaModifier:
+ console.log("CTRL+META+ALT");
+ break;
+ default:
+ console.log("other modifiers", point.modifiers)
+ }
+ }
+}
diff --git a/examples/quick/positioners/CMakeLists.txt b/examples/quick/positioners/CMakeLists.txt
index 07205cbfa5..64f5cae495 100644
--- a/examples/quick/positioners/CMakeLists.txt
+++ b/examples/quick/positioners/CMakeLists.txt
@@ -1,127 +1,47 @@
-# Generated from positioners.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(positioners LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+add_subdirectory("../shared" "shared")
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/positioners")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(positioners
+qt_add_executable(positionersexample
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(positioners PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(positioners PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(positioners_resource_files
- "positioners-attachedproperties.qml"
- "positioners-transitions.qml"
- "positioners.qml"
+qt_add_qml_module(positionersexample
+ URI positioners
+ QML_FILES
+ "positioners-attachedproperties.qml"
+ "positioners-transitions.qml"
+ "positioners.qml"
)
-qt6_add_resources(positioners "positioners"
- PREFIX
- "/positioners"
- FILES
- ${positioners_resource_files}
-)
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
+target_link_libraries(positionersexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(positioners "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
+install(TARGETS positionersexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS positioners
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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 8200a14fb8..2b1af4d496 100644
--- a/examples/quick/positioners/doc/src/positioners.qdoc
+++ b/examples/quick/positioners/doc/src/positioners.qdoc
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick Examples - Positioners
\example positioners
\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/main.cpp b/examples/quick/positioners/main.cpp
index 4233c4025c..fa5966d410 100644
--- a/examples/quick/positioners/main.cpp
+++ b/examples/quick/positioners/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../shared/shared.h"
DECLARATIVE_EXAMPLE_MAIN(positioners/positioners)
diff --git a/examples/quick/positioners/positioners-attachedproperties.qml b/examples/quick/positioners/positioners-attachedproperties.qml
index af89543289..18cf7d866d 100644
--- a/examples/quick/positioners/positioners-attachedproperties.qml
+++ b/examples/quick/positioners/positioners-attachedproperties.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Controls 1.1
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
Rectangle {
id: page
@@ -64,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
}
@@ -89,15 +42,15 @@ 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
MouseArea {
- anchors.fill: parent
- onClicked: column.showInfo(green.Positioner)
+ anchors.fill: parent
+ onClicked: column.showInfo(green.Positioner)
}
}
//! [0]
@@ -112,15 +65,15 @@ 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
MouseArea {
- anchors.fill: parent
- onClicked: column.showInfo(blue.Positioner)
+ anchors.fill: parent
+ onClicked: column.showInfo(blue.Positioner)
}
}
@@ -134,15 +87,15 @@ 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
MouseArea {
- anchors.fill: parent
- onClicked: column.showInfo(purple.Positioner)
+ anchors.fill: parent
+ onClicked: column.showInfo(purple.Positioner)
}
}
@@ -158,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 d4f3772c4e..44eb2ea625 100644
--- a/examples/quick/positioners/positioners-transitions.qml
+++ b/examples/quick/positioners/positioners-transitions.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQml 2.0
-import QtQuick 2.0
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQml
+import QtQuick
Item {
id: page
@@ -66,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 {
@@ -79,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 {
@@ -126,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 {
@@ -171,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 {
@@ -232,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 b16df6858b..d166135441 100644
--- a/examples/quick/positioners/positioners.qml
+++ b/examples/quick/positioners/positioners.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../shared" as Examples
+import QtQuick
+import shared as Examples
Item {
height: 480
@@ -58,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/positioners/positioners.qrc b/examples/quick/positioners/positioners.qrc
index 7025a6f8d8..22b29868e5 100644
--- a/examples/quick/positioners/positioners.qrc
+++ b/examples/quick/positioners/positioners.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/positioners">
+ <qresource prefix="/qt/qml/positioners">
<file>positioners.qml</file>
<file>positioners-attachedproperties.qml</file>
<file>positioners-transitions.qml</file>
diff --git a/examples/quick/quick-accessibility/Button.qml b/examples/quick/quick-accessibility/Button.qml
new file mode 100644
index 0000000000..bd23307e97
--- /dev/null
+++ b/examples/quick/quick-accessibility/Button.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Rectangle {
+ id: button
+
+ property bool checked: false
+ property alias text : buttonText.text
+ //! [button]
+ Accessible.name: text
+ Accessible.description: "This button does " + text
+ Accessible.role: Accessible.Button
+ Accessible.onPressAction: {
+ button.clicked()
+ }
+ //! [button]
+
+ signal clicked
+
+ width: buttonText.width + 20
+ height: 30
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "lightsteelblue" }
+ GradientStop { position: 1.0;
+ color: button.focus ? "red" : "blue" }
+ }
+
+ radius: 5
+ antialiasing: true
+
+ Text {
+ id: buttonText
+ anchors.centerIn: parent
+ font.pixelSize: parent.height * .5
+ style: Text.Sunken
+ color: "white"
+ styleColor: "black"
+ }
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ onClicked: parent.clicked()
+ }
+
+ Keys.onSpacePressed: clicked()
+}
diff --git a/examples/quick/quick-accessibility/CMakeLists.txt b/examples/quick/quick-accessibility/CMakeLists.txt
index ae216735a2..1501537b7b 100644
--- a/examples/quick/quick-accessibility/CMakeLists.txt
+++ b/examples/quick/quick-accessibility/CMakeLists.txt
@@ -1,57 +1,48 @@
-# Generated from quick-accessibility.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(quick-accessibility LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC 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)
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(quick-accessibility
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(quick-accessibility PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(quick-accessibility PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(accessibility_resource_files
- "accessibility.qml"
- "content/Button.qml"
- "content/Checkbox.qml"
- "content/Slider.qml"
+target_link_libraries(quick-accessibility PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(quick-accessibility "accessibility"
- PREFIX
- "/accessibility"
- FILES
- ${accessibility_resource_files}
+qt_add_qml_module(quick-accessibility
+ URI accessibility
+ QML_FILES
+ "accessibility.qml"
+ "Button.qml"
+ "Checkbox.qml"
+ "Slider.qml"
)
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/Checkbox.qml b/examples/quick/quick-accessibility/Checkbox.qml
new file mode 100644
index 0000000000..a3a0f286f1
--- /dev/null
+++ b/examples/quick/quick-accessibility/Checkbox.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+FocusScope {
+ id: checkbox
+
+ Accessible.role: Accessible.CheckBox
+
+ property string text: "CheckBox"
+ property bool checked // required variable
+
+ width: 100
+ height: 30
+
+ Row {
+ spacing: 2
+
+ Rectangle {
+ width: 12
+ height: 12
+ border.width: checkbox.focus ? 2 : 1
+ border.color: "black"
+
+ Text {
+ id: checkboxText
+ text: checkbox.checked ? "x" : ""
+ anchors.centerIn: parent
+ }
+ }
+
+ Text {
+ text: checkbox.text
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: checkbox.checked = !checkbox.checked
+ }
+
+ Keys.onSpacePressed: checkbox.checked = !checkbox.checked
+}
diff --git a/examples/quick/quick-accessibility/Slider.qml b/examples/quick/quick-accessibility/Slider.qml
new file mode 100644
index 0000000000..5dedec4915
--- /dev/null
+++ b/examples/quick/quick-accessibility/Slider.qml
@@ -0,0 +1,53 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+// Minimal slider implementation
+Rectangle {
+ id: slider
+
+ property alias text: buttonText.text
+ Accessible.role: Accessible.Slider
+
+ property int value: 5 // required
+ property int minimumValue: 0 // optional (default INT_MIN)
+ property int maximumValue: 20 // optional (default INT_MAX)
+ property int stepSize: 1 // optional (default 1)
+
+ width: 100
+ height: 30
+ border.color: "black"
+ border.width: 1
+
+ Rectangle {
+ id: indicator
+ x: 1
+ y: 1
+ height: parent.height - 2
+ width: ((parent.width - 2) / slider.maximumValue) * slider.value
+ color: "lightgrey"
+ Behavior on width {
+ NumberAnimation { duration: 50 }
+ }
+ }
+
+ Text {
+ id: buttonText
+ text: parent.value
+ anchors.centerIn: parent
+ font.pixelSize: parent.height * .5
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: (mouse) => {
+ var pos = mouse.x / slider.width * (slider.maximumValue - slider.minimumValue)
+ + slider.minimumValue
+ slider.value = pos
+ }
+ }
+
+ Keys.onLeftPressed: value > minimumValue ? value = value - stepSize : minimumValue
+ Keys.onRightPressed: value < maximumValue ? value = value + stepSize : maximumValue
+}
diff --git a/examples/quick/quick-accessibility/accessibility.qml b/examples/quick/quick-accessibility/accessibility.qml
index d3365cdd12..0de54de4a6 100644
--- a/examples/quick/quick-accessibility/accessibility.qml
+++ b/examples/quick/quick-accessibility/accessibility.qml
@@ -1,55 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQml module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "content"
+import QtQuick
Rectangle {
id: window
diff --git a/examples/quick/quick-accessibility/accessibility.qrc b/examples/quick/quick-accessibility/accessibility.qrc
index 462a9a590c..a1d86bd1bc 100644
--- a/examples/quick/quick-accessibility/accessibility.qrc
+++ b/examples/quick/quick-accessibility/accessibility.qrc
@@ -1,8 +1,8 @@
<RCC>
- <qresource prefix="/accessibility">
+ <qresource prefix="/qt/qml/accessibility">
<file>accessibility.qml</file>
- <file>content/Button.qml</file>
- <file>content/Checkbox.qml</file>
- <file>content/Slider.qml</file>
+ <file>Button.qml</file>
+ <file>Checkbox.qml</file>
+ <file>Slider.qml</file>
</qresource>
</RCC>
diff --git a/examples/quick/quick-accessibility/content/Button.qml b/examples/quick/quick-accessibility/content/Button.qml
deleted file mode 100644
index 7a86e31588..0000000000
--- a/examples/quick/quick-accessibility/content/Button.qml
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQml module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Rectangle {
- id: button
-
- property bool checked: false
- property alias text : buttonText.text
- //! [button]
- Accessible.name: text
- Accessible.description: "This button does " + text
- Accessible.role: Accessible.Button
- Accessible.onPressAction: {
- button.clicked()
- }
- //! [button]
-
- signal clicked
-
- width: buttonText.width + 20
- height: 30
- gradient: Gradient {
- GradientStop { position: 0.0; color: "lightsteelblue" }
- GradientStop { position: 1.0;
- color: button.focus ? "red" : "blue" }
- }
-
- radius: 5
- antialiasing: true
-
- Text {
- id: buttonText
- anchors.centerIn: parent
- font.pixelSize: parent.height * .5
- style: Text.Sunken
- color: "white"
- styleColor: "black"
- }
-
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- onClicked: parent.clicked()
- }
-
- Keys.onSpacePressed: clicked()
-}
diff --git a/examples/quick/quick-accessibility/content/Checkbox.qml b/examples/quick/quick-accessibility/content/Checkbox.qml
deleted file mode 100644
index ba222bfb3d..0000000000
--- a/examples/quick/quick-accessibility/content/Checkbox.qml
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Quick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-FocusScope {
- id: checkbox
-
- Accessible.role: Accessible.CheckBox
-
- property string text: "CheckBox"
- property bool checked // required variable
-
- width: 100
- height: 30
-
- Row {
- spacing: 2
-
- Rectangle {
- width: 12
- height: 12
- border.width: checkbox.focus ? 2 : 1
- border.color: "black"
-
- Text {
- id: checkboxText
- text: checkbox.checked ? "x" : ""
- anchors.centerIn: parent
- }
- }
-
- Text {
- text: checkbox.text
- }
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: checkbox.checked = !checkbox.checked
- }
-
- Keys.onSpacePressed: checkbox.checked = !checkbox.checked
-}
diff --git a/examples/quick/quick-accessibility/content/Slider.qml b/examples/quick/quick-accessibility/content/Slider.qml
deleted file mode 100644
index 241e5d804e..0000000000
--- a/examples/quick/quick-accessibility/content/Slider.qml
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Quick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-// Minimal slider implementation
-Rectangle {
- id: slider
-
- property alias text: buttonText.text
- Accessible.role: Accessible.Slider
-
- property int value: 5 // required
- property int minimumValue: 0 // optional (default INT_MIN)
- property int maximumValue: 20 // optional (default INT_MAX)
- property int stepSize: 1 // optional (default 1)
-
- width: 100
- height: 30
- border.color: "black"
- border.width: 1
-
- Rectangle {
- id: indicator
- x: 1
- y: 1
- height: parent.height - 2
- width: ((parent.width - 2) / slider.maximumValue) * slider.value
- color: "lightgrey"
- Behavior on width {
- NumberAnimation { duration: 50 }
- }
- }
-
- Text {
- id: buttonText
- text: parent.value
- anchors.centerIn: parent
- font.pixelSize: parent.height * .5
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: (mouse) => {
- var pos = mouse.x / slider.width * (slider.maximumValue - slider.minimumValue)
- + slider.minimumValue
- slider.value = pos
- }
- }
-
- Keys.onLeftPressed: value > minimumValue ? value = value - stepSize : minimumValue
- Keys.onRightPressed: value < maximumValue ? value = value + stepSize : maximumValue
-}
diff --git a/examples/quick/quick-accessibility/doc/src/accessibility.qdoc b/examples/quick/quick-accessibility/doc/src/accessibility.qdoc
index b31db0d313..c6951cedd1 100644
--- a/examples/quick/quick-accessibility/doc/src/accessibility.qdoc
+++ b/examples/quick/quick-accessibility/doc/src/accessibility.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick Examples - Accessibility
\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
@@ -40,7 +17,7 @@
The button identifies itself and its functionality to the
accessibility system:
- \snippet quick-accessibility/content/Button.qml button
+ \snippet quick-accessibility/Button.qml button
Similarly, \l Text types inside the example also identify themselves:
\snippet quick-accessibility/accessibility.qml text
diff --git a/examples/quick/quick-accessibility/main.cpp b/examples/quick/quick-accessibility/main.cpp
index 46695ae066..e224110134 100644
--- a/examples/quick/quick-accessibility/main.cpp
+++ b/examples/quick/quick-accessibility/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../shared/shared.h"
DECLARATIVE_EXAMPLE_MAIN(accessibility/accessibility)
diff --git a/examples/quick/quick.pro b/examples/quick/quick.pro
index df65ea8e17..b9fb3b48d1 100644
--- a/examples/quick/quick.pro
+++ b/examples/quick/quick.pro
@@ -2,31 +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 \
+ 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..5036f1a37e
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/CMakeLists.txt
@@ -0,0 +1,70 @@
+# 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"
+)
+
+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/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/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/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..74059b8208
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/shapegallery.qml
@@ -0,0 +1,184 @@
+// 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"
+ }
+ }
+ }
+ }
+
+ 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..413816dba2
--- /dev/null
+++ b/examples/quick/quickshapes/shapes/shapes.qrc
@@ -0,0 +1,28 @@
+<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>
+ </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/quick/quickshapes/weatherforecast/qtquickcontrols2.conf b/examples/quick/quickshapes/weatherforecast/qtquickcontrols2.conf
new file mode 100644
index 0000000000..b6c7c87ea1
--- /dev/null
+++ b/examples/quick/quickshapes/weatherforecast/qtquickcontrols2.conf
@@ -0,0 +1,2 @@
+[Controls]
+Style=Material
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/CMakeLists.txt b/examples/quick/quickwidgets/CMakeLists.txt
index 637e8a50eb..f205e23600 100644
--- a/examples/quick/quickwidgets/CMakeLists.txt
+++ b/examples/quick/quickwidgets/CMakeLists.txt
@@ -1,4 +1,2 @@
-# Generated from quickwidgets.pro.
-
-add_subdirectory(quickwidget)
-add_subdirectory(qquickviewcomparison)
+qt_internal_add_example(quickwidget)
+qt_internal_add_example(qquickwidgetversuswindow_opengl)
diff --git a/examples/quick/quickwidgets/qquickviewcomparison/CMakeLists.txt b/examples/quick/quickwidgets/qquickviewcomparison/CMakeLists.txt
deleted file mode 100644
index 408bfb0ad2..0000000000
--- a/examples/quick/quickwidgets/qquickviewcomparison/CMakeLists.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-# Generated from qquickviewcomparison.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(qquickviewcomparison LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/quickwidgets/qquickviewcomparison")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS QuickWidgets)
-
-qt_add_executable(qquickviewcomparison
- fbitem.cpp fbitem.h
- logo.cpp logo.h
- main.cpp
- mainwindow.cpp mainwindow.h
-)
-set_target_properties(qquickviewcomparison PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(qquickviewcomparison PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::QuickWidgets
- Qt::Widgets
-)
-
-
-# Resources:
-set(qquickviewcomparison_resource_files
- "test.qml"
-)
-
-qt6_add_resources(qquickviewcomparison "qquickviewcomparison"
- PREFIX
- "/qquickviewcomparison"
- FILES
- ${qquickviewcomparison_resource_files}
-)
-
-install(TARGETS qquickviewcomparison
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(qquickviewcomparison PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI fbitem
-)
-
-qt6_qml_type_registration(qquickviewcomparison)
diff --git a/examples/quick/quickwidgets/qquickviewcomparison/fbitem.cpp b/examples/quick/quickwidgets/qquickviewcomparison/fbitem.cpp
deleted file mode 100644
index 139fcbae5c..0000000000
--- a/examples/quick/quickwidgets/qquickviewcomparison/fbitem.cpp
+++ /dev/null
@@ -1,286 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "fbitem.h"
-#include <QOpenGLFramebufferObject>
-#include <QOpenGLFunctions>
-#include <QMatrix4x4>
-
-FbItem::FbItem(QQuickItem *parent)
- : QQuickFramebufferObject(parent),
- m_target(0, 0, -1),
- m_syncState(AllNeedsSync),
- m_multisample(false)
-{
-}
-
-QQuickFramebufferObject::Renderer *FbItem::createRenderer() const
-{
- return new FbItemRenderer(m_multisample);
-}
-
-void FbItem::setEye(const QVector3D &v)
-{
- if (m_eye != v) {
- m_eye = v;
- m_syncState |= CameraNeedsSync;
- update();
- }
-}
-
-void FbItem::setTarget(const QVector3D &v)
-{
- if (m_target != v) {
- m_target = v;
- m_syncState |= CameraNeedsSync;
- update();
- }
-}
-
-void FbItem::setRotation(const QVector3D &v)
-{
- if (m_rotation != v) {
- m_rotation = v;
- m_syncState |= RotationNeedsSync;
- update();
- }
-}
-
-int FbItem::swapSyncState()
-{
- int s = m_syncState;
- m_syncState = 0;
- return s;
-}
-
-FbItemRenderer::FbItemRenderer(bool multisample)
- : m_inited(false),
- m_multisample(multisample),
- m_dirty(DirtyAll)
-{
- m_camera.setToIdentity();
- m_baseWorld.setToIdentity();
- m_baseWorld.translate(0, 0, -1);
- m_world = m_baseWorld;
-}
-
-void FbItemRenderer::synchronize(QQuickFramebufferObject *qfbitem)
-{
- FbItem *item = static_cast<FbItem *>(qfbitem);
- int syncState = item->swapSyncState();
- if (syncState & FbItem::CameraNeedsSync) {
- m_camera.setToIdentity();
- m_camera.lookAt(item->eye(), item->eye() + item->target(), QVector3D(0, 1, 0));
- m_dirty |= DirtyCamera;
- }
- if (syncState & FbItem::RotationNeedsSync) {
- m_rotation = item->rotation();
- m_dirty |= DirtyWorld;
- }
-}
-
-struct StateBinder
-{
- StateBinder(FbItemRenderer *r)
- : m_r(r) {
- QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
- f->glEnable(GL_DEPTH_TEST);
- f->glEnable(GL_CULL_FACE);
- f->glDepthMask(GL_TRUE);
- f->glDepthFunc(GL_LESS);
- f->glFrontFace(GL_CCW);
- f->glCullFace(GL_BACK);
- m_r->m_program->bind();
- }
- ~StateBinder() {
- QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
- m_r->m_program->release();
- f->glDisable(GL_CULL_FACE);
- f->glDisable(GL_DEPTH_TEST);
- }
- FbItemRenderer *m_r;
-};
-
-void FbItemRenderer::updateDirtyUniforms()
-{
- if (m_dirty & DirtyProjection)
- m_program->setUniformValue(m_projMatrixLoc, m_proj);
-
- if (m_dirty & DirtyCamera)
- m_program->setUniformValue(m_camMatrixLoc, m_camera);
-
- if (m_dirty & DirtyWorld) {
- m_program->setUniformValue(m_worldMatrixLoc, m_world);
- QMatrix3x3 normalMatrix = m_world.normalMatrix();
- m_program->setUniformValue(m_normalMatrixLoc, normalMatrix);
- }
-
- if (m_dirty & DirtyLight)
- m_program->setUniformValue(m_lightPosLoc, QVector3D(0, 0, 70));
-
- m_dirty = 0;
-}
-
-void FbItemRenderer::render()
-{
- ensureInit();
-
- if (m_vao.isCreated())
- m_vao.bind();
- else
- setupVertexAttribs();
-
- StateBinder state(this);
-
- QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
- f->glClearColor(0, 0, 0, 0);
- f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- if (m_dirty & DirtyWorld) {
- m_world = m_baseWorld;
- m_world.rotate(m_rotation.x(), 1, 0, 0);
- m_world.rotate(m_rotation.y(), 0, 1, 0);
- m_world.rotate(m_rotation.z(), 0, 0, 1);
- }
-
- updateDirtyUniforms();
-
- f->glDrawArrays(GL_TRIANGLES, 0, m_logo.vertexCount());
-
- if (m_vao.isCreated())
- m_vao.release();
-}
-
-QOpenGLFramebufferObject *FbItemRenderer::createFramebufferObject(const QSize &size)
-{
- m_dirty |= DirtyProjection;
- m_proj.setToIdentity();
- m_proj.perspective(45.0f, GLfloat(size.width()) / size.height(), 0.01f, 100.0f);
-
- QOpenGLFramebufferObjectFormat format;
- format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
- format.setSamples(m_multisample ? 4 : 0);
- return new QOpenGLFramebufferObject(size, format);
-}
-
-void FbItemRenderer::ensureInit()
-{
- if (m_inited)
- return;
-
- m_inited = true;
-
- initBuf();
- initProgram();
-}
-
-void FbItemRenderer::initBuf()
-{
- QOpenGLVertexArrayObject::Binder vaoBinder(&m_vao);
-
- m_logoVbo.create();
- m_logoVbo.bind();
- m_logoVbo.allocate(m_logo.constData(), m_logo.count() * sizeof(GLfloat));
-
- setupVertexAttribs();
-}
-
-void FbItemRenderer::setupVertexAttribs()
-{
- m_logoVbo.bind();
- QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
- f->glEnableVertexAttribArray(0);
- f->glEnableVertexAttribArray(1);
- f->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), nullptr);
- f->glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), reinterpret_cast<void *>(3 * sizeof(GLfloat)));
- m_logoVbo.release();
-}
-
-static const char *vertexShaderSource =
- "attribute vec4 vertex;\n"
- "attribute vec3 normal;\n"
- "varying vec3 vert;\n"
- "varying vec3 vertNormal;\n"
- "uniform mat4 projMatrix;\n"
- "uniform mat4 camMatrix;\n"
- "uniform mat4 worldMatrix;\n"
- "uniform mat3 normalMatrix;\n"
- "void main() {\n"
- " vert = vertex.xyz;\n"
- " vertNormal = normalMatrix * normal;\n"
- " gl_Position = projMatrix * camMatrix * worldMatrix * vertex;\n"
- "}\n";
-
-static const char *fragmentShaderSource =
- "varying highp vec3 vert;\n"
- "varying highp vec3 vertNormal;\n"
- "uniform highp vec3 lightPos;\n"
- "void main() {\n"
- " highp vec3 L = normalize(lightPos - vert);\n"
- " highp float NL = max(dot(normalize(vertNormal), L), 0.0);\n"
- " highp vec3 color = vec3(0.39, 1.0, 0.0);\n"
- " highp vec3 col = clamp(color * 0.2 + color * 0.8 * NL, 0.0, 1.0);\n"
- " gl_FragColor = vec4(col, 1.0);\n"
- "}\n";
-
-void FbItemRenderer::initProgram()
-{
- m_program.reset(new QOpenGLShaderProgram);
- m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
- m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
- m_program->bindAttributeLocation("vertex", 0);
- m_program->bindAttributeLocation("normal", 1);
- m_program->link();
- m_projMatrixLoc = m_program->uniformLocation("projMatrix");
- m_camMatrixLoc = m_program->uniformLocation("camMatrix");
- m_worldMatrixLoc = m_program->uniformLocation("worldMatrix");
- m_normalMatrixLoc = m_program->uniformLocation("normalMatrix");
- m_lightPosLoc = m_program->uniformLocation("lightPos");
-}
diff --git a/examples/quick/quickwidgets/qquickviewcomparison/fbitem.h b/examples/quick/quickwidgets/qquickviewcomparison/fbitem.h
deleted file mode 100644
index 6270e7adff..0000000000
--- a/examples/quick/quickwidgets/qquickviewcomparison/fbitem.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef FBITEM_H
-#define FBITEM_H
-
-#include <QQuickFramebufferObject>
-#include <QOpenGLVertexArrayObject>
-#include <QOpenGLBuffer>
-#include <QOpenGLShaderProgram>
-#include <QVector3D>
-#include "logo.h"
-
-struct StateBinder;
-
-class FbItemRenderer : public QQuickFramebufferObject::Renderer
-{
-public:
- FbItemRenderer(bool multisample);
- void synchronize(QQuickFramebufferObject *item) override;
- void render() override;
- QOpenGLFramebufferObject *createFramebufferObject(const QSize &size) override;
-
-private:
- void ensureInit();
- void initBuf();
- void setupVertexAttribs();
- void initProgram();
- void updateDirtyUniforms();
-
- bool m_inited;
- bool m_multisample;
- QMatrix4x4 m_proj;
- QMatrix4x4 m_camera;
- QMatrix4x4 m_baseWorld;
- QMatrix4x4 m_world;
- QOpenGLVertexArrayObject m_vao;
- QOpenGLBuffer m_logoVbo;
- Logo m_logo;
- QScopedPointer<QOpenGLShaderProgram> m_program;
- int m_projMatrixLoc;
- int m_camMatrixLoc;
- int m_worldMatrixLoc;
- int m_normalMatrixLoc;
- int m_lightPosLoc;
- QVector3D m_rotation;
-
- enum Dirty {
- DirtyProjection = 0x01,
- DirtyCamera = 0x02,
- DirtyWorld = 0x04,
- DirtyLight = 0x08,
- DirtyAll = 0xFF
- };
- int m_dirty;
-
- friend struct StateBinder;
-};
-
-class FbItem : public QQuickFramebufferObject
-{
- Q_OBJECT
- Q_PROPERTY(QVector3D eye READ eye WRITE setEye)
- Q_PROPERTY(QVector3D target READ target WRITE setTarget)
- Q_PROPERTY(QVector3D rotation READ rotation WRITE setRotation)
- Q_PROPERTY(bool multisample READ multisample WRITE setMultisample)
- QML_ELEMENT
-
-public:
- explicit FbItem(QQuickItem *parent = 0);
-
- QQuickFramebufferObject::Renderer *createRenderer() const override;
-
- QVector3D eye() const { return m_eye; }
- void setEye(const QVector3D &v);
- QVector3D target() const { return m_target; }
- void setTarget(const QVector3D &v);
-
- QVector3D rotation() const { return m_rotation; }
- void setRotation(const QVector3D &v);
-
- enum SyncState {
- CameraNeedsSync = 0x01,
- RotationNeedsSync = 0x02,
- AllNeedsSync = 0xFF
- };
- int swapSyncState();
-
- bool multisample() const { return m_multisample; }
- void setMultisample(bool m) { m_multisample = m; }
-
-private:
- QVector3D m_eye;
- QVector3D m_target;
- QVector3D m_rotation;
- int m_syncState;
- bool m_multisample;
-};
-
-#endif // FBITEM_H
diff --git a/examples/quick/quickwidgets/qquickviewcomparison/logo.cpp b/examples/quick/quickwidgets/qquickviewcomparison/logo.cpp
deleted file mode 100644
index b11c326034..0000000000
--- a/examples/quick/quickwidgets/qquickviewcomparison/logo.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "logo.h"
-#include <qmath.h>
-
-Logo::Logo()
- : m_count(0)
-{
- m_data.resize(2500 * 6);
-
- const GLfloat x1 = +0.06f;
- const GLfloat y1 = -0.14f;
- const GLfloat x2 = +0.14f;
- const GLfloat y2 = -0.06f;
- const GLfloat x3 = +0.08f;
- const GLfloat y3 = +0.00f;
- const GLfloat x4 = +0.30f;
- const GLfloat 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 int NumSectors = 100;
-
- for (int i = 0; i < NumSectors; ++i) {
- GLfloat angle = (i * 2 * M_PI) / NumSectors;
- GLfloat angleSin = qSin(angle);
- GLfloat angleCos = qCos(angle);
- const GLfloat x5 = 0.30f * angleSin;
- const GLfloat y5 = 0.30f * angleCos;
- const GLfloat x6 = 0.20f * angleSin;
- const GLfloat y6 = 0.20f * angleCos;
-
- angle = ((i + 1) * 2 * M_PI) / NumSectors;
- angleSin = qSin(angle);
- angleCos = qCos(angle);
- const GLfloat x7 = 0.20f * angleSin;
- const GLfloat y7 = 0.20f * angleCos;
- const GLfloat x8 = 0.30f * angleSin;
- const GLfloat y8 = 0.30f * angleCos;
-
- quad(x5, y5, x6, y6, x7, y7, x8, y8);
-
- extrude(x6, y6, x7, y7);
- extrude(x8, y8, x5, y5);
- }
-}
-
-void Logo::add(const QVector3D &v, const QVector3D &n)
-{
- GLfloat *p = m_data.data() + m_count;
- *p++ = v.x();
- *p++ = v.y();
- *p++ = v.z();
- *p++ = n.x();
- *p++ = n.y();
- *p++ = n.z();
- m_count += 6;
-}
-
-void Logo::quad(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2, GLfloat x3, GLfloat y3, GLfloat x4, GLfloat y4)
-{
- QVector3D n = QVector3D::normal(QVector3D(x4 - x1, y4 - y1, 0.0f), QVector3D(x2 - x1, y2 - y1, 0.0f));
-
- add(QVector3D(x1, y1, -0.05f), n);
- add(QVector3D(x4, y4, -0.05f), n);
- add(QVector3D(x2, y2, -0.05f), n);
-
- add(QVector3D(x3, y3, -0.05f), n);
- add(QVector3D(x2, y2, -0.05f), n);
- add(QVector3D(x4, y4, -0.05f), n);
-
- n = QVector3D::normal(QVector3D(x1 - x4, y1 - y4, 0.0f), QVector3D(x2 - x4, y2 - y4, 0.0f));
-
- add(QVector3D(x4, y4, 0.05f), n);
- add(QVector3D(x1, y1, 0.05f), n);
- add(QVector3D(x2, y2, 0.05f), n);
-
- add(QVector3D(x2, y2, 0.05f), n);
- add(QVector3D(x3, y3, 0.05f), n);
- add(QVector3D(x4, y4, 0.05f), n);
-}
-
-void Logo::extrude(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
-{
- QVector3D n = QVector3D::normal(QVector3D(0.0f, 0.0f, -0.1f), QVector3D(x2 - x1, y2 - y1, 0.0f));
-
- add(QVector3D(x1, y1, +0.05f), n);
- add(QVector3D(x1, y1, -0.05f), n);
- add(QVector3D(x2, y2, +0.05f), n);
-
- add(QVector3D(x2, y2, -0.05f), n);
- add(QVector3D(x2, y2, +0.05f), n);
- add(QVector3D(x1, y1, -0.05f), n);
-}
diff --git a/examples/quick/quickwidgets/qquickviewcomparison/logo.h b/examples/quick/quickwidgets/qquickviewcomparison/logo.h
deleted file mode 100644
index 7e58bbb7b7..0000000000
--- a/examples/quick/quickwidgets/qquickviewcomparison/logo.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef LOGO_H
-#define LOGO_H
-
-#include <qopengl.h>
-#include <QList>
-#include <QVector3D>
-
-class Logo
-{
-public:
- Logo();
- const GLfloat *constData() const { return m_data.constData(); }
- int count() const { return m_count; }
- int vertexCount() const { return m_count / 6; }
-
-private:
- void quad(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2, GLfloat x3, GLfloat y3, GLfloat x4, GLfloat y4);
- void extrude(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
- void add(const QVector3D &v, const QVector3D &n);
-
- QList<GLfloat> m_data;
- int m_count;
-};
-
-#endif // LOGO_H
diff --git a/examples/quick/quickwidgets/qquickviewcomparison/main.cpp b/examples/quick/quickwidgets/qquickviewcomparison/main.cpp
deleted file mode 100644
index e40c509829..0000000000
--- a/examples/quick/quickwidgets/qquickviewcomparison/main.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QApplication>
-#include <QCommandLineParser>
-#include <QCommandLineOption>
-
-#include "mainwindow.h"
-
-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
- QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGLRhi);
-
- QCoreApplication::setApplicationName("Qt QQuickView/QQuickWidget Comparison Example");
- QCoreApplication::setOrganizationName("QtProject");
- QCoreApplication::setApplicationVersion(QT_VERSION_STR);
- QCommandLineParser parser;
- parser.setApplicationDescription(QCoreApplication::applicationName());
- parser.addHelpOption();
- parser.addVersionOption();
- QCommandLineOption noRenderAlphaOption("no-render-alpha", "Do not render Alpha");
- parser.addOption(noRenderAlphaOption);
- QCommandLineOption transparentOption("transparent", "Transparent window");
- parser.addOption(transparentOption);
-
- parser.process(app);
-
- const bool transparency = parser.isSet(transparentOption);
- MainWindow widgetWindow(transparency, parser.isSet(noRenderAlphaOption));
- if (transparency) {
- widgetWindow.setAttribute(Qt::WA_TranslucentBackground);
- widgetWindow.setAttribute(Qt::WA_NoSystemBackground, false);
- }
-
- widgetWindow.resize(1024, 768);
- widgetWindow.show();
-
- return app.exec();
-}
diff --git a/examples/quick/quickwidgets/qquickviewcomparison/mainwindow.cpp b/examples/quick/quickwidgets/qquickviewcomparison/mainwindow.cpp
deleted file mode 100644
index 2e45bc2df6..0000000000
--- a/examples/quick/quickwidgets/qquickviewcomparison/mainwindow.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "mainwindow.h"
-#include "fbitem.h"
-#include <QVBoxLayout>
-#include <QGroupBox>
-#include <QRadioButton>
-#include <QCheckBox>
-#include <QLabel>
-#include <QQuickItem>
-
-MainWindow::MainWindow(bool transparency, bool noRenderAlpha)
- : m_currentView(nullptr),
- m_currentRootObject(nullptr),
- m_transparent(transparency),
- m_noRenderAlpha(noRenderAlpha)
-{
- QVBoxLayout *layout = new QVBoxLayout;
-
- QGroupBox *groupBox = new QGroupBox(tr("Type"));
- QVBoxLayout *vbox = new QVBoxLayout;
- m_radioView = new QRadioButton(tr("QQuickView in a window container (direct)"));
- m_radioWidget = new QRadioButton(tr("QQuickWidget (indirect through framebuffer objects)"));
- vbox->addWidget(m_radioWidget);
- vbox->addWidget(m_radioView);
- m_radioWidget->setChecked(true);
- m_state = Unknown;
- connect(m_radioWidget, &QRadioButton::toggled, this, &MainWindow::updateView);
- connect(m_radioView, &QRadioButton::toggled, this, &MainWindow::updateView);
- groupBox->setLayout(vbox);
-
- layout->addWidget(groupBox);
-
- m_checkboxMultiSample = new QCheckBox(tr("Multisample (4x)"));
- connect(m_checkboxMultiSample, &QCheckBox::toggled, this, &MainWindow::updateView);
- layout->addWidget(m_checkboxMultiSample);
-
- m_labelStatus = new QLabel;
- layout->addWidget(m_labelStatus);
-
- QWidget *quickContainer = new QWidget;
- layout->addWidget(quickContainer);
- layout->setStretchFactor(quickContainer, 8);
- m_containerLayout = new QVBoxLayout;
- quickContainer->setLayout(m_containerLayout);
-
- // Add an overlay widget to demonstrate that it will _not_ work with
- // QQuickView, whereas it is perfectly fine with QQuickWidget.
- QPalette semiTransparent(QColor(255,0,0,128));
- semiTransparent.setBrush(QPalette::Text, Qt::white);
- semiTransparent.setBrush(QPalette::WindowText, Qt::white);
-
- m_overlayLabel = new QLabel("This is a\nsemi-transparent\n overlay widget\nwhich is placed\non top\n of the Quick\ncontent.", this);
- m_overlayLabel->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
- m_overlayLabel->setAutoFillBackground(true);
- m_overlayLabel->setPalette(semiTransparent);
- QFont f = font();
- f.setPixelSize(QFontInfo(f).pixelSize()*2);
- f.setWeight(QFont::Bold);
- m_overlayLabel->setFont(f);
- m_overlayLabel->hide();
-
- m_checkboxOverlayVisible = new QCheckBox(tr("Show widget overlay"));
- connect(m_checkboxOverlayVisible, &QCheckBox::toggled, m_overlayLabel, &QWidget::setVisible);
- layout->addWidget(m_checkboxOverlayVisible);
-
- setLayout(layout);
-
- updateView();
-}
-
-void MainWindow::resizeEvent(QResizeEvent*)
-{
- int margin = width() / 10;
- int top = m_checkboxMultiSample->y();
- int bottom = m_checkboxOverlayVisible->geometry().bottom();
- m_overlayLabel->setGeometry(margin, top, width() - 2 * margin, bottom - top);
-}
-
-void MainWindow::switchTo(QWidget *view)
-{
- if (m_containerLayout->count())
- m_containerLayout->takeAt(0);
-
- delete m_currentView;
- m_currentView = view;
- m_containerLayout->addWidget(m_currentView);
- m_currentView->setFocus();
-}
-
-void MainWindow::updateView()
-{
- QSurfaceFormat format;
- format.setDepthBufferSize(16);
- format.setStencilBufferSize(8);
- if (m_transparent)
- format.setAlphaBufferSize(8);
- if (m_checkboxMultiSample->isChecked())
- format.setSamples(4);
-
- State state = m_radioView->isChecked() ? UseWindow : UseWidget;
-
- if (m_format == format && m_state == state)
- return;
-
- m_format = format;
- m_state = state;
-
- QString text = m_currentRootObject
- ? m_currentRootObject->property("currentText").toString()
- : QStringLiteral("Hello Qt");
-
- QUrl source("qrc:qquickviewcomparison/test.qml");
-
- if (m_state == UseWindow) {
- QQuickView *quickView = new QQuickView;
- // m_transparent is not supported here since many systems have problems with semi-transparent child windows
- quickView->setFormat(m_format);
- quickView->setResizeMode(QQuickView::SizeRootObjectToView);
- connect(quickView, &QQuickView::statusChanged, this, &MainWindow::onStatusChangedView);
- connect(quickView, &QQuickView::sceneGraphError, this, &MainWindow::onSceneGraphError);
- quickView->setSource(source);
- m_currentRootObject = quickView->rootObject();
- switchTo(QWidget::createWindowContainer(quickView));
- } else if (m_state == UseWidget) {
- QQuickWidget *quickWidget = new QQuickWidget;
- if (m_transparent)
- quickWidget->setClearColor(Qt::transparent);
- quickWidget->setFormat(m_format);
- quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
- connect(quickWidget, &QQuickWidget::statusChanged, this, &MainWindow::onStatusChangedWidget);
- connect(quickWidget, &QQuickWidget::sceneGraphError, this, &MainWindow::onSceneGraphError);
- quickWidget->setSource(source);
- switchTo(quickWidget);
- m_currentRootObject = quickWidget->rootObject();
- }
-
- if (m_currentRootObject) {
- m_currentRootObject->setProperty("currentText", text);
- m_currentRootObject->setProperty("multisample", m_checkboxMultiSample->isChecked());
- if (!m_noRenderAlpha)
- m_currentRootObject->setProperty("translucency", m_transparent);
- }
-
- m_overlayLabel->raise();
-}
-
-void MainWindow::onStatusChangedView(QQuickView::Status status)
-{
- QString s;
- switch (status) {
- case QQuickView::Null:
- s = tr("Null");
- break;
- case QQuickView::Ready:
- s = tr("Ready");
- break;
- case QQuickView::Loading:
- s = tr("Loading");
- break;
- case QQuickView::Error:
- s = tr("Error");
- break;
- default:
- s = tr("Unknown");
- break;
- }
- m_labelStatus->setText(tr("QQuickView status: %1").arg(s));
-}
-
-void MainWindow::onStatusChangedWidget(QQuickWidget::Status status)
-{
- QString s;
- switch (status) {
- case QQuickWidget::Null:
- s = tr("Null");
- break;
- case QQuickWidget::Ready:
- s = tr("Ready");
- break;
- case QQuickWidget::Loading:
- s = tr("Loading");
- break;
- case QQuickWidget::Error:
- s = tr("Error");
- break;
- default:
- s = tr("Unknown");
- break;
- }
- m_labelStatus->setText(tr("QQuickWidget status: %1").arg(s));
-}
-
-void MainWindow::onSceneGraphError(QQuickWindow::SceneGraphError error, const QString &message)
-{
- m_labelStatus->setText(tr("Scenegraph error %1: %2").arg(error).arg(message));
-}
diff --git a/examples/quick/quickwidgets/qquickviewcomparison/mainwindow.h b/examples/quick/quickwidgets/qquickviewcomparison/mainwindow.h
deleted file mode 100644
index d182b70960..0000000000
--- a/examples/quick/quickwidgets/qquickviewcomparison/mainwindow.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef MAINWINDOW_H
-#define MAINWINDOW_H
-
-#include <QWidget>
-#include <QQuickWidget>
-#include <QQuickView>
-
-QT_FORWARD_DECLARE_CLASS(QRadioButton)
-QT_FORWARD_DECLARE_CLASS(QCheckBox)
-QT_FORWARD_DECLARE_CLASS(QLabel)
-QT_FORWARD_DECLARE_CLASS(QLayout)
-
-class MainWindow : public QWidget
-{
-public:
- explicit MainWindow(bool transparency, bool noRenderAlpha);
-
-protected:
- void resizeEvent(QResizeEvent*);
-
-private slots:
- void updateView();
- void onStatusChangedView(QQuickView::Status status);
- void onStatusChangedWidget(QQuickWidget::Status status);
- void onSceneGraphError(QQuickWindow::SceneGraphError error, const QString &message);
-
-private:
- void switchTo(QWidget *view);
-
- QRadioButton *m_radioView;
- QRadioButton *m_radioWidget;
- QCheckBox *m_checkboxMultiSample;
- QLabel *m_labelStatus;
- QLayout *m_containerLayout;
- QWidget *m_currentView;
- QObject *m_currentRootObject;
- QLabel *m_overlayLabel;
- QCheckBox *m_checkboxOverlayVisible;
-
- enum State {
- Unknown,
- UseWidget,
- UseWindow
- } m_state;
-
- QSurfaceFormat m_format;
-
- bool m_transparent;
- bool m_noRenderAlpha;
-};
-
-#endif
diff --git a/examples/quick/quickwidgets/qquickviewcomparison/qquickviewcomparison.pro b/examples/quick/quickwidgets/qquickviewcomparison/qquickviewcomparison.pro
deleted file mode 100644
index 7809c20b3a..0000000000
--- a/examples/quick/quickwidgets/qquickviewcomparison/qquickviewcomparison.pro
+++ /dev/null
@@ -1,24 +0,0 @@
-TEMPLATE = app
-TARGET = qquickviewcomparison
-
-CONFIG += qmltypes
-QML_IMPORT_NAME = fbitem
-QML_IMPORT_MAJOR_VERSION = 1
-
-QT += quick widgets quickwidgets
-
-SOURCES += main.cpp \
- mainwindow.cpp \
- logo.cpp \
- fbitem.cpp
-
-HEADERS += mainwindow.h \
- logo.h \
- fbitem.h
-
-RESOURCES += qquickviewcomparison.qrc
-
-OTHER_FILES += test.qml
-
-target.path = $$[QT_INSTALL_EXAMPLES]/quick/quickwidgets/qquickviewcomparison
-INSTALLS += target
diff --git a/examples/quick/quickwidgets/qquickviewcomparison/qquickviewcomparison.qrc b/examples/quick/quickwidgets/qquickviewcomparison/qquickviewcomparison.qrc
deleted file mode 100644
index 2b259fdeec..0000000000
--- a/examples/quick/quickwidgets/qquickviewcomparison/qquickviewcomparison.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/qquickviewcomparison">
- <file>test.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/quickwidgets/qquickviewcomparison/test.qml b/examples/quick/quickwidgets/qquickviewcomparison/test.qml
deleted file mode 100644
index e142add084..0000000000
--- a/examples/quick/quickwidgets/qquickviewcomparison/test.qml
+++ /dev/null
@@ -1,228 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.2
-import QtQuick.Particles 2.0
-import fbitem 1.0
-
-Rectangle {
- id: root
- property alias currentText: edit.text
- property alias multisample: fbitem.multisample
- property bool translucency: false
-
- gradient: Gradient {
- id: grad
- GradientStop { position: 0; color: "steelblue" }
- GradientStop { position: 1; color: "black" }
- }
-
- onTranslucencyChanged: {
- if (translucency) {
- root.color = "transparent";
- root.gradient = null;
- } else {
- root.color = "white";
- root.gradient = grad;
- }
- }
-
- ParticleSystem {
- anchors.fill: parent
- running: true
-
- ImageParticle {
- source: "qrc:///particleresources/glowdot.png"
- alpha: 0
- colorVariation: 1
- }
-
- Emitter {
- anchors.fill: parent
- lifeSpan: 3000
- emitRate: 30
- size: 50
- sizeVariation: 10
- velocity: PointDirection { xVariation: 10; yVariation: 10; }
- acceleration: PointDirection {
- y: -10
- xVariation: 5
- yVariation: 5
- }
- }
- }
-
- Rectangle {
- y: 10
- width: parent.width / 2
- height: edit.contentHeight + 4
- anchors.horizontalCenter: parent.horizontalCenter
- border.color: "gray"
- border.width: 2
- radius: 8
- color: "lightGray"
- clip: true
- TextInput {
- id: edit
- anchors.horizontalCenter: parent.horizontalCenter
- maximumLength: 30
- focus: true
- font.pointSize: 20
- }
- }
-
- FbItem {
- id: fbitem
- anchors.fill: parent
- SequentialAnimation on eye.y {
- loops: Animation.Infinite
- NumberAnimation {
- from: 0
- to: 0.15
- duration: 1000
- }
- NumberAnimation {
- from: 0.15
- to: 0
- duration: 2000
- }
- }
- SequentialAnimation on eye.x {
- loops: Animation.Infinite
- NumberAnimation {
- from: 0
- to: -0.5
- duration: 3000
- }
- NumberAnimation {
- from: -0.5
- to: 0.5
- duration: 3000
- easing.type: Easing.OutQuad
- }
- NumberAnimation {
- from: 0.5
- to: 0
- duration: 1000
- }
- }
- SequentialAnimation on rotation.y {
- loops: Animation.Infinite
- NumberAnimation {
- from: 0
- to: 360
- duration: 5000
- }
- NumberAnimation {
- from: 360
- to: 0
- duration: 2500
- }
- }
- SequentialAnimation on rotation.x {
- loops: Animation.Infinite
- NumberAnimation {
- from: 0
- to: 360
- duration: 6000
- }
- NumberAnimation {
- from: 360
- to: 0
- duration: 3000
- }
- }
- }
-
- Text {
- id: effText
- text: edit.text
- anchors.centerIn: parent
- font.pointSize: 60
- style: Text.Outline
- styleColor: "green"
- }
-
- ShaderEffectSource {
- id: effSource
- sourceItem: effText
- hideSource: true
- }
-
- ShaderEffect {
- SequentialAnimation on scale {
- loops: Animation.Infinite
- NumberAnimation { from: 1.0; to: 2.0; duration: 1000; easing.type: Easing.InCirc }
- PauseAnimation { duration: 1000 }
- NumberAnimation { from: 2.0; to: 0.5; duration: 1000; easing.type: Easing.OutExpo }
- NumberAnimation { from: 0.5; to: 1.0; duration: 500 }
- PauseAnimation { duration: 1000 }
- }
- width: effText.width
- height: effText.height
- anchors.centerIn: parent
- property variant source: effSource
- property real amplitude: 0.002
- property real frequency: 10
- property real time: 0
- NumberAnimation on time { loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 1000 }
- fragmentShader:
- "uniform lowp float qt_Opacity;" +
- "uniform highp float amplitude;" +
- "uniform highp float frequency;" +
- "uniform highp float time;" +
- "uniform sampler2D source;" +
- "varying highp vec2 qt_TexCoord0;" +
- "void main() {" +
- " highp vec2 p = sin(time + frequency * qt_TexCoord0);" +
- " gl_FragColor = texture2D(source, qt_TexCoord0 + amplitude * vec2(p.y, -p.x)) * qt_Opacity;" +
- "}"
- }
-}
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt
new file mode 100644
index 0000000000..aa1cd2f0cc
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt
@@ -0,0 +1,57 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(qquickwidgetversuswindow_opengl LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickWidgets ShaderTools Widgets)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(qquickwidgetversuswindow_opengl
+ WIN32
+ MACOSX_BUNDLE
+ fbitem.cpp fbitem.h
+ logo.cpp logo.h
+ main.cpp
+ mainwindow.cpp mainwindow.h
+)
+
+target_link_libraries(qquickwidgetversuswindow_opengl PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickWidgets
+ Qt6::Widgets
+)
+
+qt_add_qml_module(qquickwidgetversuswindow_opengl
+ URI fbitem
+ QML_FILES test.qml
+ RESOURCE_PREFIX /qquickwidgetversuswindow_opengl
+ NO_RESOURCE_TARGET_PATH
+)
+
+qt6_add_shaders(qquickwidgetversuswindow_opengl "shaders"
+ PRECOMPILE
+ OPTIMIZED
+ PREFIX
+ "/qquickwidgetversuswindow_opengl"
+ FILES
+ "wobble.frag"
+)
+
+install(TARGETS qquickwidgetversuswindow_opengl
+ 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/images/qquickwidgetversuswindow-opengl-example.jpg b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/images/qquickwidgetversuswindow-opengl-example.jpg
new file mode 100644
index 0000000000..584ac4ed69
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/images/qquickwidgetversuswindow-opengl-example.jpg
Binary files differ
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc
new file mode 100644
index 0000000000..ced0eb2d34
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \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
+ QWidget-based user interface using two different approaches: one is using a
+ QQuickView and using it as a child window and
+ QWidget::createWindowContainer(). The other is using QQuickWidget which
+ acts as a true QWidget and supports, among others, better clipping and
+ stacking, as is expected from a true QWidget.
+
+ The Qt Quick scene also uses direct OpenGL rendering, proving that with
+ QQuickWidget the rendering still happens using the accelerated 3D API. The
+ implication of this is that the example is tied to OpenGL and will not work
+ with other graphics APIs (Vulkan, Metal, Direct 3D).
+
+ Clicking on the Show Overlay checkbox demonstrates a widget stacking case
+ that is not rendering as expected when embedding a native window, while
+ QQuickWidget makes it render as expected.
+
+ Multisample antialiasing can also be exercised. When enabling it via the
+ corresponding checkbox, QQuickWidget will internally render into a
+ multisample renderbuffer, which is then resolved into a regular,
+ non-multisample 2D texture after each render pass, thus enabling
+ multisampling for the Qt Quick content without affecting the rest of the
+ QWidget UI. With QQuickView the native window will request multisampling
+ for its corresponding window surface, bringing similar results, if
+ supported by the platform.
+
+ The Qt Quick scene is interactive: typing into the text field is possible
+ regardless of which embedding technology is used. QQuickWidget takes care
+ of forwarding input events to the underlying Qt Quick scene automatically.
+*/
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/fbitem.cpp b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/fbitem.cpp
new file mode 100644
index 0000000000..3c680095c9
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/fbitem.cpp
@@ -0,0 +1,239 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "fbitem.h"
+#include <QOpenGLFramebufferObject>
+#include <QOpenGLFunctions>
+#include <QMatrix4x4>
+
+FbItem::FbItem(QQuickItem *parent)
+ : QQuickFramebufferObject(parent),
+ m_target(0, 0, -1),
+ m_syncState(AllNeedsSync),
+ m_multisample(false)
+{
+}
+
+QQuickFramebufferObject::Renderer *FbItem::createRenderer() const
+{
+ return new FbItemRenderer(m_multisample);
+}
+
+void FbItem::setEye(const QVector3D &v)
+{
+ if (m_eye != v) {
+ m_eye = v;
+ m_syncState |= CameraNeedsSync;
+ update();
+ }
+}
+
+void FbItem::setTarget(const QVector3D &v)
+{
+ if (m_target != v) {
+ m_target = v;
+ m_syncState |= CameraNeedsSync;
+ update();
+ }
+}
+
+void FbItem::setRotation(const QVector3D &v)
+{
+ if (m_rotation != v) {
+ m_rotation = v;
+ m_syncState |= RotationNeedsSync;
+ update();
+ }
+}
+
+int FbItem::swapSyncState()
+{
+ int s = m_syncState;
+ m_syncState = 0;
+ return s;
+}
+
+FbItemRenderer::FbItemRenderer(bool multisample)
+ : m_inited(false),
+ m_multisample(multisample),
+ m_dirty(DirtyAll)
+{
+ m_camera.setToIdentity();
+ m_baseWorld.setToIdentity();
+ m_baseWorld.translate(0, 0, -1);
+ m_world = m_baseWorld;
+}
+
+void FbItemRenderer::synchronize(QQuickFramebufferObject *qfbitem)
+{
+ FbItem *item = static_cast<FbItem *>(qfbitem);
+ int syncState = item->swapSyncState();
+ if (syncState & FbItem::CameraNeedsSync) {
+ m_camera.setToIdentity();
+ m_camera.lookAt(item->eye(), item->eye() + item->target(), QVector3D(0, 1, 0));
+ m_dirty |= DirtyCamera;
+ }
+ if (syncState & FbItem::RotationNeedsSync) {
+ m_rotation = item->rotation();
+ m_dirty |= DirtyWorld;
+ }
+}
+
+struct StateBinder
+{
+ StateBinder(FbItemRenderer *r)
+ : m_r(r) {
+ QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
+ f->glEnable(GL_DEPTH_TEST);
+ f->glEnable(GL_CULL_FACE);
+ f->glDepthMask(GL_TRUE);
+ f->glDepthFunc(GL_LESS);
+ f->glFrontFace(GL_CCW);
+ f->glCullFace(GL_BACK);
+ m_r->m_program->bind();
+ }
+ ~StateBinder() {
+ QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
+ m_r->m_program->release();
+ f->glDisable(GL_CULL_FACE);
+ f->glDisable(GL_DEPTH_TEST);
+ }
+ FbItemRenderer *m_r;
+};
+
+void FbItemRenderer::updateDirtyUniforms()
+{
+ if (m_dirty & DirtyProjection)
+ m_program->setUniformValue(m_projMatrixLoc, m_proj);
+
+ if (m_dirty & DirtyCamera)
+ m_program->setUniformValue(m_camMatrixLoc, m_camera);
+
+ if (m_dirty & DirtyWorld) {
+ m_program->setUniformValue(m_worldMatrixLoc, m_world);
+ QMatrix3x3 normalMatrix = m_world.normalMatrix();
+ m_program->setUniformValue(m_normalMatrixLoc, normalMatrix);
+ }
+
+ if (m_dirty & DirtyLight)
+ m_program->setUniformValue(m_lightPosLoc, QVector3D(0, 0, 70));
+
+ m_dirty = 0;
+}
+
+void FbItemRenderer::render()
+{
+ ensureInit();
+
+ if (m_vao.isCreated())
+ m_vao.bind();
+ else
+ setupVertexAttribs();
+
+ StateBinder state(this);
+
+ QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
+ f->glClearColor(0, 0, 0, 0);
+ f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ if (m_dirty & DirtyWorld) {
+ m_world = m_baseWorld;
+ m_world.rotate(m_rotation.x(), 1, 0, 0);
+ m_world.rotate(m_rotation.y(), 0, 1, 0);
+ m_world.rotate(m_rotation.z(), 0, 0, 1);
+ }
+
+ updateDirtyUniforms();
+
+ f->glDrawArrays(GL_TRIANGLES, 0, m_logo.vertexCount());
+
+ if (m_vao.isCreated())
+ m_vao.release();
+}
+
+QOpenGLFramebufferObject *FbItemRenderer::createFramebufferObject(const QSize &size)
+{
+ m_dirty |= DirtyProjection;
+ m_proj.setToIdentity();
+ m_proj.perspective(45.0f, GLfloat(size.width()) / size.height(), 0.01f, 100.0f);
+
+ QOpenGLFramebufferObjectFormat format;
+ format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
+ format.setSamples(m_multisample ? 4 : 0);
+ return new QOpenGLFramebufferObject(size, format);
+}
+
+void FbItemRenderer::ensureInit()
+{
+ if (m_inited)
+ return;
+
+ m_inited = true;
+
+ initBuf();
+ initProgram();
+}
+
+void FbItemRenderer::initBuf()
+{
+ QOpenGLVertexArrayObject::Binder vaoBinder(&m_vao);
+
+ m_logoVbo.create();
+ m_logoVbo.bind();
+ m_logoVbo.allocate(m_logo.constData(), m_logo.count() * sizeof(GLfloat));
+
+ setupVertexAttribs();
+}
+
+void FbItemRenderer::setupVertexAttribs()
+{
+ m_logoVbo.bind();
+ QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
+ f->glEnableVertexAttribArray(0);
+ f->glEnableVertexAttribArray(1);
+ f->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), nullptr);
+ f->glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), reinterpret_cast<void *>(3 * sizeof(GLfloat)));
+ m_logoVbo.release();
+}
+
+static const char *vertexShaderSource =
+ "attribute vec4 vertex;\n"
+ "attribute vec3 normal;\n"
+ "varying vec3 vert;\n"
+ "varying vec3 vertNormal;\n"
+ "uniform mat4 projMatrix;\n"
+ "uniform mat4 camMatrix;\n"
+ "uniform mat4 worldMatrix;\n"
+ "uniform mat3 normalMatrix;\n"
+ "void main() {\n"
+ " vert = vertex.xyz;\n"
+ " vertNormal = normalMatrix * normal;\n"
+ " gl_Position = projMatrix * camMatrix * worldMatrix * vertex;\n"
+ "}\n";
+
+static const char *fragmentShaderSource =
+ "varying highp vec3 vert;\n"
+ "varying highp vec3 vertNormal;\n"
+ "uniform highp vec3 lightPos;\n"
+ "void main() {\n"
+ " highp vec3 L = normalize(lightPos - vert);\n"
+ " highp float NL = max(dot(normalize(vertNormal), L), 0.0);\n"
+ " highp vec3 color = vec3(0.39, 1.0, 0.0);\n"
+ " highp vec3 col = clamp(color * 0.2 + color * 0.8 * NL, 0.0, 1.0);\n"
+ " gl_FragColor = vec4(col, 1.0);\n"
+ "}\n";
+
+void FbItemRenderer::initProgram()
+{
+ m_program.reset(new QOpenGLShaderProgram);
+ m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
+ m_program->addCacheableShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
+ m_program->bindAttributeLocation("vertex", 0);
+ m_program->bindAttributeLocation("normal", 1);
+ m_program->link();
+ m_projMatrixLoc = m_program->uniformLocation("projMatrix");
+ m_camMatrixLoc = m_program->uniformLocation("camMatrix");
+ m_worldMatrixLoc = m_program->uniformLocation("worldMatrix");
+ m_normalMatrixLoc = m_program->uniformLocation("normalMatrix");
+ m_lightPosLoc = m_program->uniformLocation("lightPos");
+}
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/fbitem.h b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/fbitem.h
new file mode 100644
index 0000000000..d8c168d9d1
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/fbitem.h
@@ -0,0 +1,100 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef FBITEM_H
+#define FBITEM_H
+
+#include <QQuickFramebufferObject>
+#include <QOpenGLVertexArrayObject>
+#include <QOpenGLBuffer>
+#include <QOpenGLShaderProgram>
+#include <QVector3D>
+#include "logo.h"
+
+struct StateBinder;
+
+class FbItemRenderer : public QQuickFramebufferObject::Renderer
+{
+public:
+ FbItemRenderer(bool multisample);
+ void synchronize(QQuickFramebufferObject *item) override;
+ void render() override;
+ QOpenGLFramebufferObject *createFramebufferObject(const QSize &size) override;
+
+private:
+ void ensureInit();
+ void initBuf();
+ void setupVertexAttribs();
+ void initProgram();
+ void updateDirtyUniforms();
+
+ bool m_inited;
+ bool m_multisample;
+ QMatrix4x4 m_proj;
+ QMatrix4x4 m_camera;
+ QMatrix4x4 m_baseWorld;
+ QMatrix4x4 m_world;
+ QOpenGLVertexArrayObject m_vao;
+ QOpenGLBuffer m_logoVbo;
+ Logo m_logo;
+ QScopedPointer<QOpenGLShaderProgram> m_program;
+ int m_projMatrixLoc;
+ int m_camMatrixLoc;
+ int m_worldMatrixLoc;
+ int m_normalMatrixLoc;
+ int m_lightPosLoc;
+ QVector3D m_rotation;
+
+ enum Dirty {
+ DirtyProjection = 0x01,
+ DirtyCamera = 0x02,
+ DirtyWorld = 0x04,
+ DirtyLight = 0x08,
+ DirtyAll = 0xFF
+ };
+ int m_dirty;
+
+ friend struct StateBinder;
+};
+
+class FbItem : public QQuickFramebufferObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QVector3D eye READ eye WRITE setEye)
+ Q_PROPERTY(QVector3D target READ target WRITE setTarget)
+ Q_PROPERTY(QVector3D rotation READ rotation WRITE setRotation)
+ Q_PROPERTY(bool multisample READ multisample WRITE setMultisample)
+ QML_ELEMENT
+
+public:
+ explicit FbItem(QQuickItem *parent = nullptr);
+
+ QQuickFramebufferObject::Renderer *createRenderer() const override;
+
+ QVector3D eye() const { return m_eye; }
+ void setEye(const QVector3D &v);
+ QVector3D target() const { return m_target; }
+ void setTarget(const QVector3D &v);
+
+ QVector3D rotation() const { return m_rotation; }
+ void setRotation(const QVector3D &v);
+
+ enum SyncState {
+ CameraNeedsSync = 0x01,
+ RotationNeedsSync = 0x02,
+ AllNeedsSync = 0xFF
+ };
+ int swapSyncState();
+
+ bool multisample() const { return m_multisample; }
+ void setMultisample(bool m) { m_multisample = m; }
+
+private:
+ QVector3D m_eye;
+ QVector3D m_target;
+ QVector3D m_rotation;
+ int m_syncState;
+ bool m_multisample;
+};
+
+#endif // FBITEM_H
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/logo.cpp b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/logo.cpp
new file mode 100644
index 0000000000..ce74d82911
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/logo.cpp
@@ -0,0 +1,104 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "logo.h"
+#include <qmath.h>
+
+Logo::Logo()
+ : m_count(0)
+{
+ m_data.resize(2500 * 6);
+
+ const GLfloat x1 = +0.06f;
+ const GLfloat y1 = -0.14f;
+ const GLfloat x2 = +0.14f;
+ const GLfloat y2 = -0.06f;
+ const GLfloat x3 = +0.08f;
+ const GLfloat y3 = +0.00f;
+ const GLfloat x4 = +0.30f;
+ const GLfloat 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 int NumSectors = 100;
+
+ for (int i = 0; i < NumSectors; ++i) {
+ GLfloat angle = (i * 2 * M_PI) / NumSectors;
+ GLfloat angleSin = qSin(angle);
+ GLfloat angleCos = qCos(angle);
+ const GLfloat x5 = 0.30f * angleSin;
+ const GLfloat y5 = 0.30f * angleCos;
+ const GLfloat x6 = 0.20f * angleSin;
+ const GLfloat y6 = 0.20f * angleCos;
+
+ angle = ((i + 1) * 2 * M_PI) / NumSectors;
+ angleSin = qSin(angle);
+ angleCos = qCos(angle);
+ const GLfloat x7 = 0.20f * angleSin;
+ const GLfloat y7 = 0.20f * angleCos;
+ const GLfloat x8 = 0.30f * angleSin;
+ const GLfloat y8 = 0.30f * angleCos;
+
+ quad(x5, y5, x6, y6, x7, y7, x8, y8);
+
+ extrude(x6, y6, x7, y7);
+ extrude(x8, y8, x5, y5);
+ }
+}
+
+void Logo::add(const QVector3D &v, const QVector3D &n)
+{
+ GLfloat *p = m_data.data() + m_count;
+ *p++ = v.x();
+ *p++ = v.y();
+ *p++ = v.z();
+ *p++ = n.x();
+ *p++ = n.y();
+ *p++ = n.z();
+ m_count += 6;
+}
+
+void Logo::quad(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2, GLfloat x3, GLfloat y3, GLfloat x4, GLfloat y4)
+{
+ QVector3D n = QVector3D::normal(QVector3D(x4 - x1, y4 - y1, 0.0f), QVector3D(x2 - x1, y2 - y1, 0.0f));
+
+ add(QVector3D(x1, y1, -0.05f), n);
+ add(QVector3D(x4, y4, -0.05f), n);
+ add(QVector3D(x2, y2, -0.05f), n);
+
+ add(QVector3D(x3, y3, -0.05f), n);
+ add(QVector3D(x2, y2, -0.05f), n);
+ add(QVector3D(x4, y4, -0.05f), n);
+
+ n = QVector3D::normal(QVector3D(x1 - x4, y1 - y4, 0.0f), QVector3D(x2 - x4, y2 - y4, 0.0f));
+
+ add(QVector3D(x4, y4, 0.05f), n);
+ add(QVector3D(x1, y1, 0.05f), n);
+ add(QVector3D(x2, y2, 0.05f), n);
+
+ add(QVector3D(x2, y2, 0.05f), n);
+ add(QVector3D(x3, y3, 0.05f), n);
+ add(QVector3D(x4, y4, 0.05f), n);
+}
+
+void Logo::extrude(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+{
+ QVector3D n = QVector3D::normal(QVector3D(0.0f, 0.0f, -0.1f), QVector3D(x2 - x1, y2 - y1, 0.0f));
+
+ add(QVector3D(x1, y1, +0.05f), n);
+ add(QVector3D(x1, y1, -0.05f), n);
+ add(QVector3D(x2, y2, +0.05f), n);
+
+ add(QVector3D(x2, y2, -0.05f), n);
+ add(QVector3D(x2, y2, +0.05f), n);
+ add(QVector3D(x1, y1, -0.05f), n);
+}
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/logo.h b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/logo.h
new file mode 100644
index 0000000000..25479de14d
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/logo.h
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef LOGO_H
+#define LOGO_H
+
+#include <qopengl.h>
+#include <QList>
+#include <QVector3D>
+
+class Logo
+{
+public:
+ Logo();
+ const GLfloat *constData() const { return m_data.constData(); }
+ int count() const { return m_count; }
+ int vertexCount() const { return m_count / 6; }
+
+private:
+ void quad(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2, GLfloat x3, GLfloat y3, GLfloat x4, GLfloat y4);
+ void extrude(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
+ void add(const QVector3D &v, const QVector3D &n);
+
+ QList<GLfloat> m_data;
+ int m_count;
+};
+
+#endif // LOGO_H
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp
new file mode 100644
index 0000000000..8d8e4236b9
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp
@@ -0,0 +1,42 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+#include <QCommandLineParser>
+#include <QCommandLineOption>
+
+#include "mainwindow.h"
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ // this example and QQuickWidget are only functional when rendering with OpenGL
+ QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);
+
+ QCoreApplication::setApplicationName("Qt QQuickView/QQuickWidget Comparison Example");
+ QCoreApplication::setOrganizationName("QtProject");
+ QCoreApplication::setApplicationVersion(QT_VERSION_STR);
+ QCommandLineParser parser;
+ parser.setApplicationDescription(QCoreApplication::applicationName());
+ parser.addHelpOption();
+ parser.addVersionOption();
+ QCommandLineOption noRenderAlphaOption("no-render-alpha", "Do not render Alpha");
+ parser.addOption(noRenderAlphaOption);
+ QCommandLineOption transparentOption("transparent", "Transparent window");
+ parser.addOption(transparentOption);
+
+ parser.process(app);
+
+ const bool transparency = parser.isSet(transparentOption);
+ MainWindow widgetWindow(transparency, parser.isSet(noRenderAlphaOption));
+ if (transparency) {
+ widgetWindow.setAttribute(Qt::WA_TranslucentBackground);
+ widgetWindow.setAttribute(Qt::WA_NoSystemBackground, false);
+ }
+
+ widgetWindow.resize(1024, 768);
+ widgetWindow.show();
+
+ return app.exec();
+}
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/mainwindow.cpp b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/mainwindow.cpp
new file mode 100644
index 0000000000..18bc393ddd
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/mainwindow.cpp
@@ -0,0 +1,198 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+#include "fbitem.h"
+#include <QVBoxLayout>
+#include <QGroupBox>
+#include <QRadioButton>
+#include <QCheckBox>
+#include <QLabel>
+#include <QQuickItem>
+
+MainWindow::MainWindow(bool transparency, bool noRenderAlpha)
+ : m_currentView(nullptr),
+ m_currentRootObject(nullptr),
+ m_transparent(transparency),
+ m_noRenderAlpha(noRenderAlpha)
+{
+ auto *layout = new QVBoxLayout;
+
+ QGroupBox *groupBox = new QGroupBox(tr("Type"));
+ auto *vbox = new QVBoxLayout;
+ m_radioView = new QRadioButton(tr("QQuickView in a window container (direct)"));
+ m_radioWidget = new QRadioButton(tr("QQuickWidget (indirect through framebuffer objects)"));
+ vbox->addWidget(m_radioWidget);
+ vbox->addWidget(m_radioView);
+ m_radioWidget->setChecked(true);
+ m_state = Unknown;
+ connect(m_radioWidget, &QRadioButton::toggled, this, &MainWindow::updateView);
+ connect(m_radioView, &QRadioButton::toggled, this, &MainWindow::updateView);
+ groupBox->setLayout(vbox);
+
+ layout->addWidget(groupBox);
+
+ m_checkboxMultiSample = new QCheckBox(tr("Multisample (4x)"));
+ connect(m_checkboxMultiSample, &QCheckBox::toggled, this, &MainWindow::updateView);
+ layout->addWidget(m_checkboxMultiSample);
+
+ m_labelStatus = new QLabel;
+ layout->addWidget(m_labelStatus);
+
+ QWidget *quickContainer = new QWidget;
+ layout->addWidget(quickContainer);
+ layout->setStretchFactor(quickContainer, 8);
+ m_containerLayout = new QVBoxLayout;
+ quickContainer->setLayout(m_containerLayout);
+
+ // Add an overlay widget to demonstrate that it will _not_ work with
+ // QQuickView, whereas it is perfectly fine with QQuickWidget.
+ QPalette semiTransparent(QColor(255,0,0,128));
+ semiTransparent.setBrush(QPalette::Text, Qt::white);
+ semiTransparent.setBrush(QPalette::WindowText, Qt::white);
+
+ m_overlayLabel = new QLabel("This is a\nsemi-transparent\n overlay widget\nwhich is placed\non top\n of the Quick\ncontent.", this);
+ m_overlayLabel->setAlignment(Qt::AlignHCenter | Qt::AlignTop);
+ m_overlayLabel->setAutoFillBackground(true);
+ m_overlayLabel->setPalette(semiTransparent);
+ QFont f = font();
+ f.setPixelSize(QFontInfo(f).pixelSize()*2);
+ f.setWeight(QFont::Bold);
+ m_overlayLabel->setFont(f);
+ m_overlayLabel->hide();
+
+ m_checkboxOverlayVisible = new QCheckBox(tr("Show widget overlay"));
+ connect(m_checkboxOverlayVisible, &QCheckBox::toggled, m_overlayLabel, &QWidget::setVisible);
+ layout->addWidget(m_checkboxOverlayVisible);
+
+ setLayout(layout);
+
+ updateView();
+}
+
+void MainWindow::resizeEvent(QResizeEvent*)
+{
+ int margin = width() / 10;
+ int top = m_checkboxMultiSample->y();
+ int bottom = m_checkboxOverlayVisible->geometry().bottom();
+ m_overlayLabel->setGeometry(margin, top, width() - 2 * margin, bottom - top);
+}
+
+void MainWindow::switchTo(QWidget *view)
+{
+ if (m_containerLayout->count())
+ m_containerLayout->takeAt(0);
+
+ delete m_currentView;
+ m_currentView = view;
+ m_containerLayout->addWidget(m_currentView);
+ m_currentView->setFocus();
+}
+
+void MainWindow::updateView()
+{
+ QSurfaceFormat format;
+ format.setDepthBufferSize(16);
+ format.setStencilBufferSize(8);
+ if (m_transparent)
+ format.setAlphaBufferSize(8);
+ if (m_checkboxMultiSample->isChecked())
+ format.setSamples(4);
+
+ State state = m_radioView->isChecked() ? UseWindow : UseWidget;
+
+ if (m_format == format && m_state == state)
+ return;
+
+ m_format = format;
+ m_state = state;
+
+ QString text = m_currentRootObject
+ ? m_currentRootObject->property("currentText").toString()
+ : QStringLiteral("Hello Qt");
+
+ QUrl source("qrc:qquickwidgetversuswindow_opengl/test.qml");
+
+ if (m_state == UseWindow) {
+ auto *quickView = new QQuickView;
+ // m_transparent is not supported here since many systems have problems with semi-transparent child windows
+ quickView->setFormat(m_format);
+ quickView->setResizeMode(QQuickView::SizeRootObjectToView);
+ connect(quickView, &QQuickView::statusChanged, this, &MainWindow::onStatusChangedView);
+ connect(quickView, &QQuickView::sceneGraphError, this, &MainWindow::onSceneGraphError);
+ quickView->setSource(source);
+ m_currentRootObject = quickView->rootObject();
+ switchTo(QWidget::createWindowContainer(quickView));
+ } else if (m_state == UseWidget) {
+ auto *quickWidget = new QQuickWidget;
+ if (m_transparent)
+ quickWidget->setClearColor(Qt::transparent);
+ quickWidget->setFormat(m_format);
+ quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
+ connect(quickWidget, &QQuickWidget::statusChanged, this, &MainWindow::onStatusChangedWidget);
+ connect(quickWidget, &QQuickWidget::sceneGraphError, this, &MainWindow::onSceneGraphError);
+ quickWidget->setSource(source);
+ switchTo(quickWidget);
+ m_currentRootObject = quickWidget->rootObject();
+ }
+
+ if (m_currentRootObject) {
+ m_currentRootObject->setProperty("currentText", text);
+ m_currentRootObject->setProperty("multisample", m_checkboxMultiSample->isChecked());
+ if (!m_noRenderAlpha)
+ m_currentRootObject->setProperty("translucency", m_transparent);
+ }
+
+ m_overlayLabel->raise();
+}
+
+void MainWindow::onStatusChangedView(QQuickView::Status status)
+{
+ QString s;
+ switch (status) {
+ case QQuickView::Null:
+ s = tr("Null");
+ break;
+ case QQuickView::Ready:
+ s = tr("Ready");
+ break;
+ case QQuickView::Loading:
+ s = tr("Loading");
+ break;
+ case QQuickView::Error:
+ s = tr("Error");
+ break;
+ default:
+ s = tr("Unknown");
+ break;
+ }
+ m_labelStatus->setText(tr("QQuickView status: %1").arg(s));
+}
+
+void MainWindow::onStatusChangedWidget(QQuickWidget::Status status)
+{
+ QString s;
+ switch (status) {
+ case QQuickWidget::Null:
+ s = tr("Null");
+ break;
+ case QQuickWidget::Ready:
+ s = tr("Ready");
+ break;
+ case QQuickWidget::Loading:
+ s = tr("Loading");
+ break;
+ case QQuickWidget::Error:
+ s = tr("Error");
+ break;
+ default:
+ s = tr("Unknown");
+ break;
+ }
+ m_labelStatus->setText(tr("QQuickWidget status: %1").arg(s));
+}
+
+void MainWindow::onSceneGraphError(QQuickWindow::SceneGraphError error, const QString &message)
+{
+ m_labelStatus->setText(tr("Scenegraph error %1: %2").arg(error).arg(message));
+}
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/mainwindow.h b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/mainwindow.h
new file mode 100644
index 0000000000..24d8bf3b35
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/mainwindow.h
@@ -0,0 +1,55 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QWidget>
+#include <QQuickWidget>
+#include <QQuickView>
+
+QT_FORWARD_DECLARE_CLASS(QRadioButton)
+QT_FORWARD_DECLARE_CLASS(QCheckBox)
+QT_FORWARD_DECLARE_CLASS(QLabel)
+QT_FORWARD_DECLARE_CLASS(QLayout)
+
+class MainWindow : public QWidget
+{
+public:
+ explicit MainWindow(bool transparency, bool noRenderAlpha);
+
+protected:
+ void resizeEvent(QResizeEvent*);
+
+private slots:
+ void updateView();
+ void onStatusChangedView(QQuickView::Status status);
+ void onStatusChangedWidget(QQuickWidget::Status status);
+ void onSceneGraphError(QQuickWindow::SceneGraphError error, const QString &message);
+
+private:
+ void switchTo(QWidget *view);
+
+ QRadioButton *m_radioView;
+ QRadioButton *m_radioWidget;
+ QCheckBox *m_checkboxMultiSample;
+ QLabel *m_labelStatus;
+ QLayout *m_containerLayout;
+ QWidget *m_currentView;
+ QObject *m_currentRootObject;
+ QLabel *m_overlayLabel;
+ QCheckBox *m_checkboxOverlayVisible;
+
+ enum State {
+ Unknown,
+ UseWidget,
+ UseWindow
+ } m_state;
+
+ QSurfaceFormat m_format;
+
+ bool m_transparent;
+ bool m_noRenderAlpha;
+};
+
+#endif
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/qquickwidgetversuswindow_opengl.pro b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/qquickwidgetversuswindow_opengl.pro
new file mode 100644
index 0000000000..42930b1ecd
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/qquickwidgetversuswindow_opengl.pro
@@ -0,0 +1,24 @@
+TEMPLATE = app
+TARGET = qquickwidgetversuswindow_opengl
+
+CONFIG += qmltypes
+QML_IMPORT_NAME = fbitem
+QML_IMPORT_MAJOR_VERSION = 1
+
+QT += quick widgets quickwidgets
+
+SOURCES += main.cpp \
+ mainwindow.cpp \
+ logo.cpp \
+ fbitem.cpp
+
+HEADERS += mainwindow.h \
+ logo.h \
+ fbitem.h
+
+RESOURCES += qquickwidgetversuswindow_opengl.qrc
+
+OTHER_FILES += test.qml
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quick/quickwidgets/qquickwidgetversuswindow_opengl
+INSTALLS += target
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/qquickwidgetversuswindow_opengl.qrc b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/qquickwidgetversuswindow_opengl.qrc
new file mode 100644
index 0000000000..4650ef97e8
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/qquickwidgetversuswindow_opengl.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/qquickwidgetversuswindow_opengl">
+ <file>test.qml</file>
+ <file>wobble.frag.qsb</file>
+ </qresource>
+</RCC>
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/test.qml b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/test.qml
new file mode 100644
index 0000000000..a7e30e8917
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/test.qml
@@ -0,0 +1,171 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+import fbitem
+
+Rectangle {
+ id: root
+ property alias currentText: edit.text
+ property alias multisample: fbitem.multisample
+ property bool translucency: false
+
+ gradient: Gradient {
+ id: grad
+ GradientStop { position: 0; color: "steelblue" }
+ GradientStop { position: 1; color: "black" }
+ }
+
+ onTranslucencyChanged: {
+ if (translucency) {
+ root.color = "transparent";
+ root.gradient = null;
+ } else {
+ root.color = "white";
+ root.gradient = grad;
+ }
+ }
+
+ ParticleSystem {
+ anchors.fill: parent
+ running: true
+
+ ImageParticle {
+ source: "qrc:///particleresources/glowdot.png"
+ alpha: 0
+ colorVariation: 1
+ }
+
+ Emitter {
+ anchors.fill: parent
+ lifeSpan: 3000
+ emitRate: 30
+ size: 50
+ sizeVariation: 10
+ velocity: PointDirection { xVariation: 10; yVariation: 10; }
+ acceleration: PointDirection {
+ y: -10
+ xVariation: 5
+ yVariation: 5
+ }
+ }
+ }
+
+ Rectangle {
+ y: 10
+ width: parent.width / 2
+ height: edit.contentHeight + 4
+ anchors.horizontalCenter: parent.horizontalCenter
+ border.color: "gray"
+ border.width: 2
+ radius: 8
+ color: "lightGray"
+ clip: true
+ TextInput {
+ id: edit
+ anchors.horizontalCenter: parent.horizontalCenter
+ maximumLength: 30
+ focus: true
+ font.pointSize: 20
+ }
+ }
+
+ FbItem {
+ id: fbitem
+ anchors.fill: parent
+ SequentialAnimation on eye.y {
+ loops: Animation.Infinite
+ NumberAnimation {
+ from: 0
+ to: 0.15
+ duration: 1000
+ }
+ NumberAnimation {
+ from: 0.15
+ to: 0
+ duration: 2000
+ }
+ }
+ SequentialAnimation on eye.x {
+ loops: Animation.Infinite
+ NumberAnimation {
+ from: 0
+ to: -0.5
+ duration: 3000
+ }
+ NumberAnimation {
+ from: -0.5
+ to: 0.5
+ duration: 3000
+ easing.type: Easing.OutQuad
+ }
+ NumberAnimation {
+ from: 0.5
+ to: 0
+ duration: 1000
+ }
+ }
+ SequentialAnimation on rotation.y {
+ loops: Animation.Infinite
+ NumberAnimation {
+ from: 0
+ to: 360
+ duration: 5000
+ }
+ NumberAnimation {
+ from: 360
+ to: 0
+ duration: 2500
+ }
+ }
+ SequentialAnimation on rotation.x {
+ loops: Animation.Infinite
+ NumberAnimation {
+ from: 0
+ to: 360
+ duration: 6000
+ }
+ NumberAnimation {
+ from: 360
+ to: 0
+ duration: 3000
+ }
+ }
+ }
+
+ Text {
+ id: effText
+ text: edit.text
+ anchors.centerIn: parent
+ font.pointSize: 60
+ style: Text.Outline
+ styleColor: "green"
+ }
+
+ ShaderEffectSource {
+ id: effSource
+ sourceItem: effText
+ hideSource: true
+ }
+
+ ShaderEffect {
+ SequentialAnimation on scale {
+ loops: Animation.Infinite
+ NumberAnimation { from: 1.0; to: 2.0; duration: 1000; easing.type: Easing.InCirc }
+ PauseAnimation { duration: 1000 }
+ NumberAnimation { from: 2.0; to: 0.5; duration: 1000; easing.type: Easing.OutExpo }
+ NumberAnimation { from: 0.5; to: 1.0; duration: 500 }
+ PauseAnimation { duration: 1000 }
+ }
+ width: effText.width
+ height: effText.height
+ anchors.centerIn: parent
+ property variant source: effSource
+ property real amplitude: 0.002
+ property real frequency: 10
+ property real time: 0
+ NumberAnimation on time { loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 1000 }
+ fragmentShader: "wobble.frag.qsb"
+ }
+}
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag
new file mode 100644
index 0000000000..6aadad661f
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag
@@ -0,0 +1,23 @@
+// 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;
+layout(location = 0) out vec4 fragColor;
+
+layout(binding = 1) uniform sampler2D source;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 qt_Matrix;
+ float qt_Opacity;
+ float amplitude;
+ float frequency;
+ float time;
+};
+
+void main()
+{
+ vec2 p = sin(time + frequency * qt_TexCoord0);
+ fragColor = texture(source, qt_TexCoord0 + amplitude * vec2(p.y, -p.x)) * qt_Opacity;
+}
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag.qsb b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag.qsb
new file mode 100644
index 0000000000..ab764e8326
--- /dev/null
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag.qsb
Binary files differ
diff --git a/examples/quick/quickwidgets/quickwidget/CMakeLists.txt b/examples/quick/quickwidgets/quickwidget/CMakeLists.txt
index 5cd4b9445a..7a878a2b28 100644
--- a/examples/quick/quickwidgets/quickwidget/CMakeLists.txt
+++ b/examples/quick/quickwidgets/quickwidget/CMakeLists.txt
@@ -1,66 +1,46 @@
-# Generated from quickwidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(quickwidget LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickWidgets Widgets)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/quickwidgets/quickwidget")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Widgets)
-find_package(Qt6 COMPONENTS QuickWidgets)
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(quickwidget
- fbitem.cpp fbitem.h
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(quickwidget PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(quickwidget PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::QuickWidgets
- Qt::Widgets
-)
-
-# Resources:
-set(quickwidget_resource_files
- "customgl.qml"
- "rotatingsquare.qml"
- "rotatingsquaretab.qml"
+target_link_libraries(quickwidget PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickWidgets
+ Qt6::Widgets
)
-qt6_add_resources(quickwidget "quickwidget"
- PREFIX
- "/quickwidget"
- FILES
- ${quickwidget_resource_files}
+qt_add_qml_module(quickwidget
+ URI QuickWidgetExample
+ QML_FILES
+ rotatingsquare.qml
+ RESOURCE_PREFIX /quickwidget
+ NO_RESOURCE_TARGET_PATH
)
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}
)
-set_target_properties(quickwidget PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI QuickWidgetExample
+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
)
-
-qt6_qml_type_registration(quickwidget)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/quickwidgets/quickwidget/customgl.qml b/examples/quick/quickwidgets/quickwidget/customgl.qml
deleted file mode 100644
index 577f006bd7..0000000000
--- a/examples/quick/quickwidgets/quickwidget/customgl.qml
+++ /dev/null
@@ -1,69 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QuickWidgetExample 1.0
-
-Rectangle {
- color: "lightGray"
-
- FbItem {
- anchors.fill: parent
- anchors.margins: 10
- }
-
- Text {
- anchors.left: parent.left
- anchors.bottom: parent.bottom
- anchors.margins: 15
- text: "QQuickFramebufferObject with animated clear color"
- color: "white"
- }
-}
diff --git a/examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc b/examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc
index 9328c562b4..0a80b32c4a 100644
--- a/examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc
+++ b/examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc
@@ -1,34 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/fbitem.cpp b/examples/quick/quickwidgets/quickwidget/fbitem.cpp
deleted file mode 100644
index 3e98168dcf..0000000000
--- a/examples/quick/quickwidgets/quickwidget/fbitem.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "fbitem.h"
-#include <QOpenGLFramebufferObject>
-#include <QOpenGLContext>
-#include <QOpenGLFunctions>
-#include <QtCore/QDebug>
-
-#if QT_CONFIG(opengl)
-class FbRenderer : public QQuickFramebufferObject::Renderer
-{
-public:
- FbRenderer() { }
-
- // The lifetime of the FBO and this class depends on how QQuickWidget
- // manages the scenegraph and context when it comes to showing and hiding
- // the widget. The actual behavior is proven by the debug prints.
- ~FbRenderer() override {
- qDebug("FbRenderer destroyed");
- }
-
- void render() override {
- QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
- f->glClearColor(c, 0, 0, 1);
- f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- c += 0.01f * dir;
- if (c >= 1.0f || c <= 0.0f)
- dir *= -1;
- update();
- }
-
- QOpenGLFramebufferObject *createFramebufferObject(const QSize &size) override {
- qDebug() << "Creating FBO" << size;
- QOpenGLFramebufferObjectFormat format;
- format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
- return new QOpenGLFramebufferObject(size, format);
- }
-
-private:
- float c = 0;
- int dir = 1;
-};
-#endif
-
-QQuickFramebufferObject::Renderer *FbItem::createRenderer() const
-{
-#if QT_CONFIG(opengl)
- return new FbRenderer;
-#else
- return nullptr;
-#endif
-}
diff --git a/examples/quick/quickwidgets/quickwidget/fbitem.h b/examples/quick/quickwidgets/quickwidget/fbitem.h
deleted file mode 100644
index c1fb866c9a..0000000000
--- a/examples/quick/quickwidgets/quickwidget/fbitem.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef FBITEM_H
-#define FBITEM_H
-
-#include <QtQuick/QQuickFramebufferObject>
-
-class FbItem : public QQuickFramebufferObject
-{
- Q_OBJECT
- QML_ELEMENT
-public:
- Renderer *createRenderer() const;
-};
-
-#endif
diff --git a/examples/quick/quickwidgets/quickwidget/main.cpp b/examples/quick/quickwidgets/quickwidget/main.cpp
index 1c8b21f790..f8e0b78844 100644
--- a/examples/quick/quickwidgets/quickwidget/main.cpp
+++ b/examples/quick/quickwidgets/quickwidget/main.cpp
@@ -1,61 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#include <QApplication>
+#include <QCommandLineParser>
#include <QQuickWidget>
#include <QQuickItem>
#include <QQmlError>
-#include <QtWidgets>
-#include "fbitem.h"
-
-static bool optMultipleSample = false;
-static bool optCoreProfile = false;
+#include <QMdiArea>
+#include <QLCDNumber>
+#include <QFileDialog>
+#include <QStatusBar>
+#include <QMainWindow>
+#include <QMenuBar>
+#include <QPushButton>
class MainWindow : public QMainWindow {
Q_OBJECT
@@ -74,14 +31,12 @@ private:
QQuickWidget *m_quickWidget;
};
+static bool optMultipleSample = false;
+
MainWindow::MainWindow()
: m_quickWidget(new QQuickWidget)
{
QSurfaceFormat format;
- if (optCoreProfile) {
- format.setVersion(4, 4);
- format.setProfile(QSurfaceFormat::CoreProfile);
- }
if (optMultipleSample)
format.setSamples(4);
m_quickWidget->setFormat(format);
@@ -108,35 +63,67 @@ 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)
{
- QTabWidget *tabWidget = new QTabWidget;
+ // A QQuickWidget should work like any other widget when it comes to being
+ // in layouts, in tab widgets, MDI areas, etc. It can also be freely
+ // reparented and made top-level.
+ QTabWidget *tabWidget = new QTabWidget;
const QSize size(400, 400);
-
- QQuickWidget *w = new QQuickWidget;
- w->resize(size);
- w->setResizeMode(QQuickWidget::SizeRootObjectToView);
- w->setSource(QUrl("qrc:quickwidget/rotatingsquaretab.qml"));
-
- tabWidget->addTab(w, tr("Plain Quick content"));
-
- w = new QQuickWidget;
- w->resize(size);
- w->setResizeMode(QQuickWidget::SizeRootObjectToView);
- w->setSource(QUrl("qrc:quickwidget/customgl.qml"));
-
- tabWidget->addTab(w, tr("Custom OpenGL drawing"));
+ const QString msgToTopLevel = QLatin1String("Break out to top-level window");
+ const QString msgFromTopLevel = QLatin1String("Move back under tab widget");
+
+ static const int N = 4;
+ static const QColor colorTab[N] = { Qt::green, Qt::blue, Qt::yellow, Qt::magenta };
+ for (int i = 0; i < N; ++i) {
+ QQuickWidget *widget = new QQuickWidget;
+ widget->resize(size);
+ widget->setResizeMode(QQuickWidget::SizeRootObjectToView);
+ QObject::connect(widget, &QQuickWidget::statusChanged, widget, [widget, i] {
+ if (widget->status() == QQuickWidget::Ready) {
+ if (QQuickItem *rootItem = widget->rootObject()) {
+ rootItem->setProperty("rectColor", colorTab[i]);
+ }
+ }
+ });
+ widget->setSource(QUrl("qrc:quickwidget/rotatingsquare.qml"));
+ widget->setWindowTitle(QString::asprintf("Tab %d", i + 1));
+ QPushButton *btn = new QPushButton(msgToTopLevel, widget);
+ connect(btn, &QPushButton::clicked, widget, [=] {
+ 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);
+ }
+ });
+ tabWidget->addTab(widget, QString::asprintf("Tab %d", i + 1));
+ }
mdiArea->addSubWindow(tabWidget);
tabWidget->show();
@@ -146,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());
@@ -170,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);
@@ -188,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()));
}
@@ -197,28 +188,24 @@ int main(int argc, char **argv)
{
QApplication app(argc, argv);
- // this example and QQuickWidget are only functional when rendering with OpenGL
- QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGLRhi);
-
QCoreApplication::setApplicationName("Qt QQuickWidget Example");
QCoreApplication::setOrganizationName("QtProject");
QCoreApplication::setApplicationVersion(QT_VERSION_STR);
+
QCommandLineParser parser;
parser.setApplicationDescription(QCoreApplication::applicationName());
parser.addHelpOption();
parser.addVersionOption();
QCommandLineOption multipleSampleOption("multisample", "Multisampling");
parser.addOption(multipleSampleOption);
- QCommandLineOption coreProfileOption("coreprofile", "Use core profile");
- parser.addOption(coreProfileOption);
parser.process(app);
optMultipleSample = parser.isSet(multipleSampleOption);
- optCoreProfile = parser.isSet(coreProfileOption);
- 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/quickwidget.pro b/examples/quick/quickwidgets/quickwidget/quickwidget.pro
index b824c520f5..9c31ac28f3 100644
--- a/examples/quick/quickwidgets/quickwidget/quickwidget.pro
+++ b/examples/quick/quickwidgets/quickwidget/quickwidget.pro
@@ -7,8 +7,7 @@ CONFIG += qmltypes
QML_IMPORT_NAME = QuickWidgetExample
QML_IMPORT_MAJOR_VERSION = 1
-SOURCES += main.cpp fbitem.cpp
-HEADERS += fbitem.h
+SOURCES += main.cpp
RESOURCES += quickwidget.qrc
diff --git a/examples/quick/quickwidgets/quickwidget/quickwidget.qrc b/examples/quick/quickwidgets/quickwidget/quickwidget.qrc
index 85a49b75ca..c073b7b80d 100644
--- a/examples/quick/quickwidgets/quickwidget/quickwidget.qrc
+++ b/examples/quick/quickwidgets/quickwidget/quickwidget.qrc
@@ -1,7 +1,5 @@
<RCC>
<qresource prefix="/quickwidget">
<file>rotatingsquare.qml</file>
- <file>rotatingsquaretab.qml</file>
- <file>customgl.qml</file>
</qresource>
</RCC>
diff --git a/examples/quick/quickwidgets/quickwidget/rotatingsquare.qml b/examples/quick/quickwidgets/quickwidget/rotatingsquare.qml
index 5d3bb72fbe..7fdc1978ce 100644
--- a/examples/quick/quickwidgets/quickwidget/rotatingsquare.qml
+++ b/examples/quick/quickwidgets/quickwidget/rotatingsquare.qml
@@ -1,57 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: root
+ property color rectColor: "red"
Rectangle {
property int d: 100
@@ -59,13 +13,37 @@ Rectangle {
width: d
height: d
anchors.centerIn: parent
- color: "red"
+ color: root.rectColor
NumberAnimation on rotation { from: 0; to: 360; duration: 2000; loops: Animation.Infinite; }
}
Text {
+ id: text
anchors.centerIn: parent
- text: "Qt Quick running in a widget"
+ property string api
+ Connections {
+ target: text.GraphicsInfo
+ function onApiChanged() {
+ var api = text.GraphicsInfo.api;
+ if (api === GraphicsInfo.Software)
+ text.api = "Software";
+ else if (api === GraphicsInfo.OpenGL)
+ 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)
+ text.api = "Metal on QRhi";
+ else if (api === GraphicsInfo.Null)
+ text.api = "Null on QRhi";
+ else
+ text.api = "Unknown API";
+ }
+ }
+ text: "Qt Quick running in a widget\nGraphicsInfo.api says: " + api
}
function performLayerBasedGrab(fn) {
diff --git a/examples/quick/quickwidgets/quickwidget/rotatingsquaretab.qml b/examples/quick/quickwidgets/quickwidget/rotatingsquaretab.qml
deleted file mode 100644
index 116a8f8729..0000000000
--- a/examples/quick/quickwidgets/quickwidget/rotatingsquaretab.qml
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Rectangle {
- gradient: Gradient {
- GradientStop { position: 0; color: "steelblue" }
- GradientStop { position: 1; color: "black" }
- }
-
- Rectangle {
- property int d: 100
- id: square
- width: d
- height: d
- anchors.centerIn: parent
- color: "green"
- NumberAnimation on rotation { from: 360; to: 0; duration: 4000; loops: Animation.Infinite; }
- }
-
- Text {
- anchors.centerIn: parent
- text: "Qt Quick running in a tab widget"
- color: "purple"
- font.bold: true
- font.pointSize: 14
- }
-}
diff --git a/examples/quick/quickwidgets/quickwidgets.pro b/examples/quick/quickwidgets/quickwidgets.pro
index be932f33d0..14d1893776 100644
--- a/examples/quick/quickwidgets/quickwidgets.pro
+++ b/examples/quick/quickwidgets/quickwidgets.pro
@@ -1,3 +1,3 @@
TEMPLATE = subdirs
SUBDIRS = quickwidget \
- qquickviewcomparison
+ qquickwidgetversuswindow_opengl
diff --git a/examples/quick/rendercontrol/.prev_CMakeLists.txt b/examples/quick/rendercontrol/.prev_CMakeLists.txt
deleted file mode 100644
index 53924b33ce..0000000000
--- a/examples/quick/rendercontrol/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-# Generated from rendercontrol.pro.
-
-add_subdirectory(rendercontrol_opengl)
-if(WIN32 AND NOT MINGW)
- add_subdirectory(rendercontrol_d3d11)
-endif()
diff --git a/examples/quick/rendercontrol/CMakeLists.txt b/examples/quick/rendercontrol/CMakeLists.txt
index 53924b33ce..d58899ae69 100644
--- a/examples/quick/rendercontrol/CMakeLists.txt
+++ b/examples/quick/rendercontrol/CMakeLists.txt
@@ -1,6 +1,10 @@
-# Generated from rendercontrol.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-add_subdirectory(rendercontrol_opengl)
-if(WIN32 AND NOT MINGW)
- add_subdirectory(rendercontrol_d3d11)
+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.pro b/examples/quick/rendercontrol/rendercontrol.pro
index 9922e1e077..d49be63c50 100644
--- a/examples/quick/rendercontrol/rendercontrol.pro
+++ b/examples/quick/rendercontrol/rendercontrol.pro
@@ -3,7 +3,7 @@ TEMPLATE = subdirs
SUBDIRS += \
rendercontrol_opengl
-win32:!mingw {
+win32 {
SUBDIRS += \
rendercontrol_d3d11
}
diff --git a/examples/quick/rendercontrol/rendercontrol_d3d11/CMakeLists.txt b/examples/quick/rendercontrol/rendercontrol_d3d11/CMakeLists.txt
index 949c609af1..ac124d3fa5 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/CMakeLists.txt
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/CMakeLists.txt
@@ -1,59 +1,50 @@
-# Generated from rendercontrol_d3d11.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(rendercontrol_d3d11 LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC 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)
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
+qt_standard_project_setup(REQUIRES 6.5)
-qt_add_executable(rendercontrol_d3d11
+qt_add_executable(rendercontrol_d3d11example WIN32 MACOSX_BUNDLE
engine.cpp engine.h
main.cpp
window.cpp window.h
)
-set_target_properties(rendercontrol_d3d11 PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(rendercontrol_d3d11 PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+
+target_link_libraries(rendercontrol_d3d11example PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
d3d11
dxgi
dxguid
+ uuid
)
-
# Resources:
-set(rendercontrol_resource_files
- "demo.qml"
+qt_add_qml_module(rendercontrol_d3d11example
+ URI rendercontrol
+ QML_FILES
+ "demo.qml"
)
-qt6_add_resources(rendercontrol_d3d11 "rendercontrol"
- PREFIX
- "/rendercontrol"
- FILES
- ${rendercontrol_resource_files}
+install(TARGETS rendercontrol_d3d11example
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS rendercontrol_d3d11
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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 32e2f423d1..ef1fe3507a 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/demo.qml
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/demo.qml
@@ -1,61 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.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
+ property bool keyDown: false
gradient: Gradient {
- GradientStop { position: 0; color: mouse.pressed ? "lightsteelblue" : "steelblue" }
+ GradientStop { position: 0; color: mouse.pressed ? "lightsteelblue" : (root.keyDown ? "blue" : "steelblue") }
GradientStop { position: 1; color: "black" }
}
@@ -205,4 +159,7 @@ Rectangle {
id: mouse
anchors.fill: parent
}
+
+ Keys.onPressed: keyDown = true
+ Keys.onReleased: keyDown = false
}
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 63f5477ff4..03c8816033 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/doc/src/rendercontrol_d3d11.qdoc
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/doc/src/rendercontrol_d3d11.qdoc
@@ -1,33 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/engine.cpp b/examples/quick/rendercontrol/rendercontrol_d3d11/engine.cpp
index 99f65f6200..93fcae5e4a 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/engine.cpp
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/engine.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "engine.h"
#include <QLibrary>
@@ -85,7 +38,6 @@ bool Engine::create()
return false;
}
- ID3D11DeviceContext *ctx = nullptr;
uint flags = 0;
#ifdef ENABLE_DEBUG_LAYER
flags |= D3D11_CREATE_DEVICE_DEBUG;
@@ -93,19 +45,12 @@ bool Engine::create()
// use the default hardware adapter
HRESULT hr = D3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, flags,
nullptr, 0, D3D11_SDK_VERSION,
- &m_device, &m_featureLevel, &ctx);
+ &m_device, &m_featureLevel, &m_context);
if (FAILED(hr)) {
qWarning("Failed to create D3D11 device and context: %s", qPrintable(comErrorMessage(hr)));
return false;
}
- if (SUCCEEDED(ctx->QueryInterface(IID_ID3D11DeviceContext1, reinterpret_cast<void **>(&m_context)))) {
- ctx->Release();
- } else {
- qWarning("ID3D11DeviceContext1 not supported");
- return false;
- }
-
return true;
}
diff --git a/examples/quick/rendercontrol/rendercontrol_d3d11/engine.h b/examples/quick/rendercontrol/rendercontrol_d3d11/engine.h
index 8b1b3ebf39..02f0fa9049 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/engine.h
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/engine.h
@@ -1,57 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef ENGINE_H
#define ENGINE_H
#include <QWindow>
+#include <QtCore/qt_windows.h> // suppress windows.h include coming from d3d11_1.h
#include <d3d11_1.h>
#include <dxgi1_3.h>
@@ -81,14 +35,14 @@ public:
Swapchain createSwapchain(QWindow *window);
void resizeSwapchain(Swapchain *sc, QWindow *window);
ID3D11Device *device() { return m_device; }
- ID3D11DeviceContext1 *context() { return m_context; }
+ ID3D11DeviceContext *context() { return m_context; }
private:
void createSwapchainBuffers(Swapchain *sc);
IDXGIFactory1 *m_dxgiFactory = nullptr;
ID3D11Device *m_device = nullptr;
- ID3D11DeviceContext1 *m_context = nullptr;
+ ID3D11DeviceContext *m_context = nullptr;
D3D_FEATURE_LEVEL m_featureLevel;
};
diff --git a/examples/quick/rendercontrol/rendercontrol_d3d11/main.cpp b/examples/quick/rendercontrol/rendercontrol_d3d11/main.cpp
index 119b289500..99b694c107 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/main.cpp
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
// This example is only functional on Windows with Direct 3D 11.
@@ -64,7 +17,7 @@ int main(int argc, char **argv)
QCoreApplication::setApplicationVersion(QT_VERSION_STR);
// only functional when Qt Quick is also using D3D11
- QQuickWindow::setGraphicsApi(QSGRendererInterface::Direct3D11Rhi);
+ QQuickWindow::setGraphicsApi(QSGRendererInterface::Direct3D11);
Engine engine;
if (!engine.create())
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_d3d11/rendercontrol.qrc b/examples/quick/rendercontrol/rendercontrol_d3d11/rendercontrol.qrc
index 2246eeb842..9a410038a5 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/rendercontrol.qrc
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/rendercontrol.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/rendercontrol">
+ <qresource prefix="/qt/qml/rendercontrol">
<file>demo.qml</file>
</qresource>
</RCC>
diff --git a/examples/quick/rendercontrol/rendercontrol_d3d11/rendercontrol_d3d11.pro b/examples/quick/rendercontrol/rendercontrol_d3d11/rendercontrol_d3d11.pro
index 29cee7580b..0a65dec88a 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/rendercontrol_d3d11.pro
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/rendercontrol_d3d11.pro
@@ -13,7 +13,7 @@ HEADERS += \
RESOURCES += rendercontrol.qrc
-LIBS += -ld3d11 -ldxgi -ldxguid
+LIBS += -ld3d11 -ldxgi -ldxguid -luuid
target.path = $$[QT_INSTALL_EXAMPLES]/quick/rendercontrol/rendercontrol_d3d11
INSTALLS += target
diff --git a/examples/quick/rendercontrol/rendercontrol_d3d11/window.cpp b/examples/quick/rendercontrol/rendercontrol_d3d11/window.cpp
index 918698effe..33f16a9760 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/window.cpp
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/window.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "window.h"
#include <QCoreApplication>
@@ -118,7 +71,8 @@ Window::Window(Engine *engine)
m_quickWindow = new QQuickWindow(m_renderControl);
m_qmlEngine = new QQmlEngine;
- m_qmlComponent = new QQmlComponent(m_qmlEngine, QUrl(QLatin1String("qrc:/rendercontrol/demo.qml")));
+ m_qmlComponent = new QQmlComponent(
+ m_qmlEngine, QUrl(QLatin1String("qrc:/qt/qml/rendercontrol/demo.qml")));
if (m_qmlComponent->isError()) {
for (const QQmlError &error : m_qmlComponent->errors())
qWarning() << error.url() << error.line() << error;
@@ -130,12 +84,12 @@ Window::Window(Engine *engine)
qWarning() << error.url() << error.line() << error;
}
- QQuickItem *rootItem = qobject_cast<QQuickItem *>(rootObject);
- rootItem->setSize(QSize(QML_WIDTH, QML_HEIGHT));
- m_quickWindow->contentItem()->setSize(rootItem->size());
- m_quickWindow->setGeometry(0, 0, rootItem->width(), rootItem->height());
+ m_rootItem = qobject_cast<QQuickItem *>(rootObject);
+ m_rootItem->setSize(QSize(QML_WIDTH, QML_HEIGHT));
+ m_quickWindow->contentItem()->setSize(m_rootItem->size());
+ m_quickWindow->setGeometry(0, 0, m_rootItem->width(), m_rootItem->height());
- rootItem->setParentItem(m_quickWindow->contentItem());
+ m_rootItem->setParentItem(m_quickWindow->contentItem());
}
Window::~Window()
@@ -185,6 +139,16 @@ void Window::mouseReleaseEvent(QMouseEvent *e)
QCoreApplication::sendEvent(m_quickWindow, &mappedEvent);
}
+void Window::keyPressEvent(QKeyEvent *e)
+{
+ QCoreApplication::sendEvent(m_quickWindow, e);
+}
+
+void Window::keyReleaseEvent(QKeyEvent *e)
+{
+ QCoreApplication::sendEvent(m_quickWindow, e);
+}
+
bool Window::event(QEvent *e)
{
switch (e->type()) {
@@ -316,7 +280,7 @@ void Window::render()
updateQuick();
// now onto our own drawing, targeting the window
- ID3D11DeviceContext1 *ctx = m_engine->context();
+ ID3D11DeviceContext *ctx = m_engine->context();
const QSize viewSize = m_swapchain.pixelSize;
const float clearColor[] = { 0.4f, 0.7f, 0.0f, 1.0f };
@@ -372,6 +336,9 @@ void Window::updateQuick()
QSize(QML_WIDTH, QML_HEIGHT),
SAMPLE_COUNT));
+ // Ensure key events are received by the root Rectangle.
+ m_rootItem->forceActiveFocus();
+
m_quickInitialized = true;
}
diff --git a/examples/quick/rendercontrol/rendercontrol_d3d11/window.h b/examples/quick/rendercontrol/rendercontrol_d3d11/window.h
index 4a102bd4dd..9a896f954a 100644
--- a/examples/quick/rendercontrol/rendercontrol_d3d11/window.h
+++ b/examples/quick/rendercontrol/rendercontrol_d3d11/window.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef WINDOW_H
#define WINDOW_H
@@ -57,6 +10,7 @@
QT_BEGIN_NAMESPACE
class QQuickRenderControl;
class QQuickWindow;
+class QQuickItem;
class QQmlEngine;
class QQmlComponent;
QT_END_NAMESPACE
@@ -71,6 +25,8 @@ protected:
void exposeEvent(QExposeEvent *e) override;
void mousePressEvent(QMouseEvent *e) override;
void mouseReleaseEvent(QMouseEvent *e) override;
+ void keyPressEvent(QKeyEvent *e) override;
+ void keyReleaseEvent(QKeyEvent *e) override;
bool event(QEvent *e) override;
private:
@@ -84,6 +40,7 @@ private:
QQuickWindow *m_quickWindow;
QQmlEngine *m_qmlEngine;
QQmlComponent *m_qmlComponent;
+ QQuickItem *m_rootItem;
bool m_quickInitialized = false;
bool m_quickDirty = true;
diff --git a/examples/quick/rendercontrol/rendercontrol_opengl/CMakeLists.txt b/examples/quick/rendercontrol/rendercontrol_opengl/CMakeLists.txt
index 3445fd00cb..4ea0551c12 100644
--- a/examples/quick/rendercontrol/rendercontrol_opengl/CMakeLists.txt
+++ b/examples/quick/rendercontrol/rendercontrol_opengl/CMakeLists.txt
@@ -1,58 +1,45 @@
-# Generated from rendercontrol_opengl.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(rendercontrol_opengl LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/rendercontrol/rendercontrol_opengl")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS OpenGL)
-
-qt_add_executable(rendercontrol_opengl
+qt_add_executable(rendercontrol_openglexample WIN32 MACOSX_BUNDLE
cuberenderer.cpp cuberenderer.h
main.cpp
window_singlethreaded.cpp window_singlethreaded.h
)
-set_target_properties(rendercontrol_opengl PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(rendercontrol_opengl PUBLIC
- Qt::Core
- Qt::Gui
- Qt::OpenGL
- Qt::Qml
- Qt::Quick
-)
+target_link_libraries(rendercontrol_openglexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::OpenGL
+ Qt6::Qml
+ Qt6::Quick
+)
# Resources:
-set(rendercontrol_resource_files
- "demo.qml"
+qt_add_qml_module(rendercontrol_openglexample
+ URI rendercontrol
+ QML_FILES
+ "demo.qml"
)
-qt6_add_resources(rendercontrol_opengl "rendercontrol"
- PREFIX
- "/rendercontrol"
- FILES
- ${rendercontrol_resource_files}
+install(TARGETS rendercontrol_openglexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS rendercontrol_opengl
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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 f3ecfc2566..266b176e86 100644
--- a/examples/quick/rendercontrol/rendercontrol_opengl/cuberenderer.cpp
+++ b/examples/quick/rendercontrol/rendercontrol_opengl/cuberenderer.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "cuberenderer.h"
#include <QOpenGLContext>
@@ -92,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 =
@@ -195,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/cuberenderer.h b/examples/quick/rendercontrol/rendercontrol_opengl/cuberenderer.h
index c7655a3c8e..a0a8951442 100644
--- a/examples/quick/rendercontrol/rendercontrol_opengl/cuberenderer.h
+++ b/examples/quick/rendercontrol/rendercontrol_opengl/cuberenderer.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef CUBERENDERER_H
#define CUBERENDERER_H
diff --git a/examples/quick/rendercontrol/rendercontrol_opengl/demo.qml b/examples/quick/rendercontrol/rendercontrol_opengl/demo.qml
index 0312c2ec1c..ca6ba7b2b4 100644
--- a/examples/quick/rendercontrol/rendercontrol_opengl/demo.qml
+++ b/examples/quick/rendercontrol/rendercontrol_opengl/demo.qml
@@ -1,61 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.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
+ property bool keyDown: false
gradient: Gradient {
- GradientStop { position: 0; color: mouse.pressed ? "lightsteelblue" : "steelblue" }
+ GradientStop { position: 0; color: mouse.pressed ? "lightsteelblue" : (root.keyDown ? "blue" : "steelblue") }
GradientStop { position: 1; color: "black" }
}
@@ -205,4 +159,7 @@ Rectangle {
id: mouse
anchors.fill: parent
}
+
+ Keys.onPressed: keyDown = true
+ Keys.onReleased: keyDown = false
}
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 a4a648e5de..d4dc328081 100644
--- a/examples/quick/rendercontrol/rendercontrol_opengl/doc/src/rendercontrol_opengl.qdoc
+++ b/examples/quick/rendercontrol/rendercontrol_opengl/doc/src/rendercontrol_opengl.qdoc
@@ -1,33 +1,26 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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
+ on-screen. Rather, rendering targets an OpenGL texture and is controlled
+ through QQuickRenderControl.
+
+ The cube is rendered directly with OpenGL, using Qt Gui enablers such as
+ QWindow, QOpenGLContext, QOpenGLShaderProgram, and QOpenGLFunctions. The
+ cube is textured with the texture that the Qt Quick render pass outputs to.
+
+ In addition, basic input event forwarding is also demonstrated. When holding
+ down the left mouse button, the background \l Rectangle color is altered via
+ QML bindings. Similarly, holding down a key on the keyboard changes the
+ color as well. This proves that the "fake" events sent from the application
+ (generated based on events from the on-screen QWindow) are forwarded and
+ processed within the Qt Quick scene.
*/
diff --git a/examples/quick/rendercontrol/rendercontrol_opengl/main.cpp b/examples/quick/rendercontrol/rendercontrol_opengl/main.cpp
index 11db82773b..849d9d38d6 100644
--- a/examples/quick/rendercontrol/rendercontrol_opengl/main.cpp
+++ b/examples/quick/rendercontrol/rendercontrol_opengl/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QQuickWindow>
@@ -57,7 +10,7 @@ int main(int argc, char **argv)
QGuiApplication app(argc, argv);
// only functional when Qt Quick is also using OpenGL
- QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGLRhi);
+ QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);
WindowSingleThreaded window;
window.resize(1024, 768);
diff --git a/examples/quick/rendercontrol/rendercontrol_opengl/rendercontrol.qrc b/examples/quick/rendercontrol/rendercontrol_opengl/rendercontrol.qrc
index 2246eeb842..9a410038a5 100644
--- a/examples/quick/rendercontrol/rendercontrol_opengl/rendercontrol.qrc
+++ b/examples/quick/rendercontrol/rendercontrol_opengl/rendercontrol.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/rendercontrol">
+ <qresource prefix="/qt/qml/rendercontrol">
<file>demo.qml</file>
</qresource>
</RCC>
diff --git a/examples/quick/rendercontrol/rendercontrol_opengl/window_singlethreaded.cpp b/examples/quick/rendercontrol/rendercontrol_opengl/window_singlethreaded.cpp
index 8316772d3c..6b8e1d9077 100644
--- a/examples/quick/rendercontrol/rendercontrol_opengl/window_singlethreaded.cpp
+++ b/examples/quick/rendercontrol/rendercontrol_opengl/window_singlethreaded.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "window_singlethreaded.h"
#include "cuberenderer.h"
@@ -253,6 +206,9 @@ void WindowSingleThreaded::run()
// Update item and rendering related geometries.
updateSizes();
+ // Ensure key events are received by the root Rectangle.
+ m_rootItem->forceActiveFocus();
+
// Initialize the render control and our OpenGL resources.
m_context->makeCurrent(m_offscreenSurface);
m_quickWindow->setGraphicsDevice(QQuickGraphicsDevice::fromOpenGLContext(m_context));
@@ -285,7 +241,7 @@ void WindowSingleThreaded::exposeEvent(QExposeEvent *)
if (isExposed()) {
if (!m_quickInitialized) {
m_cubeRenderer->render(this, m_context, m_quickReady ? m_textureId : 0);
- startQuick(QStringLiteral("qrc:/rendercontrol/demo.qml"));
+ startQuick(QStringLiteral("qrc:/qt/qml/rendercontrol/demo.qml"));
}
}
}
@@ -331,3 +287,13 @@ void WindowSingleThreaded::mouseReleaseEvent(QMouseEvent *e)
QMouseEvent mappedEvent(e->type(), e->position(), e->globalPosition(), e->button(), e->buttons(), e->modifiers());
QCoreApplication::sendEvent(m_quickWindow, &mappedEvent);
}
+
+void WindowSingleThreaded::keyPressEvent(QKeyEvent *e)
+{
+ QCoreApplication::sendEvent(m_quickWindow, e);
+}
+
+void WindowSingleThreaded::keyReleaseEvent(QKeyEvent *e)
+{
+ QCoreApplication::sendEvent(m_quickWindow, e);
+}
diff --git a/examples/quick/rendercontrol/rendercontrol_opengl/window_singlethreaded.h b/examples/quick/rendercontrol/rendercontrol_opengl/window_singlethreaded.h
index ad53d5c8a5..6b89ca20b3 100644
--- a/examples/quick/rendercontrol/rendercontrol_opengl/window_singlethreaded.h
+++ b/examples/quick/rendercontrol/rendercontrol_opengl/window_singlethreaded.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef WINDOW_SINGLETHREADED_H
#define WINDOW_SINGLETHREADED_H
@@ -81,6 +34,8 @@ protected:
void resizeEvent(QResizeEvent *e) override;
void mousePressEvent(QMouseEvent *e) override;
void mouseReleaseEvent(QMouseEvent *e) override;
+ void keyPressEvent(QKeyEvent *e) override;
+ void keyReleaseEvent(QKeyEvent *e) override;
private slots:
void run();
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 5faf4bda61..0000000000
--- a/examples/quick/righttoleft/CMakeLists.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-# Generated from righttoleft.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(righttoleft LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/righttoleft")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(righttoleft
- main.cpp
-)
-set_target_properties(righttoleft PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(righttoleft PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(righttoleft_resource_files
- "layoutdirection/layoutdirection.qml"
- "layoutmirroring/layoutmirroring.qml"
- "righttoleft.qml"
- "textalignment/textalignment.qml"
-)
-
-qt6_add_resources(righttoleft "righttoleft"
- PREFIX
- "/righttoleft"
- FILES
- ${righttoleft_resource_files}
-)
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
-
-qt6_add_resources(righttoleft "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
-)
-
-install(TARGETS righttoleft
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
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 adc67de6f4..0000000000
--- a/examples/quick/righttoleft/doc/src/righttoleft.qdoc
+++ /dev/null
@@ -1,48 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
- \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 de111ea025..0000000000
--- a/examples/quick/righttoleft/layoutdirection/layoutdirection.qml
+++ /dev/null
@@ -1,265 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Rectangle {
- id: root
- property bool mirror
- property int direction: Qt.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 04d912eaa6..0000000000
--- a/examples/quick/righttoleft/layoutmirroring/layoutmirroring.qml
+++ /dev/null
@@ -1,213 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Rectangle {
- id: root
- property bool mirror: Qt.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 2b658a0a62..0000000000
--- a/examples/quick/righttoleft/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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 a9d8584835..0000000000
--- a/examples/quick/righttoleft/righttoleft.qml
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-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 1d9f068a1e..0000000000
--- a/examples/quick/righttoleft/righttoleft.qrc
+++ /dev/null
@@ -1,8 +0,0 @@
-<RCC>
- <qresource prefix="/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 698917a3c0..0000000000
--- a/examples/quick/righttoleft/textalignment/textalignment.qml
+++ /dev/null
@@ -1,468 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-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/.prev_CMakeLists.txt b/examples/quick/scenegraph/.prev_CMakeLists.txt
deleted file mode 100644
index a0619410b0..0000000000
--- a/examples/quick/scenegraph/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-# Generated from scenegraph.pro.
-
-add_subdirectory(customgeometry)
-add_subdirectory(custommaterial)
-add_subdirectory(graph)
-add_subdirectory(threadedanimation)
-add_subdirectory(twotextureproviders)
-if(QT_FEATURE_opengl OR QT_FEATURE_opengles2 OR QT_FEATURE_opengles3)
- add_subdirectory(fboitem)
- add_subdirectory(openglunderqml)
-endif()
-if(IOS OR MACOS)
- add_subdirectory(metalunderqml)
- add_subdirectory(metaltextureimport)
-endif()
-if(WIN32)
- add_subdirectory(d3d11underqml)
-endif()
-if(QT_FEATURE_vulkan)
- add_subdirectory(vulkanunderqml)
- add_subdirectory(vulkantextureimport)
-endif()
diff --git a/examples/quick/scenegraph/CMakeLists.txt b/examples/quick/scenegraph/CMakeLists.txt
index a0619410b0..19ab9fc73d 100644
--- a/examples/quick/scenegraph/CMakeLists.txt
+++ b/examples/quick/scenegraph/CMakeLists.txt
@@ -1,22 +1,25 @@
-# Generated from scenegraph.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-add_subdirectory(customgeometry)
-add_subdirectory(custommaterial)
-add_subdirectory(graph)
-add_subdirectory(threadedanimation)
-add_subdirectory(twotextureproviders)
+qt_internal_add_example(customgeometry)
+qt_internal_add_example(custommaterial)
+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)
- add_subdirectory(fboitem)
- add_subdirectory(openglunderqml)
+ qt_internal_add_example(openglunderqml)
endif()
if(IOS OR MACOS)
- add_subdirectory(metalunderqml)
- add_subdirectory(metaltextureimport)
+ qt_internal_add_example(metalunderqml)
+ qt_internal_add_example(metaltextureimport)
endif()
if(WIN32)
- add_subdirectory(d3d11underqml)
+ qt_internal_add_example(d3d11underqml)
endif()
if(QT_FEATURE_vulkan)
- add_subdirectory(vulkanunderqml)
- add_subdirectory(vulkantextureimport)
+ qt_internal_add_example(vulkanunderqml)
+ qt_internal_add_example(vulkantextureimport)
endif()
diff --git a/examples/quick/scenegraph/customgeometry/.prev_CMakeLists.txt b/examples/quick/scenegraph/customgeometry/.prev_CMakeLists.txt
deleted file mode 100644
index 28613e67a3..0000000000
--- a/examples/quick/scenegraph/customgeometry/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-# Generated from customgeometry.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(customgeometry LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/customgeometry")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(customgeometry
- beziercurve.cpp beziercurve.h
- main.cpp
-)
-set_target_properties(customgeometry PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(customgeometry PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Quick
-)
-
-
-# Resources:
-set(customgeometry_resource_files
- "main.qml"
-)
-
-qt6_add_resources(customgeometry "customgeometry"
- PREFIX
- "/scenegraph/customgeometry"
- FILES
- ${customgeometry_resource_files}
-)
-
-install(TARGETS customgeometry
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(customgeometry PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI CustomGeometry
-)
-
-qt6_qml_type_registration(customgeometry)
diff --git a/examples/quick/scenegraph/customgeometry/CMakeLists.txt b/examples/quick/scenegraph/customgeometry/CMakeLists.txt
index 0e54c00d24..14b585aa0d 100644
--- a/examples/quick/scenegraph/customgeometry/CMakeLists.txt
+++ b/examples/quick/scenegraph/customgeometry/CMakeLists.txt
@@ -1,60 +1,42 @@
-# Generated from customgeometry.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
-project(customgeometry_declarative LANGUAGES CXX) # special case
+cmake_minimum_required(VERSION 3.16)
+project(customgeometry_declarative LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup()
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/customgeometry")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(customgeometry_declarative # special case
+qt_add_executable(customgeometry_declarative WIN32 MACOSX_BUNDLE
beziercurve.cpp beziercurve.h
main.cpp
)
-set_target_properties(customgeometry_declarative PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(customgeometry_declarative PUBLIC # special case
- Qt::Core
- Qt::Gui
- Qt::Quick
-)
-
-# Resources:
-set(customgeometry_resource_files
- "main.qml"
+target_link_libraries(customgeometry_declarative PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
)
-qt6_add_resources(customgeometry_declarative "customgeometry" # special case
- PREFIX
- "/scenegraph/customgeometry"
- FILES
- ${customgeometry_resource_files}
+qt_add_qml_module(customgeometry_declarative
+ URI CustomGeometry
+ QML_FILES main.qml
+ RESOURCE_PREFIX /scenegraph/customgeometry
+ NO_RESOURCE_TARGET_PATH
)
-install(TARGETS customgeometry_declarative # special case
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+install(TARGETS customgeometry_declarative
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-set_target_properties(customgeometry_declarative PROPERTIES # special case
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI CustomGeometry
+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
)
-
-qt6_qml_type_registration(customgeometry_declarative) # special case
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/customgeometry/beziercurve.cpp b/examples/quick/scenegraph/customgeometry/beziercurve.cpp
index 72fc7e6f1b..69d3d5f2e1 100644
--- a/examples/quick/scenegraph/customgeometry/beziercurve.cpp
+++ b/examples/quick/scenegraph/customgeometry/beziercurve.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "beziercurve.h"
@@ -67,9 +20,7 @@ BezierCurve::BezierCurve(QQuickItem *parent)
//! [1]
//! [2]
-BezierCurve::~BezierCurve()
-{
-}
+BezierCurve::~BezierCurve() = default;
//! [2]
//! [3]
@@ -139,7 +90,7 @@ QSGNode *BezierCurve::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
//! [5] //! [6]
- QSGFlatColorMaterial *material = new QSGFlatColorMaterial;
+ auto *material = new QSGFlatColorMaterial;
material->setColor(QColor(255, 0, 0));
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
diff --git a/examples/quick/scenegraph/customgeometry/beziercurve.h b/examples/quick/scenegraph/customgeometry/beziercurve.h
index fd0085a08e..fa1eae6712 100644
--- a/examples/quick/scenegraph/customgeometry/beziercurve.h
+++ b/examples/quick/scenegraph/customgeometry/beziercurve.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef BEZIERCURVE_H
#define BEZIERCURVE_H
@@ -69,11 +22,11 @@ class BezierCurve : public QQuickItem
//! [3]
public:
- BezierCurve(QQuickItem *parent = 0);
+ BezierCurve(QQuickItem *parent = nullptr);
~BezierCurve();
//! [2]
- QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *);
+ QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
//! [2]
QPointF p1() const { return m_p1; }
diff --git a/examples/quick/scenegraph/customgeometry/doc/src/customgeometry.qdoc b/examples/quick/scenegraph/customgeometry/doc/src/customgeometry.qdoc
index 68b041b3ca..3ac09dd367 100644
--- a/examples/quick/scenegraph/customgeometry/doc/src/customgeometry.qdoc
+++ b/examples/quick/scenegraph/customgeometry/doc/src/customgeometry.qdoc
@@ -1,39 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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.
@@ -138,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.
@@ -153,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
@@ -161,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
@@ -176,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/customgeometry/main.cpp b/examples/quick/scenegraph/customgeometry/main.cpp
index 15310d279f..302dac6bb3 100644
--- a/examples/quick/scenegraph/customgeometry/main.cpp
+++ b/examples/quick/scenegraph/customgeometry/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtGui>
#include <QtQuick>
diff --git a/examples/quick/scenegraph/customgeometry/main.qml b/examples/quick/scenegraph/customgeometry/main.qml
index 6158b6554f..472a618237 100644
--- a/examples/quick/scenegraph/customgeometry/main.qml
+++ b/examples/quick/scenegraph/customgeometry/main.qml
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [1]
-import QtQuick 2.0
-import CustomGeometry 1.0
+import QtQuick
+import CustomGeometry
//! [1] //! [2]
Item {
width: 300
@@ -79,7 +32,7 @@ Item {
width: parent.width - 40
wrapMode: Text.WordWrap
- text: "This curve is a custom scene graph item, implemented using line strips"
+ text: qsTr("This curve is a custom scene graph item, implemented using line strips")
}
}
//! [4]
diff --git a/examples/quick/scenegraph/custommaterial/.prev_CMakeLists.txt b/examples/quick/scenegraph/custommaterial/.prev_CMakeLists.txt
deleted file mode 100644
index 6acf1a858b..0000000000
--- a/examples/quick/scenegraph/custommaterial/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-# Generated from custommaterial.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(custommaterial LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/custommaterial")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(custommaterial
- customitem.cpp customitem.h
- main.cpp
-)
-set_target_properties(custommaterial PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(custommaterial PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(custommaterial_resource_files
- "main.qml"
- "shaders/mandelbrot.frag.qsb"
- "shaders/mandelbrot.vert.qsb"
-)
-
-qt6_add_resources(custommaterial "custommaterial"
- PREFIX
- "/scenegraph/custommaterial"
- FILES
- ${custommaterial_resource_files}
-)
-
-install(TARGETS custommaterial
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(custommaterial PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI ExampleCustomMaterial
-)
-
-qt6_qml_type_registration(custommaterial)
diff --git a/examples/quick/scenegraph/custommaterial/CMakeLists.txt b/examples/quick/scenegraph/custommaterial/CMakeLists.txt
index 46cb238af8..8fe276d248 100644
--- a/examples/quick/scenegraph/custommaterial/CMakeLists.txt
+++ b/examples/quick/scenegraph/custommaterial/CMakeLists.txt
@@ -1,64 +1,55 @@
-# Generated from custommaterial.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
-project(custommaterial_declarative LANGUAGES CXX) # special case
+cmake_minimum_required(VERSION 3.16)
+project(custommaterial_declarative LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick ShaderTools)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup()
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/custommaterial")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(custommaterial_declarative # special case
+qt_add_executable(custommaterial_declarative WIN32 MACOSX_BUNDLE
customitem.cpp customitem.h
main.cpp
)
-set_target_properties(custommaterial_declarative PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(custommaterial_declarative PUBLIC # special case
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
+target_link_libraries(custommaterial_declarative PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
-# Resources:
-set(custommaterial_resource_files
- "main.qml"
- "shaders/mandelbrot.frag.qsb"
- "shaders/mandelbrot.vert.qsb"
+qt_add_qml_module(custommaterial_declarative
+ URI ExampleCustomMaterial
+ QML_FILES
+ main.qml
+ RESOURCE_PREFIX /scenegraph/custommaterial
+ NO_RESOURCE_TARGET_PATH
)
-qt6_add_resources(custommaterial_declarative "custommaterial" # special case
+qt6_add_shaders(custommaterial_declarative "shaders"
+ BATCHABLE
+ PRECOMPILE
+ OPTIMIZED
PREFIX
"/scenegraph/custommaterial"
FILES
- ${custommaterial_resource_files}
+ "shaders/mandelbrot.vert"
+ "shaders/mandelbrot.frag"
)
-install(TARGETS custommaterial_declarative # special case
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+install(TARGETS custommaterial_declarative
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-set_target_properties(custommaterial_declarative PROPERTIES # special case
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI ExampleCustomMaterial
+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
)
-
-qt6_qml_type_registration(custommaterial_declarative) # special case
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/custommaterial/customitem.cpp b/examples/quick/scenegraph/custommaterial/customitem.cpp
index 62dc962455..4e79d7c2f4 100644
--- a/examples/quick/scenegraph/custommaterial/customitem.cpp
+++ b/examples/quick/scenegraph/custommaterial/customitem.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "customitem.h"
diff --git a/examples/quick/scenegraph/custommaterial/customitem.h b/examples/quick/scenegraph/custommaterial/customitem.h
index 5cc1fa09f4..edd6a4642d 100644
--- a/examples/quick/scenegraph/custommaterial/customitem.h
+++ b/examples/quick/scenegraph/custommaterial/customitem.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef CUSTOMITEM_H
#define CUSTOMITEM_H
@@ -65,7 +18,7 @@ class CustomItem : public QQuickItem
QML_ELEMENT
public:
- explicit CustomItem(QQuickItem *parent = 0);
+ explicit CustomItem(QQuickItem *parent = nullptr);
qreal zoom() const
{
diff --git a/examples/quick/scenegraph/custommaterial/doc/src/custommaterial.qdoc b/examples/quick/scenegraph/custommaterial/doc/src/custommaterial.qdoc
index 5cb7b38ab0..2bbcbbe263 100644
--- a/examples/quick/scenegraph/custommaterial/doc/src/custommaterial.qdoc
+++ b/examples/quick/scenegraph/custommaterial/doc/src/custommaterial.qdoc
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/main.cpp b/examples/quick/scenegraph/custommaterial/main.cpp
index ce1bcd9dfe..1e68cdc9a1 100644
--- a/examples/quick/scenegraph/custommaterial/main.cpp
+++ b/examples/quick/scenegraph/custommaterial/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
diff --git a/examples/quick/scenegraph/custommaterial/main.qml b/examples/quick/scenegraph/custommaterial/main.qml
index e552c4ee48..ce22f9c8e9 100644
--- a/examples/quick/scenegraph/custommaterial/main.qml
+++ b/examples/quick/scenegraph/custommaterial/main.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.2
-import ExampleCustomMaterial 1.0
+import QtQuick
+import ExampleCustomMaterial
Item {
id: root
@@ -92,8 +45,8 @@ Item {
anchors.bottom: parent.bottom
anchors.margins: 20
wrapMode: Text.WordWrap
- text: "This example shows how to create a custom material in C++ and use it in QML.\n"
+ text: qsTr("This example shows how to create a custom material in C++ and use it in QML.\n"
+ "The custom material uses a fragment shader that calculates the Mandelbrot set,"
- + " and exposes the shader uniforms as QML properties."
+ + " and exposes the shader uniforms as QML properties.")
}
}
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
new file mode 100644
index 0000000000..c00f019839
--- /dev/null
+++ b/examples/quick/scenegraph/customrendernode/CMakeLists.txt
@@ -0,0 +1,54 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(customrendernode LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick ShaderTools)
+
+qt_standard_project_setup()
+
+qt_add_executable(customrendernode WIN32 MACOSX_BUNDLE
+ main.cpp
+ customrender.cpp customrender.h
+)
+
+target_link_libraries(customrendernode PRIVATE
+ Qt6::Core
+ Qt6::GuiPrivate
+ Qt6::Qml
+ Qt6::Quick
+)
+
+qt_add_qml_module(customrendernode
+ URI SceneGraphRendering
+ QML_FILES
+ main.qml
+ RESOURCE_PREFIX /scenegraph/customrendernode
+ NO_RESOURCE_TARGET_PATH
+)
+
+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
+ "shaders/customrender.vert"
+ "shaders/customrender.frag"
+)
+
+install(TARGETS customrendernode
+ 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
new file mode 100644
index 0000000000..ff5274c163
--- /dev/null
+++ b/examples/quick/scenegraph/customrendernode/customrender.cpp
@@ -0,0 +1,214 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "customrender.h"
+#include <QSGTextureProvider>
+#include <QSGRenderNode>
+#include <QSGTransformNode>
+#include <QQuickWindow>
+#include <QFile>
+
+#include <rhi/qrhi.h>
+
+//![node]
+class CustomRenderNode : public QSGRenderNode
+{
+public:
+ CustomRenderNode(QQuickWindow *window);
+
+ void setVertices(const QList<QVector2D> &vertices);
+
+ void prepare() override;
+ void render(const RenderState *state) override;
+ void releaseResources() override;
+ RenderingFlags flags() const override;
+ QSGRenderNode::StateFlags changedStates() const override;
+
+protected:
+ 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)
+{
+ QFile file;
+ file.setFileName(":/scenegraph/customrendernode/shaders/customrender.vert.qsb");
+ 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");
+ 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)
+{
+ if (m_vertices == vertices)
+ return;
+
+ m_verticesDirty = true;
+ m_vertices = vertices;
+
+ markDirty(QSGNode::DirtyGeometry);
+}
+
+//![node-release]
+void CustomRenderNode::releaseResources()
+{
+ 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 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
+{
+ // In Qt 6 only ViewportState and ScissorState matter, the rest is ignored.
+ return QSGRenderNode::StateFlag::ViewportState | QSGRenderNode::StateFlag::CullState;
+}
+
+//![node-prepare]
+void CustomRenderNode::prepare()
+{
+ QRhi *rhi = m_window->rhi();
+ QRhiResourceUpdateBatch *resourceUpdates = rhi->nextResourceUpdateBatch();
+
+ if (m_verticesDirty) {
+ m_vertexBuffer.reset();
+ m_verticesDirty = false;
+ }
+
+ if (!m_vertexBuffer) {
+ m_vertexBuffer.reset(rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer,
+ m_vertices.count() * sizeof(QVector2D)));
+ m_vertexBuffer->create();
+ resourceUpdates->uploadStaticBuffer(m_vertexBuffer.get(), m_vertices.constData());
+ }
+//![node-prepare]
+ if (!m_uniformBuffer) {
+ m_uniformBuffer.reset(rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 68));
+ m_uniformBuffer->create();
+ }
+
+ if (!m_resourceBindings) {
+ m_resourceBindings.reset(rhi->newShaderResourceBindings());
+ m_resourceBindings->setBindings({ QRhiShaderResourceBinding::uniformBuffer(
+ 0,
+ QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage,
+ m_uniformBuffer.get()) });
+ m_resourceBindings->create();
+ }
+
+ if (!m_pipeline) {
+ m_pipeline.reset(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(renderTarget()->resourceType() == QRhiResource::TextureRenderTarget
+ && rhi->isYUpInFramebuffer()
+ ? QRhiGraphicsPipeline::CW
+ : QRhiGraphicsPipeline::CCW);
+ 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.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(renderTarget()->renderPassDescriptor());
+ m_pipeline->create();
+ }
+
+ const QMatrix4x4 mvp = *projectionMatrix() * *matrix();
+ const float opacity = inheritedOpacity();
+
+ resourceUpdates->updateDynamicBuffer(m_uniformBuffer.get(), 0, 64, mvp.constData());
+ resourceUpdates->updateDynamicBuffer(m_uniformBuffer.get(), 64, 4, &opacity);
+ commandBuffer()->resourceUpdate(resourceUpdates);
+}
+
+//![node-render]
+void CustomRenderNode::render(const RenderState *)
+{
+ 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.get(), 0 } };
+ cb->setVertexInput(0, 1, vertexBindings);
+ cb->draw(m_vertices.count());
+}
+//![node-render]
+
+//![item-ctor]
+CustomRender::CustomRender(QQuickItem *parent)
+ : QQuickItem(parent)
+{
+ setFlag(ItemHasContents, true);
+ connect(this, &CustomRender::verticesChanged, this, &CustomRender::update);
+}
+//![item-ctor]
+
+QList<QVector2D> CustomRender::vertices() const
+{
+ return m_vertices;
+}
+
+void CustomRender::setVertices(const QList<QVector2D> &newVertices)
+{
+ if (m_vertices == newVertices)
+ return;
+
+ m_vertices = newVertices;
+ emit verticesChanged();
+}
+
+//![item-update]
+QSGNode *CustomRender::updatePaintNode(QSGNode *old, UpdatePaintNodeData *)
+{
+ CustomRenderNode *node = static_cast<CustomRenderNode *>(old);
+
+ if (!node)
+ node = new CustomRenderNode(window());
+
+ node->setVertices(m_vertices);
+
+ return node;
+}
+//![item-update]
diff --git a/examples/quick/scenegraph/customrendernode/customrender.h b/examples/quick/scenegraph/customrendernode/customrender.h
new file mode 100644
index 0000000000..530e692678
--- /dev/null
+++ b/examples/quick/scenegraph/customrendernode/customrender.h
@@ -0,0 +1,34 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef CUSTOMRENDER_H
+#define CUSTOMRENDER_H
+
+#include <QQuickItem>
+#include <QVector2D>
+
+//![item]
+class CustomRender : public QQuickItem
+{
+ Q_OBJECT
+ Q_PROPERTY(QList<QVector2D> vertices READ vertices WRITE setVertices NOTIFY verticesChanged)
+ QML_ELEMENT
+
+public:
+ explicit CustomRender(QQuickItem *parent = nullptr);
+
+ QList<QVector2D> vertices() const;
+ void setVertices(const QList<QVector2D> &newVertices);
+
+signals:
+ void verticesChanged();
+
+protected:
+ QSGNode *updatePaintNode(QSGNode *old, UpdatePaintNodeData *) override;
+
+private:
+ QList<QVector2D> m_vertices;
+};
+//![item]
+
+#endif // CUSTOMRENDER_H
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
new file mode 100644
index 0000000000..3e3dd7d023
--- /dev/null
+++ b/examples/quick/scenegraph/customrendernode/doc/src/customrendernode.qdoc
@@ -0,0 +1,128 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \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 a QQuickItem subclass
+ that is backed by a scene graph node derived from QSGRenderNode, providing
+ it's own QRhi-based rendering.
+
+ \image customrendernode-example.jpg
+
+ \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>}.
+
+ 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
new file mode 100644
index 0000000000..0ad93ec1de
--- /dev/null
+++ b/examples/quick/scenegraph/customrendernode/main.cpp
@@ -0,0 +1,56 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#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);
+ format.setMinorVersion(1);
+ format.setProfile(QSurfaceFormat::CoreProfile);
+ QSurfaceFormat::setDefaultFormat(format);
+#endif
+
+ QQuickView view;
+
+ view.setResizeMode(QQuickView::SizeRootObjectToView);
+ view.setSource(QUrl("qrc:///scenegraph/customrendernode/main.qml"));
+ view.setColor(Qt::black);
+ view.show();
+
+ QString api;
+ switch (view.graphicsApi()) {
+ case QSGRendererInterface::OpenGL:
+ api = "RHI OpenGL";
+ break;
+ case QSGRendererInterface::Direct3D11:
+ api = "RHI Direct 3D 11";
+ break;
+ case QSGRendererInterface::Direct3D12:
+ api = "RHI Direct 3D 12";
+ break;
+ case QSGRendererInterface::Vulkan:
+ api = "RHI Vulkan";
+ break;
+ case QSGRendererInterface::Metal:
+ api = "RHI Metal";
+ break;
+ case QSGRendererInterface::Null:
+ api = "RHI Null";
+ break;
+ default:
+ api = "unknown";
+ break;
+ }
+
+ view.setTitle(QStringLiteral("Custom QSGRenderNode - ") + api);
+
+ return app.exec();
+}
diff --git a/examples/quick/scenegraph/customrendernode/main.qml b/examples/quick/scenegraph/customrendernode/main.qml
new file mode 100644
index 0000000000..6a098e47f7
--- /dev/null
+++ b/examples/quick/scenegraph/customrendernode/main.qml
@@ -0,0 +1,132 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import SceneGraphRendering
+
+Item {
+
+ id: root
+ width: 640
+ height: 480
+
+ SplitView {
+ anchors.fill: parent
+
+ Text {
+ text: qsTr("Direct")
+ color: 'white'
+ SplitView.preferredWidth: root.width/2
+
+ Loader {
+ anchors.fill: parent
+ sourceComponent: customComponent
+ }
+ }
+
+ Text {
+ text: qsTr("Layer")
+ color: 'white'
+ SplitView.preferredWidth: root.width/2
+
+ Loader {
+ anchors.fill: parent
+ sourceComponent: customComponent
+ onLoaded: item.custom.layer.enabled=true
+ }
+ }
+ }
+
+ Text {
+ id: description
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ anchors.margins: 20
+ wrapMode: Text.WordWrap
+ 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
+ anchors.fill: parent
+ anchors.margins: -10
+ color: 'white'
+ opacity: 0.5
+ radius: 10
+ }
+ }
+
+ Component {
+ id: customComponent
+
+ Item {
+ id: componentRoot
+ property alias custom: custom
+
+ Rectangle {
+ width: parent.width/5
+ height: parent.height/5
+ anchors.centerIn: parent
+ color: '#ff0000'
+ }
+
+ SequentialAnimation {
+ running: true
+ loops: Animation.Infinite
+
+ OpacityAnimator {
+ target: custom
+ from: 0
+ to: 1
+ duration: 3500
+ }
+ OpacityAnimator {
+ target: custom
+ from: 1
+ to: 0
+ duration: 3500
+ }
+ }
+
+ RotationAnimation {
+ target: custom
+ from: 0
+ to: 360
+ running: true
+ loops: Animation.Infinite
+ duration: 11000
+ }
+
+
+ Button {
+ text: qsTr("Toggle custom item visibility")
+ onClicked: custom.visible = !custom.visible
+ }
+
+ CustomRender {
+ id: custom
+ width: Math.min(parent.width, parent.height)
+ height: width
+ anchors.centerIn: parent
+
+ property real a: width/2
+ property real b: Math.sqrt(3.0)*a/2;
+ vertices: [Qt.vector2d(width/2 - a/2, height/2 + b/3),
+ Qt.vector2d(width/2 + a/2, height/2 + b/3),
+ Qt.vector2d(width/2, height/2 - b*2/3)]
+
+ }
+
+ Rectangle {
+ width: parent.width/10
+ height: parent.height/10
+ anchors.centerIn: parent
+ color: '#ffffff'
+ }
+ }
+ }
+}
diff --git a/examples/quick/scenegraph/customrendernode/shaders/customrender.frag b/examples/quick/scenegraph/customrendernode/shaders/customrender.frag
new file mode 100644
index 0000000000..d9586ba90e
--- /dev/null
+++ b/examples/quick/scenegraph/customrendernode/shaders/customrender.frag
@@ -0,0 +1,18 @@
+// 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;
+
+layout(location = 0) out vec4 fragColor;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 qt_Matrix;
+ float qt_Opacity;
+};
+
+void main()
+{
+ fragColor = vec4(color, 1.0)*qt_Opacity;
+}
diff --git a/examples/quick/scenegraph/customrendernode/shaders/customrender.vert b/examples/quick/scenegraph/customrendernode/shaders/customrender.vert
new file mode 100644
index 0000000000..a61d6e2d71
--- /dev/null
+++ b/examples/quick/scenegraph/customrendernode/shaders/customrender.vert
@@ -0,0 +1,31 @@
+#version 440
+
+layout(location = 0) in vec2 vertex;
+
+layout(location = 0) out vec3 color;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 qt_Matrix;
+ float qt_Opacity;
+};
+
+out gl_PerVertex { vec4 gl_Position; };
+
+void main()
+{
+
+ switch (gl_VertexIndex%3) {
+ case 0:
+ color = vec3(1.0, 0.0, 0.0);
+ break;
+ case 1:
+ color = vec3(0.0, 1.0, 0.0);
+ break;
+ case 2:
+ color = vec3(0.0, 0.0, 1.0);
+ break;
+ }
+
+ gl_Position = qt_Matrix * vec4(vertex, 0.0, 1.0);
+
+}
diff --git a/examples/quick/scenegraph/d3d11underqml/CMakeLists.txt b/examples/quick/scenegraph/d3d11underqml/CMakeLists.txt
index b443ffb29f..dec029d8da 100644
--- a/examples/quick/scenegraph/d3d11underqml/CMakeLists.txt
+++ b/examples/quick/scenegraph/d3d11underqml/CMakeLists.txt
@@ -1,66 +1,54 @@
-# Generated from d3d11underqml.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(d3d11underqml LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/d3d11underqml")
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
qt_add_executable(d3d11underqml
d3d11squircle.cpp d3d11squircle.h
main.cpp
)
+
set_target_properties(d3d11underqml PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
+
target_link_libraries(d3d11underqml PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
d3d11
d3dcompiler
)
-
-# Resources:
-set(d3d11underqml_resource_files
- "main.qml"
- "squircle.frag"
- "squircle.vert"
-)
-
-qt6_add_resources(d3d11underqml "d3d11underqml"
- PREFIX
- "/scenegraph/d3d11underqml"
- FILES
- ${d3d11underqml_resource_files}
+qt_add_qml_module(d3d11underqml
+ URI D3D11UnderQML
+ QML_FILES
+ main.qml
+ RESOURCES
+ squircle.frag
+ squircle.vert
+ RESOURCE_PREFIX /scenegraph/d3d11underqml
+ NO_RESOURCE_TARGET_PATH
)
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}
)
-set_target_properties(d3d11underqml PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI D3D11UnderQML
+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
)
-
-qt6_qml_type_registration(d3d11underqml)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/scenegraph/d3d11underqml/d3d11squircle.cpp b/examples/quick/scenegraph/d3d11underqml/d3d11squircle.cpp
index 9acfbfff23..eb2eea85b4 100644
--- a/examples/quick/scenegraph/d3d11underqml/d3d11squircle.cpp
+++ b/examples/quick/scenegraph/d3d11underqml/d3d11squircle.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "d3d11squircle.h"
#include <QtCore/QFile>
@@ -210,7 +163,7 @@ void SquircleRenderer::frameStart()
QSGRendererInterface *rif = m_window->rendererInterface();
// We are not prepared for anything other than running with the RHI and its D3D11 backend.
- Q_ASSERT(rif->graphicsApi() == QSGRendererInterface::Direct3D11Rhi);
+ Q_ASSERT(rif->graphicsApi() == QSGRendererInterface::Direct3D11);
m_device = reinterpret_cast<ID3D11Device *>(rif->getResource(m_window, QSGRendererInterface::DeviceResource));
Q_ASSERT(m_device);
diff --git a/examples/quick/scenegraph/d3d11underqml/d3d11squircle.h b/examples/quick/scenegraph/d3d11underqml/d3d11squircle.h
index f009dd4248..211ebf68f8 100644
--- a/examples/quick/scenegraph/d3d11underqml/d3d11squircle.h
+++ b/examples/quick/scenegraph/d3d11underqml/d3d11squircle.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef D3D11SQUIRCLE_H
#define D3D11SQUIRCLE_H
diff --git a/examples/quick/scenegraph/d3d11underqml/doc/src/d3d11underqml.qdoc b/examples/quick/scenegraph/d3d11underqml/doc/src/d3d11underqml.qdoc
index 1f0c15e1c6..3d5a171d49 100644
--- a/examples/quick/scenegraph/d3d11underqml/doc/src/d3d11underqml.qdoc
+++ b/examples/quick/scenegraph/d3d11underqml/doc/src/d3d11underqml.qdoc
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/main.cpp b/examples/quick/scenegraph/d3d11underqml/main.cpp
index f2a224c1a2..f26f9b5fc2 100644
--- a/examples/quick/scenegraph/d3d11underqml/main.cpp
+++ b/examples/quick/scenegraph/d3d11underqml/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QtQuick/QQuickView>
@@ -56,12 +9,12 @@ int main(int argc, char **argv)
{
QGuiApplication app(argc, argv);
- QQuickWindow::setGraphicsApi(QSGRendererInterface::Direct3D11Rhi);
+ QQuickWindow::setGraphicsApi(QSGRendererInterface::Direct3D11);
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qrc:///scenegraph/d3d11underqml/main.qml"));
view.show();
- return app.exec();
+ return QGuiApplication::exec();
}
diff --git a/examples/quick/scenegraph/d3d11underqml/main.qml b/examples/quick/scenegraph/d3d11underqml/main.qml
index da128bead6..939f42cd26 100644
--- a/examples/quick/scenegraph/d3d11underqml/main.qml
+++ b/examples/quick/scenegraph/d3d11underqml/main.qml
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [1]
-import QtQuick 2.0
-import D3D11UnderQML 1.0
+import QtQuick
+import D3D11UnderQML
Item {
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 a9c460b228..0000000000
--- a/examples/quick/scenegraph/fboitem/CMakeLists.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-# Generated from fboitem.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(fboitem LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/fboitem")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(fboitem
- ../shared/logorenderer.cpp ../shared/logorenderer.h
- fboinsgrenderer.cpp fboinsgrenderer.h
- main.cpp
-)
-set_target_properties(fboitem PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_include_directories(fboitem PUBLIC
- ../shared
-)
-
-target_link_libraries(fboitem PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(fboitem_resource_files
- "main.qml"
- "shaders/checker.frag.qsb"
-)
-
-qt6_add_resources(fboitem "fboitem"
- PREFIX
- "/scenegraph/fboitem"
- FILES
- ${fboitem_resource_files}
-)
-
-install(TARGETS fboitem
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
-
-set_target_properties(fboitem PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI SceneGraphRendering
-)
-
-qt6_qml_type_registration(fboitem)
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 b5add02991..0000000000
--- a/examples/quick/scenegraph/fboitem/doc/src/fboitem.qdoc
+++ /dev/null
@@ -1,36 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \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 1c7be258be..0000000000
--- a/examples/quick/scenegraph/fboitem/fboinsgrenderer.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#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 1b92b56851..0000000000
--- a/examples/quick/scenegraph/fboitem/fboinsgrenderer.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#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 61510cdb93..0000000000
--- a/examples/quick/scenegraph/fboitem/main.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QGuiApplication>
-
-#include <QtQuick/QQuickView>
-
-#include "fboinsgrenderer.h"
-
-int main(int argc, char **argv)
-{
- QGuiApplication app(argc, argv);
-
- QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGLRhi);
-
- QQuickView view;
- view.setResizeMode(QQuickView::SizeRootObjectToView);
- view.setSource(QUrl("qrc:///scenegraph/fboitem/main.qml"));
- view.show();
-
- return app.exec();
-}
diff --git a/examples/quick/scenegraph/fboitem/main.qml b/examples/quick/scenegraph/fboitem/main.qml
deleted file mode 100644
index 02a2ae22d6..0000000000
--- a/examples/quick/scenegraph/fboitem/main.qml
+++ /dev/null
@@ -1,129 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-import SceneGraphRendering 1.0
-
-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: "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 6066a58499..36d8c34f19 100644
--- a/examples/quick/scenegraph/graph/CMakeLists.txt
+++ b/examples/quick/scenegraph/graph/CMakeLists.txt
@@ -1,67 +1,56 @@
-# Generated from graph.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(graph LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup()
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/graph")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(graph
+qt_add_executable(graph WIN32 MACOSX_BUNDLE
graph.cpp graph.h
gridnode.cpp gridnode.h
linenode.cpp linenode.h
main.cpp
noisynode.cpp noisynode.h
)
+
set_target_properties(graph PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
+ # Prevent name clash with build subdirectory on case-insensitive file systems
+ OUTPUT_NAME graphapp
)
-target_link_libraries(graph PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Quick
-)
-
-# Resources:
-set(graph_resource_files
- "main.qml"
- "shaders/line.frag.qsb"
- "shaders/line.vert.qsb"
- "shaders/noisy.frag.qsb"
- "shaders/noisy.vert.qsb"
+target_link_libraries(graph PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
)
-qt6_add_resources(graph "graph"
- PREFIX
- "/scenegraph/graph"
- FILES
- ${graph_resource_files}
+qt_add_qml_module(graph
+ URI Graph
+ QML_FILES
+ main.qml
+ RESOURCES
+ shaders/line.frag.qsb
+ shaders/line.vert.qsb
+ shaders/noisy.frag.qsb
+ shaders/noisy.vert.qsb
+ RESOURCE_PREFIX /scenegraph/graph
+ NO_RESOURCE_TARGET_PATH
)
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}
)
-set_target_properties(graph PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI Graph
+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
)
-
-qt6_qml_type_registration(graph)
+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 dbf3391209..a76652498c 100644
--- a/examples/quick/scenegraph/graph/doc/src/graph.qdoc
+++ b/examples/quick/scenegraph/graph/doc/src/graph.qdoc
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/graph.cpp b/examples/quick/scenegraph/graph/graph.cpp
index 2df1aca91b..b0ab519b12 100644
--- a/examples/quick/scenegraph/graph/graph.cpp
+++ b/examples/quick/scenegraph/graph/graph.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "graph.h"
diff --git a/examples/quick/scenegraph/graph/graph.h b/examples/quick/scenegraph/graph/graph.h
index 428f877049..50313f529a 100644
--- a/examples/quick/scenegraph/graph/graph.h
+++ b/examples/quick/scenegraph/graph/graph.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef GRAPH_H
#define GRAPH_H
diff --git a/examples/quick/scenegraph/graph/gridnode.cpp b/examples/quick/scenegraph/graph/gridnode.cpp
index 3597247cd4..8e434fe4ab 100644
--- a/examples/quick/scenegraph/graph/gridnode.cpp
+++ b/examples/quick/scenegraph/graph/gridnode.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "gridnode.h"
diff --git a/examples/quick/scenegraph/graph/gridnode.h b/examples/quick/scenegraph/graph/gridnode.h
index fa892d9169..7db26a3a8d 100644
--- a/examples/quick/scenegraph/graph/gridnode.h
+++ b/examples/quick/scenegraph/graph/gridnode.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef GRIDNODE_H
#define GRIDNODE_H
diff --git a/examples/quick/scenegraph/graph/linenode.cpp b/examples/quick/scenegraph/graph/linenode.cpp
index 74161c8040..751b78ef3d 100644
--- a/examples/quick/scenegraph/graph/linenode.cpp
+++ b/examples/quick/scenegraph/graph/linenode.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "linenode.h"
@@ -123,10 +76,8 @@ bool LineShader::updateUniformData(RenderState &state, QSGMaterial *newMaterial,
}
LineMaterial *mat = static_cast<LineMaterial *>(newMaterial);
- float c[4] = { float(mat->state.color.redF()),
- float(mat->state.color.greenF()),
- float(mat->state.color.blueF()),
- float(mat->state.color.alphaF()) };
+ float c[4];
+ mat->state.color.getRgbF(&c[0], &c[1], &c[2], &c[3]);
memcpy(buf->data() + 64, c, 16);
memcpy(buf->data() + 84, &mat->state.size, 4);
memcpy(buf->data() + 88, &mat->state.spread, 4);
diff --git a/examples/quick/scenegraph/graph/linenode.h b/examples/quick/scenegraph/graph/linenode.h
index e1c818a1d5..5add6f9667 100644
--- a/examples/quick/scenegraph/graph/linenode.h
+++ b/examples/quick/scenegraph/graph/linenode.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef LINENODE_H
#define LINENODE_H
diff --git a/examples/quick/scenegraph/graph/main.cpp b/examples/quick/scenegraph/graph/main.cpp
index 95c310131b..7070196a79 100644
--- a/examples/quick/scenegraph/graph/main.cpp
+++ b/examples/quick/scenegraph/graph/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QQuickView>
@@ -56,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;
@@ -66,5 +17,5 @@ int main(int argc, char *argv[])
view.setSource(QUrl("qrc:///scenegraph/graph/main.qml"));
view.show();
- return a.exec();
+ return QGuiApplication::exec();
}
diff --git a/examples/quick/scenegraph/graph/main.qml b/examples/quick/scenegraph/graph/main.qml
index e3e23d760e..5f2abbbd58 100644
--- a/examples/quick/scenegraph/graph/main.qml
+++ b/examples/quick/scenegraph/graph/main.qml
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
-import Graph 1.0
+import Graph
Item {
width: 800
@@ -62,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/noisynode.cpp b/examples/quick/scenegraph/graph/noisynode.cpp
index f8b72bfe67..8f5d93dc35 100644
--- a/examples/quick/scenegraph/graph/noisynode.cpp
+++ b/examples/quick/scenegraph/graph/noisynode.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "noisynode.h"
@@ -131,10 +84,8 @@ bool NoisyShader::updateUniformData(RenderState &state, QSGMaterial *newMaterial
}
NoisyMaterial *mat = static_cast<NoisyMaterial *>(newMaterial);
- float c[4] = { float(mat->state.color.redF()),
- float(mat->state.color.greenF()),
- float(mat->state.color.blueF()),
- float(mat->state.color.alphaF()) };
+ float c[4];
+ mat->state.color.getRgbF(&c[0], &c[1], &c[2], &c[3]);
memcpy(buf->data() + 64, c, 16);
const QSize s = mat->state.texture->textureSize();
@@ -151,6 +102,7 @@ void NoisyShader::updateSampledImage(RenderState &state, int binding, QSGTexture
Q_UNUSED(binding);
NoisyMaterial *mat = static_cast<NoisyMaterial *>(newMaterial);
+ mat->state.texture->commitTextureOperations(state.rhi(), state.resourceUpdateBatch());
*texture = mat->state.texture;
}
diff --git a/examples/quick/scenegraph/graph/noisynode.h b/examples/quick/scenegraph/graph/noisynode.h
index eb7d835432..512265646d 100644
--- a/examples/quick/scenegraph/graph/noisynode.h
+++ b/examples/quick/scenegraph/graph/noisynode.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef NOISYNODE_H
#define NOISYNODE_H
diff --git a/examples/quick/scenegraph/graph/shaders/compile.bat b/examples/quick/scenegraph/graph/shaders/compile.bat
index 4ec3f2ec8e..82bbf6444f 100644
--- a/examples/quick/scenegraph/graph/shaders/compile.bat
+++ b/examples/quick/scenegraph/graph/shaders/compile.bat
@@ -1,52 +1,5 @@
-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-::
:: Copyright (C) 2019 The Qt Company Ltd.
-:: Contact: https://www.qt.io/licensing/
-::
-:: This file is part of the examples of the Qt Toolkit.
-::
-:: $QT_BEGIN_LICENSE:BSD$
-:: Commercial License Usage
-:: Licensees holding valid commercial Qt licenses may use this file in
-:: accordance with the commercial license agreement provided with the
-:: Software or, alternatively, in accordance with the terms contained in
-:: a written agreement between you and The Qt Company. For licensing terms
-:: and conditions see https://www.qt.io/terms-conditions. For further
-:: information use the contact form at https://www.qt.io/contact-us.
-::
-:: BSD License Usage
-:: Alternatively, you may use this file under the terms of the BSD license
-:: as follows:
-::
-:: "Redistribution and use in source and binary forms, with or without
-:: modification, are permitted provided that the following conditions are
-:: met:
-:: * Redistributions of source code must retain the above copyright
-:: notice, this list of conditions and the following disclaimer.
-:: * Redistributions in binary form must reproduce the above copyright
-:: notice, this list of conditions and the following disclaimer in
-:: the documentation and/or other materials provided with the
-:: distribution.
-:: * Neither the name of The Qt Company Ltd nor the names of its
-:: contributors may be used to endorse or promote products derived
-:: from this software without specific prior written permission.
-::
-::
-:: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-:: "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-:: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-:: A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-:: OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-:: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-:: LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-:: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-:: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-:: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-:: OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-::
-:: $QT_END_LICENSE$
-::
-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:: SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
qsb -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -o noisy.vert.qsb noisy.vert
qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o noisy.frag.qsb noisy.frag
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..0b7cb1306b 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;
diff --git a/examples/quick/scenegraph/metaltextureimport/CMakeLists.txt b/examples/quick/scenegraph/metaltextureimport/CMakeLists.txt
index d01ee2a3df..f76489116a 100644
--- a/examples/quick/scenegraph/metaltextureimport/CMakeLists.txt
+++ b/examples/quick/scenegraph/metaltextureimport/CMakeLists.txt
@@ -1,54 +1,32 @@
-# Generated from metaltextureimport.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(metaltextureimport LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/metaltextureimport")
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
qt_add_executable(metaltextureimport
main.cpp
metaltextureimport.h metaltextureimport.mm
)
+
set_target_properties(metaltextureimport PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
-)
-target_link_libraries(metaltextureimport PUBLIC
- "-framework Metal"
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(metaltextureimport_resource_files
- "main.qml"
- "squircle.frag"
- "squircle.vert"
+ # Prevent name clash with build subdirectory on case-insensitive file systems
+ OUTPUT_NAME metaltextureimportapp
)
-qt6_add_resources(metaltextureimport "metaltextureimport"
- PREFIX
- "/scenegraph/metaltextureimport"
- FILES
- ${metaltextureimport_resource_files}
+target_link_libraries(metaltextureimport PUBLIC
+ "-framework Metal"
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
if(MACOS)
@@ -57,15 +35,28 @@ if(MACOS)
)
endif()
-install(TARGETS metaltextureimport
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+qt_add_qml_module(metaltextureimport
+ URI MetalTextureImport
+ QML_FILES
+ main.qml
+ RESOURCES
+ squircle.frag
+ squircle.vert
+ RESOURCE_PREFIX /scenegraph/metaltextureimport
+ NO_RESOURCE_TARGET_PATH
)
-set_target_properties(metaltextureimport PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI MetalTextureImport
+install(TARGETS metaltextureimport
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-qt6_qml_type_registration(metaltextureimport)
+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 3fb2cd357e..3b4912829e 100644
--- a/examples/quick/scenegraph/metaltextureimport/doc/src/metaltextureimport.qdoc
+++ b/examples/quick/scenegraph/metaltextureimport/doc/src/metaltextureimport.qdoc
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example scenegraph/metaltextureimport
\title Scene Graph - Metal Texture Import
+ \examplecategory {Graphics}
\ingroup qtquickexamples
\brief Shows how to use a texture created directly with Metal.
@@ -87,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/main.cpp b/examples/quick/scenegraph/metaltextureimport/main.cpp
index 2abc1c5671..d5b7725db4 100644
--- a/examples/quick/scenegraph/metaltextureimport/main.cpp
+++ b/examples/quick/scenegraph/metaltextureimport/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QtQuick/QQuickView>
@@ -54,7 +7,7 @@
int main(int argc, char **argv)
{
QGuiApplication app(argc, argv);
- QQuickWindow::setGraphicsApi(QSGRendererInterface::MetalRhi);
+ QQuickWindow::setGraphicsApi(QSGRendererInterface::Metal);
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
diff --git a/examples/quick/scenegraph/metaltextureimport/main.qml b/examples/quick/scenegraph/metaltextureimport/main.qml
index facab4e440..dfc6252910 100644
--- a/examples/quick/scenegraph/metaltextureimport/main.qml
+++ b/examples/quick/scenegraph/metaltextureimport/main.qml
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
//! [1]
-import MetalTextureImport 1.0
+import MetalTextureImport
//! [1]
Rectangle {
diff --git a/examples/quick/scenegraph/metaltextureimport/metaltextureimport.h b/examples/quick/scenegraph/metaltextureimport/metaltextureimport.h
index 3ed7c548d7..45f65193fb 100644
--- a/examples/quick/scenegraph/metaltextureimport/metaltextureimport.h
+++ b/examples/quick/scenegraph/metaltextureimport/metaltextureimport.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef METALTEXTUREIMPORT_H
#define METALTEXTUREIMPORT_H
diff --git a/examples/quick/scenegraph/metaltextureimport/metaltextureimport.mm b/examples/quick/scenegraph/metaltextureimport/metaltextureimport.mm
index 9698b16f0b..307d7e9aa1 100644
--- a/examples/quick/scenegraph/metaltextureimport/metaltextureimport.mm
+++ b/examples/quick/scenegraph/metaltextureimport/metaltextureimport.mm
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "metaltextureimport.h"
#include <QtGui/QScreen>
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 1cbff4c7f5..21c7b5c763 100644
--- a/examples/quick/scenegraph/metalunderqml/CMakeLists.txt
+++ b/examples/quick/scenegraph/metalunderqml/CMakeLists.txt
@@ -1,54 +1,29 @@
-# Generated from metalunderqml.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(metalunderqml LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/metalunderqml")
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
qt_add_executable(metalunderqml
main.cpp
metalsquircle.h metalsquircle.mm
)
+
set_target_properties(metalunderqml PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
+
target_link_libraries(metalunderqml PUBLIC
"-framework Metal"
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(metalunderqml_resource_files
- "main.qml"
- "squircle.frag"
- "squircle.vert"
-)
-
-qt6_add_resources(metalunderqml "metalunderqml"
- PREFIX
- "/scenegraph/metalunderqml"
- FILES
- ${metalunderqml_resource_files}
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
if(MACOS)
@@ -57,15 +32,28 @@ if(MACOS)
)
endif()
+qt_add_qml_module(metalunderqml
+ URI MetalUnderQML
+ QML_FILES
+ main.qml
+ RESOURCES
+ squircle.frag
+ squircle.vert
+ RESOURCE_PREFIX /scenegraph/metalunderqml
+ NO_RESOURCE_TARGET_PATH
+ )
+
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}
)
-set_target_properties(metalunderqml PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI MetalUnderQML
+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
)
-
-qt6_qml_type_registration(metalunderqml)
+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 fb28270315..fa41ca489f 100644
--- a/examples/quick/scenegraph/metalunderqml/doc/src/metalunderqml.qdoc
+++ b/examples/quick/scenegraph/metalunderqml/doc/src/metalunderqml.qdoc
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/main.cpp b/examples/quick/scenegraph/metalunderqml/main.cpp
index 4a657a6bf4..c18c3c5ea0 100644
--- a/examples/quick/scenegraph/metalunderqml/main.cpp
+++ b/examples/quick/scenegraph/metalunderqml/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QtQuick/QQuickView>
@@ -56,12 +9,12 @@ int main(int argc, char **argv)
{
QGuiApplication app(argc, argv);
- QQuickWindow::setGraphicsApi(QSGRendererInterface::MetalRhi);
+ QQuickWindow::setGraphicsApi(QSGRendererInterface::Metal);
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qrc:///scenegraph/metalunderqml/main.qml"));
view.show();
- return app.exec();
+ return QGuiApplication::exec();
}
diff --git a/examples/quick/scenegraph/metalunderqml/main.qml b/examples/quick/scenegraph/metalunderqml/main.qml
index d41a0b8e81..3329822eb1 100644
--- a/examples/quick/scenegraph/metalunderqml/main.qml
+++ b/examples/quick/scenegraph/metalunderqml/main.qml
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [1]
-import QtQuick 2.0
-import MetalUnderQML 1.0
+import QtQuick
+import MetalUnderQML
Item {
diff --git a/examples/quick/scenegraph/metalunderqml/metalsquircle.h b/examples/quick/scenegraph/metalunderqml/metalsquircle.h
index 6b3af6994c..56da89be56 100644
--- a/examples/quick/scenegraph/metalunderqml/metalsquircle.h
+++ b/examples/quick/scenegraph/metalunderqml/metalsquircle.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef METALSQUIRCLE_H
#define METALSQUIRCLE_H
diff --git a/examples/quick/scenegraph/metalunderqml/metalsquircle.mm b/examples/quick/scenegraph/metalunderqml/metalsquircle.mm
index 4acedcab02..6276c990a0 100644
--- a/examples/quick/scenegraph/metalunderqml/metalsquircle.mm
+++ b/examples/quick/scenegraph/metalunderqml/metalsquircle.mm
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "metalsquircle.h"
#include <QtCore/QRunnable>
@@ -205,7 +158,7 @@ void SquircleRenderer::frameStart()
QSGRendererInterface *rif = m_window->rendererInterface();
// We are not prepared for anything other than running with the RHI and its Metal backend.
- Q_ASSERT(rif->graphicsApi() == QSGRendererInterface::MetalRhi);
+ Q_ASSERT(rif->graphicsApi() == QSGRendererInterface::Metal);
m_device = (id<MTLDevice>) rif->getResource(m_window, QSGRendererInterface::DeviceResource);
Q_ASSERT(m_device);
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 0772c05259..8a95221811 100644
--- a/examples/quick/scenegraph/openglunderqml/CMakeLists.txt
+++ b/examples/quick/scenegraph/openglunderqml/CMakeLists.txt
@@ -1,62 +1,49 @@
-# Generated from openglunderqml.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(openglunderqml LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup()
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/openglunderqml")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(openglunderqml
+qt_add_executable(openglunderqml WIN32 MACOSX_BUNDLE
main.cpp
squircle.cpp squircle.h
)
+
set_target_properties(openglunderqml PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(openglunderqml PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
+ # Prevent name clash with build subdirectory on case-insensitive file systems
+ OUTPUT_NAME openglunderqmlapp
+)
-# Resources:
-set(openglunderqml_resource_files
- "main.qml"
+target_link_libraries(openglunderqml PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(openglunderqml "openglunderqml"
- PREFIX
- "/scenegraph/openglunderqml"
- FILES
- ${openglunderqml_resource_files}
+qt_add_qml_module(openglunderqml
+ URI OpenGLUnderQML
+ QML_FILES main.qml
+ RESOURCE_PREFIX /scenegraph/openglunderqml
+ NO_RESOURCE_TARGET_PATH
)
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}
)
-set_target_properties(openglunderqml PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI OpenGLUnderQML
+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
)
-
-qt6_qml_type_registration(openglunderqml)
+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 c2944970a5..aba95b471a 100644
--- a/examples/quick/scenegraph/openglunderqml/doc/src/openglunderqml.qdoc
+++ b/examples/quick/scenegraph/openglunderqml/doc/src/openglunderqml.qdoc
@@ -1,34 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/main.cpp b/examples/quick/scenegraph/openglunderqml/main.cpp
index d92cbb2d80..3c32376e4e 100644
--- a/examples/quick/scenegraph/openglunderqml/main.cpp
+++ b/examples/quick/scenegraph/openglunderqml/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
@@ -59,13 +12,13 @@ int main(int argc, char **argv)
{
QGuiApplication app(argc, argv);
- QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGLRhi);
+ QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qrc:///scenegraph/openglunderqml/main.qml"));
view.show();
- return app.exec();
+ return QGuiApplication::exec();
}
//! [1]
diff --git a/examples/quick/scenegraph/openglunderqml/main.qml b/examples/quick/scenegraph/openglunderqml/main.qml
index 368d59a0e2..1cb088b538 100644
--- a/examples/quick/scenegraph/openglunderqml/main.qml
+++ b/examples/quick/scenegraph/openglunderqml/main.qml
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [1]
-import QtQuick 2.0
-import OpenGLUnderQML 1.0
+import QtQuick
+import OpenGLUnderQML
Item {
@@ -79,7 +32,7 @@ Item {
id: label
color: "black"
wrapMode: Text.WordWrap
- text: "The background here is a squircle rendered with raw OpenGL using the 'beforeRender()' signal in QQuickWindow. This text label and its border is rendered using QML"
+ text: qsTr("The background here is a squircle rendered with raw OpenGL using the 'beforeRender()' signal in QQuickWindow. This text label and its border is rendered using QML")
anchors.right: parent.right
anchors.left: parent.left
anchors.bottom: parent.bottom
diff --git a/examples/quick/scenegraph/openglunderqml/squircle.cpp b/examples/quick/scenegraph/openglunderqml/squircle.cpp
index d80309cbfb..13f3075a28 100644
--- a/examples/quick/scenegraph/openglunderqml/squircle.cpp
+++ b/examples/quick/scenegraph/openglunderqml/squircle.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "squircle.h"
@@ -137,7 +90,7 @@ void SquircleRenderer::init()
{
if (!m_program) {
QSGRendererInterface *rif = m_window->rendererInterface();
- Q_ASSERT(rif->graphicsApi() == QSGRendererInterface::OpenGL || rif->graphicsApi() == QSGRendererInterface::OpenGLRhi);
+ Q_ASSERT(rif->graphicsApi() == QSGRendererInterface::OpenGL);
initializeOpenGLFunctions();
diff --git a/examples/quick/scenegraph/openglunderqml/squircle.h b/examples/quick/scenegraph/openglunderqml/squircle.h
index c0a8712603..2112d658b0 100644
--- a/examples/quick/scenegraph/openglunderqml/squircle.h
+++ b/examples/quick/scenegraph/openglunderqml/squircle.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef SQUIRCLE_H
#define SQUIRCLE_H
@@ -63,7 +16,6 @@ class SquircleRenderer : public QObject, protected QOpenGLFunctions
{
Q_OBJECT
public:
- SquircleRenderer() : m_t(0), m_program(0) { }
~SquircleRenderer();
void setT(qreal t) { m_t = t; }
@@ -76,9 +28,9 @@ public slots:
private:
QSize m_viewportSize;
- qreal m_t;
- QOpenGLShaderProgram *m_program;
- QQuickWindow *m_window;
+ qreal m_t = 0.0;
+ QOpenGLShaderProgram *m_program = nullptr;
+ QQuickWindow *m_window = nullptr;
};
//! [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 0c34fb4402..0000000000
--- a/examples/quick/scenegraph/shared/logorenderer.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#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 e39a2db57d..0000000000
--- a/examples/quick/scenegraph/shared/logorenderer.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#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 de00297e69..0945a13c98 100644
--- a/examples/quick/scenegraph/threadedanimation/CMakeLists.txt
+++ b/examples/quick/scenegraph/threadedanimation/CMakeLists.txt
@@ -1,63 +1,44 @@
-# Generated from threadedanimation.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(threadedanimation LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup()
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/threadedanimation")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(threadedanimation
+qt_add_executable(threadedanimation WIN32 MACOSX_BUNDLE
main.cpp
spinner.cpp spinner.h
)
-set_target_properties(threadedanimation PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(threadedanimation PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(threadedanimation_resource_files
- "main.qml"
- "spinner.png"
+target_link_libraries(threadedanimation PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(threadedanimation "threadedanimation"
- PREFIX
- "/scenegraph/threadedanimation"
- FILES
- ${threadedanimation_resource_files}
+qt_add_qml_module(threadedanimation
+ URI Spinner
+ QML_FILES main.qml
+ RESOURCES spinner.png
+ RESOURCE_PREFIX /scenegraph/threadedanimation
+ NO_RESOURCE_TARGET_PATH
)
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}
)
-set_target_properties(threadedanimation PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI Spinner
+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
)
-
-qt6_qml_type_registration(threadedanimation)
+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/threadedanimation/main.cpp b/examples/quick/scenegraph/threadedanimation/main.cpp
index 85ff486b16..9b2b82973e 100644
--- a/examples/quick/scenegraph/threadedanimation/main.cpp
+++ b/examples/quick/scenegraph/threadedanimation/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QtQuick/QQuickView>
@@ -61,5 +14,5 @@ int main(int argc, char **argv)
view.setSource(QUrl("qrc:///scenegraph/threadedanimation/main.qml"));
view.show();
- return app.exec();
+ return QGuiApplication::exec();
}
diff --git a/examples/quick/scenegraph/threadedanimation/main.qml b/examples/quick/scenegraph/threadedanimation/main.qml
index 279ffe5bd6..23def8fbcf 100644
--- a/examples/quick/scenegraph/threadedanimation/main.qml
+++ b/examples/quick/scenegraph/threadedanimation/main.qml
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [1]
-import QtQuick 2.0
-import Spinner 1.0
+import QtQuick
+import Spinner
Rectangle {
@@ -74,7 +27,7 @@ Rectangle {
Text {
id: blockingLabel
color: blocker.running ? "red" : "black"
- text: blocker.running ? "Blocked!" : "Not blocked"
+ text: blocker.running ? qsTr("Blocked!") : qsTr("Not blocked")
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
anchors.topMargin: 100
@@ -133,7 +86,7 @@ Rectangle {
id: label
color: "black"
wrapMode: Text.WordWrap
- text: "This application shows two spinners. The one to the right is animated on the scene graph thread (when applicable) and the left one is using the normal Qt Quick animation system."
+ text: qsTr("This application shows two spinners. The one to the right is animated on the scene graph thread (when applicable) and the left one is using the normal Qt Quick animation system.")
anchors.right: parent.right
anchors.left: parent.left
anchors.bottom: parent.bottom
diff --git a/examples/quick/scenegraph/threadedanimation/spinner.cpp b/examples/quick/scenegraph/threadedanimation/spinner.cpp
index c19354b3f5..befc40d98f 100644
--- a/examples/quick/scenegraph/threadedanimation/spinner.cpp
+++ b/examples/quick/scenegraph/threadedanimation/spinner.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "spinner.h"
diff --git a/examples/quick/scenegraph/threadedanimation/spinner.h b/examples/quick/scenegraph/threadedanimation/spinner.h
index fd3eaa7751..87e43e77e1 100644
--- a/examples/quick/scenegraph/threadedanimation/spinner.h
+++ b/examples/quick/scenegraph/threadedanimation/spinner.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef SPINNER_H
#define SPINNER_H
@@ -67,7 +20,7 @@ public:
void setSpinning(bool spinning);
protected:
- QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *);
+ QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
signals:
void spinningChanged();
diff --git a/examples/quick/scenegraph/twotextureproviders/CMakeLists.txt b/examples/quick/scenegraph/twotextureproviders/CMakeLists.txt
index 5515a14b23..cf597d3f0b 100644
--- a/examples/quick/scenegraph/twotextureproviders/CMakeLists.txt
+++ b/examples/quick/scenegraph/twotextureproviders/CMakeLists.txt
@@ -1,65 +1,56 @@
-# Generated from twotextureproviders.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(twotextureproviders LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick ShaderTools)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup()
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/twotextureproviders")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(twotextureproviders
+qt_add_executable(twotextureproviders WIN32 MACOSX_BUNDLE
main.cpp
xorblender.cpp xorblender.h
)
-set_target_properties(twotextureproviders PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(twotextureproviders PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
+target_link_libraries(twotextureproviders PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
-# Resources:
-set(twotextureproviders_resource_files
- "main.qml"
- "shaders/checker.frag.qsb"
- "shaders/xorblender.frag.qsb"
- "shaders/xorblender.vert.qsb"
+qt_add_qml_module(twotextureproviders
+ URI SceneGraphRendering
+ QML_FILES
+ main.qml
+ RESOURCE_PREFIX /scenegraph/twotextureproviders
+ NO_RESOURCE_TARGET_PATH
)
-qt6_add_resources(twotextureproviders "twotextureproviders"
+qt6_add_shaders(twotextureproviders "shaders"
+ BATCHABLE
+ PRECOMPILE
+ OPTIMIZED
PREFIX
"/scenegraph/twotextureproviders"
FILES
- ${twotextureproviders_resource_files}
+ "shaders/xorblender.vert"
+ "shaders/xorblender.frag"
+ "shaders/checker.frag"
)
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}
)
-set_target_properties(twotextureproviders PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI SceneGraphRendering
+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
)
-
-qt6_qml_type_registration(twotextureproviders)
+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 ad0eb849e3..1bdd1ab551 100644
--- a/examples/quick/scenegraph/twotextureproviders/doc/src/twotextureproviders.qdoc
+++ b/examples/quick/scenegraph/twotextureproviders/doc/src/twotextureproviders.qdoc
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Gunnar Sletta <gunnar@sletta.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2014 Gunnar Sletta <gunnar@sletta.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/main.cpp b/examples/quick/scenegraph/twotextureproviders/main.cpp
index 669b42cb40..e987147bbb 100644
--- a/examples/quick/scenegraph/twotextureproviders/main.cpp
+++ b/examples/quick/scenegraph/twotextureproviders/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Gunnar Sletta <gunnar@sletta.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2014 Gunnar Sletta <gunnar@sletta.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
@@ -65,5 +18,5 @@ int main(int argc, char **argv)
view.setSource(QUrl("qrc:///scenegraph/twotextureproviders/main.qml"));
view.show();
- return app.exec();
+ return QGuiApplication::exec();
}
diff --git a/examples/quick/scenegraph/twotextureproviders/main.qml b/examples/quick/scenegraph/twotextureproviders/main.qml
index e18cfd56e1..13d229631e 100644
--- a/examples/quick/scenegraph/twotextureproviders/main.qml
+++ b/examples/quick/scenegraph/twotextureproviders/main.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Gunnar Sletta <gunnar@sletta.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.2
-import SceneGraphRendering 1.0
+// Copyright (C) 2014 Gunnar Sletta <gunnar@sletta.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import SceneGraphRendering
Item {
id: root
@@ -98,7 +51,7 @@ Item {
Text {
anchors.centerIn: parent
color: "black" // Qt.hsla(0.8, 0.8, 0.8);
- text: "Qt\nQuick"
+ text: qsTr("Qt\nQuick")
horizontalAlignment: Text.AlignHCenter
@@ -136,8 +89,6 @@ Item {
anchors.bottom: parent.bottom
anchors.margins: 20
wrapMode: Text.WordWrap
- text: "This example creates two animated items and sets 'layer.enabled: true' on both of them. " +
- "This turns the items into texture providers and we can access their texture from C++ in a custom material. " +
- "The XorBlender is a custom C++ item which uses performs an Xor blend between them."
+ text: qsTr("This example creates two animated items and sets 'layer.enabled: true' on both of them. This turns the items into texture providers and we can access their texture from C++ in a custom material. The XorBlender is a custom C++ item which uses performs an Xor blend between them.")
}
}
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/compile.bat b/examples/quick/scenegraph/twotextureproviders/shaders/compile.bat
deleted file mode 100644
index 99e0ff2a91..0000000000
--- a/examples/quick/scenegraph/twotextureproviders/shaders/compile.bat
+++ /dev/null
@@ -1,42 +0,0 @@
-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-::
-:: Copyright (C) 2020 The Qt Company Ltd.
-:: Contact: https://www.qt.io/licensing/
-::
-:: This file is part of the QtQuick module of the Qt Toolkit.
-::
-:: $QT_BEGIN_LICENSE:LGPL$
-:: Commercial License Usage
-:: Licensees holding valid commercial Qt licenses may use this file in
-:: accordance with the commercial license agreement provided with the
-:: Software or, alternatively, in accordance with the terms contained in
-:: a written agreement between you and The Qt Company. For licensing terms
-:: and conditions see https://www.qt.io/terms-conditions. For further
-:: information use the contact form at https://www.qt.io/contact-us.
-::
-:: GNU Lesser General Public License Usage
-:: Alternatively, this file may be used under the terms of the GNU Lesser
-:: General Public License version 3 as published by the Free Software
-:: Foundation and appearing in the file LICENSE.LGPL3 included in the
-:: packaging of this file. Please review the following information to
-:: ensure the GNU Lesser General Public License version 3 requirements
-:: will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-::
-:: GNU General Public License Usage
-:: Alternatively, this file may be used under the terms of the GNU
-:: General Public License version 2.0 or (at your option) the GNU General
-:: Public license version 3 or any later version approved by the KDE Free
-:: Qt Foundation. The licenses are as published by the Free Software
-:: Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-:: included in the packaging of this file. Please review the following
-:: information to ensure the GNU General Public License requirements will
-:: be met: https://www.gnu.org/licenses/gpl-2.0.html and
-:: https://www.gnu.org/licenses/gpl-3.0.html.
-::
-:: $QT_END_LICENSE$
-::
-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
-qsb --glsl "100es,120,150" --hlsl 50 --msl 12 -c -O -o checker.frag.qsb checker.frag
-qsb -b --glsl "100es,120,150" --hlsl 50 --msl 12 -c -O -o xorblender.vert.qsb xorblender.vert
-qsb --glsl "100es,120,150" --hlsl 50 --msl 12 -c -O -o xorblender.frag.qsb xorblender.frag
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/twotextureproviders/xorblender.cpp b/examples/quick/scenegraph/twotextureproviders/xorblender.cpp
index 87ef00aeac..5d6ffb3805 100644
--- a/examples/quick/scenegraph/twotextureproviders/xorblender.cpp
+++ b/examples/quick/scenegraph/twotextureproviders/xorblender.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Gunnar Sletta <gunnar@sletta.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2014 Gunnar Sletta <gunnar@sletta.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "xorblender.h"
diff --git a/examples/quick/scenegraph/twotextureproviders/xorblender.h b/examples/quick/scenegraph/twotextureproviders/xorblender.h
index 17557b8efd..1ed5f6571a 100644
--- a/examples/quick/scenegraph/twotextureproviders/xorblender.h
+++ b/examples/quick/scenegraph/twotextureproviders/xorblender.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Gunnar Sletta <gunnar@sletta.org>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2014 Gunnar Sletta <gunnar@sletta.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef XORBLENDER_H
#define XORBLENDER_H
@@ -61,7 +14,7 @@ class XorBlender : public QQuickItem
QML_ELEMENT
public:
- explicit XorBlender(QQuickItem *parent = 0);
+ explicit XorBlender(QQuickItem *parent = nullptr);
QQuickItem *source1() const { return m_source1; }
QQuickItem *source2() const { return m_source2; }
diff --git a/examples/quick/scenegraph/vulkantextureimport/CMakeLists.txt b/examples/quick/scenegraph/vulkantextureimport/CMakeLists.txt
index b26aedf6ee..778fe5bd87 100644
--- a/examples/quick/scenegraph/vulkantextureimport/CMakeLists.txt
+++ b/examples/quick/scenegraph/vulkantextureimport/CMakeLists.txt
@@ -1,64 +1,52 @@
-# Generated from vulkantextureimport.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(vulkantextureimport LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup()
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/vulkantextureimport")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(vulkantextureimport
+qt_add_executable(vulkantextureimport WIN32 MACOSX_BUNDLE
main.cpp
vulkantextureimport.cpp vulkantextureimport.h
)
+
set_target_properties(vulkantextureimport PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
+ # Prevent name clash with build subdirectory on case-insensitive file systems
+ OUTPUT_NAME vulkantextureimportapp
)
-target_link_libraries(vulkantextureimport PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(vulkantextureimport_resource_files
- "main.qml"
- "squircle.frag.spv"
- "squircle.vert.spv"
+target_link_libraries(vulkantextureimport PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(vulkantextureimport "vulkantextureimport"
- PREFIX
- "/scenegraph/vulkantextureimport"
- FILES
- ${vulkantextureimport_resource_files}
+qt_add_qml_module(vulkantextureimport
+ URI VulkanTextureImport
+ QML_FILES
+ main.qml
+ RESOURCES
+ squircle.frag.spv
+ squircle.vert.spv
+ RESOURCE_PREFIX /scenegraph/vulkantextureimport
+ NO_RESOURCE_TARGET_PATH
)
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}
)
-set_target_properties(vulkantextureimport PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI VulkanTextureImport
+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
)
-
-qt6_qml_type_registration(vulkantextureimport)
+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 6da6b7ab6d..97e7d8045f 100644
--- a/examples/quick/scenegraph/vulkantextureimport/doc/src/vulkantextureimport.qdoc
+++ b/examples/quick/scenegraph/vulkantextureimport/doc/src/vulkantextureimport.qdoc
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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/vulkantextureimport/main.cpp b/examples/quick/scenegraph/vulkantextureimport/main.cpp
index d2eb5184dc..3550bd782e 100644
--- a/examples/quick/scenegraph/vulkantextureimport/main.cpp
+++ b/examples/quick/scenegraph/vulkantextureimport/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QtQuick/QQuickView>
@@ -55,7 +8,7 @@ int main(int argc, char **argv)
{
QGuiApplication app(argc, argv);
- QQuickWindow::setGraphicsApi(QSGRendererInterface::VulkanRhi);
+ QQuickWindow::setGraphicsApi(QSGRendererInterface::Vulkan);
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
diff --git a/examples/quick/scenegraph/vulkantextureimport/main.qml b/examples/quick/scenegraph/vulkantextureimport/main.qml
index 91adf4c394..e718258e40 100644
--- a/examples/quick/scenegraph/vulkantextureimport/main.qml
+++ b/examples/quick/scenegraph/vulkantextureimport/main.qml
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
//! [1]
-import VulkanTextureImport 1.0
+import VulkanTextureImport
//! [1]
Rectangle {
@@ -118,6 +71,6 @@ Rectangle {
anchors.right: renderer.right
anchors.margins: 20
wrapMode: Text.WordWrap
- text: "The squircle, using rendering code borrowed from the vulkanunderqml example, is rendered into a texture directly with Vulkan. The VkImage is then imported and used in a custom Qt Quick item."
+ text: qsTr("The squircle, using rendering code borrowed from the vulkanunderqml example, is rendered into a texture directly with Vulkan. The VkImage is then imported and used in a custom Qt Quick item.")
}
}
diff --git a/examples/quick/scenegraph/vulkantextureimport/vulkantextureimport.cpp b/examples/quick/scenegraph/vulkantextureimport/vulkantextureimport.cpp
index 26b75d54bb..dce74ae279 100644
--- a/examples/quick/scenegraph/vulkantextureimport/vulkantextureimport.cpp
+++ b/examples/quick/scenegraph/vulkantextureimport/vulkantextureimport.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "vulkantextureimport.h"
diff --git a/examples/quick/scenegraph/vulkantextureimport/vulkantextureimport.h b/examples/quick/scenegraph/vulkantextureimport/vulkantextureimport.h
index 401b5546f9..617577038e 100644
--- a/examples/quick/scenegraph/vulkantextureimport/vulkantextureimport.h
+++ b/examples/quick/scenegraph/vulkantextureimport/vulkantextureimport.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef VULKANTEXTUREIMPORT_H
#define VULKANTEXTUREIMPORT_H
diff --git a/examples/quick/scenegraph/vulkanunderqml/CMakeLists.txt b/examples/quick/scenegraph/vulkanunderqml/CMakeLists.txt
index 96741c6e86..12b07b4518 100644
--- a/examples/quick/scenegraph/vulkanunderqml/CMakeLists.txt
+++ b/examples/quick/scenegraph/vulkanunderqml/CMakeLists.txt
@@ -1,64 +1,52 @@
-# Generated from vulkanunderqml.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(vulkanunderqml LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup()
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/scenegraph/vulkanunderqml")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Qml)
-find_package(Qt6 COMPONENTS Quick)
-
-qt_add_executable(vulkanunderqml
+qt_add_executable(vulkanunderqml WIN32 MACOSX_BUNDLE
main.cpp
vulkansquircle.cpp vulkansquircle.h
)
+
set_target_properties(vulkanunderqml PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
+ # Prevent name clash with build subdirectory on case-insensitive file systems
+ OUTPUT_NAME vulkanunderqmlapp
)
-target_link_libraries(vulkanunderqml PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(vulkanunderqml_resource_files
- "main.qml"
- "squircle.frag.spv"
- "squircle.vert.spv"
+target_link_libraries(vulkanunderqml PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(vulkanunderqml "vulkanunderqml"
- PREFIX
- "/scenegraph/vulkanunderqml"
- FILES
- ${vulkanunderqml_resource_files}
+qt_add_qml_module(vulkanunderqml
+ URI VulkanUnderQML
+ QML_FILES
+ main.qml
+ RESOURCES
+ squircle.frag.spv
+ squircle.vert.spv
+ RESOURCE_PREFIX /scenegraph/vulkanunderqml
+ NO_RESOURCE_TARGET_PATH
)
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}
)
-set_target_properties(vulkanunderqml PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI VulkanUnderQML
+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
)
-
-qt6_qml_type_registration(vulkanunderqml)
+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 d11982c074..bb29731554 100644
--- a/examples/quick/scenegraph/vulkanunderqml/doc/src/vulkanunderqml.qdoc
+++ b/examples/quick/scenegraph/vulkanunderqml/doc/src/vulkanunderqml.qdoc
@@ -1,63 +1,23 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\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
@@ -65,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/scenegraph/vulkanunderqml/main.cpp b/examples/quick/scenegraph/vulkanunderqml/main.cpp
index e4a3f36ca7..03e48fba84 100644
--- a/examples/quick/scenegraph/vulkanunderqml/main.cpp
+++ b/examples/quick/scenegraph/vulkanunderqml/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QtQuick/QQuickView>
@@ -56,7 +9,7 @@ int main(int argc, char **argv)
QGuiApplication app(argc, argv);
// This example needs Vulkan. It will not run otherwise.
- QQuickWindow::setGraphicsApi(QSGRendererInterface::VulkanRhi);
+ QQuickWindow::setGraphicsApi(QSGRendererInterface::Vulkan);
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
diff --git a/examples/quick/scenegraph/vulkanunderqml/main.qml b/examples/quick/scenegraph/vulkanunderqml/main.qml
index c364ca7636..4981c352de 100644
--- a/examples/quick/scenegraph/vulkanunderqml/main.qml
+++ b/examples/quick/scenegraph/vulkanunderqml/main.qml
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//! [1]
-import QtQuick 2.0
-import VulkanUnderQML 1.0
+import QtQuick
+import VulkanUnderQML
Item {
@@ -79,7 +32,7 @@ Item {
id: label
color: "black"
wrapMode: Text.WordWrap
- text: "The background here is a squircle rendered with raw Vulkan using the beforeRendering() and beforeRenderPassRecording() signals in QQuickWindow. This text label and its border is rendered using QML"
+ text: qsTr("The background here is a squircle rendered with raw Vulkan 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
diff --git a/examples/quick/scenegraph/vulkanunderqml/vulkansquircle.cpp b/examples/quick/scenegraph/vulkanunderqml/vulkansquircle.cpp
index 5942b49843..6b47cde93d 100644
--- a/examples/quick/scenegraph/vulkanunderqml/vulkansquircle.cpp
+++ b/examples/quick/scenegraph/vulkanunderqml/vulkansquircle.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "vulkansquircle.h"
#include <QtCore/QRunnable>
@@ -205,7 +158,7 @@ void SquircleRenderer::frameStart()
QSGRendererInterface *rif = m_window->rendererInterface();
// We are not prepared for anything other than running with the RHI and its Vulkan backend.
- Q_ASSERT(rif->graphicsApi() == QSGRendererInterface::VulkanRhi);
+ Q_ASSERT(rif->graphicsApi() == QSGRendererInterface::Vulkan);
if (m_vert.isEmpty())
prepareShader(VertexStage);
@@ -305,8 +258,6 @@ static inline VkDeviceSize aligned(VkDeviceSize v, VkDeviceSize byteAlign)
void SquircleRenderer::init(int framesInFlight)
{
- qDebug("init");
-
Q_ASSERT(framesInFlight <= 3);
m_initialized = true;
@@ -391,7 +342,7 @@ void SquircleRenderer::init(int framesInFlight)
// example.
// We use one memory allocation for all uniform buffers, but then have to
- // watch out for the buffer offset aligment requirement, which may be as
+ // watch out for the buffer offset alignment requirement, which may be as
// large as 256 bytes.
m_allocPerUbuf = aligned(UBUF_SIZE, physDevProps.limits.minUniformBufferOffsetAlignment);
diff --git a/examples/quick/scenegraph/vulkanunderqml/vulkansquircle.h b/examples/quick/scenegraph/vulkanunderqml/vulkansquircle.h
index fd0114535f..0bdebc7ac6 100644
--- a/examples/quick/scenegraph/vulkanunderqml/vulkansquircle.h
+++ b/examples/quick/scenegraph/vulkanunderqml/vulkansquircle.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef VULKANSQUIRCLE_H
#define VULKANSQUIRCLE_H
diff --git a/examples/quick/shadereffects/CMakeLists.txt b/examples/quick/shadereffects/CMakeLists.txt
index 136cff7783..b86a3fa5d7 100644
--- a/examples/quick/shadereffects/CMakeLists.txt
+++ b/examples/quick/shadereffects/CMakeLists.txt
@@ -1,63 +1,61 @@
-# Generated from shadereffects.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(shadereffects LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick ShaderTools)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/shadereffects")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(shadereffects
+qt_add_executable(shadereffectsexample
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(shadereffects PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(shadereffects PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
+target_link_libraries(shadereffectsexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
-# Resources:
-set(shadereffects_resource_files
- "content/Slider.qml"
- "content/face-smile.png"
- "content/qt-logo.png"
- "content/shaders/blur.frag.qsb"
- "content/shaders/colorize.frag.qsb"
- "content/shaders/genie.vert.qsb"
- "content/shaders/outline.frag.qsb"
- "content/shaders/shadow.frag.qsb"
- "content/shaders/wobble.frag.qsb"
- "shadereffects.qml"
+qt_add_qml_module(shadereffectsexample
+ URI shadereffects
+ QML_FILES
+ "shadereffects.qml"
+ RESOURCES
+ "content/face-smile.png"
+ "content/qt-logo.png"
)
-qt6_add_resources(shadereffects "shadereffects"
+qt6_add_shaders(shadereffectsexample "shaders"
+ BATCHABLE
+ PRECOMPILE
+ OPTIMIZED
PREFIX
- "/shadereffects"
+ "/qt/qml/shadereffects"
FILES
- ${shadereffects_resource_files}
+ "content/shaders/genie.vert"
+ "content/shaders/blur.frag"
+ "content/shaders/colorize.frag"
+ "content/shaders/outline.frag"
+ "content/shaders/shadow.frag"
+ "content/shaders/wobble.frag"
+)
+
+install(TARGETS shadereffectsexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS shadereffects
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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/Slider.qml b/examples/quick/shadereffects/content/Slider.qml
deleted file mode 100644
index 402b722413..0000000000
--- a/examples/quick/shadereffects/content/Slider.qml
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Item {
- property real value: bar.x / (foo.width - bar.width)
- Item {
- id: foo
- width: parent.width - 4
- height: 6
- anchors.centerIn: parent
-
- Rectangle {
- height: parent.height
- anchors.left: parent.left
- anchors.right: bar.horizontalCenter
- color: "blue"
- radius: 3
- }
- Rectangle {
- height: parent.height
- anchors.left: bar.horizontalCenter
- anchors.right: parent.right
- color: "gray"
- radius: 3
- }
- Rectangle {
- anchors.fill: parent
- color: "transparent"
- radius: 3
- border.width: 2
- border.color: "black"
- }
-
- Rectangle {
- id: bar
- y: -7
- width: 20
- height: 20
- radius: 15
- color: "white"
- border.width: 2
- border.color: "black"
- MouseArea {
- anchors.fill: parent
- drag.target: parent
- drag.axis: Drag.XAxis
- drag.minimumX: 0
- drag.maximumX: foo.width - parent.width
- }
- }
- }
-}
-
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/compile.bat b/examples/quick/shadereffects/content/shaders/compile.bat
deleted file mode 100755
index e03cfde8d2..0000000000
--- a/examples/quick/shadereffects/content/shaders/compile.bat
+++ /dev/null
@@ -1,56 +0,0 @@
-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-::
-:: Copyright (C) 2019 The Qt Company Ltd.
-:: Contact: https://www.qt.io/licensing/
-::
-:: This file is part of the examples of the Qt Toolkit.
-::
-:: $QT_BEGIN_LICENSE:BSD$
-:: Commercial License Usage
-:: Licensees holding valid commercial Qt licenses may use this file in
-:: accordance with the commercial license agreement provided with the
-:: Software or, alternatively, in accordance with the terms contained in
-:: a written agreement between you and The Qt Company. For licensing terms
-:: and conditions see https://www.qt.io/terms-conditions. For further
-:: information use the contact form at https://www.qt.io/contact-us.
-::
-:: BSD License Usage
-:: Alternatively, you may use this file under the terms of the BSD license
-:: as follows:
-::
-:: "Redistribution and use in source and binary forms, with or without
-:: modification, are permitted provided that the following conditions are
-:: met:
-:: * Redistributions of source code must retain the above copyright
-:: notice, this list of conditions and the following disclaimer.
-:: * Redistributions in binary form must reproduce the above copyright
-:: notice, this list of conditions and the following disclaimer in
-:: the documentation and/or other materials provided with the
-:: distribution.
-:: * Neither the name of The Qt Company Ltd nor the names of its
-:: contributors may be used to endorse or promote products derived
-:: from this software without specific prior written permission.
-::
-::
-:: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-:: "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-:: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-:: A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-:: OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-:: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-:: LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-:: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-:: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-:: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-:: OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-::
-:: $QT_END_LICENSE$
-::
-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
-qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -c -O -o blur.frag.qsb blur.frag
-qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -c -O -o colorize.frag.qsb colorize.frag
-qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -c -O -o outline.frag.qsb outline.frag
-qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -c -O -o shadow.frag.qsb shadow.frag
-qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -c -O -o wobble.frag.qsb wobble.frag
-qsb -b --glsl "150,120,100 es" --hlsl 50 --msl 12 -c -O -o genie.vert.qsb genie.vert
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 ebb9ca7c15..134a14c618 100644
--- a/examples/quick/shadereffects/doc/src/shadereffects.qdoc
+++ b/examples/quick/shadereffects/doc/src/shadereffects.qdoc
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick Examples - Shader Effects
\example shadereffects
\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/main.cpp b/examples/quick/shadereffects/main.cpp
index 9f649e2f94..0704eba39f 100644
--- a/examples/quick/shadereffects/main.cpp
+++ b/examples/quick/shadereffects/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../shared/shared.h"
DECLARATIVE_EXAMPLE_MAIN(shadereffects/shadereffects)
diff --git a/examples/quick/shadereffects/shadereffects.qml b/examples/quick/shadereffects/shadereffects.qml
index 563a09c15d..daf3927246 100644
--- a/examples/quick/shadereffects/shadereffects.qml
+++ b/examples/quick/shadereffects/shadereffects.qml
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import QtQml.Models 2.1
-import "content"
+import QtQuick
+import QtQml.Models
+import QtQuick.Controls
Rectangle {
id: root
@@ -125,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"
@@ -135,6 +88,8 @@ Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
+ anchors.leftMargin: 4
+ anchors.rightMargin: 4
height: 40
}
}
@@ -159,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)
@@ -170,6 +125,8 @@ Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
+ anchors.leftMargin: 4
+ anchors.rightMargin: 4
height: 40
}
}
@@ -191,6 +148,8 @@ Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
+ anchors.leftMargin: 4
+ anchors.rightMargin: 4
height: 40
}
}
@@ -199,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
@@ -227,6 +186,8 @@ Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
+ anchors.leftMargin: 4
+ anchors.rightMargin: 4
height: 40
}
}
diff --git a/examples/quick/shadereffects/shadereffects.qrc b/examples/quick/shadereffects/shadereffects.qrc
index e6965d7674..7c432744ea 100644
--- a/examples/quick/shadereffects/shadereffects.qrc
+++ b/examples/quick/shadereffects/shadereffects.qrc
@@ -1,9 +1,8 @@
<RCC>
- <qresource prefix="/shadereffects">
+ <qresource prefix="/qt/qml/shadereffects">
<file>shadereffects.qml</file>
<file>content/face-smile.png</file>
<file>content/qt-logo.png</file>
- <file>content/Slider.qml</file>
<file>content/shaders/wobble.frag.qsb</file>
<file>content/shaders/blur.frag.qsb</file>
<file>content/shaders/shadow.frag.qsb</file>
diff --git a/examples/quick/shapes/CMakeLists.txt b/examples/quick/shapes/CMakeLists.txt
deleted file mode 100644
index 517f986e27..0000000000
--- a/examples/quick/shapes/CMakeLists.txt
+++ /dev/null
@@ -1,169 +0,0 @@
-# Generated from shapes.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(shapes LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/shapes")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(shapes
- main.cpp
-)
-set_target_properties(shapes PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(shapes PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("content/clippedtigers.qml"
- PROPERTIES QT_RESOURCE_ALIAS "clippedtigers.qml"
-)
-set_source_files_properties("content/interactive.qml"
- PROPERTIES QT_RESOURCE_ALIAS "interactive.qml"
-)
-set_source_files_properties("content/item10.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item10.qml"
-)
-set_source_files_properties("content/item11.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item11.qml"
-)
-set_source_files_properties("content/item12.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item12.qml"
-)
-set_source_files_properties("content/item13.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item13.qml"
-)
-set_source_files_properties("content/item14.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item14.qml"
-)
-set_source_files_properties("content/item15.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item15.qml"
-)
-set_source_files_properties("content/item17.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item17.qml"
-)
-set_source_files_properties("content/item18.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item18.qml"
-)
-set_source_files_properties("content/item2.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item2.qml"
-)
-set_source_files_properties("content/item3.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item3.qml"
-)
-set_source_files_properties("content/item4.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item4.qml"
-)
-set_source_files_properties("content/item5.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item5.qml"
-)
-set_source_files_properties("content/item6.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item6.qml"
-)
-set_source_files_properties("content/item7.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item7.qml"
-)
-set_source_files_properties("content/item8.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item8.qml"
-)
-set_source_files_properties("content/item9.qml"
- PROPERTIES QT_RESOURCE_ALIAS "item9.qml"
-)
-set_source_files_properties("content/main.qml"
- PROPERTIES QT_RESOURCE_ALIAS "main.qml"
-)
-set_source_files_properties("content/sampling.qml"
- PROPERTIES QT_RESOURCE_ALIAS "sampling.qml"
-)
-set_source_files_properties("content/shapegallery.qml"
- PROPERTIES QT_RESOURCE_ALIAS "shapegallery.qml"
-)
-set_source_files_properties("content/tapableTriangle.qml"
- PROPERTIES QT_RESOURCE_ALIAS "tapableTriangle.qml"
-)
-set_source_files_properties("content/tiger.qml"
- PROPERTIES QT_RESOURCE_ALIAS "tiger.qml"
-)
-set(shapes_resource_files
- "../shared/LauncherList.qml"
- "../shared/SimpleLauncherDelegate.qml"
- "../shared/Slider.qml"
- "../shared/images/back.png"
- "../shared/images/next.png"
- "../shared/images/slider_handle.png"
- "content/clippedtigers.qml"
- "content/interactive.qml"
- "content/item10.qml"
- "content/item11.qml"
- "content/item12.qml"
- "content/item13.qml"
- "content/item14.qml"
- "content/item15.qml"
- "content/item17.qml"
- "content/item18.qml"
- "content/item2.qml"
- "content/item3.qml"
- "content/item4.qml"
- "content/item5.qml"
- "content/item6.qml"
- "content/item7.qml"
- "content/item8.qml"
- "content/item9.qml"
- "content/main.qml"
- "content/sampling.qml"
- "content/shapegallery.qml"
- "content/tapableTriangle.qml"
- "content/tiger.qml"
-)
-
-qt6_add_resources(shapes "shapes"
- PREFIX
- "/shapes"
- FILES
- ${shapes_resource_files}
-)
-
-install(TARGETS shapes
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/quick/shapes/content/clippedtigers.qml b/examples/quick/shapes/content/clippedtigers.qml
deleted file mode 100644
index c55efdc403..0000000000
--- a/examples/quick/shapes/content/clippedtigers.qml
+++ /dev/null
@@ -1,137 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-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/content/interactive.qml b/examples/quick/shapes/content/interactive.qml
deleted file mode 100644
index 1f7aad3ab0..0000000000
--- a/examples/quick/shapes/content/interactive.qml
+++ /dev/null
@@ -1,344 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-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") }
- }
-
- property int mode: 0
- property bool showResizers: true
- property bool fill: false
-
- Row {
- x: 20
- y: 10
- spacing: 20
- Rectangle {
- border.color: "black"
- color: root.mode === 0 ? "red" : "transparent"
- width: 100
- height: 40
- Text {
- anchors.centerIn: parent
- text: "Line"
- }
- MouseArea {
- anchors.fill: parent
- onClicked: root.mode = 0
- }
- }
- Rectangle {
- border.color: "black"
- color: root.mode === 1 ? "red" : "transparent"
- width: 100
- height: 40
- Text {
- anchors.centerIn: parent
- text: "Cubic"
- }
- MouseArea {
- anchors.fill: parent
- onClicked: root.mode = 1
- }
- }
- Rectangle {
- border.color: "black"
- color: root.mode === 2 ? "red" : "transparent"
- width: 100
- height: 40
- Text {
- anchors.centerIn: parent
- text: "Quadratic"
- }
- MouseArea {
- anchors.fill: parent
- onClicked: root.mode = 2
- }
- }
-
- Slider {
- id: widthSlider
- name: "Width"
- min: 1
- max: 60
- init: 4
- }
-
- Rectangle {
- border.color: "black"
- color: root.showResizers ? "yellow" : "transparent"
- width: 50
- height: 40
- Text {
- anchors.centerIn: parent
- text: "Manip"
- }
- MouseArea {
- anchors.fill: parent
- onClicked: {
- root.showResizers = !root.showResizers;
- for (var i = 0; i < canvas.resizers.length; ++i)
- canvas.resizers[i].visible = root.showResizers;
- }
- }
- }
-
- Rectangle {
- border.color: "black"
- color: root.fill ? "yellow" : "transparent"
- width: 50
- height: 40
- Text {
- anchors.centerIn: parent
- text: "Fill"
- }
- MouseArea {
- anchors.fill: parent
- onClicked: root.fill = !root.fill
- }
- }
- }
-
- Rectangle {
- id: canvas
- width: root.width - 40
- height: root.height - 120
- x: 20
- y: 100
-
- property variant activePath: null
-
- property variant resizers: []
- property variant funcs
-
- property Component mouseArea: Component {
- Rectangle {
- id: rr
-
- property variant obj
- property string xprop
- property string yprop
-
- width: 20
- height: 20
-
- MouseArea {
- property bool a: false
-
- anchors.fill: parent
- hoverEnabled: true
- onEntered: color = "yellow"
- onExited: color = rr.color
- onPressed: a = true
- onReleased: a = false
- onPositionChanged: (mouse)=> {
- if (a) {
- var pt = mapToItem(rr.parent, mouse.x, mouse.y);
- rr.obj[rr.xprop] = pt.x
- rr.obj[rr.yprop] = pt.y
- rr.x = pt.x - 10
- rr.y = pt.y - 10
- }
- }
- }
- }
- }
-
- function genResizer(obj, x, y, xprop, yprop, color) {
- var ma = mouseArea.createObject(canvas, {
- color: color,
- xprop: xprop,
- yprop: yprop
- });
- ma.visible = root.showResizers;
- ma.obj = obj;
- ma.x = x - 10;
- ma.y = y - 10;
- resizers.push(ma);
- return ma;
- }
-
- property Component linePath: Component {
- ShapePath {
- id: lineShapePath
- strokeColor: "black"
- strokeWidth: widthSlider.value
- fillColor: "transparent"
- PathLine {
- x: lineShapePath.startX + 1
- y: lineShapePath.startY + 1
- }
- }
- }
-
- property Component cubicPath: Component {
- ShapePath {
- id: cubicShapePath
- strokeColor: "black"
- strokeWidth: widthSlider.value
- fillColor: root.fill ? 'green' : 'transparent'
- PathCubic {
- x: cubicShapePath.startX + 1
- y: cubicShapePath.startY + 1
- control1X: cubicShapePath.startX + 50;
- control1Y: cubicShapePath.startY + 50;
- control2X: cubicShapePath.startX + 150;
- control2Y: cubicShapePath.startY + 50;
- }
- }
- }
-
- property Component quadPath: Component {
- ShapePath {
- id: quadShapePath
- strokeColor: "black"
- strokeWidth: widthSlider.value
- fillColor: root.fill ? 'green' : 'transparent'
- PathQuad {
- x: quadShapePath.startx + 1
- y: quadShapePath.startY + 1
- controlX: quadShapePath.startX + 50
- controlY: quadShapePath.startY + 50
- }
- }
- }
-
- Component.onCompleted: {
- funcs = [
- { "start": function(x, y) {
- var p = linePath.createObject(root, { startX: x, startY: y });
- shape.data.push(p);
- activePath = p;
- }, "move": function(x, y) {
- if (!activePath)
- return;
- var pathObj = activePath.pathElements[0];
- pathObj.x = x;
- pathObj.y = y;
- }, "end": function() {
- canvas.genResizer(activePath, activePath.startX, activePath.startY, "startX", "startY", "red");
- var pathObj = activePath.pathElements[0];
- canvas.genResizer(pathObj, pathObj.x, pathObj.y, "x", "y", "red");
- activePath = null;
- }
- },
- { "start": function(x, y) {
- var p = cubicPath.createObject(root, { startX: x, startY: y });
- shape.data.push(p);
- activePath = p;
- }, "move": function(x, y) {
- if (!activePath)
- return;
- var pathObj = activePath.pathElements[0];
- pathObj.x = x;
- pathObj.y = y;
- }, "end": function() {
- canvas.genResizer(activePath, activePath.startX, activePath.startY, "startX", "startY", "red");
- var pathObj = activePath.pathElements[0];
- canvas.genResizer(pathObj, pathObj.x, pathObj.y, "x", "y", "red");
- canvas.genResizer(pathObj, pathObj.control1X, pathObj.control1Y, "control1X", "control1Y", "blue");
- canvas.genResizer(pathObj, pathObj.control2X, pathObj.control2Y, "control2X", "control2Y", "lightBlue");
- activePath = null;
- }
- },
- { "start": function(x, y) {
- var p = quadPath.createObject(root, { startX: x, startY: y });
- shape.data.push(p);
- activePath = p;
- }, "move": function(x, y) {
- if (!activePath)
- return;
- var pathObj = activePath.pathElements[0];
- pathObj.x = x;
- pathObj.y = y;
- }, "end": function() {
- canvas.genResizer(activePath, activePath.startX, activePath.startY, "startX", "startY", "red");
- var pathObj = activePath.pathElements[0];
- canvas.genResizer(pathObj, pathObj.x, pathObj.y, "x", "y", "red");
- canvas.genResizer(pathObj, pathObj.controlX, pathObj.controlY, "controlX", "controlY", "blue");
- activePath = null;
- }
- }
- ];
- }
-
- MouseArea {
- anchors.fill: parent
- onPressed: (mouse)=> {
- canvas.funcs[root.mode].start(mouse.x, mouse.y);
- }
- onPositionChanged: (mouse)=> {
- canvas.funcs[root.mode].move(mouse.x, mouse.y);
- }
- onReleased: {
- canvas.funcs[root.mode].end();
- }
- }
-
- Shape {
- id: shape
- anchors.fill: parent
-
- data: []
- }
- }
-}
diff --git a/examples/quick/shapes/content/item10.qml b/examples/quick/shapes/content/item10.qml
deleted file mode 100644
index e91342c2fe..0000000000
--- a/examples/quick/shapes/content/item10.qml
+++ /dev/null
@@ -1,174 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
-
- 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/content/item11.qml b/examples/quick/shapes/content/item11.qml
deleted file mode 100644
index bdd08339e3..0000000000
--- a/examples/quick/shapes/content/item11.qml
+++ /dev/null
@@ -1,115 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.11
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
- 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/content/item12.qml b/examples/quick/shapes/content/item12.qml
deleted file mode 100644
index 8bdd1bfe50..0000000000
--- a/examples/quick/shapes/content/item12.qml
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
- 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/content/item13.qml b/examples/quick/shapes/content/item13.qml
deleted file mode 100644
index 93160af7d8..0000000000
--- a/examples/quick/shapes/content/item13.qml
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
-
- 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/content/item14.qml b/examples/quick/shapes/content/item14.qml
deleted file mode 100644
index fd5b7d1048..0000000000
--- a/examples/quick/shapes/content/item14.qml
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
-
- 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/content/item15.qml b/examples/quick/shapes/content/item15.qml
deleted file mode 100644
index eb23b8b3c5..0000000000
--- a/examples/quick/shapes/content/item15.qml
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
-
- 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/content/item17.qml b/examples/quick/shapes/content/item17.qml
deleted file mode 100644
index 6ee03ddd04..0000000000
--- a/examples/quick/shapes/content/item17.qml
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
-
- 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/shapes/content/item18.qml b/examples/quick/shapes/content/item18.qml
deleted file mode 100644
index 192438408d..0000000000
--- a/examples/quick/shapes/content/item18.qml
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.15
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
-
- 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/content/item2.qml b/examples/quick/shapes/content/item2.qml
deleted file mode 100644
index a033ba88c7..0000000000
--- a/examples/quick/shapes/content/item2.qml
+++ /dev/null
@@ -1,153 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
-
- 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/content/item3.qml b/examples/quick/shapes/content/item3.qml
deleted file mode 100644
index 4274f260f3..0000000000
--- a/examples/quick/shapes/content/item3.qml
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
- 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/content/item4.qml b/examples/quick/shapes/content/item4.qml
deleted file mode 100644
index 2b20c0a263..0000000000
--- a/examples/quick/shapes/content/item4.qml
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
- 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/content/item5.qml b/examples/quick/shapes/content/item5.qml
deleted file mode 100644
index 5fd25093ae..0000000000
--- a/examples/quick/shapes/content/item5.qml
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
- 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/content/item6.qml b/examples/quick/shapes/content/item6.qml
deleted file mode 100644
index f0791c30d2..0000000000
--- a/examples/quick/shapes/content/item6.qml
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
- 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/content/item7.qml b/examples/quick/shapes/content/item7.qml
deleted file mode 100644
index ff5c5702da..0000000000
--- a/examples/quick/shapes/content/item7.qml
+++ /dev/null
@@ -1,95 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
-
- 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/content/item8.qml b/examples/quick/shapes/content/item8.qml
deleted file mode 100644
index 07f633fa56..0000000000
--- a/examples/quick/shapes/content/item8.qml
+++ /dev/null
@@ -1,93 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
-
- 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/content/item9.qml b/examples/quick/shapes/content/item9.qml
deleted file mode 100644
index 4e5b4022b6..0000000000
--- a/examples/quick/shapes/content/item9.qml
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-Rectangle {
- color: "lightGray"
-
- 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/content/main.qml b/examples/quick/shapes/content/main.qml
deleted file mode 100644
index 8efa47d30b..0000000000
--- a/examples/quick/shapes/content/main.qml
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-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/content/sampling.qml b/examples/quick/shapes/content/sampling.qml
deleted file mode 100644
index 6b651f8a1d..0000000000
--- a/examples/quick/shapes/content/sampling.qml
+++ /dev/null
@@ -1,186 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-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/content/shapegallery.qml b/examples/quick/shapes/content/shapegallery.qml
deleted file mode 100644
index e5a7c51483..0000000000
--- a/examples/quick/shapes/content/shapegallery.qml
+++ /dev/null
@@ -1,200 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.9
-import QtQuick.Shapes 1.0
-
-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: "item2.qml"
- }
- ListElement {
- name: "Dash pattern"
- shapeUrl: "item4.qml"
- }
- ListElement {
- name: "Linear gradient"
- shapeUrl: "item5.qml"
- }
- ListElement {
- name: "Radial gradient"
- shapeUrl: "item3.qml"
- }
- ListElement {
- name: "Fill rules"
- shapeUrl: "item6.qml"
- }
- ListElement {
- name: "Join styles"
- shapeUrl: "item7.qml"
- }
- ListElement {
- name: "Cap styles"
- shapeUrl: "item8.qml"
- }
- ListElement {
- name: "Quadratic curve"
- shapeUrl: "item9.qml"
- }
- ListElement {
- name: "Cubic curve"
- shapeUrl: "item10.qml"
- }
- ListElement {
- name: "Elliptical arc"
- shapeUrl: "item11.qml"
- }
- ListElement {
- name: "Gradient spread modes"
- shapeUrl: "item12.qml"
- }
- ListElement {
- name: "Arc direction"
- shapeUrl: "item13.qml"
- }
- ListElement {
- name: "Large/small arc"
- shapeUrl: "item14.qml"
- }
- ListElement {
- name: "Arc rotation"
- shapeUrl: "item15.qml"
- }
- ListElement {
- name: "Tiger"
- shapeUrl: "item17.qml"
- }
- ListElement {
- name: "Text"
- shapeUrl: "item18.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/content/tapableTriangle.qml b/examples/quick/shapes/content/tapableTriangle.qml
deleted file mode 100644
index 22ed577bcb..0000000000
--- a/examples/quick/shapes/content/tapableTriangle.qml
+++ /dev/null
@@ -1,101 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.12
-import QtQuick.Shapes 1.12
-
-Rectangle {
- width: 120
- height: 120
- 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/content/tiger.qml b/examples/quick/shapes/content/tiger.qml
deleted file mode 100644
index 317ec88b31..0000000000
--- a/examples/quick/shapes/content/tiger.qml
+++ /dev/null
@@ -1,3714 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.12
-import QtQuick.Shapes 1.12
-
-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/doc/src/shapes.qdoc b/examples/quick/shapes/doc/src/shapes.qdoc
deleted file mode 100644
index 46c1f930d3..0000000000
--- a/examples/quick/shapes/doc/src/shapes.qdoc
+++ /dev/null
@@ -1,39 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
- \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/main.cpp b/examples/quick/shapes/main.cpp
deleted file mode 100644
index 60f6c98f42..0000000000
--- a/examples/quick/shapes/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(shapes/main)
diff --git a/examples/quick/shapes/shapes.pro b/examples/quick/shapes/shapes.pro
deleted file mode 100644
index f99d941804..0000000000
--- a/examples/quick/shapes/shapes.pro
+++ /dev/null
@@ -1,31 +0,0 @@
-TEMPLATE = app
-
-QT += quick qml
-SOURCES += main.cpp
-RESOURCES += shapes.qrc
-OTHER_FILES += content/main.qml \
- content/shapegallery.qml \
- content/interactive.qml \
- content/sampling.qml \
- content/clippedtigers.qml \
- content/tiger.qml \
- content/tapableTriangle.qml \
- content/item2.qml \
- content/item3.qml \
- content/item4.qml \
- content/item5.qml \
- content/item6.qml \
- content/item7.qml \
- content/item8.qml \
- content/item9.qml \
- content/item10.qml \
- content/item11.qml \
- content/item12.qml \
- content/item13.qml \
- content/item14.qml \
- content/item15.qml \
- content/item17.qml \
- content/item18.qml
-
-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 6de463dd33..0000000000
--- a/examples/quick/shapes/shapes.qrc
+++ /dev/null
@@ -1,33 +0,0 @@
-<RCC>
- <qresource prefix="/shapes">
- <file alias="LauncherList.qml">../shared/LauncherList.qml</file>
- <file alias="SimpleLauncherDelegate.qml">../shared/SimpleLauncherDelegate.qml</file>
- <file alias="images/next.png">../shared/images/next.png</file>
- <file alias="images/back.png">../shared/images/back.png</file>
- <file alias="images/slider_handle.png">../shared/images/slider_handle.png</file>
- <file alias="Slider.qml">../shared/Slider.qml</file>
- <file alias="main.qml">content/main.qml</file>
- <file alias="shapegallery.qml">content/shapegallery.qml</file>
- <file alias="interactive.qml">content/interactive.qml</file>
- <file alias="sampling.qml">content/sampling.qml</file>
- <file alias="clippedtigers.qml">content/clippedtigers.qml</file>
- <file alias="tiger.qml">content/tiger.qml</file>
- <file alias="tapableTriangle.qml">content/tapableTriangle.qml</file>
- <file alias="item2.qml">content/item2.qml</file>
- <file alias="item3.qml">content/item3.qml</file>
- <file alias="item4.qml">content/item4.qml</file>
- <file alias="item5.qml">content/item5.qml</file>
- <file alias="item6.qml">content/item6.qml</file>
- <file alias="item7.qml">content/item7.qml</file>
- <file alias="item8.qml">content/item8.qml</file>
- <file alias="item9.qml">content/item9.qml</file>
- <file alias="item10.qml">content/item10.qml</file>
- <file alias="item11.qml">content/item11.qml</file>
- <file alias="item12.qml">content/item12.qml</file>
- <file alias="item13.qml">content/item13.qml</file>
- <file alias="item14.qml">content/item14.qml</file>
- <file alias="item15.qml">content/item15.qml</file>
- <file alias="item17.qml">content/item17.qml</file>
- <file alias="item18.qml">content/item18.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/shared/Button.qml b/examples/quick/shared/Button.qml
index ce7dad717f..31e88fe541 100644
--- a/examples/quick/shared/Button.qml
+++ b/examples/quick/shared/Button.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.12
-import QtQuick.Window 2.1
+import QtQuick
+import QtQuick.Window
Item {
id: container
diff --git a/examples/quick/shared/CMakeLists.txt b/examples/quick/shared/CMakeLists.txt
new file mode 100644
index 0000000000..7382df7689
--- /dev/null
+++ b/examples/quick/shared/CMakeLists.txt
@@ -0,0 +1,38 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+set_source_files_properties(CheckBox.qml TabSet.qml TextField.qml
+ PROPERTIES
+ QT_QML_SOURCE_VERSIONS 2.1
+)
+
+set_source_files_properties(Images.qml
+ PROPERTIES
+ QT_QML_SINGLETON_TYPE true
+ QT_QML_SOURCE_VERSIONS 2.2
+)
+
+qt_add_qml_module(${PROJECT_NAME}_shared
+ URI shared
+ VERSION 2.2
+ PLUGIN_TARGET ${PROJECT_NAME}_shared
+ SOURCES
+ "shared.h"
+ QML_FILES
+ "Button.qml"
+ "CheckBox.qml"
+ "Label.qml"
+ "LauncherList.qml"
+ "SimpleLauncherDelegate.qml"
+ "Slider.qml"
+ "TabSet.qml"
+ "TextField.qml"
+ "Images.qml"
+ RESOURCES
+ "images/back.png"
+ "images/checkmark.png"
+ "images/next.png"
+ "images/qt-logo.png"
+ "images/slider_handle.png"
+ "images/tab.png"
+)
diff --git a/examples/quick/shared/CheckBox.qml b/examples/quick/shared/CheckBox.qml
index 51b6aabc09..45c4f4e674 100644
--- a/examples/quick/shared/CheckBox.qml
+++ b/examples/quick/shared/CheckBox.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.12
+import QtQuick
Item {
id: root
diff --git a/examples/quick/shared/FlickrRssModel.qml b/examples/quick/shared/FlickrRssModel.qml
deleted file mode 100644
index 2fb4412ba1..0000000000
--- a/examples/quick/shared/FlickrRssModel.qml
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.12
-
-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/Images.qml b/examples/quick/shared/Images.qml
new file mode 100644
index 0000000000..ade3619d8a
--- /dev/null
+++ b/examples/quick/shared/Images.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+pragma Singleton
+import QtQml
+
+QtObject {
+ readonly property url back: Qt.resolvedUrl("images/back.png")
+ readonly property url checkmark: Qt.resolvedUrl("images/checkmark.png")
+ readonly property url next: Qt.resolvedUrl("images/next.png")
+ readonly property url qtLogo: Qt.resolvedUrl("images/qt-logo.png")
+ readonly property url sliderHandle: Qt.resolvedUrl("images/slider_handle.png")
+ readonly property url tab: Qt.resolvedUrl("images/tab.png")
+}
diff --git a/examples/quick/shared/Label.qml b/examples/quick/shared/Label.qml
index acbffb8dfa..5393336cab 100644
--- a/examples/quick/shared/Label.qml
+++ b/examples/quick/shared/Label.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Text {
SystemPalette { id: palette }
diff --git a/examples/quick/shared/LauncherList.qml b/examples/quick/shared/LauncherList.qml
index cb13ec4372..f86ab80446 100644
--- a/examples/quick/shared/LauncherList.qml
+++ b/examples/quick/shared/LauncherList.qml
@@ -1,57 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Crimson AS <info@crimson.no>
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQml 2.12
-import QtQml.Models 2.12
-import QtQuick 2.12
+// Copyright (C) 2017 Crimson AS <info@crimson.no>
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQml
+import QtQml.Models
+import QtQuick
Rectangle {
id: root
@@ -221,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/SimpleLauncherDelegate.qml b/examples/quick/shared/SimpleLauncherDelegate.qml
index 097954cb89..a6ac090b34 100644
--- a/examples/quick/shared/SimpleLauncherDelegate.qml
+++ b/examples/quick/shared/SimpleLauncherDelegate.qml
@@ -1,53 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.12
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+import QtQuick
Rectangle {
id: container
@@ -56,7 +9,7 @@ Rectangle {
property Item exampleItem
width: ListView.view.width
- height: button.implicitHeight + 22
+ height: col.implicitHeight + 22
signal clicked()
@@ -69,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
@@ -83,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/Slider.qml b/examples/quick/shared/Slider.qml
index 5b08034571..b8bb6ed30c 100644
--- a/examples/quick/shared/Slider.qml
+++ b/examples/quick/shared/Slider.qml
@@ -1,59 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.12
+import QtQuick
Item {
id: slider
height: 26
- width: 320
+ // default drag range is 180: divisible by 2, 3, 4, 5, 6, 9, 10, ...
+ width: sliderName.width + 223 + handle.width / 2
property real min: 0
property real max: 1
@@ -67,16 +21,19 @@ Item {
id: dragHandler
target: handle
xAxis.minimum: Math.round(-handle.width / 2 + 3)
- xAxis.maximum: Math.round(foo.width - handle.width/2 - 3)
+ xAxis.maximum: Math.round(groove.width - handle.width / 2 - 3)
property real value: (handle.x - xAxis.minimum) / (xAxis.maximum - xAxis.minimum)
}
Component.onCompleted: setValue(init)
function setValue(v) {
- if (min < max)
- handle.x = Math.round( v / (max - min) *
+ if (min < max) {
+ handle.x = Math.round( v / (max - min) *
(dragHandler.xAxis.maximum - dragHandler.xAxis.minimum)
+ dragHandler.xAxis.minimum);
+// console.log(name, v, "-> handle.x", handle.x, "from fraction", (v / (max - min)),
+// "of drag range", (dragHandler.xAxis.maximum - dragHandler.xAxis.minimum), "px", min, ":", max)
+ }
}
Rectangle {
id:sliderName
@@ -92,8 +49,8 @@ Item {
}
}
- Rectangle{
- id: foo
+ Rectangle {
+ id: groove
width: parent.width - 8 - sliderName.width
color: "#eee"
height: 7
diff --git a/examples/quick/shared/TabSet.qml b/examples/quick/shared/TabSet.qml
index ab8476ad44..d9ae7d7b6d 100644
--- a/examples/quick/shared/TabSet.qml
+++ b/examples/quick/shared/TabSet.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.12
-import QtQuick.Window 2.1
+import QtQuick
+import QtQuick.Window
Item {
id: tabWidget
diff --git a/examples/quick/shared/TextField.qml b/examples/quick/shared/TextField.qml
index 05e048011a..66854c89bf 100644
--- a/examples/quick/shared/TextField.qml
+++ b/examples/quick/shared/TextField.qml
@@ -1,54 +1,7 @@
-/*****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQuick.Dialogs module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-*****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.1
+import QtQuick
Item {
id: root
diff --git a/examples/quick/shared/qmldir b/examples/quick/shared/qmldir
index b539191fec..8a3d856a08 100644
--- a/examples/quick/shared/qmldir
+++ b/examples/quick/shared/qmldir
@@ -1,7 +1,10 @@
+module shared
Button 2.0 Button.qml
CheckBox 2.1 CheckBox.qml
+Label 2.0 Label.qml
LauncherList 2.0 LauncherList.qml
SimpleLauncherDelegate 2.0 SimpleLauncherDelegate.qml
Slider 2.0 Slider.qml
TabSet 2.1 TabSet.qml
TextField 2.1 TextField.qml
+singleton Images 2.2 Images.qml
diff --git a/examples/quick/shared/shared.h b/examples/quick/shared/shared.h
index a6a468ddcb..382aec4295 100644
--- a/examples/quick/shared/shared.h
+++ b/examples/quick/shared/shared.h
@@ -1,57 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QDir>
#include <QGuiApplication>
#include <QQmlEngine>
#include <QQmlFileSelector>
#include <QQuickView> //Not using QQmlApplicationEngine because many examples don't have a Window{}
+
+#ifdef Q_OS_MACOS
+#define ADD_MACOS_BUNDLE_IMPORT_PATH \
+ view.engine()->addImportPath(app.applicationDirPath() + QStringLiteral("/../PlugIns"));
+#else
+#define ADD_MACOS_BUNDLE_IMPORT_PATH
+#endif
+
#define DECLARATIVE_EXAMPLE_MAIN(NAME) int main(int argc, char* argv[]) \
{\
QGuiApplication app(argc,argv);\
@@ -59,20 +20,21 @@
app.setOrganizationDomain("qt-project.org");\
app.setApplicationName(QFileInfo(app.applicationFilePath()).baseName());\
QQuickView view;\
- if (qgetenv("QT_QUICK_CORE_PROFILE").toInt()) {\
+ ADD_MACOS_BUNDLE_IMPORT_PATH\
+ if (qEnvironmentVariableIntValue("QT_QUICK_CORE_PROFILE")) {\
QSurfaceFormat f = view.format();\
f.setProfile(QSurfaceFormat::CoreProfile);\
f.setVersion(4, 4);\
view.setFormat(f);\
}\
- if (qgetenv("QT_QUICK_MULTISAMPLE").toInt()) {\
+ if (qEnvironmentVariableIntValue("QT_QUICK_MULTISAMPLE")) {\
QSurfaceFormat f = view.format();\
f.setSamples(4);\
view.setFormat(f);\
}\
view.connect(view.engine(), &QQmlEngine::quit, &app, &QCoreApplication::quit);\
new QQmlFileSelector(view.engine(), &view);\
- view.setSource(QUrl("qrc:///" #NAME ".qml")); \
+ view.setSource(QUrl("qrc:/qt/qml/" #NAME ".qml")); \
if (view.status() == QQuickView::Error)\
return -1;\
view.setResizeMode(QQuickView::SizeRootObjectToView);\
diff --git a/examples/quick/shared/shared.qrc b/examples/quick/shared/shared.qrc
index cce683f8a3..054db1f352 100644
--- a/examples/quick/shared/shared.qrc
+++ b/examples/quick/shared/shared.qrc
@@ -1,19 +1,20 @@
<RCC>
- <qresource prefix="/shared">
- <file>FlickrRssModel.qml</file>
- <file>LauncherList.qml</file>
- <file>SimpleLauncherDelegate.qml</file>
+ <qresource prefix="/qt/qml/shared">
<file>Button.qml</file>
- <file>Slider.qml</file>
- <file>images/slider_handle.png</file>
<file>CheckBox.qml</file>
+ <file>Images.qml</file>
<file>Label.qml</file>
+ <file>LauncherList.qml</file>
+ <file>SimpleLauncherDelegate.qml</file>
+ <file>Slider.qml</file>
<file>TabSet.qml</file>
<file>TextField.qml</file>
<file>images/back.png</file>
+ <file>images/checkmark.png</file>
<file>images/next.png</file>
<file>images/qt-logo.png</file>
- <file>images/checkmark.png</file>
+ <file>images/slider_handle.png</file>
<file>images/tab.png</file>
+ <file>qmldir</file>
</qresource>
</RCC>
diff --git a/examples/quick/tableview/CMakeLists.txt b/examples/quick/tableview/CMakeLists.txt
index 6875e412e9..80ac8687d4 100644
--- a/examples/quick/tableview/CMakeLists.txt
+++ b/examples/quick/tableview/CMakeLists.txt
@@ -1,4 +1,2 @@
-# Generated from tableview.pro.
-
-add_subdirectory(gameoflife)
-add_subdirectory(pixelator)
+qt_internal_add_example(gameoflife)
+qt_internal_add_example(pixelator)
diff --git a/examples/quick/tableview/gameoflife/CMakeLists.txt b/examples/quick/tableview/gameoflife/CMakeLists.txt
index 4592943c11..0af748fc80 100644
--- a/examples/quick/tableview/gameoflife/CMakeLists.txt
+++ b/examples/quick/tableview/gameoflife/CMakeLists.txt
@@ -1,63 +1,49 @@
-# Generated from gameoflife.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(gameoflife LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC 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)
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
+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
-)
-
-# Resources:
-set(qmake_immediate_resource_files
- "gosperglidergun.cells"
- "main.qml"
+target_link_libraries(gameoflife PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(gameoflife "qmake_immediate"
- PREFIX
- "/"
- FILES
- ${qmake_immediate_resource_files}
+qt_add_qml_module(gameoflife
+ URI GameOfLifeModel
+ QML_FILES main.qml
+ RESOURCES gosperglidergun.cells
+ NO_RESOURCE_TARGET_PATH
+ DEPENDENCIES
+ QtQml.Models
)
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}
)
-set_target_properties(gameoflife PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI GameOfLifeModel
+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
)
-
-qt6_qml_type_registration(gameoflife)
+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 b61ba90a58..b8d594d598 100644
--- a/examples/quick/tableview/gameoflife/doc/src/gameoflife.qdoc
+++ b/examples/quick/tableview/gameoflife/doc/src/gameoflife.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick TableView examples - Conway’s Game of Life
\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/gameoflifemodel.cpp b/examples/quick/tableview/gameoflife/gameoflifemodel.cpp
index 32765f87a8..669157f7af 100644
--- a/examples/quick/tableview/gameoflife/gameoflifemodel.cpp
+++ b/examples/quick/tableview/gameoflife/gameoflifemodel.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "gameoflifemodel.h"
#include <QFile>
diff --git a/examples/quick/tableview/gameoflife/gameoflifemodel.h b/examples/quick/tableview/gameoflife/gameoflifemodel.h
index 161e0b2cfc..dc5f67729a 100644
--- a/examples/quick/tableview/gameoflife/gameoflifemodel.h
+++ b/examples/quick/tableview/gameoflife/gameoflifemodel.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef GAMEOFLIFEMODEL_H
#define GAMEOFLIFEMODEL_H
diff --git a/examples/quick/tableview/gameoflife/main.cpp b/examples/quick/tableview/gameoflife/main.cpp
index 8fa6b8b1db..ca0b3991cd 100644
--- a/examples/quick/tableview/gameoflife/main.cpp
+++ b/examples/quick/tableview/gameoflife/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QQmlApplicationEngine>
@@ -61,5 +14,5 @@ int main(int argc, char *argv[])
if (engine.rootObjects().isEmpty())
return -1;
- return app.exec();
+ return QGuiApplication::exec();
}
diff --git a/examples/quick/tableview/gameoflife/main.qml b/examples/quick/tableview/gameoflife/main.qml
index fb3195892f..55c5b193f8 100644
--- a/examples/quick/tableview/gameoflife/main.qml
+++ b/examples/quick/tableview/gameoflife/main.qml
@@ -1,59 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQml 2.12
-import QtQuick 2.12
-import QtQuick.Window 2.3
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import GameOfLifeModel 1.0
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQml
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+import QtQuick.Layouts
+import GameOfLifeModel
ApplicationWindow {
id: root
@@ -120,24 +73,22 @@ ApplicationWindow {
Button {
text: qsTr("Next")
onClicked: gameOfLifeModel.nextStep()
+ Layout.rightMargin: 50
+ Layout.fillWidth: false
}
//! [next]
- Item {
- width: 50
- }
-
Slider {
id: slider
- x: 245
- y: 17
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 41b0a139c8..de24974bcd 100644
--- a/examples/quick/tableview/pixelator/CMakeLists.txt
+++ b/examples/quick/tableview/pixelator/CMakeLists.txt
@@ -1,63 +1,47 @@
-# Generated from pixelator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(qml_pixelator LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC 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)
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
+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
-)
-
-# Resources:
-set(qmake_immediate_resource_files
- "main.qml"
- "qt.png"
+target_link_libraries(qml_pixelator PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(qml_pixelator "qmake_immediate"
- PREFIX
- "/"
- FILES
- ${qmake_immediate_resource_files}
+qt_add_qml_module(qml_pixelator
+ URI ImageModel
+ QML_FILES main.qml
+ RESOURCES qt.png
+ NO_RESOURCE_TARGET_PATH
)
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}
)
-set_target_properties(qml_pixelator PROPERTIES
- QT_QML_MODULE_VERSION 1.0
- QT_QML_MODULE_URI ImageModel
+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
)
-
-qt6_qml_type_registration(qml_pixelator)
+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 88b28769cd..35d3ac6732 100644
--- a/examples/quick/tableview/pixelator/doc/src/pixelator.qdoc
+++ b/examples/quick/tableview/pixelator/doc/src/pixelator.qdoc
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick TableViews examples - Pixelator
\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/tableview/pixelator/imagemodel.cpp b/examples/quick/tableview/pixelator/imagemodel.cpp
index 827204bc06..7d2d164d29 100644
--- a/examples/quick/tableview/pixelator/imagemodel.cpp
+++ b/examples/quick/tableview/pixelator/imagemodel.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "imagemodel.h"
diff --git a/examples/quick/tableview/pixelator/imagemodel.h b/examples/quick/tableview/pixelator/imagemodel.h
index de8ad7cd8d..b1d11f44c8 100644
--- a/examples/quick/tableview/pixelator/imagemodel.h
+++ b/examples/quick/tableview/pixelator/imagemodel.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef IMAGEMODEL_H
#define IMAGEMODEL_H
diff --git a/examples/quick/tableview/pixelator/main.cpp b/examples/quick/tableview/pixelator/main.cpp
index c07f43dc27..b674572e0d 100644
--- a/examples/quick/tableview/pixelator/main.cpp
+++ b/examples/quick/tableview/pixelator/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QGuiApplication>
#include <QQmlApplicationEngine>
@@ -63,5 +16,5 @@ int main(int argc, char *argv[])
if (engine.rootObjects().isEmpty())
return -1;
- return app.exec();
+ return QGuiApplication::exec();
}
diff --git a/examples/quick/tableview/pixelator/main.qml b/examples/quick/tableview/pixelator/main.qml
index a5edefae90..67a4ff5a36 100644
--- a/examples/quick/tableview/pixelator/main.qml
+++ b/examples/quick/tableview/pixelator/main.qml
@@ -1,58 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.12
+import QtQuick
-import QtQuick.Window 2.12
+import QtQuick.Window
-import ImageModel 1.0
+import ImageModel
Window {
visible: true
diff --git a/examples/quick/text/.prev_CMakeLists.txt b/examples/quick/text/.prev_CMakeLists.txt
deleted file mode 100644
index 20d4228bcf..0000000000
--- a/examples/quick/text/.prev_CMakeLists.txt
+++ /dev/null
@@ -1,144 +0,0 @@
-# Generated from text.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(text LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/text")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(text
- main.cpp
-)
-set_target_properties(text PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(text PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(text_resource_files
- "fonts/availableFonts.qml"
- "fonts/banner.qml"
- "fonts/content/fonts/tarzeau_ocr_a.ttf"
- "fonts/fonts.qml"
- "fonts/hello.qml"
- "imgtag/TextWithImage.qml"
- "imgtag/images/face-sad.png"
- "imgtag/images/face-smile-big.png"
- "imgtag/images/face-smile.png"
- "imgtag/images/heart200.png"
- "imgtag/images/qtlogo.png"
- "imgtag/images/starfish_2.png"
- "imgtag/imgtag.qml"
- "styledtext-layout.qml"
- "text.qml"
- "textselection/pics/endHandle.png"
- "textselection/pics/endHandle.sci"
- "textselection/pics/startHandle.png"
- "textselection/pics/startHandle.sci"
- "textselection/textselection.qml"
-)
-
-qt6_add_resources(text "text"
- PREFIX
- "/text"
- FILES
- ${text_resource_files}
-)
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
-
-qt6_add_resources(text "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
-)
-
-install(TARGETS text
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/quick/text/CMakeLists.txt b/examples/quick/text/CMakeLists.txt
index f4e7e7de38..5560256793 100644
--- a/examples/quick/text/CMakeLists.txt
+++ b/examples/quick/text/CMakeLists.txt
@@ -1,146 +1,62 @@
-# Generated from text.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(text LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+add_subdirectory("../shared" "shared")
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/text")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(text
+qt_add_executable(textexample
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(text PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(text PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(text_resource_files
- "fonts/availableFonts.qml"
- "fonts/banner.qml"
- "fonts/content/fonts/tarzeau_ocr_a.ttf"
- "fonts/fonts.qml"
- "fonts/hello.qml"
- "imgtag/TextWithImage.qml"
- "imgtag/images/face-sad.png"
- "imgtag/images/face-smile-big.png"
- "imgtag/images/face-smile.png"
- "imgtag/images/heart200.png"
- "imgtag/images/qtlogo.png"
- "imgtag/images/starfish_2.png"
- "imgtag/imgtag.qml"
- "styledtext-layout.qml"
- "text.qml"
- "textselection/pics/endHandle.png"
- "textselection/pics/endHandle.sci"
- "textselection/pics/startHandle.png"
- "textselection/pics/startHandle.sci"
- "textselection/textselection.qml"
-)
-
-qt6_add_resources(text "text"
- PREFIX
- "/text"
- FILES
- ${text_resource_files}
-)
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
-
-qt6_add_resources(text "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
-)
-
-qt_import_qml_plugins(text) # special case
-
-install(TARGETS text
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
+target_link_libraries(textexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+add_dependencies(textexample text_shared)
+
+qt_add_qml_module(textexample
+ URI text
+ QML_FILES
+ "fonts/availableFonts.qml"
+ "fonts/banner.qml"
+ "fonts/fonts.qml"
+ "fonts/hello.qml"
+ "imgtag/TextWithImage.qml"
+ "imgtag/imgtag.qml"
+ "styledtext-layout.qml"
+ "text.qml"
+ RESOURCES
+ "fonts/content/fonts/tarzeau_ocr_a.ttf"
+ "imgtag/images/face-sad.png"
+ "imgtag/images/face-smile-big.png"
+ "imgtag/images/face-smile.png"
+ "imgtag/images/heart200.png"
+ "imgtag/images/qtlogo.png"
+ "imgtag/images/starfish_2.png"
+)
+
+install(TARGETS textexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+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 6378e3efe6..9aa5fb2f06 100644
--- a/examples/quick/text/doc/src/text.qdoc
+++ b/examples/quick/text/doc/src/text.qdoc
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick Examples - Text
\example text
\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 41dbae0021..7f4f938b48 100644
--- a/examples/quick/text/fonts/availableFonts.qml
+++ b/examples/quick/text/fonts/availableFonts.qml
@@ -1,57 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
- width: 320; height: 480; color: "steelblue"
+ width: 320
+ height: 480
+ color: "steelblue"
ListView {
anchors.fill: parent
@@ -60,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 961e750d56..aae93baea2 100644
--- a/examples/quick/text/fonts/banner.qml
+++ b/examples/quick/text/fonts/banner.qml
@@ -1,71 +1,43 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: screen
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 aeb17c48e2..84cb6baa20 100644
--- a/examples/quick/text/fonts/fonts.qml
+++ b/examples/quick/text/fonts/fonts.qml
@@ -1,71 +1,36 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+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 {
@@ -84,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
@@ -92,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: {
@@ -117,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 b12641464c..89760b0b4b 100644
--- a/examples/quick/text/fonts/hello.qml
+++ b/examples/quick/text/fonts/hello.qml
@@ -1,76 +1,36 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+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)
@@ -81,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/imgtag/TextWithImage.qml b/examples/quick/text/imgtag/TextWithImage.qml
index d22e93146d..0fdd208368 100644
--- a/examples/quick/text/imgtag/TextWithImage.qml
+++ b/examples/quick/text/imgtag/TextWithImage.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Text {
width: parent.width
diff --git a/examples/quick/text/imgtag/imgtag.qml b/examples/quick/text/imgtag/imgtag.qml
index 3958fdb380..689d07aabb 100644
--- a/examples/quick/text/imgtag/imgtag.qml
+++ b/examples/quick/text/imgtag/imgtag.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: main
diff --git a/examples/quick/text/main.cpp b/examples/quick/text/main.cpp
index e55b3fa739..5323f1bd08 100644
--- a/examples/quick/text/main.cpp
+++ b/examples/quick/text/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../shared/shared.h"
DECLARATIVE_EXAMPLE_MAIN(text/text)
diff --git a/examples/quick/text/styledtext-layout.qml b/examples/quick/text/styledtext-layout.qml
index b399b638dc..1f99729488 100644
--- a/examples/quick/text/styledtext-layout.qml
+++ b/examples/quick/text/styledtext-layout.qml
@@ -1,62 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+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
@@ -76,7 +30,7 @@ Rectangle {
if (line.y + line.height >= height) {
line.y -= height - main.margin
- line.x = width / 2 + main.activeFocusmargin
+ line.x = width / 2 + main.margin
}
if (line.isLast) {
@@ -89,16 +43,15 @@ Rectangle {
Rectangle {
id: lastLineMarker
color: "#44cccccc"
- width: theEndText.width + margin
- height: theEndText.height + margin
+ width: theEndText.width + main.margin
+ height: theEndText.height + main.margin
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 f97a4e62de..f16c0bf13a 100644
--- a/examples/quick/text/text.qml
+++ b/examples/quick/text/text.qml
@@ -1,69 +1,21 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "../shared"
+import QtQuick
+import shared
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.qmlproject b/examples/quick/text/text.qmlproject
index c08d9b9a89..5613abe903 100644
--- a/examples/quick/text/text.qmlproject
+++ b/examples/quick/text/text.qmlproject
@@ -2,6 +2,7 @@ import QmlProject 1.1
Project {
mainFile: "text.qml"
+ importPaths: ["../"]
/* Include .qml, .js, and image files from current directory and subdirectories */
QmlFiles {
diff --git a/examples/quick/text/text.qrc b/examples/quick/text/text.qrc
index f0d21627ad..8d727c2831 100644
--- a/examples/quick/text/text.qrc
+++ b/examples/quick/text/text.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/text">
+ <qresource prefix="/qt/qml/text">
<file>text.qml</file>
<file>fonts/availableFonts.qml</file>
<file>fonts/banner.qml</file>
@@ -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 0e979c28a4..0000000000
--- a/examples/quick/text/textselection/textselection.qml
+++ /dev/null
@@ -1,221 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
-
-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.paintedWidth
- contentHeight: edit.paintedHeight
- 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 { target: startHandle; opacity: 1.0 }
- PropertyChanges { target: endHandle; opacity: 1.0 }
- },
- State {
- name: "menu"
- PropertyChanges { target: startHandle; opacity: 0.5 }
- PropertyChanges { target: endHandle; opacity: 0.5 }
- PropertyChanges { target: menu; opacity: 1.0 }
- }
- ]
-}
diff --git a/examples/quick/threading/CMakeLists.txt b/examples/quick/threading/CMakeLists.txt
deleted file mode 100644
index 3dcc58158e..0000000000
--- a/examples/quick/threading/CMakeLists.txt
+++ /dev/null
@@ -1,130 +0,0 @@
-# Generated from threading.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(threading LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/threading")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(threading
- main.cpp
-)
-set_target_properties(threading PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(threading PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(threading_resource_files
- "threadedlistmodel/dataloader.mjs"
- "threadedlistmodel/timedisplay.qml"
- "threading.qml"
- "workerscript/Spinner.qml"
- "workerscript/workerscript.mjs"
- "workerscript/workerscript.qml"
-)
-
-qt6_add_resources(threading "threading"
- PREFIX
- "/threading"
- FILES
- ${threading_resource_files}
-)
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
-
-qt6_add_resources(threading "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
-)
-
-install(TARGETS threading
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
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 f5e5139916..0000000000
--- a/examples/quick/threading/doc/src/threading.qdoc
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
- \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 75b6cab482..0000000000
--- a/examples/quick/threading/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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 86a4424dbc..0000000000
--- a/examples/quick/threading/threadedlistmodel/dataloader.mjs
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-// ![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 12596cfdac..0000000000
--- a/examples/quick/threading/threadedlistmodel/doc/src/threadedlistmodel.qdoc
+++ /dev/null
@@ -1,37 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \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 361f4ba0d3..0000000000
--- a/examples/quick/threading/threadedlistmodel/threadedlistmodel.qmlproject
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-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 c4e6e7b249..0000000000
--- a/examples/quick/threading/threadedlistmodel/timedisplay.qml
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-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 674e4a4bc6..0000000000
--- a/examples/quick/threading/threading.qml
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-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 d17405d4dc..0000000000
--- a/examples/quick/threading/threading.qmlproject
+++ /dev/null
@@ -1,16 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "threading.qml"
-
- /* 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 5dc6dff443..0000000000
--- a/examples/quick/threading/threading.qrc
+++ /dev/null
@@ -1,10 +0,0 @@
-<RCC>
- <qresource prefix="/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 a2257f8639..0000000000
--- a/examples/quick/threading/workerscript/Spinner.qml
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-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 9953958086..0000000000
--- a/examples/quick/threading/workerscript/workerscript.mjs
+++ /dev/null
@@ -1,74 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//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 eb8ad43d01..0000000000
--- a/examples/quick/threading/workerscript/workerscript.qml
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-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 6ab433e63b..0000000000
--- a/examples/quick/threading/workerscript/workerscript.qmlproject
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-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 af3219ac7d..0000000000
--- a/examples/quick/touchinteraction/CMakeLists.txt
+++ /dev/null
@@ -1,147 +0,0 @@
-# Generated from touchinteraction.pro.
-
-cmake_minimum_required(VERSION 3.14)
-project(touchinteraction LANGUAGES CXX)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/touchinteraction")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(touchinteraction
- main.cpp
-)
-set_target_properties(touchinteraction PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(touchinteraction PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-
-# Resources:
-set(touchinteraction_resource_files
- "flickable/basic-flickable.qml"
- "flickable/content/Panel.qml"
- "flickable/content/cork.jpg"
- "flickable/content/note-yellow.png"
- "flickable/content/tack.png"
- "flickable/corkboards.qml"
- "multipointtouch/bearwhack.qml"
- "multipointtouch/content/AugmentedTouchPoint.qml"
- "multipointtouch/content/Bear0.png"
- "multipointtouch/content/Bear1.png"
- "multipointtouch/content/Bear2.png"
- "multipointtouch/content/Bear3.png"
- "multipointtouch/content/BearB.png"
- "multipointtouch/content/BearWhackParticleSystem.qml"
- "multipointtouch/content/ParticleFlame.qml"
- "multipointtouch/content/blur-circle.png"
- "multipointtouch/content/blur-circle3.png"
- "multipointtouch/content/heart-blur.png"
- "multipointtouch/content/title.png"
- "multipointtouch/multiflame.qml"
- "pincharea/flickresize.qml"
- "pincharea/qt-logo.jpg"
- "touchinteraction.qml"
-)
-
-qt6_add_resources(touchinteraction "touchinteraction"
- PREFIX
- "/touchinteraction"
- FILES
- ${touchinteraction_resource_files}
-)
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
-
-qt6_add_resources(touchinteraction "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
-)
-
-install(TARGETS touchinteraction
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
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 8526a9d58f..0000000000
--- a/examples/quick/touchinteraction/doc/src/touchinteraction.qdoc
+++ /dev/null
@@ -1,79 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
- \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/content/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/basic-flickable.qml b/examples/quick/touchinteraction/flickable/basic-flickable.qml
deleted file mode 100644
index 45e835bf45..0000000000
--- a/examples/quick/touchinteraction/flickable/basic-flickable.qml
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
- //![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/content/Panel.qml b/examples/quick/touchinteraction/flickable/content/Panel.qml
deleted file mode 100644
index 0aae0635b2..0000000000
--- a/examples/quick/touchinteraction/flickable/content/Panel.qml
+++ /dev/null
@@ -1,155 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-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 { target: sticky; rotation: 8; scale: 1 }
- PropertyChanges { target: page; z: 8 }
- }
-
- transitions: Transition {
- NumberAnimation { properties: "rotation,scale"; duration: 200 }
- }
- }
- }
-}
diff --git a/examples/quick/touchinteraction/flickable/corkboards.qml b/examples/quick/touchinteraction/flickable/corkboards.qml
deleted file mode 100644
index 4825053f3f..0000000000
--- a/examples/quick/touchinteraction/flickable/corkboards.qml
+++ /dev/null
@@ -1,99 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "content"
-
-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 5dda8e7ed7..0000000000
--- a/examples/quick/touchinteraction/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include "../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(touchinteraction/touchinteraction)
diff --git a/examples/quick/touchinteraction/multipointtouch/bearwhack.qml b/examples/quick/touchinteraction/multipointtouch/bearwhack.qml
deleted file mode 100644
index 90c1a66891..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/bearwhack.qml
+++ /dev/null
@@ -1,145 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-import "content"
-
-Item {
- id: root
- height: 480
- width: 320
- Item {
- id: startScreen
- anchors.fill: parent
- z: 1000
- Image {
- source: "content/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/content/AugmentedTouchPoint.qml b/examples/quick/touchinteraction/multipointtouch/content/AugmentedTouchPoint.qml
deleted file mode 100644
index 56f287666f..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/content/AugmentedTouchPoint.qml
+++ /dev/null
@@ -1,82 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-//! [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/content/Bear0.png b/examples/quick/touchinteraction/multipointtouch/content/Bear0.png
deleted file mode 100644
index f520cc1f1b..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/content/Bear0.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/content/Bear1.png b/examples/quick/touchinteraction/multipointtouch/content/Bear1.png
deleted file mode 100644
index 3b88f3b32e..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/content/Bear1.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/content/Bear2.png b/examples/quick/touchinteraction/multipointtouch/content/Bear2.png
deleted file mode 100644
index 337b636070..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/content/Bear2.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/content/Bear3.png b/examples/quick/touchinteraction/multipointtouch/content/Bear3.png
deleted file mode 100644
index f0e68590f4..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/content/Bear3.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/content/BearB.png b/examples/quick/touchinteraction/multipointtouch/content/BearB.png
deleted file mode 100644
index 60be2b32c6..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/content/BearB.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/content/BearWhackParticleSystem.qml b/examples/quick/touchinteraction/multipointtouch/content/BearWhackParticleSystem.qml
deleted file mode 100644
index 8da5949a1b..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/content/BearWhackParticleSystem.qml
+++ /dev/null
@@ -1,193 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-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/content/ParticleFlame.qml b/examples/quick/touchinteraction/multipointtouch/content/ParticleFlame.qml
deleted file mode 100644
index 4c201720d9..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/content/ParticleFlame.qml
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-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/content/blur-circle3.png b/examples/quick/touchinteraction/multipointtouch/content/blur-circle3.png
deleted file mode 100644
index dbc39cb16e..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/content/blur-circle3.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/content/heart-blur.png b/examples/quick/touchinteraction/multipointtouch/content/heart-blur.png
deleted file mode 100644
index dbc38804ee..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/content/heart-blur.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/touchinteraction/multipointtouch/content/title.png b/examples/quick/touchinteraction/multipointtouch/content/title.png
deleted file mode 100644
index 01893a247d..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/content/title.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 514d583044..0000000000
--- a/examples/quick/touchinteraction/multipointtouch/multiflame.qml
+++ /dev/null
@@ -1,105 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
-import "content"
-
-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/pincharea/flickresize.qml b/examples/quick/touchinteraction/pincharea/flickresize.qml
deleted file mode 100644
index 994fd01b50..0000000000
--- a/examples/quick/touchinteraction/pincharea/flickresize.qml
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-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 a95867b6c1..0000000000
--- a/examples/quick/touchinteraction/touchinteraction.qml
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-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 a9aa9d2e81..0000000000
--- a/examples/quick/touchinteraction/touchinteraction.qmlproject
+++ /dev/null
@@ -1,16 +0,0 @@
-import QmlProject 1.1
-
-Project {
- mainFile: "touchinteraction.qml"
-
- /* 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 6cec506a0f..0000000000
--- a/examples/quick/touchinteraction/touchinteraction.qrc
+++ /dev/null
@@ -1,27 +0,0 @@
-<RCC>
- <qresource prefix="/touchinteraction">
- <file>touchinteraction.qml</file>
- <file>flickable/basic-flickable.qml</file>
- <file>flickable/corkboards.qml</file>
- <file>flickable/content/cork.jpg</file>
- <file>flickable/content/note-yellow.png</file>
- <file>flickable/content/Panel.qml</file>
- <file>flickable/content/tack.png</file>
- <file>multipointtouch/bearwhack.qml</file>
- <file>multipointtouch/multiflame.qml</file>
- <file>multipointtouch/content/AugmentedTouchPoint.qml</file>
- <file>multipointtouch/content/Bear0.png</file>
- <file>multipointtouch/content/Bear1.png</file>
- <file>multipointtouch/content/Bear2.png</file>
- <file>multipointtouch/content/Bear3.png</file>
- <file>multipointtouch/content/BearB.png</file>
- <file>multipointtouch/content/BearWhackParticleSystem.qml</file>
- <file>multipointtouch/content/blur-circle.png</file>
- <file>multipointtouch/content/blur-circle3.png</file>
- <file>multipointtouch/content/heart-blur.png</file>
- <file>multipointtouch/content/ParticleFlame.qml</file>
- <file>multipointtouch/content/title.png</file>
- <file>pincharea/flickresize.qml</file>
- <file>pincharea/qt-logo.jpg</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/tutorials/CMakeLists.txt b/examples/quick/tutorials/CMakeLists.txt
index 87d2caf01f..b200b54f9f 100644
--- a/examples/quick/tutorials/CMakeLists.txt
+++ b/examples/quick/tutorials/CMakeLists.txt
@@ -1,2 +1,2 @@
-# Generated from tutorials.pro.
-
+add_subdirectory(samegame)
+add_subdirectory(dynamicview)
diff --git a/examples/quick/tutorials/dynamicview/CMakeLists.txt b/examples/quick/tutorials/dynamicview/CMakeLists.txt
new file mode 100644
index 0000000000..2245f3cdfb
--- /dev/null
+++ b/examples/quick/tutorials/dynamicview/CMakeLists.txt
@@ -0,0 +1,7 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+qt_internal_add_example(dynamicview1)
+qt_internal_add_example(dynamicview2)
+qt_internal_add_example(dynamicview3)
+qt_internal_add_example(dynamicview4)
diff --git a/examples/quick/tutorials/dynamicview/dynamicview1/CMakeLists.txt b/examples/quick/tutorials/dynamicview/dynamicview1/CMakeLists.txt
new file mode 100644
index 0000000000..a1ba04f8e9
--- /dev/null
+++ b/examples/quick/tutorials/dynamicview/dynamicview1/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(dynamicview1 LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(dynamicview1
+ main.cpp
+)
+
+set_target_properties(dynamicview1 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+qt_add_qml_module(dynamicview1
+ URI dynamicview
+ QML_FILES
+ dynamicview.qml
+ PetsModel.qml
+)
+
+target_link_libraries(dynamicview1 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+install(TARGETS dynamicview1
+ 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 e9ffcc3cfd..0ebbb1d12e 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview1/PetsModel.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview1/PetsModel.qml
@@ -1,111 +1,64 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
-import QtQuick 2.0
+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 60167aa813..3cf9194729 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview1/dynamicview.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview1/dynamicview.qml
@@ -1,60 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+pragma ComponentBehavior: Bound
//![0]
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: root
- width: 300; height: 400
+ width: 300
+ height: 400
//![1]
Component {
@@ -63,7 +18,12 @@ Rectangle {
Rectangle {
id: content
- anchors { left: parent.left; right: parent.right }
+ required property string name
+ required property string type
+ required property string size
+ required property int age
+
+ width: view.width
height: column.implicitHeight + 4
border.width: 1
@@ -73,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 }
}
}
}
@@ -87,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/dynamicview1/dynamicview1.qrc b/examples/quick/tutorials/dynamicview/dynamicview1/dynamicview1.qrc
index c89a5e3a97..07fe48ef38 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview1/dynamicview1.qrc
+++ b/examples/quick/tutorials/dynamicview/dynamicview1/dynamicview1.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/qt/qml/dynamicview">
<file>dynamicview.qml</file>
<file>PetsModel.qml</file>
</qresource>
diff --git a/examples/quick/tutorials/dynamicview/dynamicview1/main.cpp b/examples/quick/tutorials/dynamicview/dynamicview1/main.cpp
index 72b8b667f5..3c983133fb 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview1/main.cpp
+++ b/examples/quick/tutorials/dynamicview/dynamicview1/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(dynamicview)
+DECLARATIVE_EXAMPLE_MAIN(dynamicview/dynamicview)
diff --git a/examples/quick/tutorials/dynamicview/dynamicview2/CMakeLists.txt b/examples/quick/tutorials/dynamicview/dynamicview2/CMakeLists.txt
new file mode 100644
index 0000000000..d1d65497f5
--- /dev/null
+++ b/examples/quick/tutorials/dynamicview/dynamicview2/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(dynamicview2 LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(dynamicview2
+ main.cpp
+)
+
+set_target_properties(dynamicview2 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+qt_add_qml_module(dynamicview2
+ URI dynamicview
+ QML_FILES
+ dynamicview.qml
+ PetsModel.qml
+)
+
+target_link_libraries(dynamicview2 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+install(TARGETS dynamicview2
+ 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 bc8751f00a..457d8e5dcf 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview2/PetsModel.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview2/PetsModel.qml
@@ -1,108 +1,61 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+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 2c67c46df2..d1e954ba27 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview2/dynamicview.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview2/dynamicview.qml
@@ -1,59 +1,14 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
+// 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 {
@@ -64,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
@@ -81,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"
@@ -94,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]
}
@@ -120,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/dynamicview2/dynamicview2.qrc b/examples/quick/tutorials/dynamicview/dynamicview2/dynamicview2.qrc
index c89a5e3a97..07fe48ef38 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview2/dynamicview2.qrc
+++ b/examples/quick/tutorials/dynamicview/dynamicview2/dynamicview2.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/qt/qml/dynamicview">
<file>dynamicview.qml</file>
<file>PetsModel.qml</file>
</qresource>
diff --git a/examples/quick/tutorials/dynamicview/dynamicview2/main.cpp b/examples/quick/tutorials/dynamicview/dynamicview2/main.cpp
index 72b8b667f5..3c983133fb 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview2/main.cpp
+++ b/examples/quick/tutorials/dynamicview/dynamicview2/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(dynamicview)
+DECLARATIVE_EXAMPLE_MAIN(dynamicview/dynamicview)
diff --git a/examples/quick/tutorials/dynamicview/dynamicview3/CMakeLists.txt b/examples/quick/tutorials/dynamicview/dynamicview3/CMakeLists.txt
new file mode 100644
index 0000000000..5c561f1112
--- /dev/null
+++ b/examples/quick/tutorials/dynamicview/dynamicview3/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(dynamicview3 LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(dynamicview3
+ main.cpp
+)
+
+set_target_properties(dynamicview3 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+qt_add_qml_module(dynamicview3
+ URI dynamicview
+ QML_FILES
+ dynamicview.qml
+ PetsModel.qml
+)
+
+target_link_libraries(dynamicview3 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+install(TARGETS dynamicview3
+ 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 bc8751f00a..457d8e5dcf 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview3/PetsModel.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview3/PetsModel.qml
@@ -1,108 +1,61 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+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 eb42a76a47..1212ac066c 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview3/dynamicview.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview3/dynamicview.qml
@@ -1,60 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQml.Models 2.1
+// 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
@@ -63,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
@@ -80,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"
@@ -98,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)
@@ -141,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/dynamicview3/dynamicview3.qrc b/examples/quick/tutorials/dynamicview/dynamicview3/dynamicview3.qrc
index c89a5e3a97..07fe48ef38 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview3/dynamicview3.qrc
+++ b/examples/quick/tutorials/dynamicview/dynamicview3/dynamicview3.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/qt/qml/dynamicview">
<file>dynamicview.qml</file>
<file>PetsModel.qml</file>
</qresource>
diff --git a/examples/quick/tutorials/dynamicview/dynamicview3/main.cpp b/examples/quick/tutorials/dynamicview/dynamicview3/main.cpp
index 72b8b667f5..3c983133fb 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview3/main.cpp
+++ b/examples/quick/tutorials/dynamicview/dynamicview3/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(dynamicview)
+DECLARATIVE_EXAMPLE_MAIN(dynamicview/dynamicview)
diff --git a/examples/quick/tutorials/dynamicview/dynamicview4/CMakeLists.txt b/examples/quick/tutorials/dynamicview/dynamicview4/CMakeLists.txt
new file mode 100644
index 0000000000..a3f0ae04e9
--- /dev/null
+++ b/examples/quick/tutorials/dynamicview/dynamicview4/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(dynamicview4 LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(dynamicview4
+ main.cpp
+)
+
+set_target_properties(dynamicview4 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+qt_add_qml_module(dynamicview4
+ URI dynamicview
+ QML_FILES
+ dynamicview.qml
+ ListSelector.qml
+ PetsModel.qml
+)
+
+target_link_libraries(dynamicview4 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+install(TARGETS dynamicview4
+ 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 b58a704303..ee788417d9 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview4/ListSelector.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview4/ListSelector.qml
@@ -1,54 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+pragma ComponentBehavior: Bound
+import QtQuick
Item {
id: selector
@@ -58,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
@@ -78,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
}
@@ -100,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
@@ -111,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 bc8751f00a..457d8e5dcf 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview4/PetsModel.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview4/PetsModel.qml
@@ -1,108 +1,61 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+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 f40f060e7c..1a354d12d9 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview4/dynamicview.qml
+++ b/examples/quick/tutorials/dynamicview/dynamicview4/dynamicview.qml
@@ -1,60 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQml.Models 2.1
+// 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
@@ -63,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
@@ -82,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"
@@ -100,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)
@@ -157,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 {
@@ -173,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)
@@ -209,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
}
@@ -222,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/dynamicview/dynamicview4/dynamicview4.qrc b/examples/quick/tutorials/dynamicview/dynamicview4/dynamicview4.qrc
index c89a5e3a97..c9afd50c38 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview4/dynamicview4.qrc
+++ b/examples/quick/tutorials/dynamicview/dynamicview4/dynamicview4.qrc
@@ -1,6 +1,8 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/qt/qml/dynamicview">
<file>dynamicview.qml</file>
+ <file>ListSelector.qml</file>
<file>PetsModel.qml</file>
+ <file>ListSelector.qml</file>
</qresource>
</RCC>
diff --git a/examples/quick/tutorials/dynamicview/dynamicview4/main.cpp b/examples/quick/tutorials/dynamicview/dynamicview4/main.cpp
index 72b8b667f5..3c983133fb 100644
--- a/examples/quick/tutorials/dynamicview/dynamicview4/main.cpp
+++ b/examples/quick/tutorials/dynamicview/dynamicview4/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(dynamicview)
+DECLARATIVE_EXAMPLE_MAIN(dynamicview/dynamicview)
diff --git a/examples/quick/tutorials/helloworld/Cell.qml b/examples/quick/tutorials/helloworld/Cell.qml
index 7462a5ceb1..d88b63cdfa 100644
--- a/examples/quick/tutorials/helloworld/Cell.qml
+++ b/examples/quick/tutorials/helloworld/Cell.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
-import QtQuick 2.0
+import QtQuick
//![1]
Item {
diff --git a/examples/quick/tutorials/helloworld/tutorial1.qml b/examples/quick/tutorials/helloworld/tutorial1.qml
index 73cdd7911b..c67bc75562 100644
--- a/examples/quick/tutorials/helloworld/tutorial1.qml
+++ b/examples/quick/tutorials/helloworld/tutorial1.qml
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
//![3]
-import QtQuick 2.0
+import QtQuick
//![3]
//![1]
diff --git a/examples/quick/tutorials/helloworld/tutorial2.qml b/examples/quick/tutorials/helloworld/tutorial2.qml
index 8b13b28c58..8b1c632b99 100644
--- a/examples/quick/tutorials/helloworld/tutorial2.qml
+++ b/examples/quick/tutorials/helloworld/tutorial2.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: page
diff --git a/examples/quick/tutorials/helloworld/tutorial3.qml b/examples/quick/tutorials/helloworld/tutorial3.qml
index 8c40b40e1a..73833d2a67 100644
--- a/examples/quick/tutorials/helloworld/tutorial3.qml
+++ b/examples/quick/tutorials/helloworld/tutorial3.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: page
@@ -70,7 +23,13 @@ Rectangle {
//![2]
states: State {
name: "down"; when: mouseArea.pressed == true
- PropertyChanges { target: helloText; y: 160; rotation: 180; color: "red" }
+ PropertyChanges {
+ helloText {
+ y: 160
+ rotation: 180
+ color: "red"
+ }
+ }
}
//![2]
diff --git a/examples/quick/tutorials/samegame/CMakeLists.txt b/examples/quick/tutorials/samegame/CMakeLists.txt
new file mode 100644
index 0000000000..4582f44309
--- /dev/null
+++ b/examples/quick/tutorials/samegame/CMakeLists.txt
@@ -0,0 +1,7 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+qt_internal_add_example(samegame1)
+qt_internal_add_example(samegame2)
+qt_internal_add_example(samegame3)
+qt_internal_add_example(samegame4)
diff --git a/examples/quick/tutorials/samegame/samegame1/Block.qml b/examples/quick/tutorials/samegame/samegame1/Block.qml
index eac8e93810..c10f0c4825 100644
--- a/examples/quick/tutorials/samegame/samegame1/Block.qml
+++ b/examples/quick/tutorials/samegame/samegame1/Block.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
-import QtQuick 2.0
+import QtQuick
Item {
id: block
@@ -57,7 +10,7 @@ Item {
Image {
id: img
anchors.fill: parent
- source: "../shared/pics/redStone.png"
+ source: "pics/redStone.png"
}
}
//![0]
diff --git a/examples/quick/tutorials/samegame/samegame1/Button.qml b/examples/quick/tutorials/samegame/samegame1/Button.qml
index ddab89e56d..cc87465e3c 100644
--- a/examples/quick/tutorials/samegame/samegame1/Button.qml
+++ b/examples/quick/tutorials/samegame/samegame1/Button.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: container
diff --git a/examples/quick/tutorials/samegame/samegame1/CMakeLists.txt b/examples/quick/tutorials/samegame/samegame1/CMakeLists.txt
new file mode 100644
index 0000000000..0ce11660a8
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame1/CMakeLists.txt
@@ -0,0 +1,53 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(samegame1 LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(samegame1
+ main.cpp
+)
+
+set_target_properties(samegame1 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+qt_add_qml_module(samegame1
+ URI samegame
+ QML_FILES
+ "Block.qml"
+ "Button.qml"
+ "samegame.qml"
+ RESOURCES
+ "pics/background.jpg"
+ "pics/redStone.png"
+)
+
+target_link_libraries(samegame1 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+install(TARGETS samegame1
+ 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/samegame1/main.cpp b/examples/quick/tutorials/samegame/samegame1/main.cpp
index 7589b92906..164b47aebd 100644
--- a/examples/quick/tutorials/samegame/samegame1/main.cpp
+++ b/examples/quick/tutorials/samegame/samegame1/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(samegame)
+DECLARATIVE_EXAMPLE_MAIN(samegame/samegame)
diff --git a/examples/quick/tutorials/samegame/shared/pics/background.jpg b/examples/quick/tutorials/samegame/samegame1/pics/background.jpg
index 903d395c8d..903d395c8d 100644
--- a/examples/quick/tutorials/samegame/shared/pics/background.jpg
+++ b/examples/quick/tutorials/samegame/samegame1/pics/background.jpg
Binary files differ
diff --git a/examples/quick/tutorials/samegame/shared/pics/redStone.png b/examples/quick/tutorials/samegame/samegame1/pics/redStone.png
index 36b09a2686..36b09a2686 100644
--- a/examples/quick/tutorials/samegame/shared/pics/redStone.png
+++ b/examples/quick/tutorials/samegame/samegame1/pics/redStone.png
Binary files differ
diff --git a/examples/quick/tutorials/samegame/samegame1/samegame.qml b/examples/quick/tutorials/samegame/samegame1/samegame.qml
index 68a1921da7..fe21acae99 100644
--- a/examples/quick/tutorials/samegame/samegame1/samegame.qml
+++ b/examples/quick/tutorials/samegame/samegame1/samegame.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: screen
@@ -65,7 +18,7 @@ Rectangle {
Image {
id: background
anchors.fill: parent
- source: "../shared/pics/background.jpg"
+ source: "pics/background.jpg"
fillMode: Image.PreserveAspectCrop
}
}
diff --git a/examples/quick/tutorials/samegame/samegame1/samegame1.pro b/examples/quick/tutorials/samegame/samegame1/samegame1.pro
index 9f316b6868..d523857d64 100644
--- a/examples/quick/tutorials/samegame/samegame1/samegame1.pro
+++ b/examples/quick/tutorials/samegame/samegame1/samegame1.pro
@@ -2,10 +2,7 @@ TEMPLATE = app
QT += quick qml
SOURCES += main.cpp
-
-RESOURCES += \
- samegame1.qrc \
- ../shared/pics/shared.qrc
+RESOURCES += samegame1.qrc
target.path = $$[QT_INSTALL_EXAMPLES]/quick/tutorials/samegame/samegame1
INSTALLS += target
diff --git a/examples/quick/tutorials/samegame/samegame1/samegame1.qrc b/examples/quick/tutorials/samegame/samegame1/samegame1.qrc
index 866cf899bf..47d37fccc5 100644
--- a/examples/quick/tutorials/samegame/samegame1/samegame1.qrc
+++ b/examples/quick/tutorials/samegame/samegame1/samegame1.qrc
@@ -1,7 +1,9 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/qt/qml/samegame">
<file>Button.qml</file>
<file>Block.qml</file>
<file>samegame.qml</file>
+ <file>pics/background.jpg</file>
+ <file>pics/redStone.png</file>
</qresource>
</RCC>
diff --git a/examples/quick/tutorials/samegame/samegame2/Block.qml b/examples/quick/tutorials/samegame/samegame2/Block.qml
index 12cc0ea043..b0416f0e15 100644
--- a/examples/quick/tutorials/samegame/samegame2/Block.qml
+++ b/examples/quick/tutorials/samegame/samegame2/Block.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Item {
id: block
@@ -56,6 +9,6 @@ Item {
Image {
id: img
anchors.fill: parent
- source: "../shared/pics/redStone.png"
+ source: "pics/redStone.png"
}
}
diff --git a/examples/quick/tutorials/samegame/samegame2/Button.qml b/examples/quick/tutorials/samegame/samegame2/Button.qml
index 77921772d2..1a365e6dd9 100644
--- a/examples/quick/tutorials/samegame/samegame2/Button.qml
+++ b/examples/quick/tutorials/samegame/samegame2/Button.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: container
diff --git a/examples/quick/tutorials/samegame/samegame2/CMakeLists.txt b/examples/quick/tutorials/samegame/samegame2/CMakeLists.txt
new file mode 100644
index 0000000000..3fe42e4cd4
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame2/CMakeLists.txt
@@ -0,0 +1,54 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(samegame2 LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(samegame2
+ main.cpp
+)
+
+set_target_properties(samegame2 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+qt_add_qml_module(samegame2
+ URI samegame
+ QML_FILES
+ "Block.qml"
+ "Button.qml"
+ "samegame.qml"
+ "samegame.js"
+ RESOURCES
+ "pics/background.jpg"
+ "pics/redStone.png"
+)
+
+target_link_libraries(samegame2 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+install(TARGETS samegame2
+ 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/samegame2/main.cpp b/examples/quick/tutorials/samegame/samegame2/main.cpp
index 7589b92906..164b47aebd 100644
--- a/examples/quick/tutorials/samegame/samegame2/main.cpp
+++ b/examples/quick/tutorials/samegame/samegame2/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(samegame)
+DECLARATIVE_EXAMPLE_MAIN(samegame/samegame)
diff --git a/examples/quick/tutorials/samegame/samegame2/pics/background.jpg b/examples/quick/tutorials/samegame/samegame2/pics/background.jpg
new file mode 100644
index 0000000000..903d395c8d
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame2/pics/background.jpg
Binary files differ
diff --git a/examples/quick/tutorials/samegame/samegame2/pics/redStone.png b/examples/quick/tutorials/samegame/samegame2/pics/redStone.png
new file mode 100644
index 0000000000..36b09a2686
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame2/pics/redStone.png
Binary files differ
diff --git a/examples/quick/tutorials/samegame/samegame2/samegame.qml b/examples/quick/tutorials/samegame/samegame2/samegame.qml
index 2c68fcf155..642a474ebd 100644
--- a/examples/quick/tutorials/samegame/samegame2/samegame.qml
+++ b/examples/quick/tutorials/samegame/samegame2/samegame.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
//![2]
import "samegame.js" as SameGame
//![2]
@@ -67,7 +20,7 @@ Rectangle {
Image {
id: background
anchors.fill: parent
- source: "../shared/pics/background.jpg"
+ source: "pics/background.jpg"
fillMode: Image.PreserveAspectCrop
}
}
diff --git a/examples/quick/tutorials/samegame/samegame2/samegame2.pro b/examples/quick/tutorials/samegame/samegame2/samegame2.pro
index 5ede9042cc..a0fc36e857 100644
--- a/examples/quick/tutorials/samegame/samegame2/samegame2.pro
+++ b/examples/quick/tutorials/samegame/samegame2/samegame2.pro
@@ -2,10 +2,7 @@ TEMPLATE = app
QT += quick qml
SOURCES += main.cpp
-
-RESOURCES += \
- samegame2.qrc \
- ../shared/pics/shared.qrc
+RESOURCES += samegame2.qrc
target.path = $$[QT_INSTALL_EXAMPLES]/quick/tutorials/samegame/samegame2
INSTALLS += target
diff --git a/examples/quick/tutorials/samegame/samegame2/samegame2.qrc b/examples/quick/tutorials/samegame/samegame2/samegame2.qrc
index 0f95174d83..50ed4cf815 100644
--- a/examples/quick/tutorials/samegame/samegame2/samegame2.qrc
+++ b/examples/quick/tutorials/samegame/samegame2/samegame2.qrc
@@ -1,8 +1,10 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/qt/qml/samegame">
<file>Button.qml</file>
<file>Block.qml</file>
<file>samegame.qml</file>
<file>samegame.js</file>
+ <file>pics/background.jpg</file>
+ <file>pics/redStone.png</file>
</qresource>
</RCC>
diff --git a/examples/quick/tutorials/samegame/samegame3/Block.qml b/examples/quick/tutorials/samegame/samegame3/Block.qml
index d49bf89727..71d25c19db 100644
--- a/examples/quick/tutorials/samegame/samegame3/Block.qml
+++ b/examples/quick/tutorials/samegame/samegame3/Block.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
-import QtQuick 2.0
+import QtQuick
Item {
id: block
@@ -62,11 +15,11 @@ Item {
anchors.fill: parent
source: {
if (type == 0)
- return "../shared/pics/redStone.png";
+ return "pics/redStone.png";
else if (type == 1)
- return "../shared/pics/blueStone.png";
+ return "pics/blueStone.png";
else
- return "../shared/pics/greenStone.png";
+ return "pics/greenStone.png";
}
}
}
diff --git a/examples/quick/tutorials/samegame/samegame3/Button.qml b/examples/quick/tutorials/samegame/samegame3/Button.qml
index 77921772d2..1a365e6dd9 100644
--- a/examples/quick/tutorials/samegame/samegame3/Button.qml
+++ b/examples/quick/tutorials/samegame/samegame3/Button.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: container
diff --git a/examples/quick/tutorials/samegame/samegame3/CMakeLists.txt b/examples/quick/tutorials/samegame/samegame3/CMakeLists.txt
new file mode 100644
index 0000000000..4bd5124fbe
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame3/CMakeLists.txt
@@ -0,0 +1,57 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(samegame3 LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(samegame3
+ main.cpp
+)
+
+set_target_properties(samegame3 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+qt_add_qml_module(samegame3
+ URI samegame
+ QML_FILES
+ "Block.qml"
+ "Button.qml"
+ "Dialog.qml"
+ "samegame.qml"
+ "samegame.js"
+ RESOURCES
+ "pics/background.jpg"
+ "pics/blueStone.png"
+ "pics/greenStone.png"
+ "pics/redStone.png"
+)
+
+target_link_libraries(samegame3 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+install(TARGETS samegame3
+ 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/samegame3/Dialog.qml b/examples/quick/tutorials/samegame/samegame3/Dialog.qml
index 94e708f9cf..3620da5799 100644
--- a/examples/quick/tutorials/samegame/samegame3/Dialog.qml
+++ b/examples/quick/tutorials/samegame/samegame3/Dialog.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: container
diff --git a/examples/quick/tutorials/samegame/samegame3/main.cpp b/examples/quick/tutorials/samegame/samegame3/main.cpp
index 7589b92906..164b47aebd 100644
--- a/examples/quick/tutorials/samegame/samegame3/main.cpp
+++ b/examples/quick/tutorials/samegame/samegame3/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(samegame)
+DECLARATIVE_EXAMPLE_MAIN(samegame/samegame)
diff --git a/examples/quick/tutorials/samegame/samegame3/pics/background.jpg b/examples/quick/tutorials/samegame/samegame3/pics/background.jpg
new file mode 100644
index 0000000000..903d395c8d
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame3/pics/background.jpg
Binary files differ
diff --git a/examples/quick/tutorials/samegame/shared/pics/blueStone.png b/examples/quick/tutorials/samegame/samegame3/pics/blueStone.png
index 20e43c75b6..20e43c75b6 100644
--- a/examples/quick/tutorials/samegame/shared/pics/blueStone.png
+++ b/examples/quick/tutorials/samegame/samegame3/pics/blueStone.png
Binary files differ
diff --git a/examples/quick/tutorials/samegame/shared/pics/greenStone.png b/examples/quick/tutorials/samegame/samegame3/pics/greenStone.png
index b568a1900c..b568a1900c 100644
--- a/examples/quick/tutorials/samegame/shared/pics/greenStone.png
+++ b/examples/quick/tutorials/samegame/samegame3/pics/greenStone.png
Binary files differ
diff --git a/examples/quick/tutorials/samegame/samegame3/pics/redStone.png b/examples/quick/tutorials/samegame/samegame3/pics/redStone.png
new file mode 100644
index 0000000000..36b09a2686
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame3/pics/redStone.png
Binary files differ
diff --git a/examples/quick/tutorials/samegame/samegame3/samegame.qml b/examples/quick/tutorials/samegame/samegame3/samegame.qml
index 11376232a2..dadd089e24 100644
--- a/examples/quick/tutorials/samegame/samegame3/samegame.qml
+++ b/examples/quick/tutorials/samegame/samegame3/samegame.qml
@@ -1,55 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
//![0]
-import QtQuick 2.0
+import QtQuick
import "samegame.js" as SameGame
Rectangle {
@@ -66,7 +19,7 @@ Rectangle {
Image {
id: background
anchors.fill: parent
- source: "../shared/pics/background.jpg"
+ source: "pics/background.jpg"
fillMode: Image.PreserveAspectCrop
}
diff --git a/examples/quick/tutorials/samegame/samegame3/samegame3.pro b/examples/quick/tutorials/samegame/samegame3/samegame3.pro
index 7b99673e57..88f8f87699 100644
--- a/examples/quick/tutorials/samegame/samegame3/samegame3.pro
+++ b/examples/quick/tutorials/samegame/samegame3/samegame3.pro
@@ -2,10 +2,7 @@ TEMPLATE = app
QT += quick qml
SOURCES += main.cpp
-
-RESOURCES += \
- samegame3.qrc \
- ../shared/pics/shared.qrc
+RESOURCES += samegame3.qrc
target.path = $$[QT_INSTALL_EXAMPLES]/quick/tutorials/samegame/samegame3
INSTALLS += target
diff --git a/examples/quick/tutorials/samegame/samegame3/samegame3.qrc b/examples/quick/tutorials/samegame/samegame3/samegame3.qrc
index 0f95174d83..11e4c66a56 100644
--- a/examples/quick/tutorials/samegame/samegame3/samegame3.qrc
+++ b/examples/quick/tutorials/samegame/samegame3/samegame3.qrc
@@ -1,8 +1,13 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/qt/qml/samegame">
<file>Button.qml</file>
<file>Block.qml</file>
+ <file>Dialog.qml</file>
<file>samegame.qml</file>
<file>samegame.js</file>
+ <file>pics/background.jpg</file>
+ <file>pics/blueStone.png</file>
+ <file>pics/greenStone.png</file>
+ <file>pics/redStone.png</file>
</qresource>
</RCC>
diff --git a/examples/quick/tutorials/samegame/samegame4/BoomBlock.qml b/examples/quick/tutorials/samegame/samegame4/BoomBlock.qml
new file mode 100644
index 0000000000..fa6b1d45a1
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame4/BoomBlock.qml
@@ -0,0 +1,92 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Particles
+
+Item {
+ id: block
+
+ property int type: 0
+ property bool dying: false
+
+ //![1]
+ property bool spawned: false
+
+ Behavior on x {
+ enabled: block.spawned;
+ SpringAnimation{ spring: 2; damping: 0.2 }
+ }
+ Behavior on y {
+ SpringAnimation{ spring: 2; damping: 0.2 }
+ }
+ //![1]
+
+ //![2]
+ Image {
+ id: img
+
+ anchors.fill: parent
+ source: {
+ if (block.type == 0)
+ return "pics/redStone.png";
+ else if (block.type == 1)
+ return "pics/blueStone.png";
+ else
+ return "pics/greenStone.png";
+ }
+ opacity: 0
+
+ Behavior on opacity {
+ NumberAnimation { properties:"opacity"; duration: 200 }
+ }
+ }
+ //![2]
+
+ //![3]
+ ParticleSystem {
+ id: sys
+ anchors.centerIn: parent
+ ImageParticle {
+ // ![0]
+ source: {
+ if (block.type == 0)
+ return "pics/redStar.png";
+ else if (block.type == 1)
+ return "pics/blueStar.png";
+ else
+ return "pics/greenStar.png";
+ }
+ rotationVelocityVariation: 360
+ // ![0]
+ }
+
+ Emitter {
+ id: particles
+ anchors.centerIn: parent
+ emitRate: 0
+ lifeSpan: 700
+ velocity: AngleDirection {angleVariation: 360; magnitude: 80; magnitudeVariation: 40}
+ size: 16
+ }
+ }
+ //![3]
+
+ //![4]
+ states: [
+ State {
+ name: "AliveState"
+ when: block.spawned == true && block.dying == false
+ PropertyChanges { img.opacity: 1 }
+ },
+
+ State {
+ name: "DeathState"
+ when: block.dying == true
+ StateChangeScript { script: particles.burst(50); }
+ PropertyChanges { img.opacity: 0 }
+ StateChangeScript { script: block.destroy(1000); }
+ }
+ ]
+ //![4]
+}
diff --git a/examples/quick/tutorials/samegame/samegame4/Button.qml b/examples/quick/tutorials/samegame/samegame4/Button.qml
new file mode 100644
index 0000000000..1a365e6dd9
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame4/Button.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+Rectangle {
+ id: container
+
+ property string text: "Button"
+
+ signal clicked
+
+ width: buttonLabel.width + 20; height: buttonLabel.height + 5
+ border { width: 1; color: Qt.darker(activePalette.button) }
+ antialiasing: true
+ radius: 8
+
+ // color the button with a gradient
+ gradient: Gradient {
+ GradientStop {
+ position: 0.0
+ color: {
+ if (mouseArea.pressed)
+ return activePalette.dark
+ else
+ return activePalette.light
+ }
+ }
+ GradientStop { position: 1.0; color: activePalette.button }
+ }
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ onClicked: container.clicked();
+ }
+
+ Text {
+ id: buttonLabel
+ anchors.centerIn: container
+ color: activePalette.buttonText
+ text: container.text
+ }
+}
diff --git a/examples/quick/tutorials/samegame/samegame4/CMakeLists.txt b/examples/quick/tutorials/samegame/samegame4/CMakeLists.txt
new file mode 100644
index 0000000000..7760ee1abf
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame4/CMakeLists.txt
@@ -0,0 +1,64 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(samegame4 LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+qt_add_executable(samegame4
+ main.cpp
+)
+
+set_target_properties(samegame4 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+qt_add_qml_module(samegame4
+ URI samegame
+ QML_FILES
+ "BoomBlock.qml"
+ "Button.qml"
+ "Dialog.qml"
+ "samegame.qml"
+ "samegame.js"
+ RESOURCES
+ "highscores/README"
+ "highscores/score_data.xml"
+ "highscores/score_style.xsl"
+ "highscores/scores.php"
+ "pics/background.jpg"
+ "pics/blueStar.png"
+ "pics/blueStone.png"
+ "pics/greenStar.png"
+ "pics/greenStone.png"
+ "pics/redStar.png"
+ "pics/redStone.png"
+)
+
+target_link_libraries(samegame4 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+install(TARGETS samegame4
+ 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/Dialog.qml b/examples/quick/tutorials/samegame/samegame4/Dialog.qml
new file mode 100644
index 0000000000..3d3a04b66b
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame4/Dialog.qml
@@ -0,0 +1,70 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+//![0]
+Rectangle {
+ id: container
+//![0]
+
+//![1]
+ property string inputText: textInput.text
+ signal closed
+
+ function show(text) {
+ dialogText.text = text;
+ container.opacity = 1;
+ textInput.opacity = 0;
+ }
+
+ function showWithInput(text) {
+ show(text);
+ textInput.opacity = 1;
+ textInput.focus = true;
+ textInput.text = ""
+ }
+
+ function hide() {
+ textInput.focus = false;
+ container.opacity = 0;
+ container.closed();
+ }
+//![1]
+
+ width: dialogText.width + textInput.width + 20
+ height: dialogText.height + 20
+ opacity: 0
+ visible: opacity > 0
+
+ Text {
+ id: dialogText
+ anchors { verticalCenter: parent.verticalCenter; left: parent.left; leftMargin: 10 }
+ text: ""
+ }
+
+//![2]
+ TextInput {
+ id: textInput
+ anchors { verticalCenter: parent.verticalCenter; left: dialogText.right }
+ width: 80
+ text: ""
+
+ onAccepted: container.hide() // close dialog when Enter is pressed
+ }
+//![2]
+
+ MouseArea {
+ anchors.fill: parent
+
+ onClicked: {
+ if (textInput.text == "" && textInput.opacity > 0)
+ Qt.inputMethod.show();
+ else
+ hide();
+ }
+ }
+
+//![3]
+}
+//![3]
diff --git a/examples/quick/tutorials/samegame/samegame4/content/BoomBlock.qml b/examples/quick/tutorials/samegame/samegame4/content/BoomBlock.qml
deleted file mode 100644
index 6ab2679744..0000000000
--- a/examples/quick/tutorials/samegame/samegame4/content/BoomBlock.qml
+++ /dev/null
@@ -1,139 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Item {
- id: block
-
- property int type: 0
- property bool dying: false
-
- //![1]
- property bool spawned: false
-
- Behavior on x {
- enabled: spawned;
- SpringAnimation{ spring: 2; damping: 0.2 }
- }
- Behavior on y {
- SpringAnimation{ spring: 2; damping: 0.2 }
- }
- //![1]
-
- //![2]
- Image {
- id: img
-
- anchors.fill: parent
- source: {
- if (type == 0)
- return "../../shared/pics/redStone.png";
- else if (type == 1)
- return "../../shared/pics/blueStone.png";
- else
- return "../../shared/pics/greenStone.png";
- }
- opacity: 0
-
- Behavior on opacity {
- NumberAnimation { properties:"opacity"; duration: 200 }
- }
- }
- //![2]
-
- //![3]
- ParticleSystem {
- id: sys
- anchors.centerIn: parent
- ImageParticle {
- // ![0]
- source: {
- if (type == 0)
- return "../../shared/pics/redStar.png";
- else if (type == 1)
- return "../../shared/pics/blueStar.png";
- else
- return "../../shared/pics/greenStar.png";
- }
- rotationVelocityVariation: 360
- // ![0]
- }
-
- Emitter {
- id: particles
- anchors.centerIn: parent
- emitRate: 0
- lifeSpan: 700
- velocity: AngleDirection {angleVariation: 360; magnitude: 80; magnitudeVariation: 40}
- size: 16
- }
- }
- //![3]
-
- //![4]
- states: [
- State {
- name: "AliveState"
- when: spawned == true && dying == false
- PropertyChanges { target: img; opacity: 1 }
- },
-
- State {
- name: "DeathState"
- when: dying == true
- StateChangeScript { script: particles.burst(50); }
- PropertyChanges { target: img; opacity: 0 }
- StateChangeScript { script: block.destroy(1000); }
- }
- ]
- //![4]
-}
diff --git a/examples/quick/tutorials/samegame/samegame4/content/Button.qml b/examples/quick/tutorials/samegame/samegame4/content/Button.qml
deleted file mode 100644
index 77921772d2..0000000000
--- a/examples/quick/tutorials/samegame/samegame4/content/Button.qml
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Rectangle {
- id: container
-
- property string text: "Button"
-
- signal clicked
-
- width: buttonLabel.width + 20; height: buttonLabel.height + 5
- border { width: 1; color: Qt.darker(activePalette.button) }
- antialiasing: true
- radius: 8
-
- // color the button with a gradient
- gradient: Gradient {
- GradientStop {
- position: 0.0
- color: {
- if (mouseArea.pressed)
- return activePalette.dark
- else
- return activePalette.light
- }
- }
- GradientStop { position: 1.0; color: activePalette.button }
- }
-
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- onClicked: container.clicked();
- }
-
- Text {
- id: buttonLabel
- anchors.centerIn: container
- color: activePalette.buttonText
- text: container.text
- }
-}
diff --git a/examples/quick/tutorials/samegame/samegame4/content/Dialog.qml b/examples/quick/tutorials/samegame/samegame4/content/Dialog.qml
deleted file mode 100644
index 5663add8ad..0000000000
--- a/examples/quick/tutorials/samegame/samegame4/content/Dialog.qml
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-//![0]
-Rectangle {
- id: container
-//![0]
-
-//![1]
- property string inputText: textInput.text
- signal closed
-
- function show(text) {
- dialogText.text = text;
- container.opacity = 1;
- textInput.opacity = 0;
- }
-
- function showWithInput(text) {
- show(text);
- textInput.opacity = 1;
- textInput.focus = true;
- textInput.text = ""
- }
-
- function hide() {
- textInput.focus = false;
- container.opacity = 0;
- container.closed();
- }
-//![1]
-
- width: dialogText.width + textInput.width + 20
- height: dialogText.height + 20
- opacity: 0
- visible: opacity > 0
-
- Text {
- id: dialogText
- anchors { verticalCenter: parent.verticalCenter; left: parent.left; leftMargin: 10 }
- text: ""
- }
-
-//![2]
- TextInput {
- id: textInput
- anchors { verticalCenter: parent.verticalCenter; left: dialogText.right }
- width: 80
- text: ""
-
- onAccepted: container.hide() // close dialog when Enter is pressed
- }
-//![2]
-
- MouseArea {
- anchors.fill: parent
-
- onClicked: {
- if (textInput.text == "" && textInput.opacity > 0)
- Qt.inputMethod.show();
- else
- hide();
- }
- }
-
-//![3]
-}
-//![3]
diff --git a/examples/quick/tutorials/samegame/samegame4/content/samegame.js b/examples/quick/tutorials/samegame/samegame4/content/samegame.js
deleted file mode 100644
index 80b175d450..0000000000
--- a/examples/quick/tutorials/samegame/samegame4/content/samegame.js
+++ /dev/null
@@ -1,227 +0,0 @@
-/* This script file handles the game logic */
-.import QtQuick.LocalStorage 2.0 as Sql
-.import QtQuick 2.0 as Quick
-
-var maxColumn = 10;
-var maxRow = 15;
-var maxIndex = maxColumn * maxRow;
-var board = new Array(maxIndex);
-var component;
-var scoresURL = "";
-var gameDuration;
-
-//Index function used instead of a 2D array
-function index(column, row) {
- return column + (row * maxColumn);
-}
-
-function startNewGame() {
- //Delete blocks from previous game
- for (var i = 0; i < maxIndex; i++) {
- if (board[i] != null)
- board[i].destroy();
- }
-
- //Calculate board size
- maxColumn = Math.floor(gameCanvas.width / gameCanvas.blockSize);
- 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;
- for (var column = 0; column < maxColumn; column++) {
- for (var row = 0; row < maxRow; row++) {
- board[index(column, row)] = null;
- createBlock(column, row);
- }
- }
-
- gameDuration = new Date();
-}
-
-function createBlock(column, row) {
- if (component == null)
- component = Qt.createComponent("BoomBlock.qml");
-
- // Note that if Block.qml was not a local file, component.status would be
- // Loading and we should wait for the component's statusChanged() signal to
- // know when the file is downloaded and ready before calling createObject().
- if (component.status == Quick.Component.Ready) {
- var dynamicObject = component.createObject(gameCanvas);
- if (dynamicObject == null) {
- console.log("error creating block");
- console.log(component.errorString());
- return false;
- }
- dynamicObject.type = Math.floor(Math.random() * 3);
- dynamicObject.x = column * gameCanvas.blockSize;
- dynamicObject.y = row * gameCanvas.blockSize;
- dynamicObject.width = gameCanvas.blockSize;
- dynamicObject.height = gameCanvas.blockSize;
- dynamicObject.spawned = true;
- board[index(column, row)] = dynamicObject;
- } else {
- console.log("error loading block component");
- console.log(component.errorString());
- return false;
- }
- return true;
-}
-
-var fillFound; //Set after a floodFill call to the number of blocks found
-var floodBoard; //Set to 1 if the floodFill reaches off that node
-
-function handleClick(xPos, yPos) {
- var column = Math.floor(xPos / gameCanvas.blockSize);
- var row = Math.floor(yPos / gameCanvas.blockSize);
- if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
- return;
- if (board[index(column, row)] == null)
- return;
- //If it's a valid block, remove it and all connected (does nothing if it's not connected)
- floodFill(column, row, -1);
- if (fillFound <= 0)
- return;
- gameCanvas.score += (fillFound - 1) * (fillFound - 1);
- shuffleDown();
- victoryCheck();
-}
-
-function floodFill(column, row, type) {
- if (board[index(column, row)] == null)
- return;
- var first = false;
- if (type == -1) {
- first = true;
- type = board[index(column, row)].type;
-
- //Flood fill initialization
- fillFound = 0;
- floodBoard = new Array(maxIndex);
- }
- if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
- return;
- if (floodBoard[index(column, row)] == 1 || (!first && type != board[index(column, row)].type))
- return;
- floodBoard[index(column, row)] = 1;
- floodFill(column + 1, row, type);
- floodFill(column - 1, row, type);
- floodFill(column, row + 1, type);
- floodFill(column, row - 1, type);
- if (first == true && fillFound == 0)
- return; //Can't remove single blocks
- board[index(column, row)].dying = true;
- board[index(column, row)] = null;
- fillFound += 1;
-}
-
-function shuffleDown() {
- //Fall down
- for (var column = 0; column < maxColumn; column++) {
- var fallDist = 0;
- for (var row = maxRow - 1; row >= 0; row--) {
- if (board[index(column, row)] == null) {
- fallDist += 1;
- } else {
- if (fallDist > 0) {
- var obj = board[index(column, row)];
- obj.y = (row + fallDist) * gameCanvas.blockSize;
- board[index(column, row + fallDist)] = obj;
- board[index(column, row)] = null;
- }
- }
- }
- }
- //Fall to the left
- fallDist = 0;
- for (column = 0; column < maxColumn; column++) {
- if (board[index(column, maxRow - 1)] == null) {
- fallDist += 1;
- } else {
- if (fallDist > 0) {
- for (row = 0; row < maxRow; row++) {
- obj = board[index(column, row)];
- if (obj == null)
- continue;
- obj.x = (column - fallDist) * gameCanvas.blockSize;
- board[index(column - fallDist, row)] = obj;
- board[index(column, row)] = null;
- }
- }
- }
- }
-}
-
-//![3]
-function victoryCheck() {
-//![3]
- //Award bonus points if no blocks left
- var deservesBonus = true;
- for (var column = maxColumn - 1; column >= 0; column--)
- if (board[index(column, maxRow - 1)] != null)
- deservesBonus = false;
- if (deservesBonus)
- gameCanvas.score += 500;
-
-//![4]
- //Check whether game has finished
- if (deservesBonus || !(floodMoveCheck(0, maxRow - 1, -1))) {
- gameDuration = new Date() - gameDuration;
- nameInputDialog.showWithInput("You won! Please enter your name: ");
- }
-}
-//![4]
-
-//only floods up and right, to see if it can find adjacent same-typed blocks
-function floodMoveCheck(column, row, type) {
- if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
- return false;
- if (board[index(column, row)] == null)
- return false;
- var myType = board[index(column, row)].type;
- if (type == myType)
- return true;
- return floodMoveCheck(column + 1, row, myType) || floodMoveCheck(column, row - 1, board[index(column, row)].type);
-}
-
-//![2]
-function saveHighScore(name) {
- if (scoresURL != "")
- sendHighScore(name);
-
- var db = Sql.LocalStorage.openDatabaseSync("SameGameScores", "1.0", "Local SameGame High Scores", 100);
- var dataStr = "INSERT INTO Scores VALUES(?, ?, ?, ?)";
- var data = [name, gameCanvas.score, maxColumn + "x" + maxRow, Math.floor(gameDuration / 1000)];
- db.transaction(function(tx) {
- tx.executeSql('CREATE TABLE IF NOT EXISTS Scores(name TEXT, score NUMBER, gridSize TEXT, time NUMBER)');
- tx.executeSql(dataStr, data);
-
- var rs = tx.executeSql('SELECT * FROM Scores WHERE gridSize = "12x17" ORDER BY score desc LIMIT 10');
- var r = "\nHIGH SCORES for a standard sized grid\n\n"
- for (var i = 0; i < rs.rows.length; i++) {
- r += (i + 1) + ". " + rs.rows.item(i).name + ' got ' + rs.rows.item(i).score + ' points in ' + rs.rows.item(i).time + ' seconds.\n';
- }
- dialog.show(r);
- });
-}
-//![2]
-
-//![1]
-function sendHighScore(name) {
- var postman = new XMLHttpRequest()
- var postData = "name=" + name + "&score=" + gameCanvas.score + "&gridSize=" + maxColumn + "x" + maxRow + "&time=" + Math.floor(gameDuration / 1000);
- postman.open("POST", scoresURL, true);
- postman.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- postman.onreadystatechange = function() {
- if (postman.readyState == postman.DONE) {
- dialog.show("Your score has been uploaded.");
- }
- }
- postman.send(postData);
-}
-//![1]
diff --git a/examples/quick/tutorials/samegame/samegame4/main.cpp b/examples/quick/tutorials/samegame/samegame4/main.cpp
index 7589b92906..164b47aebd 100644
--- a/examples/quick/tutorials/samegame/samegame4/main.cpp
+++ b/examples/quick/tutorials/samegame/samegame4/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../../../shared/shared.h"
-DECLARATIVE_EXAMPLE_MAIN(samegame)
+DECLARATIVE_EXAMPLE_MAIN(samegame/samegame)
diff --git a/examples/quick/tutorials/samegame/samegame4/pics/background.jpg b/examples/quick/tutorials/samegame/samegame4/pics/background.jpg
new file mode 100644
index 0000000000..903d395c8d
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame4/pics/background.jpg
Binary files differ
diff --git a/examples/quick/tutorials/samegame/shared/pics/blueStar.png b/examples/quick/tutorials/samegame/samegame4/pics/blueStar.png
index 213bb4bf6c..213bb4bf6c 100644
--- a/examples/quick/tutorials/samegame/shared/pics/blueStar.png
+++ b/examples/quick/tutorials/samegame/samegame4/pics/blueStar.png
Binary files differ
diff --git a/examples/quick/tutorials/samegame/samegame4/pics/blueStone.png b/examples/quick/tutorials/samegame/samegame4/pics/blueStone.png
new file mode 100644
index 0000000000..20e43c75b6
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame4/pics/blueStone.png
Binary files differ
diff --git a/examples/quick/tutorials/samegame/shared/pics/greenStar.png b/examples/quick/tutorials/samegame/samegame4/pics/greenStar.png
index 38429749b8..38429749b8 100644
--- a/examples/quick/tutorials/samegame/shared/pics/greenStar.png
+++ b/examples/quick/tutorials/samegame/samegame4/pics/greenStar.png
Binary files differ
diff --git a/examples/quick/tutorials/samegame/samegame4/pics/greenStone.png b/examples/quick/tutorials/samegame/samegame4/pics/greenStone.png
new file mode 100644
index 0000000000..b568a1900c
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame4/pics/greenStone.png
Binary files differ
diff --git a/examples/quick/tutorials/samegame/shared/pics/redStar.png b/examples/quick/tutorials/samegame/samegame4/pics/redStar.png
index 5cdf45c4c0..5cdf45c4c0 100644
--- a/examples/quick/tutorials/samegame/shared/pics/redStar.png
+++ b/examples/quick/tutorials/samegame/samegame4/pics/redStar.png
Binary files differ
diff --git a/examples/quick/tutorials/samegame/samegame4/pics/redStone.png b/examples/quick/tutorials/samegame/samegame4/pics/redStone.png
new file mode 100644
index 0000000000..36b09a2686
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame4/pics/redStone.png
Binary files differ
diff --git a/examples/quick/tutorials/samegame/samegame4/samegame.js b/examples/quick/tutorials/samegame/samegame4/samegame.js
new file mode 100644
index 0000000000..99d34c64a0
--- /dev/null
+++ b/examples/quick/tutorials/samegame/samegame4/samegame.js
@@ -0,0 +1,230 @@
+/* This script file handles the game logic */
+.import QtQuick.LocalStorage 2.0 as Sql
+.import QtQuick 2.0 as Quick
+
+var maxColumn = 10;
+var maxRow = 15;
+var maxIndex = maxColumn * maxRow;
+var board = new Array(maxIndex);
+var component;
+var scoresURL = "";
+var gameDuration;
+
+//Index function used instead of a 2D array
+function index(column, row) {
+ return column + (row * maxColumn);
+}
+
+function startNewGame() {
+ //Delete blocks from previous game
+ for (var i = 0; i < maxIndex; i++) {
+ if (board[i] != null)
+ board[i].destroy();
+ }
+
+ //Calculate board size
+ maxColumn = Math.floor(gameCanvas.width / gameCanvas.blockSize);
+ maxRow = Math.floor(gameCanvas.height / gameCanvas.blockSize);
+ maxIndex = maxRow * maxColumn;
+
+ //Initialize Board
+ board = new Array(maxIndex);
+ gameCanvas.score = 0;
+ for (var column = 0; column < maxColumn; column++) {
+ for (var row = 0; row < maxRow; row++) {
+ board[index(column, row)] = null;
+ createBlock(column, row);
+ }
+ }
+
+ //Close dialogs
+ nameInputDialog.hide();
+ dialog.hide();
+
+ gameDuration = new Date();
+}
+
+function createBlock(column, row) {
+ if (component == null)
+ component = Qt.createComponent("BoomBlock.qml");
+
+ // Note that if Block.qml was not a local file, component.status would be
+ // Loading and we should wait for the component's statusChanged() signal to
+ // know when the file is downloaded and ready before calling createObject().
+ if (component.status == Quick.Component.Ready) {
+ var dynamicObject = component.createObject(gameCanvas);
+ if (dynamicObject == null) {
+ console.log("error creating block");
+ console.log(component.errorString());
+ return false;
+ }
+ dynamicObject.type = Math.floor(Math.random() * 3);
+ dynamicObject.x = column * gameCanvas.blockSize;
+ dynamicObject.y = row * gameCanvas.blockSize;
+ dynamicObject.width = gameCanvas.blockSize;
+ dynamicObject.height = gameCanvas.blockSize;
+ dynamicObject.spawned = true;
+ board[index(column, row)] = dynamicObject;
+ } else {
+ console.log("error loading block component");
+ console.log(component.errorString());
+ return false;
+ }
+ return true;
+}
+
+var fillFound; //Set after a floodFill call to the number of blocks found
+var floodBoard; //Set to 1 if the floodFill reaches off that node
+
+function handleClick(xPos, yPos) {
+ var column = Math.floor(xPos / gameCanvas.blockSize);
+ var row = Math.floor(yPos / gameCanvas.blockSize);
+ if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
+ return;
+ if (board[index(column, row)] == null)
+ return;
+ //If it's a valid block, remove it and all connected (does nothing if it's not connected)
+ floodFill(column, row, -1);
+ if (fillFound <= 0)
+ return;
+ gameCanvas.score += (fillFound - 1) * (fillFound - 1);
+ shuffleDown();
+ victoryCheck();
+}
+
+function floodFill(column, row, type) {
+ if (board[index(column, row)] == null)
+ return;
+ var first = false;
+ if (type == -1) {
+ first = true;
+ type = board[index(column, row)].type;
+
+ //Flood fill initialization
+ fillFound = 0;
+ floodBoard = new Array(maxIndex);
+ }
+ if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
+ return;
+ if (floodBoard[index(column, row)] == 1 || (!first && type != board[index(column, row)].type))
+ return;
+ floodBoard[index(column, row)] = 1;
+ floodFill(column + 1, row, type);
+ floodFill(column - 1, row, type);
+ floodFill(column, row + 1, type);
+ floodFill(column, row - 1, type);
+ if (first == true && fillFound == 0)
+ return; //Can't remove single blocks
+ board[index(column, row)].dying = true;
+ board[index(column, row)] = null;
+ fillFound += 1;
+}
+
+function shuffleDown() {
+ //Fall down
+ for (var column = 0; column < maxColumn; column++) {
+ var fallDist = 0;
+ for (var row = maxRow - 1; row >= 0; row--) {
+ if (board[index(column, row)] == null) {
+ fallDist += 1;
+ } else {
+ if (fallDist > 0) {
+ var obj = board[index(column, row)];
+ obj.y = (row + fallDist) * gameCanvas.blockSize;
+ board[index(column, row + fallDist)] = obj;
+ board[index(column, row)] = null;
+ }
+ }
+ }
+ }
+ //Fall to the left
+ fallDist = 0;
+ for (column = 0; column < maxColumn; column++) {
+ if (board[index(column, maxRow - 1)] == null) {
+ fallDist += 1;
+ } else {
+ if (fallDist > 0) {
+ for (row = 0; row < maxRow; row++) {
+ obj = board[index(column, row)];
+ if (obj == null)
+ continue;
+ obj.x = (column - fallDist) * gameCanvas.blockSize;
+ board[index(column - fallDist, row)] = obj;
+ board[index(column, row)] = null;
+ }
+ }
+ }
+ }
+}
+
+//![3]
+function victoryCheck() {
+//![3]
+ //Award bonus points if no blocks left
+ var deservesBonus = true;
+ for (var column = maxColumn - 1; column >= 0; column--)
+ if (board[index(column, maxRow - 1)] != null)
+ deservesBonus = false;
+ if (deservesBonus)
+ gameCanvas.score += 500;
+
+//![4]
+ //Check whether game has finished
+ if (deservesBonus || !(floodMoveCheck(0, maxRow - 1, -1))) {
+ gameDuration = new Date() - gameDuration;
+ nameInputDialog.showWithInput("You won! Please enter your name: ");
+ }
+}
+//![4]
+
+//only floods up and right, to see if it can find adjacent same-typed blocks
+function floodMoveCheck(column, row, type) {
+ if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
+ return false;
+ if (board[index(column, row)] == null)
+ return false;
+ var myType = board[index(column, row)].type;
+ if (type == myType)
+ return true;
+ return floodMoveCheck(column + 1, row, myType) || floodMoveCheck(column, row - 1, board[index(column, row)].type);
+}
+
+//![2]
+function saveHighScore(name) {
+ if (gameCanvas.score == 0)
+ return;
+
+ if (scoresURL != "")
+ sendHighScore(name);
+
+ var db = Sql.LocalStorage.openDatabaseSync("SameGameScores", "1.0", "Local SameGame High Scores", 100);
+ var dataStr = "INSERT INTO Scores VALUES(?, ?, ?, ?)";
+ var data = [name, gameCanvas.score, maxColumn + "x" + maxRow, Math.floor(gameDuration / 1000)];
+ db.transaction(function(tx) {
+ tx.executeSql('CREATE TABLE IF NOT EXISTS Scores(name TEXT, score NUMBER, gridSize TEXT, time NUMBER)');
+ tx.executeSql(dataStr, data);
+
+ var rs = tx.executeSql('SELECT * FROM Scores WHERE gridSize = "12x17" ORDER BY score desc LIMIT 10');
+ var r = "\nHIGH SCORES for a standard sized grid\n\n"
+ for (var i = 0; i < rs.rows.length; i++) {
+ r += (i + 1) + ". " + rs.rows.item(i).name + ' got ' + rs.rows.item(i).score + ' points in ' + rs.rows.item(i).time + ' seconds.\n';
+ }
+ dialog.show(r);
+ });
+}
+//![2]
+
+//![1]
+function sendHighScore(name) {
+ var postman = new XMLHttpRequest()
+ var postData = "name=" + name + "&score=" + gameCanvas.score + "&gridSize=" + maxColumn + "x" + maxRow + "&time=" + Math.floor(gameDuration / 1000);
+ postman.open("POST", scoresURL, true);
+ postman.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+ postman.onreadystatechange = function() {
+ if (postman.readyState == postman.DONE) {
+ dialog.show("Your score has been uploaded.");
+ }
+ }
+ postman.send(postData);
+}
+//![1]
diff --git a/examples/quick/tutorials/samegame/samegame4/samegame.qml b/examples/quick/tutorials/samegame/samegame4/samegame.qml
index 0cdbcd8cb0..b253e966f5 100644
--- a/examples/quick/tutorials/samegame/samegame4/samegame.qml
+++ b/examples/quick/tutorials/samegame/samegame4/samegame.qml
@@ -1,56 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import "content"
-import "content/samegame.js" as SameGame
+import QtQuick
+import "samegame.js" as SameGame
Rectangle {
id: screen
@@ -66,7 +18,7 @@ Rectangle {
Image {
id: background
anchors.fill: parent
- source: "../shared/pics/background.jpg"
+ source: "pics/background.jpg"
fillMode: Image.PreserveAspectCrop
}
diff --git a/examples/quick/tutorials/samegame/samegame4/samegame4.pro b/examples/quick/tutorials/samegame/samegame4/samegame4.pro
index 5da0d46e19..e9d341d555 100644
--- a/examples/quick/tutorials/samegame/samegame4/samegame4.pro
+++ b/examples/quick/tutorials/samegame/samegame4/samegame4.pro
@@ -2,10 +2,7 @@ TEMPLATE = app
QT += quick qml
SOURCES += main.cpp
-
-RESOURCES += \
- samegame4.qrc \
- ../shared/pics/shared.qrc
+RESOURCES += samegame4.qrc
target.path = $$[QT_INSTALL_EXAMPLES]/quick/tutorials/samegame/samegame4
INSTALLS += target
diff --git a/examples/quick/tutorials/samegame/samegame4/samegame4.qrc b/examples/quick/tutorials/samegame/samegame4/samegame4.qrc
index 8b130721f5..44c5fbbaf3 100644
--- a/examples/quick/tutorials/samegame/samegame4/samegame4.qrc
+++ b/examples/quick/tutorials/samegame/samegame4/samegame4.qrc
@@ -1,13 +1,20 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/qt/qml/samegame">
<file>samegame.qml</file>
- <file>content/BoomBlock.qml</file>
- <file>content/Button.qml</file>
- <file>content/Dialog.qml</file>
- <file>content/samegame.js</file>
+ <file>BoomBlock.qml</file>
+ <file>Button.qml</file>
+ <file>Dialog.qml</file>
+ <file>samegame.js</file>
<file>highscores/README</file>
<file>highscores/score_data.xml</file>
<file>highscores/score_style.xsl</file>
<file>highscores/scores.php</file>
+ <file>pics/background.jpg</file>
+ <file>pics/blueStar.png</file>
+ <file>pics/blueStone.png</file>
+ <file>pics/greenStar.png</file>
+ <file>pics/greenStone.png</file>
+ <file>pics/redStar.png</file>
+ <file>pics/redStone.png</file>
</qresource>
</RCC>
diff --git a/examples/quick/tutorials/samegame/shared/pics/shared.qrc b/examples/quick/tutorials/samegame/shared/pics/shared.qrc
deleted file mode 100644
index 8982a9face..0000000000
--- a/examples/quick/tutorials/samegame/shared/pics/shared.qrc
+++ /dev/null
@@ -1,13 +0,0 @@
-<RCC>
- <qresource prefix="/shared/pics">
- <file>background.jpg</file>
- <file>blueStar.png</file>
- <file>blueStone.png</file>
- <file>greenStar.png</file>
- <file>greenStone.png</file>
- <file>redStar.png</file>
- <file>redStone.png</file>
- <file>star.png</file>
- <file>yellowStone.png</file>
- </qresource>
-</RCC>
diff --git a/examples/quick/tutorials/samegame/shared/pics/star.png b/examples/quick/tutorials/samegame/shared/pics/star.png
deleted file mode 100644
index defbde53ca..0000000000
--- a/examples/quick/tutorials/samegame/shared/pics/star.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/tutorials/samegame/shared/pics/yellowStone.png b/examples/quick/tutorials/samegame/shared/pics/yellowStone.png
deleted file mode 100644
index b1ce76212c..0000000000
--- a/examples/quick/tutorials/samegame/shared/pics/yellowStone.png
+++ /dev/null
Binary files differ
diff --git a/examples/quick/views/CMakeLists.txt b/examples/quick/views/CMakeLists.txt
index 9951bd48ff..6800983c6e 100644
--- a/examples/quick/views/CMakeLists.txt
+++ b/examples/quick/views/CMakeLists.txt
@@ -1,170 +1,94 @@
-# Generated from views.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(views LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC 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}/quick/views")
+qt_standard_project_setup(REQUIRES 6.5)
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
+add_subdirectory("../shared" "shared")
-qt_add_executable(views
+qt_add_executable(viewsexample
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(views PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(views PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(views_resource_files
- "delegatemodel/dragselection.qml"
- "delegatemodel/slideshow.qml"
- "gridview/gridview-example.qml"
- "gridview/pics/AddressBook_48.png"
- "gridview/pics/AudioPlayer_48.png"
- "gridview/pics/Camera_48.png"
- "gridview/pics/DateBook_48.png"
- "gridview/pics/EMail_48.png"
- "gridview/pics/TodoList_48.png"
- "gridview/pics/VideoPlayer_48.png"
- "listview/content/PetsModel.qml"
- "listview/content/PressAndHoldButton.qml"
- "listview/content/RecipesModel.qml"
- "listview/content/SmallText.qml"
- "listview/content/TextButton.qml"
- "listview/content/ToggleButton.qml"
- "listview/content/pics/arrow-down.png"
- "listview/content/pics/arrow-up.png"
- "listview/content/pics/fruit-salad.jpg"
- "listview/content/pics/hamburger.jpg"
- "listview/content/pics/lemonade.jpg"
- "listview/content/pics/list-delete.png"
- "listview/content/pics/minus-sign.png"
- "listview/content/pics/moreDown.png"
- "listview/content/pics/moreUp.png"
- "listview/content/pics/pancakes.jpg"
- "listview/content/pics/plus-sign.png"
- "listview/content/pics/vegetable-soup.jpg"
- "listview/displaymargin.qml"
- "listview/dynamiclist.qml"
- "listview/expandingdelegates.qml"
- "listview/highlight.qml"
- "listview/highlightranges.qml"
- "listview/sections.qml"
- "objectmodel/objectmodel.qml"
- "package/Delegate.qml"
- "package/view.qml"
- "pathview/pathview-example.qml"
- "pathview/pics/AddressBook_48.png"
- "pathview/pics/AudioPlayer_48.png"
- "pathview/pics/Camera_48.png"
- "pathview/pics/DateBook_48.png"
- "pathview/pics/EMail_48.png"
- "pathview/pics/TodoList_48.png"
- "pathview/pics/VideoPlayer_48.png"
- "views.qml"
+target_link_libraries(viewsexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(views "views"
- PREFIX
- "/views"
- FILES
- ${views_resource_files}
-)
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
-)
+add_dependencies(viewsexample views_shared)
-qt6_add_resources(views "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
+qt_add_qml_module(viewsexample
+ URI views
+ QML_FILES
+ "delegatemodel/dragselection.qml"
+ "gridview/gridview-example.qml"
+ "listview/content/PetsModel.qml"
+ "listview/content/PressAndHoldButton.qml"
+ "listview/content/RecipesModel.qml"
+ "listview/content/SmallText.qml"
+ "listview/content/TextButton.qml"
+ "listview/content/ToggleButton.qml"
+ "listview/displaymargin.qml"
+ "listview/dynamiclist.qml"
+ "listview/expandingdelegates.qml"
+ "listview/highlight.qml"
+ "listview/highlightranges.qml"
+ "listview/sections.qml"
+ "objectmodel/objectmodel.qml"
+ "package/Delegate.qml"
+ "package/view.qml"
+ "pathview/pathview-example.qml"
+ "views.qml"
+ RESOURCES
+ "gridview/pics/AddressBook_48.png"
+ "gridview/pics/AudioPlayer_48.png"
+ "gridview/pics/Camera_48.png"
+ "gridview/pics/DateBook_48.png"
+ "gridview/pics/EMail_48.png"
+ "gridview/pics/TodoList_48.png"
+ "gridview/pics/VideoPlayer_48.png"
+ "listview/content/pics/arrow-down.png"
+ "listview/content/pics/arrow-up.png"
+ "listview/content/pics/fruit-salad.jpg"
+ "listview/content/pics/hamburger.jpg"
+ "listview/content/pics/lemonade.jpg"
+ "listview/content/pics/list-delete.png"
+ "listview/content/pics/minus-sign.png"
+ "listview/content/pics/moreDown.png"
+ "listview/content/pics/moreUp.png"
+ "listview/content/pics/pancakes.jpg"
+ "listview/content/pics/plus-sign.png"
+ "listview/content/pics/vegetable-soup.jpg"
+ "pathview/pics/AddressBook_48.png"
+ "pathview/pics/AudioPlayer_48.png"
+ "pathview/pics/Camera_48.png"
+ "pathview/pics/DateBook_48.png"
+ "pathview/pics/EMail_48.png"
+ "pathview/pics/TodoList_48.png"
+ "pathview/pics/VideoPlayer_48.png"
)
-install(TARGETS views
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+install(TARGETS viewsexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
+
+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 2bb4016996..0000000000
--- a/examples/quick/views/delegatemodel/delegatemodel.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/quick/views/delegatemodel/dragselection.qml b/examples/quick/views/delegatemodel/dragselection.qml
index f9a0d37311..57a769fb29 100644
--- a/examples/quick/views/delegatemodel/dragselection.qml
+++ b/examples/quick/views/delegatemodel/dragselection.qml
@@ -1,56 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQml 2.0
-import QtQuick 2.0
-import QtQml.Models 2.1
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQml
+import QtQuick
+import QtQml.Models
+
+pragma ComponentBehavior: Bound
Item {
id: root
@@ -62,6 +17,7 @@ Item {
Component {
id: packageDelegate
+//![0]
Package {
id: packageRoot
@@ -80,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 { target: 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 {
@@ -119,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
@@ -138,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
@@ -155,25 +144,55 @@ Item {
states: [
State {
name: "selected"
- ParentChange { target: content; parent: selectionContainer; x: 3; y: 3 }
- PropertyChanges { target: packageRoot; DelegateModel.inItems: visibleContainer.drag.active }
- PropertyChanges { target: gradientStart; color: "#017423" }
- PropertyChanges { target: gradientStart; color: "#007423" }
+ ParentChange {
+ target: content
+ parent: selectionContainer
+ x: 3
+ y: 3
+ }
+ PropertyChanges {
+ packageRoot.DelegateModel.inItems: visibleContainer.drag.active
+ gradientStart.color: "#017423"
+ }
+ PropertyChanges {
+ gradientStart.color: "#007423"
+ }
}, State {
name: "visible"
- PropertyChanges { target: packageRoot; DelegateModel.inItems: true }
- ParentChange { target: content; parent: visibleContainer; x: 3; y: 3 }
- PropertyChanges { target: gradientStart; color: "#8AC953" }
- PropertyChanges { target: 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 }
}
}
}
@@ -184,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"
}
@@ -200,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 a0f0d67d45..0000000000
--- a/examples/quick/views/delegatemodel/main.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#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 638c8bf10f..0000000000
--- a/examples/quick/views/delegatemodel/slideshow.qml
+++ /dev/null
@@ -1,164 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.12
-import QtQml.Models 2.12
-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 { target: image; z: 2 }
- PropertyChanges { target: 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 { target: image; z: 1 }
- PropertyChanges { target: 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 3e23f7657a..7e73ce31d7 100644
--- a/examples/quick/views/doc/src/views.qdoc
+++ b/examples/quick/views/doc/src/views.qdoc
@@ -1,29 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick Examples - Views
@@ -31,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
@@ -87,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
@@ -100,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 4cc30d3736..f340a97b4c 100644
--- a/examples/quick/views/gridview/gridview-example.qml
+++ b/examples/quick/views/gridview/gridview-example.qml
@@ -1,57 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
- width: 300; height: 400
+ width: 300
+ height: 400
color: "white"
ListModel {
@@ -67,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/PetsModel.qml b/examples/quick/views/listview/content/PetsModel.qml
index bc8751f00a..acdab53c20 100644
--- a/examples/quick/views/listview/content/PetsModel.qml
+++ b/examples/quick/views/listview/content/PetsModel.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
ListModel {
ListElement {
diff --git a/examples/quick/views/listview/content/PressAndHoldButton.qml b/examples/quick/views/listview/content/PressAndHoldButton.qml
index 6d633c0264..51ab9435d2 100644
--- a/examples/quick/views/listview/content/PressAndHoldButton.qml
+++ b/examples/quick/views/listview/content/PressAndHoldButton.qml
@@ -1,61 +1,14 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Image {
id: container
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/RecipesModel.qml b/examples/quick/views/listview/content/RecipesModel.qml
index 05f6d8a472..14b374a4c7 100644
--- a/examples/quick/views/listview/content/RecipesModel.qml
+++ b/examples/quick/views/listview/content/RecipesModel.qml
@@ -1,75 +1,28 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
ListModel {
ListElement {
title: "Pancakes"
picture: "content/pics/pancakes.jpg"
- ingredients: "<html>
+ ingredients: `<html>
<ul>
<li> 1 cup (150g) self-raising flour
<li> 1 tbs caster sugar
<li> 3/4 cup (185ml) milk
<li> 1 egg
</ul>
- </html>"
- method: "<html>
+ </html>`
+ method: `<html>
<ol>
<li> Sift flour and sugar together into a bowl. Add a pinch of salt.
<li> Beat milk and egg together, then add to dry ingredients. Beat until smooth.
<li> Pour mixture into a pan on medium heat and cook until bubbles appear on the surface.
<li> Turn over and cook other side until golden.
</ol>
- </html>"
+ </html>`
}
ListElement {
title: "Fruit Salad"
@@ -80,7 +33,7 @@ ListModel {
ListElement {
title: "Vegetable Soup"
picture: "content/pics/vegetable-soup.jpg"
- ingredients: "<html>
+ ingredients: `<html>
<ul>
<li> 1 onion
<li> 1 turnip
@@ -89,51 +42,51 @@ ListModel {
<li> 1 head of celery
<li> 1 1/2 litres of water
</ul>
- </html>"
- method: "<html>
+ </html>`
+ method: `<html>
<ol>
<li> Chop vegetables.
<li> Boil in water until vegetables soften.
<li> Season with salt and pepper to taste.
</ol>
- </html>"
+ </html>`
}
ListElement {
title: "Hamburger"
picture: "content/pics/hamburger.jpg"
- ingredients: "<html>
+ ingredients: `<html>
<ul>
<li> 500g minced beef
<li> Seasoning
<li> lettuce, tomato, onion, cheese
<li> 1 hamburger bun for each burger
</ul>
- </html>"
- method: "<html>
+ </html>`
+ method: `<html>
<ol>
<li> Mix the beef, together with seasoning, in a food processor.
<li> Shape the beef into burgers.
<li> Grill the burgers for about 5 mins on each side (until cooked through)
<li> Serve each burger on a bun with ketchup, cheese, lettuce, tomato and onion.
</ol>
- </html>"
+ </html>`
}
ListElement {
title: "Lemonade"
picture: "content/pics/lemonade.jpg"
- ingredients: "<html>
+ ingredients: `<html>
<ul>
<li> 1 cup Lemon Juice
<li> 1 cup Sugar
<li> 6 Cups of Water (2 cups warm water, 4 cups cold water)
</ul>
- </html>"
- method: "<html>
+ </html>`
+ method: `<html>
<ol>
<li> Pour 2 cups of warm water into a pitcher and stir in sugar until it dissolves.
<li> Pour in lemon juice, stir again, and add 4 cups of cold water.
<li> Chill or serve over ice cubes.
</ol>
- </html>"
+ </html>`
}
}
diff --git a/examples/quick/views/listview/content/SmallText.qml b/examples/quick/views/listview/content/SmallText.qml
index 21dc46d676..756610f4b3 100644
--- a/examples/quick/views/listview/content/SmallText.qml
+++ b/examples/quick/views/listview/content/SmallText.qml
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Text {
- font.pixelSize: 12
+ font.pointSize: 9
}
diff --git a/examples/quick/views/listview/content/TextButton.qml b/examples/quick/views/listview/content/TextButton.qml
index ed95112d47..aef7aa79e0 100644
--- a/examples/quick/views/listview/content/TextButton.qml
+++ b/examples/quick/views/listview/content/TextButton.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: container
@@ -80,7 +33,7 @@ Rectangle {
states: State {
name: "pressed"
when: mouseArea.pressed
- PropertyChanges { target: gradientStop; color: "#333333" }
+ PropertyChanges { gradientStop.color: "#333333" }
}
}
diff --git a/examples/quick/views/listview/content/ToggleButton.qml b/examples/quick/views/listview/content/ToggleButton.qml
index 890a94570b..19e2589f74 100644
--- a/examples/quick/views/listview/content/ToggleButton.qml
+++ b/examples/quick/views/listview/content/ToggleButton.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtQml module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
Rectangle {
id: root
diff --git a/examples/quick/views/listview/displaymargin.qml b/examples/quick/views/listview/displaymargin.qml
index 19261caaa6..0030b82b55 100644
--- a/examples/quick/views/listview/displaymargin.qml
+++ b/examples/quick/views/listview/displaymargin.qml
@@ -1,53 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.3
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+import QtQuick
Item {
width: 480; height: 320
@@ -81,7 +34,8 @@ Item {
Rectangle {
id: header
- width: parent.width; height: 40
+ width: parent.width
+ height: 40
color: "#AAFF0000"
Text {
@@ -94,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 973d3ce389..736088fbf7 100644
--- a/examples/quick/views/listview/dynamiclist.qml
+++ b/examples/quick/views/listview/dynamiclist.qml
@@ -1,61 +1,17 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+import QtQuick
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:
@@ -63,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"
+ }
]
}
}
@@ -98,7 +72,8 @@ Rectangle {
Item {
//! [0]
id: delegateItem
- width: listView.width; height: 80
+ width: listView.width
+ height: 80
clip: true
required property int index
@@ -130,7 +105,7 @@ Rectangle {
Column {
anchors {
left: arrows.right
- horizontalCenter: parent.horizontalCenter;
+ horizontalCenter: parent.horizontalCenter
bottom: parent.verticalCenter
}
@@ -202,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()
}
@@ -224,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
@@ -234,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",
@@ -249,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 6ed1d8c341..5c1811a00a 100644
--- a/examples/quick/views/listview/expandingdelegates.qml
+++ b/examples/quick/views/listview/expandingdelegates.qml
@@ -1,61 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
import "content"
// This example illustrates expanding a list item to show a more detailed view.
Rectangle {
id: page
- width: 400; height: 240
+ width: 400
+ height: 240
color: "black"
// Delegate for the recipes. This delegate has two modes:
@@ -78,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
@@ -105,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
}
@@ -141,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
@@ -169,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
}
@@ -185,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 = '';
}
@@ -195,23 +177,46 @@ Rectangle {
states: State {
name: "Details"
- PropertyChanges { target: background; color: "white" }
- PropertyChanges { target: recipeImage; width: 130; height: 130 } // Make picture bigger
- PropertyChanges { target: recipe; detailsOpacity: 1; x: 0 } // Make details visible
- PropertyChanges { target: recipe; height: listView.height } // Fill the entire list area with the detailed view
+ PropertyChanges {
+ background.color: "white"
+ recipeImage {
+ // Make picture bigger
+ width: 130
+ height: 130
+ }
+ recipe {
+ // Make details visible
+ detailsOpacity: 1
+ x: 0
+
+ // Fill the entire list area with the detailed view
+ height: listView.height
+ }
+ }
// Move the list so that this item is at the top.
- PropertyChanges { target: recipe.ListView.view; explicit: true; contentY: recipe.y }
+ PropertyChanges {
+ recipe.ListView.view.contentY: recipe.y
+ explicit: true;
+ }
// Disallow flicking while we're in detailed view
- PropertyChanges { target: recipe.ListView.view; interactive: false }
+ PropertyChanges {
+ recipe.ListView.view.interactive: false
+ }
}
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"
+ }
}
}
}
@@ -222,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 092b4d59bd..1f9b9c015c 100644
--- a/examples/quick/views/listview/highlight.qml
+++ b/examples/quick/views/listview/highlight.qml
@@ -1,68 +1,23 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
// This example shows how to create your own highlight delegate for a ListView
// that uses a SpringAnimation to provide custom movement when the
// highlight bar is moved between items.
-import QtQuick 2.0
+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
@@ -70,18 +25,27 @@ 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 {
name: "Current"
when: pet.ListView.isCurrentItem
- PropertyChanges { target: pet; x: 20 }
+ PropertyChanges { pet.x: 20 }
}
transitions: Transition {
- NumberAnimation { properties: "x"; duration: 200 }
+ NumberAnimation {
+ properties: "x"
+ duration: 200
+ }
}
MouseArea {
anchors.fill: parent
@@ -92,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 dafd064332..91304ae08b 100644
--- a/examples/quick/views/listview/highlightranges.qml
+++ b/examples/quick/views/listview/highlightranges.qml
@@ -1,56 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
import "content"
+pragma ComponentBehavior: Bound
+
//! [0]
Rectangle {
id: root
@@ -77,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
@@ -115,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
@@ -129,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]
@@ -159,6 +131,7 @@ Rectangle {
Component {
id: petDelegate
Item {
+ id: petDelegateItem
width: 160
height: column.height
@@ -169,9 +142,15 @@ Rectangle {
Column {
id: column
- Text { text: 'Name: ' + parent.name }
- Text { text: 'Type: ' + parent.type }
- Text { text: 'Age: ' + parent.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 d51ed89789..83370958fa 100644
--- a/examples/quick/views/listview/sections.qml
+++ b/examples/quick/views/listview/sections.qml
@@ -1,58 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
// This example shows how a ListView can be separated into sections using
// the ListView.section attached property.
-import QtQuick 2.0
-import "content"
+import QtQuick
+import QtQuick.Controls
Rectangle {
id: container
@@ -61,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]
@@ -83,7 +82,7 @@ Rectangle {
Component {
id: sectionHeading
Rectangle {
- width: container.width
+ width: ListView.view.width
height: childrenRect.height
color: "lightsteelblue"
@@ -105,6 +104,7 @@ Rectangle {
model: animalsModel
delegate: Text {
required property string name
+
text: name
font.pixelSize: 18
}
@@ -120,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/main.cpp b/examples/quick/views/main.cpp
index b09597e804..d724e59961 100644
--- a/examples/quick/views/main.cpp
+++ b/examples/quick/views/main.cpp
@@ -1,51 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "../shared/shared.h"
DECLARATIVE_EXAMPLE_MAIN(views/views)
diff --git a/examples/quick/views/objectmodel/objectmodel.qml b/examples/quick/views/objectmodel/objectmodel.qml
index c9e4b8a5cd..f0b116a247 100644
--- a/examples/quick/views/objectmodel/objectmodel.qml
+++ b/examples/quick/views/objectmodel/objectmodel.qml
@@ -1,58 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
// This example demonstrates placing items in a view using
// an ObjectModel
-import QtQuick 2.0
-import QtQml.Models 2.1
+import QtQuick
+import QtQml.Models
+
+pragma ComponentBehavior: Bound
Rectangle {
id: root
@@ -66,42 +21,69 @@ 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 }
- Component.onDestruction: if (root.activeFocusprintDestruction) print("destroyed 3")
+ Text {
+ anchors.centerIn: parent
+ text: qsTr("Page 3")
+ font.bold: true
+ }
+
+ Component.onDestruction: if (root.printDestruction) print("destroyed 3")
}
}
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 {
@@ -110,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 9f4f1946d8..7f3eeaa833 100644
--- a/examples/quick/views/package/Delegate.qml
+++ b/examples/quick/views/package/Delegate.qml
@@ -1,54 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+import QtQuick
//! [0]
Package {
@@ -58,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
}
}
]
@@ -85,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 632d27c724..a9a0c46198 100644
--- a/examples/quick/views/package/view.qml
+++ b/examples/quick/views/package/view.qml
@@ -1,66 +1,27 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import QtQml.Models 2.1
+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 {
@@ -85,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 e42117dfae..f1ecd099c1 100644
--- a/examples/quick/views/pathview/pathview-example.qml
+++ b/examples/quick/views/pathview/pathview-example.qml
@@ -1,74 +1,50 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
+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
@@ -77,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
}
@@ -94,7 +74,11 @@ Rectangle {
Component {
id: appHighlight
- Rectangle { width: 80; height: 80; color: "lightsteelblue" }
+ Rectangle {
+ width: 80
+ height: 80
+ color: "lightsteelblue"
+ }
}
PathView {
@@ -109,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 bdf05269ae..77b16fa6bb 100644
--- a/examples/quick/views/views.qml
+++ b/examples/quick/views/views.qml
@@ -1,56 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-import QtQuick 2.0
-import QtQml.Models 2.1
-import "../shared" as Examples
+import QtQuick
+import shared as Examples
Item {
height: 480
@@ -67,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.qmlproject b/examples/quick/views/views.qmlproject
index 7e6baf0a7f..f0e49ad008 100644
--- a/examples/quick/views/views.qmlproject
+++ b/examples/quick/views/views.qmlproject
@@ -2,6 +2,7 @@ import QmlProject 1.1
Project {
mainFile: "views.qml"
+ importPaths: [ "../" ]
/* Include .qml, .js, and image files from current directory and subdirectories */
QmlFiles {
diff --git a/examples/quick/views/views.qrc b/examples/quick/views/views.qrc
index 1646c49e81..9b16e81321 100644
--- a/examples/quick/views/views.qrc
+++ b/examples/quick/views/views.qrc
@@ -1,5 +1,6 @@
<RCC>
- <qresource prefix="/views">
+ <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/AllScreens.qml b/examples/quick/window/AllScreens.qml
index 6f1a829410..25438f21a9 100644
--- a/examples/quick/window/AllScreens.qml
+++ b/examples/quick/window/AllScreens.qml
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
@@ -66,7 +19,7 @@ Column {
Repeater {
id: screenInfo
- model: Qt.application.screens
+ model: (Qt.application as Application).screens
Label {
required property string name
required property int virtualX
@@ -80,7 +33,7 @@ Column {
}
Component.onCompleted: {
- var screens = Qt.application.screens;
+ var screens = (Qt.application as Application).screens;
for (var i = 0; i < screens.length; ++i)
console.log("screen " + screens[i].name + " has geometry " +
screens[i].virtualX + ", " + screens[i].virtualY + " " +
diff --git a/examples/quick/window/CMakeLists.txt b/examples/quick/window/CMakeLists.txt
index 4fa2bcac4c..58bd8fd7e9 100644
--- a/examples/quick/window/CMakeLists.txt
+++ b/examples/quick/window/CMakeLists.txt
@@ -1,128 +1,50 @@
-# Generated from window.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.16)
project(window LANGUAGES CXX)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-set(CMAKE_AUTOUIC ON)
+qt_standard_project_setup(REQUIRES 6.5)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
+add_subdirectory("../shared" "shared")
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/window")
-
-find_package(Qt6 COMPONENTS Core)
-find_package(Qt6 COMPONENTS Gui)
-find_package(Qt6 COMPONENTS Quick)
-find_package(Qt6 COMPONENTS Qml)
-
-qt_add_executable(window
+qt_add_executable(windowexample
+ WIN32
+ MACOSX_BUNDLE
main.cpp
)
-set_target_properties(window PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-target_link_libraries(window PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Qml
- Qt::Quick
-)
-
-# Resources:
-set(window_resource_files
- "AllScreens.qml"
- "CurrentScreen.qml"
- "Splash.qml"
- "window.qml"
+target_link_libraries(windowexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
)
-qt6_add_resources(window "window"
- PREFIX
- "/window"
- FILES
- ${window_resource_files}
-)
-set_source_files_properties("../shared/Button.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Button.qml"
-)
-set_source_files_properties("../shared/CheckBox.qml"
- PROPERTIES QT_RESOURCE_ALIAS "CheckBox.qml"
-)
-set_source_files_properties("../shared/FlickrRssModel.qml"
- PROPERTIES QT_RESOURCE_ALIAS "FlickrRssModel.qml"
-)
-set_source_files_properties("../shared/Label.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Label.qml"
-)
-set_source_files_properties("../shared/LauncherList.qml"
- PROPERTIES QT_RESOURCE_ALIAS "LauncherList.qml"
-)
-set_source_files_properties("../shared/SimpleLauncherDelegate.qml"
- PROPERTIES QT_RESOURCE_ALIAS "SimpleLauncherDelegate.qml"
-)
-set_source_files_properties("../shared/Slider.qml"
- PROPERTIES QT_RESOURCE_ALIAS "Slider.qml"
-)
-set_source_files_properties("../shared/TabSet.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TabSet.qml"
-)
-set_source_files_properties("../shared/TextField.qml"
- PROPERTIES QT_RESOURCE_ALIAS "TextField.qml"
-)
-set_source_files_properties("../shared/images/back.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/back.png"
-)
-set_source_files_properties("../shared/images/checkmark.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/checkmark.png"
-)
-set_source_files_properties("../shared/images/next.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/next.png"
-)
-set_source_files_properties("../shared/images/qt-logo.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/qt-logo.png"
-)
-set_source_files_properties("../shared/images/slider_handle.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/slider_handle.png"
-)
-set_source_files_properties("../shared/images/tab.png"
- PROPERTIES QT_RESOURCE_ALIAS "images/tab.png"
-)
-set(shared_resource_files
- "Button.qml"
- "CheckBox.qml"
- "FlickrRssModel.qml"
- "Label.qml"
- "LauncherList.qml"
- "SimpleLauncherDelegate.qml"
- "Slider.qml"
- "TabSet.qml"
- "TextField.qml"
- "images/back.png"
- "images/checkmark.png"
- "images/next.png"
- "images/qt-logo.png"
- "images/slider_handle.png"
- "images/tab.png"
+qt_add_qml_module(windowexample
+ URI window
+ QML_FILES
+ "AllScreens.qml"
+ "CurrentScreen.qml"
+ "Splash.qml"
+ "window.qml"
)
-qt6_add_resources(window "shared"
- PREFIX
- "/shared"
- BASE
- "../shared"
- FILES
- ${shared_resource_files}
+add_dependencies(windowexample window_shared)
+
+install(TARGETS windowexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
-install(TARGETS window
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+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/CurrentScreen.qml b/examples/quick/window/CurrentScreen.qml
index 0b6e681aac..1f4da7f0b7 100644
--- a/examples/quick/window/CurrentScreen.qml
+++ b/examples/quick/window/CurrentScreen.qml
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
diff --git a/examples/quick/window/Splash.qml b/examples/quick/window/Splash.qml
index cc520bd5a4..6989425548 100644
--- a/examples/quick/window/Splash.qml
+++ b/examples/quick/window/Splash.qml
@@ -1,54 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
+import shared
//! [splash-properties]
Window {
@@ -69,20 +23,21 @@ Window {
Image {
id: splashImage
- source: "../shared/images/qt-logo.png"
- MouseArea {
- anchors.fill: parent
- onClicked: Qt.quit()
+ source: Images.qtLogo
+ 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 26caafce9a..ca3b90b76e 100644
--- a/examples/quick/window/doc/src/window.qdoc
+++ b/examples/quick/window/doc/src/window.qdoc
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Free Documentation License Usage
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file. Please review the following information to ensure
-** the GNU Free Documentation License version 1.3 requirements
-** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\title Qt Quick Examples - Window and Screen
\example window
\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:
@@ -74,7 +51,8 @@
applications which need to rotate some content when the screen orientation
changes, to position windows on the screen or to convert real units to
logical pixel units. CurrentScreen.qml (which is displayed inline in
- window.qml, or can be run by itself with qmlscene) simply displays the
+ window.qml, or can be run by itself with the
+ \l {Prototyping with the QML Runtime Tool}{qml tool}) simply displays the
property values, while the splash screen uses them to center the window on
the screen.
diff --git a/examples/quick/window/main.cpp b/examples/quick/window/main.cpp
index 25eb3663ab..8de2aa8eef 100644
--- a/examples/quick/window/main.cpp
+++ b/examples/quick/window/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtGui/QGuiApplication>
#include <QtGui/QScreen>
@@ -60,9 +13,14 @@ int main(int argc, char* argv[])
{
QGuiApplication app(argc, argv);
QQmlEngine engine;
+
+#ifdef Q_OS_MACOS
+ engine.addImportPath(app.applicationDirPath() + QStringLiteral("/../PlugIns"));
+#endif
+
QQmlComponent component(&engine);
QQuickWindow::setDefaultAlphaBuffer(true);
- component.loadUrl(QUrl("qrc:///window/window.qml"));
+ component.loadUrl(QUrl("qrc:/qt/qml/window/window.qml"));
if ( component.isReady() )
component.create();
else
diff --git a/examples/quick/window/window.qml b/examples/quick/window/window.qml
index 74c4d94984..99ff4403e4 100644
--- a/examples/quick/window/window.qml
+++ b/examples/quick/window/window.qml
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
@@ -54,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
@@ -137,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
}
@@ -164,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
new file mode 100644
index 0000000000..362fa34698
--- /dev/null
+++ b/examples/quickcontrols/CMakeLists.txt
@@ -0,0 +1,21 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+qt_internal_add_example(attachedstyleproperties)
+qt_internal_add_example(gallery)
+if (TARGET Qt6::Sql)
+ add_subdirectory(chattutorial)
+endif()
+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(wearable)
+qt_internal_add_example(imagine/automotive)
+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
new file mode 100644
index 0000000000..0e4f2778fa
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/CMakeLists.txt
@@ -0,0 +1,47 @@
+cmake_minimum_required(VERSION 3.16)
+project(attachedstyleproperties LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml QuickControls2)
+
+qt_standard_project_setup(REQUIRES 6.5)
+
+add_subdirectory(MyStyle)
+
+qt_add_executable(attachedstylepropertiesexample
+ WIN32
+ MACOSX_BUNDLE
+ attachedstyleproperties.cpp
+)
+
+qt_add_qml_module(attachedstylepropertiesexample
+ URI App
+ QML_FILES
+ attachedstyleproperties.qml
+ NO_RESOURCE_TARGET_PATH
+)
+
+target_link_libraries(attachedstylepropertiesexample PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::QuickControls2
+)
+
+add_dependencies(attachedstylepropertiesexample MyStyle)
+
+install(TARGETS attachedstylepropertiesexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+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/ApplicationWindow.qml b/examples/quickcontrols/attachedstyleproperties/MyStyle/ApplicationWindow.qml
new file mode 100644
index 0000000000..8a7bbc7ed2
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/MyStyle/ApplicationWindow.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Templates as T
+
+import MyStyle
+
+T.ApplicationWindow {
+ color: MyStyle.windowColor
+
+ Behavior on color {
+ ColorAnimation {
+ duration: 150
+ }
+ }
+}
diff --git a/examples/quickcontrols/attachedstyleproperties/MyStyle/Button.qml b/examples/quickcontrols/attachedstyleproperties/MyStyle/Button.qml
new file mode 100644
index 0000000000..7eabcb0b35
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/MyStyle/Button.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Templates as T
+
+import MyStyle
+
+T.Button {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ horizontalPadding: padding + 2
+ spacing: 6
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ color: control.MyStyle.buttonTextColor
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ background: Rectangle {
+ implicitWidth: 60
+ implicitHeight: 40
+ color: control.down ? Qt.darker(control.MyStyle.buttonColor, 1.1) : control.MyStyle.buttonColor
+ }
+}
diff --git a/examples/quickcontrols/attachedstyleproperties/MyStyle/CMakeLists.txt b/examples/quickcontrols/attachedstyleproperties/MyStyle/CMakeLists.txt
new file mode 100644
index 0000000000..0ff17420b9
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/MyStyle/CMakeLists.txt
@@ -0,0 +1,47 @@
+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()
+
+qt_policy(SET QTP0001 NEW)
+qt_add_qml_module(MyStyle
+ URI MyStyle
+ IMPORTS
+ QtQuick.Controls.Material
+ QML_FILES
+ ApplicationWindow.qml
+ Button.qml
+ Label.qml
+ Popup.qml
+ Switch.qml
+ ToolBar.qml
+ SOURCES
+ mystyle.cpp
+ mystyle.h
+)
+
+include(GenerateExportHeader)
+target_include_directories(MyStyle PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) # find autogenerated header
+generate_export_header(MyStyle)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml QuickControls2)
+
+target_link_libraries(MyStyle PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::QuickControls2
+)
+
+install(TARGETS MyStyle
+ 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 "${CMAKE_INSTALL_BINDIR}/MyStyle"
+)
diff --git a/examples/quickcontrols/attachedstyleproperties/MyStyle/Label.qml b/examples/quickcontrols/attachedstyleproperties/MyStyle/Label.qml
new file mode 100644
index 0000000000..202528a732
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/MyStyle/Label.qml
@@ -0,0 +1,10 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick.Templates as T
+
+import MyStyle
+
+T.Label {
+ color: MyStyle.windowTextColor
+}
diff --git a/examples/quickcontrols/attachedstyleproperties/MyStyle/Popup.qml b/examples/quickcontrols/attachedstyleproperties/MyStyle/Popup.qml
new file mode 100644
index 0000000000..25c4ace64a
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/MyStyle/Popup.qml
@@ -0,0 +1,49 @@
+// 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
+
+T.Popup {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 12
+
+ enter: Transition {
+ NumberAnimation {
+ property: "opacity"
+ from: 0.0
+ to: 1.0
+ easing.type: Easing.OutCubic
+ duration: 150
+ }
+ }
+
+ exit: Transition {
+ NumberAnimation {
+ property: "opacity"
+ from: 1.0
+ to: 0.0
+ easing.type: Easing.OutCubic
+ duration: 150
+ }
+ }
+
+ background: Rectangle {
+ radius: 2
+ color: control.MyStyle.popupColor
+ border.color: control.MyStyle.popupBorderColor
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: control.MyStyle.backgroundDimColor
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+}
diff --git a/examples/quickcontrols/attachedstyleproperties/MyStyle/Switch.qml b/examples/quickcontrols/attachedstyleproperties/MyStyle/Switch.qml
new file mode 100644
index 0000000000..59bda147b7
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/MyStyle/Switch.qml
@@ -0,0 +1,58 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Templates as T
+
+import MyStyle
+
+T.Switch {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ horizontalPadding: padding + 2
+ spacing: 6
+
+ indicator: Rectangle {
+ implicitWidth: 56
+ implicitHeight: 28
+
+ x: control.text
+ ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding)
+ : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ radius: 8
+ color: control.down ? Qt.darker(control.MyStyle.buttonColor, 1.1) : control.MyStyle.buttonColor
+
+ Rectangle {
+ x: Math.max(0, Math.min(parent.width - width, control.visualPosition * parent.width - (width / 2)))
+ y: (parent.height - height) / 2
+ width: 28
+ height: 28
+ radius: 8
+ color: Qt.lighter(control.MyStyle.buttonColor)
+
+ Behavior on x {
+ enabled: !control.down
+ SmoothedAnimation { velocity: 200 }
+ }
+ }
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.MyStyle.windowTextColor
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+}
diff --git a/examples/quickcontrols/attachedstyleproperties/MyStyle/ToolBar.qml b/examples/quickcontrols/attachedstyleproperties/MyStyle/ToolBar.qml
new file mode 100644
index 0000000000..b0cd597c87
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/MyStyle/ToolBar.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Templates as T
+
+import MyStyle
+
+T.ToolBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ background: Rectangle {
+ implicitHeight: 40
+ // Ensure that we use Control's attached MyStyle object by qualifying
+ // the binding with its id. If we don't do this, an extra, unnecessary
+ // attached MyStyle object will be created for the Rectangle.
+ color: control.MyStyle.toolBarColor
+ }
+}
diff --git a/examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp b/examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp
new file mode 100644
index 0000000000..feadb138f7
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp
@@ -0,0 +1,134 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mystyle.h"
+
+// If no value was inherited from a parent or explicitly set, the "global" values are used.
+static MyStyle::Theme globalTheme = MyStyle::Light;
+
+MyStyle::MyStyle(QObject *parent)
+ : QQuickAttachedPropertyPropagator(parent)
+ , m_theme(globalTheme)
+{
+ // A static function could be called here that reads globalTheme from a
+ // settings file once at startup. That value would override the global
+ // value. This is similar to what the Imagine and Material styles do, for
+ // example.
+
+ initialize();
+}
+
+MyStyle *MyStyle::qmlAttachedProperties(QObject *object)
+{
+ return new MyStyle(object);
+}
+
+MyStyle::Theme MyStyle::theme() const
+{
+ return m_theme;
+}
+
+void MyStyle::setTheme(Theme theme)
+{
+ // When this function is called, we know that the user has explicitly
+ // set a theme on this attached object. We set this to true even if
+ // the effective theme didn't change, because it's important that
+ // the user's specified value is respected (and not inherited from
+ // from the parent).
+ m_explicitTheme = true;
+ if (m_theme == theme)
+ return;
+
+ m_theme = theme;
+ propagateTheme();
+ themeChange();
+
+}
+
+void MyStyle::inheritTheme(Theme theme)
+{
+ if (m_explicitTheme || m_theme == theme)
+ return;
+
+ m_theme = theme;
+ propagateTheme();
+ themeChange();
+}
+
+void MyStyle::propagateTheme()
+{
+ const auto styles = attachedChildren();
+ for (QQuickAttachedPropertyPropagator *child : styles) {
+ MyStyle *myStyle = qobject_cast<MyStyle *>(child);
+ if (myStyle)
+ myStyle->inheritTheme(m_theme);
+ }
+}
+
+void MyStyle::resetTheme()
+{
+ if (!m_explicitTheme)
+ return;
+
+ m_explicitTheme = false;
+ MyStyle *myStyle = qobject_cast<MyStyle *>(attachedParent());
+ inheritTheme(myStyle ? myStyle->theme() : globalTheme);
+}
+
+void MyStyle::themeChange()
+{
+ emit themeChanged();
+ // Emit any other change signals for properties that depend on the theme here...
+}
+
+QColor MyStyle::windowColor() const
+{
+ return m_theme == Light ? QColor::fromRgb(0xf0f0f0) : QColor::fromRgb(0x303030);
+}
+
+QColor MyStyle::windowTextColor() const
+{
+ return m_theme == Light ? QColor::fromRgb(0x5c5c5c) : QColor::fromRgb(0xe0e0e0);
+}
+
+QColor MyStyle::buttonColor() const
+{
+ return m_theme == Light ? QColor::fromRgb(0xc2e1ff) : QColor::fromRgb(0x74bbff);
+}
+
+QColor MyStyle::buttonTextColor() const
+{
+ return m_theme == Light ? QColor::fromRgb(0x5c5c5c) : QColor::fromRgb(0xffffff);
+}
+
+QColor MyStyle::toolBarColor() const
+{
+ return m_theme == Light ? QColor::fromRgb(0x4da6ff) : QColor::fromRgb(0x0066cc);
+}
+
+QColor MyStyle::popupColor() const
+{
+ return windowColor().lighter(120);
+}
+
+QColor MyStyle::popupBorderColor() const
+{
+ const QColor winColor = windowColor();
+ return m_theme == Light ? winColor.darker(140) : winColor.lighter(140);
+}
+
+QColor MyStyle::backgroundDimColor() const
+{
+ const QColor winColor = windowColor().darker();
+ return QColor::fromRgb(winColor.red(), winColor.green(), winColor.blue(), 100);
+}
+
+void MyStyle::attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent)
+{
+ Q_UNUSED(oldParent);
+ MyStyle *attachedParentStyle = qobject_cast<MyStyle *>(newParent);
+ if (attachedParentStyle) {
+ inheritTheme(attachedParentStyle->theme());
+ // Do any other inheriting here...
+ }
+}
diff --git a/examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.h b/examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.h
new file mode 100644
index 0000000000..da87ab4718
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.h
@@ -0,0 +1,76 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MYSTYLE_H
+#define MYSTYLE_H
+
+#include <QColor>
+#include <QQmlEngine>
+#include <QQuickAttachedPropertyPropagator>
+
+#include "mystyle_export.h"
+
+class MYSTYLE_EXPORT MyStyle : public QQuickAttachedPropertyPropagator
+{
+ Q_OBJECT
+ // Provide a RESET function in order to allow an item to set MyStyle.theme to undefined
+ // in order to use its parent's (or global) theme after one was explicitly set on it.
+ Q_PROPERTY(Theme theme READ theme WRITE setTheme RESET resetTheme NOTIFY themeChanged FINAL)
+ // As the values of these properties only depend on the theme, they can all use the theme
+ // property's change signal.
+ Q_PROPERTY(QColor windowColor READ windowColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor windowTextColor READ windowTextColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor buttonColor READ buttonColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor buttonTextColor READ buttonTextColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor toolBarColor READ toolBarColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor popupColor READ popupColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor popupBorderColor READ popupBorderColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor backgroundDimColor READ backgroundDimColor NOTIFY themeChanged FINAL)
+
+ QML_ELEMENT
+ QML_ATTACHED(MyStyle)
+ QML_UNCREATABLE("")
+ QML_ADDED_IN_VERSION(1, 0)
+
+public:
+ enum Theme {
+ Light,
+ Dark
+ };
+
+ Q_ENUM(Theme)
+
+ explicit MyStyle(QObject *parent = nullptr);
+
+ static MyStyle *qmlAttachedProperties(QObject *object);
+
+ Theme theme() const;
+ void setTheme(Theme theme);
+ void inheritTheme(Theme theme);
+ void propagateTheme();
+ void resetTheme();
+ void themeChange();
+
+ QColor windowColor() const;
+ QColor windowTextColor() const;
+ QColor buttonColor() const;
+ QColor buttonTextColor() const;
+ QColor toolBarColor() const;
+ QColor popupColor() const;
+ QColor popupBorderColor() const;
+ QColor backgroundDimColor() const;
+
+Q_SIGNALS:
+ void themeChanged();
+
+protected:
+ void attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent) override;
+
+private:
+ // Whether a color value was explicitly set on the specific object that this attached style object represents.
+ bool m_explicitTheme = false;
+ // The actual values for this item, whether explicit, inherited or globally set.
+ Theme m_theme = Light;
+};
+
+#endif // MYSTYLE_H
diff --git a/examples/quickcontrols/attachedstyleproperties/attachedstyleproperties.cpp b/examples/quickcontrols/attachedstyleproperties/attachedstyleproperties.cpp
new file mode 100644
index 0000000000..376e53c055
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/attachedstyleproperties.cpp
@@ -0,0 +1,28 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+#include <QDir>
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+ app.setOrganizationName("QtProject");
+ app.setOrganizationDomain("qt-project.org");
+ app.setApplicationName("Attached Objects");
+
+ QQmlApplicationEngine engine;
+#ifdef Q_OS_MACOS
+ engine.addImportPath(app.applicationDirPath() + "/../PlugIns");
+#endif
+ const QUrl url(QStringLiteral("qrc:/attachedstyleproperties.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/quickcontrols/attachedstyleproperties/attachedstyleproperties.qml b/examples/quickcontrols/attachedstyleproperties/attachedstyleproperties.qml
new file mode 100644
index 0000000000..95ff4418e8
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/attachedstyleproperties.qml
@@ -0,0 +1,115 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Layouts
+
+import MyStyle
+
+ApplicationWindow {
+ width: 800
+ height: 600
+ title: qsTr("Attached Objects")
+ visible: true
+
+ MyStyle.theme: darkModeSwitch.checked ? MyStyle.Dark : MyStyle.Light
+
+ header: ToolBar {
+ MyStyle.theme: MyStyle.Dark
+
+ RowLayout {
+ anchors.fill: parent
+ anchors.leftMargin: 12
+
+ Label {
+ text: qsTr("This is a Label in a ToolBar")
+ }
+
+ Item {
+ Layout.fillWidth: true
+ }
+
+ Switch {
+ id: darkModeSwitch
+ text: qsTr("Dark mode")
+ Layout.fillWidth: false
+ }
+ }
+ }
+
+ ColumnLayout {
+ anchors.centerIn: parent
+ spacing: 20
+
+ Label {
+ text: qsTr("This is a Label in an ApplicationWindow")
+ Layout.alignment: Qt.AlignHCenter
+ }
+
+ 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()
+ else
+ childWindow.raise()
+ }
+ }
+ }
+ }
+
+ Popup {
+ id: popup
+ anchors.centerIn: parent
+ closePolicy: Popup.NoAutoClose
+
+ ColumnLayout {
+ anchors.centerIn: parent
+ spacing: 20
+
+ Label {
+ text: qsTr("This is a Label in a Popup")
+ Layout.alignment: Qt.AlignHCenter
+ }
+
+ Button {
+ text: qsTr("Close Popup")
+ Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: false
+ onClicked: popup.close()
+ }
+ }
+ }
+
+ ApplicationWindow {
+ id: childWindow
+ width: 600
+ height: 400
+ title: qsTr("Attached Objects - Child Window")
+
+ ColumnLayout {
+ anchors.centerIn: parent
+ spacing: 20
+
+ Label {
+ text: qsTr("This is a Label in a child ApplicationWindow")
+ Layout.alignment: Qt.AlignHCenter
+ }
+
+ Button {
+ text: qsTr("Close Window")
+ Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: false
+ onClicked: childWindow.close()
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/attachedstyleproperties/doc/images/qtquickcontrols-attachedstyleproperties.png b/examples/quickcontrols/attachedstyleproperties/doc/images/qtquickcontrols-attachedstyleproperties.png
new file mode 100644
index 0000000000..2cd5f214f7
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/doc/images/qtquickcontrols-attachedstyleproperties.png
Binary files differ
diff --git a/examples/quickcontrols/attachedstyleproperties/doc/src/qtquickcontrols-attachedstyleproperties.qdoc b/examples/quickcontrols/attachedstyleproperties/doc/src/qtquickcontrols-attachedstyleproperties.qdoc
new file mode 100644
index 0000000000..1b0116c7ec
--- /dev/null
+++ b/examples/quickcontrols/attachedstyleproperties/doc/src/qtquickcontrols-attachedstyleproperties.qdoc
@@ -0,0 +1,19 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example attachedstyleproperties
+ \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
+
+ The Attached Style Properties example is a simple application that shows
+ how to use \l QQuickAttachedPropertyPropagator to propagate attached
+ property values to child objects.
+
+ \include examples-run.qdocinc
+*/
diff --git a/examples/quickcontrols/chattutorial/CMakeLists.txt b/examples/quickcontrols/chattutorial/CMakeLists.txt
new file mode 100644
index 0000000000..83744b78cf
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/CMakeLists.txt
@@ -0,0 +1,16 @@
+# 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 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
new file mode 100644
index 0000000000..c17c054418
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter1/CMakeLists.txt
@@ -0,0 +1,49 @@
+# 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)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_add_executable(chattutorial-chapter1 WIN32 MACOSX_BUNDLE
+ main.cpp
+)
+
+target_link_libraries(chattutorial-chapter1 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+qt_policy(SET QTP0001 NEW)
+qt_add_qml_module(chattutorial-chapter1
+ URI chattutorial
+ QML_FILES
+ "Main.qml"
+)
+
+qt6_add_resources(chattutorial-chapter1 "conf"
+ PREFIX
+ "/"
+ FILES
+ "qtquickcontrols2.conf"
+)
+
+install(TARGETS chattutorial-chapter1
+ 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
new file mode 100644
index 0000000000..323b0709d4
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter1/chapter1.pro
@@ -0,0 +1,15 @@
+TEMPLATE = app
+
+QT += qml quick
+
+SOURCES += main.cpp
+
+resources.files = \
+ Main.qml \
+ qmldir
+resources.prefix = qt/qml/chattutorial/
+RESOURCES += resources \
+ qtquickcontrols2.conf
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/chattutorial/chapter1
+INSTALLS += target
diff --git a/examples/quickcontrols/chattutorial/chapter1/main.cpp b/examples/quickcontrols/chattutorial/chapter1/main.cpp
new file mode 100644
index 0000000000..73d4bf3b63
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter1/main.cpp
@@ -0,0 +1,16 @@
+// 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.loadFromModule("chattutorial", "Main");
+
+ return app.exec();
+}
+
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/chapter1/qtquickcontrols2.conf b/examples/quickcontrols/chattutorial/chapter1/qtquickcontrols2.conf
new file mode 100644
index 0000000000..db9486764e
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter1/qtquickcontrols2.conf
@@ -0,0 +1,2 @@
+[Controls]
+Style=Basic
diff --git a/examples/quickcontrols/chattutorial/chapter2/CMakeLists.txt b/examples/quickcontrols/chattutorial/chapter2/CMakeLists.txt
new file mode 100644
index 0000000000..b6e37b4449
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/CMakeLists.txt
@@ -0,0 +1,62 @@
+# 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)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_add_executable(chattutorial-chapter2 WIN32 MACOSX_BUNDLE
+ main.cpp
+)
+
+target_link_libraries(chattutorial-chapter2 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+qt_policy(SET QTP0001 NEW)
+qt_add_qml_module(chattutorial-chapter2
+ URI chattutorial
+ QML_FILES
+ "Main.qml"
+ RESOURCES
+ "images/Albert_Einstein.png"
+ "images/Albert_Einstein@2x.png"
+ "images/Albert_Einstein@3x.png"
+ "images/Albert_Einstein@4x.png"
+ "images/Ernest_Hemingway.png"
+ "images/Ernest_Hemingway@2x.png"
+ "images/Ernest_Hemingway@3x.png"
+ "images/Ernest_Hemingway@4x.png"
+ "images/Hans_Gude.png"
+ "images/Hans_Gude@2x.png"
+ "images/Hans_Gude@3x.png"
+ "images/Hans_Gude@4x.png"
+)
+
+qt6_add_resources(chattutorial-chapter2 "conf"
+ PREFIX
+ "/"
+ FILES
+ "qtquickcontrols2.conf"
+)
+
+install(TARGETS chattutorial-chapter2
+ 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
new file mode 100644
index 0000000000..88f70ce08a
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/chapter2.pro
@@ -0,0 +1,27 @@
+TEMPLATE = app
+
+QT += qml quick
+
+SOURCES += main.cpp
+
+resources.files = \
+ images/Albert_Einstein.png \
+ images/Albert_Einstein@2x.png \
+ images/Albert_Einstein@3x.png \
+ images/Albert_Einstein@4x.png \
+ images/Ernest_Hemingway.png \
+ images/Ernest_Hemingway@2x.png \
+ images/Ernest_Hemingway@3x.png \
+ images/Ernest_Hemingway@4x.png \
+ images/Hans_Gude.png \
+ images/Hans_Gude@2x.png \
+ images/Hans_Gude@3x.png \
+ images/Hans_Gude@4x.png \
+ Main.qml \
+ qmldir
+resources.prefix = qt/qml/chattutorial/
+RESOURCES += resources \
+ qtquickcontrols2.conf
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/chattutorial/chapter2
+INSTALLS += target
diff --git a/examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein.png b/examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein.png
new file mode 100644
index 0000000000..7c44b90b8d
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein@2x.png b/examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein@2x.png
new file mode 100644
index 0000000000..6ce9c39b6c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein@2x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein@3x.png b/examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein@3x.png
new file mode 100644
index 0000000000..aab6a6a162
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein@3x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein@4x.png b/examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein@4x.png
new file mode 100644
index 0000000000..3611284df4
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/images/Albert_Einstein@4x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway.png b/examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway.png
new file mode 100644
index 0000000000..3ac8992fd9
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway@2x.png b/examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway@2x.png
new file mode 100644
index 0000000000..122d9f1e53
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway@2x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway@3x.png b/examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway@3x.png
new file mode 100644
index 0000000000..2fe9c2cc1c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway@3x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway@4x.png b/examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway@4x.png
new file mode 100644
index 0000000000..96fb6788b5
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/images/Ernest_Hemingway@4x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude.png b/examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude.png
new file mode 100644
index 0000000000..907e38bc61
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude@2x.png b/examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude@2x.png
new file mode 100644
index 0000000000..6837796a83
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude@2x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude@3x.png b/examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude@3x.png
new file mode 100644
index 0000000000..29af422ad3
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude@3x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude@4x.png b/examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude@4x.png
new file mode 100644
index 0000000000..bc35eeaa79
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/images/Hans_Gude@4x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter2/images/images.qrc b/examples/quickcontrols/chattutorial/chapter2/images/images.qrc
new file mode 100644
index 0000000000..9eda6aa29c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/images/images.qrc
@@ -0,0 +1,16 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Albert_Einstein.png</file>
+ <file>Albert_Einstein@2x.png</file>
+ <file>Albert_Einstein@3x.png</file>
+ <file>Albert_Einstein@4x.png</file>
+ <file>Ernest_Hemingway.png</file>
+ <file>Ernest_Hemingway@2x.png</file>
+ <file>Ernest_Hemingway@3x.png</file>
+ <file>Ernest_Hemingway@4x.png</file>
+ <file>Hans_Gude.png</file>
+ <file>Hans_Gude@2x.png</file>
+ <file>Hans_Gude@3x.png</file>
+ <file>Hans_Gude@4x.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/quickcontrols/chattutorial/chapter2/main.cpp b/examples/quickcontrols/chattutorial/chapter2/main.cpp
new file mode 100644
index 0000000000..73d4bf3b63
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/main.cpp
@@ -0,0 +1,16 @@
+// 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.loadFromModule("chattutorial", "Main");
+
+ return app.exec();
+}
+
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/chapter2/qtquickcontrols2.conf b/examples/quickcontrols/chattutorial/chapter2/qtquickcontrols2.conf
new file mode 100644
index 0000000000..db9486764e
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter2/qtquickcontrols2.conf
@@ -0,0 +1,2 @@
+[Controls]
+Style=Basic
diff --git a/examples/quickcontrols/chattutorial/chapter3/CMakeLists.txt b/examples/quickcontrols/chattutorial/chapter3/CMakeLists.txt
new file mode 100644
index 0000000000..a101f3ebb3
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/CMakeLists.txt
@@ -0,0 +1,64 @@
+# 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)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick)
+
+qt_add_executable(chattutorial-chapter3 WIN32 MACOSX_BUNDLE
+ main.cpp
+)
+
+target_link_libraries(chattutorial-chapter3 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+)
+
+qt_policy(SET QTP0001 NEW)
+qt_add_qml_module(chattutorial-chapter3
+ URI chattutorial
+ QML_FILES
+ "ContactPage.qml"
+ "ConversationPage.qml"
+ "Main.qml"
+ RESOURCES
+ "images/Albert_Einstein.png"
+ "images/Albert_Einstein@2x.png"
+ "images/Albert_Einstein@3x.png"
+ "images/Albert_Einstein@4x.png"
+ "images/Ernest_Hemingway.png"
+ "images/Ernest_Hemingway@2x.png"
+ "images/Ernest_Hemingway@3x.png"
+ "images/Ernest_Hemingway@4x.png"
+ "images/Hans_Gude.png"
+ "images/Hans_Gude@2x.png"
+ "images/Hans_Gude@3x.png"
+ "images/Hans_Gude@4x.png"
+)
+
+qt6_add_resources(chattutorial-chapter3 "conf"
+ PREFIX
+ "/"
+ FILES
+ "qtquickcontrols2.conf"
+)
+
+install(TARGETS chattutorial-chapter3
+ 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
new file mode 100644
index 0000000000..939d911964
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/ContactPage.qml
@@ -0,0 +1,47 @@
+// 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
+
+Page {
+ id: root
+
+ header: ToolBar {
+ Label {
+ text: qsTr("Contacts")
+ font.pixelSize: 20
+ anchors.centerIn: parent
+ }
+ }
+
+ 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
+
+ onClicked: root.StackView.view.push("ConversationPage.qml", { inConversationWith: modelData })
+
+ Image {
+ id: avatar
+ source: "images/" + contactDelegate.modelData.replace(" ", "_") + ".png"
+ }
+ }
+ }
+}
+
diff --git a/examples/quickcontrols/chattutorial/chapter3/ConversationPage.qml b/examples/quickcontrols/chattutorial/chapter3/ConversationPage.qml
new file mode 100644
index 0000000000..9a4f1861bd
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/ConversationPage.qml
@@ -0,0 +1,102 @@
+// 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
+
+Page {
+ id: root
+
+ property string inConversationWith
+
+ header: ToolBar {
+ ToolButton {
+ text: qsTr("Back")
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ anchors.verticalCenter: parent.verticalCenter
+ onClicked: root.StackView.view.pop()
+ }
+
+ Label {
+ id: pageTitle
+ text: root.inConversationWith
+ font.pixelSize: 20
+ anchors.centerIn: parent
+ }
+ }
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ ListView {
+ id: listView
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.margins: pane.leftPadding + messageField.leftPadding
+ displayMarginBeginning: 40
+ displayMarginEnd: 40
+ verticalLayoutDirection: ListView.BottomToTop
+ spacing: 12
+ model: 10
+ delegate: Row {
+ 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: !messageDelegate.sentByMe
+ }
+
+ Rectangle {
+ width: 80
+ height: 40
+ color: messageDelegate.sentByMe ? "lightgrey" : "steelblue"
+
+ Label {
+ anchors.centerIn: parent
+ text: messageDelegate.index
+ color: messageDelegate.sentByMe ? "black" : "white"
+ }
+ }
+ }
+
+ ScrollBar.vertical: ScrollBar {}
+ }
+
+ Pane {
+ id: pane
+ Layout.fillWidth: true
+ Layout.fillHeight: false
+
+ RowLayout {
+ width: parent.width
+
+ TextArea {
+ id: messageField
+ Layout.fillWidth: true
+ placeholderText: qsTr("Compose message")
+ wrapMode: TextArea.Wrap
+ }
+
+ Button {
+ 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
new file mode 100644
index 0000000000..b0eebae94a
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/chapter3.pro
@@ -0,0 +1,29 @@
+TEMPLATE = app
+
+QT += qml quick
+
+SOURCES += main.cpp
+
+resources.files = \
+ ContactPage.qml \
+ ConversationPage.qml \
+ images/Albert_Einstein.png \
+ images/Albert_Einstein@2x.png \
+ images/Albert_Einstein@3x.png \
+ images/Albert_Einstein@4x.png \
+ images/Ernest_Hemingway.png \
+ images/Ernest_Hemingway@2x.png \
+ images/Ernest_Hemingway@3x.png \
+ images/Ernest_Hemingway@4x.png \
+ images/Hans_Gude.png \
+ images/Hans_Gude@2x.png \
+ images/Hans_Gude@3x.png \
+ images/Hans_Gude@4x.png \
+ Main.qml \
+ qmldir
+resources.prefix = qt/qml/chattutorial/
+RESOURCES += resources \
+ qtquickcontrols2.conf
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/chattutorial/chapter3
+INSTALLS += target
diff --git a/examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein.png b/examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein.png
new file mode 100644
index 0000000000..7c44b90b8d
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein@2x.png b/examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein@2x.png
new file mode 100644
index 0000000000..6ce9c39b6c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein@2x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein@3x.png b/examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein@3x.png
new file mode 100644
index 0000000000..aab6a6a162
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein@3x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein@4x.png b/examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein@4x.png
new file mode 100644
index 0000000000..3611284df4
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/images/Albert_Einstein@4x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway.png b/examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway.png
new file mode 100644
index 0000000000..3ac8992fd9
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway@2x.png b/examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway@2x.png
new file mode 100644
index 0000000000..122d9f1e53
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway@2x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway@3x.png b/examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway@3x.png
new file mode 100644
index 0000000000..2fe9c2cc1c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway@3x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway@4x.png b/examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway@4x.png
new file mode 100644
index 0000000000..96fb6788b5
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/images/Ernest_Hemingway@4x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude.png b/examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude.png
new file mode 100644
index 0000000000..907e38bc61
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude@2x.png b/examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude@2x.png
new file mode 100644
index 0000000000..6837796a83
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude@2x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude@3x.png b/examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude@3x.png
new file mode 100644
index 0000000000..29af422ad3
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude@3x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude@4x.png b/examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude@4x.png
new file mode 100644
index 0000000000..bc35eeaa79
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/images/Hans_Gude@4x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter3/images/images.qrc b/examples/quickcontrols/chattutorial/chapter3/images/images.qrc
new file mode 100644
index 0000000000..9eda6aa29c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/images/images.qrc
@@ -0,0 +1,16 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Albert_Einstein.png</file>
+ <file>Albert_Einstein@2x.png</file>
+ <file>Albert_Einstein@3x.png</file>
+ <file>Albert_Einstein@4x.png</file>
+ <file>Ernest_Hemingway.png</file>
+ <file>Ernest_Hemingway@2x.png</file>
+ <file>Ernest_Hemingway@3x.png</file>
+ <file>Ernest_Hemingway@4x.png</file>
+ <file>Hans_Gude.png</file>
+ <file>Hans_Gude@2x.png</file>
+ <file>Hans_Gude@3x.png</file>
+ <file>Hans_Gude@4x.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/quickcontrols/chattutorial/chapter3/main.cpp b/examples/quickcontrols/chattutorial/chapter3/main.cpp
new file mode 100644
index 0000000000..73d4bf3b63
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/main.cpp
@@ -0,0 +1,16 @@
+// 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.loadFromModule("chattutorial", "Main");
+
+ return app.exec();
+}
+
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/chapter3/qtquickcontrols2.conf b/examples/quickcontrols/chattutorial/chapter3/qtquickcontrols2.conf
new file mode 100644
index 0000000000..db9486764e
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter3/qtquickcontrols2.conf
@@ -0,0 +1,2 @@
+[Controls]
+Style=Basic
diff --git a/examples/quickcontrols/chattutorial/chapter4/CMakeLists.txt b/examples/quickcontrols/chattutorial/chapter4/CMakeLists.txt
new file mode 100644
index 0000000000..2d5b930e45
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/CMakeLists.txt
@@ -0,0 +1,67 @@
+# 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)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick Sql)
+
+qt_add_executable(chattutorial-chapter4 WIN32 MACOSX_BUNDLE
+ main.cpp
+ sqlcontactmodel.cpp sqlcontactmodel.h
+ sqlconversationmodel.cpp sqlconversationmodel.h
+)
+
+target_link_libraries(chattutorial-chapter4 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+ Qt6::Sql
+)
+
+qt_policy(SET QTP0001 NEW)
+qt_add_qml_module(chattutorial-chapter4
+ URI chattutorial
+ QML_FILES
+ "ContactPage.qml"
+ "ConversationPage.qml"
+ "Main.qml"
+ RESOURCES
+ "images/Albert_Einstein.png"
+ "images/Albert_Einstein@2x.png"
+ "images/Albert_Einstein@3x.png"
+ "images/Albert_Einstein@4x.png"
+ "images/Ernest_Hemingway.png"
+ "images/Ernest_Hemingway@2x.png"
+ "images/Ernest_Hemingway@3x.png"
+ "images/Ernest_Hemingway@4x.png"
+ "images/Hans_Gude.png"
+ "images/Hans_Gude@2x.png"
+ "images/Hans_Gude@3x.png"
+ "images/Hans_Gude@4x.png"
+)
+
+qt6_add_resources(chattutorial-chapter4 "conf"
+ PREFIX
+ "/"
+ FILES
+ "qtquickcontrols2.conf"
+)
+
+install(TARGETS chattutorial-chapter4
+ 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
new file mode 100644
index 0000000000..2ed2243289
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/ContactPage.qml
@@ -0,0 +1,51 @@
+// 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 chattutorial
+
+Page {
+ id: root
+
+ header: ToolBar {
+ Label {
+ text: qsTr("Contacts")
+ font.pixelSize: 20
+ anchors.centerIn: parent
+ }
+ }
+
+ ListView {
+ id: listView
+ anchors.fill: parent
+ topMargin: 48
+ leftMargin: 48
+ bottomMargin: 48
+ rightMargin: 48
+ 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/" + contactDelegate.model.display.replace(" ", "_") + ".png"
+ }
+ }
+ }
+}
+
diff --git a/examples/quickcontrols/chattutorial/chapter4/ConversationPage.qml b/examples/quickcontrols/chattutorial/chapter4/ConversationPage.qml
new file mode 100644
index 0000000000..87ed487c66
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/ConversationPage.qml
@@ -0,0 +1,128 @@
+// 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 chattutorial
+
+Page {
+ id: root
+
+ property string inConversationWith
+
+ header: ToolBar {
+ ToolButton {
+ text: qsTr("Back")
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ anchors.verticalCenter: parent.verticalCenter
+ onClicked: root.StackView.view.pop()
+ }
+
+ Label {
+ id: pageTitle
+ text: root.inConversationWith
+ font.pixelSize: 20
+ anchors.centerIn: parent
+ }
+ }
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ ListView {
+ id: listView
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.margins: pane.leftPadding + messageField.leftPadding
+ displayMarginBeginning: 40
+ displayMarginEnd: 40
+ verticalLayoutDirection: ListView.BottomToTop
+ spacing: 12
+ model: SqlConversationModel {
+ recipient: root.inConversationWith
+ }
+ delegate: Column {
+ id: conversationDelegate
+ anchors.right: sentByMe ? listView.contentItem.right : undefined
+ spacing: 6
+
+ 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: conversationDelegate.sentByMe ? parent.right : undefined
+
+ Image {
+ id: avatar
+ source: !conversationDelegate.sentByMe
+ ? "images/" + conversationDelegate.author.replace(" ", "_") + ".png" : ""
+ }
+
+ Rectangle {
+ width: Math.min(messageText.implicitWidth + 24,
+ listView.width - (!conversationDelegate.sentByMe ? avatar.width + messageRow.spacing : 0))
+ height: messageText.implicitHeight + 24
+ color: conversationDelegate.sentByMe ? "lightgrey" : "steelblue"
+
+ Label {
+ id: messageText
+ text: conversationDelegate.message
+ color: conversationDelegate.sentByMe ? "black" : "white"
+ anchors.fill: parent
+ anchors.margins: 12
+ wrapMode: Label.Wrap
+ }
+ }
+ }
+
+ Label {
+ id: timestampText
+ text: Qt.formatDateTime(conversationDelegate.timestamp, "d MMM hh:mm")
+ color: "lightgrey"
+ anchors.right: conversationDelegate.sentByMe ? parent.right : undefined
+ }
+ }
+
+ ScrollBar.vertical: ScrollBar {}
+ }
+
+ Pane {
+ id: pane
+ Layout.fillWidth: true
+ Layout.fillHeight: false
+
+ RowLayout {
+ width: parent.width
+
+ TextArea {
+ id: messageField
+ Layout.fillWidth: true
+ placeholderText: qsTr("Compose message")
+ wrapMode: TextArea.Wrap
+ }
+
+ Button {
+ id: sendButton
+ text: qsTr("Send")
+ enabled: messageField.length > 0
+ Layout.fillWidth: false
+ onClicked: {
+ 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
new file mode 100644
index 0000000000..4f40fd726b
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/chapter4.pro
@@ -0,0 +1,39 @@
+TEMPLATE = app
+
+QT += qml quick sql
+CONFIG += c++11 qmltypes
+
+QML_IMPORT_PATH = $$pwd/.
+QML_IMPORT_NAME = chattutorial
+QML_IMPORT_MAJOR_VERSION = 1
+
+HEADERS += sqlcontactmodel.h \
+ sqlconversationmodel.h
+
+SOURCES += main.cpp \
+ sqlcontactmodel.cpp \
+ sqlconversationmodel.cpp
+
+resources.files = \
+ ContactPage.qml \
+ ConversationPage.qml \
+ images/Albert_Einstein.png \
+ images/Albert_Einstein@2x.png \
+ images/Albert_Einstein@3x.png \
+ images/Albert_Einstein@4x.png \
+ images/Ernest_Hemingway.png \
+ images/Ernest_Hemingway@2x.png \
+ images/Ernest_Hemingway@3x.png \
+ images/Ernest_Hemingway@4x.png \
+ images/Hans_Gude.png \
+ images/Hans_Gude@2x.png \
+ images/Hans_Gude@3x.png \
+ images/Hans_Gude@4x.png \
+ Main.qml \
+ qmldir
+resources.prefix = qt/qml/chattutorial/
+RESOURCES += resources \
+ qtquickcontrols2.conf
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/chattutorial/chapter4
+INSTALLS += target
diff --git a/examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein.png b/examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein.png
new file mode 100644
index 0000000000..7c44b90b8d
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein@2x.png b/examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein@2x.png
new file mode 100644
index 0000000000..6ce9c39b6c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein@2x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein@3x.png b/examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein@3x.png
new file mode 100644
index 0000000000..aab6a6a162
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein@3x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein@4x.png b/examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein@4x.png
new file mode 100644
index 0000000000..3611284df4
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/images/Albert_Einstein@4x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway.png b/examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway.png
new file mode 100644
index 0000000000..3ac8992fd9
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway@2x.png b/examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway@2x.png
new file mode 100644
index 0000000000..122d9f1e53
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway@2x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway@3x.png b/examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway@3x.png
new file mode 100644
index 0000000000..2fe9c2cc1c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway@3x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway@4x.png b/examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway@4x.png
new file mode 100644
index 0000000000..96fb6788b5
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/images/Ernest_Hemingway@4x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude.png b/examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude.png
new file mode 100644
index 0000000000..907e38bc61
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude@2x.png b/examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude@2x.png
new file mode 100644
index 0000000000..6837796a83
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude@2x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude@3x.png b/examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude@3x.png
new file mode 100644
index 0000000000..29af422ad3
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude@3x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude@4x.png b/examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude@4x.png
new file mode 100644
index 0000000000..bc35eeaa79
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/images/Hans_Gude@4x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter4/images/images.qrc b/examples/quickcontrols/chattutorial/chapter4/images/images.qrc
new file mode 100644
index 0000000000..9eda6aa29c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/images/images.qrc
@@ -0,0 +1,16 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Albert_Einstein.png</file>
+ <file>Albert_Einstein@2x.png</file>
+ <file>Albert_Einstein@3x.png</file>
+ <file>Albert_Einstein@4x.png</file>
+ <file>Ernest_Hemingway.png</file>
+ <file>Ernest_Hemingway@2x.png</file>
+ <file>Ernest_Hemingway@3x.png</file>
+ <file>Ernest_Hemingway@4x.png</file>
+ <file>Hans_Gude.png</file>
+ <file>Hans_Gude@2x.png</file>
+ <file>Hans_Gude@3x.png</file>
+ <file>Hans_Gude@4x.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/quickcontrols/chattutorial/chapter4/main.cpp b/examples/quickcontrols/chattutorial/chapter4/main.cpp
new file mode 100644
index 0000000000..bcb6c1e923
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/main.cpp
@@ -0,0 +1,46 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtCore>
+#include <QGuiApplication>
+#include <QSqlDatabase>
+#include <QSqlError>
+#include <QtQml>
+
+static void connectToDatabase()
+{
+ QSqlDatabase database = QSqlDatabase::database();
+ if (!database.isValid()) {
+ database = QSqlDatabase::addDatabase("QSQLITE");
+ if (!database.isValid())
+ qFatal("Cannot add database: %s", qPrintable(database.lastError().text()));
+ }
+
+ const QDir writeDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
+ if (!writeDir.mkpath("."))
+ qFatal("Failed to create writable directory at %s", qPrintable(writeDir.absolutePath()));
+
+ // Ensure that we have a writable location on all devices.
+ const QString fileName = writeDir.absolutePath() + "/chat-database.sqlite3";
+ // When using the SQLite driver, open() will create the SQLite database if it doesn't exist.
+ database.setDatabaseName(fileName);
+ if (!database.open()) {
+ qFatal("Cannot open database: %s", qPrintable(database.lastError().text()));
+ QFile::remove(fileName);
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ connectToDatabase();
+
+ QQmlApplicationEngine engine;
+ engine.loadFromModule("chattutorial", "Main");
+ if (engine.rootObjects().isEmpty())
+ return -1;
+
+ return app.exec();
+}
+
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/qtquickcontrols2.conf b/examples/quickcontrols/chattutorial/chapter4/qtquickcontrols2.conf
new file mode 100644
index 0000000000..db9486764e
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/qtquickcontrols2.conf
@@ -0,0 +1,2 @@
+[Controls]
+Style=Basic
diff --git a/examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.cpp b/examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.cpp
new file mode 100644
index 0000000000..189924deec
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.cpp
@@ -0,0 +1,43 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "sqlcontactmodel.h"
+
+#include <QDebug>
+#include <QSqlError>
+#include <QSqlQuery>
+
+static void createTable()
+{
+ if (QSqlDatabase::database().tables().contains(QStringLiteral("Contacts"))) {
+ // The table already exists; we don't need to do anything.
+ return;
+ }
+
+ QSqlQuery query;
+ if (!query.exec(
+ "CREATE TABLE IF NOT EXISTS 'Contacts' ("
+ " 'name' TEXT NOT NULL,"
+ " PRIMARY KEY(name)"
+ ")")) {
+ qFatal("Failed to query database: %s", qPrintable(query.lastError().text()));
+ }
+
+ query.exec("INSERT INTO Contacts VALUES('Albert Einstein')");
+ query.exec("INSERT INTO Contacts VALUES('Ernest Hemingway')");
+ query.exec("INSERT INTO Contacts VALUES('Hans Gude')");
+}
+
+SqlContactModel::SqlContactModel(QObject *parent) :
+ QSqlQueryModel(parent)
+{
+ createTable();
+
+ QSqlQuery query;
+ if (!query.exec("SELECT * FROM Contacts"))
+ qFatal("Contacts SELECT query failed: %s", qPrintable(query.lastError().text()));
+
+ 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
new file mode 100644
index 0000000000..c7f9a154eb
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/sqlcontactmodel.h
@@ -0,0 +1,19 @@
+// 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);
+};
+
+#endif // SQLCONTACTMODEL_H
diff --git a/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.cpp b/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.cpp
new file mode 100644
index 0000000000..5be01de52c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.cpp
@@ -0,0 +1,107 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "sqlconversationmodel.h"
+
+#include <QDateTime>
+#include <QDebug>
+#include <QSqlError>
+#include <QSqlRecord>
+#include <QSqlQuery>
+
+static const char *conversationsTableName = "Conversations";
+
+static void createTable()
+{
+ if (QSqlDatabase::database().tables().contains(conversationsTableName)) {
+ // The table already exists; we don't need to do anything.
+ return;
+ }
+
+ QSqlQuery query;
+ if (!query.exec(
+ "CREATE TABLE IF NOT EXISTS 'Conversations' ("
+ "'author' TEXT NOT NULL,"
+ "'recipient' TEXT NOT NULL,"
+ "'timestamp' TEXT NOT NULL,"
+ "'message' TEXT NOT NULL,"
+ "FOREIGN KEY('author') REFERENCES Contacts ( name ),"
+ "FOREIGN KEY('recipient') REFERENCES Contacts ( name )"
+ ")")) {
+ qFatal("Failed to query database: %s", qPrintable(query.lastError().text()));
+ }
+
+ query.exec("INSERT INTO Conversations VALUES('Me', 'Ernest Hemingway', '2016-01-07T14:36:06', 'Hello!')");
+ query.exec("INSERT INTO Conversations VALUES('Ernest Hemingway', 'Me', '2016-01-07T14:36:16', 'Good afternoon.')");
+ query.exec("INSERT INTO Conversations VALUES('Me', 'Albert Einstein', '2016-01-01T11:24:53', 'Hi!')");
+ query.exec("INSERT INTO Conversations VALUES('Albert Einstein', 'Me', '2016-01-07T14:36:16', 'Good morning.')");
+ query.exec("INSERT INTO Conversations VALUES('Hans Gude', 'Me', '2015-11-20T06:30:02', 'God morgen. Har du fått mitt maleri?')");
+ query.exec("INSERT INTO Conversations VALUES('Me', 'Hans Gude', '2015-11-20T08:21:03', 'God morgen, Hans. Ja, det er veldig fint. Tusen takk! "
+ "Hvor mange timer har du brukt på den?')");
+}
+
+SqlConversationModel::SqlConversationModel(QObject *parent) :
+ QSqlTableModel(parent)
+{
+ createTable();
+ setTable(conversationsTableName);
+ setSort(2, Qt::DescendingOrder);
+ // Ensures that the model is sorted correctly after submitting a new row.
+ setEditStrategy(QSqlTableModel::OnManualSubmit);
+}
+
+QString SqlConversationModel::recipient() const
+{
+ return m_recipient;
+}
+
+void SqlConversationModel::setRecipient(const QString &recipient)
+{
+ if (recipient == m_recipient)
+ return;
+
+ m_recipient = recipient;
+
+ const QString filterString = QString::fromLatin1(
+ "(recipient = '%1' AND author = 'Me') OR (recipient = 'Me' AND author='%1')").arg(m_recipient);
+ setFilter(filterString);
+ select();
+
+ emit recipientChanged();
+}
+
+QVariant SqlConversationModel::data(const QModelIndex &index, int role) const
+{
+ if (role < Qt::UserRole)
+ return QSqlTableModel::data(index, role);
+
+ const QSqlRecord sqlRecord = record(index.row());
+ return sqlRecord.value(role - Qt::UserRole);
+}
+
+QHash<int, QByteArray> SqlConversationModel::roleNames() const
+{
+ QHash<int, QByteArray> names;
+ names[Qt::UserRole] = "author";
+ names[Qt::UserRole + 1] = "recipient";
+ names[Qt::UserRole + 2] = "timestamp";
+ names[Qt::UserRole + 3] = "message";
+ return names;
+}
+
+void SqlConversationModel::sendMessage(const QString &recipient, const QString &message)
+{
+ const QString timestamp = QDateTime::currentDateTime().toString(Qt::ISODate);
+
+ QSqlRecord newRecord = record();
+ newRecord.setValue("author", "Me");
+ newRecord.setValue("recipient", recipient);
+ newRecord.setValue("timestamp", timestamp);
+ newRecord.setValue("message", message);
+ if (!insertRecord(rowCount(), newRecord)) {
+ qWarning() << "Failed to send message:" << lastError().text();
+ return;
+ }
+
+ submitAll();
+}
diff --git a/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.h b/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.h
new file mode 100644
index 0000000000..b4917c0eff
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter4/sqlconversationmodel.h
@@ -0,0 +1,34 @@
+// 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:
+ SqlConversationModel(QObject *parent = nullptr);
+
+ QString recipient() const;
+ void setRecipient(const QString &recipient);
+
+ QVariant data(const QModelIndex &index, int role) const override;
+ QHash<int, QByteArray> roleNames() const override;
+
+ Q_INVOKABLE void sendMessage(const QString &recipient, const QString &message);
+
+signals:
+ void recipientChanged();
+
+private:
+ QString m_recipient;
+};
+
+#endif // SQLCONVERSATIONMODEL_H
diff --git a/examples/quickcontrols/chattutorial/chapter5/+Material/ChatToolBar.qml b/examples/quickcontrols/chattutorial/chapter5/+Material/ChatToolBar.qml
new file mode 100644
index 0000000000..1b46cfec4e
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/+Material/ChatToolBar.qml
@@ -0,0 +1,9 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+ToolBar {
+ Material.theme: Material.Dark
+}
diff --git a/examples/quickcontrols/chattutorial/chapter5/CMakeLists.txt b/examples/quickcontrols/chattutorial/chapter5/CMakeLists.txt
new file mode 100644
index 0000000000..fa20c96d2d
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/CMakeLists.txt
@@ -0,0 +1,69 @@
+# 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)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Quick Sql)
+
+qt_add_executable(chattutorial-chapter5 WIN32 MACOSX_BUNDLE
+ main.cpp
+ sqlcontactmodel.cpp sqlcontactmodel.h
+ sqlconversationmodel.cpp sqlconversationmodel.h
+)
+
+target_link_libraries(chattutorial-chapter5 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Quick
+ Qt6::Sql
+)
+
+qt_policy(SET QTP0001 NEW)
+qt_add_qml_module(chattutorial-chapter5
+ URI chattutorial
+ QML_FILES
+ "+Material/ChatToolBar.qml"
+ "ChatToolBar.qml"
+ "ContactPage.qml"
+ "ConversationPage.qml"
+ "Main.qml"
+ RESOURCES
+ "images/Albert_Einstein.png"
+ "images/Albert_Einstein@2x.png"
+ "images/Albert_Einstein@3x.png"
+ "images/Albert_Einstein@4x.png"
+ "images/Ernest_Hemingway.png"
+ "images/Ernest_Hemingway@2x.png"
+ "images/Ernest_Hemingway@3x.png"
+ "images/Ernest_Hemingway@4x.png"
+ "images/Hans_Gude.png"
+ "images/Hans_Gude@2x.png"
+ "images/Hans_Gude@3x.png"
+ "images/Hans_Gude@4x.png"
+)
+
+qt6_add_resources(chattutorial-chapter5 "conf"
+ PREFIX
+ "/"
+ FILES
+ "qtquickcontrols2.conf"
+)
+
+install(TARGETS chattutorial-chapter5
+ 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
new file mode 100644
index 0000000000..af3a7a3f8c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/ChatToolBar.qml
@@ -0,0 +1,7 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick.Controls
+
+ToolBar {
+}
diff --git a/examples/quickcontrols/chattutorial/chapter5/ContactPage.qml b/examples/quickcontrols/chattutorial/chapter5/ContactPage.qml
new file mode 100644
index 0000000000..d7254a52b3
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/ContactPage.qml
@@ -0,0 +1,51 @@
+// 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 chattutorial
+
+Page {
+ id: root
+
+ header: ChatToolBar {
+ Label {
+ text: qsTr("Contacts")
+ font.pixelSize: 20
+ anchors.centerIn: parent
+ }
+ }
+
+ ListView {
+ id: listView
+ anchors.fill: parent
+ topMargin: 48
+ leftMargin: 48
+ bottomMargin: 48
+ rightMargin: 48
+ 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/" + contactDelegate.model.display.replace(" ", "_") + ".png"
+ }
+ }
+ }
+}
+
diff --git a/examples/quickcontrols/chattutorial/chapter5/ConversationPage.qml b/examples/quickcontrols/chattutorial/chapter5/ConversationPage.qml
new file mode 100644
index 0000000000..db45deac5b
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/ConversationPage.qml
@@ -0,0 +1,127 @@
+// 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 chattutorial
+
+Page {
+ id: root
+
+ property string inConversationWith
+
+ header: ChatToolBar {
+ ToolButton {
+ text: qsTr("Back")
+ anchors.left: parent.left
+ anchors.leftMargin: 10
+ anchors.verticalCenter: parent.verticalCenter
+ onClicked: root.StackView.view.pop()
+ }
+
+ Label {
+ id: pageTitle
+ text: root.inConversationWith
+ font.pixelSize: 20
+ anchors.centerIn: parent
+ }
+ }
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ ListView {
+ id: listView
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.margins: pane.leftPadding + messageField.leftPadding
+ displayMarginBeginning: 40
+ displayMarginEnd: 40
+ verticalLayoutDirection: ListView.BottomToTop
+ spacing: 12
+ model: SqlConversationModel {
+ recipient: root.inConversationWith
+ }
+ delegate: Column {
+ id: conversationDelegate
+ anchors.right: sentByMe ? listView.contentItem.right : undefined
+ spacing: 6
+
+ 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: conversationDelegate.sentByMe ? parent.right : undefined
+
+ Image {
+ id: avatar
+ 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: conversationDelegate.sentByMe ? "lightgrey" : "steelblue"
+
+ Label {
+ id: messageText
+ text: conversationDelegate.message
+ color: conversationDelegate.sentByMe ? "black" : "white"
+ anchors.fill: parent
+ anchors.margins: 12
+ wrapMode: Label.Wrap
+ }
+ }
+ }
+
+ Label {
+ id: timestampText
+ text: Qt.formatDateTime(conversationDelegate.timestamp, "d MMM hh:mm")
+ color: "lightgrey"
+ anchors.right: conversationDelegate.sentByMe ? parent.right : undefined
+ }
+ }
+
+ ScrollBar.vertical: ScrollBar {}
+ }
+
+ Pane {
+ id: pane
+ Layout.fillWidth: true
+ Layout.fillHeight: false
+
+ RowLayout {
+ width: parent.width
+
+ TextArea {
+ id: messageField
+ Layout.fillWidth: true
+ placeholderText: qsTr("Compose message")
+ wrapMode: TextArea.Wrap
+ }
+
+ Button {
+ id: sendButton
+ text: qsTr("Send")
+ enabled: messageField.length > 0
+ Layout.fillWidth: false
+ onClicked: {
+ 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
new file mode 100644
index 0000000000..aba1e33cdb
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/chapter5.pro
@@ -0,0 +1,41 @@
+TEMPLATE = app
+
+QT += qml quick sql
+CONFIG += c++11 qmltypes
+
+QML_IMPORT_PATH = $$pwd/.
+QML_IMPORT_NAME = chattutorial
+QML_IMPORT_MAJOR_VERSION = 1
+
+HEADERS += sqlcontactmodel.h \
+ sqlconversationmodel.h
+
+SOURCES += main.cpp \
+ sqlcontactmodel.cpp \
+ sqlconversationmodel.cpp
+
+resources.files = \
+ +Material/ChatToolBar.qml \
+ ChatToolBar.qml \
+ ContactPage.qml \
+ ConversationPage.qml \
+ images/Albert_Einstein.png \
+ images/Albert_Einstein@2x.png \
+ images/Albert_Einstein@3x.png \
+ images/Albert_Einstein@4x.png \
+ images/Ernest_Hemingway.png \
+ images/Ernest_Hemingway@2x.png \
+ images/Ernest_Hemingway@3x.png \
+ images/Ernest_Hemingway@4x.png \
+ images/Hans_Gude.png \
+ images/Hans_Gude@2x.png \
+ images/Hans_Gude@3x.png \
+ images/Hans_Gude@4x.png \
+ Main.qml \
+ qmldir
+resources.prefix = qt/qml/chattutorial/
+RESOURCES += resources \
+ qtquickcontrols2.conf
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/chattutorial/chapter5
+INSTALLS += target
diff --git a/examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein.png b/examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein.png
new file mode 100644
index 0000000000..7c44b90b8d
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein@2x.png b/examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein@2x.png
new file mode 100644
index 0000000000..6ce9c39b6c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein@2x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein@3x.png b/examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein@3x.png
new file mode 100644
index 0000000000..aab6a6a162
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein@3x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein@4x.png b/examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein@4x.png
new file mode 100644
index 0000000000..3611284df4
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/images/Albert_Einstein@4x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway.png b/examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway.png
new file mode 100644
index 0000000000..3ac8992fd9
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway@2x.png b/examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway@2x.png
new file mode 100644
index 0000000000..122d9f1e53
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway@2x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway@3x.png b/examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway@3x.png
new file mode 100644
index 0000000000..2fe9c2cc1c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway@3x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway@4x.png b/examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway@4x.png
new file mode 100644
index 0000000000..96fb6788b5
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/images/Ernest_Hemingway@4x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude.png b/examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude.png
new file mode 100644
index 0000000000..907e38bc61
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude@2x.png b/examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude@2x.png
new file mode 100644
index 0000000000..6837796a83
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude@2x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude@3x.png b/examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude@3x.png
new file mode 100644
index 0000000000..29af422ad3
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude@3x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude@4x.png b/examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude@4x.png
new file mode 100644
index 0000000000..bc35eeaa79
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/images/Hans_Gude@4x.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/chapter5/images/images.qrc b/examples/quickcontrols/chattutorial/chapter5/images/images.qrc
new file mode 100644
index 0000000000..9eda6aa29c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/images/images.qrc
@@ -0,0 +1,16 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Albert_Einstein.png</file>
+ <file>Albert_Einstein@2x.png</file>
+ <file>Albert_Einstein@3x.png</file>
+ <file>Albert_Einstein@4x.png</file>
+ <file>Ernest_Hemingway.png</file>
+ <file>Ernest_Hemingway@2x.png</file>
+ <file>Ernest_Hemingway@3x.png</file>
+ <file>Ernest_Hemingway@4x.png</file>
+ <file>Hans_Gude.png</file>
+ <file>Hans_Gude@2x.png</file>
+ <file>Hans_Gude@3x.png</file>
+ <file>Hans_Gude@4x.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/quickcontrols/chattutorial/chapter5/main.cpp b/examples/quickcontrols/chattutorial/chapter5/main.cpp
new file mode 100644
index 0000000000..bcb6c1e923
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/main.cpp
@@ -0,0 +1,46 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtCore>
+#include <QGuiApplication>
+#include <QSqlDatabase>
+#include <QSqlError>
+#include <QtQml>
+
+static void connectToDatabase()
+{
+ QSqlDatabase database = QSqlDatabase::database();
+ if (!database.isValid()) {
+ database = QSqlDatabase::addDatabase("QSQLITE");
+ if (!database.isValid())
+ qFatal("Cannot add database: %s", qPrintable(database.lastError().text()));
+ }
+
+ const QDir writeDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
+ if (!writeDir.mkpath("."))
+ qFatal("Failed to create writable directory at %s", qPrintable(writeDir.absolutePath()));
+
+ // Ensure that we have a writable location on all devices.
+ const QString fileName = writeDir.absolutePath() + "/chat-database.sqlite3";
+ // When using the SQLite driver, open() will create the SQLite database if it doesn't exist.
+ database.setDatabaseName(fileName);
+ if (!database.open()) {
+ qFatal("Cannot open database: %s", qPrintable(database.lastError().text()));
+ QFile::remove(fileName);
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ connectToDatabase();
+
+ QQmlApplicationEngine engine;
+ engine.loadFromModule("chattutorial", "Main");
+ if (engine.rootObjects().isEmpty())
+ return -1;
+
+ return app.exec();
+}
+
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/qtquickcontrols2.conf b/examples/quickcontrols/chattutorial/chapter5/qtquickcontrols2.conf
new file mode 100644
index 0000000000..c8a8eeeb05
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/qtquickcontrols2.conf
@@ -0,0 +1,10 @@
+[Controls]
+Style=Basic
+
+[Material]
+Primary=Indigo
+Accent=Indigo
+Theme=Dark
+
+[Universal]
+Theme=Dark
diff --git a/examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.cpp b/examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.cpp
new file mode 100644
index 0000000000..189924deec
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.cpp
@@ -0,0 +1,43 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "sqlcontactmodel.h"
+
+#include <QDebug>
+#include <QSqlError>
+#include <QSqlQuery>
+
+static void createTable()
+{
+ if (QSqlDatabase::database().tables().contains(QStringLiteral("Contacts"))) {
+ // The table already exists; we don't need to do anything.
+ return;
+ }
+
+ QSqlQuery query;
+ if (!query.exec(
+ "CREATE TABLE IF NOT EXISTS 'Contacts' ("
+ " 'name' TEXT NOT NULL,"
+ " PRIMARY KEY(name)"
+ ")")) {
+ qFatal("Failed to query database: %s", qPrintable(query.lastError().text()));
+ }
+
+ query.exec("INSERT INTO Contacts VALUES('Albert Einstein')");
+ query.exec("INSERT INTO Contacts VALUES('Ernest Hemingway')");
+ query.exec("INSERT INTO Contacts VALUES('Hans Gude')");
+}
+
+SqlContactModel::SqlContactModel(QObject *parent) :
+ QSqlQueryModel(parent)
+{
+ createTable();
+
+ QSqlQuery query;
+ if (!query.exec("SELECT * FROM Contacts"))
+ qFatal("Contacts SELECT query failed: %s", qPrintable(query.lastError().text()));
+
+ 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
new file mode 100644
index 0000000000..c7f9a154eb
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/sqlcontactmodel.h
@@ -0,0 +1,19 @@
+// 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);
+};
+
+#endif // SQLCONTACTMODEL_H
diff --git a/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.cpp b/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.cpp
new file mode 100644
index 0000000000..5be01de52c
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.cpp
@@ -0,0 +1,107 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "sqlconversationmodel.h"
+
+#include <QDateTime>
+#include <QDebug>
+#include <QSqlError>
+#include <QSqlRecord>
+#include <QSqlQuery>
+
+static const char *conversationsTableName = "Conversations";
+
+static void createTable()
+{
+ if (QSqlDatabase::database().tables().contains(conversationsTableName)) {
+ // The table already exists; we don't need to do anything.
+ return;
+ }
+
+ QSqlQuery query;
+ if (!query.exec(
+ "CREATE TABLE IF NOT EXISTS 'Conversations' ("
+ "'author' TEXT NOT NULL,"
+ "'recipient' TEXT NOT NULL,"
+ "'timestamp' TEXT NOT NULL,"
+ "'message' TEXT NOT NULL,"
+ "FOREIGN KEY('author') REFERENCES Contacts ( name ),"
+ "FOREIGN KEY('recipient') REFERENCES Contacts ( name )"
+ ")")) {
+ qFatal("Failed to query database: %s", qPrintable(query.lastError().text()));
+ }
+
+ query.exec("INSERT INTO Conversations VALUES('Me', 'Ernest Hemingway', '2016-01-07T14:36:06', 'Hello!')");
+ query.exec("INSERT INTO Conversations VALUES('Ernest Hemingway', 'Me', '2016-01-07T14:36:16', 'Good afternoon.')");
+ query.exec("INSERT INTO Conversations VALUES('Me', 'Albert Einstein', '2016-01-01T11:24:53', 'Hi!')");
+ query.exec("INSERT INTO Conversations VALUES('Albert Einstein', 'Me', '2016-01-07T14:36:16', 'Good morning.')");
+ query.exec("INSERT INTO Conversations VALUES('Hans Gude', 'Me', '2015-11-20T06:30:02', 'God morgen. Har du fått mitt maleri?')");
+ query.exec("INSERT INTO Conversations VALUES('Me', 'Hans Gude', '2015-11-20T08:21:03', 'God morgen, Hans. Ja, det er veldig fint. Tusen takk! "
+ "Hvor mange timer har du brukt på den?')");
+}
+
+SqlConversationModel::SqlConversationModel(QObject *parent) :
+ QSqlTableModel(parent)
+{
+ createTable();
+ setTable(conversationsTableName);
+ setSort(2, Qt::DescendingOrder);
+ // Ensures that the model is sorted correctly after submitting a new row.
+ setEditStrategy(QSqlTableModel::OnManualSubmit);
+}
+
+QString SqlConversationModel::recipient() const
+{
+ return m_recipient;
+}
+
+void SqlConversationModel::setRecipient(const QString &recipient)
+{
+ if (recipient == m_recipient)
+ return;
+
+ m_recipient = recipient;
+
+ const QString filterString = QString::fromLatin1(
+ "(recipient = '%1' AND author = 'Me') OR (recipient = 'Me' AND author='%1')").arg(m_recipient);
+ setFilter(filterString);
+ select();
+
+ emit recipientChanged();
+}
+
+QVariant SqlConversationModel::data(const QModelIndex &index, int role) const
+{
+ if (role < Qt::UserRole)
+ return QSqlTableModel::data(index, role);
+
+ const QSqlRecord sqlRecord = record(index.row());
+ return sqlRecord.value(role - Qt::UserRole);
+}
+
+QHash<int, QByteArray> SqlConversationModel::roleNames() const
+{
+ QHash<int, QByteArray> names;
+ names[Qt::UserRole] = "author";
+ names[Qt::UserRole + 1] = "recipient";
+ names[Qt::UserRole + 2] = "timestamp";
+ names[Qt::UserRole + 3] = "message";
+ return names;
+}
+
+void SqlConversationModel::sendMessage(const QString &recipient, const QString &message)
+{
+ const QString timestamp = QDateTime::currentDateTime().toString(Qt::ISODate);
+
+ QSqlRecord newRecord = record();
+ newRecord.setValue("author", "Me");
+ newRecord.setValue("recipient", recipient);
+ newRecord.setValue("timestamp", timestamp);
+ newRecord.setValue("message", message);
+ if (!insertRecord(rowCount(), newRecord)) {
+ qWarning() << "Failed to send message:" << lastError().text();
+ return;
+ }
+
+ submitAll();
+}
diff --git a/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.h b/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.h
new file mode 100644
index 0000000000..b4917c0eff
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chapter5/sqlconversationmodel.h
@@ -0,0 +1,34 @@
+// 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:
+ SqlConversationModel(QObject *parent = nullptr);
+
+ QString recipient() const;
+ void setRecipient(const QString &recipient);
+
+ QVariant data(const QModelIndex &index, int role) const override;
+ QHash<int, QByteArray> roleNames() const override;
+
+ Q_INVOKABLE void sendMessage(const QString &recipient, const QString &message);
+
+signals:
+ void recipientChanged();
+
+private:
+ QString m_recipient;
+};
+
+#endif // SQLCONVERSATIONMODEL_H
diff --git a/examples/quickcontrols/chattutorial/chattutorial.pro b/examples/quickcontrols/chattutorial/chattutorial.pro
new file mode 100644
index 0000000000..1c70b2653e
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/chattutorial.pro
@@ -0,0 +1,8 @@
+TEMPLATE = subdirs
+
+SUBDIRS += \
+ chapter1 \
+ chapter2 \
+ chapter3 \
+ chapter4 \
+ chapter5
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter1.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter1.png
new file mode 100644
index 0000000000..aa3c4bb5be
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter1.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter2-listview-header.gif b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter2-listview-header.gif
new file mode 100644
index 0000000000..17096519b0
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter2-listview-header.gif
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter2.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter2.png
new file mode 100644
index 0000000000..af25cff94e
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter2.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter3-listview-header.gif b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter3-listview-header.gif
new file mode 100644
index 0000000000..07eb93b191
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter3-listview-header.gif
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter3-view-margins.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter3-view-margins.png
new file mode 100644
index 0000000000..1c8ffbf46e
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter3-view-margins.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter3.gif b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter3.gif
new file mode 100644
index 0000000000..1763b1f3a5
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter3.gif
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter4-long-message.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter4-long-message.png
new file mode 100644
index 0000000000..b2f4c2adf8
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter4-long-message.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter4-message-timestamp.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter4-message-timestamp.png
new file mode 100644
index 0000000000..ea75b1dce5
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter4-message-timestamp.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter4.gif b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter4.gif
new file mode 100644
index 0000000000..dd47c4cbf8
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter4.gif
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-material-dark.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-material-dark.png
new file mode 100644
index 0000000000..8b8f05faa1
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-material-dark.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-material-test.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-material-test.png
new file mode 100644
index 0000000000..29e149df9f
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-material-test.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-material.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-material.png
new file mode 100644
index 0000000000..23d744e7be
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-material.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-universal-dark.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-universal-dark.png
new file mode 100644
index 0000000000..2aef535c39
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-universal-dark.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-universal.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-universal.png
new file mode 100644
index 0000000000..c18a341b42
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-contacts-universal.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-material-dark.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-material-dark.png
new file mode 100644
index 0000000000..f15c7d7d76
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-material-dark.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-material-test.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-material-test.png
new file mode 100644
index 0000000000..b33fc74ea6
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-material-test.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-material.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-material.png
new file mode 100644
index 0000000000..31833164d8
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-material.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-universal-dark.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-universal-dark.png
new file mode 100644
index 0000000000..b4bd7e9f4f
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-universal-dark.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-universal.png b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-universal.png
new file mode 100644
index 0000000000..09ed5ceb94
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/images/qtquickcontrols-chattutorial-chapter5-conversations-universal.png
Binary files differ
diff --git a/examples/quickcontrols/chattutorial/doc/src/qtquickcontrols-chattutorial.qdoc b/examples/quickcontrols/chattutorial/doc/src/qtquickcontrols-chattutorial.qdoc
new file mode 100644
index 0000000000..a42ef81575
--- /dev/null
+++ b/examples/quickcontrols/chattutorial/doc/src/qtquickcontrols-chattutorial.qdoc
@@ -0,0 +1,821 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+\page qtquickcontrols-chattutorial-example.html
+\keyword Qt Quick Controls - Chat Tutorial
+\title Qt Quick Controls - Chat Tutorial
+\keyword Qt Quick Controls 2 - Chat Tutorial
+\brief Tutorial about writing a basic chat client using Qt Quick Controls.
+\ingroup qtquickcontrols-examples
+
+This tutorial shows how to write a basic chat application using Qt Quick
+Controls. It will also explain how to integrate an SQL database into a Qt
+application.
+
+\section1 Chapter 1: Setting Up
+
+When setting up a new project, it's easiest to use
+\l {Qt Creator Manual}{Qt Creator}. For this project, we chose the
+\l {Qt Creator: Creating Qt Quick Projects}{Qt Quick application} template, which creates a
+basic "Hello World" application with the following files:
+
+\list
+\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 qtquickcontrols2.conf - Tells the application which style it should use
+\endlist
+
+\section2 main.cpp
+
+The default code in \c main.cpp has two includes:
+
+\quotefromfile chattutorial/chapter1/main.cpp
+\skipto include
+\printline include
+\printline include
+
+The first gives us access to QGuiApplication. All Qt applications require
+an application object, but the precise type depends on what the application
+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, allowing us to
+load our QML.
+
+Within \c main(), we set up the application object and QML engine:
+
+\skipto main
+\printuntil }
+
+\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
+
+Let's modify the default QML code to suit our needs.
+
+\quotefromfile chattutorial/chapter1/Main.qml
+\skipto import
+\printuntil import QtQuick.Controls
+
+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.
+
+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:
+
+\skipto ApplicationWindow
+\printuntil visible: true
+\dots
+\skipto }
+\skipuntil }
+\skipuntil }
+\printuntil }
+
+ApplicationWindow is a \l Window with some added convenience for creating a
+\l {ApplicationWindow::}{header} and a \l {ApplicationWindow::}{footer}.
+It also provides the foundation for \l {Popup}{popups} and supports some
+basic styling, such as the background \l {Window::}{color}.
+
+There are three properties that are almost always set when using
+ApplicationWindow: \l {Window::}{width}, \l {Window::}{height}, and
+\l {Window::}{visible}.
+Once we've set these, we have a properly sized, empty window ready to be
+filled with content.
+
+\note The \c title property from the default code is removed.
+
+The first \e "screen" in our application will be a list of contacts. It would
+be nice to have some text at the top of each screen that describes its purpose.
+The header and footer properties of ApplicationWindow could work in
+this situation. They have some characteristics that make them ideal for
+items that should be displayed on every screen of an application:
+
+\list
+\li They are anchored to the top and bottom of the window, respectively.
+\li They fill the width of the window.
+\endlist
+
+However, when the contents of the header and footer varies depending on
+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
+\skipto Page
+\printuntil }
+\printuntil }
+
+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
+\l{Styling Qt Quick Controls}{styling} and \l {Control::}{font} inheritance.
+This means that a Label can look different depending on which style is in use,
+and can also propagate its pixel size to its children.
+
+We want some distance between the top of the application window and the text,
+so we set the \l {Text::padding}{padding} property. This allocates extra
+space on each side of the label (within its bounds). We can also explicitly set
+the \l {Text::}{topPadding} and \l {Text::}{bottomPadding} properties instead.
+
+We set the text of the label using the \c qsTr() function, which ensures that
+the text can be translated by \l {Writing Source Code for Translation}{Qt's
+translation system}. It's a good practice to follow for text that is visible to
+the end users of your application.
+
+By default, text is vertically aligned to the top of its bounds, while the
+horizontal alignment depends on the natural direction of the text; for example,
+text that is read from left to right will be aligned to the left. If we
+used these defaults, our text would be at the top-left corner of the window.
+This is not desirable for a header, so we align the text to the center of its
+bounds, both horizontally and vertically.
+
+\section2 The Project File
+
+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.
+
+For an in-depth explanation of this file, see \l {Building a QML application}.
+
+Here is what our application currently looks like when run:
+
+\borderedimage qtquickcontrols-chattutorial-chapter1.png
+
+\section1 Chapter 2: Lists
+
+In this chapter, we'll explain how to create a list of interactive items using
+\l ListView and \l ItemDelegate.
+
+ListView comes from the Qt Quick module, and displays a list of items
+populated from a \l {Models and Views in Qt Quick}{model}. ItemDelegate comes from
+the Qt Quick Controls module, and provides a standard view item for use in views
+and controls such as ListView and \l ComboBox. For example, each ItemDelegate
+can display text, be checked on and off, and react to mouse clicks.
+
+Here is our ListView:
+
+\quotefromfile chattutorial/chapter2/Main.qml
+\dots 8
+\codeline
+\skipto ListView
+\printuntil }
+\printuntil }
+\printuntil }
+\codeline
+\dots 8
+
+\section2 Sizing and Positioning
+
+The first thing we do is set a size for the view. It should fill the available
+space on the page, so we use \l {Item::}{anchors.fill}. Note that
+Page ensures that its header and footer have enough of their own space
+reserved, so the view in this case will sit below the header, for example.
+
+Next, we set \l {Flickable::leftMargin}{margins} around the ListView to put
+some distance between it and the edges of the window. The margin properties
+reserve space within the bounds of the view, which means that the empty areas
+can still be \e "flicked" by the user.
+
+The items should be nicely spaced out within the view, so the
+\l {ListView::}{spacing} property is set to \c 20.
+
+\section2 Model
+
+In order to quickly populate the view with some items, we've used a JavaScript
+array as the model. One of the greatest strengths of QML is its ability to
+make prototyping an application extremely quick, and this is an example of
+that. It's also possible to simply assign a \l {Integers as Models}{number} to
+the model property to indicate how many items you need. For example, if you
+assign \c 10 to the \c model property, each item's display text will be a
+number from \c 0 to \c 9.
+
+However, once the application gets past the prototype stage, it quickly becomes
+necessary to use some real data. For this, it's best to use a proper C++ model
+by \l {QAbstractItemModel}{subclassing QAbstractItemModel}.
+
+\section2 Delegate
+
+On to the \l {ListView::}{delegate}. We assign the corresponding text from the
+model to the \l {AbstractButton::text}{text} property of ItemDelegate. The exact
+manner in which the data from the model is made available to each delegate
+depends on the type of model used. See \l {Models and Views in Qt Quick} for
+more information.
+
+In our application, the width of each item in the view should be the same
+as the width of the view. This ensures that the user has a lot of room with
+which to select a contact from the list, which is an important factor on
+devices with small touch screens, like mobile phones. However, the width of the
+view includes our \c 48 pixel margins, so we must account for that in our
+assignment to the width property.
+
+Next, we define an \l Image. This will display a picture of the user's contact.
+The image will be \c 40 pixels wide and \c 40 pixels high. We'll base the
+height of the delegate on the image's height, so that we don't have any empty
+vertical space.
+
+\borderedimage qtquickcontrols-chattutorial-chapter2.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
+\skipto import
+\printuntil }
+\printuntil }
+\printuntil }
+
+\section2 Navigating with StackView
+
+As its name suggests, StackView provides stack-based navigation. The last item
+to be \e "pushed" onto the stack is the first one to be removed, and the
+top-most item is always the one that is visible.
+
+In the same manner as we did with Page, we tell the StackView to fill the
+application window. The only thing left to do after that is to give it an item
+to display, via \l {StackView::}{initialItem}. StackView accepts
+\l {Item}{items}, \l {Component}{components} and \l [QML]{url}{URLs}.
+
+You'll notice that we moved the code for the contact list into
+\c ContactPage.qml. It's a good idea to do this as soon as you have a general
+idea of which screens your application will contain. Doing so not only makes
+your code easier to read, but ensures that items are only instantiated from
+a given component when completely necessary, reducing memory usage.
+
+\note Qt Creator provides several convenient \l {http://doc.qt.io/qtcreator/creator-editor-refactoring.html#refactoring-qml-code}{refactoring options for QML},
+one of which allows you to move a block of code into a separate file
+ (\c {Alt + Enter > Move Component into Separate File}).
+
+Another thing to consider when using ListView is whether to refer to it by
+\c id, or use the attached \l {ListView::view}{ListView.view}
+property. The best approach depends on a few different factors. Giving the
+view an id will result in shorter and more efficient binding expressions, as
+the attached property has a very small amount of overhead. However, if you plan
+on reusing the delegate in other views, it is better to use the attached
+properties to avoid tying the delegate to a particular view. For example, using
+the attached properties, the \c width assignment in our delegate becomes:
+
+\code
+width: ListView.view.width - ListView.view.leftMargin - ListView.view.rightMargin
+\endcode
+
+In chapter 2, we added a ListView below the header. If you run the application
+for that chapter, you'll see that the contents of the view can be scrolled over
+the top of the header:
+
+\borderedimage qtquickcontrols-chattutorial-chapter2-listview-header.gif
+
+This is not that nice, especially if the text in the
+delegates is long enough that it reaches the text in the header. What we
+ideally want to do is to have a solid block of color under the header text, but
+\e {above} the view. This ensures that the listview contents can't visually
+interfere with the header contents. Note that it's also possible to achieve
+this by setting the \l {Item::}{clip} property of the view to \c true, but
+doing so \l {Clipping}{can affect performance}.
+
+\l ToolBar is the right tool for this job. It is a container of both
+application-wide and context-sensitive actions and controls, such as navigation
+buttons and search fields. Best of all, it has a background color that, as
+usual, comes from the application style. Here it is in action:
+
+\quotefromfile chattutorial/chapter3/ContactPage.qml
+\skipto header
+\printuntil }
+\printuntil }
+
+\borderedimage qtquickcontrols-chattutorial-chapter3-listview-header.gif
+
+It has no layout of its own, so we center the label within it ourselves.
+
+The rest of the code is the same as it was in chapter 2, except that we've
+taken advantage of the \l {AbstractButton::}{clicked} signal to push the next
+page onto the stackview:
+
+\skipto onClicked
+\printline onClicked
+
+When pushing a \l Component or \l [QML] url onto StackView, it's often
+necessary to initialize the (eventually) instantiated item with some variables.
+StackView's \l {StackView::push}{push()} function accounts for this, by taking a JavaScript object
+as the second argument. We use this to provide the next page with a contact's
+name, which it then uses to display the relevant conversation. Note the
+\c {root.StackView.view.push} syntax; this is necessary because of how
+\l {A Note About Accessing Attached Properties and Signal Handlers}
+{attached properties} work.
+
+Let's step through \c ConversationPage.qml, beginning with the imports:
+
+\quotefromfile chattutorial/chapter3/ConversationPage.qml
+\skipto import
+\printline import
+\printline import
+\printline import
+
+These are the same as before, except for the addition of the \c QtQuick.Layouts
+import, which we'll cover shortly.
+
+\skipto Page
+\printuntil }
+\printuntil }
+\printuntil }
+\dots 4
+
+The root item of this component is another Page, which has a custom property
+called \c inConversationWith. For now, this property will simply determine what
+the label in the header displays. Later on, we'll use it in the SQL query that
+populates the list of messages in the conversation.
+
+To allow the user to go back to the Contact page, we add a \l ToolButton that
+calls \l {StackView::pop}{pop()} when clicked. A \l ToolButton is functionally
+similar to \l Button, but provides a look that is more suitable within a
+ToolBar.
+
+There are two ways of laying out items in QML: \l {Item Positioners}
+and \l {Qt Quick Layouts}. Item positioners (\l Row, \l Column, and so on) are
+useful for situations where the size of items is known or fixed, and all that
+is required is to neatly position them in a certain formation. The layouts in
+Qt Quick Layouts can both position and resize items, making them well suited
+for resizable user interfaces. Below, we use \l ColumnLayout to vertically
+lay out a ListView and a \l Pane:
+
+\skipto ColumnLayout
+\printto Layout.margins
+\codeline
+\dots 12
+\codeline
+\skipuntil ScrollBar
+\printline }
+\codeline
+\dots 8
+\codeline
+\printuntil Layout.fillWidth: true
+\dots 12
+\skipuntil }
+\skipuntil }
+\skipuntil }
+\skipuntil }
+\printline }
+
+Pane is basically a rectangle whose color comes from the application's style.
+It is similar to \l Frame, with the only difference being that it has no stroke
+around its border.
+
+Items that are direct children of a layout have various
+\l {Layout}{attached properties} available to them. We use
+\l {Layout::fillWidth}{Layout.fillWidth} and
+\l {Layout::fillHeight}{Layout.fillHeight} on the ListView to ensure
+that it takes as much space within the ColumnLayout as it can. The
+same is done for the Pane. As ColumnLayout is a vertical layout, there
+aren't any items to the left or right of each child, so this will result in
+each item consuming the entire width of the layout.
+
+On the other hand, the \l {Layout::fillHeight}{Layout.fillHeight} statement in
+the ListView will enable it to occupy the remaining space that is left after
+accommodating the Pane.
+
+Let's look at the listview in detail:
+
+\quotefromfile chattutorial/chapter3/ConversationPage.qml
+\skipto ListView
+\printuntil ScrollBar
+\printuntil }
+
+After filling the width and height of its parent, we also set some margins on
+the view. This gives us a nice alignment with the placeholder text in the
+"compose message" field:
+
+\borderedimage qtquickcontrols-chattutorial-chapter3-view-margins.png
+
+Next, we set \l {ListView::}{displayMarginBeginning} and \l
+{ListView::}{displayMarginEnd}. These properties ensure that the delegates
+outside the bounds of the view do not disappear while scrolling at the edges of
+the view. It's easiest to understand this by commenting out the properties and
+seeing what happens when scrolling the view.
+
+We then flip the vertical direction of the view, so that first items are at the
+bottom. The delegates are spaced out by 12 pixels, and a \e "dummy" model is
+assigned for testing purposes, until we implement the real model in chapter 4.
+
+Within the delegate, we declare a \l Row as the root item, as we want the
+avatar to be followed by the message contents, as shown in the image above.
+
+Messages sent by the user should be distinguished from those sent by a contact.
+For now, we set a dummy property \c sentByMe, which simply uses the index
+of the delegate to alternate between different authors. Using this property,
+we distinguish between different authors in three ways:
+
+\list
+\li Messages sent by the user are aligned to the right side of the screen
+by setting \c anchors.right to \c listView.contentItem.right.
+
+\li By setting the \c visible property of the avatar (which is simply a
+Rectangle for now) based on \c sentByMe, we only show it if the message was
+sent by a contact.
+
+\li We change the color of the rectangle depending on the author. Since we
+do not want to display dark text on a dark background, and vice versa, we also
+set the text color depending on who the author is. In chapter 5, we'll see how
+styling takes care of matters like this for us.
+\endlist
+
+At the bottom of the screen, we place a \l TextArea item to allow multi-line
+text input, and a button to send the message. We use Pane to cover the area
+under these two items, in the same way that we use ToolBar to prevent the
+contents of the listview from interfering with the page header:
+
+\skipto Pane
+\printuntil }
+\printuntil }
+\printuntil }
+\printuntil }
+
+The TextArea should fill the available width of the screen. We assign some
+placeholder text to provide a visual cue to the user as to where they should
+begin typing. The text within the input area is wrapped to ensure that it
+does not go outside of the screen.
+
+Finally, the button is only enabled when there is actually a message to send.
+
+\borderedimage qtquickcontrols-chattutorial-chapter3.gif
+
+
+\section1 Chapter 4: Models
+
+In chapter 4, we'll take you through the process of creating both read-only and
+read-write SQL models in C++ and exposing them to QML to populate views.
+
+\section2 QSqlQueryModel
+
+In order to keep the tutorial simple, we've chosen to make the list of user
+contacts non-editable. \l QSqlQueryModel is the logical choice for this
+purpose, as it provides a read-only data model for SQL result sets.
+
+Let's take a look at our \c SqlContactModel class that derives from
+QSqlQueryModel:
+
+\quotefromfile chattutorial/chapter4/sqlcontactmodel.h
+\skipto #include
+\printuntil };
+
+There's not much going on here, so let's move on to the \c .cpp file:
+
+\quotefromfile chattutorial/chapter4/sqlcontactmodel.cpp
+\skipto #include
+\printuntil }
+\printuntil }
+\printuntil }
+
+We include the header file of our class and those that we require from Qt. We
+then define a static function named \c createTable() that we'll use to create
+the SQL table (if it doesn't already exist), and then populate it with some
+dummy contacts.
+
+The call to \l {QSqlDatabase::database}{database()} might look a little bit
+confusing because we have not set up a specific database yet. If no connection
+name is passed to this function, it will return a \e {"default connection"},
+whose creation we will cover soon.
+
+\skipto SqlContactModel
+\printuntil }
+
+In the constructor, we call \c createTable(). We then construct a query that
+will be used to populate the model. In this case, we are simply interested in
+all rows of the \c Contacts table.
+
+\section2 QSqlTableModel
+
+\c SqlConversationModel is more complex:
+
+\quotefromfile chattutorial/chapter4/sqlconversationmodel.h
+\skipto #include
+\printuntil };
+
+We use both the \c Q_PROPERTY and \c Q_INVOKABLE macros, and therefore we must
+let \l {Using the Meta-Object Compiler (moc)}{moc} know by using the \c
+Q_OBJECT macro.
+
+The \c recipient property will be set from QML to let the model know which
+conversation it should retrieve messages for.
+
+We override the \l {QSqlTableModel::data}{data()} and
+\l {QAbstractItemModel::}{roleNames()} functions so that we can use our
+custom roles in QML.
+
+We also define the \c sendMessage() function that we want to call from
+QML, hence the \c Q_INVOKABLE macro.
+
+Let's take a look at the \c .cpp file:
+
+\quotefromfile chattutorial/chapter4/sqlconversationmodel.cpp
+\skipto #include
+\printuntil }
+\printuntil }
+\printuntil }
+
+This is very similar to \c sqlcontactmodel.cpp, with the exception that we are
+now operating on the \c Conversations table. We also define
+\c conversationsTableName as a static const variable, as we use it in a couple
+of places throughout the file.
+
+\skipto SqlConversationModel
+\printuntil }
+
+As with \c SqlContactModel, the first thing that we do in the constructor is
+create the table. We tell QSqlTableModel the name of the table we'll be using
+via the \l {QSqlTableModel::setTable}{setTable()} function. To ensure that the
+latest messages in the conversation are shown first, we sort the query results
+by the \c timestamp field in descending order. This goes hand in hand with
+setting ListView's \l {ListView::}{verticalLayoutDirection} property to
+\c ListView.BottomToTop (which we covered in chapter 3).
+
+\skipto ::recipient(
+\printuntil }
+\printuntil }
+
+In \c setRecipient(), we set a filter over the results returned from
+the database.
+
+\skipto ::data(
+\printuntil }
+
+The \c data() function falls back to QSqlTableModel's implementation if the
+role is not a custom user role. If the role is a user role, we can subtract
+Qt::UserRole from it to get the index of that field and then use that to find
+the value that we need to return.
+
+\skipto ::roleNames(
+\printuntil }
+
+In \c roleNames(), we return a mapping of our custom role values to role names.
+This enables us to use these roles in QML. It can be useful to declare an enum
+to hold all of the role values, but since we don't refer to any specific value
+in code outside of this function, we don't bother.
+
+\skipto ::sendMessage(
+\printuntil }
+
+The \c sendMessage() function uses the given \c recipient and a \c message to
+insert a new record into the database. Due to our usage
+of \l QSqlTableModel::OnManualSubmit, we must manually call
+\l {QSqlTableModel::submitAll}{submitAll()}.
+
+\section2 Connecting to the Database and Registering Types With QML
+
+Now that we've established the model classes, let's take a look at \c main.cpp:
+
+\quotefromfile chattutorial/chapter4/main.cpp
+\skipto #include
+\printuntil return app.exec();
+\printuntil }
+
+\c connectToDatabase() creates the connection to the SQLite database, creating
+the actual file if it doesn't already exist.
+
+Within \c main(), we call \l {qmlRegisterType}{qmlRegisterType()} to
+register our models as types within QML.
+
+\section2 Using the Models in QML
+
+Now that we have the models available as QML types, there are some minor
+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 chattutorial
+\printline import chattutorial
+
+We then replace the dummy model with the proper one:
+
+\skipto model: SqlContactModel {}
+\printline model: SqlContactModel {}
+
+Within the delegate, we use a different syntax for accessing the model data:
+
+\skipto text: model.display
+\printline text: model.display
+
+In \c ConversationPage.qml, we add the same \c chattutorial import, and replace
+the dummy model:
+
+\quotefromfile chattutorial/chapter4/ConversationPage.qml
+\skipto model: SqlConversationModel {
+\printuntil }
+
+Within the model, we set the \c recipient property to the name of the contact
+for which the page is being displayed.
+
+The root delegate item changes from a Row to a Column, to accommodate the
+timestamp that we want to display below every message:
+
+\skipto delegate: Column {
+\printuntil Label {
+\printuntil }
+\printuntil }
+\printuntil }
+\printuntil }
+\printuntil }
+
+\borderedimage qtquickcontrols-chattutorial-chapter4-message-timestamp.png
+
+Now that we have a proper model, we can use its \c recipient role in the
+expression for the \c sentByMe property.
+
+The Rectangle that was used for the avatar has been converted into an Image.
+The image has its own implicit size, so we don't need to specify it explicitly.
+As before, we only show the avatar when the author isn't the user, except this
+time we set the \c source of the image to an empty URL instead of using the
+\c visible property.
+
+We want each message background to be slightly wider (12 pixels each side) than
+its text. However, if it's too long, we want to limit its width to the edge
+of the listview, hence the usage of \c Math.min(). When the message wasn't sent
+by us, an avatar will always come before it, so we account for that by
+subtracting the width of the avatar and the row spacing.
+
+For example, in the image above, the implicit width of the message text is the
+smaller value. However, in the image below, the message text is quite long, so
+the smaller value (the width of the view) is chosen, ensuring that the text
+stops at the opposite edge of the screen:
+
+\borderedimage qtquickcontrols-chattutorial-chapter4-long-message.png
+
+In order to display the timestamp for each message that we discussed earlier,
+we use a Label. The date and time are formatted with
+\l {QtQml::Qt::formatDateTime}{Qt.formatDateTime()}, using a custom format.
+
+The \e "send" button must now react to being clicked:
+
+\skipto Button
+\printuntil }
+\printuntil }
+
+First, we call the invokable \c sendMessage() function of the model, which
+inserts a new row into the Conversations database table. Then, we clear the
+text field to make way for future input.
+
+\borderedimage qtquickcontrols-chattutorial-chapter4.gif
+
+
+\section1 Chapter 5: Styling
+
+Styles in Qt Quick Controls are designed to work on any platform. In this
+chapter, we'll do some minor visual tweaks to make sure our application
+looks good when run with the \l {Basic Style}{Basic},
+\l {Material Style}{Material}, and \l {Universal Style}{Universal} styles.
+
+So far, we've just been testing the application with the Basic style. If we
+run it with the \l {Material Style}, for example, we'll immediately see some issues.
+Here is the Contacts page:
+
+\borderedimage qtquickcontrols-chattutorial-chapter5-contacts-material-test.png
+
+The header text is black on a dark blue background, which is very difficult to
+read. The same thing occurs with the Conversations page:
+
+\borderedimage qtquickcontrols-chattutorial-chapter5-conversations-material-test.png
+
+The solution is to tell the toolbar that it should use the \e "Dark" theme, so
+that this information is propagated to its children, allowing them to switch
+their text color to something lighter. The simplest way of doing so is to
+import the Material style directly and use the Material attached property:
+
+\code
+ import QtQuick.Controls.Material 2.12
+
+ // ...
+
+ header: ToolBar {
+ Material.theme: Material.Dark
+
+ // ...
+ }
+\endcode
+
+However, this brings with it a hard dependency to the Material style; the
+Material style plugin \e must be deployed with the application, even if the
+target device doesn't use it, otherwise the QML engine will fail to find the
+import.
+
+Instead, it is better to rely on Qt Quick Controls's built-in support for
+\l {Using File Selectors with Qt Quick Controls}{style-based file selectors}.
+To do this, we must move the ToolBar out into its own file. We'll call it
+\c ChatToolBar.qml. This will be the \e "default" version of the file, which
+means that it will be used when the \l {Basic Style}{Basic style} (which is the
+style that is used when none is specified) is in
+use. Here's the new file:
+
+\quotefromfile chattutorial/chapter5/ChatToolBar.qml
+\skipto import
+\printuntil }
+
+As we only use the ToolBar type within this file, we only need the
+Qt Quick Controls import. The code itself has not changed from how it was
+in \c ContactPage.qml, which is how it should be; for the default version
+of the file, nothing needs to be different.
+
+Back in \c ContactPage.qml, we update the code to use the new type:
+
+\quotefromfile chattutorial/chapter5/ContactPage.qml
+\skipto ToolBar
+\printuntil }
+\printuntil }
+
+Now we need to add the Material version of the toolbar. File selectors expect
+variants of a file to be in appropriately named directories that exist
+alongside the default version of the file. This means that we need to add a
+folder named "+Material" in the same directory that ChatToolBar.qml is in:
+the root folder. The "+" is required by \l QFileSelector as a way of ensuring
+that the selection feature is not accidentally triggered.
+
+Here's \c +Material/ChatToolBar.qml:
+
+\quotefromfile chattutorial/chapter5/+Material/ChatToolBar.qml
+\skipto import
+\printuntil }
+
+We'll make the same changes to \c ConversationPage.qml:
+
+\quotefromfile chattutorial/chapter5/ConversationPage.qml
+\skipto header: ChatToolBar
+\printuntil }
+\printuntil }
+\printuntil }
+
+Now both pages look correct:
+
+\borderedimage qtquickcontrols-chattutorial-chapter5-contacts-material.png
+\borderedimage qtquickcontrols-chattutorial-chapter5-conversations-material.png
+
+Let's try out the Universal style:
+
+\borderedimage qtquickcontrols-chattutorial-chapter5-contacts-universal.png
+\borderedimage qtquickcontrols-chattutorial-chapter5-conversations-universal.png
+
+No issues there. For a relatively simple application such as this one, there
+should be very few adjustments necessary when switching styles.
+
+Now let's try each style's dark theme. The Basic style has no dark theme, as
+it would add a slight overhead to a style that is designed to be as performant
+as possible. We'll test out the Material style first, so add an entry to
+\c qtquickcontrols2.conf that tells it to use its dark theme:
+
+\code
+[Material]
+Primary=Indigo
+Accent=Indigo
+Theme=Dark
+\endcode
+
+Once this is done, build and run the application. This is what you should see:
+
+\borderedimage qtquickcontrols-chattutorial-chapter5-contacts-material-dark.png
+\borderedimage qtquickcontrols-chattutorial-chapter5-conversations-material-dark.png
+
+Both pages look fine. Now add an entry for the Universal style:
+
+\code
+[universal]
+Theme=Dark
+\endcode
+
+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
+
+
+\section1 Summary
+
+In this tutorial, we've taken you through the following steps of writing a
+basic application using Qt Quick Controls:
+
+\list
+\li Creating a new project using Qt Creator.
+\li Setting up a basic ApplicationWindow.
+\li Defining headers and footers with Page.
+\li Displaying content in a ListView.
+\li Refactoring components into their own files.
+\li Navigating between screens with StackView.
+\li Using layouts to allow an application to resize gracefully.
+\li Implementing both custom read-only and writable models that integrate an
+SQL database into the application.
+\li Integrating C++ with QML via \l Q_PROPERTY, \l Q_INVOKABLE, and
+\l qmlRegisterType().
+\li Testing and configuring multiple styles.
+\endlist
+
+*/
diff --git a/examples/quickcontrols/contactlist/CMakeLists.txt b/examples/quickcontrols/contactlist/CMakeLists.txt
new file mode 100644
index 0000000000..7de83d98c3
--- /dev/null
+++ b/examples/quickcontrols/contactlist/CMakeLists.txt
@@ -0,0 +1,48 @@
+# 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)
+
+
+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
+)
+
+qt_add_qml_module(contactlistexample
+ URI contactlist
+ QML_FILES
+ "ContactDelegate.ui.qml"
+ "ContactDialog.qml"
+ "ContactForm.ui.qml"
+ "ContactView.ui.qml"
+ "SectionDelegate.ui.qml"
+ "ContactList.qml"
+ "designer/Backend/ContactModel.qml"
+)
+
+target_link_libraries(contactlistexample PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+)
+
+install(TARGETS contactlistexample
+ 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
new file mode 100644
index 0000000000..e1e6127bb5
--- /dev/null
+++ b/examples/quickcontrols/contactlist/ContactDelegate.ui.qml
@@ -0,0 +1,87 @@
+// 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
+
+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: delegate.fullName
+ font.bold: true
+ elide: Text.ElideRight
+ Layout.fillWidth: true
+ }
+
+ GridLayout {
+ id: grid
+ visible: false
+
+ columns: 2
+ rowSpacing: 10
+ columnSpacing: 10
+
+ Label {
+ text: qsTr("Address:")
+ Layout.leftMargin: 60
+ }
+
+ Label {
+ text: delegate.address
+ font.bold: true
+ elide: Text.ElideRight
+ Layout.fillWidth: true
+ }
+
+ Label {
+ text: qsTr("City:")
+ Layout.leftMargin: 60
+ }
+
+ Label {
+ text: delegate.city
+ font.bold: true
+ elide: Text.ElideRight
+ Layout.fillWidth: true
+ }
+
+ Label {
+ text: qsTr("Number:")
+ Layout.leftMargin: 60
+ }
+
+ Label {
+ text: delegate.number
+ font.bold: true
+ elide: Text.ElideRight
+ Layout.fillWidth: true
+ }
+ }
+ }
+
+ states: [
+ State {
+ name: "expanded"
+ when: delegate.checked
+
+ 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
new file mode 100644
index 0000000000..3f287447ef
--- /dev/null
+++ b/examples/quickcontrols/contactlist/ContactDialog.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Dialog {
+ id: dialog
+
+ signal finished(string fullName, string address, string city, string number)
+
+ function createContact() {
+ form.fullName.clear();
+ form.address.clear();
+ form.city.clear();
+ form.number.clear();
+
+ dialog.title = qsTr("Add Contact");
+ dialog.open();
+ }
+
+ function editContact(contact) {
+ form.fullName.text = contact.fullName;
+ form.address.text = contact.address;
+ form.city.text = contact.city;
+ form.number.text = contact.number;
+
+ dialog.title = qsTr("Edit Contact");
+ dialog.open();
+ }
+
+ x: parent.width / 2 - width / 2
+ y: parent.height / 2 - height / 2
+
+ focus: true
+ modal: true
+ title: qsTr("Add Contact")
+ standardButtons: Dialog.Ok | Dialog.Cancel
+
+ contentItem: ContactForm {
+ id: form
+ }
+
+ 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
new file mode 100644
index 0000000000..56c9186194
--- /dev/null
+++ b/examples/quickcontrols/contactlist/ContactForm.ui.qml
@@ -0,0 +1,72 @@
+// 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
+
+GridLayout {
+ id: grid
+ property alias fullName: fullName
+ property alias address: address
+ property alias city: city
+ property alias number: number
+ property int minimumInputSize: 120
+ property string placeholderText: qsTr("<enter>")
+
+ rows: 4
+ columns: 2
+
+ Label {
+ text: qsTr("Full Name")
+ Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
+ }
+
+ TextField {
+ id: fullName
+ focus: true
+ Layout.fillWidth: true
+ Layout.minimumWidth: grid.minimumInputSize
+ Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
+ placeholderText: grid.placeholderText
+ }
+
+ Label {
+ text: qsTr("Address")
+ Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
+ }
+
+ TextField {
+ id: address
+ Layout.fillWidth: true
+ Layout.minimumWidth: grid.minimumInputSize
+ Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
+ placeholderText: grid.placeholderText
+ }
+
+ Label {
+ text: qsTr("City")
+ Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
+ }
+
+ TextField {
+ id: city
+ Layout.fillWidth: true
+ Layout.minimumWidth: grid.minimumInputSize
+ Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
+ placeholderText: grid.placeholderText
+ }
+
+ Label {
+ text: qsTr("Number")
+ Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
+ }
+
+ TextField {
+ id: number
+ Layout.fillWidth: true
+ Layout.minimumWidth: grid.minimumInputSize
+ Layout.alignment: Qt.AlignLeft | Qt.AlignBaseline
+ placeholderText: grid.placeholderText
+ }
+}
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
new file mode 100644
index 0000000000..7d5b3cf6c8
--- /dev/null
+++ b/examples/quickcontrols/contactlist/ContactView.ui.qml
@@ -0,0 +1,41 @@
+// 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 contactlist
+
+ListView {
+ id: listView
+
+ signal pressAndHold(int index)
+
+ width: 320
+ height: 480
+
+ focus: true
+ boundsBehavior: Flickable.StopAtBounds
+
+ section.property: "fullName"
+ section.criteria: ViewSection.FirstCharacter
+ section.delegate: SectionDelegate {
+ width: listView.width
+ }
+
+ delegate: ContactDelegate {
+ id: delegate
+ width: listView.width
+
+ required property int index
+
+ onPressAndHold: listView.pressAndHold(index)
+ }
+
+ model: ContactModel {
+ id: contactModel
+ }
+
+ ScrollBar.vertical: ScrollBar { }
+}
diff --git a/examples/quickcontrols/contactlist/SectionDelegate.ui.qml b/examples/quickcontrols/contactlist/SectionDelegate.ui.qml
new file mode 100644
index 0000000000..1ed587abd7
--- /dev/null
+++ b/examples/quickcontrols/contactlist/SectionDelegate.ui.qml
@@ -0,0 +1,19 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ToolBar {
+ id: background
+
+ required property string section
+
+ Label {
+ id: label
+ 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
new file mode 100644
index 0000000000..2fead83186
--- /dev/null
+++ b/examples/quickcontrols/contactlist/contactlist.pro
@@ -0,0 +1,39 @@
+TEMPLATE = app
+TARGET = contactlist
+QT += quick
+
+CONFIG += qmltypes
+
+QML_IMPORT_PATH = $$pwd/.
+QML_IMPORT_NAME = contactlist
+QML_IMPORT_MAJOR_VERSION = 1
+
+HEADERS += \
+ contactmodel.h
+
+SOURCES += \
+ main.cpp \
+ contactmodel.cpp
+
+qml_resources.files = \
+ qmldir \
+ ContactDelegate.ui.qml \
+ ContactDialog.qml \
+ ContactForm.ui.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
+
+OTHER_FILES += \
+ designer/Backend/*.qml
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/contactlist
+INSTALLS += target
diff --git a/examples/quickcontrols/contactlist/contactmodel.cpp b/examples/quickcontrols/contactlist/contactmodel.cpp
new file mode 100644
index 0000000000..85ebad0515
--- /dev/null
+++ b/examples/quickcontrols/contactlist/contactmodel.cpp
@@ -0,0 +1,83 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "contactmodel.h"
+
+ContactModel::ContactModel(QObject *parent ) : QAbstractListModel(parent)
+{
+ m_contacts.append({ "Angel Hogan", "Chapel St. 368 ", "Clearwater" , "0311 1823993" });
+ m_contacts.append({ "Felicia Patton", "Annadale Lane 2", "Knoxville" , "0368 1244494" });
+ m_contacts.append({ "Grant Crawford", "Windsor Drive 34", "Riverdale" , "0351 7826892" });
+ m_contacts.append({ "Gretchen Little", "Sunset Drive 348", "Virginia Beach" , "0343 1234991" });
+ m_contacts.append({ "Geoffrey Richards", "University Lane 54", "Trussville" , "0423 2144944" });
+ m_contacts.append({ "Henrietta Chavez", "Via Volto San Luca 3", "Piobesi Torinese" , "0399 2826994" });
+ m_contacts.append({ "Harvey Chandler", "North Squaw Creek 11", "Madisonville" , "0343 1244492" });
+ m_contacts.append({ "Miguel Gomez", "Wild Rose Street 13", "Trussville" , "0343 9826996" });
+ m_contacts.append({ "Norma Rodriguez", " Glen Eagles Street 53", "Buffalo" , "0241 5826596" });
+ m_contacts.append({ "Shelia Ramirez", "East Miller Ave 68", "Pickerington" , "0346 4844556" });
+ m_contacts.append({ "Stephanie Moss", "Piazza Trieste e Trento 77", "Roata Chiusani" , "0363 0510490" });
+}
+
+int ContactModel::rowCount(const QModelIndex &) const
+{
+ return m_contacts.count();
+}
+
+QVariant ContactModel::data(const QModelIndex &index, int role) const
+{
+ if (index.row() < rowCount())
+ switch (role) {
+ case FullNameRole: return m_contacts.at(index.row()).fullName;
+ case AddressRole: return m_contacts.at(index.row()).address;
+ case CityRole: return m_contacts.at(index.row()).city;
+ case NumberRole: return m_contacts.at(index.row()).number;
+ default: return QVariant();
+ }
+ return QVariant();
+}
+
+QHash<int, QByteArray> ContactModel::roleNames() const
+{
+ static const QHash<int, QByteArray> roles {
+ { FullNameRole, "fullName" },
+ { AddressRole, "address" },
+ { CityRole, "city" },
+ { NumberRole, "number" }
+ };
+ return roles;
+}
+
+QVariantMap ContactModel::get(int row) const
+{
+ const Contact contact = m_contacts.value(row);
+ return { {"fullName", contact.fullName}, {"address", contact.address}, {"city", contact.city}, {"number", contact.number} };
+}
+
+void ContactModel::append(const QString &fullName, const QString &address, const QString &city, const QString &number)
+{
+ int row = 0;
+ while (row < m_contacts.count() && fullName > m_contacts.at(row).fullName)
+ ++row;
+ beginInsertRows(QModelIndex(), row, row);
+ m_contacts.insert(row, {fullName, address, city, number});
+ endInsertRows();
+}
+
+void ContactModel::set(int row, const QString &fullName, const QString &address, const QString &city, const QString &number)
+{
+ if (row < 0 || row >= m_contacts.count())
+ return;
+
+ m_contacts.replace(row, { fullName, address, city, number });
+ dataChanged(index(row, 0), index(row, 0), { FullNameRole, AddressRole, CityRole, NumberRole });
+}
+
+void ContactModel::remove(int row)
+{
+ if (row < 0 || row >= m_contacts.count())
+ return;
+
+ beginRemoveRows(QModelIndex(), row, row);
+ m_contacts.removeAt(row);
+ endRemoveRows();
+}
diff --git a/examples/quickcontrols/contactlist/contactmodel.h b/examples/quickcontrols/contactlist/contactmodel.h
new file mode 100644
index 0000000000..78a06b8132
--- /dev/null
+++ b/examples/quickcontrols/contactlist/contactmodel.h
@@ -0,0 +1,46 @@
+// 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 {
+ FullNameRole = Qt::DisplayRole,
+ AddressRole = Qt::UserRole,
+ CityRole,
+ NumberRole
+ };
+ Q_ENUM(ContactRole)
+
+ ContactModel(QObject *parent = nullptr);
+
+ int rowCount(const QModelIndex & = QModelIndex()) const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ QHash<int, QByteArray> roleNames() const;
+
+ Q_INVOKABLE QVariantMap get(int row) const;
+ Q_INVOKABLE void append(const QString &fullName, const QString &address, const QString &city, const QString &number);
+ Q_INVOKABLE void set(int row, const QString &fullName, const QString &address, const QString &city, const QString &number);
+ Q_INVOKABLE void remove(int row);
+
+private:
+ struct Contact {
+ QString fullName;
+ QString address;
+ QString city;
+ QString number;
+ };
+
+ QList<Contact> m_contacts;
+};
+
+#endif // CONTACTMODEL_H
diff --git a/examples/quickcontrols/contactlist/designer/Backend/ContactModel.qml b/examples/quickcontrols/contactlist/designer/Backend/ContactModel.qml
new file mode 100644
index 0000000000..850b444d08
--- /dev/null
+++ b/examples/quickcontrols/contactlist/designer/Backend/ContactModel.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+ListModel {
+ ListElement {
+ address: "Chapel St. 368"
+ city: "Knoxville"
+ number: "0311 1823993"
+ fullName: "Angel Hogan"
+ }
+
+ ListElement {
+ address: "Annadale Lane 2"
+ city: "Clearwater"
+ number: "0368 1244494"
+ fullName: "Felicia Patton"
+ }
+
+ ListElement {
+ address: "Windsor Drive 34"
+ city: "Riverdale"
+ number: "0368 1244494"
+ fullName: "Grant Crawford"
+ }
+
+ ListElement {
+ address: "Sunset Drive 348"
+ city: "Virginia Beach"
+ number: "0351 7826892"
+ fullName: "Gretchen Little"
+ }
+
+ ListElement {
+ address: "University Lane 54"
+ city: "Trussville"
+ number: "0399 2826994"
+ fullName: "Geoffrey Richards"
+ }
+}
diff --git a/examples/quickcontrols/contactlist/designer/Backend/qmldir b/examples/quickcontrols/contactlist/designer/Backend/qmldir
new file mode 100644
index 0000000000..8e2037d4d7
--- /dev/null
+++ b/examples/quickcontrols/contactlist/designer/Backend/qmldir
@@ -0,0 +1,2 @@
+module Backend
+ContactModel 1.0 ContactModel.qml
diff --git a/examples/quickcontrols/contactlist/doc/images/qtquickcontrols-contactlist.png b/examples/quickcontrols/contactlist/doc/images/qtquickcontrols-contactlist.png
new file mode 100644
index 0000000000..9f1c306544
--- /dev/null
+++ b/examples/quickcontrols/contactlist/doc/images/qtquickcontrols-contactlist.png
Binary files differ
diff --git a/examples/quickcontrols/contactlist/doc/src/qtquickcontrols-contactlist.qdoc b/examples/quickcontrols/contactlist/doc/src/qtquickcontrols-contactlist.qdoc
new file mode 100644
index 0000000000..bb9e935d6d
--- /dev/null
+++ b/examples/quickcontrols/contactlist/doc/src/qtquickcontrols-contactlist.qdoc
@@ -0,0 +1,51 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+/*!
+ \example contactlist
+ \keyword Qt Quick Controls - Contact List
+ \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.
+
+ The \e {Contact List Example} shows how to integrate a C++ backend in a way that
+ is compatible with Qt Quick Designer.
+ For the declarative parts of the UI, .ui.qml files are used that can be edited
+ visually in the Qt Quick Designer.
+
+ \image qtquickcontrols-contactlist.png
+
+ \section1 C++ Backend
+
+ The contact list application allows the user to add, edit, and remove contacts.
+ The actual implementation is done in C++ and exposed as a QAbstractListModel.
+
+ The ContactModel C++ class is registered under a namespace and later
+ imported and instantiated by \e MainForm.ui.qml. For more information about registering C++
+ classes as QML types, see \l {Defining QML Types from C++}.
+
+ \code
+ #include <QtQml/qqml.h>
+ ...
+ qmlRegisterType<ContactModel>("Backend", 1, 0, "ContactModel");
+ ...
+ \endcode
+
+ \section1 Designer Support
+
+ In the designer subdirectory, we create a plugin that replaces the ContactModel
+ in Qt Quick Designer. For this to work we add the following line to \e contactlist.pro.
+
+ \code
+ QML_DESIGNER_IMPORT_PATH = $$PWD/designer
+ \endcode
+
+ Because Qt Quick Designer cannot instantiate the ContactModel C++ class, we define
+ a mockup using a ListModel. This ensures that the ListView using the model shows something
+ in Qt Quick Designer.
+
+ \include examples-run.qdocinc
+*/
diff --git a/examples/quickcontrols/contactlist/main.cpp b/examples/quickcontrols/contactlist/main.cpp
new file mode 100644
index 0000000000..2f9f15fd36
--- /dev/null
+++ b/examples/quickcontrols/contactlist/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.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
new file mode 100644
index 0000000000..43ed385a3e
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/CMakeLists.txt
@@ -0,0 +1,53 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(eventcalendar LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Sql)
+
+qt_add_executable(eventcalendar
+ event.h
+ eventcalendar.cpp
+ eventmodel.cpp eventmodel.h
+ sqleventdatabase.cpp sqleventdatabase.h
+)
+
+set_target_properties(eventcalendar PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(eventcalendar PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Qml
+ Qt6::Sql
+)
+
+qt_add_qml_module(eventcalendar
+ URI App
+ QML_FILES
+ MonthGridDelegate.qml
+ eventcalendar.qml
+ RESOURCES
+ qtquickcontrols2.conf
+ NO_RESOURCE_TARGET_PATH
+)
+
+install(TARGETS eventcalendar
+ 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/MonthGridDelegate.qml b/examples/quickcontrols/eventcalendar/MonthGridDelegate.qml
new file mode 100644
index 0000000000..c49dfda1ae
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/MonthGridDelegate.qml
@@ -0,0 +1,78 @@
+// 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.Controls.Material
+
+import App
+
+ColumnLayout {
+ id: root
+
+ required property EventDatabase eventDatabase
+
+ required property bool today
+ required property int year
+ required property int month
+ required property int day
+
+ required property int visibleMonth
+
+ Material.theme: today ? Material.Dark : undefined
+
+ Label {
+ id: dayText
+ horizontalAlignment: Text.AlignHCenter
+ topPadding: 4
+ opacity: month === root.visibleMonth ? 1 : 0
+ text: day
+
+ Layout.fillWidth: true
+
+ Rectangle {
+ width: height
+ height: Math.max(dayText.implicitWidth, dayText.implicitHeight)
+ radius: width / 2
+ color: Material.primary
+ anchors.centerIn: dayText
+ anchors.verticalCenterOffset: dayText.height - dayText.baselineOffset
+ z: -1
+ visible: root.today
+ }
+ }
+
+ ListView {
+ spacing: 1
+ clip: true
+
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.topMargin: 4
+
+ delegate: ItemDelegate {
+ id: itemDelegate
+ width: parent.width
+ text: name
+ font.pixelSize: Qt.application.font.pixelSize * 0.8
+ leftPadding: 4
+ rightPadding: 4
+ topPadding: 4
+ bottomPadding: 4
+
+ required property string name
+
+ Material.theme: Material.Dark
+
+ background: Rectangle {
+ color: itemDelegate.Material.primary
+ radius: 3
+ }
+ }
+ model: EventModel {
+ eventDatabase: root.eventDatabase
+ date: new Date(root.year, root.month, root.day)
+ }
+ }
+}
diff --git a/examples/quickcontrols/eventcalendar/doc/images/qtquickcalendar-eventcalendar.png b/examples/quickcontrols/eventcalendar/doc/images/qtquickcalendar-eventcalendar.png
new file mode 100644
index 0000000000..35d905be6d
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/doc/images/qtquickcalendar-eventcalendar.png
Binary files differ
diff --git a/examples/quickcontrols/eventcalendar/doc/src/qtquickcontrols-eventcalendar.qdoc b/examples/quickcontrols/eventcalendar/doc/src/qtquickcontrols-eventcalendar.qdoc
new file mode 100644
index 0000000000..450b1d37a8
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/doc/src/qtquickcontrols-eventcalendar.qdoc
@@ -0,0 +1,20 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example eventcalendar
+ \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
+
+ The Event Calendar example is a simple application that shows how to use
+ \l DayOfWeekRow, \l WeekNumberColumn, and \l MonthGrid to create a calendar.
+ It uses an in-memory SQL database to populate the calendar with events.
+ The example uses the \l {Material Style}{Material style}.
+
+ \include examples-run.qdocinc
+*/
diff --git a/examples/quickcontrols/eventcalendar/event.h b/examples/quickcontrols/eventcalendar/event.h
new file mode 100644
index 0000000000..b2cc6b45cf
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/event.h
@@ -0,0 +1,16 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef EVENT_H
+#define EVENT_H
+
+#include <QAbstractListModel>
+#include <QDateTime>
+
+struct Event {
+ QString name;
+ QDateTime startDate;
+ QDateTime endDate;
+};
+
+#endif // EVENT_H
diff --git a/examples/quickcontrols/eventcalendar/eventcalendar.cpp b/examples/quickcontrols/eventcalendar/eventcalendar.cpp
new file mode 100644
index 0000000000..bc952a3f9a
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/eventcalendar.cpp
@@ -0,0 +1,29 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+#include <QIcon>
+
+#include "sqleventdatabase.h"
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ QIcon::setThemeName("eventcalendar");
+
+ QQmlApplicationEngine engine;
+ SqlEventDatabase eventDatabase;
+ engine.setInitialProperties({{ "eventDatabase", QVariant::fromValue(&eventDatabase) }});
+
+ const QUrl url(QStringLiteral("qrc:/eventcalendar.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/quickcontrols/eventcalendar/eventcalendar.pro b/examples/quickcontrols/eventcalendar/eventcalendar.pro
new file mode 100644
index 0000000000..742c5d09e8
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/eventcalendar.pro
@@ -0,0 +1,25 @@
+TEMPLATE = app
+TARGET = eventcalendar
+QT += sql qml
+
+CONFIG += qmltypes
+QML_IMPORT_NAME = App
+QML_IMPORT_MAJOR_VERSION = 1
+
+HEADERS += \
+ event.h \
+ eventmodel.h \
+ sqleventdatabase.h
+
+SOURCES += \
+ eventcalendar.cpp \
+ eventmodel.cpp \
+ sqleventdatabase.cpp
+
+RESOURCES += \
+ eventcalendar.qml \
+ MonthGridDelegate.qml \
+ qtquickcontrols2.conf
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcalendar/eventcalendar
+INSTALLS += target
diff --git a/examples/quickcontrols/eventcalendar/eventcalendar.qml b/examples/quickcontrols/eventcalendar/eventcalendar.qml
new file mode 100644
index 0000000000..65d85d8d4e
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/eventcalendar.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.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+
+import App
+
+ApplicationWindow {
+ id: window
+ width: 800
+ height: 600
+ title: qsTr("Event Calendar")
+ visible: true
+
+ required property EventDatabase eventDatabase
+
+ readonly property date currentDate: new Date()
+
+ header: ToolBar {
+ Label {
+ text: window.currentDate.toLocaleString(locale, "MMMM yyyy")
+ font.pixelSize: Qt.application.font.pixelSize * 1.25
+ anchors.centerIn: parent
+ }
+ }
+
+ GridLayout {
+ anchors.fill: parent
+ columns: 2
+
+ DayOfWeekRow {
+ id: dayOfWeekRow
+ locale: grid.locale
+ font.bold: false
+ delegate: Label {
+ text: model.shortName
+ font: dayOfWeekRow.font
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ Layout.column: 1
+ Layout.fillWidth: true
+ }
+
+ WeekNumberColumn {
+ month: grid.month
+ year: grid.year
+ locale: grid.locale
+ font.bold: false
+
+ Layout.fillHeight: true
+ }
+
+ MonthGrid {
+ id: grid
+ month: window.currentDate.getMonth()
+ year: window.currentDate.getFullYear()
+ spacing: 0
+
+ readonly property int gridLineThickness: 1
+
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ delegate: MonthGridDelegate {
+ id: gridDelegate
+ visibleMonth: grid.month
+ eventDatabase: window.eventDatabase
+ }
+
+ background: Item {
+ x: grid.leftPadding
+ y: grid.topPadding
+ width: grid.availableWidth
+ height: grid.availableHeight
+
+ // Vertical lines
+ Row {
+ spacing: (parent.width - (grid.gridLineThickness * rowRepeater.model)) / rowRepeater.model
+
+ Repeater {
+ id: rowRepeater
+ model: 7
+ delegate: Rectangle {
+ width: 1
+ height: grid.height
+ color: "#ccc"
+ }
+ }
+ }
+
+ // Horizontal lines
+ Column {
+ spacing: (parent.height - (grid.gridLineThickness * columnRepeater.model)) / columnRepeater.model
+
+ Repeater {
+ id: columnRepeater
+ model: 6
+ delegate: Rectangle {
+ width: grid.width
+ height: 1
+ color: "#ccc"
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/eventcalendar/eventmodel.cpp b/examples/quickcontrols/eventcalendar/eventmodel.cpp
new file mode 100644
index 0000000000..0b225883ff
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/eventmodel.cpp
@@ -0,0 +1,88 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "eventmodel.h"
+
+#include "sqleventdatabase.h"
+
+EventModel::EventModel(QObject *parent)
+ : QAbstractListModel(parent)
+{
+}
+
+SqlEventDatabase *EventModel::eventDatabase()
+{
+ return m_eventDatabase;
+}
+
+void EventModel::setEventDatabase(SqlEventDatabase *eventDatabase)
+{
+ if (eventDatabase == m_eventDatabase)
+ return;
+
+ m_eventDatabase = eventDatabase;
+ repopulate();
+ emit eventDatabaseChanged();
+}
+
+QDate EventModel::date() const
+{
+ return m_date;
+}
+
+void EventModel::setDate(QDate date)
+{
+ if (date == m_date)
+ return;
+
+ m_date = date;
+ repopulate();
+ emit dateChanged();
+}
+
+int EventModel::rowCount(const QModelIndex &) const
+{
+ return m_events.size();
+}
+
+QVariant EventModel::data(const QModelIndex &index, int role) const
+{
+ if (!checkIndex(index, CheckIndexOption::IndexIsValid))
+ return QVariant();
+
+ switch (role) {
+ case NameRole: return m_events.at(index.row()).name;
+ case StartDateRole: return m_events.at(index.row()).startDate;
+ case EndDateRole: return m_events.at(index.row()).endDate;
+ default: return QVariant();
+ }
+}
+
+QHash<int, QByteArray> EventModel::roleNames() const
+{
+ static const QHash<int, QByteArray> roles {
+ { NameRole, "name" },
+ { StartDateRole, "startDate" },
+ { EndDateRole, "endDate" }
+ };
+ return roles;
+}
+
+bool EventModel::isValid() const
+{
+ return m_eventDatabase && !m_date.isNull();
+}
+
+void EventModel::repopulate()
+{
+ beginResetModel();
+
+ if (!m_eventDatabase || m_date.isNull()) {
+ m_events.clear();
+ return;
+ }
+
+ m_events = m_eventDatabase->eventsForDate(m_date);
+
+ endResetModel();
+}
diff --git a/examples/quickcontrols/eventcalendar/eventmodel.h b/examples/quickcontrols/eventcalendar/eventmodel.h
new file mode 100644
index 0000000000..62a30df33b
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/eventmodel.h
@@ -0,0 +1,56 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef CONTACTMODEL_H
+#define CONTACTMODEL_H
+
+#include <QAbstractListModel>
+#include <QDate>
+#include <QtQml>
+
+#include "event.h"
+
+class SqlEventDatabase;
+
+class EventModel : public QAbstractListModel
+{
+ Q_OBJECT
+ Q_PROPERTY(SqlEventDatabase *eventDatabase READ eventDatabase WRITE setEventDatabase NOTIFY eventDatabaseChanged)
+ Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY dateChanged)
+ QML_ELEMENT
+ Q_MOC_INCLUDE("sqleventdatabase.h")
+
+public:
+ EventModel(QObject *parent = nullptr);
+
+ enum ContactRole {
+ NameRole = Qt::UserRole,
+ StartDateRole,
+ EndDateRole
+ };
+ Q_ENUM(ContactRole)
+
+ SqlEventDatabase *eventDatabase();
+ void setEventDatabase(SqlEventDatabase *eventDatabase);
+
+ QDate date() const;
+ void setDate(QDate date);
+
+ int rowCount(const QModelIndex & = QModelIndex()) const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ QHash<int, QByteArray> roleNames() const;
+
+signals:
+ void eventDatabaseChanged();
+ void dateChanged();
+
+private:
+ bool isValid() const;
+ void repopulate();
+
+ SqlEventDatabase *m_eventDatabase = nullptr;
+ QDate m_date;
+ QVector<Event> m_events;
+};
+
+#endif // CONTACTMODEL_H
diff --git a/examples/quickcontrols/eventcalendar/qmldir b/examples/quickcontrols/eventcalendar/qmldir
new file mode 100644
index 0000000000..6b7f86bfac
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/qmldir
@@ -0,0 +1 @@
+module App
diff --git a/examples/quickcontrols/eventcalendar/qtquickcontrols2.conf b/examples/quickcontrols/eventcalendar/qtquickcontrols2.conf
new file mode 100644
index 0000000000..b6c7c87ea1
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/qtquickcontrols2.conf
@@ -0,0 +1,2 @@
+[Controls]
+Style=Material
diff --git a/examples/quickcontrols/eventcalendar/sqleventdatabase.cpp b/examples/quickcontrols/eventcalendar/sqleventdatabase.cpp
new file mode 100644
index 0000000000..3d845f3b3b
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/sqleventdatabase.cpp
@@ -0,0 +1,70 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "sqleventdatabase.h"
+
+#include <QDebug>
+#include <QFileInfo>
+#include <QSqlError>
+#include <QSqlQuery>
+
+SqlEventDatabase::SqlEventDatabase()
+{
+ createConnection();
+}
+
+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);
+ if (!query.exec()) {
+ qWarning() << "SQL query failed";
+ return {};
+ }
+
+ QVector<Event> events;
+ while (query.next()) {
+ Event event;
+ event.name = query.value("name").toString();
+
+ QDateTime startDate;
+ startDate.setDate(query.value("startDate").toDate());
+ startDate.setTime(QTime(0, 0).addSecs(query.value("startTime").toInt()));
+ event.startDate = startDate;
+
+ QDateTime endDate;
+ endDate.setDate(query.value("endDate").toDate());
+ endDate.setTime(QTime(0, 0).addSecs(query.value("endTime").toInt()));
+ event.endDate = endDate;
+
+ events.append(event);
+ }
+ return events;
+}
+
+/*
+ Defines a helper function to open a connection to an
+ in-memory SQLITE database and to create a table.
+*/
+void SqlEventDatabase::createConnection()
+{
+ QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
+ db.setDatabaseName(":memory:");
+ if (!db.open()) {
+ qFatal("Cannot open database");
+ return;
+ }
+
+ QSqlQuery query;
+ const QString year = QDate::currentDate().toString("yyyy");
+ const QString month = QDate::currentDate().toString("MM");
+ // Keep the example up-to-date by making the events fall in the current year and month.
+ // We store the time as seconds because it's easier to query.
+ query.exec("create table Event (name TEXT, startDate DATE, startTime INT, endDate DATE, endTime INT)");
+ query.exec(QString::fromLatin1("insert into Event values('Grocery shopping', '%1-%2-01', 36000, '%1-%2-01', 39600)").arg(year, month));
+ query.exec(QString::fromLatin1("insert into Event values('Ice skating', '%1-%2-01', 57600, '%1-%2-01', 61200)").arg(year, month));
+ query.exec(QString::fromLatin1("insert into Event values('Doctor''s appointment', '%1-%2-15', 57600, '%1-%2-15', 63000)").arg(year, month));
+ query.exec(QString::fromLatin1("insert into Event values('Conference', '%1-%2-24', 32400, '%1-%2-28', 61200)").arg(year, month));
+
+ return;
+}
diff --git a/examples/quickcontrols/eventcalendar/sqleventdatabase.h b/examples/quickcontrols/eventcalendar/sqleventdatabase.h
new file mode 100644
index 0000000000..b867b7860d
--- /dev/null
+++ b/examples/quickcontrols/eventcalendar/sqleventdatabase.h
@@ -0,0 +1,28 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SQLEVENTDATABASE_H
+#define SQLEVENTDATABASE_H
+
+#include <QObject>
+#include <QtQml>
+#include <QVector>
+
+#include "event.h"
+
+class SqlEventDatabase : public QObject
+{
+ Q_OBJECT
+ QML_NAMED_ELEMENT(EventDatabase)
+ QML_UNCREATABLE("EventDatabase should not be created in QML")
+
+public:
+ SqlEventDatabase();
+
+ QVector<Event> eventsForDate(QDate date);
+
+private:
+ static void createConnection();
+};
+
+#endif // SQLEVENTDATABASE_H
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
new file mode 100644
index 0000000000..8c78720a58
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/CMakeLists.txt
@@ -0,0 +1,52 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(flatstyle LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2 Widgets)
+
+qt_add_executable(flatstyleexample WIN32 MACOSX_BUNDLE
+ main.cpp
+)
+
+qt_add_qml_module(flatstyleexample
+ URI flatstyle
+ NO_RESOURCE_TARGET_PATH
+ QML_FILES
+ "MainForm.ui.qml"
+ "flatstyle.qml"
+ "imports/Flat/Button.qml"
+ "imports/Flat/CheckBox.qml"
+ "imports/Flat/Switch.qml"
+ "imports/Theme/Theme.qml"
+ RESOURCES
+ "imports/Flat/qmldir"
+ "imports/Theme/qmldir"
+ "qtquickcontrols2.conf"
+)
+
+target_link_libraries(flatstyleexample PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickControls2
+ Qt6::Widgets
+)
+
+install(TARGETS flatstyleexample
+ 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
new file mode 100644
index 0000000000..ff05a2dcef
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/MainForm.ui.qml
@@ -0,0 +1,100 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Theme
+
+Item {
+ id: form
+
+ width: 320
+ height: 480
+ property alias slider: slider
+ property alias checkBoxUnderline: checkBoxUnderline
+ property alias checkBoxBold: checkBoxBold
+ property alias sizeSwitch: sizeSwitch
+ property alias button: button
+
+ Slider {
+ id: slider
+ width: 297
+ height: 38
+ stepSize: 1
+ to: 18
+ from: 10
+ value: 14
+ anchors.topMargin: Theme.baseSize
+ anchors.top: gridLayout.bottom
+ anchors.right: gridLayout.right
+ anchors.left: gridLayout.left
+ handle: Rectangle {
+ id: sliderHandle
+ x: slider.leftPadding + slider.visualPosition * (slider.availableWidth - width)
+ y: slider.topPadding + slider.availableHeight / 2 - height / 2
+ implicitWidth: 26
+ implicitHeight: 26
+ radius: 13
+ color: slider.pressed ? Theme.mainColorDarker : Theme.mainColor
+ border.color: Theme.gray
+ }
+ }
+
+ GridLayout {
+ id: gridLayout
+ anchors.top: parent.top
+ anchors.topMargin: 64
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ columnSpacing: Theme.baseSize * 0.5
+ rowSpacing: Theme.baseSize * 0.5
+ rows: 4
+ columns: 2
+
+ Label {
+ text: qsTr("Toggle Size")
+ font: Theme.font
+ }
+
+ Switch {
+ id: sizeSwitch
+ Layout.fillWidth: true
+ }
+
+ CheckBox {
+ id: checkBoxBold
+ text: qsTr("Bold")
+ checked: true
+ Layout.fillWidth: true
+ }
+
+ CheckBox {
+ id: checkBoxUnderline
+ text: qsTr("Underline")
+ Layout.fillWidth: true
+ }
+
+ Rectangle {
+ id: rectangle
+ color: Theme.mainColor
+ Layout.fillWidth: true
+ Layout.columnSpan: 2
+ Layout.preferredHeight: 38
+ Layout.preferredWidth: 297
+ }
+
+ Label {
+ id: label
+ text: qsTr("Customization")
+ font: Theme.font
+ }
+
+ Button {
+ id: button
+ text: qsTr("Change Color")
+ Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+ Layout.fillWidth: false
+ }
+ }
+}
diff --git a/examples/quickcontrols/flatstyle/doc/images/qtquickcontrols-flatstyle-creator.png b/examples/quickcontrols/flatstyle/doc/images/qtquickcontrols-flatstyle-creator.png
new file mode 100644
index 0000000000..d77a7ffc4b
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/doc/images/qtquickcontrols-flatstyle-creator.png
Binary files differ
diff --git a/examples/quickcontrols/flatstyle/doc/images/qtquickcontrols-flatstyle.png b/examples/quickcontrols/flatstyle/doc/images/qtquickcontrols-flatstyle.png
new file mode 100644
index 0000000000..a43b4c39fa
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/doc/images/qtquickcontrols-flatstyle.png
Binary files differ
diff --git a/examples/quickcontrols/flatstyle/doc/src/qtquickcontrols-flatstyle.qdoc b/examples/quickcontrols/flatstyle/doc/src/qtquickcontrols-flatstyle.qdoc
new file mode 100644
index 0000000000..eeb63b7084
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/doc/src/qtquickcontrols-flatstyle.qdoc
@@ -0,0 +1,72 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example flatstyle
+ \keyword Qt Quick Controls - Flat Style
+ \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.
+
+ \e Flat Style shows how to integrate customized controls into Qt Quick Designer.
+ The example uses a pure QML plugin to define constants in a singleton. For the
+ declarative parts of the UI, \c .ui.qml files are used. These can be edited
+ visually in Qt Quick Designer.
+
+ \borderedimage qtquickcontrols-flatstyle.png
+
+ \section1 QML Plugin
+
+ The example contains a plugin called Theme. The plugin consists of a QML file
+ \c Theme.qml and a \c qmldir file. The plugin is located in the imports subdirectory
+ and added as a resource.
+ To ensure the plugin is found by QML, we add the import directory to the import
+ paths of the engine in \c main.cpp.
+
+ \code
+ ...
+ engine.addImportPath(":/imports");
+ ...
+ \endcode
+
+ To ensure the code model and Qt Quick Designer can find the plugin, we add the following
+ line to \e flatstyle.pro.
+
+ \code
+ QML_IMPORT_PATH = $$PWD/imports
+ \endcode
+
+ All colors, font parameters, and size constants that are used in this example
+ are defined as properties in the singleton called \e Theme.qml.
+ Usually such attribute values are defined as constants as they are not suppose to change at run time.
+ In this example, we allow the user to change some attributes like the main color, the size parameter,
+ and some font parameters while the application is running.
+
+ Defining these attribute values in a singleton makes it easy to maintain and change them.
+ This pattern makes it easy to implement theming.
+
+ \section1 Implementing Custom Controls
+
+ The plugin also contains a style for a couple of controls that implement a custom look and feel.
+ This style is located in \c Flat and is set as the style for the application in \c qtquickcontrols2.conf.
+
+ The example uses the states of a Qt Quick Item to implement the different states of a control.
+ This has the advantage that we can define the custom look in Qt Quick Designer and we can easily
+ verify the different states of a control.
+ To edit the indicator of a switch in Qt Quick Designer we can open Switch.qml and then enter the implementation
+ of the indicator called \c switchHandle using the combo box on the top next to the combo box for the open documents.
+
+ \borderedimage qtquickcontrols-flatstyle-creator.png
+
+ The application itself is just a simple form that allows the user to adjust a couple of parameters of the custom controls.
+ The user can choose another main color, set the font to bold or underline, and increase the size of the controls by
+ toggling a switch.
+
+ \e MainForm.ui.qml is just the pure declarative definition of the form, while \e flatstyle.qml instantiates the form
+ and implements the logic.
+
+ \include examples-run.qdocinc
+*/
diff --git a/examples/quickcontrols/flatstyle/flatstyle.pro b/examples/quickcontrols/flatstyle/flatstyle.pro
new file mode 100644
index 0000000000..a111d5f2f1
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/flatstyle.pro
@@ -0,0 +1,23 @@
+TEMPLATE = app
+TARGET = flatstyle
+
+QT += quick quickcontrols2 widgets
+
+SOURCES += main.cpp
+
+RESOURCES += \
+ qtquickcontrols2.conf \
+ flatstyle.qml \
+ MainForm.ui.qml \
+ imports/Flat/Button.qml \
+ imports/Flat/CheckBox.qml \
+ imports/Flat/qmldir \
+ imports/Flat/Switch.qml \
+ imports/Theme/Theme.qml \
+ imports/Theme/qmldir
+
+# Additional import path used to resolve QML modules in Qt Creator's code model
+QML_IMPORT_PATH = $$PWD/imports
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/flatstyle
+INSTALLS += target
diff --git a/examples/quickcontrols/flatstyle/flatstyle.qml b/examples/quickcontrols/flatstyle/flatstyle.qml
new file mode 100644
index 0000000000..17b868ba5e
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/flatstyle.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import Qt.labs.platform
+import Theme
+
+ApplicationWindow {
+ id: window
+ visible: true
+ minimumWidth: 360
+ height: 480
+
+ title: qsTr("Flat Style")
+
+ MainForm {
+ id: form
+
+ anchors.fill: parent
+ button.onClicked: colorDialog.open()
+
+ sizeSwitch.onCheckedChanged: Theme.baseSize = (sizeSwitch.checked ? Theme.largeSize : Theme.smallSize)
+ checkBoxBold.onCheckedChanged: Theme.font.bold = checkBoxBold.checked
+ checkBoxUnderline.onCheckedChanged: Theme.font.underline = checkBoxUnderline.checked
+ slider.onPositionChanged: Theme.font.pixelSize = slider.valueAt(slider.position)
+ }
+
+ ColorDialog {
+ id: colorDialog
+ onCurrentColorChanged: Theme.mainColor = currentColor
+ }
+}
diff --git a/examples/quickcontrols/flatstyle/flatstyle.qmlproject b/examples/quickcontrols/flatstyle/flatstyle.qmlproject
new file mode 100644
index 0000000000..80b42820ad
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/flatstyle.qmlproject
@@ -0,0 +1,45 @@
+import QmlProject
+
+Project {
+ mainFile: "flatstyle.qml"
+
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+
+ JavaScriptFiles {
+ directory: "."
+ }
+
+ ImageFiles {
+ directory: "."
+ }
+
+ Files {
+ filter: "*.conf"
+ files: ["qtquickcontrols2.conf"]
+ }
+
+ Files {
+ filter: "qmldir"
+ directory: "."
+ }
+
+ Files {
+ filter: "*.ttf;*.otf"
+ }
+
+ Environment {
+ QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
+ QT_AUTO_SCREEN_SCALE_FACTOR: "1"
+ }
+
+ qt6Project: true
+
+ /* List of plugin directories passed to QML runtime */
+ importPaths: [ ".", "imports" ]
+
+ /* Required for deployment */
+ targetDirectory: "/opt/flatstyle"
+}
diff --git a/examples/quickcontrols/flatstyle/imports/Flat/Button.qml b/examples/quickcontrols/flatstyle/imports/Flat/Button.qml
new file mode 100644
index 0000000000..ec8b904a4c
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/imports/Flat/Button.qml
@@ -0,0 +1,70 @@
+// 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 Theme
+
+T.Button {
+ id: control
+
+ font: Theme.font
+
+ implicitWidth: Math.max(background ? background.implicitWidth : 0,
+ contentItem.implicitWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(background ? background.implicitHeight : 0,
+ contentItem.implicitHeight + topPadding + bottomPadding)
+ leftPadding: 4
+ rightPadding: 4
+
+ background: Rectangle {
+ id: buttonBackground
+ implicitWidth: 100
+ implicitHeight: 40
+ opacity: enabled ? 1 : 0.3
+ border.color: Theme.mainColor
+ border.width: 1
+ radius: 2
+
+ states: [
+ State {
+ name: "normal"
+ when: !control.down
+ },
+ State {
+ name: "down"
+ when: control.down
+ PropertyChanges {
+ buttonBackground.border.color: Theme.mainColorDarker
+ }
+ }
+ ]
+ }
+
+ contentItem: Text {
+ id: textItem
+ text: control.text
+
+ font: control.font
+ opacity: enabled ? 1.0 : 0.3
+ color: Theme.mainColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+
+ states: [
+ State {
+ name: "normal"
+ when: !control.down
+ },
+ State {
+ name: "down"
+ when: control.down
+ PropertyChanges {
+ textItem.color: Theme.mainColorDarker
+ }
+ }
+ ]
+ }
+}
+
diff --git a/examples/quickcontrols/flatstyle/imports/Flat/CheckBox.qml b/examples/quickcontrols/flatstyle/imports/Flat/CheckBox.qml
new file mode 100644
index 0000000000..ef6a4307a4
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/imports/Flat/CheckBox.qml
@@ -0,0 +1,92 @@
+// 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 Theme
+
+T.CheckBox {
+ id: control
+
+ font: Theme.font
+
+ implicitWidth: Math.max(background ? background.implicitWidth : 0,
+ contentItem.implicitWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(background ? background.implicitHeight : 0,
+ Math.max(contentItem.implicitHeight,
+ indicator ? indicator.implicitHeight : 0) + topPadding + bottomPadding)
+ leftPadding: 4
+ indicator: Rectangle {
+ id: checkboxHandle
+ implicitWidth: Theme.baseSize * 2.6
+ implicitHeight: Theme.baseSize * 2.6
+ x: control.leftPadding
+ anchors.verticalCenter: parent.verticalCenter
+ radius: 2
+ border.color: Theme.mainColor
+
+ Rectangle {
+ id: rectangle
+ width: Theme.baseSize * 1.4
+ height: Theme.baseSize * 1.4
+ x: Theme.baseSize * 0.6
+ y: Theme.baseSize * 0.6
+ radius: Theme.baseSize * 0.4
+ visible: false
+ color: Theme.mainColor
+ }
+
+ states: [
+ State {
+ name: "unchecked"
+ when: !control.checked && !control.down
+ },
+ State {
+ name: "checked"
+ when: control.checked && !control.down
+
+ PropertyChanges {
+ rectangle.visible: true
+ }
+ },
+ State {
+ name: "unchecked_down"
+ when: !control.checked && control.down
+
+ PropertyChanges {
+ rectangle.color: Theme.mainColorDarker
+ checkboxHandle.border.color: Theme.mainColorDarker
+ }
+ },
+ State {
+ name: "checked_down"
+ extend: "unchecked_down"
+ when: control.checked && control.down
+
+ PropertyChanges {
+ rectangle.visible: true
+ }
+ }
+ ]
+ }
+
+ background: Rectangle {
+ implicitWidth: 140
+ implicitHeight: Theme.baseSize * 3.8
+ color: Theme.lightGray
+ border.color: Theme.gray
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator.width + 4
+
+ text: control.text
+ font: control.font
+ color: Theme.dark
+ elide: Text.ElideRight
+ visible: control.text
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ }
+}
+
diff --git a/examples/quickcontrols/flatstyle/imports/Flat/Switch.qml b/examples/quickcontrols/flatstyle/imports/Flat/Switch.qml
new file mode 100644
index 0000000000..25f1a7d49b
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/imports/Flat/Switch.qml
@@ -0,0 +1,88 @@
+// 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 Theme
+
+T.Switch {
+ id: control
+
+ implicitWidth: indicator.implicitWidth
+ implicitHeight: background.implicitHeight
+
+ background: Rectangle {
+ implicitWidth: 140
+ implicitHeight: Theme.baseSize * 3.8
+ color: Theme.lightGray
+ border.color: Theme.gray
+ }
+
+ leftPadding: 4
+
+ indicator: Rectangle {
+ id: switchHandle
+ implicitWidth: Theme.baseSize * 4.8
+ implicitHeight: Theme.baseSize * 2.6
+ x: control.leftPadding
+ anchors.verticalCenter: parent.verticalCenter
+ radius: Theme.baseSize * 1.3
+ color: Theme.light
+ border.color: Theme.lightGray
+
+ Rectangle {
+ id: nub
+
+ width: Theme.baseSize * 2.6
+ height: Theme.baseSize * 2.6
+ radius: Theme.baseSize * 1.3
+ color: Theme.light
+ border.color: Theme.gray
+ }
+
+ states: [
+ State {
+ name: "off"
+ when: !control.checked && !control.down
+ },
+ State {
+ name: "on"
+ when: control.checked && !control.down
+
+ PropertyChanges {
+ switchHandle {
+ color: Theme.mainColor
+ border.color: Theme.mainColor
+ }
+ nub.x: switchHandle.width - nub.width
+
+ }
+ },
+ State {
+ name: "off_down"
+ when: !control.checked && control.down
+
+ PropertyChanges {
+ nub.color: Theme.light
+ }
+
+ },
+ State {
+ name: "on_down"
+ extend: "off_down"
+ when: control.checked && control.down
+
+ PropertyChanges {
+ nub {
+ x: switchHandle.width - nub.width
+ color: Theme.light
+ }
+ switchHandle {
+ color: Theme.mainColorDarker
+ border.color: Theme.mainColorDarker
+ }
+ }
+ }
+ ]
+ }
+}
diff --git a/examples/quickcontrols/flatstyle/imports/Flat/qmldir b/examples/quickcontrols/flatstyle/imports/Flat/qmldir
new file mode 100644
index 0000000000..451a865969
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/imports/Flat/qmldir
@@ -0,0 +1,5 @@
+module Flat
+
+Button 1.0 Button.qml
+CheckBox 1.0 CheckBox.qml
+Switch 1.0 Switch.qml
diff --git a/examples/quickcontrols/flatstyle/imports/Theme/Theme.qml b/examples/quickcontrols/flatstyle/imports/Theme/Theme.qml
new file mode 100644
index 0000000000..f4d5156989
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/imports/Theme/Theme.qml
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+pragma Singleton
+
+import QtQuick
+
+QtObject {
+ readonly property color gray: "#b2b1b1"
+ readonly property color lightGray: "#dddddd"
+ readonly property color light: "#ffffff"
+ readonly property color blue: "#2d548b"
+ property color mainColor: "#17a81a"
+ readonly property color dark: "#222222"
+ readonly property color mainColorDarker: Qt.darker(mainColor, 1.5)
+
+ property int baseSize: 10
+
+ readonly property int smallSize: 10
+ readonly property int largeSize: 16
+
+ property font font
+ font.bold: true
+ font.underline: false
+ font.pixelSize: 14
+ font.family: "arial"
+}
diff --git a/examples/quickcontrols/flatstyle/imports/Theme/qmldir b/examples/quickcontrols/flatstyle/imports/Theme/qmldir
new file mode 100644
index 0000000000..4a58c13a90
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/imports/Theme/qmldir
@@ -0,0 +1,2 @@
+module Theme
+singleton Theme 1.0 Theme.qml
diff --git a/examples/quickcontrols/flatstyle/main.cpp b/examples/quickcontrols/flatstyle/main.cpp
new file mode 100644
index 0000000000..4aadd92015
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/main.cpp
@@ -0,0 +1,16 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+#include <QQmlApplicationEngine>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ QQmlApplicationEngine engine;
+ engine.addImportPath(":/imports");
+ engine.load(QUrl(QStringLiteral("qrc:/flatstyle.qml")));
+
+ return app.exec();
+}
diff --git a/examples/quickcontrols/flatstyle/qtquickcontrols2.conf b/examples/quickcontrols/flatstyle/qtquickcontrols2.conf
new file mode 100644
index 0000000000..9cd59e5aa0
--- /dev/null
+++ b/examples/quickcontrols/flatstyle/qtquickcontrols2.conf
@@ -0,0 +1,2 @@
+[Controls]
+Style=Flat
diff --git a/examples/quickcontrols/gallery/+Material/ToolBar.qml b/examples/quickcontrols/gallery/+Material/ToolBar.qml
new file mode 100644
index 0000000000..f7ecbf116e
--- /dev/null
+++ b/examples/quickcontrols/gallery/+Material/ToolBar.qml
@@ -0,0 +1,8 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick.Controls.Material
+
+ToolBar {
+ Material.foreground: "white"
+}
diff --git a/examples/quickcontrols/gallery/CMakeLists.txt b/examples/quickcontrols/gallery/CMakeLists.txt
new file mode 100644
index 0000000000..40f393d6d2
--- /dev/null
+++ b/examples/quickcontrols/gallery/CMakeLists.txt
@@ -0,0 +1,106 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# 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)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2)
+
+qt_add_executable(galleryexample WIN32 MACOSX_BUNDLE
+ gallery.cpp
+)
+
+qt_add_qml_module(galleryexample
+ URI gallery
+ NO_RESOURCE_TARGET_PATH
+ QML_FILES
+ "+Material/ToolBar.qml"
+ "ToolBar.qml"
+ "gallery.qml"
+ "pages/BusyIndicatorPage.qml"
+ "pages/ButtonPage.qml"
+ "pages/CheckBoxPage.qml"
+ "pages/ComboBoxPage.qml"
+ "pages/DelayButtonPage.qml"
+ "pages/DelegatePage.qml"
+ "pages/DialPage.qml"
+ "pages/DialogPage.qml"
+ "pages/FramePage.qml"
+ "pages/GroupBoxPage.qml"
+ "pages/PageIndicatorPage.qml"
+ "pages/ProgressBarPage.qml"
+ "pages/RadioButtonPage.qml"
+ "pages/RangeSliderPage.qml"
+ "pages/ScrollBarPage.qml"
+ "pages/ScrollIndicatorPage.qml"
+ "pages/ScrollablePage.qml"
+ "pages/SliderPage.qml"
+ "pages/SpinBoxPage.qml"
+ "pages/StackViewPage.qml"
+ "pages/SwipeViewPage.qml"
+ "pages/SwitchPage.qml"
+ "pages/TabBarPage.qml"
+ "pages/TextAreaPage.qml"
+ "pages/TextFieldPage.qml"
+ "pages/ToolTipPage.qml"
+ "pages/TumblerPage.qml"
+ RESOURCES
+ "icons/gallery/20x20/back.png"
+ "icons/gallery/20x20/drawer.png"
+ "icons/gallery/20x20/menu.png"
+ "icons/gallery/20x20@2/back.png"
+ "icons/gallery/20x20@2/drawer.png"
+ "icons/gallery/20x20@2/menu.png"
+ "icons/gallery/20x20@3/back.png"
+ "icons/gallery/20x20@3/drawer.png"
+ "icons/gallery/20x20@3/menu.png"
+ "icons/gallery/20x20@4/back.png"
+ "icons/gallery/20x20@4/drawer.png"
+ "icons/gallery/20x20@4/menu.png"
+ "icons/gallery/index.theme"
+ "images/arrow.png"
+ "images/arrow@2x.png"
+ "images/arrow@3x.png"
+ "images/arrow@4x.png"
+ "images/arrows.png"
+ "images/arrows@2x.png"
+ "images/arrows@3x.png"
+ "images/arrows@4x.png"
+ "images/qt-logo.png"
+ "images/qt-logo@2x.png"
+ "images/qt-logo@3x.png"
+ "images/qt-logo@4x.png"
+ "qmldir"
+ "qtquickcontrols2.conf"
+)
+
+target_link_libraries(galleryexample 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(galleryexample PRIVATE Qt6::QuickTemplates2)
+endif()
+
+install(TARGETS galleryexample
+ 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/ToolBar.qml b/examples/quickcontrols/gallery/ToolBar.qml
new file mode 100644
index 0000000000..ffbf422a76
--- /dev/null
+++ b/examples/quickcontrols/gallery/ToolBar.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick.Controls
+
+ToolBar {}
diff --git a/examples/quickcontrols/gallery/doc/images/qtquickcontrols-gallery-drawer.png b/examples/quickcontrols/gallery/doc/images/qtquickcontrols-gallery-drawer.png
new file mode 100644
index 0000000000..0df43fbc4b
--- /dev/null
+++ b/examples/quickcontrols/gallery/doc/images/qtquickcontrols-gallery-drawer.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/doc/images/qtquickcontrols-gallery-menu.png b/examples/quickcontrols/gallery/doc/images/qtquickcontrols-gallery-menu.png
new file mode 100644
index 0000000000..3bdaae942a
--- /dev/null
+++ b/examples/quickcontrols/gallery/doc/images/qtquickcontrols-gallery-menu.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/doc/images/qtquickcontrols-gallery-welcome.png b/examples/quickcontrols/gallery/doc/images/qtquickcontrols-gallery-welcome.png
new file mode 100644
index 0000000000..ded30381d2
--- /dev/null
+++ b/examples/quickcontrols/gallery/doc/images/qtquickcontrols-gallery-welcome.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/doc/src/qtquickcontrols-gallery.qdoc b/examples/quickcontrols/gallery/doc/src/qtquickcontrols-gallery.qdoc
new file mode 100644
index 0000000000..2b17866f21
--- /dev/null
+++ b/examples/quickcontrols/gallery/doc/src/qtquickcontrols-gallery.qdoc
@@ -0,0 +1,56 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example gallery
+ \keyword Qt Quick Controls - Gallery
+ \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
+ <div class="table"><table style="background:transparent; border:0px">
+ <tr><td style="border:0px">
+ \endraw
+ \image qtquickcontrols-gallery-welcome.png
+ \caption Welcome Screen
+ \raw HTML
+ </td><td style="border:0px">
+ \endraw
+ \image qtquickcontrols-gallery-drawer.png
+ \caption Side Drawer
+ \raw HTML
+ </td><td style="border:0px">
+ \endraw
+ \image qtquickcontrols-gallery-menu.png
+ \caption Options Menu
+ \raw HTML
+ </td></tr>
+ </table></div>
+ \endraw
+
+ The gallery example is a simple application with a drawer menu that contains
+ all the \l {Qt Quick Controls}. Each menu item opens a page that shows the
+ 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.cpp b/examples/quickcontrols/gallery/gallery.cpp
new file mode 100644
index 0000000000..0242f93b9f
--- /dev/null
+++ b/examples/quickcontrols/gallery/gallery.cpp
@@ -0,0 +1,50 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+#include <QQmlContext>
+#include <QSettings>
+#include <QQuickStyle>
+#include <QIcon>
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication::setApplicationName("Gallery");
+ QGuiApplication::setOrganizationName("QtProject");
+
+ QGuiApplication app(argc, argv);
+
+ QIcon::setThemeName("gallery");
+
+ QSettings settings;
+ if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE"))
+ QQuickStyle::setStyle(settings.value("style").toString());
+
+ // If this is the first time we're running the application,
+ // we need to set a style in the settings so that the QML
+ // can find it in the list of built-in styles.
+ const QString styleInSettings = settings.value("style").toString();
+ if (styleInSettings.isEmpty())
+ settings.setValue(QLatin1String("style"), QQuickStyle::name());
+
+ QQmlApplicationEngine engine;
+
+ QStringList builtInStyles = { QLatin1String("Basic"), QLatin1String("Fusion"),
+ QLatin1String("Imagine"), QLatin1String("Material"), QLatin1String("Universal") };
+#if defined(Q_OS_MACOS)
+ builtInStyles << QLatin1String("macOS");
+ builtInStyles << QLatin1String("iOS");
+#elif defined(Q_OS_IOS)
+ builtInStyles << QLatin1String("iOS");
+#elif defined(Q_OS_WINDOWS)
+ builtInStyles << QLatin1String("Windows");
+#endif
+
+ engine.setInitialProperties({{ "builtInStyles", builtInStyles }});
+ engine.load(QUrl("qrc:/gallery.qml"));
+ if (engine.rootObjects().isEmpty())
+ return -1;
+
+ return app.exec();
+}
diff --git a/examples/quickcontrols/gallery/gallery.pro b/examples/quickcontrols/gallery/gallery.pro
new file mode 100644
index 0000000000..42dc098425
--- /dev/null
+++ b/examples/quickcontrols/gallery/gallery.pro
@@ -0,0 +1,68 @@
+TEMPLATE = app
+TARGET = gallery
+QT += quick quickcontrols2
+
+SOURCES += \
+ gallery.cpp
+
+RESOURCES += \
+ gallery.qml \
+ pages/BusyIndicatorPage.qml \
+ pages/ButtonPage.qml \
+ pages/CheckBoxPage.qml \
+ pages/ComboBoxPage.qml \
+ pages/DelayButtonPage.qml \
+ pages/DelegatePage.qml \
+ pages/DialogPage.qml \
+ pages/DialPage.qml \
+ pages/FramePage.qml \
+ pages/GroupBoxPage.qml \
+ pages/PageIndicatorPage.qml \
+ pages/ProgressBarPage.qml \
+ pages/RadioButtonPage.qml \
+ pages/RangeSliderPage.qml \
+ pages/ScrollablePage.qml \
+ pages/ScrollBarPage.qml \
+ pages/ScrollIndicatorPage.qml \
+ pages/SliderPage.qml \
+ pages/SpinBoxPage.qml \
+ pages/StackViewPage.qml \
+ pages/SwipeViewPage.qml \
+ pages/SwitchPage.qml \
+ pages/TabBarPage.qml \
+ pages/TextAreaPage.qml \
+ pages/TextFieldPage.qml \
+ pages/ToolTipPage.qml \
+ pages/TumblerPage.qml \
+ qmldir \
+ qtquickcontrols2.conf \
+ icons/gallery/index.theme \
+ icons/gallery/20x20/back.png \
+ icons/gallery/20x20/drawer.png \
+ icons/gallery/20x20/menu.png \
+ icons/gallery/20x20@2/back.png \
+ icons/gallery/20x20@2/drawer.png \
+ icons/gallery/20x20@2/menu.png \
+ icons/gallery/20x20@3/back.png \
+ icons/gallery/20x20@3/drawer.png \
+ icons/gallery/20x20@3/menu.png \
+ icons/gallery/20x20@4/back.png \
+ icons/gallery/20x20@4/drawer.png \
+ icons/gallery/20x20@4/menu.png \
+ images/arrow.png \
+ images/arrow@2x.png \
+ images/arrow@3x.png \
+ images/arrow@4x.png \
+ images/arrows.png \
+ images/arrows@2x.png \
+ images/arrows@3x.png \
+ images/arrows@4x.png \
+ images/qt-logo.png \
+ images/qt-logo@2x.png \
+ images/qt-logo@3x.png \
+ images/qt-logo@4x.png \
+ ToolBar.qml \
+ +Material/ToolBar.qml
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/gallery
+INSTALLS += target
diff --git a/examples/quickcontrols/gallery/gallery.qml b/examples/quickcontrols/gallery/gallery.qml
new file mode 100644
index 0000000000..5caab6aba6
--- /dev/null
+++ b/examples/quickcontrols/gallery/gallery.qml
@@ -0,0 +1,325 @@
+// 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
+import QtQuick.Controls
+
+import "." as App
+
+ApplicationWindow {
+ id: window
+ width: 360
+ height: 520
+ visible: true
+ title: qsTr("Qt Quick Controls")
+
+ //! [orientation]
+ readonly property bool portraitMode: !orientationCheckBox.checked || window.width < window.height
+ //! [orientation]
+
+ function help() {
+ let displayingControl = listView.currentIndex !== -1
+ let currentControlName = displayingControl
+ ? listView.model.get(listView.currentIndex).title.toLowerCase() : ""
+ let url = "https://doc.qt.io/qt-6/"
+ + (displayingControl
+ ? "qml-qtquick-controls2-" + currentControlName + ".html"
+ : "qtquick-controls2-qmlmodule.html");
+ Qt.openUrlExternally(url)
+ }
+
+ required property var builtInStyles
+
+ Settings {
+ id: settings
+ property string style
+ }
+
+ Shortcut {
+ sequences: ["Esc", "Back"]
+ enabled: stackView.depth > 1
+ onActivated: navigateBackAction.trigger()
+ }
+
+ Shortcut {
+ sequence: StandardKey.HelpContents
+ onActivated: window.help()
+ }
+
+ Action {
+ id: navigateBackAction
+ icon.name: stackView.depth > 1 ? "back" : "drawer"
+ onTriggered: {
+ if (stackView.depth > 1) {
+ stackView.pop()
+ listView.currentIndex = -1
+ } else {
+ drawer.open()
+ }
+ }
+ }
+
+ Shortcut {
+ sequence: "Menu"
+ onActivated: optionsMenuAction.trigger()
+ }
+
+ Action {
+ id: optionsMenuAction
+ icon.name: "menu"
+ onTriggered: optionsMenu.open()
+ }
+
+ header: App.ToolBar {
+ 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 as ItemDelegate).text : qsTr("Gallery")
+ font.pixelSize: 20
+ elide: Label.ElideRight
+ horizontalAlignment: Qt.AlignHCenter
+ verticalAlignment: Qt.AlignVCenter
+ Layout.fillWidth: true
+ }
+
+ ToolButton {
+ action: optionsMenuAction
+
+ Menu {
+ id: optionsMenu
+ x: parent.width - width
+ transformOrigin: Menu.TopRight
+
+ Action {
+ text: qsTr("Settings")
+ onTriggered: settingsDialog.open()
+ }
+ Action {
+ text: qsTr("Help")
+ onTriggered: window.help()
+ }
+ Action {
+ text: qsTr("About")
+ onTriggered: aboutDialog.open()
+ }
+ }
+ }
+ }
+ }
+
+ Drawer {
+ id: drawer
+
+ width: Math.min(window.width, window.height) / 3 * 2
+ height: window.height
+ modal: window.portraitMode
+ interactive: window.portraitMode ? (stackView.depth === 1) : false
+ position: window.portraitMode ? 0 : 1
+ visible: !window.portraitMode
+
+ ListView {
+ id: listView
+
+ focus: true
+ 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 {
+ 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(source)
+ if (window.portraitMode)
+ drawer.close()
+ }
+ }
+
+ ScrollIndicator.vertical: ScrollIndicator { }
+ }
+ }
+
+ StackView {
+ id: stackView
+
+ anchors.fill: parent
+ anchors.leftMargin: !window.portraitMode ? drawer.width : undefined
+
+ initialItem: Pane {
+ id: pane
+
+ Image {
+ id: logo
+ width: pane.availableWidth / 2
+ height: pane.availableHeight / 2
+ anchors.centerIn: parent
+ anchors.verticalCenterOffset: -50
+ fillMode: Image.PreserveAspectFit
+ source: "images/qt-logo.png"
+ }
+
+ Label {
+ 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
+ anchors.right: parent.right
+ anchors.bottom: arrow.top
+ horizontalAlignment: Label.AlignHCenter
+ verticalAlignment: Label.AlignVCenter
+ wrapMode: Label.Wrap
+ }
+
+ Image {
+ id: arrow
+ source: "images/arrow.png"
+ anchors.left: parent.left
+ anchors.bottom: parent.bottom
+ visible: window.portraitMode
+ }
+ }
+ }
+
+ Dialog {
+ id: settingsDialog
+ x: Math.round((window.width - width) / 2)
+ y: Math.round(window.height / 6)
+ width: Math.round(Math.min(window.width, window.height) / 3 * 2)
+ modal: true
+ focus: true
+ title: qsTr("Settings")
+
+ standardButtons: Dialog.Ok | Dialog.Cancel
+ onAccepted: {
+ settings.style = styleBox.displayText
+ settingsDialog.close()
+ }
+ onRejected: {
+ styleBox.currentIndex = styleBox.styleIndex
+ settingsDialog.close()
+ }
+
+ contentItem: ColumnLayout {
+ id: settingsColumn
+ spacing: 20
+
+ RowLayout {
+ spacing: 10
+
+ Label {
+ text: qsTr("Style:")
+ }
+
+ ComboBox {
+ id: styleBox
+ property int styleIndex: -1
+ model: window.builtInStyles
+ Component.onCompleted: {
+ styleIndex = find(settings.style, Qt.MatchFixedString)
+ if (styleIndex !== -1)
+ currentIndex = styleIndex
+ }
+ Layout.fillWidth: true
+ }
+ }
+
+ CheckBox {
+ id: orientationCheckBox
+ text: qsTr("Enable Landscape")
+ checked: false
+ Layout.fillWidth: true
+ }
+
+ Label {
+ text: qsTr("Restart required")
+ color: "#e41e25"
+ opacity: styleBox.currentIndex !== styleBox.styleIndex ? 1.0 : 0.0
+ horizontalAlignment: Label.AlignHCenter
+ verticalAlignment: Label.AlignVCenter
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ }
+ }
+ }
+
+ Dialog {
+ id: aboutDialog
+ modal: true
+ focus: true
+ title: qsTr("About")
+ x: (window.width - width) / 2
+ y: window.height / 6
+ width: Math.min(window.width, window.height) / 3 * 2
+ contentHeight: aboutColumn.height
+
+ Column {
+ id: aboutColumn
+ spacing: 20
+
+ Label {
+ width: aboutDialog.availableWidth
+ 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: 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/icons/gallery/20x20/back.png b/examples/quickcontrols/gallery/icons/gallery/20x20/back.png
new file mode 100644
index 0000000000..1f89ee058c
--- /dev/null
+++ b/examples/quickcontrols/gallery/icons/gallery/20x20/back.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/icons/gallery/20x20/drawer.png b/examples/quickcontrols/gallery/icons/gallery/20x20/drawer.png
new file mode 100644
index 0000000000..1e974efae8
--- /dev/null
+++ b/examples/quickcontrols/gallery/icons/gallery/20x20/drawer.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/icons/gallery/20x20/menu.png b/examples/quickcontrols/gallery/icons/gallery/20x20/menu.png
new file mode 100644
index 0000000000..a10473d9e1
--- /dev/null
+++ b/examples/quickcontrols/gallery/icons/gallery/20x20/menu.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/icons/gallery/20x20@2/back.png b/examples/quickcontrols/gallery/icons/gallery/20x20@2/back.png
new file mode 100644
index 0000000000..88e290b132
--- /dev/null
+++ b/examples/quickcontrols/gallery/icons/gallery/20x20@2/back.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/icons/gallery/20x20@2/drawer.png b/examples/quickcontrols/gallery/icons/gallery/20x20@2/drawer.png
new file mode 100644
index 0000000000..eba3b6cccf
--- /dev/null
+++ b/examples/quickcontrols/gallery/icons/gallery/20x20@2/drawer.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/icons/gallery/20x20@2/menu.png b/examples/quickcontrols/gallery/icons/gallery/20x20@2/menu.png
new file mode 100644
index 0000000000..649c2a08c6
--- /dev/null
+++ b/examples/quickcontrols/gallery/icons/gallery/20x20@2/menu.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/icons/gallery/20x20@3/back.png b/examples/quickcontrols/gallery/icons/gallery/20x20@3/back.png
new file mode 100644
index 0000000000..4402c7d30b
--- /dev/null
+++ b/examples/quickcontrols/gallery/icons/gallery/20x20@3/back.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/icons/gallery/20x20@3/drawer.png b/examples/quickcontrols/gallery/icons/gallery/20x20@3/drawer.png
new file mode 100644
index 0000000000..3584ed6d8b
--- /dev/null
+++ b/examples/quickcontrols/gallery/icons/gallery/20x20@3/drawer.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/icons/gallery/20x20@3/menu.png b/examples/quickcontrols/gallery/icons/gallery/20x20@3/menu.png
new file mode 100644
index 0000000000..9554b6952b
--- /dev/null
+++ b/examples/quickcontrols/gallery/icons/gallery/20x20@3/menu.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/icons/gallery/20x20@4/back.png b/examples/quickcontrols/gallery/icons/gallery/20x20@4/back.png
new file mode 100644
index 0000000000..9982478c18
--- /dev/null
+++ b/examples/quickcontrols/gallery/icons/gallery/20x20@4/back.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/icons/gallery/20x20@4/drawer.png b/examples/quickcontrols/gallery/icons/gallery/20x20@4/drawer.png
new file mode 100644
index 0000000000..60d93aff7b
--- /dev/null
+++ b/examples/quickcontrols/gallery/icons/gallery/20x20@4/drawer.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/icons/gallery/20x20@4/menu.png b/examples/quickcontrols/gallery/icons/gallery/20x20@4/menu.png
new file mode 100644
index 0000000000..187c171cde
--- /dev/null
+++ b/examples/quickcontrols/gallery/icons/gallery/20x20@4/menu.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/icons/gallery/index.theme b/examples/quickcontrols/gallery/icons/gallery/index.theme
new file mode 100644
index 0000000000..a1bcd5e03c
--- /dev/null
+++ b/examples/quickcontrols/gallery/icons/gallery/index.theme
@@ -0,0 +1,24 @@
+[Icon Theme]
+Name=Gallery
+Comment=Qt Quick Controls 2 Gallery Example Icon Theme
+
+Directories=20x20,20x20@2,20x20@3,20x20@4
+
+[20x20]
+Size=20
+Type=Fixed
+
+[20x20@2]
+Size=20
+Scale=2
+Type=Fixed
+
+[20x20@3]
+Size=20
+Scale=3
+Type=Fixed
+
+[20x20@4]
+Size=20
+Scale=4
+Type=Fixed
diff --git a/examples/quickcontrols/gallery/images/arrow.png b/examples/quickcontrols/gallery/images/arrow.png
new file mode 100644
index 0000000000..9835108eb9
--- /dev/null
+++ b/examples/quickcontrols/gallery/images/arrow.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/images/arrow@2x.png b/examples/quickcontrols/gallery/images/arrow@2x.png
new file mode 100644
index 0000000000..a5187d48cf
--- /dev/null
+++ b/examples/quickcontrols/gallery/images/arrow@2x.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/images/arrow@3x.png b/examples/quickcontrols/gallery/images/arrow@3x.png
new file mode 100644
index 0000000000..a512f648c8
--- /dev/null
+++ b/examples/quickcontrols/gallery/images/arrow@3x.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/images/arrow@4x.png b/examples/quickcontrols/gallery/images/arrow@4x.png
new file mode 100644
index 0000000000..fd893ebb0d
--- /dev/null
+++ b/examples/quickcontrols/gallery/images/arrow@4x.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/images/arrows.png b/examples/quickcontrols/gallery/images/arrows.png
new file mode 100644
index 0000000000..3a4cc9b95f
--- /dev/null
+++ b/examples/quickcontrols/gallery/images/arrows.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/images/arrows@2x.png b/examples/quickcontrols/gallery/images/arrows@2x.png
new file mode 100644
index 0000000000..8c80a2b45b
--- /dev/null
+++ b/examples/quickcontrols/gallery/images/arrows@2x.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/images/arrows@3x.png b/examples/quickcontrols/gallery/images/arrows@3x.png
new file mode 100644
index 0000000000..22f23cefb9
--- /dev/null
+++ b/examples/quickcontrols/gallery/images/arrows@3x.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/images/arrows@4x.png b/examples/quickcontrols/gallery/images/arrows@4x.png
new file mode 100644
index 0000000000..6d1afeef5c
--- /dev/null
+++ b/examples/quickcontrols/gallery/images/arrows@4x.png
Binary files differ
diff --git a/examples/quickcontrols/gallery/images/qt-logo.png b/examples/quickcontrols/gallery/images/qt-logo.png
new file mode 100644
index 0000000000..05684292b8
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..2b7683ca0f
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..7cc98348d9
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..0e1bc9d93c
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..7cdc4b49f5
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/BusyIndicatorPage.qml
@@ -0,0 +1,28 @@
+// 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
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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 {
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/ButtonPage.qml b/examples/quickcontrols/gallery/pages/ButtonPage.qml
new file mode 100644
index 0000000000..e23bfb8a89
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/ButtonPage.qml
@@ -0,0 +1,44 @@
+// 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
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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 {
+ spacing: 20
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Button {
+ text: qsTr("First")
+ Layout.fillWidth: true
+ }
+ Button {
+ id: button
+ text: qsTr("Second")
+ highlighted: true
+ Layout.fillWidth: true
+ }
+ Button {
+ text: qsTr("Third")
+ enabled: false
+ Layout.fillWidth: true
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/CheckBoxPage.qml b/examples/quickcontrols/gallery/pages/CheckBoxPage.qml
new file mode 100644
index 0000000000..474bab37fd
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/CheckBoxPage.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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 {
+ spacing: 20
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ CheckBox {
+ text: qsTr("First")
+ checked: true
+ }
+ CheckBox {
+ text: qsTr("Second")
+ }
+ CheckBox {
+ text: qsTr("Third")
+ checked: true
+ enabled: false
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/ComboBoxPage.qml b/examples/quickcontrols/gallery/pages/ComboBoxPage.qml
new file mode 100644
index 0000000000..075859717e
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/ComboBoxPage.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 QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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: [qsTr("First"), qsTr("Second"), qsTr("Third")]
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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 {
+ ListElement { text: qsTr("Banana") }
+ ListElement { text: qsTr("Apple") }
+ ListElement { text: qsTr("Coconut") }
+ }
+ onAccepted: {
+ if (find(editText) === -1)
+ 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
new file mode 100644
index 0000000000..7e4470bf34
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/DelayButtonPage.qml
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("DelayButton is a checkable button that incorporates a delay before the "
+ + "button is activated. This delay prevents accidental presses.")
+ }
+
+ DelayButton {
+ text: qsTr("DelayButton")
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/DelegatePage.qml b/examples/quickcontrols/gallery/pages/DelegatePage.qml
new file mode 100644
index 0000000000..519fffc6d2
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/DelegatePage.qml
@@ -0,0 +1,179 @@
+// 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 {
+ ColumnLayout {
+ spacing: 40
+ anchors.fill: parent
+ anchors.topMargin: 20
+
+ Label {
+ Layout.fillWidth: true
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("Delegate controls are used as delegates in views such as ListView.")
+ }
+
+ ButtonGroup {
+ id: radioButtonGroup
+ }
+
+ ListView {
+ id: listView
+ clip: true
+ section.property: "type"
+ section.delegate: Pane {
+ id: sectionPane
+ required property string section
+ width: ListView.view.width
+ height: sectionLabel.implicitHeight + 20
+ Label {
+ id: sectionLabel
+ 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.view.width
+ sourceComponent: delegateComponentMap[type]
+
+ required property string value
+ required property string type
+ required property var model
+ required property int index
+
+ property ListView view: listView
+
+ 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()
+ }
+ }
+
+ Component {
+ id: checkDelegateComponent
+
+ CheckDelegate {
+ text: delegateLoader.value
+ }
+ }
+
+ Component {
+ id: radioDelegateComponent
+
+ RadioDelegate {
+ text: delegateLoader.value
+
+ ButtonGroup.group: radioButtonGroup
+ }
+ }
+
+ Component {
+ id: switchDelegateComponent
+
+ SwitchDelegate {
+ text: delegateLoader.value
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/DialPage.qml b/examples/quickcontrols/gallery/pages/DialPage.qml
new file mode 100644
index 0000000000..6de9703689
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/DialPage.qml
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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 {
+ value: 0.5
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/DialogPage.qml b/examples/quickcontrols/gallery/pages/DialogPage.qml
new file mode 100644
index 0000000000..d07fa8be54
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/DialogPage.qml
@@ -0,0 +1,179 @@
+// 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
+
+ScrollablePage {
+ id: page
+
+ readonly property int buttonWidth: Math.max(button.implicitWidth, Math.min(button.implicitWidth * 2, page.availableWidth / 3))
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("Dialog is a popup that is mostly used for short-term tasks "
+ + "and brief communications with the user.")
+ }
+
+ Button {
+ text: qsTr("Message")
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: page.buttonWidth
+ onClicked: messageDialog.open()
+
+ Dialog {
+ id: messageDialog
+
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+
+ title: qsTr("Message")
+
+ Label {
+ text: qsTr("Lorem ipsum dolor sit amet...")
+ }
+ }
+ }
+
+ Button {
+ id: button
+ text: qsTr("Confirmation")
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: page.buttonWidth
+ onClicked: confirmationDialog.open()
+
+ Dialog {
+ id: confirmationDialog
+
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ parent: Overlay.overlay
+
+ modal: true
+ title: qsTr("Confirmation")
+ standardButtons: Dialog.Yes | Dialog.No
+
+ Column {
+ spacing: 20
+ anchors.fill: parent
+ Label {
+ text: qsTr("The document has been modified.\nDo you want to save your changes?")
+ }
+ CheckBox {
+ text: qsTr("Do not ask again")
+ anchors.right: parent.right
+ }
+ }
+ }
+ }
+
+ Button {
+ text: qsTr("Content")
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: page.buttonWidth
+ onClicked: contentDialog.open()
+
+ Dialog {
+ id: contentDialog
+
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: Math.min(page.width, page.height) / 3 * 2
+ contentHeight: logo.height * 2
+ parent: Overlay.overlay
+
+ modal: true
+ title: qsTr("Content")
+ standardButtons: Dialog.Close
+
+ Flickable {
+ id: flickable
+ clip: true
+ anchors.fill: parent
+ contentHeight: column.height
+
+ Column {
+ id: column
+ spacing: 20
+ width: parent.width
+
+ Image {
+ id: logo
+ width: parent.width / 2
+ anchors.horizontalCenter: parent.horizontalCenter
+ fillMode: Image.PreserveAspectFit
+ source: "../images/qt-logo.png"
+ }
+
+ Label {
+ width: parent.width
+ 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.")
+ wrapMode: Label.Wrap
+ }
+ }
+
+ ScrollIndicator.vertical: ScrollIndicator {
+ parent: contentDialog.contentItem
+ anchors.top: flickable.top
+ anchors.bottom: flickable.bottom
+ anchors.right: parent.right
+ anchors.rightMargin: -contentDialog.rightPadding + 1
+ }
+ }
+ }
+ }
+
+ Button {
+ text: qsTr("Input")
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: page.buttonWidth
+ onClicked: inputDialog.open()
+
+ Dialog {
+ id: inputDialog
+
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ parent: Overlay.overlay
+
+ focus: true
+ modal: true
+ title: qsTr("Input")
+ standardButtons: Dialog.Ok | Dialog.Cancel
+
+ ColumnLayout {
+ spacing: 20
+ anchors.fill: parent
+ Label {
+ elide: Label.ElideRight
+ text: qsTr("Please enter the credentials:")
+ Layout.fillWidth: true
+ }
+ TextField {
+ focus: true
+ placeholderText: qsTr("Username")
+ Layout.fillWidth: true
+ }
+ TextField {
+ 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
new file mode 100644
index 0000000000..b32d8af00c
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/FramePage.qml
@@ -0,0 +1,47 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ readonly property int itemWidth: Math.max(button.implicitWidth, Math.min(button.implicitWidth * 3, page.availableWidth / 3 * 2))
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("Frame is used to layout a logical group of controls together, within a visual frame.")
+ }
+
+ Frame {
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Column {
+ spacing: 20
+ width: page.itemWidth
+
+ RadioButton {
+ text: qsTr("First")
+ checked: true
+ width: parent.width
+ }
+ RadioButton {
+ id: button
+ text: qsTr("Second")
+ width: parent.width
+ }
+ RadioButton {
+ text: qsTr("Third")
+ width: parent.width
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/GroupBoxPage.qml b/examples/quickcontrols/gallery/pages/GroupBoxPage.qml
new file mode 100644
index 0000000000..a30adf8a8f
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/GroupBoxPage.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ readonly property int itemWidth: Math.max(button.implicitWidth, Math.min(button.implicitWidth * 3, page.availableWidth / 3 * 2))
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("A GroupBox provides a frame, a title on top of it, and a logical group of controls within that frame.")
+ }
+
+ GroupBox {
+ title: qsTr("Title")
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Column {
+ spacing: 20
+ width: page.itemWidth
+
+ RadioButton {
+ text: qsTr("First")
+ checked: true
+ width: parent.width
+ }
+ RadioButton {
+ id: button
+ text: qsTr("Second")
+ width: parent.width
+ }
+ RadioButton {
+ text: qsTr("Third")
+ width: parent.width
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/PageIndicatorPage.qml b/examples/quickcontrols/gallery/pages/PageIndicatorPage.qml
new file mode 100644
index 0000000000..13620c1217
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/PageIndicatorPage.qml
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("PageIndicator is used to indicate the currently active page in a container of pages.")
+ }
+
+ PageIndicator {
+ count: 5
+ currentIndex: 2
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/ProgressBarPage.qml b/examples/quickcontrols/gallery/pages/ProgressBarPage.qml
new file mode 100644
index 0000000000..2a3f7158e1
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/ProgressBarPage.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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 {
+ id: bar
+ value: 0.5
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ ProgressBar {
+ indeterminate: true
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/RadioButtonPage.qml b/examples/quickcontrols/gallery/pages/RadioButtonPage.qml
new file mode 100644
index 0000000000..6939d47dba
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/RadioButtonPage.qml
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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 {
+ spacing: 20
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ RadioButton {
+ text: qsTr("First")
+ }
+ RadioButton {
+ text: qsTr("Second")
+ checked: true
+ }
+ RadioButton {
+ text: qsTr("Third")
+ enabled: false
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/RangeSliderPage.qml b/examples/quickcontrols/gallery/pages/RangeSliderPage.qml
new file mode 100644
index 0000000000..03b78040a0
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/RangeSliderPage.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("RangeSlider is used to select a range specified by two values, by sliding each handle along a track.")
+ }
+
+ RangeSlider {
+ id: slider
+ first.value: 0.25
+ second.value: 0.75
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ RangeSlider {
+ orientation: Qt.Vertical
+ first.value: 0.25
+ second.value: 0.75
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/ScrollBarPage.qml b/examples/quickcontrols/gallery/pages/ScrollBarPage.qml
new file mode 100644
index 0000000000..cb23c7e580
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/ScrollBarPage.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Flickable {
+ id: flickable
+
+ contentHeight: pane.height
+
+ Pane {
+ id: pane
+ width: flickable.width
+ height: flickable.height * 1.25
+
+ Column {
+ id: column
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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.")
+ }
+
+ Image {
+ rotation: 90
+ source: "../images/arrows.png"
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+ }
+
+ ScrollBar.vertical: ScrollBar { }
+}
diff --git a/examples/quickcontrols/gallery/pages/ScrollIndicatorPage.qml b/examples/quickcontrols/gallery/pages/ScrollIndicatorPage.qml
new file mode 100644
index 0000000000..5e9c7f5240
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/ScrollIndicatorPage.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Flickable {
+ id: flickable
+
+ contentHeight: pane.height
+
+ Pane {
+ id: pane
+ width: flickable.width
+ height: flickable.height * 1.25
+
+ Column {
+ id: column
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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.")
+ }
+
+ Image {
+ rotation: 90
+ source: "../images/arrows.png"
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+ }
+
+ ScrollIndicator.vertical: ScrollIndicator { }
+}
diff --git a/examples/quickcontrols/gallery/pages/ScrollablePage.qml b/examples/quickcontrols/gallery/pages/ScrollablePage.qml
new file mode 100644
index 0000000000..69bc0cd973
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/ScrollablePage.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Page {
+ id: page
+
+ default property alias content: pane.contentItem
+
+ Flickable {
+ anchors.fill: parent
+ contentHeight: pane.implicitHeight
+ flickableDirection: Flickable.AutoFlickIfNeeded
+
+ Pane {
+ id: pane
+ width: parent.width
+ }
+
+ ScrollIndicator.vertical: ScrollIndicator { }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/SliderPage.qml b/examples/quickcontrols/gallery/pages/SliderPage.qml
new file mode 100644
index 0000000000..bdcfed9fad
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/SliderPage.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("Slider is used to select a value by sliding a handle along a track.")
+ }
+
+ Slider {
+ id: slider
+ value: 0.5
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ Slider {
+ orientation: Qt.Vertical
+ value: 0.5
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/SpinBoxPage.qml b/examples/quickcontrols/gallery/pages/SpinBoxPage.qml
new file mode 100644
index 0000000000..538a7ef209
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/SpinBoxPage.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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 {
+ id: box
+ value: 50
+ anchors.horizontalCenter: parent.horizontalCenter
+ editable: true
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/StackViewPage.qml b/examples/quickcontrols/gallery/pages/StackViewPage.qml
new file mode 100644
index 0000000000..3df1dd114e
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/StackViewPage.qml
@@ -0,0 +1,58 @@
+// 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
+
+StackView {
+ id: stackView
+ initialItem: page
+
+ Component {
+ id: page
+
+ Pane {
+ id: pane
+ width: parent ? parent.width : 0 // TODO: fix null parent on destruction
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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.")
+ }
+
+ Button {
+ id: button
+ 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: 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
new file mode 100644
index 0000000000..ebb2031ff3
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/SwipeViewPage.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Pane {
+ id: pane
+
+ SwipeView {
+ id: view
+ currentIndex: 1
+ anchors.fill: parent
+
+ Repeater {
+ model: 3
+
+ Pane {
+ width: SwipeView.view.width
+ height: SwipeView.view.height
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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 {
+ source: "../images/arrows.png"
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+ }
+ }
+ }
+
+ PageIndicator {
+ count: view.count
+ currentIndex: view.currentIndex
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/SwitchPage.qml b/examples/quickcontrols/gallery/pages/SwitchPage.qml
new file mode 100644
index 0000000000..dbda7da0a2
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/SwitchPage.qml
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ 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 {
+ spacing: 20
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Switch {
+ text: qsTr("First")
+ }
+ Switch {
+ text: qsTr("Second")
+ checked: true
+ }
+ Switch {
+ text: qsTr("Third")
+ enabled: false
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/TabBarPage.qml b/examples/quickcontrols/gallery/pages/TabBarPage.qml
new file mode 100644
index 0000000000..b2ce35586f
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/TabBarPage.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Page {
+ id: page
+
+ SwipeView {
+ id: swipeView
+ anchors.fill: parent
+ currentIndex: tabBar.currentIndex
+
+ Repeater {
+ model: 3
+
+ Pane {
+ width: SwipeView.view.width
+ height: SwipeView.view.height
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("TabBar is a bar with icons or text which allows the user "
+ + "to switch between different subtasks, views, or modes.")
+ }
+
+ Image {
+ source: "../images/arrows.png"
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+ }
+ }
+ }
+
+ footer: TabBar {
+ id: tabBar
+ currentIndex: swipeView.currentIndex
+
+ TabButton {
+ text: qsTr("First")
+ }
+ TabButton {
+ text: qsTr("Second")
+ }
+ TabButton {
+ text: qsTr("Third")
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/TextAreaPage.qml b/examples/quickcontrols/gallery/pages/TextAreaPage.qml
new file mode 100644
index 0000000000..1cc7d7c194
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/TextAreaPage.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("TextArea is a multi-line text editor.")
+ }
+
+ TextArea {
+ width: page.availableWidth / 3
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ wrapMode: TextArea.Wrap
+ text: qsTr("TextArea\n...\n...\n...")
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/TextFieldPage.qml b/examples/quickcontrols/gallery/pages/TextFieldPage.qml
new file mode 100644
index 0000000000..fd4c6894ac
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/TextFieldPage.qml
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("TextField is a single-line text editor.")
+ }
+
+ TextField {
+ id: field
+ placeholderText: qsTr("TextField")
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/ToolTipPage.qml b/examples/quickcontrols/gallery/pages/ToolTipPage.qml
new file mode 100644
index 0000000000..9a6cfc5729
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/ToolTipPage.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("A tool tip is a short piece of text that informs the user of a control's function.")
+ }
+
+ Button {
+ text: qsTr("Tip")
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ ToolTip.timeout: 5000
+ ToolTip.visible: pressed
+ ToolTip.text: qsTr("This is a tool tip.")
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/pages/TumblerPage.qml b/examples/quickcontrols/gallery/pages/TumblerPage.qml
new file mode 100644
index 0000000000..c8119bb76c
--- /dev/null
+++ b/examples/quickcontrols/gallery/pages/TumblerPage.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ScrollablePage {
+ id: page
+
+ Column {
+ spacing: 40
+ width: parent.width
+
+ Label {
+ width: parent.width
+ wrapMode: Label.Wrap
+ horizontalAlignment: Qt.AlignHCenter
+ text: qsTr("Tumbler is used to select a value by spinning a wheel.")
+ }
+
+ Tumbler {
+ model: 10
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+}
diff --git a/examples/quickcontrols/gallery/qmldir b/examples/quickcontrols/gallery/qmldir
new file mode 100644
index 0000000000..6b7f86bfac
--- /dev/null
+++ b/examples/quickcontrols/gallery/qmldir
@@ -0,0 +1 @@
+module App
diff --git a/examples/quickcontrols/gallery/qtquickcontrols2.conf b/examples/quickcontrols/gallery/qtquickcontrols2.conf
new file mode 100644
index 0000000000..da1a8f41d2
--- /dev/null
+++ b/examples/quickcontrols/gallery/qtquickcontrols2.conf
@@ -0,0 +1,8 @@
+[Material]
+Primary=#41cd52
+Accent=#41cd52
+Theme=System
+
+[Universal]
+Accent=#41cd52
+Theme=System
diff --git a/examples/quickcontrols/imagine/automotive/CMakeLists.txt b/examples/quickcontrols/imagine/automotive/CMakeLists.txt
new file mode 100644
index 0000000000..161d4b92b6
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/CMakeLists.txt
@@ -0,0 +1,148 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(automotive LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2)
+
+qt_add_executable(automotiveexample WIN32 MACOSX_BUNDLE
+ automotive.cpp
+)
+
+qt_add_qml_module(automotiveexample
+ URI automotive
+ NO_RESOURCE_TARGET_PATH
+ QML_FILES
+ "qml/FeatureButton.qml"
+ "qml/LargeLabel.qml"
+ "qml/automotive.qml"
+
+ RESOURCES
+ "icons/automotive/44x44/air-con.png"
+ "icons/automotive/44x44/command.png"
+ "icons/automotive/44x44/message.png"
+ "icons/automotive/44x44/music.png"
+ "icons/automotive/44x44/seats.png"
+ "icons/automotive/44x44/settings.png"
+ "icons/automotive/44x44/statistics.png"
+ "icons/automotive/44x44/windows.png"
+ "icons/automotive/44x44@2/air-con.png"
+ "icons/automotive/44x44@2/command.png"
+ "icons/automotive/44x44@2/message.png"
+ "icons/automotive/44x44@2/music.png"
+ "icons/automotive/44x44@2/navigation.png"
+ "icons/automotive/44x44@2/seats.png"
+ "icons/automotive/44x44@2/settings.png"
+ "icons/automotive/44x44@2/statistics.png"
+ "icons/automotive/44x44@2/windows.png"
+ "icons/automotive/icons.svg"
+ "icons/automotive/index.theme"
+ "icons/car.png"
+ "icons/car@2x.png"
+ "icons/warning.png"
+ "icons/warning@2x.png"
+ "icons/weather.png"
+ "icons/weather@2x.png"
+ "imagine-assets/applicationwindow-background.png"
+ "imagine-assets/applicationwindow-background@2x.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-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/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-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/radiobutton-indicator-checked-hovered.png"
+ "imagine-assets/radiobutton-indicator-checked-hovered@2x.png"
+ "imagine-assets/radiobutton-indicator-checked-pressed.png"
+ "imagine-assets/radiobutton-indicator-checked-pressed@2x.png"
+ "imagine-assets/radiobutton-indicator-checked.png"
+ "imagine-assets/radiobutton-indicator-checked@2x.png"
+ "imagine-assets/radiobutton-indicator-hovered.png"
+ "imagine-assets/radiobutton-indicator-hovered@2x.png"
+ "imagine-assets/radiobutton-indicator-pressed.png"
+ "imagine-assets/radiobutton-indicator-pressed@2x.png"
+ "imagine-assets/radiobutton-indicator.png"
+ "imagine-assets/radiobutton-indicator@2x.png"
+ "imagine-assets/scrollindicator-handle.png"
+ "imagine-assets/scrollindicator-handle@2x.png"
+ "imagine-assets/slider-background-horizontal.9.png"
+ "imagine-assets/slider-background-horizontal@2x.9.png"
+ "imagine-assets/slider-handle-hovered.png"
+ "imagine-assets/slider-handle-hovered@2x.png"
+ "imagine-assets/slider-handle-pressed.png"
+ "imagine-assets/slider-handle-pressed@2x.png"
+ "imagine-assets/slider-handle.png"
+ "imagine-assets/slider-handle@2x.png"
+ "imagine-assets/slider-progress-horizontal-pressed.9.png"
+ "imagine-assets/slider-progress-horizontal-pressed@2x.9.png"
+ "imagine-assets/slider-progress-horizontal.9.png"
+ "imagine-assets/slider-progress-horizontal@2x.9.png"
+ "imagine-assets/switchdelegate-background.9.png"
+ "imagine-assets/switchdelegate-background@2x.9.png"
+ "imagine-assets/switchdelegate-handle-checked-hovered.png"
+ "imagine-assets/switchdelegate-handle-checked-hovered@2x.png"
+ "imagine-assets/switchdelegate-handle-checked.png"
+ "imagine-assets/switchdelegate-handle-checked@2x.png"
+ "imagine-assets/switchdelegate-handle-hovered.png"
+ "imagine-assets/switchdelegate-handle-hovered@2x.png"
+ "imagine-assets/switchdelegate-handle-pressed.png"
+ "imagine-assets/switchdelegate-handle-pressed@2x.png"
+ "imagine-assets/switchdelegate-handle.png"
+ "imagine-assets/switchdelegate-handle@2x.png"
+ "imagine-assets/switchdelegate-indicator-pressed.png"
+ "imagine-assets/switchdelegate-indicator-pressed@2x.png"
+ "imagine-assets/switchdelegate-indicator.png"
+ "imagine-assets/switchdelegate-indicator@2x.png"
+ "imagine-assets/toolseparator-separator-vertical.9.png"
+ "imagine-assets/toolseparator-separator-vertical@2x.9.png"
+ "qtquickcontrols2.conf"
+)
+
+target_link_libraries(automotiveexample PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickControls2
+)
+
+install(TARGETS automotiveexample
+ 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/automotive.cpp b/examples/quickcontrols/imagine/automotive/automotive.cpp
new file mode 100644
index 0000000000..e64780f2b1
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/automotive.cpp
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+#include <QQmlContext>
+#include <QSettings>
+#include <QQuickStyle>
+#include <QIcon>
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication::setApplicationName("Automotive");
+ QGuiApplication::setOrganizationName("QtProject");
+
+ QGuiApplication app(argc, argv);
+
+ QIcon::setThemeName("automotive");
+
+ QQmlApplicationEngine engine;
+ engine.load(QUrl("qrc:/qml/automotive.qml"));
+ if (engine.rootObjects().isEmpty())
+ return -1;
+
+ return app.exec();
+}
diff --git a/examples/quickcontrols/imagine/automotive/automotive.pro b/examples/quickcontrols/imagine/automotive/automotive.pro
new file mode 100644
index 0000000000..25a78e9d43
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/automotive.pro
@@ -0,0 +1,15 @@
+TEMPLATE = app
+TARGET = automotive
+QT += quick quickcontrols2
+
+SOURCES += \
+ automotive.cpp
+
+RESOURCES += \
+ icons/icons.qrc \
+ imagine-assets/imagine-assets.qrc \
+ qml/qml.qrc \
+ qtquickcontrols2.conf
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/imagine/automotive
+INSTALLS += target
diff --git a/examples/quickcontrols/imagine/automotive/doc/images/qtquickcontrols-automotive.png b/examples/quickcontrols/imagine/automotive/doc/images/qtquickcontrols-automotive.png
new file mode 100644
index 0000000000..93ea28545b
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/doc/images/qtquickcontrols-automotive.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/doc/src/qtquickcontrols-automotive.qdoc b/examples/quickcontrols/imagine/automotive/doc/src/qtquickcontrols-automotive.qdoc
new file mode 100644
index 0000000000..8ac7c9c5bd
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/doc/src/qtquickcontrols-automotive.qdoc
@@ -0,0 +1,19 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example imagine/automotive
+ \keyword Qt Quick Controls - Imagine Style Example: Automotive
+ \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
+ style an automotive user interface.
+
+ \image qtquickcontrols-automotive.png
+
+ \include examples-run.qdocinc
+*/
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/air-con.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/air-con.png
new file mode 100644
index 0000000000..70175f6f05
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/air-con.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/command.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/command.png
new file mode 100644
index 0000000000..8f712c7881
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/command.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/message.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/message.png
new file mode 100644
index 0000000000..7773ca63ba
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/message.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/music.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/music.png
new file mode 100644
index 0000000000..dc73322bfe
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/music.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/seats.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/seats.png
new file mode 100644
index 0000000000..2f9eaa6227
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/seats.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/settings.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/settings.png
new file mode 100644
index 0000000000..b65598b58c
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/settings.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/statistics.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/statistics.png
new file mode 100644
index 0000000000..979702989b
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/statistics.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/windows.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/windows.png
new file mode 100644
index 0000000000..8ed8cec4bf
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44/windows.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/air-con.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/air-con.png
new file mode 100644
index 0000000000..8822979e6a
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/air-con.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/command.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/command.png
new file mode 100644
index 0000000000..918e2b69eb
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/command.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/message.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/message.png
new file mode 100644
index 0000000000..1debfdfb26
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/message.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/music.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/music.png
new file mode 100644
index 0000000000..01a3ece417
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/music.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/navigation.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/navigation.png
new file mode 100644
index 0000000000..3a18fb5f4e
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/navigation.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/seats.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/seats.png
new file mode 100644
index 0000000000..7d67f1be3f
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/seats.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/settings.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/settings.png
new file mode 100644
index 0000000000..3ce2a1f1b4
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/settings.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/statistics.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/statistics.png
new file mode 100644
index 0000000000..afc2cc0906
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/statistics.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/windows.png b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/windows.png
new file mode 100644
index 0000000000..59bac584ed
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/44x44@2/windows.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/icons.svg b/examples/quickcontrols/imagine/automotive/icons/automotive/icons.svg
new file mode 100644
index 0000000000..daf4633c25
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/icons.svg
@@ -0,0 +1,526 @@
+<?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="449"
+ height="384.99988"
+ viewBox="0 0 449.00001 384.99988"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="icons.svg"
+ inkscape:export-filename="/home/mitch/dev/qqc2-futuristic-style-demo/icons/futuristic/44x44@2/settings.png"
+ inkscape:export-xdpi="180"
+ inkscape:export-ydpi="180">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.3750001"
+ inkscape:cx="227.69632"
+ inkscape:cy="173.66895"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1137"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:snap-grids="false"
+ inkscape:snap-midpoints="false"
+ inkscape:object-paths="false"
+ inkscape:guide-bbox="true"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4380"
+ originx="-0.042045451"
+ originy="0.87827274" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-0.04204545,-668.2406)"
+ style="display:inline">
+ <g
+ id="g4481"
+ inkscape:export-filename="C:\dev\qt5.10\qtquickcontrols2\examples\quickcontrols2\imagine\automotive\icons\automotive\44x44@4\navigation.png"
+ inkscape:export-xdpi="384"
+ inkscape:export-ydpi="384">
+ <rect
+ y="1009.2405"
+ x="180.04205"
+ height="44"
+ width="44"
+ id="rect4273"
+ style="opacity:1;fill:#dc7878;fill-opacity:0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4147"
+ d="m 187.6832,1027.7359 29.7995,-11.9955 -8.46002,30.1783 -5.42957,-15.5311 z"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4474"
+ inkscape:export-filename="C:\dev\qt5.10\qtquickcontrols2\examples\quickcontrols2\imagine\automotive\icons\automotive\44x44@4\music.png"
+ inkscape:export-xdpi="384"
+ inkscape:export-ydpi="384">
+ <rect
+ style="opacity:1;fill:#dc7878;fill-opacity:0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4279"
+ width="44"
+ height="44"
+ x="135.04205"
+ y="1009.2405" />
+ <path
+ sodipodi:nodetypes="cscccc"
+ inkscape:connector-curvature="0"
+ id="path4140"
+ d="m 167.59902,1035.8159 c -1.31413,-1.8397 -8.0497,1.4976 -5.98214,5.5357 1.67413,3.2698 7.60481,-0.9006 7.23214,-2.1428 l 0.043,-22.367 -1.3203,2.4448 z"
+ style="fill:#6affcd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cscccccc"
+ inkscape:connector-curvature="0"
+ id="path4149-3"
+ d="m 151.55515,1038.884 c -1.31413,-1.8398 -8.0497,1.4975 -5.98214,5.5357 1.67413,3.2698 7.60481,-0.9006 7.23214,-2.1428 v -19.7322 l 14.7673,-3.2197 1.32996,-2.4891 -17.34726,3.4767 z"
+ style="fill:#6affcd;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4518"
+ inkscape:export-filename="C:\dev\qt5.10\qtquickcontrols2\examples\quickcontrols2\imagine\automotive\icons\automotive\44x44@4\message.png"
+ inkscape:export-xdpi="384"
+ inkscape:export-ydpi="384">
+ <rect
+ y="1009.2405"
+ x="315.04205"
+ height="44"
+ width="44"
+ id="rect4281"
+ style="opacity:1;fill:#dc7878;fill-opacity:0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="1019.9489"
+ x="321.94974"
+ height="22.583223"
+ width="30.18462"
+ id="rect4144"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#6affcd;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4146"
+ d="m 322.03814,1020.1699 15.1144,15.1144 14.95973,-14.9597"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4148"
+ d="m 352.09018,1042.3996 -11.00435,-11.0044"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4150"
+ d="m 321.99394,1042.4438 11.13693,-11.137"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4460"
+ inkscape:export-filename="C:\dev\qt5.10\qtquickcontrols2\examples\quickcontrols2\imagine\automotive\icons\automotive\44x44@4\command.png"
+ inkscape:export-xdpi="384"
+ inkscape:export-ydpi="384">
+ <rect
+ style="opacity:1;fill:#dc7878;fill-opacity:0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4287"
+ width="44"
+ height="44"
+ x="90.042053"
+ y="1009.2405" />
+ <circle
+ r="19.047689"
+ cy="1031.2406"
+ cx="112.04205"
+ id="path4152"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#6affcd;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ ry="5.5033379"
+ rx="4.5719934"
+ y="1018.0177"
+ x="107.24899"
+ height="17.67367"
+ width="9.1883745"
+ id="rect4156"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#6affcd;stroke-width:0.9598186;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ sodipodi:open="true"
+ d="m 118.4944,1031.2297 a 6.6733203,6.6733203 0 0 1 -3.33666,5.7793 6.6733203,6.6733203 0 0 1 -6.67332,0 6.6733203,6.6733203 0 0 1 -3.33666,-5.7793"
+ sodipodi:end="3.1415927"
+ sodipodi:start="0"
+ sodipodi:ry="6.6733203"
+ sodipodi:rx="6.6733203"
+ sodipodi:cy="1031.2297"
+ sodipodi:cx="111.82108"
+ sodipodi:type="arc"
+ id="path4160"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#6affcd;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4171"
+ d="m 111.68097,1037.9274 v 6.75"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4173"
+ d="m 108.71222,1044.6618 h 5.96875"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4547"
+ inkscape:export-filename="C:\dev\qt5.10\qtquickcontrols2\examples\quickcontrols2\imagine\automotive\icons\weather@4x.png"
+ inkscape:export-xdpi="384"
+ inkscape:export-ydpi="384">
+ <rect
+ style="opacity:1;fill:#dc7878;fill-opacity:0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4275"
+ width="44"
+ height="44"
+ x="405.04205"
+ y="1009.2405" />
+ <path
+ sodipodi:nodetypes="sccssssssss"
+ inkscape:connector-curvature="0"
+ id="rect4181"
+ d="m 415.77154,1020.3319 h 1.72458 c 1.92048,-6.3943 13.78409,-9.9869 18.47317,0 h 2.34328 c 4.38985,0 7.92391,3.3764 7.92391,7.5705 v 0.3996 c 0,4.194 -3.53406,7.5704 -7.92391,7.5704 h -22.54103 c -4.38985,0 -7.92392,-3.3764 -7.92392,-7.5704 v -0.3996 c 0,-4.1941 3.53407,-7.5705 7.92392,-7.5705 z"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#c6c6c6;stroke-width:1.06007564;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4184"
+ d="m 418.4242,1048.7629 2.37846,-8.8765"
+ style="fill:none;fill-rule:evenodd;stroke:#c6c6c6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#c6c6c6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 425.80463,1048.7629 2.37846,-8.8765"
+ id="path4186"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4188"
+ d="m 433.36269,1048.7629 2.37846,-8.8765"
+ style="fill:none;fill-rule:evenodd;stroke:#c6c6c6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4408"
+ inkscape:export-filename="C:\dev\qt5.10\qtquickcontrols2\examples\quickcontrols2\imagine\automotive\icons\automotive\44x44@4\settings.png"
+ inkscape:export-xdpi="384"
+ inkscape:export-ydpi="384">
+ <rect
+ y="1009.2405"
+ x="0.042050309"
+ height="44"
+ width="44"
+ id="rect4289"
+ style="opacity:1;fill:#dc7878;fill-opacity:0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4175"
+ d="m 18.04247,1017.9491 1.40804,-5.2549 h 5.24319 l 1.47,5.4862 2.38326,1.376 4.34476,-3.4414 4.37522,4.3753 -3.31456,4.3973 1.149046,2.6737 h 5.08233 v 6.7396 l -4.596194,0.3315 -1.590992,3.1157 3.137788,4.0438 -4.209498,4.2095 -4.56007,-2.6328 -2.72092,1.5389 -1.3074,4.8793 h -5.14495 l -1.06066,-5.6527 -2.65524,-0.7114 -4.4148,2.5489 -3.89011,-4.3123 3.13778,-4.088 -1.73918,-3.0124 -4.66897,-0.8988 v -5.5905 l 4.83926,-0.4862 1.41421,-2.9831 -3.13778,-4.1321 4.08796,-4.088 4.04377,2.3644 z"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <circle
+ r="5.5242715"
+ cy="1031.0306"
+ cx="22.064146"
+ id="path4177"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#6affcd;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4487"
+ inkscape:export-filename="C:\dev\qt5.10\qtquickcontrols2\examples\quickcontrols2\imagine\automotive\icons\automotive\44x44@4\windows.png"
+ inkscape:export-xdpi="384"
+ inkscape:export-ydpi="384">
+ <rect
+ y="1009.2405"
+ x="225.04205"
+ height="44"
+ width="44"
+ id="rect4277"
+ style="opacity:1;fill:#dc7878;fill-opacity:0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="rect4190"
+ d="m 261.03309,1017.2897 v 28 h -27.9375 c 2.35953,-27.5958 7.73302,-28.5625 27.9375,-28 z"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#6affcd;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4538"
+ inkscape:export-filename="C:\dev\qt5.10\qtquickcontrols2\examples\quickcontrols2\imagine\automotive\icons\automotive\44x44@4\air-con.png"
+ inkscape:export-xdpi="384"
+ inkscape:export-ydpi="384"
+ transform="translate(-45.000003)">
+ <rect
+ style="opacity:1;fill:#dc7878;fill-opacity:0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4283"
+ width="44"
+ height="44"
+ x="405.04205"
+ y="1009.2405" />
+ <path
+ sodipodi:nodetypes="sscsscsscsscs"
+ inkscape:connector-curvature="0"
+ id="path4197"
+ d="m 421.26481,1044.4851 c -3.23157,3.5413 -10.47885,-3.4697 -9.9718,-8.4477 0.83559,-8.2035 7.65867,-5.1475 12.04763,-6.9077 -1.79559,-3.4382 -6.54603,-1.0408 -9.27801,-3.5338 -3.54131,-3.2316 3.46971,-10.4789 8.44775,-9.9718 8.20348,0.8356 5.14746,7.6586 6.84142,12.0034 3.37187,-1.8398 0.97447,-6.5902 3.4675,-9.3222 3.23157,-3.5413 10.47885,3.4697 9.9718,8.4478 -0.83559,8.2034 -7.65867,5.1474 -12.00344,6.753 1.83978,3.2835 6.59022,0.8861 9.3222,3.3791 3.54131,3.2316 -3.46971,10.4789 -8.44775,9.9718 -8.20348,-0.8356 -5.14746,-7.6587 -6.88561,-11.8488 -3.41606,1.9945 -1.01866,6.7449 -3.51169,9.4769 z"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4531"
+ inkscape:export-filename="C:\dev\qt5.10\qtquickcontrols2\examples\quickcontrols2\imagine\automotive\icons\automotive\44x44@4\seats.png"
+ inkscape:export-xdpi="384"
+ inkscape:export-ydpi="384"
+ transform="translate(-90.000003)">
+ <rect
+ y="1009.2405"
+ x="360.04205"
+ height="44"
+ width="44"
+ id="rect4285"
+ style="opacity:1;fill:#dc7878;fill-opacity:0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="sccs"
+ inkscape:connector-curvature="0"
+ id="rect4203"
+ d="m 391.91622,1017.2238 c 0.17067,-5.6932 5.2149,-4.4637 5.2149,-4.4637 v 9.1924 c -0.7292,-0.07 -5.33548,-0.7063 -5.2149,-4.7287 z"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#6affcd;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cscccsc"
+ inkscape:connector-curvature="0"
+ id="path4206"
+ d="m 386.60297,1040.4014 c -5.60375,-1.1635 -16.63421,-2.7578 -18.84543,0.6535 -1.53027,2.3608 -0.87435,7.5961 2.06641,8.7796 h 21.0795 c 3.59502,-0.5935 6.26483,-6.7048 2.51333,-8.7058 3.19134,-0.9113 5.05406,-18.5249 2.48667,-19.5701 -1.7401,-0.7084 -5.84062,6.4475 -9.30048,18.8428 z"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4435"
+ inkscape:export-filename="C:\dev\qt5.10\qtquickcontrols2\examples\quickcontrols2\imagine\automotive\icons\automotive\44x44@4\statistics.png"
+ inkscape:export-xdpi="384"
+ inkscape:export-ydpi="384">
+ <rect
+ style="opacity:1;fill:#dc7878;fill-opacity:0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4291"
+ width="44"
+ height="44"
+ x="45.042053"
+ y="1009.2405" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4208"
+ d="M 51.05768,1048.9905 V 1032.553"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 54.60974,1048.9905 v -35.5"
+ id="path4210"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4212"
+ d="M 58.16187,1048.9905 V 1019.178"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 61.71393,1048.9905 v -20"
+ id="path4214"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4216"
+ d="m 65.26599,1048.9905 v -22.875"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 68.81812,1048.9905 V 1034.178"
+ id="path4218"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4220"
+ d="m 72.37018,1048.9905 v -6.8125"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 75.92224,1048.9905 v -9.75"
+ id="path4222"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4224"
+ d="m 79.47437,1048.9905 v -19.75"
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 83.02643,1048.9905 V 1026.303"
+ id="path4226"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4957"
+ inkscape:export-filename="C:\dev\qt5.10\qtquickcontrols2\examples\quickcontrols2\imagine\automotive\icons\warning@4x.png"
+ inkscape:export-xdpi="384"
+ inkscape:export-ydpi="384">
+ <g
+ id="g4952">
+ <g
+ id="g4984">
+ <rect
+ style="display:inline;opacity:1;fill:#dc7878;fill-opacity:0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4888"
+ width="44"
+ height="44"
+ x="405.04205"
+ y="964.24048" />
+ <path
+ transform="translate(91.459048,54.521538)"
+ d="m 335.89844,913.67383 a 6.7448861,6.7448861 0 0 0 -6.15625,3.36328 l -6.5293,11.30859 -6.5293,11.3086 a 6.7448861,6.7448861 0 0 0 5.83985,10.11718 h 13.05859 13.06055 a 6.7448861,6.7448861 0 0 0 5.83984,-10.11718 l -6.53125,-11.3086 -6.52929,-11.30859 a 6.7448861,6.7448861 0 0 0 -5.52344,-3.36328 z"
+ id="path4914"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#d5242f;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:original="M 335.58203 920.41016 L 329.05273 931.71875 L 322.52344 943.02734 L 335.58203 943.02734 L 348.64258 943.02734 L 342.11133 931.71875 L 335.58203 920.41016 z "
+ inkscape:radius="6.7442117"
+ sodipodi:type="inkscape:offset" />
+ <text
+ id="text4916"
+ y="997.82135"
+ x="418.31409"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#d5232f;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:29.11217499px;line-height:1.25;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';fill:#d5232f;fill-opacity:1"
+ y="997.82135"
+ x="418.31409"
+ id="tspan4918"
+ sodipodi:role="line">!</tspan></text>
+ </g>
+ </g>
+ </g>
+ <g
+ id="g4579"
+ transform="translate(0.91359708)"
+ inkscape:export-filename="C:\dev\qt5.10\qtquickcontrols2\examples\quickcontrols2\imagine\automotive\icons\car@4x.png"
+ inkscape:export-xdpi="384"
+ inkscape:export-ydpi="384">
+ <g
+ transform="translate(0,-0.52629089)"
+ inkscape:export-ydpi="180.02795"
+ inkscape:export-xdpi="180.02795"
+ inkscape:export-filename="/home/mitch/dev/qqc2-futuristic-style-demo/icons/car@2x.png"
+ id="g4940">
+ <g
+ inkscape:export-ydpi="288.18481"
+ inkscape:export-xdpi="288.18481"
+ inkscape:export-filename="C:\dev\qt5.10\qtquickcontrols2\examples\quickcontrols2\imagine\automotive\icons\car@3x.png"
+ transform="translate(-4.2105261)"
+ id="g5027">
+ <g
+ id="g4990"
+ transform="translate(38)">
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 155.0705,782.17781 c 6.07598,2.81282 15.70745,5.54152 16.78045,0.12114 1.47822,-7.46742 -7.82673,-9.03073 -12.74213,-11.21517 0.35496,-28.39708 4.52948,-61.94987 -16.18718,-79.16009 -15.28126,-12.6948 -36.88923,-13.70761 -54.94737,-13.89474 -44.75939,1.12608 -72.2307,7.25376 -66.73684,92.42105 -5.10694,0.73154 -15.36618,6.19984 -11.96169,13.62693 2.26424,4.93957 10.32335,-1.55401 16.17222,-2.04798 l -4.42106,70.10526 c -4.88809,9.36444 -1.70447,13.26861 -0.21052,18.31579 l 2.31579,28.21053 c -5.87521,7.89365 -9.18606,65.22384 5.21645,80.45936 20.44842,21.63111 45.69753,20.41018 69.7353,20.35721 29.24164,-0.0644 46.2493,-7.41397 57.516,-25.0271 6.1501,-9.61441 6.80873,-24.11582 6.56857,-37.94412 -0.50608,-29.14019 -2.51723,-31.93372 -3.87843,-38.05588 0.24603,-10.87137 0.62319,-26.86855 0.62319,-26.86855 0.13708,-2.99847 -4.07078,-3.32117 -4.26379,-0.30212 -1.23557,19.32726 -2.52156,37.97398 -4.14887,52.01278 -5.15807,-50.19881 -8.22005,-100.65169 -0.42106,-152.42105 l 1.77142,14.22858"
+ id="path4198"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cscsccsccccssssccsccc" />
+ <rect
+ style="opacity:0;fill:none;fill-opacity:1;stroke:#6affcd;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4200"
+ width="75.39991"
+ height="41.533218"
+ x="52.331917"
+ y="811.89917" />
+ <rect
+ ry="5.0999999"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#6affcd;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect4204"
+ width="74.730019"
+ height="42.277542"
+ x="53.001808"
+ y="811.97357"
+ rx="5.0999999" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 33.76375,753.50264 c 21.81505,-33.62758 93.76507,-29.21973 112.94736,0.52631 l -6.52631,45.1579 c -32.75184,-8.71732 -66.12565,-8.2607 -100,-0.42106 z"
+ id="path4207"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 30.39532,772.45 C 39.7558,824.45977 33.67511,874.57878 29.86901,924.97632 27.0264,874.92466 21.98491,825.44889 30.39532,772.45 Z"
+ id="path4209"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 40.07953,905.29211 c 31.5016,11.5654 64.23888,15.63953 100.21053,0.10526 l -1.68421,49.36842 c -34.36634,20.89476 -66.32657,16.8029 -97.05263,-0.10526 z"
+ id="path4211"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 132.39532,693.08158 c -0.1013,1.76525 -0.0679,3.42272 0.52632,4.63158 4.7808,3.23458 8.19086,9.38341 11.57895,15.57895 1.5083,-0.0482 2.87102,0.42463 4.63157,-0.52632 0.15986,-2.57309 0.37258,-5.12353 -0.42105,-8.10526 -3.09684,-4.12667 -6.44714,-7.87314 -10.10526,-11.15789 -2.00632,-0.36221 -3.93976,-0.97762 -6.21053,-0.42106 z"
+ id="path4213"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path4215"
+ d="m 48.05537,693.08158 c 0.1013,1.76525 0.0679,3.42272 -0.52632,4.63158 -4.7808,3.23458 -8.19086,9.38341 -11.57895,15.57895 -1.5083,-0.0482 -2.87102,0.42463 -4.63157,-0.52632 -0.15986,-2.57309 -0.37258,-5.12353 0.42105,-8.10526 3.09684,-4.12667 6.44714,-7.87314 10.10526,-11.15789 2.00632,-0.36221 3.93976,-0.97762 6.21053,-0.42106 z"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#6affcd;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="display:inline;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d5222f;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.87843137"
+ d="m 151.92716,785.02141 59.0707,63.0345 c 1.5809,-0.4544 3.3564,-1.3935 2.958,-3.8128 -1.0167,-6.1727 -4.9133,-10.6123 -10.7475,-11.7661 l -48.0616,-50.3775"
+ id="path4240"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ <rect
+ y="669.29321"
+ x="4.2525716"
+ height="338.94736"
+ width="250.17281"
+ id="rect4844"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <rect
+ y="668.2406"
+ x="-0.87155163"
+ height="340"
+ width="252"
+ id="rect4563"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.01560712;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
+ </g>
+ </g>
+</svg>
diff --git a/examples/quickcontrols/imagine/automotive/icons/automotive/index.theme b/examples/quickcontrols/imagine/automotive/icons/automotive/index.theme
new file mode 100644
index 0000000000..cd84146e95
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/automotive/index.theme
@@ -0,0 +1,14 @@
+[Icon Theme]
+Name=Automotive
+Comment=Icon theme for the Qt Quick Controls 2 Automotive Imagine Style Example
+
+Directories=44x44,44x44@2
+
+[44x44]
+Size=44
+Type=Fixed
+
+[44x44@2]
+Size=44
+Scale=2
+Type=Fixed
diff --git a/examples/quickcontrols/imagine/automotive/icons/car.png b/examples/quickcontrols/imagine/automotive/icons/car.png
new file mode 100644
index 0000000000..4bfc9a474a
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/car.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/car@2x.png b/examples/quickcontrols/imagine/automotive/icons/car@2x.png
new file mode 100644
index 0000000000..966bc47bc7
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/car@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/icons.qrc b/examples/quickcontrols/imagine/automotive/icons/icons.qrc
new file mode 100644
index 0000000000..5cb797817b
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/icons.qrc
@@ -0,0 +1,29 @@
+<RCC>
+ <qresource prefix="/icons">
+ <file>car.png</file>
+ <file>car@2x.png</file>
+ <file>warning.png</file>
+ <file>warning@2x.png</file>
+ <file>weather.png</file>
+ <file>weather@2x.png</file>
+ <file>automotive/icons.svg</file>
+ <file>automotive/index.theme</file>
+ <file>automotive/44x44/air-con.png</file>
+ <file>automotive/44x44/command.png</file>
+ <file>automotive/44x44/message.png</file>
+ <file>automotive/44x44/music.png</file>
+ <file>automotive/44x44/seats.png</file>
+ <file>automotive/44x44/settings.png</file>
+ <file>automotive/44x44/statistics.png</file>
+ <file>automotive/44x44/windows.png</file>
+ <file>automotive/44x44@2/air-con.png</file>
+ <file>automotive/44x44@2/command.png</file>
+ <file>automotive/44x44@2/message.png</file>
+ <file>automotive/44x44@2/music.png</file>
+ <file>automotive/44x44@2/navigation.png</file>
+ <file>automotive/44x44@2/seats.png</file>
+ <file>automotive/44x44@2/settings.png</file>
+ <file>automotive/44x44@2/statistics.png</file>
+ <file>automotive/44x44@2/windows.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/quickcontrols/imagine/automotive/icons/warning.png b/examples/quickcontrols/imagine/automotive/icons/warning.png
new file mode 100644
index 0000000000..590a61eb80
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/warning.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/warning@2x.png b/examples/quickcontrols/imagine/automotive/icons/warning@2x.png
new file mode 100644
index 0000000000..487fbafcfd
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/warning@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/weather.png b/examples/quickcontrols/imagine/automotive/icons/weather.png
new file mode 100644
index 0000000000..b1479de27a
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/weather.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/icons/weather@2x.png b/examples/quickcontrols/imagine/automotive/icons/weather@2x.png
new file mode 100644
index 0000000000..8b4333ab15
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/icons/weather@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/applicationwindow-background.png b/examples/quickcontrols/imagine/automotive/imagine-assets/applicationwindow-background.png
new file mode 100644
index 0000000000..aac403dbb1
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/applicationwindow-background.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/applicationwindow-background@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/applicationwindow-background@2x.png
new file mode 100644
index 0000000000..a8ef3dd456
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/applicationwindow-background@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked-hovered.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked-hovered.9.png
new file mode 100644
index 0000000000..f92dd66afe
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked-hovered.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked-hovered@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked-hovered@2x.9.png
new file mode 100644
index 0000000000..b64640e2b1
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked-hovered@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked.9.png
new file mode 100644
index 0000000000..5a70d1d302
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked@2x.9.png
new file mode 100644
index 0000000000..9d080dc823
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-checked@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-hovered.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-hovered.9.png
new file mode 100644
index 0000000000..94e37b8334
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-hovered.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-hovered@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-hovered@2x.9.png
new file mode 100644
index 0000000000..905d9e4705
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-hovered@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-pressed.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-pressed.9.png
new file mode 100644
index 0000000000..bc4c3b3880
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-pressed.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-pressed@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-pressed@2x.9.png
new file mode 100644
index 0000000000..778fe53752
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background-pressed@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/button-background.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background.9.png
new file mode 100644
index 0000000000..85ed1a03ba
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/button-background@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background@2x.9.png
new file mode 100644
index 0000000000..1eb7ebed20
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/button-background@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered.png b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background-hovered.png
new file mode 100644
index 0000000000..1f96090fcf
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..58b7516310
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..9d08faa0af
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..7e2c17236d
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..384de617a2
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..7874f03888
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-background@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle-pressed.png b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle-pressed.png
new file mode 100644
index 0000000000..93992626ce
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle-pressed.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle-pressed@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle-pressed@2x.png
new file mode 100644
index 0000000000..5c563abba5
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle-pressed@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle.png b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle.png
new file mode 100644
index 0000000000..a997dd58f8
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle@2x.png
new file mode 100644
index 0000000000..afd1330704
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/dial-handle@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/frame-background.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/frame-background.9.png
new file mode 100644
index 0000000000..fd7d5453ff
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/frame-background.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/frame-background@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/frame-background@2x.9.png
new file mode 100644
index 0000000000..83284457e4
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/frame-background@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/imagine-assets.qrc b/examples/quickcontrols/imagine/automotive/imagine-assets/imagine-assets.qrc
new file mode 100644
index 0000000000..81eadda617
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/imagine-assets.qrc
@@ -0,0 +1,80 @@
+<RCC>
+ <qresource prefix="/imagine-assets">
+ <file>applicationwindow-background.png</file>
+ <file>applicationwindow-background@2x.png</file>
+ <file>button-background.9.png</file>
+ <file>button-background@2x.9.png</file>
+ <file>button-background-checked.9.png</file>
+ <file>button-background-checked@2x.9.png</file>
+ <file>button-background-checked-hovered.9.png</file>
+ <file>button-background-checked-hovered@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>dial-background.png</file>
+ <file>dial-background@2x.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-handle.png</file>
+ <file>dial-handle@2x.png</file>
+ <file>dial-handle-pressed.png</file>
+ <file>dial-handle-pressed@2x.png</file>
+ <file>frame-background.9.png</file>
+ <file>frame-background@2x.9.png</file>
+ <file>itemdelegate-background.9.png</file>
+ <file>itemdelegate-background@2x.9.png</file>
+ <file>itemdelegate-background-checked.9.png</file>
+ <file>itemdelegate-background-checked@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>radiobutton-indicator.png</file>
+ <file>radiobutton-indicator@2x.png</file>
+ <file>radiobutton-indicator-checked.png</file>
+ <file>radiobutton-indicator-checked@2x.png</file>
+ <file>radiobutton-indicator-checked-hovered.png</file>
+ <file>radiobutton-indicator-checked-hovered@2x.png</file>
+ <file>radiobutton-indicator-checked-pressed.png</file>
+ <file>radiobutton-indicator-checked-pressed@2x.png</file>
+ <file>radiobutton-indicator-hovered.png</file>
+ <file>radiobutton-indicator-hovered@2x.png</file>
+ <file>radiobutton-indicator-pressed.png</file>
+ <file>radiobutton-indicator-pressed@2x.png</file>
+ <file>scrollindicator-handle.png</file>
+ <file>scrollindicator-handle@2x.png</file>
+ <file>slider-background-horizontal.9.png</file>
+ <file>slider-background-horizontal@2x.9.png</file>
+ <file>slider-handle.png</file>
+ <file>slider-handle@2x.png</file>
+ <file>slider-handle-hovered.png</file>
+ <file>slider-handle-hovered@2x.png</file>
+ <file>slider-handle-pressed.png</file>
+ <file>slider-handle-pressed@2x.png</file>
+ <file>slider-progress-horizontal.9.png</file>
+ <file>slider-progress-horizontal@2x.9.png</file>
+ <file>slider-progress-horizontal-pressed.9.png</file>
+ <file>slider-progress-horizontal-pressed@2x.9.png</file>
+ <file>switchdelegate-background.9.png</file>
+ <file>switchdelegate-background@2x.9.png</file>
+ <file>switchdelegate-handle.png</file>
+ <file>switchdelegate-handle@2x.png</file>
+ <file>switchdelegate-handle-checked.png</file>
+ <file>switchdelegate-handle-checked@2x.png</file>
+ <file>switchdelegate-handle-checked-hovered.png</file>
+ <file>switchdelegate-handle-checked-hovered@2x.png</file>
+ <file>switchdelegate-handle-hovered.png</file>
+ <file>switchdelegate-handle-hovered@2x.png</file>
+ <file>switchdelegate-handle-pressed.png</file>
+ <file>switchdelegate-handle-pressed@2x.png</file>
+ <file>switchdelegate-indicator.png</file>
+ <file>switchdelegate-indicator@2x.png</file>
+ <file>switchdelegate-indicator-pressed.png</file>
+ <file>switchdelegate-indicator-pressed@2x.png</file>
+ <file>toolseparator-separator-vertical.9.png</file>
+ <file>toolseparator-separator-vertical@2x.9.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-checked.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-checked.9.png
new file mode 100644
index 0000000000..4c6b475441
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-checked.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-checked@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-checked@2x.9.png
new file mode 100644
index 0000000000..9f4f70575f
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-checked@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-hovered.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-hovered.9.png
new file mode 100644
index 0000000000..a5c189c9e3
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-hovered.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-hovered@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-hovered@2x.9.png
new file mode 100644
index 0000000000..2b3c9c6743
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-hovered@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-pressed.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-pressed.9.png
new file mode 100644
index 0000000000..56b5534ea6
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-pressed.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-pressed@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-pressed@2x.9.png
new file mode 100644
index 0000000000..bbbbb8b1d8
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background-pressed@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background.9.png
new file mode 100644
index 0000000000..1fbb562689
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background@2x.9.png
new file mode 100644
index 0000000000..18880980f0
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/itemdelegate-background@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-hovered.png b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-hovered.png
new file mode 100644
index 0000000000..f64c9665b2
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-hovered.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-hovered@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-hovered@2x.png
new file mode 100644
index 0000000000..ace1717a97
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-hovered@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-pressed.png b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-pressed.png
new file mode 100644
index 0000000000..c77ad470c0
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-pressed.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-pressed@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-pressed@2x.png
new file mode 100644
index 0000000000..2798f77f0f
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked-pressed@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked.png b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked.png
new file mode 100644
index 0000000000..ea714eaaf9
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked@2x.png
new file mode 100644
index 0000000000..4f29b80b31
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-checked@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-hovered.png b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-hovered.png
new file mode 100644
index 0000000000..a7d07ed17c
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-hovered.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-hovered@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-hovered@2x.png
new file mode 100644
index 0000000000..b0fff06e51
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-hovered@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-pressed.png b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-pressed.png
new file mode 100644
index 0000000000..7d657ac9c2
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-pressed.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-pressed@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-pressed@2x.png
new file mode 100644
index 0000000000..9a8b9cd829
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator-pressed@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator.png b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator.png
new file mode 100644
index 0000000000..b59ba0cef8
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator@2x.png
new file mode 100644
index 0000000000..e4a2b9a2b9
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/radiobutton-indicator@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/scrollindicator-handle.png b/examples/quickcontrols/imagine/automotive/imagine-assets/scrollindicator-handle.png
new file mode 100644
index 0000000000..99206d7e26
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/scrollindicator-handle.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/scrollindicator-handle@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/scrollindicator-handle@2x.png
new file mode 100644
index 0000000000..85a9ebccf7
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/scrollindicator-handle@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/slider-background-horizontal.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-background-horizontal.9.png
new file mode 100644
index 0000000000..3d2406cf06
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-background-horizontal.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/slider-background-horizontal@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-background-horizontal@2x.9.png
new file mode 100644
index 0000000000..6c8104ff97
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-background-horizontal@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-hovered.png b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-hovered.png
new file mode 100644
index 0000000000..bd26d82451
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-hovered.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-hovered@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-hovered@2x.png
new file mode 100644
index 0000000000..000db40444
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-hovered@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-pressed.png b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-pressed.png
new file mode 100644
index 0000000000..4a4d0be7f8
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-pressed.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-pressed@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-pressed@2x.png
new file mode 100644
index 0000000000..903c102440
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle-pressed@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle.png b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle.png
new file mode 100644
index 0000000000..8f812dae34
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle@2x.png
new file mode 100644
index 0000000000..b30a4f38f0
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-handle@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal-pressed.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal-pressed.9.png
new file mode 100644
index 0000000000..7789f09f2c
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal-pressed.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal-pressed@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal-pressed@2x.9.png
new file mode 100644
index 0000000000..e64c13dc39
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal-pressed@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal.9.png
new file mode 100644
index 0000000000..8e65ca35c5
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal@2x.9.png
new file mode 100644
index 0000000000..d512e40708
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/slider-progress-horizontal@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-background.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-background.9.png
new file mode 100644
index 0000000000..1fbb562689
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-background.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-background@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-background@2x.9.png
new file mode 100644
index 0000000000..18880980f0
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-background@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked-hovered.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked-hovered.png
new file mode 100644
index 0000000000..e66ef7137c
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked-hovered.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked-hovered@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked-hovered@2x.png
new file mode 100644
index 0000000000..05d6f82e7a
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked-hovered@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked.png
new file mode 100644
index 0000000000..bcfa06aec6
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked@2x.png
new file mode 100644
index 0000000000..b9985f0fe3
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-checked@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-hovered.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-hovered.png
new file mode 100644
index 0000000000..3de8aa1512
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-hovered.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-hovered@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-hovered@2x.png
new file mode 100644
index 0000000000..b955159055
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-hovered@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-pressed.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-pressed.png
new file mode 100644
index 0000000000..547b2c1758
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-pressed.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-pressed@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-pressed@2x.png
new file mode 100644
index 0000000000..b4bb748aa4
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle-pressed@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle.png
new file mode 100644
index 0000000000..fd81422a88
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle@2x.png
new file mode 100644
index 0000000000..9a7456aa41
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-handle@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator-pressed.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator-pressed.png
new file mode 100644
index 0000000000..6833d624ae
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator-pressed.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator-pressed@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator-pressed@2x.png
new file mode 100644
index 0000000000..3d5498a090
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator-pressed@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator.png
new file mode 100644
index 0000000000..3db5fe2042
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator@2x.png b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator@2x.png
new file mode 100644
index 0000000000..b5c10f7497
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/switchdelegate-indicator@2x.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/toolseparator-separator-vertical.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/toolseparator-separator-vertical.9.png
new file mode 100644
index 0000000000..02c7a564be
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/toolseparator-separator-vertical.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/imagine-assets/toolseparator-separator-vertical@2x.9.png b/examples/quickcontrols/imagine/automotive/imagine-assets/toolseparator-separator-vertical@2x.9.png
new file mode 100644
index 0000000000..e0390d36f5
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/imagine-assets/toolseparator-separator-vertical@2x.9.png
Binary files differ
diff --git a/examples/quickcontrols/imagine/automotive/qml/FeatureButton.qml b/examples/quickcontrols/imagine/automotive/qml/FeatureButton.qml
new file mode 100644
index 0000000000..a9dee571fb
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/qml/FeatureButton.qml
@@ -0,0 +1,23 @@
+// 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
+
+Button {
+ id: button
+ checkable: true
+ font.pixelSize: fontSizeExtraSmall
+ leftPadding: 4
+ rightPadding: 4
+ topPadding: 12
+ bottomPadding: 12
+ implicitWidth: 60
+ implicitHeight: 90
+
+ icon.name: "placeholder"
+ icon.width: 44
+ icon.height: 44
+ display: Button.TextUnderIcon
+}
diff --git a/examples/quickcontrols/imagine/automotive/qml/LargeLabel.qml b/examples/quickcontrols/imagine/automotive/qml/LargeLabel.qml
new file mode 100644
index 0000000000..af03c782ff
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/qml/LargeLabel.qml
@@ -0,0 +1,37 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+// This container and the transform on the Label are
+// necessary to get precise bounding rect of the text for layouting reasons,
+// since some of the labels' font sizes can get quite large.
+Item {
+ id: root
+ implicitHeight: labelTextMetrics.tightBoundingRect.height
+ implicitWidth: label.implicitWidth
+
+ property alias text: label.text
+ property alias font: label.font
+ property alias horizontalAlignment: label.horizontalAlignment
+ property alias verticalAlignment: label.verticalAlignment
+ property bool glowEnabled: true
+ property color color: colorBright
+
+ Label {
+ id: label
+ anchors.baseline: root.baseline
+ color: root.color
+
+ TextMetrics {
+ id: labelTextMetrics
+ text: label.text
+ font: label.font
+ }
+
+ transform: Translate {
+ y: -labelTextMetrics.tightBoundingRect.y
+ }
+ }
+}
diff --git a/examples/quickcontrols/imagine/automotive/qml/automotive.qml b/examples/quickcontrols/imagine/automotive/qml/automotive.qml
new file mode 100644
index 0000000000..9ed2f5996d
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/qml/automotive.qml
@@ -0,0 +1,595 @@
+// 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.Controls.Imagine
+import QtQuick.Window
+
+ApplicationWindow {
+ id: window
+ width: 1280
+ height: 720
+ minimumWidth: 1180
+ minimumHeight: 663
+ visible: true
+ title: "Qt Quick Controls - Imagine Style Example: Automotive"
+
+ readonly property color colorGlow: "#1d6d64"
+ readonly property color colorWarning: "#d5232f"
+ readonly property color colorMain: "#6affcd"
+ readonly property color colorBright: "#ffffff"
+ readonly property color colorLightGrey: "#888"
+ readonly property color colorDarkGrey: "#333"
+
+ readonly property int fontSizeExtraSmall: Qt.application.font.pixelSize * 0.8
+ readonly property int fontSizeMedium: Qt.application.font.pixelSize * 1.5
+ readonly property int fontSizeLarge: Qt.application.font.pixelSize * 2
+ readonly property int fontSizeExtraLarge: Qt.application.font.pixelSize * 5
+
+ Component.onCompleted: {
+ x = Screen.width / 2 - width / 2
+ y = Screen.height / 2 - height / 2
+ }
+
+ Shortcut {
+ sequence: "Ctrl+Q"
+ onActivated: Qt.quit()
+ }
+
+ Frame {
+ id: frame
+ anchors.fill: parent
+ anchors.margins: 90
+
+ RowLayout {
+ id: mainRowLayout
+ anchors.fill: parent
+ anchors.margins: 24
+ spacing: 36
+
+ Container {
+ id: leftTabBar
+
+ currentIndex: 1
+
+ Layout.fillWidth: false
+ Layout.fillHeight: true
+
+ ButtonGroup {
+ buttons: columnLayout.children
+ }
+
+ contentItem: ColumnLayout {
+ id: columnLayout
+ spacing: 3
+
+ Repeater {
+ model: leftTabBar.contentModel
+ }
+ }
+
+ FeatureButton {
+ id: navigationFeatureButton
+ text: qsTr("Navigation")
+ icon.name: "navigation"
+ Layout.fillHeight: true
+ }
+
+ FeatureButton {
+ text: qsTr("Music")
+ icon.name: "music"
+ checked: true
+ Layout.fillHeight: true
+ }
+
+ FeatureButton {
+ text: qsTr("Message")
+ icon.name: "message"
+ Layout.fillHeight: true
+ }
+
+ FeatureButton {
+ text: qsTr("Command")
+ icon.name: "command"
+ Layout.fillHeight: true
+ }
+
+ FeatureButton {
+ text: qsTr("Settings")
+ icon.name: "settings"
+ Layout.fillHeight: true
+ }
+ }
+
+ StackLayout {
+ currentIndex: leftTabBar.currentIndex
+
+ Layout.preferredWidth: 150
+ Layout.maximumWidth: 150
+ Layout.fillWidth: false
+
+ Item {}
+
+ ColumnLayout {
+ spacing: 12
+
+ ButtonGroup {
+ id: viewButtonGroup
+ buttons: viewTypeRowLayout.children
+ }
+
+ RowLayout {
+ id: viewTypeRowLayout
+ spacing: 3
+
+ Layout.bottomMargin: 12
+
+ Button {
+ text: qsTr("Compact")
+ font.pixelSize: fontSizeExtraSmall
+ checkable: true
+ checked: true
+
+ Layout.fillWidth: true
+ }
+ Button {
+ text: qsTr("Full")
+ font.pixelSize: fontSizeExtraSmall
+ checkable: true
+
+ Layout.fillWidth: true
+ }
+ }
+
+ LargeLabel {
+ text: qsTr("VOLUME")
+ color: "white"
+ font.pixelSize: fontSizeMedium
+ }
+
+ Dial {
+ id: volumeDial
+ from: 0
+ value: 42
+ to: 100
+ stepSize: 1
+
+ Layout.alignment: Qt.AlignHCenter
+ Layout.preferredWidth: 128
+ Layout.preferredHeight: 128
+
+ Label {
+ text: volumeDial.value.toFixed(0)
+ color: "white"
+ font.pixelSize: Qt.application.font.pixelSize * 3
+ anchors.centerIn: parent
+ }
+ }
+
+ ButtonGroup {
+ id: audioSourceButtonGroup
+ }
+
+ RowLayout {
+ Layout.topMargin: 8
+
+ LargeLabel {
+ id: radioOption
+ text: qsTr("RADIO")
+ color: "white"
+ font.pixelSize: fontSizeMedium
+ horizontalAlignment: Label.AlignLeft
+
+ Layout.fillWidth: true
+ }
+ LargeLabel {
+ text: qsTr("AUX")
+ color: colorLightGrey
+ font.pixelSize: fontSizeMedium * 0.8
+ horizontalAlignment: Label.AlignHCenter
+ glowEnabled: false
+
+ Layout.alignment: Qt.AlignBottom
+ Layout.fillWidth: true
+ }
+ LargeLabel {
+ text: qsTr("MP3")
+ color: colorDarkGrey
+ font.pixelSize: fontSizeMedium * 0.6
+ horizontalAlignment: Label.AlignRight
+ glowEnabled: false
+
+ Layout.alignment: Qt.AlignBottom
+ Layout.fillWidth: true
+ }
+ }
+
+ Frame {
+ id: stationFrame
+ leftPadding: 1
+ rightPadding: 1
+ topPadding: 1
+ bottomPadding: 1
+
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.preferredHeight: 128
+
+ ListView {
+ id: stationListView
+ clip: true
+ anchors.fill: parent
+
+ ScrollIndicator.vertical: ScrollIndicator {
+ parent: stationFrame
+ anchors.top: parent.top
+ anchors.right: parent.right
+ anchors.rightMargin: 1
+ anchors.bottom: parent.bottom
+ }
+
+ model: ListModel {
+ 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
+ width: stationListView.width
+ height: 22
+ text: model.name
+ font.pixelSize: fontSizeExtraSmall
+ topPadding: 0
+ bottomPadding: 0
+
+ contentItem: RowLayout {
+ Label {
+ 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
+ }
+ }
+ }
+ }
+ }
+
+ Frame {
+ Layout.fillWidth: true
+ Layout.fillHeight: false
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ Label {
+ text: qsTr("Sort by")
+ font.pixelSize: fontSizeExtraSmall
+ }
+
+ 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
+ }
+ }
+ }
+ }
+ }
+ }
+
+ Rectangle {
+ color: colorMain
+ implicitWidth: 1
+ Layout.fillHeight: true
+ }
+
+ ColumnLayout {
+ Layout.preferredWidth: 350
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ LargeLabel {
+ id: timeLabel
+ text: qsTr("11:02")
+ font.pixelSize: fontSizeExtraLarge
+
+ Layout.alignment: Qt.AlignHCenter
+
+ LargeLabel {
+ text: qsTr("AM")
+ font.pixelSize: fontSizeLarge
+ anchors.left: parent.right
+ anchors.leftMargin: 8
+ }
+ }
+
+ Label {
+ text: qsTr("01/01/2018")
+ color: colorLightGrey
+ font.pixelSize: fontSizeMedium
+
+ Layout.alignment: Qt.AlignHCenter
+ Layout.topMargin: 2
+ Layout.bottomMargin: 10
+ }
+
+ Image {
+ source: "qrc:/icons/car.png"
+ fillMode: Image.PreserveAspectFit
+
+ Layout.fillHeight: true
+
+ Column {
+ x: parent.width * 0.88
+ y: parent.height * 0.56
+ spacing: 3
+
+ Image {
+ source: "qrc:/icons/warning.png"
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ LargeLabel {
+ text: qsTr("Door open")
+ color: colorWarning
+ }
+ }
+ }
+ }
+
+ Rectangle {
+ color: colorMain
+ implicitWidth: 1
+ Layout.fillHeight: true
+ }
+
+ ColumnLayout {
+ Row {
+ spacing: 8
+
+ Image {
+ source: "qrc:/icons/weather.png"
+ }
+
+ Column {
+ spacing: 8
+
+ Row {
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ LargeLabel {
+ id: outsideTempValueLabel
+ text: qsTr("31")
+ font.pixelSize: fontSizeExtraLarge
+ }
+
+ LargeLabel {
+ text: qsTr("°C")
+ font.pixelSize: Qt.application.font.pixelSize * 2.5
+ anchors.baseline: outsideTempValueLabel.baseline
+ }
+ }
+
+ Label {
+ text: qsTr("Osaka, Japan")
+ color: colorLightGrey
+ font.pixelSize: fontSizeMedium
+ }
+ }
+ }
+
+ ColumnLayout {
+ id: airConRowLayout
+ spacing: 8
+
+ Layout.preferredWidth: 128
+ Layout.preferredHeight: 380
+ Layout.fillHeight: true
+
+ Item {
+ Layout.fillHeight: true
+ }
+
+ SwitchDelegate {
+ text: qsTr("AC")
+ leftPadding: 0
+ rightPadding: 0
+ topPadding: 0
+ bottomPadding: 0
+
+ Layout.fillWidth: true
+ }
+
+ // QTBUG-63269
+ Item {
+ implicitHeight: temperatureValueLabel.implicitHeight
+ Layout.fillWidth: true
+ Layout.topMargin: 16
+
+ Label {
+ text: qsTr("Temperature")
+ anchors.baseline: temperatureValueLabel.bottom
+ anchors.left: parent.left
+ }
+
+ LargeLabel {
+ id: temperatureValueLabel
+ text: qsTr("24°C")
+ font.pixelSize: fontSizeLarge
+ anchors.right: parent.right
+ }
+ }
+
+ Slider {
+ value: 0.35
+ Layout.fillWidth: true
+ }
+
+ // QTBUG-63269
+ Item {
+ implicitHeight: powerValueLabel.implicitHeight
+ Layout.fillWidth: true
+ Layout.topMargin: 16
+
+ Label {
+ text: qsTr("Power")
+ anchors.baseline: powerValueLabel.bottom
+ anchors.left: parent.left
+ }
+
+ LargeLabel {
+ id: powerValueLabel
+ text: qsTr("10%")
+ font.pixelSize: fontSizeLarge
+ anchors.right: parent.right
+ }
+ }
+
+ Slider {
+ value: 0.25
+ Layout.fillWidth: true
+ }
+
+ SwitchDelegate {
+ text: qsTr("Low")
+ leftPadding: 0
+ rightPadding: 0
+ topPadding: 0
+ bottomPadding: 0
+
+ Layout.fillWidth: true
+ Layout.topMargin: 16
+ }
+
+ SwitchDelegate {
+ text: qsTr("High")
+ checked: true
+ leftPadding: 0
+ rightPadding: 0
+ topPadding: 0
+ bottomPadding: 0
+
+ Layout.fillWidth: true
+ }
+
+ SwitchDelegate {
+ text: qsTr("Defog")
+ leftPadding: 0
+ rightPadding: 0
+ topPadding: 0
+ bottomPadding: 0
+
+ Layout.fillWidth: true
+ }
+
+ SwitchDelegate {
+ text: qsTr("Recirculate")
+ leftPadding: 0
+ rightPadding: 0
+ topPadding: 0
+ bottomPadding: 0
+
+ Layout.fillWidth: true
+ }
+
+ Item {
+ Layout.fillHeight: true
+ }
+ }
+ }
+
+ Container {
+ id: rightTabBar
+
+ currentIndex: 1
+
+ Layout.fillHeight: true
+ Layout.fillWidth: false
+
+ ButtonGroup {
+ buttons: rightTabBarContentLayout.children
+ }
+
+ contentItem: ColumnLayout {
+ id: rightTabBarContentLayout
+ spacing: 3
+
+ Repeater {
+ model: rightTabBar.contentModel
+ }
+ }
+
+ Item {
+ Layout.fillHeight: true
+ }
+
+ FeatureButton {
+ text: qsTr("Windows")
+ icon.name: "windows"
+
+ Layout.maximumHeight: navigationFeatureButton.height
+ Layout.fillHeight: true
+ Layout.fillWidth: false
+ }
+ FeatureButton {
+ text: qsTr("Air Con.")
+ icon.name: "air-con"
+ checked: true
+
+ Layout.maximumHeight: navigationFeatureButton.height
+ Layout.fillHeight: true
+ Layout.fillWidth: false
+ }
+ FeatureButton {
+ text: qsTr("Seats")
+ icon.name: "seats"
+
+ Layout.maximumHeight: navigationFeatureButton.height
+ Layout.fillHeight: true
+ Layout.fillWidth: false
+ }
+ FeatureButton {
+ text: qsTr("Statistics")
+ icon.name: "statistics"
+
+ Layout.maximumHeight: navigationFeatureButton.height
+ Layout.fillHeight: true
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/imagine/automotive/qml/qml.qrc b/examples/quickcontrols/imagine/automotive/qml/qml.qrc
new file mode 100644
index 0000000000..b0e4e558a8
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/qml/qml.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/qml">
+ <file>FeatureButton.qml</file>
+ <file>automotive.qml</file>
+ <file>LargeLabel.qml</file>
+ </qresource>
+</RCC>
diff --git a/examples/quickcontrols/imagine/automotive/qtquickcontrols2.conf b/examples/quickcontrols/imagine/automotive/qtquickcontrols2.conf
new file mode 100644
index 0000000000..94601428d0
--- /dev/null
+++ b/examples/quickcontrols/imagine/automotive/qtquickcontrols2.conf
@@ -0,0 +1,8 @@
+[Controls]
+Style=Imagine
+
+[Imagine]
+Path=:/imagine-assets
+Palette\Text=#6affcd
+Palette\ButtonText=#6affcd
+Palette\WindowText=#6affcd
diff --git a/examples/quickcontrols/ios/todolist/AppSettings.qml b/examples/quickcontrols/ios/todolist/AppSettings.qml
new file mode 100644
index 0000000000..37a9fe33e9
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/AppSettings.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+pragma Singleton
+
+import QtCore
+
+Settings {
+ // The properties here are given default values to account for the first run of the application.
+ // After the application has run once, future values will come from the stored settings.
+ property bool showDoneTasks: true
+ property int maxTasks: 30
+ property int fontSize: 18
+}
diff --git a/examples/quickcontrols/ios/todolist/CMakeLists.txt b/examples/quickcontrols/ios/todolist/CMakeLists.txt
new file mode 100644
index 0000000000..64d7624679
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/CMakeLists.txt
@@ -0,0 +1,86 @@
+cmake_minimum_required(VERSION 3.18)
+project(todolist LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 COMPONENTS Gui Qml Quick QuickControls2)
+
+qt_add_executable(todolist
+ src/main.cpp
+)
+
+set_target_properties(todolist PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(todolist PUBLIC
+ Qt${QT_VERSION_MAJOR}::Core
+ Qt${QT_VERSION_MAJOR}::Gui
+ Qt${QT_VERSION_MAJOR}::Qml
+ Qt${QT_VERSION_MAJOR}::Quick
+ Qt${QT_VERSION_MAJOR}::QuickControls2
+)
+
+set_source_files_properties(AppSettings.qml PROPERTIES
+ QT_QML_SINGLETON_TYPE TRUE
+)
+
+set_source_files_properties(Database.qml PROPERTIES
+ QT_QML_SINGLETON_TYPE TRUE
+)
+
+qt_add_qml_module(todolist
+ URI App
+ QML_FILES
+ AppSettings.qml
+ Database.qml
+ FontSizePage.qml
+ HomePage.qml
+ MaxTasksPage.qml
+ NavBar.qml
+ ProjectPage.qml
+ SettingsPage.qml
+ ToggleCompletedTasksPage.qml
+ main.qml
+ RESOURCES
+ images/back.png
+ images/back@2x.png
+ images/back@3x.png
+ images/back-white.png
+ images/back-white@2x.png
+ images/back-white@3x.png
+ images/close.png
+ images/close@2x.png
+ images/close@3x.png
+ images/close-white.png
+ images/close-white@2x.png
+ images/close-white@3x.png
+ images/plus-math.png
+ images/plus-math@2x.png
+ images/plus-math@3x.png
+ images/settings.png
+ images/settings@2x.png
+ images/settings@3x.png
+ images/add-new.png
+ images/add-new@2x.png
+ images/add-new@3x.png
+ NO_RESOURCE_TARGET_PATH
+)
+
+set_property(GLOBAL PROPERTY XCODE_EMIT_EFFECTIVE_PLATFORM_NAME ON)
+
+install(TARGETS todolist
+ 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
new file mode 100644
index 0000000000..eb85402b26
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/Database.qml
@@ -0,0 +1,161 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+pragma Singleton
+
+import QtQml
+import QtQuick.LocalStorage
+
+QtObject {
+ id: root
+
+ property var _db
+
+ function _database() {
+ if (_db)
+ return _db
+
+ try {
+ let db = LocalStorage.openDatabaseSync("ToDoList", "1.0", "ToDoList application database")
+
+ db.transaction(function (tx) {
+ tx.executeSql(`CREATE TABLE IF NOT EXISTS projects (
+ project_id INTEGER PRIMARY KEY AUTOINCREMENT,
+ project_name TEXT NOT NULL CHECK(project_name != ''),
+ project_note TEXT
+ )`);
+ })
+
+ db.transaction(function (tx) {
+ tx.executeSql(`CREATE TABLE IF NOT EXISTS tasks (
+ task_id INTEGER PRIMARY KEY AUTOINCREMENT,
+ task_name TEXT CHECK(task_name != ''),
+ done INTEGER,
+ project_id,
+ FOREIGN KEY(project_id) REFERENCES projects(project_id)
+ )`);
+ })
+
+ _db = db
+ } catch (error) {
+ console.log("Error opening database: " + error)
+ };
+
+ return _db
+ }
+
+ function getProjects() {
+ let projects = []
+ root._database().transaction(function (tx) {
+ let results = tx.executeSql('SELECT * FROM projects')
+ for (let i = 0; i < results.rows.length; i++) {
+ let projectRow = results.rows.item(i)
+ let projectId = projectRow.project_id
+ let completedTasks = Math.max(countDoneTasksByProject(projectId).rows.length, 0)
+ let totalTasks = Math.max(countTaskByProject(projectId).rows.length, 0)
+ projects.push({
+ "projectName": projectRow.project_name,
+ "projectId": projectId,
+ "projectNote": projectRow.project_note ?? "",
+ "completedTasks": completedTasks,
+ "totalTasks": totalTasks
+ })
+ }
+ })
+ return projects
+ }
+
+ function newProject(projectName) {
+ let results
+ root._database().transaction(function (tx) {
+ results = tx.executeSql("INSERT INTO projects (project_name) VALUES(?)", [projectName])
+ })
+ return results
+ }
+
+ function updateProjectNote(projectId, projectNote) {
+ root._database().transaction(function (tx) {
+ tx.executeSql("UPDATE projects set project_note=? WHERE project_id=?", [projectNote, projectId])
+ })
+ }
+
+ function updateProjectName(projectId, projectName) {
+ root._database().transaction(function (tx) {
+ tx.executeSql("UPDATE projects set project_name=? WHERE project_id=?", [projectName, projectId])
+ })
+ }
+
+ function deleteProject(projectId) {
+ root._database().transaction(function (tx) {
+ deleteAllTasks(projectId)
+ tx.executeSql("DELETE FROM projects WHERE project_id = ?", [projectId])
+ })
+ }
+
+ function getTaskByProject(projectId) {
+ if (!projectId)
+ return
+
+ let tasks = []
+ root._database().transaction(function (tx) {
+ let results = tx.executeSql("SELECT * FROM tasks WHERE project_id = " + [projectId] + " ORDER BY done")
+ for (let i = 0; i < results.rows.length; i++) {
+ let row = results.rows.item(i)
+ tasks.push({
+ "taskId": row.task_id,
+ "taskName": row.task_name,
+ "done": row.done === 1 ? true : false
+ })
+ }
+ })
+ return tasks
+ }
+
+ function countTaskByProject(projectId) {
+ let results
+ root._database().transaction(function (tx) {
+ results = tx.executeSql('SELECT task_id FROM tasks WHERE project_id =' + [projectId])
+ })
+ return results
+ }
+
+ function countDoneTasksByProject(projectId) {
+ let results
+ root._database().transaction(function (tx) {
+ results = tx.executeSql("SELECT task_id FROM tasks WHERE project_id =" + [projectId] + " AND done = 1")
+ })
+ return results
+ }
+
+ function newTask(projectId, taskName) {
+ let results
+ root._database().transaction(function (tx) {
+ results = tx.executeSql("INSERT INTO tasks (task_name, done, project_id) VALUES(?, 0, ?)", [taskName, projectId])
+ })
+ return results
+ }
+
+ function updateTaskName(taskId, taskName) {
+ root._database().transaction(function (tx) {
+ tx.executeSql("UPDATE tasks set task_name=? WHERE task_id=?", [taskName, taskId])
+ })
+ }
+
+ function updateDoneState(taskId, doneState) {
+ root._database().transaction(function (tx) {
+ tx.executeSql("UPDATE tasks set done=? WHERE task_id=?", [doneState, taskId])
+ })
+ }
+
+ function deleteAllTasks(projectId) {
+ root._database().transaction(function (tx) {
+ tx.executeSql("DELETE FROM tasks WHERE project_id =" + projectId)
+ })
+ }
+
+ function deleteTask(taskId) {
+ root._database().transaction(function (tx) {
+ tx.executeSql("DELETE FROM tasks WHERE task_id = ?", [taskId])
+ })
+ }
+}
diff --git a/examples/quickcontrols/ios/todolist/FontSizePage.qml b/examples/quickcontrols/ios/todolist/FontSizePage.qml
new file mode 100644
index 0000000000..89c8bd4518
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/FontSizePage.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Page {
+ Frame {
+ width: parent.width - 60
+ anchors.centerIn: parent
+ topPadding: 12
+ bottomPadding: 12
+
+ RowLayout {
+ anchors.fill: parent
+ spacing: 12
+
+ Label {
+ text: qsTr("A")
+ font.pointSize: 15
+ font.weight: 400
+ }
+
+ Slider {
+ snapMode: Slider.SnapAlways
+ stepSize: 1
+ from: 15
+ value: AppSettings.fontSize
+ to: 21
+
+ Layout.fillWidth: true
+
+ onMoved: AppSettings.fontSize = value
+ }
+
+ Label {
+ text: qsTr("A")
+ font.pointSize: 21
+ font.weight: 400
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/ios/todolist/HomePage.qml b/examples/quickcontrols/ios/todolist/HomePage.qml
new file mode 100644
index 0000000000..39753e0be7
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/HomePage.qml
@@ -0,0 +1,173 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.LocalStorage
+
+Page {
+ id: root
+
+ header: Label {
+ text: qsTr("Projects")
+ font.pointSize: AppSettings.fontSize + 20
+ font.styleName: "Semibold"
+ leftPadding: 30
+ topPadding: 20
+ bottomPadding: 20
+ }
+
+ ListView {
+ id: projectListView
+ anchors.fill: parent
+ clip: true
+
+ model: ListModel {
+ id: projectsModel
+
+ Component.onCompleted: {
+ let projects = Database.getProjects()
+ for (let project of projects)
+ append(project)
+ }
+ }
+
+ delegate: SwipeDelegate {
+ id: projectDelegate
+ width: ListView.view.width
+ height: projectContent.implicitHeight
+
+ required property int index
+ required property int projectId
+ required property string projectName
+ required property int completedTasks
+ required property int totalTasks
+
+ swipe.right: Rectangle {
+ width: 50
+ height: parent.height
+ color: "red"
+ anchors.right: parent.right
+
+ SwipeDelegate.onClicked: {
+ Database.deleteProject(projectDelegate.projectId)
+ projectsModel.remove(projectDelegate.index, 1)
+ }
+
+ Image {
+ source: Qt.styleHints.colorScheme === Qt.Dark ? "images/close-white.png"
+ : "images/close.png"
+ width: 20
+ height: 20
+ anchors.centerIn: parent
+ }
+ }
+
+ Column {
+ id: projectContent
+ topPadding: 8
+ bottomPadding: 10
+ leftPadding: 30
+
+ Label {
+ text: completedTasks + " / " + totalTasks
+ font.pointSize: AppSettings.fontSize
+ }
+
+ Label {
+ id: project
+ text: projectName
+ font.pointSize: AppSettings.fontSize
+ font.styleName: "Semibold"
+ }
+ }
+
+ Connections {
+ target: projectDelegate
+ function onClicked() {
+ let project = projectsModel.get(index)
+ root.StackView.view.push("ProjectPage.qml", {
+ "projectsModel": projectsModel,
+ "projectId": project.projectId,
+ "projectName": project.projectName,
+ "projectIndex": index,
+ "projectNote": project.projectNote,
+ "completedTasks": project.completedTasks,
+ "totalTasks": project.totalTasks
+ })
+ }
+ }
+ }
+ }
+
+ Popup {
+ id: newProjectPopup
+ anchors.centerIn: parent
+ height: 200
+ modal: true
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ Label {
+ text: qsTr("Project Name")
+ font.pointSize: AppSettings.fontSize + 2.0
+ font.bold: true
+
+ Layout.alignment: Qt.AlignHCenter
+ }
+
+ TextField {
+ id: newProjectTextField
+ placeholderText: qsTr("Enter project name")
+ font.pointSize: AppSettings.fontSize
+
+ Layout.fillWidth: true
+ Layout.leftMargin: 10
+ Layout.rightMargin: 10
+
+ Keys.onReturnPressed: {
+ if (createProjectButton.enabled)
+ createProjectButton.clicked()
+ }
+ }
+
+ Button {
+ id: createProjectButton
+ text: qsTr("Create project")
+ flat: true
+ font.pointSize: AppSettings.fontSize
+ enabled: newProjectTextField.length > 0
+
+ Layout.alignment: Qt.AlignHCenter
+ Layout.fillWidth: false
+
+ onClicked: {
+ let results = Database.newProject(newProjectTextField.text)
+ projectsModel.append({
+ projectId: parseInt(results.insertId),
+ projectName: newProjectTextField.text,
+ totalTasks: 0,
+ completedTasks: 0,
+ projectNote: ""
+ })
+ newProjectTextField.text = ""
+ newProjectPopup.close()
+ }
+ }
+ }
+ }
+
+ footer: ToolBar {
+ ToolButton {
+ anchors.right: parent.right
+ anchors.rightMargin: 5
+ text: qsTr("New project")
+ font.pointSize: AppSettings.fontSize - 2
+ icon.source: "images/add-new.png"
+
+ onClicked: newProjectPopup.open()
+ }
+ }
+}
diff --git a/examples/quickcontrols/ios/todolist/MaxTasksPage.qml b/examples/quickcontrols/ios/todolist/MaxTasksPage.qml
new file mode 100644
index 0000000000..5b1a854617
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/MaxTasksPage.qml
@@ -0,0 +1,37 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Page {
+ ColumnLayout {
+ width: parent.width
+ anchors.verticalCenter: parent.verticalCenter
+
+ Label {
+ id: maxTasksText
+ horizontalAlignment: Text.AlignHCenter
+ wrapMode: Text.Wrap
+ text: qsTr("Choose the maximum amount of tasks each project can have.")
+ font.pointSize: AppSettings.fontSize
+
+ Layout.fillWidth: true
+ }
+
+ SpinBox {
+ id: maxTasksSpinbox
+ editable: true
+ from: 5
+ value: AppSettings.maxTasks
+ to: 30
+
+ 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
new file mode 100644
index 0000000000..717993dfda
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/NavBar.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+ToolBar {
+ id: root
+ width: parent.width
+
+ required property StackView stackView
+
+ ToolButton {
+ enabled: root.stackView.depth >= 2
+ anchors.left: parent.left
+ anchors.leftMargin: 5
+ visible: root.stackView.depth >= 2
+ anchors.verticalCenter: parent.verticalCenter
+ display: AbstractButton.TextBesideIcon
+ text: root.stackView.depth > 2 ? qsTr("Back") : qsTr("Home")
+ font.pointSize: AppSettings.fontSize
+ icon.source: "images/back.png"
+ icon.height: 20
+ icon.width: 20
+
+ onClicked: root.stackView.pop()
+ }
+
+ ToolButton {
+ anchors.right: parent.right
+ anchors.rightMargin: 5
+ icon.source: "images/settings.png"
+ icon.height: 20
+ icon.width: 20
+ visible: {
+ // Force the binding to re-evaluate so that the title check is run each time the page changes.
+ root.stackView.currentItem
+ !root.stackView.find((item, index) => { return item.title === "settingsPage" })
+ }
+
+ onClicked: root.stackView.push("SettingsPage.qml")
+ }
+}
+
diff --git a/examples/quickcontrols/ios/todolist/ProjectPage.qml b/examples/quickcontrols/ios/todolist/ProjectPage.qml
new file mode 100644
index 0000000000..8319206fe9
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/ProjectPage.qml
@@ -0,0 +1,256 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Page {
+ id: root
+
+ required property int projectIndex
+ required property int projectId
+ required property string projectName
+ required property string projectNote
+
+ required property int completedTasks
+ required property int totalTasks
+
+ required property ListModel projectsModel
+
+ header: ColumnLayout {
+ id: titleRow
+ spacing: 4
+
+ TextField {
+ id: projectNameLabel
+ Layout.fillWidth: true
+ text: root.projectName
+ font.pointSize: AppSettings.fontSize + 10
+ font.styleName: "Bold"
+ padding: 0
+ background: null
+ wrapMode: TextField.Wrap
+
+ Layout.topMargin: 10
+ Layout.leftMargin: 20
+ Layout.rightMargin: 20
+
+ onEditingFinished: {
+ Database.updateProjectName(root.projectId, text)
+ projectsModel.setProperty(projectIndex, "projectName", projectNameLabel.text)
+ }
+ }
+
+ Label {
+ text: root.completedTasks + " / " + root.totalTasks
+ Layout.leftMargin: 20
+ }
+
+ ProgressBar {
+ id: progressBar
+ from: 0
+ value: root.completedTasks
+ to: root.totalTasks
+ Layout.leftMargin: 20
+ Layout.fillWidth: false
+ }
+ }
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ TextArea {
+ id: textArea
+ leftPadding: 15
+ rightPadding: doneButton.width
+ bottomPadding: 10
+ topPadding: 10
+ font.pointSize: AppSettings.fontSize
+ placeholderText: qsTr("Write a note...")
+ text: root.projectNote
+ wrapMode: TextArea.Wrap
+ clip: true
+
+ Layout.fillWidth: true
+ Layout.preferredHeight: 80
+ Layout.topMargin: 20
+
+ onEditingFinished: {
+ Database.updateProjectNote(root.projectId, text)
+ projectsModel.setProperty(projectIndex, "projectNote", textArea.text)
+ }
+
+ Button {
+ id: doneButton
+ text: qsTr("Done")
+ flat: true
+ visible: textArea.focus
+ onClicked: textArea.editingFinished()
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ }
+ }
+
+ ListView {
+ id: taskListView
+ model: taskModel
+ clip: true
+
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.topMargin: 20
+
+ ListModel {
+ id: taskModel
+
+ Component.onCompleted: {
+ let tasks = Database.getTaskByProject(projectId)
+ for (let task of tasks)
+ append(task)
+ }
+ }
+
+ delegate: CheckDelegate {
+ id: taskList
+ width: taskListView.width
+ height: visible ? 40 : 0
+ checked: done
+ visible: !done || (done && AppSettings.showDoneTasks)
+
+ required property bool done
+ required property int taskId
+ required property string taskName
+ required property int index
+
+ onClicked: {
+ Database.updateDoneState(taskId, checked ? 1 : 0)
+ taskModel.setProperty(index, "done", checked)
+ root.completedTasks = Math.max(Database.countDoneTasksByProject(root.projectId).rows.length, 0)
+ root.totalTasks = Math.max(Database.countTaskByProject(root.projectId).rows.length, 0)
+ root.projectsModel.setProperty(projectIndex, "completedTasks", root.completedTasks)
+ }
+
+ TextField {
+ id: taskNameLabel
+ text: taskList.taskName
+ anchors.left: deleteTaskButton.right
+ anchors.leftMargin: 10
+ padding: 0
+ font.pointSize: AppSettings.fontSize
+ anchors.verticalCenter: parent.verticalCenter
+ background: null
+
+ onEditingFinished: {
+ Database.updateTaskName(taskList.taskId, taskNameLabel.text)
+ taskModel.setProperty(index, "taskName", taskNameLabel.text)
+ }
+ }
+
+ Button {
+ id: deleteTaskButton
+ anchors.left: parent.left
+ width: 15
+ height: 15
+ flat: true
+ topPadding: 0
+ bottomPadding: 0
+ rightPadding: 0
+ leftPadding: 0
+ anchors.leftMargin: 10
+ anchors.verticalCenter: parent.verticalCenter
+ icon.source: "images/close.png"
+ icon.color: Qt.styleHints.colorScheme === Qt.Dark ? "white" : "black"
+
+ onClicked: {
+ Database.deleteTask(taskList.taskId)
+ taskModel.remove(index, 1)
+ root.totalTasks--
+ if (taskList.done)
+ root.completedTasks--
+ }
+ }
+ }
+ }
+
+ Popup {
+ id: addTaskPopup
+ parent: root
+ anchors.centerIn: parent
+ height: 200
+ modal: true
+ focus: true
+
+ ColumnLayout {
+ anchors.fill: parent
+
+ Label {
+ text: qsTr("Add New Task")
+ font.pointSize: AppSettings.fontSize + 2.0
+ font.bold: true
+
+ Layout.alignment: Qt.AlignHCenter
+ }
+
+ TextField {
+ id: newTaskNameTextField
+ placeholderText: qsTr("Enter task name")
+ font.pointSize: AppSettings.fontSize
+
+ Keys.onReturnPressed: {
+ if (addTaskButton.enabled)
+ addTaskButton.clicked()
+ }
+
+ Layout.fillWidth: true
+ Layout.leftMargin: 10
+ Layout.rightMargin: 10
+ Layout.alignment: Qt.AlignHCenter
+ }
+
+ Button {
+ id: addTaskButton
+ text: qsTr("Add task")
+ flat: true
+ font.pointSize: AppSettings.fontSize
+ enabled: newTaskNameTextField.length > 0
+
+ Layout.alignment: Qt.AlignHCenter
+
+ onClicked: {
+ const result = Database.newTask(root.projectId, newTaskNameTextField.text)
+ taskModel.append({
+ "taskId": parseInt(result.insertId),
+ "taskName": newTaskNameTextField.text, "done": false
+ })
+ root.projectsModel.setProperty(projectIndex, "totalTasks", taskListView.count)
+ newTaskNameTextField.text = ""
+ root.totalTasks++
+ addTaskPopup.close()
+ }
+ }
+ }
+ }
+
+ Label {
+ text: qsTr("Task limit reached.")
+ Layout.alignment: Qt.AlignHCenter
+ Layout.bottomMargin: 20
+ font.pointSize: AppSettings.fontSize
+ visible: taskListView.count >= AppSettings.maxTasks
+ }
+ }
+
+ footer: ToolBar {
+ ToolButton {
+ anchors.right: parent.right
+ anchors.rightMargin: 5
+ text: qsTr("New task")
+ font.pointSize: AppSettings.fontSize - 2
+ icon.source: "images/add-new.png"
+ enabled: taskListView.count < AppSettings.maxTasks
+
+ onClicked: addTaskPopup.open()
+ }
+ }
+}
diff --git a/examples/quickcontrols/ios/todolist/SettingsPage.qml b/examples/quickcontrols/ios/todolist/SettingsPage.qml
new file mode 100644
index 0000000000..0f6f708974
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/SettingsPage.qml
@@ -0,0 +1,67 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Page {
+ title: "settingsPage"
+
+ property bool showDoneTasks: true
+
+ header: Label {
+ text: qsTr("Settings")
+ font.pointSize: AppSettings.fontSize + 20
+ font.styleName: "Semibold"
+ leftPadding: 20
+ topPadding: 20
+ }
+
+ ListView {
+ anchors.fill: parent
+ topMargin: 20
+ model: listModel
+ clip: true
+
+ ListModel {
+ id: listModel
+ ListElement {
+ setting: qsTr("Font size")
+ page: "FontSize"
+ }
+
+ ListElement {
+ setting: qsTr("Maximum number of tasks per project")
+ page: "MaxTasks"
+ }
+
+ ListElement {
+ setting: qsTr("Show completed tasks")
+ page: "ToggleCompletedTasks"
+ }
+ }
+
+ delegate: ItemDelegate {
+ width: parent.width
+ text: setting
+ font.pointSize: AppSettings.fontSize
+
+ onClicked: stackView.push(page + "Page.qml")
+
+ required property string setting
+ required property string page
+
+ Image {
+ source: Qt.styleHints.colorScheme === Qt.Dark ? "images/back-white.png"
+ : "images/back.png"
+ width: 20
+ height: 20
+ anchors.right: parent.right
+ anchors.rightMargin: 10
+ fillMode: Image.PreserveAspectFit
+ anchors.verticalCenter: parent.verticalCenter
+ mirror: true
+ }
+ }
+ }
+}
diff --git a/examples/quickcontrols/ios/todolist/ToggleCompletedTasksPage.qml b/examples/quickcontrols/ios/todolist/ToggleCompletedTasksPage.qml
new file mode 100644
index 0000000000..7e42eaf8f3
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/ToggleCompletedTasksPage.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Page {
+ ColumnLayout {
+ width: parent.width
+ anchors.verticalCenter: parent.verticalCenter
+
+ Label {
+ id: toggleText
+ horizontalAlignment: Text.AlignHCenter
+ wrapMode: Text.Wrap
+ text: toggleTasksSwitch.checked ? qsTr("Completed tasks will be shown.")
+ : qsTr("Completed tasks will be hidden.")
+ font.pointSize: AppSettings.fontSize
+
+ Layout.fillWidth: true
+ }
+
+ Switch {
+ id: toggleTasksSwitch
+ checked: AppSettings.showDoneTasks
+
+ Layout.alignment: Qt.AlignHCenter
+ Layout.topMargin: 10
+ Layout.fillWidth: false
+
+ onClicked: AppSettings.showDoneTasks = checked
+ }
+ }
+}
diff --git a/examples/quickcontrols/ios/todolist/doc/images/qtquickcontrols-todolist.png b/examples/quickcontrols/ios/todolist/doc/images/qtquickcontrols-todolist.png
new file mode 100644
index 0000000000..5be7190a43
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/doc/images/qtquickcontrols-todolist.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/doc/src/qtquickcontrols-todolist.qdoc b/examples/quickcontrols/ios/todolist/doc/src/qtquickcontrols-todolist.qdoc
new file mode 100644
index 0000000000..43e1e9310e
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/doc/src/qtquickcontrols-todolist.qdoc
@@ -0,0 +1,22 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example ios/todolist
+ \keyword Qt Quick Controls - To Do List
+ \title Qt Quick Controls - To Do List
+ \keyword Qt Quick Controls 2 - To Do List
+ \ingroup qtquickcontrols-examples
+ \brief To do list application for iOS.
+
+ This example demonstrates how to create a simple to do list application for
+ iOS using the \l {iOS Style}.
+
+ \image qtquickcontrols-todolist.png
+
+ The example also shows how an in-memory SQL database can be created and
+ used purely through QML, without needing C++, through the use of
+ \l {Qt Quick Local Storage QML Types}{LocalStorage}.
+
+ \include examples-run.qdocinc
+*/
diff --git a/examples/quickcontrols/ios/todolist/images/add-new.png b/examples/quickcontrols/ios/todolist/images/add-new.png
new file mode 100644
index 0000000000..2e60e48a2d
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/add-new.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/add-new@2x.png b/examples/quickcontrols/ios/todolist/images/add-new@2x.png
new file mode 100644
index 0000000000..edb8b62847
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/add-new@2x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/add-new@3x.png b/examples/quickcontrols/ios/todolist/images/add-new@3x.png
new file mode 100644
index 0000000000..b5b9b6a5d6
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/add-new@3x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/back-white.png b/examples/quickcontrols/ios/todolist/images/back-white.png
new file mode 100644
index 0000000000..503bdf4d48
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/back-white.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/back-white@2x.png b/examples/quickcontrols/ios/todolist/images/back-white@2x.png
new file mode 100644
index 0000000000..e201ec6d5b
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/back-white@2x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/back-white@3x.png b/examples/quickcontrols/ios/todolist/images/back-white@3x.png
new file mode 100644
index 0000000000..eb8b7ffc68
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/back-white@3x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/back.png b/examples/quickcontrols/ios/todolist/images/back.png
new file mode 100644
index 0000000000..94580efd7f
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/back.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/back@2x.png b/examples/quickcontrols/ios/todolist/images/back@2x.png
new file mode 100644
index 0000000000..b5cf424e91
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/back@2x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/back@3x.png b/examples/quickcontrols/ios/todolist/images/back@3x.png
new file mode 100644
index 0000000000..50d5102f4e
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/back@3x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/close-white.png b/examples/quickcontrols/ios/todolist/images/close-white.png
new file mode 100644
index 0000000000..72163067a6
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/close-white.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/close-white@2x.png b/examples/quickcontrols/ios/todolist/images/close-white@2x.png
new file mode 100644
index 0000000000..54828e84d1
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/close-white@2x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/close-white@3x.png b/examples/quickcontrols/ios/todolist/images/close-white@3x.png
new file mode 100644
index 0000000000..dd67cf1b69
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/close-white@3x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/close.png b/examples/quickcontrols/ios/todolist/images/close.png
new file mode 100644
index 0000000000..eba32b637d
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/close.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/close@2x.png b/examples/quickcontrols/ios/todolist/images/close@2x.png
new file mode 100644
index 0000000000..72cf76317a
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/close@2x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/close@3x.png b/examples/quickcontrols/ios/todolist/images/close@3x.png
new file mode 100644
index 0000000000..6cb2ea58d9
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/close@3x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/plus-math.png b/examples/quickcontrols/ios/todolist/images/plus-math.png
new file mode 100644
index 0000000000..b0d182d23e
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/plus-math.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/plus-math@2x.png b/examples/quickcontrols/ios/todolist/images/plus-math@2x.png
new file mode 100644
index 0000000000..112a132084
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/plus-math@2x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/plus-math@3x.png b/examples/quickcontrols/ios/todolist/images/plus-math@3x.png
new file mode 100644
index 0000000000..ca513d200b
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/plus-math@3x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/settings.png b/examples/quickcontrols/ios/todolist/images/settings.png
new file mode 100644
index 0000000000..600981fb35
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/settings.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/settings@2x.png b/examples/quickcontrols/ios/todolist/images/settings@2x.png
new file mode 100644
index 0000000000..80541aa028
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/settings@2x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/images/settings@3x.png b/examples/quickcontrols/ios/todolist/images/settings@3x.png
new file mode 100644
index 0000000000..48c2b2a8c0
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/images/settings@3x.png
Binary files differ
diff --git a/examples/quickcontrols/ios/todolist/main.qml b/examples/quickcontrols/ios/todolist/main.qml
new file mode 100644
index 0000000000..d4318dfd69
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/main.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 390
+ height: 844
+ visible: true
+ title: "To Do List"
+
+ header: NavBar {
+ stackView: stackView
+ }
+
+ Flickable {
+ width: parent.width
+ height: parent.height
+ flickableDirection: Flickable.VerticalFlick
+ boundsBehavior: Flickable.StopAtBounds
+
+ ScrollIndicator.vertical: ScrollIndicator {}
+
+ StackView {
+ id: stackView
+ anchors.fill: parent
+ initialItem: HomePage {}
+ }
+ }
+}
diff --git a/examples/quickcontrols/ios/todolist/qmldir b/examples/quickcontrols/ios/todolist/qmldir
new file mode 100644
index 0000000000..e0c443110e
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/qmldir
@@ -0,0 +1,2 @@
+singleton Database 1.0 Database.qml
+singleton AppSettings 1.0 AppSettings.qml
diff --git a/examples/quickcontrols/ios/todolist/src/main.cpp b/examples/quickcontrols/ios/todolist/src/main.cpp
new file mode 100644
index 0000000000..f0b0e194fb
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/src/main.cpp
@@ -0,0 +1,34 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+#include <QtQml/qqmlextensionplugin.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+using namespace Qt::StringLiterals;
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ QQuickStyle::setStyle("iOS");
+
+ QQmlApplicationEngine engine;
+ const QUrl url(u"qrc:/main.qml"_s);
+ QObject::connect(
+ &engine, &QQmlApplicationEngine::objectCreated, &app,
+ [url](QObject *obj, const QUrl &objUrl) {
+ if (!obj && url == objUrl)
+ QCoreApplication::exit(-1);
+ },
+ Qt::QueuedConnection);
+
+ engine.addImportPath(":/");
+
+ engine.load(url);
+ if (engine.rootObjects().isEmpty())
+ return -1;
+
+ return app.exec();
+}
diff --git a/examples/quickcontrols/ios/todolist/todolist.pro b/examples/quickcontrols/ios/todolist/todolist.pro
new file mode 100644
index 0000000000..e144770728
--- /dev/null
+++ b/examples/quickcontrols/ios/todolist/todolist.pro
@@ -0,0 +1,42 @@
+TEMPLATE = app
+TARGET = todolist
+QT += quick quickcontrols2
+
+SOURCES += src/main.cpp
+
+RESOURCES += \
+ images/back.png \
+ images/back@2x.png \
+ images/back@3x.png \
+ images/back-white.png \
+ images/back-white@2x.png \
+ images/back-white@3x.png \
+ images/close.png \
+ images/close@2x.png \
+ images/close@3x.png \
+ images/close-white.png \
+ images/close-white@2x.png \
+ images/close-white@3x.png \
+ images/plus-math.png \
+ images/plus-math@2x.png \
+ images/plus-math@3x.png \
+ images/settings.png \
+ images/settings@2x.png \
+ images/settings@3x.png \
+ images/add-new.png \
+ images/add-new@2x.png \
+ images/add-new@3x.png \
+ main.qml \
+ AppSettings.qml \
+ Database.qml \
+ FontSizePage.qml \
+ HomePage.qml \
+ MaxTasksPage.qml \
+ NavBar.qml \
+ ProjectPage.qml \
+ SettingsPage.qml \
+ ToggleCompletedTasksPage.qml \
+ qmldir
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/ios/todolist
+INSTALLS += target
diff --git a/examples/quickcontrols/quickcontrols.pro b/examples/quickcontrols/quickcontrols.pro
new file mode 100644
index 0000000000..7baf731218
--- /dev/null
+++ b/examples/quickcontrols/quickcontrols.pro
@@ -0,0 +1,15 @@
+TEMPLATE = subdirs
+SUBDIRS += \
+ gallery \
+ chattutorial \
+ texteditor \
+ contactlist \
+ wearable \
+ imagine/automotive
+
+win32|macos|unix {
+ qtHaveModule(svg): SUBDIRS += filesystemexplorer
+}
+
+qtHaveModule(sql): SUBDIRS += eventcalendar
+qtHaveModule(widgets): SUBDIRS += flatstyle
diff --git a/examples/quickcontrols/texteditor/+touch/texteditor.html b/examples/quickcontrols/texteditor/+touch/texteditor.html
new file mode 100644
index 0000000000..b5f03f258e
--- /dev/null
+++ b/examples/quickcontrols/texteditor/+touch/texteditor.html
@@ -0,0 +1,19 @@
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <meta name="qrichtext" content="1">
+ <title>Text Editor Example</title>
+</head>
+<body>
+<body>
+ <p align="center">
+ <img src="qrc:/images/qt-logo.png" />
+ </p>
+ <h2 align="center">
+ Qt Quick Controls 2
+ </h2>
+ <p align="center">
+ This example demonstrates a modern rich text editor.
+ </p>
+</body>
+</html>
diff --git a/examples/quickcontrols/texteditor/CMakeLists.txt b/examples/quickcontrols/texteditor/CMakeLists.txt
new file mode 100644
index 0000000000..6fa24b41c6
--- /dev/null
+++ b/examples/quickcontrols/texteditor/CMakeLists.txt
@@ -0,0 +1,54 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(texteditor LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2)
+
+qt_add_executable(texteditorexample WIN32 MACOSX_BUNDLE
+ texteditor.cpp
+)
+
+qt_add_qml_module(texteditorexample
+ URI texteditor
+ NO_RESOURCE_TARGET_PATH
+ QML_FILES
+ "qml/+touch/texteditor.qml"
+ "qml/texteditor.qml"
+ RESOURCES
+ "texteditor.html"
+ "+touch/texteditor.html"
+ "fonts/fontello.ttf"
+ "images/qt-logo.png"
+)
+
+target_link_libraries(texteditorexample PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickControls2
+)
+
+if(CMAKE_CROSSCOMPILING)
+ target_compile_definitions(texteditorexample PUBLIC
+ QT_EXTRA_FILE_SELECTOR="touch"
+ )
+endif()
+
+install(TARGETS texteditorexample
+ 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/creatorKateHighlighter.png b/examples/quickcontrols/texteditor/creatorKateHighlighter.png
new file mode 100644
index 0000000000..7dd819507f
--- /dev/null
+++ b/examples/quickcontrols/texteditor/creatorKateHighlighter.png
Binary files differ
diff --git a/examples/quickcontrols/texteditor/doc/images/qtquickcontrols-texteditor-desktop.jpg b/examples/quickcontrols/texteditor/doc/images/qtquickcontrols-texteditor-desktop.jpg
new file mode 100644
index 0000000000..259e0e8b07
--- /dev/null
+++ b/examples/quickcontrols/texteditor/doc/images/qtquickcontrols-texteditor-desktop.jpg
Binary files differ
diff --git a/examples/quickcontrols/texteditor/doc/images/qtquickcontrols-texteditor-touch.jpg b/examples/quickcontrols/texteditor/doc/images/qtquickcontrols-texteditor-touch.jpg
new file mode 100644
index 0000000000..6a924cdf52
--- /dev/null
+++ b/examples/quickcontrols/texteditor/doc/images/qtquickcontrols-texteditor-touch.jpg
Binary files differ
diff --git a/examples/quickcontrols/texteditor/doc/src/qtquickcontrols-texteditor.qdoc b/examples/quickcontrols/texteditor/doc/src/qtquickcontrols-texteditor.qdoc
new file mode 100644
index 0000000000..40ab1915e6
--- /dev/null
+++ b/examples/quickcontrols/texteditor/doc/src/qtquickcontrols-texteditor.qdoc
@@ -0,0 +1,163 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+/*!
+ \example texteditor
+ \keyword Qt Quick Controls - Text Editor
+ \title Qt Quick Controls - Text Editor
+ \keyword Qt Quick Controls 2 - Text Editor
+ \ingroup qtquickcontrols-examples
+ \examplecategory {Graphics}
+ \brief A rich-text editor app using Qt Quick Controls.
+
+ 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, Markdown and plain text 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 Action
+ \printuntil openAction
+ \printto Action
+
+ 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.
+
+ The \l Action for saving the file is enabled only if there are changes to save:
+
+ \printuntil saveAction
+ \printto Action
+
+ \skipto quitAction
+ \skipuntil }
+
+ The \l Action for copying selected text is enabled only if some text is selected:
+
+ \printuntil copyAction
+ \printuntil }
+
+ \skipto pasteAction
+ \skipuntil }
+
+ 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
+
+ The main part of the text editor is a \l TextArea inside a \l Flickable:
+
+ \skipto Flickable
+ \printuntil persistentSelection
+ \dots 12
+
+ 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.
+
+ 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.
+
+ There is a context menu; we use a TapHandler to detect a right-click and
+ open it:
+
+ \skipto TapHandler
+ \printuntil }
+
+ 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.
+
+ \skipto Menu
+ \printuntil MenuItem
+ \printuntil }
+ \dots 8
+
+ 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.
+
+ We use several kinds of \l {Qt Quick Dialogs QML Types}{dialogs}:
+
+ \quotefromfile texteditor/qml/texteditor.qml
+ \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/einstein.png b/examples/quickcontrols/texteditor/einstein.png
new file mode 100644
index 0000000000..3611284df4
--- /dev/null
+++ b/examples/quickcontrols/texteditor/einstein.png
Binary files differ
diff --git a/examples/quickcontrols/texteditor/example.md b/examples/quickcontrols/texteditor/example.md
new file mode 100644
index 0000000000..f54edab5ae
--- /dev/null
+++ b/examples/quickcontrols/texteditor/example.md
@@ -0,0 +1,179 @@
+# Markdown in Qt Quick
+
+The Text, TextEdit and TextArea items support rich text formatted in HTML.
+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://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,
+you can edit this document to explore Qt's rich text editing features.
+We have included some comments in each of the following sections to
+encourage you to experiment.
+
+## Font and Paragraph Styles
+
+Markdown supports **bold**, *italic*, ~~strikethrough~~ and `monospace` font
+styles.
+
+> A block quote is indented according to the convention for email quoting.
+
+ A block of code;
+ can be indented;
+ with 4 spaces or a tab;
+
+or
+
+```
+Block {
+ id: code
+ CanBe {
+ wrappedBy: "triple backticks"
+ }
+}
+```
+
+Block quotes can be nested, and block quotes can include indented code blocks.
+
+In [The CommonMark Specification](https://spec.commonmark.org/0.31.2/)
+John MacFarlane writes:
+
+> What distinguishes Markdown from many other lightweight markup syntaxes,
+> which are often easier to write, is its readability. As Gruber writes:
+
+> > The overriding design goal for Markdown's formatting syntax is to make it
+> > as readable as possible. The idea is that a Markdown-formatted document should
+> > be publishable as-is, as plain text, without looking like it's been marked up
+> > with tags or formatting instructions. (
+> > [http://daringfireball.net/projects/markdown/](http://daringfireball.net/projects/markdown/))
+
+> The point can be illustrated by comparing a sample of AsciiDoc with an
+> equivalent sample of Markdown. Here is a sample of AsciiDoc from the AsciiDoc
+> manual:
+
+> 1. List item one.
+> +
+> List item one continued with a second paragraph followed by an
+> Indented block.
+> +
+> .................
+> $ ls *.sh
+> $ mv *.sh ~/tmp
+> .................
+> +
+> List item continued with a third paragraph.
+>
+> 2. List item two continued with an open block.
+> ...
+>
+
+## Hyperlinks
+
+Hyperlinks can be written with the link text first, and the URL immediately
+following: [Qt Assistant](http://doc.qt.io/qt-6/qtassistant-index.html)
+
+A plain url is automatically recognized: https://doc.qt.io/qt-6/qml-qtquick-text.html
+
+There are also "reference links" where the link text is first labeled
+and then the URL for the label is given elsewhere:
+[The Qt Creator Manual][creatormanual]
+
+## Images
+
+Inline images like this one ![red square](red.png) flow with the surrounding text.
+
+The code for including an image is just a link that starts with a bang.
+An image in its own paragraph is given its own space:
+
+![Albert Einstein image](einstein.png)
+
+## Lists
+
+Different kinds of lists can be included. Standard bullet lists can be nested,
+using different symbols for each level of the list. List items can have nested
+items such as block quotes, code blocks and images. Check boxes can be included
+to form a task list.
+
+- Disc symbols are typically used for top-level list items.
+ * Circle symbols can be used to distinguish between items in lower-level
+ lists.
+ + Square symbols provide a reasonable alternative to discs and circles.
+ * Lists can be continued...
+ * further down
+- List items can include images: ![red square](red.png)
+- and even nested quotes, like this:
+
+ The [Qt Documentation](https://doc.qt.io/qt-6/qml-qtquick-textedit.html#details)
+ points out that
+ > The TextEdit item displays a block of editable, formatted text.
+ >
+ > It can display both plain and rich text. For example:
+ >
+ > TextEdit {
+ > width: 240
+ > text: "<b>Hello</b> <i>World!</i>"
+ > font.family: "Helvetica"
+ > font.pointSize: 20
+ > color: "blue"
+ > focus: true
+ > }
+- List items with check boxes allow task lists to be incorporated:
+ * [ ] This task is not yet done
+ * [x] We aced this one!
+
+Ordered lists can be used for tables of contents, for example. Each number
+should end with a period or a parenthesis:
+
+1. Markdown in Qt Quick
+ 1) Font and Paragraph Styles
+ 5) Hyperlinks
+ 3) Images ![red square](red.png)
+ 2) Lists
+ 4) Tables
+2. Related work
+
+The list will automatically be renumbered during rendering.
+
+## Thematic Breaks
+
+A horizontal rule is possible, as in HTML:
+
+- - -
+
+## Tables
+
+One of the GitHub extensions is support for tables:
+
+| |Development Tools |Programming Techniques |Graphical User Interfaces|
+|-------------|------------------------------------|---------------------------|-------------------------|
+|9:00 - 11:00 |Introduction to Qt |||
+|11:00 - 13:00|Using Qt Creator |QML and its runtime |Layouts in Qt |
+|13:00 - 15:00|Qt Quick Designer Tutorial |Extreme Programming |Writing Custom Styles |
+|15:00 - 17:00|Qt Linguist and Internationalization| | |
+
+# Related Work
+
+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.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
+system, you probably also have the `markdown.xml` syntax highlighting
+definition file; that can be reused to add Markdown syntax highlighting to
+Qt Creator.
+
+![creator markdown highlighting from Kate](creatorKateHighlighter.png)
+
+Qt owes thanks to the authors of the [MD4C parser](https://github.com/mity/md4c)
+for making markdown import possible. The QTextMarkdownWriter class does not
+have such dependencies, and also has not yet been tested as extensively, so we
+do not yet guarantee that we are able to rewrite every Markdown document that
+you are able to read and display with Text or TextEdit. But you are free to
+write [bugs](https://bugreports.qt.io) about any troublesome cases that you
+encounter.
+
+[creatormanual]: https://doc.qt.io/qtcreator/ "Qt Creator Manual"
diff --git a/examples/quickcontrols/texteditor/fonts/fontello.ttf b/examples/quickcontrols/texteditor/fonts/fontello.ttf
new file mode 100644
index 0000000000..2db6e2bc4b
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..63d0f222d8
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..376a8341eb
--- /dev/null
+++ b/examples/quickcontrols/texteditor/qml/+touch/texteditor.qml
@@ -0,0 +1,261 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+// TODO:
+// - make designer-friendly
+
+ApplicationWindow {
+ id: window
+ width: 480
+ height: 640
+ visible: true
+ 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
+
+ RowLayout {
+ anchors.fill: parent
+ spacing: 0
+
+ ToolButton {
+ id: doneEditingButton
+ font.family: "fontello"
+ text: "\uE809" // icon-ok
+ opacity: !textArea.readOnly ? 1 : 0
+ onClicked: textArea.readOnly = true
+ Layout.fillWidth: false
+ }
+
+ Label {
+ text: qsTr("Text Editor Example")
+ font.bold: true
+ font.pixelSize: 20
+ elide: Label.ElideRight
+ Layout.fillWidth: true
+ }
+
+ ToolButton {
+ font.family: "fontello"
+ text: "\uF142" // icon-ellipsis-vert
+ onClicked: menu.open()
+ Layout.fillWidth: false
+
+ Menu {
+ id: menu
+
+ MenuItem {
+ text: qsTr("About")
+ onTriggered: aboutDialog.open()
+ }
+ }
+ }
+ }
+ }
+
+ Flickable {
+ id: flickable
+ flickableDirection: Flickable.VerticalFlick
+ anchors.fill: parent
+
+ TextArea.flickable: TextArea {
+ id: textArea
+ textFormat: Qt.RichText
+ wrapMode: TextArea.Wrap
+ readOnly: true
+ persistentSelection: true
+ // Different styles have different padding and background
+ // decorations, but since this editor is almost taking up the
+ // entire window, we don't need them.
+ leftPadding: 6
+ rightPadding: 6
+ topPadding: 0
+ bottomPadding: 0
+ 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 {}
+ }
+
+ footer: ToolBar {
+ visible: !textArea.readOnly && textArea.activeFocus
+
+ Flickable {
+ anchors.fill: parent
+ contentWidth: toolRow.implicitWidth
+ flickableDirection: Qt.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+
+ Row {
+ id: toolRow
+
+ ToolButton {
+ id: boldButton
+ text: "\uE800" // icon-bold
+ font.family: "fontello"
+ // Don't want to close the virtual keyboard when this is clicked.
+ focusPolicy: Qt.NoFocus
+ action: boldAction
+ }
+ ToolButton {
+ id: italicButton
+ text: "\uE801" // icon-italic
+ font.family: "fontello"
+ focusPolicy: Qt.NoFocus
+ action: italicAction
+ }
+ ToolButton {
+ id: underlineButton
+ text: "\uF0CD" // icon-underline
+ font.family: "fontello"
+ focusPolicy: Qt.NoFocus
+ action: underlineAction
+ }
+
+ ToolSeparator {}
+
+ ToolButton {
+ id: alignLeftButton
+ text: "\uE803" // icon-align-left
+ font.family: "fontello"
+ focusPolicy: Qt.NoFocus
+ action: alignLeftAction
+ }
+ ToolButton {
+ id: alignCenterButton
+ text: "\uE804" // icon-align-center
+ font.family: "fontello"
+ focusPolicy: Qt.NoFocus
+ action: alignCenterAction
+ }
+ ToolButton {
+ id: alignRightButton
+ text: "\uE805" // icon-align-right
+ font.family: "fontello"
+ focusPolicy: Qt.NoFocus
+ action: alignRightAction
+ }
+ ToolButton {
+ id: alignJustifyButton
+ text: "\uE806" // icon-align-justify
+ font.family: "fontello"
+ focusPolicy: Qt.NoFocus
+ action: alignJustifyAction
+ }
+ }
+ }
+ }
+
+ RoundButton {
+ id: editButton
+ font.family: "fontello"
+ text: "\uE809" // icon-pencil
+ width: 48
+ height: width
+ // Don't want to use anchors for the y position, because it will anchor
+ // to the footer, leaving a large vertical gap.
+ y: parent.height - height - 12
+ anchors.right: parent.right
+ anchors.margins: 12
+ visible: textArea.readOnly
+ highlighted: true
+
+ onClicked: {
+ textArea.readOnly = false
+ // Force focus on the text area so the cursor and footer show up.
+ textArea.forceActiveFocus()
+ }
+ }
+
+ Dialog {
+ id: aboutDialog
+ standardButtons: Dialog.Ok
+ modal: true
+ x: parent.width / 2 - width / 2
+ y: parent.height / 2 - height / 2
+
+ contentItem: Label {
+ text: qsTr("Qt Quick Controls - Text Editor Example")
+ }
+ }
+}
diff --git a/examples/quickcontrols/texteditor/qml/texteditor.qml b/examples/quickcontrols/texteditor/qml/texteditor.qml
new file mode 100644
index 0000000000..154a531752
--- /dev/null
+++ b/examples/quickcontrols/texteditor/qml/texteditor.qml
@@ -0,0 +1,542 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtCore
+import QtQuick.Controls
+import QtQuick.Window
+import QtQuick.Dialogs
+
+// TODO:
+// - make designer-friendly
+
+ApplicationWindow {
+ id: window
+ width: 1024
+ height: 600
+ visible: true
+ title: textArea.textDocument.source +
+ " - Text Editor Example" + (textArea.textDocument.modified ? " *" : "")
+
+ Component.onCompleted: {
+ x = Screen.width / 2 - width / 2
+ y = Screen.height / 2 - height / 2
+ }
+
+ Action {
+ id: openAction
+ text: qsTr("&Open")
+ shortcut: StandardKey.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
+ checkable: true
+ checked: textArea.cursorSelection.font.bold
+ onTriggered: textArea.cursorSelection.font = Qt.font({ bold: checked })
+ }
+
+ Action {
+ id: italicAction
+ text: qsTr("&Italic")
+ shortcut: StandardKey.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
+ 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
+ }
+
+ menuBar: MenuBar {
+ Menu {
+ title: qsTr("&File")
+
+ MenuItem {
+ action: openAction
+ }
+ MenuItem {
+ action: saveAction
+ }
+ MenuItem {
+ action: saveAsAction
+ }
+ MenuItem {
+ action: quitAction
+ }
+ }
+
+ Menu {
+ title: qsTr("&Edit")
+
+ MenuItem {
+ action: copyAction
+ }
+ MenuItem {
+ action: cutAction
+ }
+ MenuItem {
+ action: pasteAction
+ }
+ }
+
+ Menu {
+ title: qsTr("F&ormat")
+
+ MenuItem {
+ action: boldAction
+ }
+ MenuItem {
+ action: italicAction
+ }
+ MenuItem {
+ action: underlineAction
+ }
+ MenuItem {
+ action: strikeoutAction
+ }
+
+ MenuSeparator {}
+
+ MenuItem {
+ action: alignLeftAction
+ }
+ MenuItem {
+ action: alignCenterAction
+ }
+ MenuItem {
+ action: alignJustifyAction
+ }
+ MenuItem {
+ action: alignRightAction
+ }
+ }
+ }
+
+ FileDialog {
+ id: openDialog
+ fileMode: FileDialog.OpenFile
+ selectedNameFilter.index: 1
+ nameFilters: ["Text files (*.txt)", "HTML files (*.html *.htm)", "Markdown files (*.md *.markdown)"]
+ currentFolder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
+ onAccepted: {
+ textArea.textDocument.modified = false // we asked earlier, if necessary
+ textArea.textDocument.source = selectedFile
+ }
+ }
+
+ FileDialog {
+ id: saveDialog
+ fileMode: FileDialog.SaveFile
+ nameFilters: openDialog.nameFilters
+ currentFolder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
+ onAccepted: textArea.textDocument.saveAs(selectedFile)
+ }
+
+ FontDialog {
+ id: fontDialog
+ onAccepted: textArea.cursorSelection.font = selectedFont
+ }
+
+ ColorDialog {
+ id: colorDialog
+ selectedColor: "black"
+ onAccepted: textArea.cursorSelection.color = selectedColor
+ }
+
+ MessageDialog {
+ title: qsTr("Error")
+ id: errorDialog
+ }
+
+ MessageDialog {
+ id : quitDialog
+ 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) {
+ 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 {
+ leftPadding: 8
+
+ Flow {
+ id: flow
+ width: parent.width
+
+ Row {
+ id: fileRow
+ ToolButton {
+ id: openButton
+ text: "\uF115" // icon-folder-open-empty
+ font.family: "fontello"
+ 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
+ }
+ }
+
+ Row {
+ id: editRow
+ ToolButton {
+ id: copyButton
+ text: "\uF0C5" // icon-docs
+ font.family: "fontello"
+ focusPolicy: Qt.TabFocus
+ action: copyAction
+ }
+ ToolButton {
+ id: cutButton
+ text: "\uE802" // icon-scissors
+ font.family: "fontello"
+ focusPolicy: Qt.TabFocus
+ action: cutAction
+ }
+ ToolButton {
+ id: pasteButton
+ text: "\uF0EA" // icon-paste
+ font.family: "fontello"
+ focusPolicy: Qt.TabFocus
+ action: pasteAction
+ }
+ ToolSeparator {
+ contentItem.visible: editRow.y === formatRow.y
+ }
+ }
+
+ Row {
+ id: formatRow
+ ToolButton {
+ id: boldButton
+ text: "\uE800" // icon-bold
+ font.family: "fontello"
+ focusPolicy: Qt.TabFocus
+ action: boldAction
+ }
+ ToolButton {
+ id: italicButton
+ text: "\uE801" // icon-italic
+ font.family: "fontello"
+ focusPolicy: Qt.TabFocus
+ action: italicAction
+ }
+ ToolButton {
+ id: underlineButton
+ text: "\uF0CD" // icon-underline
+ font.family: "fontello"
+ focusPolicy: Qt.TabFocus
+ action: underlineAction
+ }
+ ToolButton {
+ id: strikeoutButton
+ text: "\uF0CC"
+ font.family: "fontello"
+ focusPolicy: Qt.TabFocus
+ action: strikeoutAction
+ }
+ ToolButton {
+ id: fontFamilyToolButton
+ text: qsTr("\uE808") // icon-font
+ font.family: "fontello"
+ 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 = textArea.cursorSelection.font
+ fontDialog.open()
+ }
+ }
+ ToolButton {
+ id: textColorButton
+ text: "\uF1FC" // icon-brush
+ font.family: "fontello"
+ focusPolicy: Qt.TabFocus
+ onClicked: function () {
+ colorDialog.selectedColor = textArea.cursorSelection.color
+ colorDialog.open()
+ }
+
+ Rectangle {
+ width: aFontMetrics.width + 3
+ height: 2
+ color: textArea.cursorSelection.color
+ parent: textColorButton.contentItem
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.baseline: parent.baseline
+ anchors.baselineOffset: 6
+
+ TextMetrics {
+ id: aFontMetrics
+ font: textColorButton.font
+ text: textColorButton.text
+ }
+ }
+ }
+ ToolSeparator {
+ contentItem.visible: formatRow.y === alignRow.y
+ }
+ }
+
+ Row {
+ id: alignRow
+ ToolButton {
+ id: alignLeftButton
+ text: "\uE803" // icon-align-left
+ font.family: "fontello"
+ focusPolicy: Qt.TabFocus
+ action: alignLeftAction
+ }
+ ToolButton {
+ id: alignCenterButton
+ text: "\uE804" // icon-align-center
+ font.family: "fontello"
+ focusPolicy: Qt.TabFocus
+ action: alignCenterAction
+ }
+ ToolButton {
+ id: alignRightButton
+ text: "\uE805" // icon-align-right
+ font.family: "fontello"
+ focusPolicy: Qt.TabFocus
+ action: alignRightAction
+ }
+ ToolButton {
+ id: alignJustifyButton
+ text: "\uE806" // icon-align-justify
+ font.family: "fontello"
+ focusPolicy: Qt.TabFocus
+ action: alignJustifyAction
+ }
+ }
+ }
+ }
+
+ Flickable {
+ id: flickable
+ flickableDirection: Flickable.VerticalFlick
+ anchors.fill: parent
+
+ ScrollBar.vertical: ScrollBar {}
+
+ TextArea.flickable: TextArea {
+ id: textArea
+ textFormat: Qt.AutoText
+ wrapMode: TextArea.Wrap
+ focus: true
+ selectByMouse: true
+ persistentSelection: true
+ // Different styles have different padding and background
+ // decorations, but since this editor is almost taking up the
+ // entire window, we don't need them.
+ leftPadding: 6
+ rightPadding: 6
+ topPadding: 0
+ bottomPadding: 0
+ background: null
+
+ TapHandler {
+ acceptedButtons: Qt.RightButton
+ onTapped: contextMenu.popup()
+ }
+
+ onLinkActivated: function (link) {
+ Qt.openUrlExternally(link)
+ }
+
+ 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()
+ }
+ }
+ }
+ }
+
+ Menu {
+ id: contextMenu
+
+ MenuItem {
+ text: qsTr("Copy")
+ action: copyAction
+ }
+ MenuItem {
+ text: qsTr("Cut")
+ action: cutAction
+ }
+ MenuItem {
+ text: qsTr("Paste")
+ action: pasteAction
+ }
+
+ MenuSeparator {}
+
+ MenuItem {
+ text: qsTr("Font...")
+ onTriggered: function () {
+ fontDialog.selectedFont = textArea.cursorSelection.font
+ fontDialog.open()
+ }
+ }
+
+ MenuItem {
+ text: qsTr("Color...")
+ onTriggered: function () {
+ colorDialog.selectedColor = textArea.cursorSelection.color
+ colorDialog.open()
+ }
+ }
+ }
+
+ onClosing: function (close) {
+ if (textArea.textDocument.modified) {
+ quitDialog.open()
+ close.accepted = false
+ }
+ }
+}
diff --git a/examples/quickcontrols/texteditor/red.png b/examples/quickcontrols/texteditor/red.png
new file mode 100644
index 0000000000..9038fef784
--- /dev/null
+++ b/examples/quickcontrols/texteditor/red.png
Binary files differ
diff --git a/examples/quickcontrols/texteditor/texteditor.cpp b/examples/quickcontrols/texteditor/texteditor.cpp
new file mode 100644
index 0000000000..36f27bc5c2
--- /dev/null
+++ b/examples/quickcontrols/texteditor/texteditor.cpp
@@ -0,0 +1,37 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QFontDatabase>
+#include <QDebug>
+#include <QQmlApplicationEngine>
+#include <QQmlContext>
+#include <QQuickStyle>
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication::setApplicationName("Text Editor");
+ QGuiApplication::setOrganizationName("QtProject");
+
+ QGuiApplication app(argc, argv);
+
+ if (QFontDatabase::addApplicationFont(":/fonts/fontello.ttf") == -1)
+ qWarning() << "Failed to load fontello.ttf";
+
+ QStringList selectors;
+#ifdef QT_EXTRA_FILE_SELECTOR
+ selectors += QT_EXTRA_FILE_SELECTOR;
+#else
+ if (app.arguments().contains("-touch"))
+ selectors += "touch";
+#endif
+
+ QQmlApplicationEngine engine;
+ engine.setExtraFileSelectors(selectors);
+
+ engine.load(QUrl("qrc:/qml/texteditor.qml"));
+ if (engine.rootObjects().isEmpty())
+ return -1;
+
+ return app.exec();
+}
diff --git a/examples/quickcontrols/texteditor/texteditor.html b/examples/quickcontrols/texteditor/texteditor.html
new file mode 100644
index 0000000000..0cd406ea1c
--- /dev/null
+++ b/examples/quickcontrols/texteditor/texteditor.html
@@ -0,0 +1,34 @@
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <meta name="qrichtext" content="1">
+ <title>Text Editor Example</title>
+ <style type="text/css">
+ p,
+ body, <!-- specifiying font-size for body seems to be necessary to avoid bullet points being incorrectly positioned -->
+ li {
+ white-space: pre-wrap;
+ font-size:11pt;
+ }
+ </style>
+</head>
+<body>
+ <p align="center">
+ <img src="qrc:/images/qt-logo.png" />
+ </p>
+ <h2 align="center">
+ Qt Quick Controls 2
+ </h2>
+ <p align="center">
+ 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>
+</body>
+</html>
diff --git a/examples/quickcontrols/texteditor/texteditor.pro b/examples/quickcontrols/texteditor/texteditor.pro
new file mode 100644
index 0000000000..c224fe6c41
--- /dev/null
+++ b/examples/quickcontrols/texteditor/texteditor.pro
@@ -0,0 +1,17 @@
+TEMPLATE = app
+TARGET = texteditor
+QT += quick quickcontrols2
+
+cross_compile: DEFINES += QT_EXTRA_FILE_SELECTOR=\\\"touch\\\"
+
+SOURCES += \
+ texteditor.cpp
+
+OTHER_FILES += \
+ qml/*.qml
+
+RESOURCES += \
+ texteditor.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/texteditor
+INSTALLS += target
diff --git a/examples/quickcontrols/texteditor/texteditor.qrc b/examples/quickcontrols/texteditor/texteditor.qrc
new file mode 100644
index 0000000000..cdb7225a39
--- /dev/null
+++ b/examples/quickcontrols/texteditor/texteditor.qrc
@@ -0,0 +1,10 @@
+<RCC>
+ <qresource prefix="/">
+ <file>images/qt-logo.png</file>
+ <file>fonts/fontello.ttf</file>
+ <file>qml/texteditor.qml</file>
+ <file>texteditor.html</file>
+ <file>qml/+touch/texteditor.qml</file>
+ <file>+touch/texteditor.html</file>
+ </qresource>
+</RCC>
diff --git a/examples/quickcontrols/wearable/CMakeLists.txt b/examples/quickcontrols/wearable/CMakeLists.txt
new file mode 100644
index 0000000000..eb3c17c3e9
--- /dev/null
+++ b/examples/quickcontrols/wearable/CMakeLists.txt
@@ -0,0 +1,68 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(wearableexample VERSION 1 LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickControls2 OPTIONAL_COMPONENTS Positioning Location)
+
+qt_standard_project_setup()
+
+add_subdirectory(Wearable)
+add_subdirectory(WearableSettings)
+add_subdirectory(WearableStyle)
+
+qt_add_executable(wearableexample WIN32 MACOSX_BUNDLE
+ wearable.cpp
+)
+
+target_link_libraries(wearableexample PUBLIC
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::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(wearableexample PRIVATE Qt6::QuickTemplates2)
+endif()
+
+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}
+)
+
+install(TARGETS wearableexample
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+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/Wearable/SwipeViewPage.qml b/examples/quickcontrols/wearable/Wearable/SwipeViewPage.qml
new file mode 100644
index 0000000000..1f005363dc
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/SwipeViewPage.qml
@@ -0,0 +1,13 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ // Don't show the item when the StackView that contains us
+ // is being popped off the stack, as we use an x animation
+ // and hence would show pages that we shouldn't since we
+ // also don't have our own background.
+ visible: SwipeView.isCurrentItem || (SwipeView.view.contentItem.moving && (SwipeView.isPreviousItem || SwipeView.isNextItem))
+}
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/Wearable/weather.json b/examples/quickcontrols/wearable/Wearable/weather.json
new file mode 100644
index 0000000000..2cce95c60b
--- /dev/null
+++ b/examples/quickcontrols/wearable/Wearable/weather.json
@@ -0,0 +1 @@
+{"coord":{"lon":-122.42,"lat":37.77},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"base":"stations","main":{"temp":45.22,"pressure":1020.17,"humidity":88,"temp_min":36.92,"temp_max":58.92,"sea_level":1028.19,"grnd_level":1020.17},"wind":{"speed":6.73,"deg":201.002},"clouds":{"all":68},"dt":1476412232,"sys":{"message":0.012,"country":"US","sunrise":1476454666,"sunset":1476495156},"id":5391959,"name":"San Francisco","cod":200}
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
new file mode 100644
index 0000000000..fced79cc52
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..4088a1f56e
--- /dev/null
+++ b/examples/quickcontrols/wearable/doc/src/qtquickcontrols-wearable.qdoc
@@ -0,0 +1,127 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example wearable
+ \keyword Qt Quick Controls - Wearable Demo
+ \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
+
+ The \e {Wearable Demo} consists of an application launcher and a collection
+ of small and simple example applications aimed at wearable devices.
+
+ \section1 Structure
+
+ The main .qml file, \c wearable.qml, consists of an ApplicationWindow, a StackView
+ for a stack-based navigation model, and buttons for interactive navigation.
+
+ \snippet wearable/Wearable/Main.qml window start
+ \dots 4
+ \snippet wearable/Wearable/Main.qml stackview start
+ \dots 8
+ \snippet wearable/Wearable/Main.qml onLaunched connection
+ \dots 8
+ \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
+
+ The demo uses a custom \l {Styling Qt Quick Controls}{Qt Quick Controls 2 style}
+ embedded into the demo's resources. The custom style is implemented for a
+ few controls only, as it is specific to this particular demo. It uses a
+ singleton type for various styling attributes, such as fonts and colors.
+
+ \list
+ \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 Launcher Page
+
+ The application launcher is implemented using a circular PathView in
+ \c LauncherPage.qml. Each application is in a separate .qml file,
+ 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
+ \snippet wearable/Wearable/LauncherPage.qml Model end
+ \snippet wearable/Wearable/LauncherPage.qml Delegate start
+ \dots 8
+ \snippet wearable/Wearable/LauncherPage.qml Delegate mid
+ \dots 8
+ \snippet wearable/Wearable/LauncherPage.qml Delegate end
+ \dots 4
+ \snippet wearable/Wearable/LauncherPage.qml LauncherPage end
+
+ \section1 Applications
+
+ The applications are designed for touch input based on what input methods
+ or communication means are typically offered by wearable devices.
+
+ Most applications have their own JavaScript files that act as dummy
+ 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 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
+
+ This application displays weather information such as temperature, sunrise
+ and sunset times, air pressure, and so on. This information is obtained
+ from \l {https://openweathermap.org/} using its REST API. The API response is
+ in JSON format, which is parsed using JavaScript by the application. This
+ application can also be modified by adding screens to obtain weather data for
+ a given location.
+
+ \section2 World Clock
+
+ This application displays a world clock for different cities. As of now, the
+ list of cities is hard-coded in the application, but that can be changed based
+ on the input capabilities of the device.
+
+ \section2 Others
+
+ The remaining applications return static data for now, but they can be
+ modified to process response data obtained from respective services.
+
+ \include examples-run.qdocinc
+*/
diff --git a/examples/quickcontrols/wearable/wearable.cpp b/examples/quickcontrols/wearable/wearable.cpp
new file mode 100644
index 0000000000..b211ef7ab5
--- /dev/null
+++ b/examples/quickcontrols/wearable/wearable.cpp
@@ -0,0 +1,30 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+#include <QQuickStyle>
+#include <QIcon>
+
+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("WearableStyle"));
+ //! [style]
+
+ QQmlApplicationEngine engine;
+#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
new file mode 100644
index 0000000000..861c5eb214
--- /dev/null
+++ b/examples/quickcontrols/wearable/wearable.pro
@@ -0,0 +1,19 @@
+TEMPLATE = app
+TARGET = wearable
+QT += quick quickcontrols2
+qtHaveModule(positioning): QT += positioning
+qtHaveModule(location): QT += location
+
+QML_IMPORT_PATH += \
+ Wearable \
+ WearableSettings \
+ WearableStyle
+
+SOURCES += \
+ wearable.cpp
+
+RESOURCES += \
+ wearable.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/quickcontrols/wearable
+INSTALLS += target
diff --git a/examples/quickcontrols/wearable/wearable.qrc b/examples/quickcontrols/wearable/wearable.qrc
new file mode 100644
index 0000000000..b8fc839be9
--- /dev/null
+++ b/examples/quickcontrols/wearable/wearable.qrc
@@ -0,0 +1,135 @@
+<!-- This file only exists for qmake. -->
+<RCC>
+ <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>