1use crate::{
2 makepad_derive_widget::*,
3 makepad_draw::*,
4 widget::*
5};
6
7live_design! {
8 link widgets
9 pub IconBase = {{Icon}} {}
10
11 pub Icon = <IconBase> {
12 width: Fit,
13 height: Fit,
14
15 icon_walk: {
16 width: 17.5,
17 height: Fit,
18 }
19
20 draw_bg: {
21 uniform color: #0000,
22 fn pixel(self) -> vec4 {
23 return self.color;
24 }
25 }
26
27 draw_icon: {
28 uniform color: #f00
29 fn get_color(self) -> vec4 {
30 return self.color
31 }
32 }
33 }
34
35 pub IconGradientX = <Icon> {
36 draw_icon: {
37 uniform color_1: (#f00)
38 uniform color_2: (#00f)
39 fn get_color(self) -> vec4 {
40 return mix(self.color_1, self.color_2, self.pos.x);
41 }
42 }
43 }
44
45 pub IconGradientY = <IconGradientX> {
46 draw_icon: {
47 color_1: (#f00)
48 color_2: (#00f)
49 fn get_color(self) -> vec4 {
50 return mix(self.color_1, self.color_2, self.pos.y);
51 }
52 }
53 }
54
55}
56
57#[derive(Live, LiveHook, Widget)]
58pub struct Icon {
59 #[redraw]
60 #[live]
61 draw_bg: DrawQuad,
62 #[live]
63 draw_icon: DrawIcon,
64 #[live]
65 icon_walk: Walk,
66 #[walk]
67 walk: Walk,
68 #[layout]
69 layout: Layout,
70}
71
72impl Widget for Icon {
73 fn handle_event(&mut self, _cx: &mut Cx, _event: &Event, _scope: &mut Scope) {
74 }
75
76 fn draw_walk(&mut self, cx: &mut Cx2d, _scope: &mut Scope, walk: Walk) -> DrawStep {
77 self.draw_bg.begin(cx, walk, self.layout);
78 self.draw_icon.draw_walk(cx, self.icon_walk);
79 self.draw_bg.end(cx);
80 DrawStep::done()
81 }
82}