1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
use {Color, Colorable, Dimensions, Sizeable, Widget};
use super::Style as Style;
use widget;
#[derive(Copy, Clone, Debug)]
pub struct Oval {
pub common: widget::CommonBuilder,
pub style: Style,
}
#[derive(Copy, Clone, Debug, PartialEq)]
pub struct State;
impl Oval {
pub fn styled(dim: Dimensions, style: Style) -> Self {
Oval {
common: widget::CommonBuilder::new(),
style: style,
}.wh(dim)
}
pub fn fill(dim: Dimensions) -> Self {
Oval::styled(dim, Style::fill())
}
pub fn fill_with(dim: Dimensions, color: Color) -> Self {
Oval::styled(dim, Style::fill_with(color))
}
pub fn outline(dim: Dimensions) -> Self {
Oval::styled(dim, Style::outline())
}
pub fn outline_styled(dim: Dimensions, line_style: widget::line::Style) -> Self {
Oval::styled(dim, Style::outline_styled(line_style))
}
}
impl Widget for Oval {
type State = State;
type Style = Style;
type Event = ();
fn common(&self) -> &widget::CommonBuilder {
&self.common
}
fn common_mut(&mut self) -> &mut widget::CommonBuilder {
&mut self.common
}
fn init_state(&self, _: widget::id::Generator) -> Self::State {
State
}
fn style(&self) -> Self::Style {
self.style.clone()
}
fn update(self, _args: widget::UpdateArgs<Self>) -> Self::Event {
}
}
impl Colorable for Oval {
fn color(mut self, color: Color) -> Self {
self.style.set_color(color);
self
}
}