getting closer

This commit is contained in:
Chris Cochrun 2026-04-03 11:23:13 -05:00
parent 679a2cafa5
commit ff2bfc4f86
13 changed files with 182 additions and 135 deletions

View file

@ -376,7 +376,7 @@ where
}
fn layout(
&self,
&mut self,
tree: &mut Tree,
renderer: &Renderer,
limits: &layout::Limits,
@ -392,44 +392,42 @@ where
self.padding,
self.spacing,
self.align,
&self.children,
self.children.as_mut(),
&mut tree.children,
)
}
fn operate(
&self,
&mut self,
tree: &mut Tree,
layout: Layout<'_>,
renderer: &Renderer,
operation: &mut dyn Operation,
) {
operation.container(
None,
layout.bounds(),
&mut |operation| {
self.children
.iter()
.zip(&mut tree.children)
.zip(layout.children())
.for_each(|((child, state), c_layout)| {
child.as_widget().operate(
state,
c_layout.with_virtual_offset(
layout.virtual_offset(),
),
renderer,
operation,
);
});
},
);
operation.container(None, layout.bounds());
operation.traverse(&mut |operation| {
self.children
.iter_mut()
.zip(&mut tree.children)
.zip(layout.children())
.for_each(|((child, state), c_layout)| {
child.as_widget_mut().operate(
state,
c_layout.with_virtual_offset(
layout.virtual_offset(),
),
renderer,
operation,
);
});
});
}
fn on_event(
fn update(
&mut self,
tree: &mut Tree,
event: Event,
event: &Event,
layout: Layout<'_>,
cursor: mouse::Cursor,
renderer: &Renderer,
@ -560,9 +558,9 @@ where
.zip(&mut tree.children)
.zip(layout.children())
.map(|((child, state), c_layout)| {
child.as_widget_mut().on_event(
child.as_widget_mut().update(
state,
event.clone(),
&event.clone(),
c_layout
.with_virtual_offset(layout.virtual_offset()),
cursor,
@ -572,7 +570,15 @@ where
viewport,
)
})
.fold(event::Status::Ignored, event::Status::merge);
.fold(
event::Status::Ignored,
|arg0: cosmic::iced::event::Status, arg1: ()| {
event::Status::merge(
event::Status::Ignored,
arg0, /* cosmic::iced::event::Status */
)
},
);
event::Status::merge(event_status, child_status)
}
@ -807,8 +813,9 @@ where
fn overlay<'b>(
&'b mut self,
tree: &'b mut Tree,
layout: Layout<'_>,
layout: Layout<'b>,
renderer: &Renderer,
viewport: &Rectangle,
translation: Vector,
) -> Option<overlay::Element<'b, Message, Theme, Renderer>> {
overlay::from_children(
@ -816,6 +823,7 @@ where
tree,
layout,
renderer,
viewport,
translation,
)
}

View file

