From a98d4709bedeef1963c14ea60a0f4b9ad3c2262a Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Thu, 24 Oct 2024 17:02:17 +0200 Subject: [PATCH] Move printer demo and energy-monitor into new top-level demos/ folder These are showing off use-cases for Slint, but they're not examples showing individual Slint features. Also removed the old printerdemo while at it. --- .github/workflows/ci.yaml | 6 +- .github/workflows/nightly_snapshot.yaml | 2 +- .github/workflows/nightly_tests.yaml | 6 +- .github/workflows/translations.yaml | 4 +- .github/workflows/wasm_demos.yaml | 11 +- .reuse/dep5 | 14 +- CMakeLists.txt | 3 +- Cargo.toml | 12 +- api/python/README.md | 4 +- api/python/tests/test_instance.py | 4 +- api/python/tests/test_loader.py | 2 +- api/rs/slint/mcu.md | 2 +- demos/CMakeLists.txt | 19 ++ demos/README.md | 73 +++++ {examples => demos}/energy-monitor/Cargo.toml | 2 +- {examples => demos}/energy-monitor/README.md | 2 +- {examples => demos}/energy-monitor/build.rs | 0 {examples => demos}/energy-monitor/index.html | 5 +- .../energy-monitor/src/controllers/header.rs | 0 .../energy-monitor/src/controllers/weather.rs | 0 {examples => demos}/energy-monitor/src/lib.rs | 0 .../energy-monitor/src/main.rs | 0 .../energy-monitor/ui/assets/arrow-left.svg | 0 .../energy-monitor/ui/assets/arrow-right.svg | 0 .../energy-monitor/ui/assets/check.svg | 0 .../energy-monitor/ui/assets/cloud.svg | 0 .../energy-monitor/ui/assets/cloudy.svg | 0 .../energy-monitor/ui/assets/dashboard.svg | 0 .../energy-monitor/ui/assets/information.svg | 0 .../energy-monitor/ui/assets/settings.svg | 0 .../ui/assets/spyrosoft-logo.svg | 0 .../energy-monitor/ui/assets/sunny.svg | 0 .../energy-monitor/ui/big_main.slint | 0 .../energy-monitor/ui/blocks/blocks.slint | 0 .../energy-monitor/ui/blocks/header.slint | 0 .../ui/blocks/kiosk_overlay.slint | 0 .../ui/blocks/mobile_header.slint | 0 .../ui/components/menu_background.slint | 0 .../ui/components/state_layer.slint | 0 .../energy-monitor/ui/desktop_window.slint | 0 .../energy-monitor/ui/images.slint | 0 .../energy-monitor/ui/mcu_window.slint | 0 .../energy-monitor/ui/mid_main.slint | 0 .../energy-monitor/ui/mobile_main.slint | 0 .../energy-monitor/ui/pages/about.slint | 0 .../energy-monitor/ui/pages/balance.slint | 0 .../energy-monitor/ui/pages/dashboard.slint | 0 .../ui/pages/dashboard_mobile.slint | 0 .../ui/pages/menu_page/menu_overview.slint | 0 .../ui/pages/menu_page/menu_page.slint | 0 .../ui/pages/menu_page/settings.slint | 0 .../energy-monitor/ui/pages/overview.slint | 0 .../energy-monitor/ui/pages/page.slint | 0 .../energy-monitor/ui/pages/pages.slint | 0 .../energy-monitor/ui/pages/usage.slint | 0 .../energy-monitor/ui/pages/weather.slint | 0 .../energy-monitor/ui/small_main.slint | 0 .../energy-monitor/ui/theme.slint | 0 .../ui/widgets/balance_chart.slint | 0 .../energy-monitor/ui/widgets/bar_chart.slint | 0 .../energy-monitor/ui/widgets/bar_tiles.slint | 0 .../ui/widgets/chart_axis.slint | 0 .../ui/widgets/chart_pattern.slint | 0 .../energy-monitor/ui/widgets/check_box.slint | 0 .../ui/widgets/float_button.slint | 0 .../energy-monitor/ui/widgets/group_box.slint | 0 .../ui/widgets/icon_button.slint | 0 .../energy-monitor/ui/widgets/item.slint | 0 .../energy-monitor/ui/widgets/list_view.slint | 0 .../energy-monitor/ui/widgets/menu.slint | 0 .../ui/widgets/menu_button.slint | 0 .../ui/widgets/navigation.slint | 0 .../ui/widgets/page_scroll_view.slint | 0 .../ui/widgets/pagination.slint | 0 .../ui/widgets/radio_button.slint | 0 .../ui/widgets/scroll_view.slint | 0 .../energy-monitor/ui/widgets/switch.slint | 0 .../ui/widgets/tab_widget.slint | 0 .../energy-monitor/ui/widgets/tile.slint | 0 .../ui/widgets/value_display.slint | 0 .../energy-monitor/ui/widgets/widgets.slint | 0 {examples => demos}/printerdemo/README.md | 4 +- .../printerdemo/cpp/.gitignore | 0 .../printerdemo/cpp/CMakeLists.txt | 0 {examples => demos}/printerdemo/cpp/main.cpp | 0 .../printerdemo/cpp_interpreted/.gitignore | 0 .../cpp_interpreted/CMakeLists.txt | 0 .../printerdemo/cpp_interpreted/main.cpp | 0 .../lang/fr/LC_MESSAGES/printerdemo.mo | Bin .../lang/fr/LC_MESSAGES/printerdemo.po | 0 {examples => demos}/printerdemo/node/README | 0 {examples => demos}/printerdemo/node/main.js | 0 .../printerdemo/node/package.json | 0 .../printerdemo/printerdemo.pot | 0 .../printerdemo/python/Pipfile | 0 .../printerdemo/python/README.md | 0 .../printerdemo/python/main.py | 0 .../printerdemo/rust/Cargo.toml | 0 {examples => demos}/printerdemo/rust/build.rs | 0 .../printerdemo/rust/index.html | 5 +- {examples => demos}/printerdemo/rust/lib.rs | 0 {examples => demos}/printerdemo/rust/main.rs | 0 {examples => demos}/printerdemo/ui/README | 0 .../printerdemo/ui/common.slint | 0 .../printerdemo/ui/copy_page.slint | 0 .../printerdemo/ui/fonts/.gitignore | 0 .../printerdemo/ui/fonts/NotoSans-Bold.ttf | Bin .../ui/fonts/NotoSans-Bold.ttf.license | 0 .../printerdemo/ui/fonts/NotoSans-Italic.ttf | Bin .../ui/fonts/NotoSans-Italic.ttf.license | 0 .../printerdemo/ui/fonts/NotoSans-Light.ttf | Bin .../ui/fonts/NotoSans-Light.ttf.license | 0 .../printerdemo/ui/fonts/NotoSans-Regular.ttf | Bin .../ui/fonts/NotoSans-Regular.ttf.license | 0 .../printerdemo/ui/fonts/convert.sh | 0 .../printerdemo/ui/home_page.slint | 0 .../printerdemo/ui/images/back.svg | 0 .../printerdemo/ui/images/cat.jpg | Bin .../printerdemo/ui/images/cat.jpg.license | 0 .../printerdemo/ui/images/check.svg | 0 .../printerdemo/ui/images/copy.svg | 0 .../printerdemo/ui/images/delete.svg | 0 .../printerdemo/ui/images/dog.jpg | Bin .../printerdemo/ui/images/dog.jpg.license | 0 .../printerdemo/ui/images/down.svg | 0 .../printerdemo/ui/images/elephant.jpg | Bin .../ui/images/elephant.jpg.license | 0 .../printerdemo/ui/images/home.svg | 0 .../printerdemo/ui/images/ink.svg | 0 .../printerdemo/ui/images/laptop.svg | 0 .../printerdemo/ui/images/list.svg | 0 .../printerdemo/ui/images/minus.svg | 0 .../printerdemo/ui/images/moon.svg | 0 .../printerdemo/ui/images/moon_full.svg | 0 .../printerdemo/ui/images/night_mode.svg | 0 .../printerdemo/ui/images/page_selection.svg | 0 .../printerdemo/ui/images/pause.svg | 0 .../printerdemo/ui/images/plus.svg | 0 .../printerdemo/ui/images/power.svg | 0 .../printerdemo/ui/images/print.svg | 0 .../printerdemo/ui/images/printer.svg | 0 .../printerdemo/ui/images/replicate.svg | 0 .../printerdemo/ui/images/scan.svg | 0 .../printerdemo/ui/images/settings.svg | 0 .../printerdemo/ui/images/snake.jpg | Bin .../printerdemo/ui/images/snake.jpg.license | 0 .../printerdemo/ui/images/usb.svg | 0 .../printerdemo/ui/ink_page.slint | 0 .../printerdemo/ui/print_page.slint | 0 .../printerdemo/ui/printer_queue.slint | 0 .../printerdemo/ui/printerdemo.slint | 0 .../printerdemo/ui/scan_page.slint | 0 .../printerdemo/ui/settings_page.slint | 0 .../printerdemo/ui/usb_page.slint | 0 .../printerdemo/zephyr/.gitignore | 0 .../printerdemo/zephyr/CMakeLists.txt | 0 .../printerdemo/zephyr/README.md | 8 +- .../printerdemo/zephyr/VERSION | 0 .../boards/mimxrt1170_evk_mimxrt1176_cm7.conf | 0 .../zephyr/boards/native_sim_64.conf | 0 .../zephyr/boards/native_sim_64.overlay | 0 .../rk055hdmipi4ma0/rk055hdmipi4ma0.overlay | 0 .../printerdemo/zephyr/prj.conf | 0 .../printerdemo/zephyr/src/main.cpp | 0 .../printerdemo/zephyr/src/slint-zephyr.cpp | 0 .../printerdemo/zephyr/src/slint-zephyr.h | 0 .../printerdemo/zephyr/west.yaml | 0 .../printerdemo_mcu/Cargo.toml | 2 +- {examples => demos}/printerdemo_mcu/README.md | 0 {examples => demos}/printerdemo_mcu/bench.rs | 0 {examples => demos}/printerdemo_mcu/build.rs | 0 .../printerdemo_mcu/esp-idf/.gitignore | 0 .../printerdemo_mcu/esp-idf/CMakeLists.txt | 0 .../printerdemo_mcu/esp-idf/README.md | 0 .../esp-idf/main/CMakeLists.txt | 0 .../esp-idf/main/idf_component.yml | 0 .../printerdemo_mcu/esp-idf/main/main.cpp | 0 .../printerdemo_mcu/esp-idf/partitions.csv | 0 .../esp-idf/rust-toolchain.toml | 0 .../esp-idf/sdkconfig.defaults | 0 {examples => demos}/printerdemo_mcu/main.rs | 0 {examples => demos}/printerdemo_mcu/ui/README | 0 .../printerdemo_mcu/ui/common.slint | 0 .../printerdemo_mcu/ui/copy_page.slint | 0 {examples => demos}/printerdemo_mcu/ui/fonts | 0 .../printerdemo_mcu/ui/home_page.slint | 0 {examples => demos}/printerdemo_mcu/ui/images | 0 .../printerdemo_mcu/ui/ink_page.slint | 0 .../printerdemo_mcu/ui/printer_queue.slint | 0 .../printerdemo_mcu/ui/printerdemo.slint | 0 .../printerdemo_mcu/ui/scan_page.slint | 0 .../printerdemo_mcu/ui/settings_page.slint | 0 .../ui/slint-logo-square-dark-80x80.png | Bin .../ui/slint-logo-square-light-80x80.png | Bin docs/building.md | 2 +- examples/CMakeLists.txt | 7 - examples/README.md | 15 +- examples/printerdemo_old/cpp/.gitignore | 1 - examples/printerdemo_old/cpp/CMakeLists.txt | 12 - examples/printerdemo_old/cpp/main.cpp | 41 --- examples/printerdemo_old/node/README | 7 - examples/printerdemo_old/node/main.js | 29 -- examples/printerdemo_old/node/package.json | 12 - examples/printerdemo_old/rust/Cargo.toml | 34 -- examples/printerdemo_old/rust/build.rs | 6 - examples/printerdemo_old/rust/index.html | 64 ---- examples/printerdemo_old/rust/main.rs | 46 --- examples/printerdemo_old/ui/common.slint | 18 -- examples/printerdemo_old/ui/copy_page.slint | 44 --- examples/printerdemo_old/ui/fax_page.slint | 91 ------ examples/printerdemo_old/ui/images/Group.svg | 8 - .../printerdemo_old/ui/images/Menu Select.svg | 3 - examples/printerdemo_old/ui/images/cat.jpg | Bin 61449 -> 0 bytes .../printerdemo_old/ui/images/cat.jpg.license | 3 - examples/printerdemo_old/ui/images/laptop.svg | 1 - examples/printerdemo_old/ui/images/list.svg | 1 - examples/printerdemo_old/ui/images/power.svg | 41 --- .../printerdemo_old/ui/images/printer.svg | 1 - .../printerdemo_old/ui/images/replicate.svg | 1 - examples/printerdemo_old/ui/images/xxx.svg | 3 - examples/printerdemo_old/ui/print_page.slint | 56 ---- examples/printerdemo_old/ui/printerdemo.slint | 300 ------------------ .../printerdemo_old/ui/settings_page.slint | 49 --- internal/core/graphics/image.rs | 2 +- pnpm-lock.yaml | 12 +- pnpm-workspace.yaml | 2 +- tests/cases/elements/image.slint | 2 +- tests/cases/elements/image_geometry.slint | 2 +- tests/cases/examples/image_fit.slint | 8 +- tests/cases/examples/image_rendering.slint | 4 +- .../issues/issue_2608_canon_img_path.slint | 2 +- tests/cases/layout/height_for_width.slint | 2 +- tests/cases/text/custom_font.slint | 4 +- tests/cases/types/resource.slint | 2 +- tests/driver/interpreter/main.rs | 21 +- tests/manual/font-metrics.slint | 2 +- tests/screenshots/build.rs | 2 +- .../cases/software/basic/images.slint | 2 +- tools/slintpad/README.md | 4 +- tools/slintpad/src/editor_widget.ts | 7 +- xtask/src/license_headers_check.rs | 3 +- 241 files changed, 187 insertions(+), 982 deletions(-) create mode 100644 demos/CMakeLists.txt create mode 100644 demos/README.md rename {examples => demos}/energy-monitor/Cargo.toml (93%) rename {examples => demos}/energy-monitor/README.md (98%) rename {examples => demos}/energy-monitor/build.rs (100%) rename {examples => demos}/energy-monitor/index.html (88%) rename {examples => demos}/energy-monitor/src/controllers/header.rs (100%) rename {examples => demos}/energy-monitor/src/controllers/weather.rs (100%) rename {examples => demos}/energy-monitor/src/lib.rs (100%) rename {examples => demos}/energy-monitor/src/main.rs (100%) rename {examples => demos}/energy-monitor/ui/assets/arrow-left.svg (100%) rename {examples => demos}/energy-monitor/ui/assets/arrow-right.svg (100%) rename {examples => demos}/energy-monitor/ui/assets/check.svg (100%) rename {examples => demos}/energy-monitor/ui/assets/cloud.svg (100%) rename {examples => demos}/energy-monitor/ui/assets/cloudy.svg (100%) rename {examples => demos}/energy-monitor/ui/assets/dashboard.svg (100%) rename {examples => demos}/energy-monitor/ui/assets/information.svg (100%) rename {examples => demos}/energy-monitor/ui/assets/settings.svg (100%) rename {examples => demos}/energy-monitor/ui/assets/spyrosoft-logo.svg (100%) rename {examples => demos}/energy-monitor/ui/assets/sunny.svg (100%) rename {examples => demos}/energy-monitor/ui/big_main.slint (100%) rename {examples => demos}/energy-monitor/ui/blocks/blocks.slint (100%) rename {examples => demos}/energy-monitor/ui/blocks/header.slint (100%) rename {examples => demos}/energy-monitor/ui/blocks/kiosk_overlay.slint (100%) rename {examples => demos}/energy-monitor/ui/blocks/mobile_header.slint (100%) rename {examples => demos}/energy-monitor/ui/components/menu_background.slint (100%) rename {examples => demos}/energy-monitor/ui/components/state_layer.slint (100%) rename {examples => demos}/energy-monitor/ui/desktop_window.slint (100%) rename {examples => demos}/energy-monitor/ui/images.slint (100%) rename {examples => demos}/energy-monitor/ui/mcu_window.slint (100%) rename {examples => demos}/energy-monitor/ui/mid_main.slint (100%) rename {examples => demos}/energy-monitor/ui/mobile_main.slint (100%) rename {examples => demos}/energy-monitor/ui/pages/about.slint (100%) rename {examples => demos}/energy-monitor/ui/pages/balance.slint (100%) rename {examples => demos}/energy-monitor/ui/pages/dashboard.slint (100%) rename {examples => demos}/energy-monitor/ui/pages/dashboard_mobile.slint (100%) rename {examples => demos}/energy-monitor/ui/pages/menu_page/menu_overview.slint (100%) rename {examples => demos}/energy-monitor/ui/pages/menu_page/menu_page.slint (100%) rename {examples => demos}/energy-monitor/ui/pages/menu_page/settings.slint (100%) rename {examples => demos}/energy-monitor/ui/pages/overview.slint (100%) rename {examples => demos}/energy-monitor/ui/pages/page.slint (100%) rename {examples => demos}/energy-monitor/ui/pages/pages.slint (100%) rename {examples => demos}/energy-monitor/ui/pages/usage.slint (100%) rename {examples => demos}/energy-monitor/ui/pages/weather.slint (100%) rename {examples => demos}/energy-monitor/ui/small_main.slint (100%) rename {examples => demos}/energy-monitor/ui/theme.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/balance_chart.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/bar_chart.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/bar_tiles.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/chart_axis.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/chart_pattern.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/check_box.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/float_button.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/group_box.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/icon_button.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/item.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/list_view.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/menu.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/menu_button.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/navigation.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/page_scroll_view.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/pagination.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/radio_button.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/scroll_view.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/switch.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/tab_widget.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/tile.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/value_display.slint (100%) rename {examples => demos}/energy-monitor/ui/widgets/widgets.slint (100%) rename {examples => demos}/printerdemo/README.md (85%) rename {examples => demos}/printerdemo/cpp/.gitignore (100%) rename {examples => demos}/printerdemo/cpp/CMakeLists.txt (100%) rename {examples => demos}/printerdemo/cpp/main.cpp (100%) rename {examples => demos}/printerdemo/cpp_interpreted/.gitignore (100%) rename {examples => demos}/printerdemo/cpp_interpreted/CMakeLists.txt (100%) rename {examples => demos}/printerdemo/cpp_interpreted/main.cpp (100%) rename {examples => demos}/printerdemo/lang/fr/LC_MESSAGES/printerdemo.mo (100%) rename {examples => demos}/printerdemo/lang/fr/LC_MESSAGES/printerdemo.po (100%) rename {examples => demos}/printerdemo/node/README (100%) rename {examples => demos}/printerdemo/node/main.js (100%) rename {examples => demos}/printerdemo/node/package.json (100%) rename {examples => demos}/printerdemo/printerdemo.pot (100%) rename {examples => demos}/printerdemo/python/Pipfile (100%) rename {examples => demos}/printerdemo/python/README.md (100%) rename {examples => demos}/printerdemo/python/main.py (100%) rename {examples => demos}/printerdemo/rust/Cargo.toml (100%) rename {examples => demos}/printerdemo/rust/build.rs (100%) rename {examples => demos}/printerdemo/rust/index.html (88%) rename {examples => demos}/printerdemo/rust/lib.rs (100%) rename {examples => demos}/printerdemo/rust/main.rs (100%) rename {examples => demos}/printerdemo/ui/README (100%) rename {examples => demos}/printerdemo/ui/common.slint (100%) rename {examples => demos}/printerdemo/ui/copy_page.slint (100%) rename {examples => demos}/printerdemo/ui/fonts/.gitignore (100%) rename {examples => demos}/printerdemo/ui/fonts/NotoSans-Bold.ttf (100%) rename {examples => demos}/printerdemo/ui/fonts/NotoSans-Bold.ttf.license (100%) rename {examples => demos}/printerdemo/ui/fonts/NotoSans-Italic.ttf (100%) rename {examples => demos}/printerdemo/ui/fonts/NotoSans-Italic.ttf.license (100%) rename {examples => demos}/printerdemo/ui/fonts/NotoSans-Light.ttf (100%) rename {examples => demos}/printerdemo/ui/fonts/NotoSans-Light.ttf.license (100%) rename {examples => demos}/printerdemo/ui/fonts/NotoSans-Regular.ttf (100%) rename {examples => demos}/printerdemo/ui/fonts/NotoSans-Regular.ttf.license (100%) rename {examples => demos}/printerdemo/ui/fonts/convert.sh (100%) rename {examples => demos}/printerdemo/ui/home_page.slint (100%) rename {examples => demos}/printerdemo/ui/images/back.svg (100%) rename {examples => demos}/printerdemo/ui/images/cat.jpg (100%) rename {examples => demos}/printerdemo/ui/images/cat.jpg.license (100%) rename {examples => demos}/printerdemo/ui/images/check.svg (100%) rename {examples => demos}/printerdemo/ui/images/copy.svg (100%) rename {examples => demos}/printerdemo/ui/images/delete.svg (100%) rename {examples => demos}/printerdemo/ui/images/dog.jpg (100%) rename {examples => demos}/printerdemo/ui/images/dog.jpg.license (100%) rename {examples => demos}/printerdemo/ui/images/down.svg (100%) rename {examples => demos}/printerdemo/ui/images/elephant.jpg (100%) rename {examples => demos}/printerdemo/ui/images/elephant.jpg.license (100%) rename {examples => demos}/printerdemo/ui/images/home.svg (100%) rename {examples => demos}/printerdemo/ui/images/ink.svg (100%) rename {examples => demos}/printerdemo/ui/images/laptop.svg (100%) rename {examples => demos}/printerdemo/ui/images/list.svg (100%) rename {examples => demos}/printerdemo/ui/images/minus.svg (100%) rename {examples => demos}/printerdemo/ui/images/moon.svg (100%) rename {examples => demos}/printerdemo/ui/images/moon_full.svg (100%) rename {examples => demos}/printerdemo/ui/images/night_mode.svg (100%) rename {examples => demos}/printerdemo/ui/images/page_selection.svg (100%) rename {examples => demos}/printerdemo/ui/images/pause.svg (100%) rename {examples => demos}/printerdemo/ui/images/plus.svg (100%) rename {examples => demos}/printerdemo/ui/images/power.svg (100%) rename {examples => demos}/printerdemo/ui/images/print.svg (100%) rename {examples => demos}/printerdemo/ui/images/printer.svg (100%) rename {examples => demos}/printerdemo/ui/images/replicate.svg (100%) rename {examples => demos}/printerdemo/ui/images/scan.svg (100%) rename {examples => demos}/printerdemo/ui/images/settings.svg (100%) rename {examples => demos}/printerdemo/ui/images/snake.jpg (100%) rename {examples => demos}/printerdemo/ui/images/snake.jpg.license (100%) rename {examples => demos}/printerdemo/ui/images/usb.svg (100%) rename {examples => demos}/printerdemo/ui/ink_page.slint (100%) rename {examples => demos}/printerdemo/ui/print_page.slint (100%) rename {examples => demos}/printerdemo/ui/printer_queue.slint (100%) rename {examples => demos}/printerdemo/ui/printerdemo.slint (100%) rename {examples => demos}/printerdemo/ui/scan_page.slint (100%) rename {examples => demos}/printerdemo/ui/settings_page.slint (100%) rename {examples => demos}/printerdemo/ui/usb_page.slint (100%) rename {examples => demos}/printerdemo/zephyr/.gitignore (100%) rename {examples => demos}/printerdemo/zephyr/CMakeLists.txt (100%) rename {examples => demos}/printerdemo/zephyr/README.md (91%) rename {examples => demos}/printerdemo/zephyr/VERSION (100%) rename {examples => demos}/printerdemo/zephyr/boards/mimxrt1170_evk_mimxrt1176_cm7.conf (100%) rename {examples => demos}/printerdemo/zephyr/boards/native_sim_64.conf (100%) rename {examples => demos}/printerdemo/zephyr/boards/native_sim_64.overlay (100%) rename {examples => demos}/printerdemo/zephyr/boards/shields/rk055hdmipi4ma0/rk055hdmipi4ma0.overlay (100%) rename {examples => demos}/printerdemo/zephyr/prj.conf (100%) rename {examples => demos}/printerdemo/zephyr/src/main.cpp (100%) rename {examples => demos}/printerdemo/zephyr/src/slint-zephyr.cpp (100%) rename {examples => demos}/printerdemo/zephyr/src/slint-zephyr.h (100%) rename {examples => demos}/printerdemo/zephyr/west.yaml (100%) rename {examples => demos}/printerdemo_mcu/Cargo.toml (91%) rename {examples => demos}/printerdemo_mcu/README.md (100%) rename {examples => demos}/printerdemo_mcu/bench.rs (100%) rename {examples => demos}/printerdemo_mcu/build.rs (100%) rename {examples => demos}/printerdemo_mcu/esp-idf/.gitignore (100%) rename {examples => demos}/printerdemo_mcu/esp-idf/CMakeLists.txt (100%) rename {examples => demos}/printerdemo_mcu/esp-idf/README.md (100%) rename {examples => demos}/printerdemo_mcu/esp-idf/main/CMakeLists.txt (100%) rename {examples => demos}/printerdemo_mcu/esp-idf/main/idf_component.yml (100%) rename {examples => demos}/printerdemo_mcu/esp-idf/main/main.cpp (100%) rename {examples => demos}/printerdemo_mcu/esp-idf/partitions.csv (100%) rename {examples => demos}/printerdemo_mcu/esp-idf/rust-toolchain.toml (100%) rename {examples => demos}/printerdemo_mcu/esp-idf/sdkconfig.defaults (100%) rename {examples => demos}/printerdemo_mcu/main.rs (100%) rename {examples => demos}/printerdemo_mcu/ui/README (100%) rename {examples => demos}/printerdemo_mcu/ui/common.slint (100%) rename {examples => demos}/printerdemo_mcu/ui/copy_page.slint (100%) rename {examples => demos}/printerdemo_mcu/ui/fonts (100%) rename {examples => demos}/printerdemo_mcu/ui/home_page.slint (100%) rename {examples => demos}/printerdemo_mcu/ui/images (100%) rename {examples => demos}/printerdemo_mcu/ui/ink_page.slint (100%) rename {examples => demos}/printerdemo_mcu/ui/printer_queue.slint (100%) rename {examples => demos}/printerdemo_mcu/ui/printerdemo.slint (100%) rename {examples => demos}/printerdemo_mcu/ui/scan_page.slint (100%) rename {examples => demos}/printerdemo_mcu/ui/settings_page.slint (100%) rename {examples => demos}/printerdemo_mcu/ui/slint-logo-square-dark-80x80.png (100%) rename {examples => demos}/printerdemo_mcu/ui/slint-logo-square-light-80x80.png (100%) delete mode 100644 examples/printerdemo_old/cpp/.gitignore delete mode 100644 examples/printerdemo_old/cpp/CMakeLists.txt delete mode 100644 examples/printerdemo_old/cpp/main.cpp delete mode 100644 examples/printerdemo_old/node/README delete mode 100755 examples/printerdemo_old/node/main.js delete mode 100644 examples/printerdemo_old/node/package.json delete mode 100644 examples/printerdemo_old/rust/Cargo.toml delete mode 100644 examples/printerdemo_old/rust/build.rs delete mode 100644 examples/printerdemo_old/rust/index.html delete mode 100644 examples/printerdemo_old/rust/main.rs delete mode 100644 examples/printerdemo_old/ui/common.slint delete mode 100644 examples/printerdemo_old/ui/copy_page.slint delete mode 100644 examples/printerdemo_old/ui/fax_page.slint delete mode 100644 examples/printerdemo_old/ui/images/Group.svg delete mode 100644 examples/printerdemo_old/ui/images/Menu Select.svg delete mode 100644 examples/printerdemo_old/ui/images/cat.jpg delete mode 100644 examples/printerdemo_old/ui/images/cat.jpg.license delete mode 100644 examples/printerdemo_old/ui/images/laptop.svg delete mode 100644 examples/printerdemo_old/ui/images/list.svg delete mode 100644 examples/printerdemo_old/ui/images/power.svg delete mode 100644 examples/printerdemo_old/ui/images/printer.svg delete mode 100644 examples/printerdemo_old/ui/images/replicate.svg delete mode 100644 examples/printerdemo_old/ui/images/xxx.svg delete mode 100644 examples/printerdemo_old/ui/print_page.slint delete mode 100644 examples/printerdemo_old/ui/printerdemo.slint delete mode 100644 examples/printerdemo_old/ui/settings_page.slint diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d8937f120..9c34e0683 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -454,8 +454,9 @@ jobs: git checkout v${{ matrix.from_version }} --no-overlay -- examples git checkout v${{ matrix.from_version }} --no-overlay -- tests/cases git checkout v${{ matrix.from_version }} --no-overlay -- tests/helper_components - # Remove examples from the workspace because they may no longer exist or their Cargo.toml might prevent the build of the updater + # Remove examples and demos from the workspace because they may no longer exist or their Cargo.toml might prevent the build of the updater sed -i "/examples/d" Cargo.toml + sed -i "/demos/d" Cargo.toml - name: "Commit old checkout" run: | git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com" @@ -493,7 +494,6 @@ jobs: --skip test_interpreter_models_assign_equal_model \ --skip example_carousel \ --skip example_fancy_demo \ - --skip example_printerdemo_old \ --skip test_interpreter_elements_path_fit \ --skip test_interpreter_layout_path \ --skip test_interpreter_7guis_booker \ @@ -544,7 +544,7 @@ jobs: - uses: Swatinem/rust-cache@v2 - name: Build and Test Printer demo shell: bash - working-directory: examples/printerdemo_mcu/esp-idf + working-directory: demos/printerdemo_mcu/esp-idf run: | . ${IDF_PATH}/export.sh idf.py build diff --git a/.github/workflows/nightly_snapshot.yaml b/.github/workflows/nightly_snapshot.yaml index ebb8699bf..6d4ca5eb4 100644 --- a/.github/workflows/nightly_snapshot.yaml +++ b/.github/workflows/nightly_snapshot.yaml @@ -404,7 +404,7 @@ jobs: rm -rf $output_path/demos mkdir -p $output_path/demos - for demo_subdir in gallery, printerdemo,rust printerdemo_old,rust todo,rust todo-mvc,rust slide_puzzle, memory, imagefilter,rust plotter, opengl_underlay, carousel,rust energy-monitor, weather-demo,; do + for demo_subdir in gallery, printerdemo,rust todo,rust todo-mvc,rust slide_puzzle, memory, imagefilter,rust plotter, opengl_underlay, carousel,rust energy-monitor, weather-demo,; do IFS=',' read demo subdir <<< "${demo_subdir}" mkdir -p $output_path/demos/$demo diff --git a/.github/workflows/nightly_tests.yaml b/.github/workflows/nightly_tests.yaml index fefb778b8..5ecd4bb6f 100644 --- a/.github/workflows/nightly_tests.yaml +++ b/.github/workflows/nightly_tests.yaml @@ -28,7 +28,7 @@ jobs: - uses: Swatinem/rust-cache@v2 - name: Build and Test Printer demo shell: bash - working-directory: examples/printerdemo_mcu/esp-idf + working-directory: demos/printerdemo_mcu/esp-idf run: | . ${IDF_PATH}/export.sh idf.py -D SLINT_ESP_LOCAL_EXAMPLE=OFF build @@ -123,13 +123,13 @@ jobs: uses: zephyrproject-rtos/action-zephyr-setup@v1.0.2 with: app-path: slint - manifest-file-name: examples/printerdemo/zephyr/west.yaml + manifest-file-name: demos/printerdemo/zephyr/west.yaml sdk-version: 0.16.8 - name: Export the Zephyr CMake package run: west zephyr-export - name: Build for ${{matrix.board}} run: | - west build -b ${{matrix.board}} -p always slint/examples/printerdemo/zephyr -- -DCMAKE_BUILD_TYPE=Release ${{matrix.extra-cmake-args}} + west build -b ${{matrix.board}} -p always slint/demos/printerdemo/zephyr -- -DCMAKE_BUILD_TYPE=Release ${{matrix.extra-cmake-args}} uefi-demo: env: diff --git a/.github/workflows/translations.yaml b/.github/workflows/translations.yaml index 705271be3..6ac89ee03 100644 --- a/.github/workflows/translations.yaml +++ b/.github/workflows/translations.yaml @@ -36,9 +36,9 @@ jobs: - name: "printerdemo: Run slint-tr-extractor" run: find -name \*.slint | xargs cargo run -p slint-tr-extractor -- -d printerdemo -o printerdemo.pot - working-directory: examples/printerdemo + working-directory: demos/printerdemo - name: "printerdemo: msgmerge and msgfmt" - working-directory: examples/printerdemo + working-directory: demos/printerdemo run: | for po in lang/*/LC_MESSAGES do msgmerge $po/printerdemo.po printerdemo.pot -o $po/printerdemo.po diff --git a/.github/workflows/wasm_demos.yaml b/.github/workflows/wasm_demos.yaml index d49c5356d..d1653ca25 100644 --- a/.github/workflows/wasm_demos.yaml +++ b/.github/workflows/wasm_demos.yaml @@ -33,7 +33,7 @@ jobs: run: | sed -i "s/#wasm# //" Cargo.toml wasm-pack build --release --target web - working-directory: examples/printerdemo/rust + working-directory: demos/printerdemo/rust - name: Gallery WASM build if: ${{ inputs.build_artifacts }} run: | @@ -46,7 +46,7 @@ jobs: - name: Remaining wasm demos if: ${{ inputs.build_artifacts }} run: | - for demo in examples/printerdemo/rust examples/printerdemo_old/rust examples/todo/rust examples/todo-mvc/rust examples/carousel/rust examples/slide_puzzle examples/memory examples/imagefilter/rust examples/plotter examples/opengl_underlay; do + for demo in demos/printerdemo/rust examples/todo/rust examples/todo-mvc/rust examples/carousel/rust examples/slide_puzzle examples/memory examples/imagefilter/rust examples/plotter examples/opengl_underlay; do pushd $demo sed -i "s/#wasm# //" Cargo.toml wasm-pack build --release --target web @@ -57,7 +57,7 @@ jobs: run: | sed -i "s/#wasm# //" Cargo.toml wasm-pack build --release --target web --no-default-features --features slint/default,chrono - working-directory: examples/energy-monitor + working-directory: demos/energy-monitor - name: Weather Demo example WASM build run: | sed -i "s/#wasm# //" Cargo.toml @@ -70,8 +70,7 @@ jobs: name: wasm_demo path: | examples/gallery/ - examples/printerdemo/rust/ - examples/printerdemo_old/rust/ + demos/printerdemo/rust/ examples/todo/ examples/todo-mvc/rust/ examples/carousel/rust/ @@ -80,7 +79,7 @@ jobs: examples/imagefilter/rust examples/plotter/ examples/opengl_underlay/ - examples/energy-monitor/ + demos/energy-monitor/ examples/weather-demo/ !/**/.gitignore - name: Clean cache # Otherwise the cache is much too big diff --git a/.reuse/dep5 b/.reuse/dep5 index 0cb5f4e67..fb3b863f5 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -19,7 +19,7 @@ Files: api/cpp/tests/redpixel.png Copyright: Copyright © SixtyFPS GmbH License: MIT -Files: examples/*/LC_MESSAGES/*.mo examples/*/sdkconfig* +Files: examples/*/LC_MESSAGES/*.mo examples/*/sdkconfig* demos/*/LC_MESSAGES/*.mo demos/*/sdkconfig* Copyright: Copyright © SixtyFPS GmbH License: MIT @@ -35,7 +35,7 @@ Files: api/*/*.json Copyright: Copyright © SixtyFPS GmbH License: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 -Files: examples/*.json examples/*/README examples/*/README.txt examples/cpp/qt_viewer/interface.ui +Files: examples/*.json examples/*/README examples/*/README.txt examples/cpp/qt_viewer/interface.ui demos/*.json demos/*/README Copyright: Copyright © SixtyFPS GmbH License: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 @@ -43,7 +43,7 @@ Files: examples/memory/icons/*.svg examples/memory/icons/*.png Copyright: Fontawesome project License: CC-BY-4.0 -Files: examples/printerdemo/ui/images/*.svg examples/printerdemo_old/ui/images/*.svg +Files: demos/printerdemo/ui/images/*.svg Copyright: CoreyGinnivan License: Unlicense @@ -83,7 +83,7 @@ Files: examples/carousel/fonts/*.ttf Copyright: Roboto License: Apache-2.0 -Files: examples/*/esp-idf/*/partitions.csv examples/*/esp-idf/partitions.csv +Files: examples/*/esp-idf/*/partitions.csv examples/*/esp-idf/partitions.csv demos/*/esp-idf/partitions.csv Copyright: Copyright © SixtyFPS GmbH License: MIT @@ -115,15 +115,15 @@ Files: internal/backends/linuxkms/mouse-pointer.svg examples/virtual_keyboard/ui Copyright: Copyright © 2018 Dave Gandy & Fork Awesome License: MIT -Files: examples/energy-monitor/ui/assets/sunny.svg examples/energy-monitor/ui/assets/settings.svg examples/energy-monitor/ui/assets/information.svg examples/energy-monitor/ui/assets/cloudy.svg examples/energy-monitor/ui/assets/cloud.svg examples/energy-monitor/ui/assets/check.svg examples/energy-monitor/ui/assets/arrow-right.svg examples/energy-monitor/ui/assets/arrow-left.svg examples/energy-monitor/ui/assets/dashboard.svg +Files: demos/energy-monitor/ui/assets/sunny.svg demos/energy-monitor/ui/assets/settings.svg demos/energy-monitor/ui/assets/information.svg demos/energy-monitor/ui/assets/cloudy.svg demos/energy-monitor/ui/assets/cloud.svg demos/energy-monitor/ui/assets/check.svg demos/energy-monitor/ui/assets/arrow-right.svg demos/energy-monitor/ui/assets/arrow-left.svg demos/energy-monitor/ui/assets/dashboard.svg Copyright: Copyright © SixtyFPS GmbH License: MIT -Files: examples/energy-monitor/ui/assets/spyrosoft-logo.svg +Files: demos/energy-monitor/ui/assets/spyrosoft-logo.svg Copyright: Copyright © Spyrosoft Solutions GmbH License: CC-BY-4.0 -Files: examples/printerdemo/zephyr/VERSION +Files: demos/printerdemo/zephyr/VERSION Copyright: Copyright © SixtyFPS GmbH License: MIT diff --git a/CMakeLists.txt b/CMakeLists.txt index cfae20a24..39d49af7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,10 +33,11 @@ endif() add_subdirectory(api/cpp/) option(SLINT_BUILD_EXAMPLES "Build Slint Examples" OFF) -add_feature_info(SLINT_BUILD_EXAMPLES SLINT_BUILD_EXAMPLES "configure whether to build the examples") +add_feature_info(SLINT_BUILD_EXAMPLES SLINT_BUILD_EXAMPLES "configure whether to build the examples and demos") if(SLINT_BUILD_EXAMPLES) add_subdirectory(examples) + add_subdirectory(demos) endif() if(SLINT_BUILD_TESTING AND (SLINT_FEATURE_COMPILER OR SLINT_COMPILER)) add_subdirectory(docs/reference/src/quickstart/) diff --git a/Cargo.toml b/Cargo.toml index 3e3b8c0f0..4b730d86e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,15 +21,14 @@ members = [ 'examples/ffmpeg', 'examples/gstreamer-player', 'examples/plotter', - 'examples/printerdemo_old/rust', - 'examples/printerdemo/rust', - 'examples/printerdemo_mcu', + 'demos/printerdemo/rust', + 'demos/printerdemo_mcu', 'examples/slide_puzzle', 'examples/todo/rust', 'examples/todo-mvc/rust', 'examples/virtual_keyboard/rust', 'examples/carousel/rust', - 'examples/energy-monitor', + 'demos/energy-monitor', 'examples/mcu-board-support', 'examples/uefi-demo', 'examples/weather-demo', @@ -72,13 +71,12 @@ default-members = [ 'api/rs/slint', 'examples/gallery', 'examples/memory', - 'examples/printerdemo_old/rust', - 'examples/printerdemo/rust', + 'demos/printerdemo/rust', 'examples/slide_puzzle', 'examples/todo/rust', 'examples/virtual_keyboard/rust', 'examples/carousel/rust', - 'examples/energy-monitor', + 'demos/energy-monitor', 'internal/backends/winit', 'internal/backends/qt', 'internal/backends/selector', diff --git a/api/python/README.md b/api/python/README.md index cc5eacb43..6623f0a23 100644 --- a/api/python/README.md +++ b/api/python/README.md @@ -37,10 +37,10 @@ The installation will use binaries provided vi macOS, Windows, and Linux for var ## Try it out -If you want to just play with this, you can try running our Python port of the [printer demo](../../examples/printerdemo/python/README.md): +If you want to just play with this, you can try running our Python port of the [printer demo](../../demos/printerdemo/python/README.md): ```bash -cd examples/printerdemo/python +cd demos/printerdemo/python pipenv update pipenv run python main.py ``` diff --git a/api/python/tests/test_instance.py b/api/python/tests/test_instance.py index 6341c16e8..de769bb37 100644 --- a/api/python/tests/test_instance.py +++ b/api/python/tests/test_instance.py @@ -39,7 +39,7 @@ def test_property_access(): finished: true, dash-prop: true, }; - in property imageprop: @image-url("../../../examples/printerdemo/ui/images/cat.jpg"); + in property imageprop: @image-url("../../../demos/printerdemo/ui/images/cat.jpg"); callback test-callback(); } @@ -177,7 +177,7 @@ def test_callbacks(): if __name__ == "__main__": import slint module = slint.load_file( - "../../examples/printerdemo/ui/printerdemo.slint") + "../../demos/printerdemo/ui/printerdemo.slint") instance = module.MainWindow() instance.PrinterQueue.start_job = lambda title: print( f"new print job {title}") diff --git a/api/python/tests/test_loader.py b/api/python/tests/test_loader.py index e05a53dad..799acd2f8 100644 --- a/api/python/tests/test_loader.py +++ b/api/python/tests/test_loader.py @@ -19,7 +19,7 @@ def test_magic_import_path(): try: sys.path.append(os.path.join(os.path.dirname(__file__), "..", "..", "..")) - instance = loader.examples.printerdemo.ui.printerdemo.MainWindow() + instance = loader.demos.printerdemo.ui.printerdemo.MainWindow() del instance finally: sys.path = oldsyspath diff --git a/api/rs/slint/mcu.md b/api/rs/slint/mcu.md index 4cd0c921b..aecab7b62 100644 --- a/api/rs/slint/mcu.md +++ b/api/rs/slint/mcu.md @@ -422,4 +422,4 @@ in your `Cargo.toml`. For an entire template, check out our [Slint Bare Metal Microcontroller Rust Template](https://github.com/slint-ui/slint-mcu-rust-template). -We also have a version of our printer demo that we've adapted to small screens, the [MCU Printer Demo](https://github.com/slint-ui/slint/tree/master/examples/printerdemo_mcu). +We also have a version of our printer demo that we've adapted to small screens, the [MCU Printer Demo](https://github.com/slint-ui/slint/tree/master/demos/printerdemo_mcu). diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt new file mode 100644 index 000000000..1ec98d903 --- /dev/null +++ b/demos/CMakeLists.txt @@ -0,0 +1,19 @@ +# Copyright © SixtyFPS GmbH +# SPDX-License-Identifier: MIT +cmake_minimum_required(VERSION 3.21) +project(SlintDemos LANGUAGES CXX) + +list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../cmake") + +if (NOT TARGET Slint::Slint) + find_package(Slint REQUIRED) + include(FetchContent) +endif() + +if (TARGET Slint::slint-compiler) + add_subdirectory(printerdemo/cpp/) +endif() +if (SLINT_FEATURE_INTERPRETER) + add_subdirectory(printerdemo/cpp_interpreted/) +endif() + diff --git a/demos/README.md b/demos/README.md new file mode 100644 index 000000000..fc4eedb7f --- /dev/null +++ b/demos/README.md @@ -0,0 +1,73 @@ + + +# Demos + +These demos showcase different complex use-cases for building UIs with Slint. + + + +| Thumbnail | Description | Demo | +| --- | --- | --- | +| [Printer UI ![Printer Demo image](https://github.com/user-attachments/assets/7e7400ad-283a-4404-b04a-8620ba4df452)](./printerdemo) | A fictional user interface for the touch screen of a printer.
[Project...](./printerdemo) | [Wasm Demo](https://slint.dev/snapshots/master/demos/printerdemo/) | +| [Energy Meter![Energy meter demo image](https://github.com/user-attachments/assets/abfe03e3-ded6-4ddc-82b7-8303ee45515c "Energy meter demo image")](./energy-monitor/) | A fictional user interface of a device that monitors energy consumption in a building.
[Project...](./energy-monitor) | [Wasm Demo](https://slint.dev/snapshots/master/demos/energy-monitor/) | + +--- +### Running the Rust Demos + +You can run the examples either by going into folder or into the rust sub-folder and use `cargo run`, for example: + +```sh +cd demos/printerdemo/rust +cargo run --release +``` + +or you can run them from anywhere in the Cargo workspace by name: + +```sh +cargo run --release --bin printerdemo +``` + +--- +### Wasm builds + +In order to make the wasm build of the example, you first need to edit the Cargo.toml +files to uncomment the line starting with `#wasm#` (or use the `sed` line bellow) +You can then use wasm-pack (which you may need to obtain with `cargo install wasm-pack`). +This will generate the wasm in the `./pkg` directory, which the `index.html` file will open. +Since wasm files cannot be served from `file://` URL, you need to open a wab server to serve +the content + +```sh +cd demos/printerdemo/rust +sed -i "s/^#wasm# //" Cargo.toml +wasm-pack build --release --target web +python3 -m http.server +``` + +--- +### Running the C++ Examples + +* **When compiling Slint from sources:** If you follow the [C++ build instructions](/docs/building.md#c-build), this will build the C++ +examples as well by default +* **From [installed binary packages](/api/cpp/README.md#binary-packages):** Simply run cmake in one of the example directory containing a CMakeLists.txt + + ```sh + mkdir build && cd build + cmake -GNinja -DCMAKE_PREFIX_PATH="" .. + cmake --build . + ``` + +--- +### Running the Node Examples + +You can run the examples by going into the node sub-folder and use `npm`, for example: + +```sh +pushd api/node +npm install +npm run compile +popd +cd demos/printerdemo/node +npm install +npm start +``` diff --git a/examples/energy-monitor/Cargo.toml b/demos/energy-monitor/Cargo.toml similarity index 93% rename from examples/energy-monitor/Cargo.toml rename to demos/energy-monitor/Cargo.toml index c3ff09086..4e3690f3d 100644 --- a/examples/energy-monitor/Cargo.toml +++ b/demos/energy-monitor/Cargo.toml @@ -15,7 +15,7 @@ crate-type = ["cdylib", "lib"] [dependencies] slint = { path = "../../api/rs/slint", default-features = false, features = ["compat-1-2"] } -mcu-board-support = { path = "../mcu-board-support", optional = true } +mcu-board-support = { path = "../../examples/mcu-board-support", optional = true } chrono = { version = "0.4.34", optional = true, default-features = false, features = ["clock", "std", "wasmbind"] } weer_api = { version = "0.1", optional = true } tokio = { version = "1.25", optional = true, features = ["full"] } diff --git a/examples/energy-monitor/README.md b/demos/energy-monitor/README.md similarity index 98% rename from examples/energy-monitor/README.md rename to demos/energy-monitor/README.md index 2ddd1c383..c2f3193fc 100644 --- a/examples/energy-monitor/README.md +++ b/demos/energy-monitor/README.md @@ -41,7 +41,7 @@ cargo apk run -p energy-monitor --target aarch64-linux-android --lib ```sh cargo install wasm-pack -cd examples/energy-monitor/ +cd demos/energy-monitor/ wasm-pack build --release --target web --no-default-features --features slint/default,chrono python3 -m http.server ``` diff --git a/examples/energy-monitor/build.rs b/demos/energy-monitor/build.rs similarity index 100% rename from examples/energy-monitor/build.rs rename to demos/energy-monitor/build.rs diff --git a/examples/energy-monitor/index.html b/demos/energy-monitor/index.html similarity index 88% rename from examples/energy-monitor/index.html rename to demos/energy-monitor/index.html index 519d92674..c72551b7e 100644 --- a/examples/energy-monitor/index.html +++ b/demos/energy-monitor/index.html @@ -31,7 +31,6 @@ height: 100vh !important; } } - @@ -45,9 +44,9 @@ diff --git a/examples/energy-monitor/src/controllers/header.rs b/demos/energy-monitor/src/controllers/header.rs similarity index 100% rename from examples/energy-monitor/src/controllers/header.rs rename to demos/energy-monitor/src/controllers/header.rs diff --git a/examples/energy-monitor/src/controllers/weather.rs b/demos/energy-monitor/src/controllers/weather.rs similarity index 100% rename from examples/energy-monitor/src/controllers/weather.rs rename to demos/energy-monitor/src/controllers/weather.rs diff --git a/examples/energy-monitor/src/lib.rs b/demos/energy-monitor/src/lib.rs similarity index 100% rename from examples/energy-monitor/src/lib.rs rename to demos/energy-monitor/src/lib.rs diff --git a/examples/energy-monitor/src/main.rs b/demos/energy-monitor/src/main.rs similarity index 100% rename from examples/energy-monitor/src/main.rs rename to demos/energy-monitor/src/main.rs diff --git a/examples/energy-monitor/ui/assets/arrow-left.svg b/demos/energy-monitor/ui/assets/arrow-left.svg similarity index 100% rename from examples/energy-monitor/ui/assets/arrow-left.svg rename to demos/energy-monitor/ui/assets/arrow-left.svg diff --git a/examples/energy-monitor/ui/assets/arrow-right.svg b/demos/energy-monitor/ui/assets/arrow-right.svg similarity index 100% rename from examples/energy-monitor/ui/assets/arrow-right.svg rename to demos/energy-monitor/ui/assets/arrow-right.svg diff --git a/examples/energy-monitor/ui/assets/check.svg b/demos/energy-monitor/ui/assets/check.svg similarity index 100% rename from examples/energy-monitor/ui/assets/check.svg rename to demos/energy-monitor/ui/assets/check.svg diff --git a/examples/energy-monitor/ui/assets/cloud.svg b/demos/energy-monitor/ui/assets/cloud.svg similarity index 100% rename from examples/energy-monitor/ui/assets/cloud.svg rename to demos/energy-monitor/ui/assets/cloud.svg diff --git a/examples/energy-monitor/ui/assets/cloudy.svg b/demos/energy-monitor/ui/assets/cloudy.svg similarity index 100% rename from examples/energy-monitor/ui/assets/cloudy.svg rename to demos/energy-monitor/ui/assets/cloudy.svg diff --git a/examples/energy-monitor/ui/assets/dashboard.svg b/demos/energy-monitor/ui/assets/dashboard.svg similarity index 100% rename from examples/energy-monitor/ui/assets/dashboard.svg rename to demos/energy-monitor/ui/assets/dashboard.svg diff --git a/examples/energy-monitor/ui/assets/information.svg b/demos/energy-monitor/ui/assets/information.svg similarity index 100% rename from examples/energy-monitor/ui/assets/information.svg rename to demos/energy-monitor/ui/assets/information.svg diff --git a/examples/energy-monitor/ui/assets/settings.svg b/demos/energy-monitor/ui/assets/settings.svg similarity index 100% rename from examples/energy-monitor/ui/assets/settings.svg rename to demos/energy-monitor/ui/assets/settings.svg diff --git a/examples/energy-monitor/ui/assets/spyrosoft-logo.svg b/demos/energy-monitor/ui/assets/spyrosoft-logo.svg similarity index 100% rename from examples/energy-monitor/ui/assets/spyrosoft-logo.svg rename to demos/energy-monitor/ui/assets/spyrosoft-logo.svg diff --git a/examples/energy-monitor/ui/assets/sunny.svg b/demos/energy-monitor/ui/assets/sunny.svg similarity index 100% rename from examples/energy-monitor/ui/assets/sunny.svg rename to demos/energy-monitor/ui/assets/sunny.svg diff --git a/examples/energy-monitor/ui/big_main.slint b/demos/energy-monitor/ui/big_main.slint similarity index 100% rename from examples/energy-monitor/ui/big_main.slint rename to demos/energy-monitor/ui/big_main.slint diff --git a/examples/energy-monitor/ui/blocks/blocks.slint b/demos/energy-monitor/ui/blocks/blocks.slint similarity index 100% rename from examples/energy-monitor/ui/blocks/blocks.slint rename to demos/energy-monitor/ui/blocks/blocks.slint diff --git a/examples/energy-monitor/ui/blocks/header.slint b/demos/energy-monitor/ui/blocks/header.slint similarity index 100% rename from examples/energy-monitor/ui/blocks/header.slint rename to demos/energy-monitor/ui/blocks/header.slint diff --git a/examples/energy-monitor/ui/blocks/kiosk_overlay.slint b/demos/energy-monitor/ui/blocks/kiosk_overlay.slint similarity index 100% rename from examples/energy-monitor/ui/blocks/kiosk_overlay.slint rename to demos/energy-monitor/ui/blocks/kiosk_overlay.slint diff --git a/examples/energy-monitor/ui/blocks/mobile_header.slint b/demos/energy-monitor/ui/blocks/mobile_header.slint similarity index 100% rename from examples/energy-monitor/ui/blocks/mobile_header.slint rename to demos/energy-monitor/ui/blocks/mobile_header.slint diff --git a/examples/energy-monitor/ui/components/menu_background.slint b/demos/energy-monitor/ui/components/menu_background.slint similarity index 100% rename from examples/energy-monitor/ui/components/menu_background.slint rename to demos/energy-monitor/ui/components/menu_background.slint diff --git a/examples/energy-monitor/ui/components/state_layer.slint b/demos/energy-monitor/ui/components/state_layer.slint similarity index 100% rename from examples/energy-monitor/ui/components/state_layer.slint rename to demos/energy-monitor/ui/components/state_layer.slint diff --git a/examples/energy-monitor/ui/desktop_window.slint b/demos/energy-monitor/ui/desktop_window.slint similarity index 100% rename from examples/energy-monitor/ui/desktop_window.slint rename to demos/energy-monitor/ui/desktop_window.slint diff --git a/examples/energy-monitor/ui/images.slint b/demos/energy-monitor/ui/images.slint similarity index 100% rename from examples/energy-monitor/ui/images.slint rename to demos/energy-monitor/ui/images.slint diff --git a/examples/energy-monitor/ui/mcu_window.slint b/demos/energy-monitor/ui/mcu_window.slint similarity index 100% rename from examples/energy-monitor/ui/mcu_window.slint rename to demos/energy-monitor/ui/mcu_window.slint diff --git a/examples/energy-monitor/ui/mid_main.slint b/demos/energy-monitor/ui/mid_main.slint similarity index 100% rename from examples/energy-monitor/ui/mid_main.slint rename to demos/energy-monitor/ui/mid_main.slint diff --git a/examples/energy-monitor/ui/mobile_main.slint b/demos/energy-monitor/ui/mobile_main.slint similarity index 100% rename from examples/energy-monitor/ui/mobile_main.slint rename to demos/energy-monitor/ui/mobile_main.slint diff --git a/examples/energy-monitor/ui/pages/about.slint b/demos/energy-monitor/ui/pages/about.slint similarity index 100% rename from examples/energy-monitor/ui/pages/about.slint rename to demos/energy-monitor/ui/pages/about.slint diff --git a/examples/energy-monitor/ui/pages/balance.slint b/demos/energy-monitor/ui/pages/balance.slint similarity index 100% rename from examples/energy-monitor/ui/pages/balance.slint rename to demos/energy-monitor/ui/pages/balance.slint diff --git a/examples/energy-monitor/ui/pages/dashboard.slint b/demos/energy-monitor/ui/pages/dashboard.slint similarity index 100% rename from examples/energy-monitor/ui/pages/dashboard.slint rename to demos/energy-monitor/ui/pages/dashboard.slint diff --git a/examples/energy-monitor/ui/pages/dashboard_mobile.slint b/demos/energy-monitor/ui/pages/dashboard_mobile.slint similarity index 100% rename from examples/energy-monitor/ui/pages/dashboard_mobile.slint rename to demos/energy-monitor/ui/pages/dashboard_mobile.slint diff --git a/examples/energy-monitor/ui/pages/menu_page/menu_overview.slint b/demos/energy-monitor/ui/pages/menu_page/menu_overview.slint similarity index 100% rename from examples/energy-monitor/ui/pages/menu_page/menu_overview.slint rename to demos/energy-monitor/ui/pages/menu_page/menu_overview.slint diff --git a/examples/energy-monitor/ui/pages/menu_page/menu_page.slint b/demos/energy-monitor/ui/pages/menu_page/menu_page.slint similarity index 100% rename from examples/energy-monitor/ui/pages/menu_page/menu_page.slint rename to demos/energy-monitor/ui/pages/menu_page/menu_page.slint diff --git a/examples/energy-monitor/ui/pages/menu_page/settings.slint b/demos/energy-monitor/ui/pages/menu_page/settings.slint similarity index 100% rename from examples/energy-monitor/ui/pages/menu_page/settings.slint rename to demos/energy-monitor/ui/pages/menu_page/settings.slint diff --git a/examples/energy-monitor/ui/pages/overview.slint b/demos/energy-monitor/ui/pages/overview.slint similarity index 100% rename from examples/energy-monitor/ui/pages/overview.slint rename to demos/energy-monitor/ui/pages/overview.slint diff --git a/examples/energy-monitor/ui/pages/page.slint b/demos/energy-monitor/ui/pages/page.slint similarity index 100% rename from examples/energy-monitor/ui/pages/page.slint rename to demos/energy-monitor/ui/pages/page.slint diff --git a/examples/energy-monitor/ui/pages/pages.slint b/demos/energy-monitor/ui/pages/pages.slint similarity index 100% rename from examples/energy-monitor/ui/pages/pages.slint rename to demos/energy-monitor/ui/pages/pages.slint diff --git a/examples/energy-monitor/ui/pages/usage.slint b/demos/energy-monitor/ui/pages/usage.slint similarity index 100% rename from examples/energy-monitor/ui/pages/usage.slint rename to demos/energy-monitor/ui/pages/usage.slint diff --git a/examples/energy-monitor/ui/pages/weather.slint b/demos/energy-monitor/ui/pages/weather.slint similarity index 100% rename from examples/energy-monitor/ui/pages/weather.slint rename to demos/energy-monitor/ui/pages/weather.slint diff --git a/examples/energy-monitor/ui/small_main.slint b/demos/energy-monitor/ui/small_main.slint similarity index 100% rename from examples/energy-monitor/ui/small_main.slint rename to demos/energy-monitor/ui/small_main.slint diff --git a/examples/energy-monitor/ui/theme.slint b/demos/energy-monitor/ui/theme.slint similarity index 100% rename from examples/energy-monitor/ui/theme.slint rename to demos/energy-monitor/ui/theme.slint diff --git a/examples/energy-monitor/ui/widgets/balance_chart.slint b/demos/energy-monitor/ui/widgets/balance_chart.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/balance_chart.slint rename to demos/energy-monitor/ui/widgets/balance_chart.slint diff --git a/examples/energy-monitor/ui/widgets/bar_chart.slint b/demos/energy-monitor/ui/widgets/bar_chart.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/bar_chart.slint rename to demos/energy-monitor/ui/widgets/bar_chart.slint diff --git a/examples/energy-monitor/ui/widgets/bar_tiles.slint b/demos/energy-monitor/ui/widgets/bar_tiles.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/bar_tiles.slint rename to demos/energy-monitor/ui/widgets/bar_tiles.slint diff --git a/examples/energy-monitor/ui/widgets/chart_axis.slint b/demos/energy-monitor/ui/widgets/chart_axis.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/chart_axis.slint rename to demos/energy-monitor/ui/widgets/chart_axis.slint diff --git a/examples/energy-monitor/ui/widgets/chart_pattern.slint b/demos/energy-monitor/ui/widgets/chart_pattern.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/chart_pattern.slint rename to demos/energy-monitor/ui/widgets/chart_pattern.slint diff --git a/examples/energy-monitor/ui/widgets/check_box.slint b/demos/energy-monitor/ui/widgets/check_box.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/check_box.slint rename to demos/energy-monitor/ui/widgets/check_box.slint diff --git a/examples/energy-monitor/ui/widgets/float_button.slint b/demos/energy-monitor/ui/widgets/float_button.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/float_button.slint rename to demos/energy-monitor/ui/widgets/float_button.slint diff --git a/examples/energy-monitor/ui/widgets/group_box.slint b/demos/energy-monitor/ui/widgets/group_box.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/group_box.slint rename to demos/energy-monitor/ui/widgets/group_box.slint diff --git a/examples/energy-monitor/ui/widgets/icon_button.slint b/demos/energy-monitor/ui/widgets/icon_button.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/icon_button.slint rename to demos/energy-monitor/ui/widgets/icon_button.slint diff --git a/examples/energy-monitor/ui/widgets/item.slint b/demos/energy-monitor/ui/widgets/item.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/item.slint rename to demos/energy-monitor/ui/widgets/item.slint diff --git a/examples/energy-monitor/ui/widgets/list_view.slint b/demos/energy-monitor/ui/widgets/list_view.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/list_view.slint rename to demos/energy-monitor/ui/widgets/list_view.slint diff --git a/examples/energy-monitor/ui/widgets/menu.slint b/demos/energy-monitor/ui/widgets/menu.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/menu.slint rename to demos/energy-monitor/ui/widgets/menu.slint diff --git a/examples/energy-monitor/ui/widgets/menu_button.slint b/demos/energy-monitor/ui/widgets/menu_button.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/menu_button.slint rename to demos/energy-monitor/ui/widgets/menu_button.slint diff --git a/examples/energy-monitor/ui/widgets/navigation.slint b/demos/energy-monitor/ui/widgets/navigation.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/navigation.slint rename to demos/energy-monitor/ui/widgets/navigation.slint diff --git a/examples/energy-monitor/ui/widgets/page_scroll_view.slint b/demos/energy-monitor/ui/widgets/page_scroll_view.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/page_scroll_view.slint rename to demos/energy-monitor/ui/widgets/page_scroll_view.slint diff --git a/examples/energy-monitor/ui/widgets/pagination.slint b/demos/energy-monitor/ui/widgets/pagination.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/pagination.slint rename to demos/energy-monitor/ui/widgets/pagination.slint diff --git a/examples/energy-monitor/ui/widgets/radio_button.slint b/demos/energy-monitor/ui/widgets/radio_button.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/radio_button.slint rename to demos/energy-monitor/ui/widgets/radio_button.slint diff --git a/examples/energy-monitor/ui/widgets/scroll_view.slint b/demos/energy-monitor/ui/widgets/scroll_view.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/scroll_view.slint rename to demos/energy-monitor/ui/widgets/scroll_view.slint diff --git a/examples/energy-monitor/ui/widgets/switch.slint b/demos/energy-monitor/ui/widgets/switch.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/switch.slint rename to demos/energy-monitor/ui/widgets/switch.slint diff --git a/examples/energy-monitor/ui/widgets/tab_widget.slint b/demos/energy-monitor/ui/widgets/tab_widget.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/tab_widget.slint rename to demos/energy-monitor/ui/widgets/tab_widget.slint diff --git a/examples/energy-monitor/ui/widgets/tile.slint b/demos/energy-monitor/ui/widgets/tile.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/tile.slint rename to demos/energy-monitor/ui/widgets/tile.slint diff --git a/examples/energy-monitor/ui/widgets/value_display.slint b/demos/energy-monitor/ui/widgets/value_display.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/value_display.slint rename to demos/energy-monitor/ui/widgets/value_display.slint diff --git a/examples/energy-monitor/ui/widgets/widgets.slint b/demos/energy-monitor/ui/widgets/widgets.slint similarity index 100% rename from examples/energy-monitor/ui/widgets/widgets.slint rename to demos/energy-monitor/ui/widgets/widgets.slint diff --git a/examples/printerdemo/README.md b/demos/printerdemo/README.md similarity index 85% rename from examples/printerdemo/README.md rename to demos/printerdemo/README.md index 0234fc2d1..5afc88fd3 100644 --- a/examples/printerdemo/README.md +++ b/demos/printerdemo/README.md @@ -6,6 +6,6 @@ A fictional user interface for the touch screen of a printer | `.slint` Design | Rust Source | C++ Source | Node Source | Online wasm Preview | Open in SlintPad | | --- | --- | --- | --- | --- | --- | -| [`ui.slint`](./ui/printerdemo.slint) | [`main.rs`](./rust/main.rs) | [`main.cpp`](./cpp/main.cpp) | [`main.js`](./node/main.js) | [Online simulation](https://slint.dev/snapshots/master/demos/printerdemo/) | [Preview in Online Code Editor](https://slint.dev/snapshots/master/editor?load_url=https://raw.githubusercontent.com/slint-ui/slint/master/examples/printerdemo/ui/printerdemo.slint) | +| [`ui.slint`](./ui/printerdemo.slint) | [`main.rs`](./rust/main.rs) | [`main.cpp`](./cpp/main.cpp) | [`main.js`](./node/main.js) | [Online simulation](https://slint.dev/snapshots/master/demos/printerdemo/) | [Preview in Online Code Editor](https://slint.dev/snapshots/master/editor?load_url=https://raw.githubusercontent.com/slint-ui/slint/master/demos/printerdemo/ui/printerdemo.slint) | -![Screenshot of the Printer Demo](https://slint.dev/resources/printerdemo_screenshot.png "Printer Demo") \ No newline at end of file +![Screenshot of the Printer Demo](https://slint.dev/resources/printerdemo_screenshot.png "Printer Demo") diff --git a/examples/printerdemo/cpp/.gitignore b/demos/printerdemo/cpp/.gitignore similarity index 100% rename from examples/printerdemo/cpp/.gitignore rename to demos/printerdemo/cpp/.gitignore diff --git a/examples/printerdemo/cpp/CMakeLists.txt b/demos/printerdemo/cpp/CMakeLists.txt similarity index 100% rename from examples/printerdemo/cpp/CMakeLists.txt rename to demos/printerdemo/cpp/CMakeLists.txt diff --git a/examples/printerdemo/cpp/main.cpp b/demos/printerdemo/cpp/main.cpp similarity index 100% rename from examples/printerdemo/cpp/main.cpp rename to demos/printerdemo/cpp/main.cpp diff --git a/examples/printerdemo/cpp_interpreted/.gitignore b/demos/printerdemo/cpp_interpreted/.gitignore similarity index 100% rename from examples/printerdemo/cpp_interpreted/.gitignore rename to demos/printerdemo/cpp_interpreted/.gitignore diff --git a/examples/printerdemo/cpp_interpreted/CMakeLists.txt b/demos/printerdemo/cpp_interpreted/CMakeLists.txt similarity index 100% rename from examples/printerdemo/cpp_interpreted/CMakeLists.txt rename to demos/printerdemo/cpp_interpreted/CMakeLists.txt diff --git a/examples/printerdemo/cpp_interpreted/main.cpp b/demos/printerdemo/cpp_interpreted/main.cpp similarity index 100% rename from examples/printerdemo/cpp_interpreted/main.cpp rename to demos/printerdemo/cpp_interpreted/main.cpp diff --git a/examples/printerdemo/lang/fr/LC_MESSAGES/printerdemo.mo b/demos/printerdemo/lang/fr/LC_MESSAGES/printerdemo.mo similarity index 100% rename from examples/printerdemo/lang/fr/LC_MESSAGES/printerdemo.mo rename to demos/printerdemo/lang/fr/LC_MESSAGES/printerdemo.mo diff --git a/examples/printerdemo/lang/fr/LC_MESSAGES/printerdemo.po b/demos/printerdemo/lang/fr/LC_MESSAGES/printerdemo.po similarity index 100% rename from examples/printerdemo/lang/fr/LC_MESSAGES/printerdemo.po rename to demos/printerdemo/lang/fr/LC_MESSAGES/printerdemo.po diff --git a/examples/printerdemo/node/README b/demos/printerdemo/node/README similarity index 100% rename from examples/printerdemo/node/README rename to demos/printerdemo/node/README diff --git a/examples/printerdemo/node/main.js b/demos/printerdemo/node/main.js similarity index 100% rename from examples/printerdemo/node/main.js rename to demos/printerdemo/node/main.js diff --git a/examples/printerdemo/node/package.json b/demos/printerdemo/node/package.json similarity index 100% rename from examples/printerdemo/node/package.json rename to demos/printerdemo/node/package.json diff --git a/examples/printerdemo/printerdemo.pot b/demos/printerdemo/printerdemo.pot similarity index 100% rename from examples/printerdemo/printerdemo.pot rename to demos/printerdemo/printerdemo.pot diff --git a/examples/printerdemo/python/Pipfile b/demos/printerdemo/python/Pipfile similarity index 100% rename from examples/printerdemo/python/Pipfile rename to demos/printerdemo/python/Pipfile diff --git a/examples/printerdemo/python/README.md b/demos/printerdemo/python/README.md similarity index 100% rename from examples/printerdemo/python/README.md rename to demos/printerdemo/python/README.md diff --git a/examples/printerdemo/python/main.py b/demos/printerdemo/python/main.py similarity index 100% rename from examples/printerdemo/python/main.py rename to demos/printerdemo/python/main.py diff --git a/examples/printerdemo/rust/Cargo.toml b/demos/printerdemo/rust/Cargo.toml similarity index 100% rename from examples/printerdemo/rust/Cargo.toml rename to demos/printerdemo/rust/Cargo.toml diff --git a/examples/printerdemo/rust/build.rs b/demos/printerdemo/rust/build.rs similarity index 100% rename from examples/printerdemo/rust/build.rs rename to demos/printerdemo/rust/build.rs diff --git a/examples/printerdemo/rust/index.html b/demos/printerdemo/rust/index.html similarity index 88% rename from examples/printerdemo/rust/index.html rename to demos/printerdemo/rust/index.html index 398f11f02..c84d2f4ec 100644 --- a/examples/printerdemo/rust/index.html +++ b/demos/printerdemo/rust/index.html @@ -31,7 +31,6 @@ height: 100vh !important; } } - @@ -46,9 +45,9 @@ diff --git a/examples/printerdemo/rust/lib.rs b/demos/printerdemo/rust/lib.rs similarity index 100% rename from examples/printerdemo/rust/lib.rs rename to demos/printerdemo/rust/lib.rs diff --git a/examples/printerdemo/rust/main.rs b/demos/printerdemo/rust/main.rs similarity index 100% rename from examples/printerdemo/rust/main.rs rename to demos/printerdemo/rust/main.rs diff --git a/examples/printerdemo/ui/README b/demos/printerdemo/ui/README similarity index 100% rename from examples/printerdemo/ui/README rename to demos/printerdemo/ui/README diff --git a/examples/printerdemo/ui/common.slint b/demos/printerdemo/ui/common.slint similarity index 100% rename from examples/printerdemo/ui/common.slint rename to demos/printerdemo/ui/common.slint diff --git a/examples/printerdemo/ui/copy_page.slint b/demos/printerdemo/ui/copy_page.slint similarity index 100% rename from examples/printerdemo/ui/copy_page.slint rename to demos/printerdemo/ui/copy_page.slint diff --git a/examples/printerdemo/ui/fonts/.gitignore b/demos/printerdemo/ui/fonts/.gitignore similarity index 100% rename from examples/printerdemo/ui/fonts/.gitignore rename to demos/printerdemo/ui/fonts/.gitignore diff --git a/examples/printerdemo/ui/fonts/NotoSans-Bold.ttf b/demos/printerdemo/ui/fonts/NotoSans-Bold.ttf similarity index 100% rename from examples/printerdemo/ui/fonts/NotoSans-Bold.ttf rename to demos/printerdemo/ui/fonts/NotoSans-Bold.ttf diff --git a/examples/printerdemo/ui/fonts/NotoSans-Bold.ttf.license b/demos/printerdemo/ui/fonts/NotoSans-Bold.ttf.license similarity index 100% rename from examples/printerdemo/ui/fonts/NotoSans-Bold.ttf.license rename to demos/printerdemo/ui/fonts/NotoSans-Bold.ttf.license diff --git a/examples/printerdemo/ui/fonts/NotoSans-Italic.ttf b/demos/printerdemo/ui/fonts/NotoSans-Italic.ttf similarity index 100% rename from examples/printerdemo/ui/fonts/NotoSans-Italic.ttf rename to demos/printerdemo/ui/fonts/NotoSans-Italic.ttf diff --git a/examples/printerdemo/ui/fonts/NotoSans-Italic.ttf.license b/demos/printerdemo/ui/fonts/NotoSans-Italic.ttf.license similarity index 100% rename from examples/printerdemo/ui/fonts/NotoSans-Italic.ttf.license rename to demos/printerdemo/ui/fonts/NotoSans-Italic.ttf.license diff --git a/examples/printerdemo/ui/fonts/NotoSans-Light.ttf b/demos/printerdemo/ui/fonts/NotoSans-Light.ttf similarity index 100% rename from examples/printerdemo/ui/fonts/NotoSans-Light.ttf rename to demos/printerdemo/ui/fonts/NotoSans-Light.ttf diff --git a/examples/printerdemo/ui/fonts/NotoSans-Light.ttf.license b/demos/printerdemo/ui/fonts/NotoSans-Light.ttf.license similarity index 100% rename from examples/printerdemo/ui/fonts/NotoSans-Light.ttf.license rename to demos/printerdemo/ui/fonts/NotoSans-Light.ttf.license diff --git a/examples/printerdemo/ui/fonts/NotoSans-Regular.ttf b/demos/printerdemo/ui/fonts/NotoSans-Regular.ttf similarity index 100% rename from examples/printerdemo/ui/fonts/NotoSans-Regular.ttf rename to demos/printerdemo/ui/fonts/NotoSans-Regular.ttf diff --git a/examples/printerdemo/ui/fonts/NotoSans-Regular.ttf.license b/demos/printerdemo/ui/fonts/NotoSans-Regular.ttf.license similarity index 100% rename from examples/printerdemo/ui/fonts/NotoSans-Regular.ttf.license rename to demos/printerdemo/ui/fonts/NotoSans-Regular.ttf.license diff --git a/examples/printerdemo/ui/fonts/convert.sh b/demos/printerdemo/ui/fonts/convert.sh similarity index 100% rename from examples/printerdemo/ui/fonts/convert.sh rename to demos/printerdemo/ui/fonts/convert.sh diff --git a/examples/printerdemo/ui/home_page.slint b/demos/printerdemo/ui/home_page.slint similarity index 100% rename from examples/printerdemo/ui/home_page.slint rename to demos/printerdemo/ui/home_page.slint diff --git a/examples/printerdemo/ui/images/back.svg b/demos/printerdemo/ui/images/back.svg similarity index 100% rename from examples/printerdemo/ui/images/back.svg rename to demos/printerdemo/ui/images/back.svg diff --git a/examples/printerdemo/ui/images/cat.jpg b/demos/printerdemo/ui/images/cat.jpg similarity index 100% rename from examples/printerdemo/ui/images/cat.jpg rename to demos/printerdemo/ui/images/cat.jpg diff --git a/examples/printerdemo/ui/images/cat.jpg.license b/demos/printerdemo/ui/images/cat.jpg.license similarity index 100% rename from examples/printerdemo/ui/images/cat.jpg.license rename to demos/printerdemo/ui/images/cat.jpg.license diff --git a/examples/printerdemo/ui/images/check.svg b/demos/printerdemo/ui/images/check.svg similarity index 100% rename from examples/printerdemo/ui/images/check.svg rename to demos/printerdemo/ui/images/check.svg diff --git a/examples/printerdemo/ui/images/copy.svg b/demos/printerdemo/ui/images/copy.svg similarity index 100% rename from examples/printerdemo/ui/images/copy.svg rename to demos/printerdemo/ui/images/copy.svg diff --git a/examples/printerdemo/ui/images/delete.svg b/demos/printerdemo/ui/images/delete.svg similarity index 100% rename from examples/printerdemo/ui/images/delete.svg rename to demos/printerdemo/ui/images/delete.svg diff --git a/examples/printerdemo/ui/images/dog.jpg b/demos/printerdemo/ui/images/dog.jpg similarity index 100% rename from examples/printerdemo/ui/images/dog.jpg rename to demos/printerdemo/ui/images/dog.jpg diff --git a/examples/printerdemo/ui/images/dog.jpg.license b/demos/printerdemo/ui/images/dog.jpg.license similarity index 100% rename from examples/printerdemo/ui/images/dog.jpg.license rename to demos/printerdemo/ui/images/dog.jpg.license diff --git a/examples/printerdemo/ui/images/down.svg b/demos/printerdemo/ui/images/down.svg similarity index 100% rename from examples/printerdemo/ui/images/down.svg rename to demos/printerdemo/ui/images/down.svg diff --git a/examples/printerdemo/ui/images/elephant.jpg b/demos/printerdemo/ui/images/elephant.jpg similarity index 100% rename from examples/printerdemo/ui/images/elephant.jpg rename to demos/printerdemo/ui/images/elephant.jpg diff --git a/examples/printerdemo/ui/images/elephant.jpg.license b/demos/printerdemo/ui/images/elephant.jpg.license similarity index 100% rename from examples/printerdemo/ui/images/elephant.jpg.license rename to demos/printerdemo/ui/images/elephant.jpg.license diff --git a/examples/printerdemo/ui/images/home.svg b/demos/printerdemo/ui/images/home.svg similarity index 100% rename from examples/printerdemo/ui/images/home.svg rename to demos/printerdemo/ui/images/home.svg diff --git a/examples/printerdemo/ui/images/ink.svg b/demos/printerdemo/ui/images/ink.svg similarity index 100% rename from examples/printerdemo/ui/images/ink.svg rename to demos/printerdemo/ui/images/ink.svg diff --git a/examples/printerdemo/ui/images/laptop.svg b/demos/printerdemo/ui/images/laptop.svg similarity index 100% rename from examples/printerdemo/ui/images/laptop.svg rename to demos/printerdemo/ui/images/laptop.svg diff --git a/examples/printerdemo/ui/images/list.svg b/demos/printerdemo/ui/images/list.svg similarity index 100% rename from examples/printerdemo/ui/images/list.svg rename to demos/printerdemo/ui/images/list.svg diff --git a/examples/printerdemo/ui/images/minus.svg b/demos/printerdemo/ui/images/minus.svg similarity index 100% rename from examples/printerdemo/ui/images/minus.svg rename to demos/printerdemo/ui/images/minus.svg diff --git a/examples/printerdemo/ui/images/moon.svg b/demos/printerdemo/ui/images/moon.svg similarity index 100% rename from examples/printerdemo/ui/images/moon.svg rename to demos/printerdemo/ui/images/moon.svg diff --git a/examples/printerdemo/ui/images/moon_full.svg b/demos/printerdemo/ui/images/moon_full.svg similarity index 100% rename from examples/printerdemo/ui/images/moon_full.svg rename to demos/printerdemo/ui/images/moon_full.svg diff --git a/examples/printerdemo/ui/images/night_mode.svg b/demos/printerdemo/ui/images/night_mode.svg similarity index 100% rename from examples/printerdemo/ui/images/night_mode.svg rename to demos/printerdemo/ui/images/night_mode.svg diff --git a/examples/printerdemo/ui/images/page_selection.svg b/demos/printerdemo/ui/images/page_selection.svg similarity index 100% rename from examples/printerdemo/ui/images/page_selection.svg rename to demos/printerdemo/ui/images/page_selection.svg diff --git a/examples/printerdemo/ui/images/pause.svg b/demos/printerdemo/ui/images/pause.svg similarity index 100% rename from examples/printerdemo/ui/images/pause.svg rename to demos/printerdemo/ui/images/pause.svg diff --git a/examples/printerdemo/ui/images/plus.svg b/demos/printerdemo/ui/images/plus.svg similarity index 100% rename from examples/printerdemo/ui/images/plus.svg rename to demos/printerdemo/ui/images/plus.svg diff --git a/examples/printerdemo/ui/images/power.svg b/demos/printerdemo/ui/images/power.svg similarity index 100% rename from examples/printerdemo/ui/images/power.svg rename to demos/printerdemo/ui/images/power.svg diff --git a/examples/printerdemo/ui/images/print.svg b/demos/printerdemo/ui/images/print.svg similarity index 100% rename from examples/printerdemo/ui/images/print.svg rename to demos/printerdemo/ui/images/print.svg diff --git a/examples/printerdemo/ui/images/printer.svg b/demos/printerdemo/ui/images/printer.svg similarity index 100% rename from examples/printerdemo/ui/images/printer.svg rename to demos/printerdemo/ui/images/printer.svg diff --git a/examples/printerdemo/ui/images/replicate.svg b/demos/printerdemo/ui/images/replicate.svg similarity index 100% rename from examples/printerdemo/ui/images/replicate.svg rename to demos/printerdemo/ui/images/replicate.svg diff --git a/examples/printerdemo/ui/images/scan.svg b/demos/printerdemo/ui/images/scan.svg similarity index 100% rename from examples/printerdemo/ui/images/scan.svg rename to demos/printerdemo/ui/images/scan.svg diff --git a/examples/printerdemo/ui/images/settings.svg b/demos/printerdemo/ui/images/settings.svg similarity index 100% rename from examples/printerdemo/ui/images/settings.svg rename to demos/printerdemo/ui/images/settings.svg diff --git a/examples/printerdemo/ui/images/snake.jpg b/demos/printerdemo/ui/images/snake.jpg similarity index 100% rename from examples/printerdemo/ui/images/snake.jpg rename to demos/printerdemo/ui/images/snake.jpg diff --git a/examples/printerdemo/ui/images/snake.jpg.license b/demos/printerdemo/ui/images/snake.jpg.license similarity index 100% rename from examples/printerdemo/ui/images/snake.jpg.license rename to demos/printerdemo/ui/images/snake.jpg.license diff --git a/examples/printerdemo/ui/images/usb.svg b/demos/printerdemo/ui/images/usb.svg similarity index 100% rename from examples/printerdemo/ui/images/usb.svg rename to demos/printerdemo/ui/images/usb.svg diff --git a/examples/printerdemo/ui/ink_page.slint b/demos/printerdemo/ui/ink_page.slint similarity index 100% rename from examples/printerdemo/ui/ink_page.slint rename to demos/printerdemo/ui/ink_page.slint diff --git a/examples/printerdemo/ui/print_page.slint b/demos/printerdemo/ui/print_page.slint similarity index 100% rename from examples/printerdemo/ui/print_page.slint rename to demos/printerdemo/ui/print_page.slint diff --git a/examples/printerdemo/ui/printer_queue.slint b/demos/printerdemo/ui/printer_queue.slint similarity index 100% rename from examples/printerdemo/ui/printer_queue.slint rename to demos/printerdemo/ui/printer_queue.slint diff --git a/examples/printerdemo/ui/printerdemo.slint b/demos/printerdemo/ui/printerdemo.slint similarity index 100% rename from examples/printerdemo/ui/printerdemo.slint rename to demos/printerdemo/ui/printerdemo.slint diff --git a/examples/printerdemo/ui/scan_page.slint b/demos/printerdemo/ui/scan_page.slint similarity index 100% rename from examples/printerdemo/ui/scan_page.slint rename to demos/printerdemo/ui/scan_page.slint diff --git a/examples/printerdemo/ui/settings_page.slint b/demos/printerdemo/ui/settings_page.slint similarity index 100% rename from examples/printerdemo/ui/settings_page.slint rename to demos/printerdemo/ui/settings_page.slint diff --git a/examples/printerdemo/ui/usb_page.slint b/demos/printerdemo/ui/usb_page.slint similarity index 100% rename from examples/printerdemo/ui/usb_page.slint rename to demos/printerdemo/ui/usb_page.slint diff --git a/examples/printerdemo/zephyr/.gitignore b/demos/printerdemo/zephyr/.gitignore similarity index 100% rename from examples/printerdemo/zephyr/.gitignore rename to demos/printerdemo/zephyr/.gitignore diff --git a/examples/printerdemo/zephyr/CMakeLists.txt b/demos/printerdemo/zephyr/CMakeLists.txt similarity index 100% rename from examples/printerdemo/zephyr/CMakeLists.txt rename to demos/printerdemo/zephyr/CMakeLists.txt diff --git a/examples/printerdemo/zephyr/README.md b/demos/printerdemo/zephyr/README.md similarity index 91% rename from examples/printerdemo/zephyr/README.md rename to demos/printerdemo/zephyr/README.md index 3c2b469de..785e71d4d 100644 --- a/examples/printerdemo/zephyr/README.md +++ b/demos/printerdemo/zephyr/README.md @@ -44,10 +44,10 @@ Before you can run this example, make sure you have done the following: ```bash # If Slint source is already checked out (this adds the Zephyr source next to the Slint source): cd .. - west init -l --mf examples/printerdemo/zephyr/west.yaml ./slint + west init -l --mf demos/printerdemo/zephyr/west.yaml ./slint # If you do not have Slint source yet (this checks out Slint and Zephyr source into slint-zephyr): - west init -m https://github.com/slint-ui/slint --mr zephyr --mf examples/printerdemo/zephyr/west.yaml slint-zephyr + west init -m https://github.com/slint-ui/slint --mr zephyr --mf demos/printerdemo/zephyr/west.yaml slint-zephyr cd slint-zephyr # Checkout the repositories: @@ -74,7 +74,7 @@ Once you have the prerequisites, navigate to this directory and execute the foll ```bash # Build -west build -b native_sim/native/64 -p always slint/examples/printerdemo/zephyr +west build -b native_sim/native/64 -p always slint/demos/printerdemo/zephyr # Run ./build/zephyr/zephyr.exe @@ -88,7 +88,7 @@ This sample has been tested on the [NXP MIMXRT1170-EVKB](https://docs.zephyrproj ```bash # Build -west build -b mimxrt1170_evk@B/mimxrt1176/cm7 -p always slint/examples/printerdemo/zephyr -- -DSHIELD=rk055hdmipi4ma0 -DCMAKE_BUILD_TYPE=Release +west build -b mimxrt1170_evk@B/mimxrt1176/cm7 -p always slint/demos/printerdemo/zephyr -- -DSHIELD=rk055hdmipi4ma0 -DCMAKE_BUILD_TYPE=Release # Flash west flash diff --git a/examples/printerdemo/zephyr/VERSION b/demos/printerdemo/zephyr/VERSION similarity index 100% rename from examples/printerdemo/zephyr/VERSION rename to demos/printerdemo/zephyr/VERSION diff --git a/examples/printerdemo/zephyr/boards/mimxrt1170_evk_mimxrt1176_cm7.conf b/demos/printerdemo/zephyr/boards/mimxrt1170_evk_mimxrt1176_cm7.conf similarity index 100% rename from examples/printerdemo/zephyr/boards/mimxrt1170_evk_mimxrt1176_cm7.conf rename to demos/printerdemo/zephyr/boards/mimxrt1170_evk_mimxrt1176_cm7.conf diff --git a/examples/printerdemo/zephyr/boards/native_sim_64.conf b/demos/printerdemo/zephyr/boards/native_sim_64.conf similarity index 100% rename from examples/printerdemo/zephyr/boards/native_sim_64.conf rename to demos/printerdemo/zephyr/boards/native_sim_64.conf diff --git a/examples/printerdemo/zephyr/boards/native_sim_64.overlay b/demos/printerdemo/zephyr/boards/native_sim_64.overlay similarity index 100% rename from examples/printerdemo/zephyr/boards/native_sim_64.overlay rename to demos/printerdemo/zephyr/boards/native_sim_64.overlay diff --git a/examples/printerdemo/zephyr/boards/shields/rk055hdmipi4ma0/rk055hdmipi4ma0.overlay b/demos/printerdemo/zephyr/boards/shields/rk055hdmipi4ma0/rk055hdmipi4ma0.overlay similarity index 100% rename from examples/printerdemo/zephyr/boards/shields/rk055hdmipi4ma0/rk055hdmipi4ma0.overlay rename to demos/printerdemo/zephyr/boards/shields/rk055hdmipi4ma0/rk055hdmipi4ma0.overlay diff --git a/examples/printerdemo/zephyr/prj.conf b/demos/printerdemo/zephyr/prj.conf similarity index 100% rename from examples/printerdemo/zephyr/prj.conf rename to demos/printerdemo/zephyr/prj.conf diff --git a/examples/printerdemo/zephyr/src/main.cpp b/demos/printerdemo/zephyr/src/main.cpp similarity index 100% rename from examples/printerdemo/zephyr/src/main.cpp rename to demos/printerdemo/zephyr/src/main.cpp diff --git a/examples/printerdemo/zephyr/src/slint-zephyr.cpp b/demos/printerdemo/zephyr/src/slint-zephyr.cpp similarity index 100% rename from examples/printerdemo/zephyr/src/slint-zephyr.cpp rename to demos/printerdemo/zephyr/src/slint-zephyr.cpp diff --git a/examples/printerdemo/zephyr/src/slint-zephyr.h b/demos/printerdemo/zephyr/src/slint-zephyr.h similarity index 100% rename from examples/printerdemo/zephyr/src/slint-zephyr.h rename to demos/printerdemo/zephyr/src/slint-zephyr.h diff --git a/examples/printerdemo/zephyr/west.yaml b/demos/printerdemo/zephyr/west.yaml similarity index 100% rename from examples/printerdemo/zephyr/west.yaml rename to demos/printerdemo/zephyr/west.yaml diff --git a/examples/printerdemo_mcu/Cargo.toml b/demos/printerdemo_mcu/Cargo.toml similarity index 91% rename from examples/printerdemo_mcu/Cargo.toml rename to demos/printerdemo_mcu/Cargo.toml index 396f28882..08a2fc79e 100644 --- a/examples/printerdemo_mcu/Cargo.toml +++ b/demos/printerdemo_mcu/Cargo.toml @@ -20,7 +20,7 @@ default = ["simulator"] [dependencies] slint = { path = "../../api/rs/slint", default-features = false, features = ["compat-1-2"] } -mcu-board-support = { path = "../mcu-board-support" } +mcu-board-support = { path = "../../examples/mcu-board-support" } [build-dependencies] slint-build = { path = "../../api/rs/build" } diff --git a/examples/printerdemo_mcu/README.md b/demos/printerdemo_mcu/README.md similarity index 100% rename from examples/printerdemo_mcu/README.md rename to demos/printerdemo_mcu/README.md diff --git a/examples/printerdemo_mcu/bench.rs b/demos/printerdemo_mcu/bench.rs similarity index 100% rename from examples/printerdemo_mcu/bench.rs rename to demos/printerdemo_mcu/bench.rs diff --git a/examples/printerdemo_mcu/build.rs b/demos/printerdemo_mcu/build.rs similarity index 100% rename from examples/printerdemo_mcu/build.rs rename to demos/printerdemo_mcu/build.rs diff --git a/examples/printerdemo_mcu/esp-idf/.gitignore b/demos/printerdemo_mcu/esp-idf/.gitignore similarity index 100% rename from examples/printerdemo_mcu/esp-idf/.gitignore rename to demos/printerdemo_mcu/esp-idf/.gitignore diff --git a/examples/printerdemo_mcu/esp-idf/CMakeLists.txt b/demos/printerdemo_mcu/esp-idf/CMakeLists.txt similarity index 100% rename from examples/printerdemo_mcu/esp-idf/CMakeLists.txt rename to demos/printerdemo_mcu/esp-idf/CMakeLists.txt diff --git a/examples/printerdemo_mcu/esp-idf/README.md b/demos/printerdemo_mcu/esp-idf/README.md similarity index 100% rename from examples/printerdemo_mcu/esp-idf/README.md rename to demos/printerdemo_mcu/esp-idf/README.md diff --git a/examples/printerdemo_mcu/esp-idf/main/CMakeLists.txt b/demos/printerdemo_mcu/esp-idf/main/CMakeLists.txt similarity index 100% rename from examples/printerdemo_mcu/esp-idf/main/CMakeLists.txt rename to demos/printerdemo_mcu/esp-idf/main/CMakeLists.txt diff --git a/examples/printerdemo_mcu/esp-idf/main/idf_component.yml b/demos/printerdemo_mcu/esp-idf/main/idf_component.yml similarity index 100% rename from examples/printerdemo_mcu/esp-idf/main/idf_component.yml rename to demos/printerdemo_mcu/esp-idf/main/idf_component.yml diff --git a/examples/printerdemo_mcu/esp-idf/main/main.cpp b/demos/printerdemo_mcu/esp-idf/main/main.cpp similarity index 100% rename from examples/printerdemo_mcu/esp-idf/main/main.cpp rename to demos/printerdemo_mcu/esp-idf/main/main.cpp diff --git a/examples/printerdemo_mcu/esp-idf/partitions.csv b/demos/printerdemo_mcu/esp-idf/partitions.csv similarity index 100% rename from examples/printerdemo_mcu/esp-idf/partitions.csv rename to demos/printerdemo_mcu/esp-idf/partitions.csv diff --git a/examples/printerdemo_mcu/esp-idf/rust-toolchain.toml b/demos/printerdemo_mcu/esp-idf/rust-toolchain.toml similarity index 100% rename from examples/printerdemo_mcu/esp-idf/rust-toolchain.toml rename to demos/printerdemo_mcu/esp-idf/rust-toolchain.toml diff --git a/examples/printerdemo_mcu/esp-idf/sdkconfig.defaults b/demos/printerdemo_mcu/esp-idf/sdkconfig.defaults similarity index 100% rename from examples/printerdemo_mcu/esp-idf/sdkconfig.defaults rename to demos/printerdemo_mcu/esp-idf/sdkconfig.defaults diff --git a/examples/printerdemo_mcu/main.rs b/demos/printerdemo_mcu/main.rs similarity index 100% rename from examples/printerdemo_mcu/main.rs rename to demos/printerdemo_mcu/main.rs diff --git a/examples/printerdemo_mcu/ui/README b/demos/printerdemo_mcu/ui/README similarity index 100% rename from examples/printerdemo_mcu/ui/README rename to demos/printerdemo_mcu/ui/README diff --git a/examples/printerdemo_mcu/ui/common.slint b/demos/printerdemo_mcu/ui/common.slint similarity index 100% rename from examples/printerdemo_mcu/ui/common.slint rename to demos/printerdemo_mcu/ui/common.slint diff --git a/examples/printerdemo_mcu/ui/copy_page.slint b/demos/printerdemo_mcu/ui/copy_page.slint similarity index 100% rename from examples/printerdemo_mcu/ui/copy_page.slint rename to demos/printerdemo_mcu/ui/copy_page.slint diff --git a/examples/printerdemo_mcu/ui/fonts b/demos/printerdemo_mcu/ui/fonts similarity index 100% rename from examples/printerdemo_mcu/ui/fonts rename to demos/printerdemo_mcu/ui/fonts diff --git a/examples/printerdemo_mcu/ui/home_page.slint b/demos/printerdemo_mcu/ui/home_page.slint similarity index 100% rename from examples/printerdemo_mcu/ui/home_page.slint rename to demos/printerdemo_mcu/ui/home_page.slint diff --git a/examples/printerdemo_mcu/ui/images b/demos/printerdemo_mcu/ui/images similarity index 100% rename from examples/printerdemo_mcu/ui/images rename to demos/printerdemo_mcu/ui/images diff --git a/examples/printerdemo_mcu/ui/ink_page.slint b/demos/printerdemo_mcu/ui/ink_page.slint similarity index 100% rename from examples/printerdemo_mcu/ui/ink_page.slint rename to demos/printerdemo_mcu/ui/ink_page.slint diff --git a/examples/printerdemo_mcu/ui/printer_queue.slint b/demos/printerdemo_mcu/ui/printer_queue.slint similarity index 100% rename from examples/printerdemo_mcu/ui/printer_queue.slint rename to demos/printerdemo_mcu/ui/printer_queue.slint diff --git a/examples/printerdemo_mcu/ui/printerdemo.slint b/demos/printerdemo_mcu/ui/printerdemo.slint similarity index 100% rename from examples/printerdemo_mcu/ui/printerdemo.slint rename to demos/printerdemo_mcu/ui/printerdemo.slint diff --git a/examples/printerdemo_mcu/ui/scan_page.slint b/demos/printerdemo_mcu/ui/scan_page.slint similarity index 100% rename from examples/printerdemo_mcu/ui/scan_page.slint rename to demos/printerdemo_mcu/ui/scan_page.slint diff --git a/examples/printerdemo_mcu/ui/settings_page.slint b/demos/printerdemo_mcu/ui/settings_page.slint similarity index 100% rename from examples/printerdemo_mcu/ui/settings_page.slint rename to demos/printerdemo_mcu/ui/settings_page.slint diff --git a/examples/printerdemo_mcu/ui/slint-logo-square-dark-80x80.png b/demos/printerdemo_mcu/ui/slint-logo-square-dark-80x80.png similarity index 100% rename from examples/printerdemo_mcu/ui/slint-logo-square-dark-80x80.png rename to demos/printerdemo_mcu/ui/slint-logo-square-dark-80x80.png diff --git a/examples/printerdemo_mcu/ui/slint-logo-square-light-80x80.png b/demos/printerdemo_mcu/ui/slint-logo-square-light-80x80.png similarity index 100% rename from examples/printerdemo_mcu/ui/slint-logo-square-light-80x80.png rename to demos/printerdemo_mcu/ui/slint-logo-square-light-80x80.png diff --git a/docs/building.md b/docs/building.md index a3bd4cd38..380b67782 100644 --- a/docs/building.md +++ b/docs/building.md @@ -212,7 +212,7 @@ Slint also includes a viewer tool that can load `.slint` files dynamically at ru cargo-integrated binary and can be run directly on the `.slint` files, for example: ```sh -cargo run --release --bin slint-viewer -- examples/printerdemo/ui/printerdemo.slint +cargo run --release --bin slint-viewer -- demos/printerdemo/ui/printerdemo.slint ``` ## Generating the Documentation diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 245cf6f7f..7c0f1c334 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -14,15 +14,8 @@ if (NOT TARGET Slint::Slint) include(FetchContent) endif() -if (TARGET Slint::slint-compiler) - add_subdirectory(printerdemo/cpp/) -endif() -if (SLINT_FEATURE_INTERPRETER) - add_subdirectory(printerdemo/cpp_interpreted/) -endif() if (TARGET Slint::slint-compiler) add_subdirectory(carousel/cpp/) - add_subdirectory(printerdemo_old/cpp/) add_subdirectory(todo/cpp/) add_subdirectory(gallery/) add_subdirectory(memory/) diff --git a/examples/README.md b/examples/README.md index 4d20bbe8e..23bbc5375 100644 --- a/examples/README.md +++ b/examples/README.md @@ -6,9 +6,8 @@ These examples demonstrate the main features of Slint and how to use them in dif -| Thumbnail | Description | Demo | +| Thumbnail | Description | Example | | --- | --- | --- | -| [Printer UI ![Printer Demo image](https://github.com/user-attachments/assets/7e7400ad-283a-4404-b04a-8620ba4df452)](./printerdemo) | A fictional user interface for the touch screen of a printer.
[Project...](./printerdemo) | [Wasm Demo](https://slint.dev/snapshots/master/demos/printerdemo/) | | [Widget Gallery ![Gallery demo image](https://github.com/user-attachments/assets/e37ad016-475a-4c01-8d1b-1326ee7aa733 "Gallery demo image")](./gallery/) | A simple application showing the different widgets.
[Project...](./gallery) | [Wasm Demo](https://slint.dev/snapshots/master/demos/gallery/) | | [Energy Meter![Energy meter demo image](https://github.com/user-attachments/assets/abfe03e3-ded6-4ddc-82b7-8303ee45515c "Energy meter demo image")](./energy-monitor/) | A fictional user interface of a device that monitors energy consumption in a building.
[Project...](./energy-monitor) | [Wasm Demo](https://slint.dev/snapshots/master/demos/energy-monitor/) | | [Todo app![Todo demo image](https://github.com/user-attachments/assets/e534736b-3f64-4631-8b9a-80ccd985e9de "Todo demo image")](./todo/) | A simple todo application.
[Project...](./todo)

A simple todo application based on the [Model View Controller](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) pattern.
[Project...](./todo-mvc) | [Wasm Demo](https://slint.dev/snapshots/master/demos/todo/)

[Wasm MVC Demo](https://slint.dev/snapshots/master/demos/todo-mvc/) | @@ -39,23 +38,23 @@ These examples demonstrate the main features of Slint and how to use them in dif Simply load the .slint file with the viewer application ```sh -cargo run --release --bin slint-viewer -- examples/printerdemo/ui/printerdemo.slint +cargo run --release --bin slint-viewer -- examples/gallery/gallery.slint ``` --- ### Running the Rust Examples -You can run the examples either by going into the rust sub-folder and use `cargo run`, for example: +You can run the examples either by going into folder or into the rust sub-folder and use `cargo run`, for example: ```sh -cd examples/printerdemo/rust +cd examples/gallery cargo run --release ``` or you can run them from anywhere in the Cargo workspace by name: ```sh -cargo run --release --bin printerdemo +cargo run --release --bin gallery ``` --- @@ -69,7 +68,7 @@ Since wasm files cannot be served from `file://` URL, you need to open a wab ser the content ```sh -cd examples/printerdemo/rust +cd examples/imagefilter/rust sed -i "s/^#wasm# //" Cargo.toml wasm-pack build --release --target web python3 -m http.server @@ -98,7 +97,7 @@ pushd api/node npm install npm run compile popd -cd examples/printerdemo/node +cd examples/todo/node npm install npm start ``` diff --git a/examples/printerdemo_old/cpp/.gitignore b/examples/printerdemo_old/cpp/.gitignore deleted file mode 100644 index 378eac25d..000000000 --- a/examples/printerdemo_old/cpp/.gitignore +++ /dev/null @@ -1 +0,0 @@ -build diff --git a/examples/printerdemo_old/cpp/CMakeLists.txt b/examples/printerdemo_old/cpp/CMakeLists.txt deleted file mode 100644 index ef8d42f6a..000000000 --- a/examples/printerdemo_old/cpp/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright © SixtyFPS GmbH -# SPDX-License-Identifier: MIT - -cmake_minimum_required(VERSION 3.21) - -if (NOT TARGET Slint::Slint) - find_package(Slint REQUIRED) -endif() - -add_executable(printerdemo_old main.cpp) -target_link_libraries(printerdemo_old PRIVATE Slint::Slint) -slint_target_sources(printerdemo_old ../ui/printerdemo.slint) diff --git a/examples/printerdemo_old/cpp/main.cpp b/examples/printerdemo_old/cpp/main.cpp deleted file mode 100644 index 50d8db620..000000000 --- a/examples/printerdemo_old/cpp/main.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright © SixtyFPS GmbH -// SPDX-License-Identifier: MIT - -#include "printerdemo.h" -#include - -struct InkLevelModel : slint::Model -{ - size_t row_count() const override { return m_data.size(); } - std::optional row_data(size_t i) const override - { - if (i < row_count()) - return { m_data[i] }; - return {}; - } - - std::vector m_data = { { slint::Color::from_rgb_uint8(255, 255, 0), 0.9 }, - { slint::Color::from_rgb_uint8(0, 255, 255), 0.5 }, - { slint::Color::from_rgb_uint8(255, 0, 255), 0.8 }, - { slint::Color::from_rgb_uint8(0, 0, 0), 0.1 } }; -}; - -int main() -{ - auto printer_demo = MainWindow::create(); - printer_demo->set_ink_levels(std::make_shared()); - printer_demo->on_quit([] { std::exit(0); }); - - printer_demo->on_fax_number_erase([printer_demo = slint::ComponentWeakHandle(printer_demo)] { - std::string fax_number { (*printer_demo.lock())->get_fax_number() }; - fax_number.pop_back(); - (*printer_demo.lock())->set_fax_number(fax_number.data()); - }); - - printer_demo->on_fax_send([printer_demo = slint::ComponentWeakHandle(printer_demo)] { - std::cout << "Sending a fax to " << (*printer_demo.lock())->get_fax_number() << std::endl; - (*printer_demo.lock())->set_fax_number({}); - }); - - printer_demo->run(); -} diff --git a/examples/printerdemo_old/node/README b/examples/printerdemo_old/node/README deleted file mode 100644 index 64f0239f2..000000000 --- a/examples/printerdemo_old/node/README +++ /dev/null @@ -1,7 +0,0 @@ -Run with -# pushd ../../../api/node -# npm install -# npm run compile -# popd -# npm install -# npm start diff --git a/examples/printerdemo_old/node/main.js b/examples/printerdemo_old/node/main.js deleted file mode 100755 index 92b1a8727..000000000 --- a/examples/printerdemo_old/node/main.js +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env node -// Copyright © SixtyFPS GmbH -// SPDX-License-Identifier: MIT - -import * as slint from "slint-ui"; -const demo = slint.loadFile( - new URL("../ui/printerdemo.slint", import.meta.url), -); -const window = new demo.MainWindow(); - -window.ink_levels = [ - { color: "#00ffff", level: 0.3 }, - { color: "#ff00ff", level: 0.8 }, - { color: "#ffff00", level: 0.6 }, - { color: "#000000", level: 0.9 }, -]; - -window.fax_number_erase = function () { - window.fax_number = window.fax_number.substring( - 0, - window.fax_number.length - 1, - ); -}; -window.fax_send = function () { - console.log("Send fax to " + window.fax_number); - window.fax_number = ""; -}; - -window.run(); diff --git a/examples/printerdemo_old/node/package.json b/examples/printerdemo_old/node/package.json deleted file mode 100644 index 326f50a24..000000000 --- a/examples/printerdemo_old/node/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "printerdemo", - "version": "1.9.0", - "main": "main.js", - "type": "module", - "dependencies": { - "slint-ui": "../../../api/node" - }, - "scripts": { - "start": "node ." - } -} \ No newline at end of file diff --git a/examples/printerdemo_old/rust/Cargo.toml b/examples/printerdemo_old/rust/Cargo.toml deleted file mode 100644 index 3bb984bc9..000000000 --- a/examples/printerdemo_old/rust/Cargo.toml +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright © SixtyFPS GmbH -# SPDX-License-Identifier: MIT - -[package] -name = "printerdemo_old" -version = "1.9.0" -authors = ["Slint Developers "] -edition = "2021" -build = "build.rs" -publish = false -license = "MIT" - -[[bin]] -path = "main.rs" -name = "printerdemo_old" - -[dependencies] -slint = { path = "../../../api/rs/slint" } - -[build-dependencies] -slint-build = { path = "../../../api/rs/build" } - -# Remove the `#wasm#` to uncomment the wasm build. -# This is commented out by default because we don't want to build it as a library by default -# The CI has a script that does sed "s/#wasm# //" to generate the wasm build. - -#wasm# [lib] -#wasm# path = "main.rs" -#wasm# crate-type = ["cdylib"] - -#wasm# [target.'cfg(target_arch = "wasm32")'.dependencies] -#wasm# wasm-bindgen = { version = "0.2" } -#wasm# web-sys = { version = "0.3", features=["console"] } -#wasm# console_error_panic_hook = "0.1.5" diff --git a/examples/printerdemo_old/rust/build.rs b/examples/printerdemo_old/rust/build.rs deleted file mode 100644 index 1d341222f..000000000 --- a/examples/printerdemo_old/rust/build.rs +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright © SixtyFPS GmbH -// SPDX-License-Identifier: MIT - -fn main() { - slint_build::compile("../ui/printerdemo.slint").unwrap(); -} diff --git a/examples/printerdemo_old/rust/index.html b/examples/printerdemo_old/rust/index.html deleted file mode 100644 index 99e02745a..000000000 --- a/examples/printerdemo_old/rust/index.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - Slint Printer Demo (Old) - - - - - -

Old Printer Demo

-

This is the Slint Printer Demo compiled to - WebAssembly. It simulates the - touch user interface of - the advanced "Print Machine 2000", without actually printing anything.

-
-
Loading...
-
- - - - - - diff --git a/examples/printerdemo_old/rust/main.rs b/examples/printerdemo_old/rust/main.rs deleted file mode 100644 index 76a7daf08..000000000 --- a/examples/printerdemo_old/rust/main.rs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright © SixtyFPS GmbH -// SPDX-License-Identifier: MIT - -#[cfg(target_arch = "wasm32")] -use wasm_bindgen::prelude::*; - -slint::include_modules!(); - -#[cfg_attr(target_arch = "wasm32", wasm_bindgen(start))] -pub fn main() { - // This provides better error messages in debug mode. - // It's disabled in release mode so it doesn't bloat up the file size. - #[cfg(all(debug_assertions, target_arch = "wasm32"))] - console_error_panic_hook::set_once(); - - let main_window = MainWindow::new().unwrap(); - main_window.set_ink_levels(slint::VecModel::from_slice(&[ - InkLevel { color: slint::Color::from_rgb_u8(0, 255, 255), level: 0.40 }, - InkLevel { color: slint::Color::from_rgb_u8(255, 0, 255), level: 0.20 }, - InkLevel { color: slint::Color::from_rgb_u8(255, 255, 0), level: 0.50 }, - InkLevel { color: slint::Color::from_rgb_u8(0, 0, 0), level: 0.80 }, - ])); - - let main_weak = main_window.as_weak(); - main_window.on_fax_number_erase(move || { - let main_window = main_weak.unwrap(); - let mut fax_number = main_window.get_fax_number().to_string(); - fax_number.pop(); - main_window.set_fax_number(fax_number.into()); - }); - - let main_weak = main_window.as_weak(); - main_window.on_fax_send(move || { - let main_window = main_weak.upgrade().unwrap(); - let fax_number = main_window.get_fax_number().to_string(); - println!("Sending a fax to {}", fax_number); - main_window.set_fax_number(slint::SharedString::default()); - }); - - main_window.on_quit(move || { - #[cfg(not(target_arch = "wasm32"))] - std::process::exit(0); - }); - - main_window.run().unwrap(); -} diff --git a/examples/printerdemo_old/ui/common.slint b/examples/printerdemo_old/ui/common.slint deleted file mode 100644 index 7c7f3f10e..000000000 --- a/examples/printerdemo_old/ui/common.slint +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright © SixtyFPS GmbH -// SPDX-License-Identifier: MIT - -import { Palette } from "std-widgets.slint"; - -export component Label inherits Text { - font-size: 28px; - horizontal-stretch: 1; -} - -export component Page inherits Rectangle { - background: Palette.background; - animate y { duration: 300ms; easing: ease-out; } -} - -export component Preview inherits Image { - source: @image-url("images/cat.jpg"); -} diff --git a/examples/printerdemo_old/ui/copy_page.slint b/examples/printerdemo_old/ui/copy_page.slint deleted file mode 100644 index 52e88f29c..000000000 --- a/examples/printerdemo_old/ui/copy_page.slint +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright © SixtyFPS GmbH -// SPDX-License-Identifier: MIT - -import { SpinBox, Button, CheckBox, Slider, GroupBox, StandardListView, GridBox } from "std-widgets.slint"; -import { Label, Page, Preview } from "common.slint"; - - -export component CopyPage inherits Page { - layout := GridLayout { - padding-left: 40px; - padding-right: 40px; - spacing: 20px; - padding-top: 20px; - padding-bottom: 20px; - - Row { - preview := Preview { - height: root.height - layout.padding-top - layout.padding-bottom; - } - GridBox { - Row { - Label { - text: "Copies:"; - } - } - - Row { - SpinBox { - horizontal-stretch: 1; - } - } - Row { - Button { - text: "Print Page"; - horizontal-stretch: 1; - } - } - Row { - Rectangle {} - } - } - } - } -} diff --git a/examples/printerdemo_old/ui/fax_page.slint b/examples/printerdemo_old/ui/fax_page.slint deleted file mode 100644 index 3691e12a0..000000000 --- a/examples/printerdemo_old/ui/fax_page.slint +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright © SixtyFPS GmbH -// SPDX-License-Identifier: MIT - -import { SpinBox, Button, CheckBox, Slider, GroupBox, StandardListView } from "std-widgets.slint"; -import { Label, Page, Preview } from "common.slint"; - -export component FaxPage inherits Page { - in-out property fax-number <=> text.text; - - callback fax-number-erase; - callback fax-send; - - layout := GridLayout { - padding-left: 40px; - padding-right: 40px; - spacing: 20px; - padding-top: 20px; - padding-bottom: 20px; - - preview := Preview { - rowspan: 5; - } - - text := Text { - col: 1; - colspan: 2; - horizontal-alignment: center; - font-size: 40px; - horizontal-stretch: 1; - overflow: elide; - min-width: 0; - preferred-width: 0; - } - - Rectangle { - col: 1; - row: 2; - colspan: 2; - background: #333; - height: 50%; - border-radius: 4px; - - for row-model[r] in [ - [ 7, 8, 9 ], - [ 4, 5, 6 ], - [ 1, 2, 3 ], - [ 0, -1 ], - ] : Rectangle { - width: 100%; - height: 25% * (parent.height - 5*10px); - y: r * (self.height + 10px) + 10px; - - for num[c] in row-model : Rectangle { - height: parent.height; - width: (parent.width - 4*10px) / 3; - x: c * (self.width + 10px) + 10px; - border-radius: 4px; - background: key-area.pressed ? #566 : #555 ; - Text { - width: 100%; - height: 100%; - horizontal-alignment: center; - vertical-alignment: center; - color: white; - text: num >= 0 ? num : "⌫"; - } - key-area := TouchArea { - clicked => { - if (num >= 0) { - root.fax-number += num; - } else { - root.fax-number-erase(); - } - } - - width: 100%; - height: 100%; - } - } - } - } - - send := Button { - clicked => { root.fax-send(); } - - row: 4; - col: 2; - text: "Send"; - } - } -} diff --git a/examples/printerdemo_old/ui/images/Group.svg b/examples/printerdemo_old/ui/images/Group.svg deleted file mode 100644 index 5288b543f..000000000 --- a/examples/printerdemo_old/ui/images/Group.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/examples/printerdemo_old/ui/images/Menu Select.svg b/examples/printerdemo_old/ui/images/Menu Select.svg deleted file mode 100644 index 9b1b76f39..000000000 --- a/examples/printerdemo_old/ui/images/Menu Select.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/printerdemo_old/ui/images/cat.jpg b/examples/printerdemo_old/ui/images/cat.jpg deleted file mode 100644 index d7952ad182e824346e31ec5030da8ae325f52b70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61449 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 -SPDX-License-Identifier: CC-BY-2.0 -Comment: Taken from: https://www.flickr.com/photos/11250735@N07/8561945042 with Modifications: Cropped, resized the image diff --git a/examples/printerdemo_old/ui/images/laptop.svg b/examples/printerdemo_old/ui/images/laptop.svg deleted file mode 100644 index 4f798a2f5..000000000 --- a/examples/printerdemo_old/ui/images/laptop.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/examples/printerdemo_old/ui/images/list.svg b/examples/printerdemo_old/ui/images/list.svg deleted file mode 100644 index f3d566e77..000000000 --- a/examples/printerdemo_old/ui/images/list.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/examples/printerdemo_old/ui/images/power.svg b/examples/printerdemo_old/ui/images/power.svg deleted file mode 100644 index 97cffe4a9..000000000 --- a/examples/printerdemo_old/ui/images/power.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/printerdemo_old/ui/images/printer.svg b/examples/printerdemo_old/ui/images/printer.svg deleted file mode 100644 index ecc02761c..000000000 --- a/examples/printerdemo_old/ui/images/printer.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/examples/printerdemo_old/ui/images/replicate.svg b/examples/printerdemo_old/ui/images/replicate.svg deleted file mode 100644 index a9cdaeed8..000000000 --- a/examples/printerdemo_old/ui/images/replicate.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/examples/printerdemo_old/ui/images/xxx.svg b/examples/printerdemo_old/ui/images/xxx.svg deleted file mode 100644 index 11780962f..000000000 --- a/examples/printerdemo_old/ui/images/xxx.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/examples/printerdemo_old/ui/print_page.slint b/examples/printerdemo_old/ui/print_page.slint deleted file mode 100644 index 353d22dd2..000000000 --- a/examples/printerdemo_old/ui/print_page.slint +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright © SixtyFPS GmbH -// SPDX-License-Identifier: MIT - -import { SpinBox, Button, CheckBox, Slider, GroupBox, StandardListView, GridBox } from "std-widgets.slint"; -import { Label, Page, Preview } from "common.slint"; - -export component PrintPage inherits Page { - layout := GridLayout { - padding-left: 40px; - padding-right: 40px; - spacing: 20px; - padding-top: 20px; - padding-bottom: 20px; - - Row { - preview := Preview { } - GridBox { - Row { - Label { - text: "Select File:"; - } - } - - Row { - StandardListView { - model: [ - { text: ".." }, - { text: "cat.jpg" }, - { text: "dog.jpg" }, - { text: "elephant.jpg" }, - { text: "snake.jpg" }, - ]; - } - } - - Row { - Label { - text: "Copies:"; - } - } - - Row { - SpinBox { - horizontal-stretch: 1; - } - } - Row { - Button { - text: "Print Page"; - horizontal-stretch: 1; - } - } - } - } - } -} diff --git a/examples/printerdemo_old/ui/printerdemo.slint b/examples/printerdemo_old/ui/printerdemo.slint deleted file mode 100644 index 989268cf1..000000000 --- a/examples/printerdemo_old/ui/printerdemo.slint +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright © SixtyFPS GmbH -// SPDX-License-Identifier: MIT - -import { SpinBox, Button, CheckBox, Slider, GroupBox, StandardListView } from "std-widgets.slint"; -import { Label, Page, Preview } from "common.slint"; -import { CopyPage } from "copy_page.slint"; -import { FaxPage } from "fax_page.slint"; -import { PrintPage } from "print_page.slint"; -import { SettingsPage } from "settings_page.slint"; - -component TopPanel inherits Rectangle { - in-out property active-page: 0; - - callback quit(); - - background: white; - - HorizontalLayout { - alignment: center; - Text { - text: "PrintMachine"; - color: root.active-page == 0 ? black : #0000; - font-size: root.width * 5%; - horizontal-alignment: center; - vertical-alignment: center; - - animate color { duration: 200ms; } - } - Text { - text: "2000"; - color: root.active-page == 0 ? #918e8c : #0000; - font-size: root.width * 5%; - horizontal-alignment: center; - vertical-alignment: center; - - animate color { duration: 200ms; } - - } - } - power-button := Image { - x: parent.width - self.width - 20px; - y: (parent.height - self.height) / 2; - source: @image-url("images/power.svg"); - width: 5%; - height: self.width; - - TouchArea { - clicked => { - root.quit(); - } - } - } -} - -struct InkLevel { - color: color, - level: float, -} - -export component MainWindow inherits Window { - /// Note that this property is overwritten in the .cpp and .rs code. - /// The data is only in this file so it looks good in the viewer - in-out property <[InkLevel]> ink-levels: [ - {color: #0ff, level: 60%}, - {color: #ff0, level: 80%}, - {color: #f0f, level: 70%}, - {color: #000, level: 30%}, - ]; - /// Aliased to the fax number in the fax page - in-out property fax-number; - in-out property active-page: 0; - - callback quit(); - callback fax-number-erase; - callback fax-send; - - /// That's just a default implementation for the viewer, but the .cpp and .rs code - /// overwrite that to erase only the last character - fax-number-erase => { root.fax-number = ""; } - - width: 800px; - height: 600px; - title: "Slint printer demo"; - - panel := TopPanel { - quit => { root.quit(); } - - y: 0; - active-page: root.active-page; - width: 100%; - height: 12.5%; - } - - for page-info[idx] in [ - { color: #1ac80a, text: "Copy", img-small: @image-url("images/replicate.svg") }, - { color: #00c889, text: "Fax", img-small: @image-url("images/laptop.svg") }, - { color: #00bbc8, text: "Print", img-small: @image-url("images/printer.svg") }, - { color: #009dc8, text: "Settings", img-small: @image-url("images/list.svg") }, - ] : Rectangle { - property w: root.width / 5; - - width: self.w; - height: root.height / 3; - y: root.height / 4; - x: idx * (self.w + (root.width - self.w*4) / 5) + (root.width - self.w*4)/5; - border-radius: 25px; - background: page-info.color; - - animate x, y, height, width, background, border-radius { - duration: 300ms; - easing: ease-in-out; - } - - states [ - active when root.active-page == idx + 1: { - x: 0phx; - y: 0phx; - height: root.height * 12.5%; - width: root.width; - border-radius: 0px; - img.x: root.height * 12.5%; - img.width: root.height * 10%; - img.height: root.height * 10%; - text.y: 0phx; - } - pressed when root.active-page == 0 && touch.pressed : { - w: root.width / 5 + 6px; - height: root.height / 3 + 6px ; - y: root.height / 4 - 3px; - } - invisible when root.active-page > 0 && root.active-page != idx + 1 : { - color: transparent; - // FIXME: should probably hide the entire item under with z-ordering - img.y: 1000000000px; - text.color: #0000; - } - ] - - img := Image { - y: 5px; - x: (w - (root.width / 6.25)) / 2; - width: root.width / 6.25; - height: root.height / 4.68; - source: page-info.img-small; - - animate width, height, x, y { - duration: 300ms; - easing: ease-in-out; - } - } - - text := Text { - y: root.height / 10; - x: 5px; - width: 100%; - height: 100%; - horizontal-alignment: center; - vertical-alignment: center; - text: page-info.text; - font-size: 28px; - - animate x, y { - duration: 300ms; - easing: ease-in-out; - } - } - touch := TouchArea { - clicked => { - if (root.active-page == 0) { - root.active-page = idx + 1; - } - } - } - } - - if (root.active-page != 0) : Rectangle { - x:0;y:0; - width: self.height; - height: 12.5%; - - Text { - width: 100%; - height: 100%; - text: "←"; - color: white; - font-size: root.height / 10; - horizontal-alignment: center; - vertical-alignment: center; - } - - TouchArea { - clicked => { root.active-page = 0; } - } - } - - - Rectangle { - property full-screen; - - width: root.width / 5; - height: root.height / 5; - x: root.width - self.width - 20px; - y: root.height - self.height - 20px; - background: #eee; - - states [ - full-screen when self.full-screen : { - width: root.width - 35px; - height: 7/8 * root.height - 40px ; - } - ] - animate width, height { duration: 200ms; easing: ease; } - - HorizontalLayout { - spacing: 10px; - padding: 10px; - - for color-info[idx] in root.ink-levels : Rectangle { - background: white; - - Rectangle { - width: parent.width; - height: parent.height * color-info.level; - y: parent.height - self.height; - background: color-info.color; - - states [ - inactive when root.active-page != 0 : { - height: 0phx; - out { - animate height { duration: 750ms; easing: ease-in-out; } - } - } - ] - - } - } - } - - TouchArea { - clicked => { - if (root.active-page == 0) { - parent.full-screen = !parent.full-screen; - } - } - } - } - - CopyPage { - height: root.height - root.height / 8; - width: 100%; - y: root.height; - - states [ - active when root.active-page == 1: { - y: root.height / 8; - } - ] - } - - FaxPage { - fax-number-erase => { root.fax-number-erase(); } - fax-send => { root.fax-send(); } - - height: root.height - root.height / 8; - width: 100%; - y: root.height; - fax-number <=> root.fax-number; - - states [ - active when root.active-page == 2: { - y: root.height / 8; - } - ] - } - - PrintPage { - height: root.height - root.height / 8; - width: 100%; - y: root.height; - - states [ - active when root.active-page == 3: { - y: root.height / 8; - } - ] - } - - SettingsPage { - height: root.height - root.height / 8; - width: 100%; - y: root.height; - - states [ - active when root.active-page == 4: { - y: root.height / 8; - } - ] - } -} diff --git a/examples/printerdemo_old/ui/settings_page.slint b/examples/printerdemo_old/ui/settings_page.slint deleted file mode 100644 index 6d34054c3..000000000 --- a/examples/printerdemo_old/ui/settings_page.slint +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright © SixtyFPS GmbH -// SPDX-License-Identifier: MIT - -import { SpinBox, Button, CheckBox, Slider, GroupBox, StandardListView } from "std-widgets.slint"; -import { Label, Page, Preview } from "common.slint"; - -export component SettingsPage inherits Page { - VerticalLayout { - spacing: 10px; - padding: 15px; - alignment: start; - - GroupBox { - title: "Color Management"; - - CheckBox { - text: "Black and White"; - } - } - - GroupBox { - title: "Scanning"; - - HorizontalLayout { - spacing: 10px; - - Text { - text: "Resolution (DPI)"; - } - - Slider {} - } - } - - GroupBox { - title: "Power Management"; - - CheckBox { text: "Eco Mode"; } - } - GroupBox { - title: "Performance"; - - CheckBox { - text: "TURBO"; - checked: true; - } - } - } -} diff --git a/internal/core/graphics/image.rs b/internal/core/graphics/image.rs index 7110b36b1..55d62f509 100644 --- a/internal/core/graphics/image.rs +++ b/internal/core/graphics/image.rs @@ -851,7 +851,7 @@ impl Image { /// # use std::path::Path; /// # use i_slint_core::graphics::*; /// let path_buf = Path::new(env!("CARGO_MANIFEST_DIR")) - /// .join("../../examples/printerdemo/ui/images/cat.jpg"); + /// .join("../../demos/printerdemo/ui/images/cat.jpg"); /// let image = Image::load_from_path(&path_buf).unwrap(); /// assert_eq!(image.path(), Some(path_buf.as_path())); /// ``` diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ce53fa86..1c68a37b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,6 +45,12 @@ importers: specifier: 5.2.2 version: 5.2.2 + demos/printerdemo/node: + dependencies: + slint-ui: + specifier: ../../../api/node + version: link:../../../api/node + docs/editor: dependencies: '@babel/runtime': @@ -147,12 +153,6 @@ importers: specifier: 5.6.2 version: 5.6.2 - examples/printerdemo/node: - dependencies: - slint-ui: - specifier: ../../../api/node - version: link:../../../api/node - tools/slintpad: devDependencies: '@biomejs/biome': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 99ca7acef..16a0bd61e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -4,6 +4,6 @@ packages: - "api/node" - "editors/vscode" - "tools/slintpad" - - "examples/printerdemo/node" + - "demos/printerdemo/node" - "examples/imagefilter/node" - "docs/editor" diff --git a/tests/cases/elements/image.slint b/tests/cases/elements/image.slint index 3ed643d11..de4cf178f 100644 --- a/tests/cases/elements/image.slint +++ b/tests/cases/elements/image.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 -//include_path: ../../../examples/printerdemo/ui/images/ +//include_path: ../../../demos/printerdemo/ui/images/ TestCase := Rectangle { img := Image { diff --git a/tests/cases/elements/image_geometry.slint b/tests/cases/elements/image_geometry.slint index 5bb5f74f1..f23f101e5 100644 --- a/tests/cases/elements/image_geometry.slint +++ b/tests/cases/elements/image_geometry.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 -//include_path: ../../../examples/printerdemo/ui/images/ +//include_path: ../../../demos/printerdemo/ui/images/ FixedWidthtImage := Image { source: @image-url("cat.jpg"); diff --git a/tests/cases/examples/image_fit.slint b/tests/cases/examples/image_fit.slint index f31e3983c..de759f418 100644 --- a/tests/cases/examples/image_fit.slint +++ b/tests/cases/examples/image_fit.slint @@ -4,19 +4,19 @@ Win := Window { GridLayout { Image { - source: @image-url("../../../examples/printerdemo/ui/images/cat.jpg"); + source: @image-url("../../../demos/printerdemo/ui/images/cat.jpg"); } Image { - source: @image-url("../../../examples/printerdemo/ui/images/cat.jpg"); + source: @image-url("../../../demos/printerdemo/ui/images/cat.jpg"); image-fit: contain; } Image { row: 1; - source: @image-url("../../../examples/printerdemo/ui/images/cat.jpg"); + source: @image-url("../../../demos/printerdemo/ui/images/cat.jpg"); image-fit: cover; } Image { - source: @image-url("../../../examples/printerdemo/ui/images/cat.jpg"); + source: @image-url("../../../demos/printerdemo/ui/images/cat.jpg"); image-fit: fill; } } diff --git a/tests/cases/examples/image_rendering.slint b/tests/cases/examples/image_rendering.slint index dd7104a25..0d17230ec 100644 --- a/tests/cases/examples/image_rendering.slint +++ b/tests/cases/examples/image_rendering.slint @@ -8,11 +8,11 @@ export MainWindow := Window { HorizontalLayout { Image { - source: @image-url("../../../examples/printerdemo/ui/images/cat.jpg"); + source: @image-url("../../../demos/printerdemo/ui/images/cat.jpg"); image-rendering: smooth; } Image { - source: @image-url("../../../examples/printerdemo/ui/images/cat.jpg"); + source: @image-url("../../../demos/printerdemo/ui/images/cat.jpg"); image-rendering: pixelated; } } diff --git a/tests/cases/issues/issue_2608_canon_img_path.slint b/tests/cases/issues/issue_2608_canon_img_path.slint index 65c2d2612..933b022f5 100644 --- a/tests/cases/issues/issue_2608_canon_img_path.slint +++ b/tests/cases/issues/issue_2608_canon_img_path.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 -//include_path: ../../../examples/printerdemo/ui/images/ +//include_path: ../../../demos/printerdemo/ui/images/ TestCase := Rectangle { property img1: @image-url("cat.jpg"); diff --git a/tests/cases/layout/height_for_width.slint b/tests/cases/layout/height_for_width.slint index f39f8cc01..a8e98ef95 100644 --- a/tests/cases/layout/height_for_width.slint +++ b/tests/cases/layout/height_for_width.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 -//include_path: ../../../examples/printerdemo/ui/images/ +//include_path: ../../../demos/printerdemo/ui/images/ TestCase := Rectangle { width: 500phx; height: 2000phx; diff --git a/tests/cases/text/custom_font.slint b/tests/cases/text/custom_font.slint index cb49a88ae..201d0bb9f 100644 --- a/tests/cases/text/custom_font.slint +++ b/tests/cases/text/custom_font.slint @@ -4,8 +4,8 @@ // This test imports a custom font and declares it for use, to ensure at least that the generated init code for // the custom font setup compiles. -import "../../../examples/printerdemo/ui/fonts/NotoSans-Regular.ttf"; -import "../../../examples/printerdemo/ui/fonts/NotoSans-Bold.ttf"; +import "../../../demos/printerdemo/ui/fonts/NotoSans-Regular.ttf"; +import "../../../demos/printerdemo/ui/fonts/NotoSans-Bold.ttf"; TestCase := Window { diff --git a/tests/cases/types/resource.slint b/tests/cases/types/resource.slint index cfe0c7bf0..2af1e70c6 100644 --- a/tests/cases/types/resource.slint +++ b/tests/cases/types/resource.slint @@ -1,7 +1,7 @@ // Copyright © SixtyFPS GmbH // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 -//include_path: ../../../examples/printerdemo/ui/images/ +//include_path: ../../../demos/printerdemo/ui/images/ TestCase := Rectangle { property empty_image: @image-url(""); property cat: @image-url("cat.jpg"); diff --git a/tests/driver/interpreter/main.rs b/tests/driver/interpreter/main.rs index 68b2de01c..7dcc2daa8 100644 --- a/tests/driver/interpreter/main.rs +++ b/tests/driver/interpreter/main.rs @@ -10,7 +10,7 @@ macro_rules! test_example { ($id:ident, $path:literal) => { #[test] fn $id() { - let relative_path = std::path::PathBuf::from(concat!("../../../examples/", $path)); + let relative_path = std::path::PathBuf::from(concat!("../../../", $path)); let mut absolute_path = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join(&relative_path); if !absolute_path.exists() { @@ -30,16 +30,15 @@ macro_rules! test_example { }; } -test_example!(example_printerdemo, "printerdemo/ui/printerdemo.slint"); -test_example!(example_printerdemo_old, "printerdemo_old/ui/printerdemo.slint"); -test_example!(example_memory, "memory/memory.slint"); -test_example!(example_slide_puzzle, "slide_puzzle/slide_puzzle.slint"); -test_example!(example_todo, "todo/ui/todo.slint"); -test_example!(example_gallery, "gallery/gallery.slint"); -test_example!(example_fancy_demo, "fancy_demo/main.slint"); -test_example!(example_bash_sysinfo, "bash/sysinfo.slint"); -test_example!(example_carousel, "carousel/ui/carousel_demo.slint"); -test_example!(example_iot_dashboard, "iot-dashboard/main.slint"); +test_example!(example_printerdemo, "demos/printerdemo/ui/printerdemo.slint"); +test_example!(example_memory, "examples/memory/memory.slint"); +test_example!(example_slide_puzzle, "examples/slide_puzzle/slide_puzzle.slint"); +test_example!(example_todo, "examples/todo/ui/todo.slint"); +test_example!(example_gallery, "examples/gallery/gallery.slint"); +test_example!(example_fancy_demo, "examples/fancy_demo/main.slint"); +test_example!(example_bash_sysinfo, "examples/bash/sysinfo.slint"); +test_example!(example_carousel, "examples/carousel/ui/carousel_demo.slint"); +test_example!(example_iot_dashboard, "examples/iot-dashboard/main.slint"); fn main() { println!("Nothing to see here, please run me through cargo test :)"); diff --git a/tests/manual/font-metrics.slint b/tests/manual/font-metrics.slint index a7bf2fefe..09c41cde9 100644 --- a/tests/manual/font-metrics.slint +++ b/tests/manual/font-metrics.slint @@ -29,7 +29,7 @@ component MetricsLabel { } } -import "../../../examples/printerdemo/ui/fonts/NotoSans-Regular.ttf"; +import "../../../demos/printerdemo/ui/fonts/NotoSans-Regular.ttf"; export component AppWindow inherits Window { width: l.x + l.width; diff --git a/tests/screenshots/build.rs b/tests/screenshots/build.rs index d683c0472..554854a26 100644 --- a/tests/screenshots/build.rs +++ b/tests/screenshots/build.rs @@ -42,7 +42,7 @@ pub fn collect_test_cases() -> std::io::Result> { fn main() -> std::io::Result<()> { let default_font_path: std::path::PathBuf = - [env!("CARGO_MANIFEST_DIR"), "..", "..", "examples", "printerdemo", "ui", "fonts"] + [env!("CARGO_MANIFEST_DIR"), "..", "..", "demos", "printerdemo", "ui", "fonts"] .iter() .collect(); diff --git a/tests/screenshots/cases/software/basic/images.slint b/tests/screenshots/cases/software/basic/images.slint index a6eba7a91..1b03a2edf 100644 --- a/tests/screenshots/cases/software/basic/images.slint +++ b/tests/screenshots/cases/software/basic/images.slint @@ -23,7 +23,7 @@ export component TestCase inherits Window { } Image { x: 49px; y: 0; - source: @image-url("../../../../../examples/printerdemo/ui/images/ink.svg"); + source: @image-url("../../../../../demos/printerdemo/ui/images/ink.svg"); width: 25px; height: 40px; colorize: #91b6; diff --git a/tools/slintpad/README.md b/tools/slintpad/README.md index 20825dd64..44745104c 100644 --- a/tools/slintpad/README.md +++ b/tools/slintpad/README.md @@ -38,8 +38,8 @@ The `preview.html` page contains only the preview and the code must be given via Example: this loads the printerdemo.slint file from the github URL - - https://slint.dev/editor?load_url=https://raw.githubusercontent.com/slint-ui/slint/master/examples/printerdemo/ui/printerdemo.slint - - https://slint.dev/editor/preview.html?load_url=https://raw.githubusercontent.com/slint-ui/slint/master/examples/printerdemo/ui/printerdemo.slint + - https://slint.dev/editor?load_url=https://raw.githubusercontent.com/slint-ui/slint/master/demos/printerdemo/ui/printerdemo.slint + - https://slint.dev/editor/preview.html?load_url=https://raw.githubusercontent.com/slint-ui/slint/master/demos/printerdemo/ui/printerdemo.slint - `?snippet=` query argument, followed by the URL-encoded slint code, will simply load this code this is what is used tor the permalink feature diff --git a/tools/slintpad/src/editor_widget.ts b/tools/slintpad/src/editor_widget.ts index df68809c9..841914d54 100644 --- a/tools/slintpad/src/editor_widget.ts +++ b/tools/slintpad/src/editor_widget.ts @@ -532,11 +532,8 @@ export class EditorWidget extends Widget { return [ ["", "Hello World!"], ["examples/gallery/gallery.slint", "Gallery"], - ["examples/printerdemo/ui/printerdemo.slint", "Printer Demo"], - [ - "examples/energy-monitor/ui/desktop_window.slint", - "Energy Monitor", - ], + ["demos/printerdemo/ui/printerdemo.slint", "Printer Demo"], + ["demos/energy-monitor/ui/desktop_window.slint", "Energy Monitor"], ["examples/todo/ui/todo.slint", "Todo Demo"], ["examples/iot-dashboard/main.slint", "IOT Dashboard"], ]; diff --git a/xtask/src/license_headers_check.rs b/xtask/src/license_headers_check.rs index 41813b262..ff7c1eba7 100644 --- a/xtask/src/license_headers_check.rs +++ b/xtask/src/license_headers_check.rs @@ -411,7 +411,7 @@ lazy_static! { ("^editors/tree-sitter-slint/binding\\.gyp$", LicenseLocation::NoLicense), // liberal license ("^editors/tree-sitter-slint/test-to-corpus\\.py$", LicenseLocation::Tag(LicenseTagStyle::shell_comment_style())), ("^Cargo\\.lock$", LicenseLocation::NoLicense), - ("^examples/printerdemo/zephyr/VERSION$", LicenseLocation::NoLicense), + ("^demos/printerdemo/zephyr/VERSION$", LicenseLocation::NoLicense), // filename based matches: ("(^|/)CMakeLists\\.txt$", LicenseLocation::Tag(LicenseTagStyle::shell_comment_style())), @@ -505,6 +505,7 @@ lazy_static! { ("^helper_crates/vtable/", MIT_OR_APACHE2_LICENSE), ("^api/cpp/esp-idf/LICENSE$", TRIPLE_LICENSE), ("^examples/", MIT_LICENSE), + ("^demos/", MIT_LICENSE), ("^docs/", MIT_LICENSE), ("^api/cpp/docs/", MIT_LICENSE), ("(^|/)(README|CONTRIBUTING|CHANGELOG|LICENSE)\\.md", TRIPLE_LICENSE),