| 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 | |
| 4 | Test := 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 |
| 73 | auto handle = Test::create(); |
| 74 | const Test &t = *handle; |
| 75 | assert_eq(t.get_r1(), t.get_r2()); |
| 76 | assert_eq(t.get_r1(), t.get_r3()); |
| 77 | assert_eq(t.get_r1(), t.get_r4()); |
| 78 | assert_eq(t.get_r1(), t.get_r5()); |
| 79 | assert_eq(t.get_b1(), t.get_b2()); |
| 80 | assert_eq(t.get_b1(), t.get_b3()); |
| 81 | assert_eq(t.get_b1(), t.get_b4()); |
| 82 | assert_eq(t.get_b1(), t.get_b5()); |
| 83 | assert(t.get_b1() != t.get_r5()); |
| 84 | assert_eq(t.get_y1(), t.get_y2()); |
| 85 | |
| 86 | auto red = slint::Color::from_argb_float(1, 1, 0, 0); |
| 87 | auto blue = slint::Color::from_rgb_float(0, 0, 1); |
| 88 | auto g = slint::Color::from_rgb_uint8(0x99, 0x99, 0x99); |
| 89 | assert_eq(t.get_r1(), red); |
| 90 | assert_eq(t.get_b1(), blue); |
| 91 | assert_eq(t.get_g1(), g); |
| 92 | assert_eq(t.get_y1(), slint::Color::from_argb_encoded(0xffffff00)); |
| 93 | |
| 94 | t.set_g1(blue); |
| 95 | assert_eq(t.get_g1(), t.get_b1()); |
| 96 | |
| 97 | assert_eq(t.get_c1().alpha(), 0x88); |
| 98 | assert_eq(t.get_c1().red(), 0xff); |
| 99 | assert_eq(t.get_c1().green(), 0x33); |
| 100 | assert_eq(t.get_c1().blue(), 0x55); |
| 101 | |
| 102 | assert_eq(t.get_c2().alpha(), 0xff); |
| 103 | assert_eq(t.get_c2().red(), 100); |
| 104 | assert_eq(t.get_c2().green(), 23); |
| 105 | assert_eq(t.get_c2().blue(), 42); |
| 106 | |
| 107 | assert_eq(t.get_c3().alpha(), uint8_t(255.*0.81)); |
| 108 | assert_eq(t.get_c3().red(), uint8_t(255.*0.39)); |
| 109 | assert_eq(t.get_c3().green(), uint8_t(255.*0.50)); |
| 110 | assert_eq(t.get_c3().blue(), uint8_t(255.*0.16)); |
| 111 | |
| 112 | assert_eq(t.get_i1().alpha(), 0xff); |
| 113 | assert_eq(t.get_i1().red(), 0); |
| 114 | assert_eq(t.get_i1().green(), 255); |
| 115 | assert_eq(t.get_i1().blue(), 0); |
| 116 | |
| 117 | assert(t.get_test_rgb()); |
| 118 | assert(t.get_test()); |
| 119 | ``` |
| 120 | |
| 121 | |
| 122 | ```rust |
| 123 | let t = Test::new().unwrap(); |
| 124 | assert_eq!(t.get_r1(), t.get_r2()); |
| 125 | assert_eq!(t.get_r1(), t.get_r3()); |
| 126 | assert_eq!(t.get_r1(), t.get_r4()); |
| 127 | assert_eq!(t.get_r1(), t.get_r5()); |
| 128 | assert_eq!(t.get_b1(), t.get_b2()); |
| 129 | assert_eq!(t.get_b1(), t.get_b3()); |
| 130 | assert_eq!(t.get_b1(), t.get_b4()); |
| 131 | assert_eq!(t.get_b1(), t.get_b5()); |
| 132 | assert_ne!(t.get_b1(), t.get_r5()); |
| 133 | assert_eq!(t.get_y1(), t.get_y2()); |
| 134 | |
| 135 | let red = slint::Color::from_argb_f32(1., 1., 0., 0.); |
| 136 | let blue = slint::Color::from_rgb_f32(0., 0., 1.); |
| 137 | let g = slint::Color::from_rgb_u8(0x99, 0x99, 0x99); |
| 138 | assert_eq!(t.get_r1(), red); |
| 139 | assert_eq!(t.get_b1(), blue); |
| 140 | assert_eq!(t.get_g1(), g); |
| 141 | assert_eq!(t.get_y1(), slint::Color::from_argb_encoded(0xffffff00)); |
| 142 | |
| 143 | t.set_g1(blue); |
| 144 | assert_eq!(t.get_g1(), t.get_b1()); |
| 145 | |
| 146 | assert_eq!(t.get_c1().alpha(), 0x88); |
| 147 | assert_eq!(t.get_c1().red(), 0xff); |
| 148 | assert_eq!(t.get_c1().green(), 0x33); |
| 149 | assert_eq!(t.get_c1().blue(), 0x55); |
| 150 | |
| 151 | assert_eq!(t.get_c2().alpha(), 0xff); |
| 152 | assert_eq!(t.get_c2().red(), 100); |
| 153 | assert_eq!(t.get_c2().green(), 23); |
| 154 | assert_eq!(t.get_c2().blue(), 42); |
| 155 | |
| 156 | assert_eq!(t.get_c3().alpha(), (255.*0.81) as u8); |
| 157 | assert_eq!(t.get_c3().red(), (255.*0.39) as u8); |
| 158 | assert_eq!(t.get_c3().green(), (255.*0.50) as u8); |
| 159 | assert_eq!(t.get_c3().blue(), (255.*0.16) as u8); |
| 160 | |
| 161 | assert_eq!(t.get_i1().alpha(), 0xff); |
| 162 | assert_eq!(t.get_i1().red(), 0); |
| 163 | assert_eq!(t.get_i1().green(), 255); |
| 164 | assert_eq!(t.get_i1().blue(), 0); |
| 165 | |
| 166 | assert!(t.get_test_rgb()); |
| 167 | assert!(t.get_test()); |
| 168 | |
| 169 | ``` |
| 170 | |
| 171 | ```js |
| 172 | var t = new slint.Test({}); |
| 173 | assert(t.r1.toString() == t.r2.toString()); |
| 174 | assert(t.r1.toString() == t.r3.toString()); |
| 175 | assert(t.r1.toString() == t.r4.toString()); |
| 176 | assert(t.r1.toString() == t.r5.toString()); |
| 177 | assert(t.b1.toString() == t.b2.toString()); |
| 178 | assert(t.b1.toString() == t.b3.toString()); |
| 179 | assert(t.b1.toString() == t.b4.toString()); |
| 180 | assert(t.b1.toString() == t.b5.toString()); |
| 181 | assert(t.b1.toString() != t.r5.toString()); |
| 182 | |
| 183 | let red = "#ff0000ff"; |
| 184 | let blue = "#0000ffff"; |
| 185 | let g = "#999999ff"; |
| 186 | assert.equal(t.r1.toString(), red); |
| 187 | assert.equal(t.b1.toString(), blue); |
| 188 | assert.equal(t.g1.toString(), g); |
| 189 | assert.equal(t.y1.toString(), "#ffff00ff"); |
| 190 | |
| 191 | t.g1 = "blue"; |
| 192 | assert.equal(t.g1.toString(), t.b1.toString()); |
| 193 | t.g1 = "#f00"; |
| 194 | assert.equal(t.g1.toString(), t.r1.toString()); |
| 195 | |
| 196 | assert.equal(t.c1.toString(), "#ff335588"); |
| 197 | assert.equal(t.c2.toString(), "#64172aff"); |
| 198 | assert.equal(t.c3.toString(), "#637f28ce"); |
| 199 | assert.equal(t.i1.toString(), "#00ff00ff"); |
| 200 | |
| 201 | assert(t.test_rgb); |
| 202 | assert(t.test); |
| 203 | |
| 204 | ``` |
| 205 | */ |
| 206 | |