mirror of
https://github.com/slint-ui/slint.git
synced 2025-08-28 06:14:10 +00:00
133 lines
3.6 KiB
Text
133 lines
3.6 KiB
Text
// Copyright © SixtyFPS GmbH <info@slint.dev>
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
import { ComboBox } from "std-widgets.slint";
|
|
import { Orbiter } from "orbiter.slint";
|
|
|
|
export component AppWindow inherits Window {
|
|
property <duration> orbitDuration: 5s;
|
|
|
|
// Animation drivers
|
|
property <angle> orbit-animation: (360deg * animation-tick() / orbitDuration).mod(360deg);
|
|
property <angle> attack-animation: (360deg * animation-tick() / 20s).mod(360deg);
|
|
|
|
// Demo data
|
|
property <[angle]> offSets: [0deg, 45deg, 90deg, 135deg, 180deg, 225deg, 270deg, 315deg];
|
|
property <[[angle]]> attacks: [[0deg, 0deg], [45deg, 45deg], [90deg, 90deg], [0deg, 180deg], [45deg, 225deg], [90deg, 270deg]];
|
|
property <image> slint-logo: @image-url("../../logo/slint-logo-small-dark.svg");
|
|
|
|
background: cb.current-value != "Demo 4" ? lightgrey : black;
|
|
animate background {
|
|
duration: 1000ms;
|
|
easing: ease-in-out-sine;
|
|
}
|
|
|
|
preferred-width: 600px;
|
|
preferred-height: 600px;
|
|
|
|
combo-backer := Rectangle {
|
|
x: cb.x;
|
|
y: cb.y;
|
|
width: cb.width;
|
|
height: cb.height;
|
|
background: black;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
cb := ComboBox {
|
|
x: 10px;
|
|
y: 10px;
|
|
model: ["Demo 1", "Demo 2", "Demo 3", "Demo 4"];
|
|
current-value: "Demo 1";
|
|
}
|
|
|
|
|
|
if cb.current-value == "Demo 1": Rectangle {
|
|
Orbiter {
|
|
state: back;
|
|
orbit-rotation: orbit-animation;
|
|
orbit-attack: 45deg;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if cb.current-value == "Demo 2": Rectangle {
|
|
for offSet in offSets: Orbiter {
|
|
state: back;
|
|
orbit-rotation: orbit-animation;
|
|
offset: offSet;
|
|
orbit-attack: attack-animation;
|
|
}
|
|
}
|
|
|
|
if cb.current-value == "Demo 3": Rectangle {
|
|
for attack[index] in attacks: Orbiter {
|
|
state: back;
|
|
orbit-rotation: orbit-animation;
|
|
orbit-attack: attack[0];
|
|
offset: attack[1];
|
|
}
|
|
}
|
|
|
|
if cb.current-value == "Demo 4": Rectangle {
|
|
for offSet in offSets: Orbiter {
|
|
state: back;
|
|
orbit-rotation: orbit-animation;
|
|
offset: offSet;
|
|
orbit-attack: attack-animation;
|
|
source: slint-logo;
|
|
colorize: white.mix(black, self.scale);
|
|
}
|
|
}
|
|
|
|
|
|
if cb.current-value != "Demo 4":Image {
|
|
source: @image-url("images/sphere.png");
|
|
width: 200px;
|
|
}
|
|
|
|
if cb.current-value == "Demo 4": Image {
|
|
source: slint-logo;
|
|
width: 200px;
|
|
colorize: #1161FF;
|
|
}
|
|
|
|
if cb.current-value == "Demo 1": Rectangle {
|
|
Orbiter {
|
|
state: front;
|
|
orbit-rotation: orbit-animation;
|
|
orbit-attack: 45deg;
|
|
}
|
|
}
|
|
|
|
if cb.current-value == "Demo 2": Rectangle {
|
|
for offSet in offSets: Orbiter {
|
|
state: front;
|
|
orbit-rotation: orbit-animation;
|
|
offset: offSet;
|
|
orbit-attack: attack-animation;
|
|
}
|
|
}
|
|
|
|
if cb.current-value == "Demo 3": Rectangle {
|
|
for attack in attacks: Orbiter {
|
|
state: front;
|
|
orbit-rotation: orbit-animation;
|
|
orbit-attack: attack[0];
|
|
offset: attack[1];
|
|
}
|
|
}
|
|
|
|
if cb.current-value == "Demo 4": Rectangle {
|
|
for offSet in offSets: Orbiter {
|
|
state: front;
|
|
orbit-rotation: orbit-animation;
|
|
offset: offSet;
|
|
orbit-attack: attack-animation;
|
|
source: slint-logo;
|
|
colorize: white.mix(black, self.scale);
|
|
}
|
|
}
|
|
|
|
}
|