wip rebase updates
This commit is contained in:
parent
86dcf8af6c
commit
e10459fb37
68 changed files with 1776 additions and 1544 deletions
|
|
@ -23,7 +23,7 @@ use iced::{
|
|||
event, keyboard, mouse, touch, window,
|
||||
};
|
||||
use iced_core::mouse::ScrollDelta;
|
||||
use iced_core::text::{Ellipsize, LineHeight, Renderer as TextRenderer, Shaping, Wrapping};
|
||||
use iced_core::text::{self, Ellipsize, LineHeight, Renderer as TextRenderer, Shaping, Wrapping};
|
||||
use iced_core::widget::operation::Focusable;
|
||||
use iced_core::widget::{self, operation, tree};
|
||||
use iced_core::{Border, Point, Renderer as IcedRenderer, Shadow, Text};
|
||||
|
|
@ -265,22 +265,33 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
let text = Text {
|
||||
content: text.as_ref(),
|
||||
size: iced::Pixels(self.font_size),
|
||||
bounds: Size::INFINITY,
|
||||
font,
|
||||
horizontal_alignment: alignment::Horizontal::Left,
|
||||
vertical_alignment: alignment::Vertical::Center,
|
||||
shaping: Shaping::Advanced,
|
||||
wrapping: Wrapping::None,
|
||||
ellipsize: Ellipsize::None,
|
||||
line_height: self.line_height,
|
||||
};
|
||||
|
||||
if let Some(paragraph) = state.paragraphs.get_mut(key) {
|
||||
let text = Text {
|
||||
content: text.as_ref(),
|
||||
size: iced::Pixels(self.font_size),
|
||||
bounds: Size::INFINITE,
|
||||
font,
|
||||
align_x: text::Alignment::Left,
|
||||
align_y: alignment::Vertical::Center,
|
||||
shaping: Shaping::Advanced,
|
||||
wrapping: Wrapping::None,
|
||||
line_height: self.line_height,
|
||||
ellipsize: Ellipsize::default(),
|
||||
};
|
||||
paragraph.update(text);
|
||||
} else {
|
||||
let text = Text {
|
||||
content: text.to_string(),
|
||||
size: iced::Pixels(self.font_size),
|
||||
bounds: Size::INFINITE,
|
||||
font,
|
||||
align_x: text::Alignment::Left,
|
||||
align_y: alignment::Vertical::Center,
|
||||
shaping: Shaping::Advanced,
|
||||
wrapping: Wrapping::None,
|
||||
line_height: self.line_height,
|
||||
ellipsize: Ellipsize::default(),
|
||||
};
|
||||
state.paragraphs.insert(key, crate::Plain::new(text));
|
||||
}
|
||||
}
|
||||
|
|
@ -441,7 +452,7 @@ where
|
|||
}
|
||||
|
||||
/// Item the previous item in the widget.
|
||||
fn focus_previous(&mut self, state: &mut LocalState) -> event::Status {
|
||||
fn focus_previous(&mut self, state: &mut LocalState, shell: &mut Shell<'_, Message>) {
|
||||
match state.focused_item {
|
||||
Item::Tab(entity) => {
|
||||
let mut keys = self.iterate_visible_tabs(state).rev();
|
||||
|
|
@ -455,7 +466,8 @@ where
|
|||
}
|
||||
|
||||
state.focused_item = Item::Tab(key);
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
@ -464,24 +476,28 @@ where
|
|||
|
||||
if self.prev_tab_sensitive(state) {
|
||||
state.focused_item = Item::PrevButton;
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Item::NextButton => {
|
||||
if let Some(last) = self.last_tab(state) {
|
||||
state.focused_item = Item::Tab(last);
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Item::None => {
|
||||
if self.next_tab_sensitive(state) {
|
||||
state.focused_item = Item::NextButton;
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
} else if let Some(last) = self.last_tab(state) {
|
||||
state.focused_item = Item::Tab(last);
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -489,11 +505,10 @@ where
|
|||
}
|
||||
|
||||
state.focused_item = Item::None;
|
||||
event::Status::Ignored
|
||||
}
|
||||
|
||||
/// Item the next item in the widget.
|
||||
fn focus_next(&mut self, state: &mut LocalState) -> event::Status {
|
||||
fn focus_next(&mut self, state: &mut LocalState, shell: &mut Shell<'_, Message>) {
|
||||
match state.focused_item {
|
||||
Item::Tab(entity) => {
|
||||
let mut keys = self.iterate_visible_tabs(state);
|
||||
|
|
@ -506,7 +521,8 @@ where
|
|||
}
|
||||
|
||||
state.focused_item = Item::Tab(key);
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
@ -515,24 +531,28 @@ where
|
|||
|
||||
if self.next_tab_sensitive(state) {
|
||||
state.focused_item = Item::NextButton;
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Item::PrevButton => {
|
||||
if let Some(first) = self.first_tab(state) {
|
||||
state.focused_item = Item::Tab(first);
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Item::None => {
|
||||
if self.prev_tab_sensitive(state) {
|
||||
state.focused_item = Item::PrevButton;
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
} else if let Some(first) = self.first_tab(state) {
|
||||
state.focused_item = Item::Tab(first);
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -540,7 +560,6 @@ where
|
|||
}
|
||||
|
||||
state.focused_item = Item::None;
|
||||
event::Status::Ignored
|
||||
}
|
||||
|
||||
fn iterate_visible_tabs<'b>(
|
||||
|
|
@ -595,12 +614,12 @@ where
|
|||
icon_spacing = f32::from(self.button_spacing);
|
||||
let paragraph = entry.or_insert_with(|| {
|
||||
crate::Plain::new(Text {
|
||||
content: text.as_ref(),
|
||||
content: text.to_string(), // TODO should we just use String at this point?
|
||||
size: iced::Pixels(self.font_size),
|
||||
bounds: Size::INFINITY,
|
||||
bounds: Size::INFINITE,
|
||||
font,
|
||||
horizontal_alignment: alignment::Horizontal::Left,
|
||||
vertical_alignment: alignment::Vertical::Center,
|
||||
align_x: text::Alignment::Left,
|
||||
align_y: alignment::Vertical::Center,
|
||||
shaping: Shaping::Advanced,
|
||||
wrapping: Wrapping::default(),
|
||||
ellipsize: Ellipsize::default(),
|
||||
|
|
@ -888,7 +907,7 @@ where
|
|||
}
|
||||
|
||||
fn layout(
|
||||
&self,
|
||||
&mut self,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
limits: &layout::Limits,
|
||||
|
|
@ -902,17 +921,17 @@ where
|
|||
}
|
||||
|
||||
#[allow(clippy::too_many_lines)]
|
||||
fn on_event(
|
||||
fn update(
|
||||
&mut self,
|
||||
tree: &mut Tree,
|
||||
mut event: Event,
|
||||
mut event: &Event,
|
||||
layout: Layout<'_>,
|
||||
cursor_position: mouse::Cursor,
|
||||
_renderer: &Renderer,
|
||||
clipboard: &mut dyn Clipboard,
|
||||
shell: &mut Shell<'_, Message>,
|
||||
_viewport: &iced::Rectangle,
|
||||
) -> event::Status {
|
||||
) {
|
||||
let my_bounds = layout.bounds();
|
||||
let state = tree.state.downcast_mut::<LocalState>();
|
||||
|
||||
|
|
@ -941,7 +960,8 @@ where
|
|||
"tab drag source finished id={:?}",
|
||||
my_id
|
||||
);
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
DndEvent::Offer(
|
||||
|
|
@ -1137,8 +1157,8 @@ where
|
|||
});
|
||||
|
||||
let (maybe_msg, ret) = state.dnd_state.on_data_received(
|
||||
mem::take(mime_type),
|
||||
mem::take(data),
|
||||
mime_type.clone(),
|
||||
data.clone(),
|
||||
None::<fn(_, _) -> Message>,
|
||||
on_drop,
|
||||
);
|
||||
|
|
@ -1160,10 +1180,11 @@ where
|
|||
}
|
||||
if let Some(on_reorder) = self.on_reorder.as_ref() {
|
||||
shell.publish(on_reorder(event));
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
return;
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
|
|
@ -1175,7 +1196,7 @@ where
|
|||
|
||||
match event {
|
||||
Event::Touch(touch::Event::FingerPressed { id, .. }) => {
|
||||
state.fingers_pressed.insert(id);
|
||||
state.fingers_pressed.insert(*id);
|
||||
}
|
||||
|
||||
Event::Touch(touch::Event::FingerLifted { id, .. }) => {
|
||||
|
|
@ -1252,7 +1273,8 @@ where
|
|||
|| (touch_lifted(&event) && fingers_pressed == 1))
|
||||
{
|
||||
shell.publish(on_close(key));
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
|
||||
if self.on_middle_press.is_none() {
|
||||
|
|
@ -1263,7 +1285,8 @@ where
|
|||
{
|
||||
if state.middle_clicked == Some(Item::Tab(key)) {
|
||||
shell.publish(on_close(key));
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
|
||||
state.middle_clicked = None;
|
||||
|
|
@ -1315,7 +1338,8 @@ where
|
|||
state.set_focused();
|
||||
state.focused_item = Item::Tab(key);
|
||||
state.pressed_item = None;
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1336,7 +1360,8 @@ where
|
|||
});
|
||||
|
||||
shell.publish(on_context(key));
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1347,7 +1372,8 @@ where
|
|||
state.middle_clicked = Some(Item::Tab(key));
|
||||
if let Some(on_middle_press) = self.on_middle_press.as_ref() {
|
||||
shell.publish(on_middle_press(key));
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1374,7 +1400,7 @@ where
|
|||
ScrollDelta::Lines { y, .. } | ScrollDelta::Pixels { y, .. } => {
|
||||
let mut activate_key = None;
|
||||
|
||||
if y < 0.0 {
|
||||
if *y < 0.0 {
|
||||
let mut prev_key = Entity::null();
|
||||
|
||||
for key in self.model.order.iter().copied() {
|
||||
|
|
@ -1386,7 +1412,7 @@ where
|
|||
prev_key = key;
|
||||
}
|
||||
}
|
||||
} else if y > 0.0 {
|
||||
} else if *y > 0.0 {
|
||||
let mut buttons = self.model.order.iter().copied();
|
||||
while let Some(key) = buttons.next() {
|
||||
if self.model.is_active(key) {
|
||||
|
|
@ -1405,7 +1431,8 @@ where
|
|||
shell.publish(on_activate(key));
|
||||
state.set_focused();
|
||||
state.focused_item = Item::Tab(key);
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1424,7 +1451,7 @@ where
|
|||
if is_pressed(&event) {
|
||||
state.unfocus();
|
||||
state.pressed_item = None;
|
||||
return event::Status::Ignored;
|
||||
return;
|
||||
}
|
||||
} else if is_lifted(&event) {
|
||||
state.pressed_item = None;
|
||||
|
|
@ -1452,7 +1479,8 @@ where
|
|||
position,
|
||||
clipboard,
|
||||
) {
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1475,12 +1503,10 @@ where
|
|||
}) = event
|
||||
{
|
||||
state.focused_visible = true;
|
||||
return if modifiers == keyboard::Modifiers::SHIFT {
|
||||
self.focus_previous(state)
|
||||
return if *modifiers == keyboard::Modifiers::SHIFT {
|
||||
self.focus_previous(state, shell)
|
||||
} else if modifiers.is_empty() {
|
||||
self.focus_next(state)
|
||||
} else {
|
||||
event::Status::Ignored
|
||||
self.focus_next(state, shell)
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -1524,24 +1550,23 @@ where
|
|||
Item::None | Item::Set => (),
|
||||
}
|
||||
|
||||
return event::Status::Captured;
|
||||
shell.capture_event();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
event::Status::Ignored
|
||||
}
|
||||
|
||||
fn operate(
|
||||
&self,
|
||||
&mut self,
|
||||
tree: &mut Tree,
|
||||
_layout: Layout<'_>,
|
||||
layout: Layout<'_>,
|
||||
_renderer: &Renderer,
|
||||
operation: &mut dyn iced_core::widget::Operation<()>,
|
||||
) {
|
||||
let state = tree.state.downcast_mut::<LocalState>();
|
||||
operation.focusable(state, Some(&self.id.0));
|
||||
operation.custom(state, Some(&self.id.0));
|
||||
operation.focusable(Some(&self.id.0), layout.bounds(), state);
|
||||
operation.custom(Some(&self.id.0), layout.bounds(), state);
|
||||
|
||||
if let Item::Set = state.focused_item {
|
||||
if self.prev_tab_sensitive(state) {
|
||||
|
|
@ -1616,6 +1641,7 @@ where
|
|||
bounds,
|
||||
border: appearance.border,
|
||||
shadow: Shadow::default(),
|
||||
snap: true,
|
||||
},
|
||||
background,
|
||||
);
|
||||
|
|
@ -1644,6 +1670,7 @@ where
|
|||
..Default::default()
|
||||
},
|
||||
shadow: Shadow::default(),
|
||||
snap: true,
|
||||
},
|
||||
background_appearance
|
||||
.background
|
||||
|
|
@ -1692,6 +1719,7 @@ where
|
|||
..Default::default()
|
||||
},
|
||||
shadow: Shadow::default(),
|
||||
snap: true,
|
||||
},
|
||||
background_appearance
|
||||
.background
|
||||
|
|
@ -1747,6 +1775,7 @@ where
|
|||
bounds,
|
||||
border: Border::default(),
|
||||
shadow: Shadow::default(),
|
||||
snap: true,
|
||||
},
|
||||
{
|
||||
let theme = crate::theme::active();
|
||||
|
|
@ -1842,6 +1871,7 @@ where
|
|||
..Default::default()
|
||||
},
|
||||
shadow: Shadow::default(),
|
||||
snap: true,
|
||||
},
|
||||
appearance.active.text_color,
|
||||
);
|
||||
|
|
@ -1878,6 +1908,7 @@ where
|
|||
..Default::default()
|
||||
},
|
||||
shadow: Shadow::default(),
|
||||
snap: true,
|
||||
},
|
||||
divider_background,
|
||||
);
|
||||
|
|
@ -1910,6 +1941,7 @@ where
|
|||
button_appearance.border
|
||||
},
|
||||
shadow: Shadow::default(),
|
||||
snap: true,
|
||||
},
|
||||
status_appearance
|
||||
.background
|
||||
|
|
@ -2069,8 +2101,9 @@ where
|
|||
fn overlay<'b>(
|
||||
&'b mut self,
|
||||
tree: &'b mut Tree,
|
||||
layout: iced_core::Layout<'_>,
|
||||
layout: iced_core::Layout<'b>,
|
||||
_renderer: &Renderer,
|
||||
viewport: &iced_core::Rectangle,
|
||||
translation: Vector,
|
||||
) -> Option<iced_core::overlay::Element<'b, Message, crate::Theme, Renderer>> {
|
||||
let state = tree.state.downcast_mut::<LocalState>();
|
||||
|
|
@ -2662,6 +2695,7 @@ fn draw_drop_indicator(
|
|||
..Default::default()
|
||||
},
|
||||
shadow: Shadow::default(),
|
||||
snap: true,
|
||||
},
|
||||
Background::Color(color),
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue