This commit is contained in:
tsuki 2024-11-20 01:46:26 +08:00
parent 50ee6e6b77
commit 4366c64851
2 changed files with 55 additions and 10 deletions

View File

@ -129,7 +129,7 @@ live_design! {
<H4>{ text: "Input"} <H4>{ text: "Input"}
<SelectorItem> { <SelectorItem> {
text: "Selector Item" text: "PPI"
} }
<Group> { <Group> {

View File

@ -46,12 +46,32 @@ live_design! {
} }
SelectorItem = {{SelectorItem}} { SelectorItem = {{SelectorItem}} {
height: Fit height: 64.0
width: Fit width: 64.0
flow: Down
align: {x:0.5}
draw_bg: { draw_bg: {
instance radius:5.0
instance color: #0048E1
instance inset: vec4(0.0, 0.0, 0.0, 0.0)
fn get_color(self) -> vec4 {
return self.color
}
fn pixel(self) -> vec4 { fn pixel(self) -> vec4 {
return mix(#7,#4,self.pos.y); let sdf = Sdf2d::viewport(self.pos * self.rect_size)
sdf.box(
self.inset.x,
self.inset.y,
self.rect_size.x - (self.inset.x + self.inset.z),
self.rect_size.y - (self.inset.y + self.inset.w),
max(1.0, self.radius)
)
sdf.fill_keep(self.get_color())
return sdf.result;
} }
} }
draw_label: { draw_label: {
@ -64,10 +84,12 @@ live_design! {
// svg_file: ICO_SEARCH, // svg_file: ICO_SEARCH,
svg_file: dep("crate://self/resources/logo_makepad.svg") svg_file: dep("crate://self/resources/logo_makepad.svg")
fn get_color(self) -> vec4 { fn get_color(self) -> vec4 {
return (THEME_COLOR_D_1) return (#ffffff)
} }
} }
icon_walk: {width: 250.0, height: Fit} icon_walk: {width: Fill, height: Fit}
label_walk: {width: Fit, height: Fit}
} }
} }
@ -95,6 +117,8 @@ pub enum SelectorItemAction {
#[derive(Live, Widget)] #[derive(Live, Widget)]
pub struct SelectorItem { pub struct SelectorItem {
#[redraw] #[redraw]
#[rust]
area: Area,
#[live] #[live]
draw_bg: DrawQuad, draw_bg: DrawQuad,
#[live] #[live]
@ -106,6 +130,10 @@ pub struct SelectorItem {
#[live] #[live]
icon_walk: Walk, icon_walk: Walk,
#[live]
label_walk: Walk,
#[layout]
layout: Layout,
#[rust] #[rust]
selected: bool, selected: bool,
@ -113,6 +141,9 @@ pub struct SelectorItem {
id: usize, id: usize,
#[live] #[live]
pub text: ArcStringMut, pub text: ArcStringMut,
#[rust]
pub keyboard_shift: f64,
} }
impl Widget for SelectorItem { impl Widget for SelectorItem {
@ -135,15 +166,29 @@ impl Widget for SelectorItem {
} }
} }
fn draw_walk(&mut self, cx: &mut Cx2d, scope: &mut Scope, walk: Walk) -> DrawStep { fn draw_walk(&mut self, cx: &mut Cx2d, scope: &mut Scope, walk: Walk) -> DrawStep {
self.draw_bg.begin(cx, walk, Layout::default()); self.begin(cx, self.walk);
self.draw_bg.begin(cx, self.walk, self.layout);
self.draw_icon.draw_walk(cx, self.icon_walk); self.draw_icon.draw_walk(cx, self.icon_walk);
self.draw_label
.draw_walk(cx, walk, Align::default(), self.text.as_ref());
self.draw_bg.end(cx); self.draw_bg.end(cx);
self.end(cx);
self.begin(cx, walk);
self.draw_label.draw_walk(cx, Walk::fit(), Align { x: 0.5, y: 0.5 }, self.text.as_ref());
self.end(cx);
DrawStep::done() DrawStep::done()
} }
} }
impl SelectorItem {} impl SelectorItem {
fn begin(&mut self, cx: &mut Cx2d, walk: Walk) {
cx.begin_turtle(walk, self.layout.with_scroll(dvec2(0.,self.keyboard_shift)));
}
fn end(&mut self, cx: &mut Cx2d) {
cx.end_turtle_with_area(&mut self.area);
}
}
impl LiveHook for SelectorItem {} impl LiveHook for SelectorItem {}