@ -371,7 +371,7 @@ where
}
fn layout(
&self,
&mut self,
tree: &mut Tree,
renderer: &Renderer,
limits: &layout::Limits,
@ -385,39 +385,36 @@ where
self.padding,
self.spacing,
self.align,
&self.children,
&mut self.children,
&mut tree.children,
)
}
fn operate(
&self,
&mut self,
tree: &mut Tree,
layout: Layout<'_>,
renderer: &Renderer,
operation: &mut dyn Operation,
) {
operation.container(
None,
layout.bounds(),
&mut |operation| {
self.children
.iter()
.zip(&mut tree.children)
.zip(layout.children())
.for_each(|((child, state), layout)| {
child.as_widget().operate(
state, layout, renderer, operation,
);
});
},
);
operation.container(None, layout.bounds());
operation.traverse(&mut |operation| {
self.children
.iter_mut()
.zip(&mut tree.children)
.zip(layout.children())
.for_each(|((child, state), layout)| {
child
.as_widget_mut()
.operate(state, layout, renderer, operation);
});
});
}
fn on_event(
fn update(
&mut self,
tree: &mut Tree,
event: Event,
event: &Event,
layout: Layout<'_>,
cursor: mouse::Cursor,
renderer: &Renderer,
@ -548,9 +545,9 @@ where
.zip(&mut tree.children)
.zip(layout.children())
.map(|((child, state), layout)| {
child.as_widget_mut().on_event(
child.as_widget_mut().update(
state,
event.clone(),
&event.clone(),
layout,
cursor,
renderer,
@ -559,7 +556,15 @@ where
viewport,
)
})
.fold(event::Status::Ignored, event::Status::merge);
.fold(
event::Status::Ignored,
|arg0: cosmic::iced::event::Status, arg1: ()| {
event::Status::merge(
event::Status::Ignored,
arg0, /* cosmic::iced::event::Status */
)
},
);
event::Status::merge(event_status, child_status)
}
@ -769,8 +774,9 @@ where
fn overlay<'b>(
&'b mut self,
tree: &'b mut Tree,
layout: Layout<'_>,
layout: Layout<'b>,
renderer: &Renderer,
viewport: &Rectangle,
translation: Vector,
) -> Option<overlay::Element<'b, Message, Theme, Renderer>> {
overlay::from_children(
@ -778,6 +784,7 @@ where
tree,
layout,
renderer,
viewport,
translation,
)
}
@ -833,7 +840,7 @@ where
}
fn layout(
&self,
&mut self,
tree: &mut Tree,
renderer: &Renderer,
limits: &layout::Limits,
@ -875,8 +882,8 @@ where
}
};
for (i, child) in self.row.children.iter().enumerate() {
let node = child.as_widget().layout(
for (i, child) in self.row.children.iter_mut().enumerate() {
let node = child.as_widget_mut().layout(
&mut tree.children[i],
renderer,
&limits,
@ -927,7 +934,7 @@ where
}
fn operate(
&self,
&mut self,
tree: &mut Tree,
layout: Layout<'_>,
renderer: &Renderer,
@ -936,10 +943,10 @@ where
self.row.operate(tree, layout, renderer, operation);
}
fn on_event(
fn update(
&mut self,
tree: &mut Tree,
event: Event,
event: &Event,
layout: Layout<'_>,
cursor: mouse::Cursor,
renderer: &Renderer,
@ -947,7 +954,7 @@ where
shell: &mut Shell<'_, Message>,
viewport: &Rectangle,
) -> event::Status {
self.row.on_event(
self.row.update(
tree, event, layout, cursor, renderer, clipboard, shell,
viewport,
)
@ -984,11 +991,18 @@ where
fn overlay<'b>(
&'b mut self,
tree: &'b mut Tree,
layout: Layout<'_>,
layout: Layout<'b>,
renderer: &Renderer,
viewport: &Rectangle,
translation: Vector,
) -> Option<overlay::Element<'b, Message, Theme, Renderer>> {
self.row.overlay(tree, layout, renderer, translation)
self.row.overlay(
tree,
layout,
renderer,
viewport,
translation,
)
}
}

View file

@ -40,7 +40,7 @@ where
}
fn layout(
&self,
&mut self,
_tree: &mut widget::Tree,
_renderer: &Renderer,
_limits: &layout::Limits,

View file

@ -5,7 +5,8 @@ use cosmic::{
iced_widget::{column, row},
theme,
widget::{
button, combo_box, container, horizontal_space, icon,
button, combo_box, container, icon,
space::{self, horizontal},
text_editor,
},
};
@ -62,12 +63,12 @@ impl VerseEditor {
let verse = self.verse_name;
Action::UpdateVerse((verse, lyrics))
}
text_editor::Action::Scroll { pixels } => {
text_editor::Action::Scroll { lines } => {
if self.content.line_count() > 6 {
self.content.perform(action);
Action::None
} else {
Action::ScrollVerses(pixels)
Action::ScrollVerses(lines as f32)
}
}
_ => {
@ -109,12 +110,12 @@ impl VerseEditor {
);
let verse_title =
row![combo, horizontal_space(), delete_button];
row![combo, space::horizontal(), delete_button];
let lyric: Element<Message> = if self.verse_name
== VerseName::Blank
{
horizontal_space().into()
space::horizontal().into()
} else {
text_editor(&self.content)
.on_action(Message::UpdateLyric)
@ -131,15 +132,11 @@ impl VerseEditor {
.into(),
),
border: Border::default()
.rounded(space_s)
.rounded(space_s as u8)
.width(2)
.color(
t.cosmic().bg_component_divider(),
),
icon: t
.cosmic()
.primary_component_color()
.into(),
placeholder: neutral
.with_alpha(0.7)
.into(),
@ -147,13 +144,15 @@ impl VerseEditor {
selection: t.cosmic().accent.base.into(),
};
let hovered_border = Border::default()
.rounded(space_s)
.rounded(space_s as u8)
.width(3)
.color(t.cosmic().accent.hover);
match s {
text_editor::Status::Active => base_style,
text_editor::Status::Hovered
| text_editor::Status::Focused => {
| text_editor::Status::Focused {
..
} => {
base_style.border = hovered_border;
base_style
}