1// Copyright © SixtyFPS GmbH <info@slint.dev>
2// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0
3
4Test := Rectangle {
5 property<color> b1: blue;
6 property<color> b2: #00f;
7 property<color> b3: #0000ff;
8 property<color> b4: #00ff;
9 property<color> b5: #0000ffff;
10 property<color> r1: red;
11 property<color> r2: #f00;
12 property<color> r3: #ff0000;
13 property<color> r4: #f00f;
14 property<color> r5: #ff0000ff;
15
16 property<color> y1: yellow;
17 property<color> y2: #ff0;
18
19 property<color> g1: #999;
20
21 property<color> c1: #ff335588;
22 property<color> c2: rgb(100, 23, 42);
23 property<color> c3: rgba(39%, 50%, 16%, 81%);
24
25 property<color> i1: rgb(0, 666, -85);
26
27 // allow to use `mix` on colors
28 property<color> p1: true ? b1.mix(r1, 30%) : y1.mix(c1, 70%);
29 // allow to use `with_alpha` on colors
30 property<brush> invisible: b1.with-alpha(0%);
31
32 property<float> b1hue: 240.0;
33 property<float> b1sat: 1.0;
34 property<float> b1bri: 1.0;
35
36 property<float> r1hue: 0.0;
37 property<float> r1sat: 1.0;
38 property<float> r1bri: 1.0;
39
40 property<float> y1hue: 60.0;
41 property<float> y1sat: 1.0;
42 property<float> y1bri: 1.0;
43
44 property <color> gr1: green;
45 property<float> gr1hue: 120.0;
46 property<float> gr1sat: 1.0;
47 property<float> gr1bri: 0.501960813999176;
48 property <color> new_green: hsv(120.0, 1.0, 0.501960813999176);
49
50 // burlywood
51 property<color> bwood: Colors.burlywood;
52 property<float> bwood_hue: 33.79310607910156;
53 property<float> bwood_sat: 0.39189186692237854;
54 property<float> bwood_bri: 0.8705882430076599;
55
56 out property <bool> test_rgb: Colors.blue.blue == 255 && Colors.blue.red == 0 && Colors.blue.green == 0 && Colors.blue.alpha == 255
57 && Colors.rgb(45, 12, 78).red == 45 && Colors.rgb(45, 12, 78).green == 12 && Colors.rgba(45, 12, 78, 12/255).alpha == 12 && Colors.rgba(145, 112, 178, 85%).alpha == floor(85% * 255)
58 && #abc.green == (11 * 16 + 11) && #abcd.alpha == (13 * 16 + 13) && #abcdef.red == (10 * 16 + 11);
59
60 out property <bool> test_hsv: gr1.to-hsv().hue == new_green.to-hsv().hue && gr1.to-hsv().saturation == new_green.to-hsv().saturation && gr1.to-hsv().value == new_green.to-hsv().value
61 && bwood == Colors.hsv(bwood_hue, bwood_sat, bwood_bri);
62 out property <bool> test_hsv_wrap: Colors.blue == hsv(240, 1, 1) && Colors.blue == hsv(600, 1, 1) && Colors.blue == hsv(-120, 1, 1);
63 out property <bool> test_hsv_hue: b1.to-hsv().hue == b1hue && r1.to-hsv().hue == r1hue && y1.to-hsv().hue == y1hue && gr1.to-hsv().hue == gr1hue && bwood.to-hsv().hue == bwood_hue;
64 out property <bool> test_hsv_sat: b1.to-hsv().saturation == b1sat && r1.to-hsv().saturation == r1sat && y1.to-hsv().saturation == y1sat && gr1.to-hsv().saturation == gr1sat && bwood.to-hsv().saturation == bwood_sat;
65 out property <bool> test_hsv_bri: b1.to-hsv().value == b1bri && r1.to-hsv().value == r1bri && y1.to-hsv().value == y1bri && gr1.to-hsv().value == gr1bri && bwood.to-hsv().value == bwood_bri;
66
67 property<bool> test: b1 == b2 && b2 == b5 && b3 == Colors.blue && Colors.red == r4 && y1 == Colors.rgba(255, 100%, 0, 100%)
68 && test_rgb && test_hsv && test_hsv_hue && test_hsv_sat && test_hsv_bri && test_hsv_wrap;
69}
70
71/*
72```cpp
73auto handle = Test::create();
74const Test &t = *handle;
75assert_eq(t.get_r1(), t.get_r2());
76assert_eq(t.get_r1(), t.get_r3());
77assert_eq(t.get_r1(), t.get_r4());
78assert_eq(t.get_r1(), t.get_r5());
79assert_eq(t.get_b1(), t.get_b2());
80assert_eq(t.get_b1(), t.get_b3());
81assert_eq(t.get_b1(), t.get_b4());
82assert_eq(t.get_b1(), t.get_b5());
83assert(t.get_b1() != t.get_r5());
84assert_eq(t.get_y1(), t.get_y2());
85
86auto red = slint::Color::from_argb_float(1, 1, 0, 0);
87auto blue = slint::Color::from_rgb_float(0, 0, 1);
88auto g = slint::Color::from_rgb_uint8(0x99, 0x99, 0x99);
89assert_eq(t.get_r1(), red);
90assert_eq(t.get_b1(), blue);
91assert_eq(t.get_g1(), g);
92assert_eq(t.get_y1(), slint::Color::from_argb_encoded(0xffffff00));
93
94t.set_g1(blue);
95assert_eq(t.get_g1(), t.get_b1());
96
97assert_eq(t.get_c1().alpha(), 0x88);
98assert_eq(t.get_c1().red(), 0xff);
99assert_eq(t.get_c1().green(), 0x33);
100assert_eq(t.get_c1().blue(), 0x55);
101
102assert_eq(t.get_c2().alpha(), 0xff);
103assert_eq(t.get_c2().red(), 100);
104assert_eq(t.get_c2().green(), 23);
105assert_eq(t.get_c2().blue(), 42);
106
107assert_eq(t.get_c3().alpha(), uint8_t(255.*0.81));
108assert_eq(t.get_c3().red(), uint8_t(255.*0.39));
109assert_eq(t.get_c3().green(), uint8_t(255.*0.50));
110assert_eq(t.get_c3().blue(), uint8_t(255.*0.16));
111
112assert_eq(t.get_i1().alpha(), 0xff);
113assert_eq(t.get_i1().red(), 0);
114assert_eq(t.get_i1().green(), 255);
115assert_eq(t.get_i1().blue(), 0);
116
117assert(t.get_test_rgb());
118assert(t.get_test());
119```
120
121
122```rust
123let t = Test::new().unwrap();
124assert_eq!(t.get_r1(), t.get_r2());
125assert_eq!(t.get_r1(), t.get_r3());
126assert_eq!(t.get_r1(), t.get_r4());
127assert_eq!(t.get_r1(), t.get_r5());
128assert_eq!(t.get_b1(), t.get_b2());
129assert_eq!(t.get_b1(), t.get_b3());
130assert_eq!(t.get_b1(), t.get_b4());
131assert_eq!(t.get_b1(), t.get_b5());
132assert_ne!(t.get_b1(), t.get_r5());
133assert_eq!(t.get_y1(), t.get_y2());
134
135let red = slint::Color::from_argb_f32(1., 1., 0., 0.);
136let blue = slint::Color::from_rgb_f32(0., 0., 1.);
137let g = slint::Color::from_rgb_u8(0x99, 0x99, 0x99);
138assert_eq!(t.get_r1(), red);
139assert_eq!(t.get_b1(), blue);
140assert_eq!(t.get_g1(), g);
141assert_eq!(t.get_y1(), slint::Color::from_argb_encoded(0xffffff00));
142
143t.set_g1(blue);
144assert_eq!(t.get_g1(), t.get_b1());
145
146assert_eq!(t.get_c1().alpha(), 0x88);
147assert_eq!(t.get_c1().red(), 0xff);
148assert_eq!(t.get_c1().green(), 0x33);
149assert_eq!(t.get_c1().blue(), 0x55);
150
151assert_eq!(t.get_c2().alpha(), 0xff);
152assert_eq!(t.get_c2().red(), 100);
153assert_eq!(t.get_c2().green(), 23);
154assert_eq!(t.get_c2().blue(), 42);
155
156assert_eq!(t.get_c3().alpha(), (255.*0.81) as u8);
157assert_eq!(t.get_c3().red(), (255.*0.39) as u8);
158assert_eq!(t.get_c3().green(), (255.*0.50) as u8);
159assert_eq!(t.get_c3().blue(), (255.*0.16) as u8);
160
161assert_eq!(t.get_i1().alpha(), 0xff);
162assert_eq!(t.get_i1().red(), 0);
163assert_eq!(t.get_i1().green(), 255);
164assert_eq!(t.get_i1().blue(), 0);
165
166assert!(t.get_test_rgb());
167assert!(t.get_test());
168
169```
170
171```js
172var t = new slint.Test({});
173assert(t.r1.toString() == t.r2.toString());
174assert(t.r1.toString() == t.r3.toString());
175assert(t.r1.toString() == t.r4.toString());
176assert(t.r1.toString() == t.r5.toString());
177assert(t.b1.toString() == t.b2.toString());
178assert(t.b1.toString() == t.b3.toString());
179assert(t.b1.toString() == t.b4.toString());
180assert(t.b1.toString() == t.b5.toString());
181assert(t.b1.toString() != t.r5.toString());
182
183let red = "#ff0000ff";
184let blue = "#0000ffff";
185let g = "#999999ff";
186assert.equal(t.r1.toString(), red);
187assert.equal(t.b1.toString(), blue);
188assert.equal(t.g1.toString(), g);
189assert.equal(t.y1.toString(), "#ffff00ff");
190
191t.g1 = "blue";
192assert.equal(t.g1.toString(), t.b1.toString());
193t.g1 = "#f00";
194assert.equal(t.g1.toString(), t.r1.toString());
195
196assert.equal(t.c1.toString(), "#ff335588");
197assert.equal(t.c2.toString(), "#64172aff");
198assert.equal(t.c3.toString(), "#637f28ce");
199assert.equal(t.i1.toString(), "#00ff00ff");
200
201assert(t.test_rgb);
202assert(t.test);
203
204```
205*/
206